如何将 Cloud TPU 与 Tensorflow Lite Model Maker 结合使用?

Posted

技术标签:

【中文标题】如何将 Cloud TPU 与 Tensorflow Lite Model Maker 结合使用?【英文标题】:How can I use a Cloud TPU with Tensorflow Lite Model Maker? 【发布时间】:2021-10-02 15:30:24 【问题描述】:

我正在 Colab 中使用 Tensorflow Lite Model Maker 训练对象检测模型 (EfficientDet-Lite),并且我想使用 Cloud TPU。我有一个 GCS 存储桶中的所有图像并提供一个 CSV 文件。当我调用 object_detector.create 时,出现以下错误:

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/ops.py in shape(self)
   1196         # `_tensor_shape` is declared and defined in the definition of
   1197         # `EagerTensor`, in C.
-> 1198         self._tensor_shape = tensor_shape.TensorShape(self._shape_tuple())
   1199       except core._NotOkStatusException as e:
   1200         six.raise_from(core._status_to_exception(e.code, e.message), None)

InvalidArgumentError: Unsuccessful TensorSliceReader constructor: Failed to get matching files on /tmp/tfhub_modules/db7544dcac01f8894d77bea9d2ae3c41ba90574c/variables/variables: Unimplemented: File system scheme '[local]' not implemented (file: '/tmp/tfhub_modules/db7544dcac01f8894d77bea9d2ae3c41ba90574c/variables/variables')

看起来它正在尝试处理 CloudTPU 中的一些本地文件,这不起作用...

我正在做的事情的要点是:

tpu = tf.distribute.cluster_resolver.TPUClusterResolver()
train_data, validation_data, test_data = object_detector.DataLoader.from_csv(
    drive_dir + csv_name,
    images_dir = "images" if not tpu else None,
    cache_dir = drive_dir + "cub_cache",
)
spec = MODEL_SPEC(tflite_max_detections=10, strategy='tpu', tpu=tpu.master(), gcp_project="xxx")
model = object_detector.create(train_data=train_data, 
                               model_spec=spec, 
                               validation_data=validation_data, 
                               epochs=epochs, 
                               batch_size=batch_size,
                               train_whole_model=True)

我找不到任何使用 Cloud TPU 的 Model Maker 示例。

编辑:加载 EfficientDet 模型时似乎会​​发生错误,因此模型制作者必须以某种方式指向不适用于 CloudTPU 的本地文件?

【问题讨论】:

当您尝试使用本地系统加载数据集时,您的问题很常见。阅读本文以找出文件系统方案“本地”的可能解决方案。它不是模型制造商,但它会给你一些提示。 farmaker47.medium.com/… 感谢您的链接,但实际上我没有做任何事情,或者只是不适用于模型制造商...... 我已经打开了一个 github 问题 @tensorflow:github.com/tensorflow/tensorflow/issues/50965,我可以通过 Colab 中的一个最小修改的股票教程重现该问题:gist.github.com/tve/615f4b51fa88dc643358176c86d6537e 不错!有兴趣我会关注的 【参考方案1】:

是的,TFHub 发生了错误,这似乎是众所周知的。基本上,TF Hub 加载尝试使用 TPU 无法访问的本地缓存(Colab 甚至不提供)。查看https://github.com/tensorflow/hub/issues/604,它应该可以帮助您克服此错误。

【讨论】:

非常感谢您的指点!我不确定我要做什么才能让 ModelMaker 玩这个,但我想我必须玩一堆......【参考方案2】:
    从 TF-Hub 下载您要训练的模型(替换 X:0https://tfhub.dev/tensorflow/efficientdet/liteX/feature-vector/1 解压包两次,直到您到达“keras_metadata.pb”、“saved_model.pb”和“variables”文件夹 将这些文件和文件夹上传到 Google Cloud Bucket 将 uri 参数传递给 model_spec.get (https://www.tensorflow.org/lite/tutorials/model_maker_object_detection),指向 Cloud Bucket 文件夹(gs:// 格式)

【讨论】:

以上是关于如何将 Cloud TPU 与 Tensorflow Lite Model Maker 结合使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 Colab 连接到付费 TPU

如何在 Cloud TPU v2 中使用 SQUAD 2.0 训练 BERT 模型?

无法删除 Cloud TPU

我如何在谷歌云 TPU 上将 COCO 数据集转换为一组 TFRecords

存储在 Google Cloud 上的大量 TF 记录文件

将 TPU 与 PyTorch 一起使用