模型托管协议

本文档介绍了在 tfhub.dev 上托管所有模型类型(TFJS、TF Lite 和 TensorFlow 模型)时使用的 URL 约定。它还介绍了 tensorflow_hub 库实现的基于 HTTP(S) 的协议,以便将 TensorFlow 模型从 tfhub.dev 和兼容服务加载到 TensorFlow 程序中。

其主要功能是在代码中使用相同的 URL 加载模型,并在浏览器中查看模型文档。

通用 URL 约定

tfhub.dev 支持以下 URL 格式

  • TF Hub 发布者遵循 <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>
  • TF Hub 收藏遵循 <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/collection/<collection_name>
  • TF Hub 模型具有版本化 URL <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/<model_name>/<version> 和未版本化 URL <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/<model_name>,该 URL 解析为该模型的最新版本。

可以通过将 URL 参数附加到 tfhub.dev 模型 URL 来将 TF Hub 模型下载为压缩资产。但是,实现此目的所需的 URL 参数取决于模型类型

  • TensorFlow 模型(SavedModel 和 TF1 Hub 格式):将 ?tf-hub-format=compressed 附加到 TensorFlow 模型 URL。
  • TFJS 模型:将 ?tfjs-format=compressed 附加到 TFJS 模型 URL 以下载压缩文件,或将 /model.json?tfjs-format=file 附加到 TFJS 模型 URL 以从远程存储中读取。
  • TF Lite 模型:将 ?lite-format=tflite 附加到 TF Lite 模型 URL。

例如

类型 模型网址 下载类型 网址参数 下载网址
TensorFlow(SavedModel、TF1 Hub 格式) https://tfhub.dev/google/spice/2 .tar.gz ?tf-hub-format=compressed https://tfhub.dev/google/spice/2?tf-hub-format=compressed
TF Lite https://tfhub.dev/google/lite-model/spice/1 .tflite ?lite-format=tflite https://tfhub.dev/google/lite-model/spice/1?lite-format=tflite
TF.js https://tfhub.dev/google/tfjs-model/spice/2/default/1 .tar.gz ?tfjs-format=compressed https://tfhub.dev/google/tfjs-model/spice/2/default/1?tfjs-format=compressed

此外,某些模型还托管在一种格式中,可以直接从远程存储中读取,而无需下载。如果本地没有可用存储空间(例如在浏览器中运行 TF.js 模型或在 Colab 上加载 SavedModel),这会特别有用。请注意,读取未下载到本地而直接托管在远程位置的模型可能会增加延迟。

类型 模型网址 响应类型 网址参数 请求网址
TensorFlow(SavedModel、TF1 Hub 格式) https://tfhub.dev/google/spice/2 字符串(存储未压缩模型的 GCS 文件夹的路径) ?tf-hub-format=uncompressed https://tfhub.dev/google/spice/2?tf-hub-format=uncompressed
TF.js https://tfhub.dev/google/tfjs-model/spice/2/default/1 .json ?tfjs-format=file https://tfhub.dev/google/tfjs-model/spice/2/default/1/model.json?tfjs-format=file

tensorflow_hub 库协议

本部分介绍如何在 tfhub.dev 上托管模型,以便与 tensorflow_hub 库配合使用。如果您想托管自己的模型存储库以配合 tensorflow_hub 库使用,您的 HTTP(s) 分发服务应提供此协议的实现。

请注意,本部分不涉及托管 TF Lite 和 TFJS 模型,因为它们不会通过 tensorflow_hub 库下载。有关托管这些模型类型的更多信息,请查看上方

压缩托管

模型以压缩的 tar.gz 文件的形式存储在 tfhub.dev 上。默认情况下,tensorflow_hub 库会自动下载压缩模型。也可以通过将 ?tf-hub-format=compressed 附加到模型网址来手动下载,例如

wget https://tfhub.dev/tensorflow/albert_en_xxlarge/1?tf-hub-format=compressed

存档的根目录是模型目录的根目录,应包含 SavedModel,如下例所示

# Create a compressed model from a SavedModel directory.
$ tar -cz -f model.tar.gz --owner=0 --group=0 -C /tmp/export-model/ .

# Inspect files inside a compressed model
$ tar -tf model.tar.gz
./
./variables/
./variables/variables.data-00000-of-00001
./variables/variables.index
./assets/
./saved_model.pb

用于传统 TF1 Hub 格式 的 Tarball 也将包含一个 ./tfhub_module.pb 文件。

当调用 tensorflow_hub 库模型加载 API 之一(hub.KerasLayerhub.load 等)时,该库会下载模型、解压缩模型并将其缓存在本地。tensorflow_hub 库期望模型 URL 具有版本控制,并且给定版本的模型内容不可变,以便可以无限期地缓存。详细了解 模型缓存

未压缩托管

当环境变量 TFHUB_MODEL_LOAD_FORMAT 或命令行标志 --tfhub_model_load_format 设置为 UNCOMPRESSED 时,该模型将直接从远程存储(GCS)读取,而不是下载并解压缩到本地。启用此行为时,该库会将 ?tf-hub-format=uncompressed 附加到模型 URL。该请求返回 GCS 上包含未压缩模型文件的文件夹的路径。例如,

<a href="https://tfhub.dev/google/spice/2?tf-hub-format=uncompressed">https://tfhub.dev/google/spice/2?tf-hub-format=uncompressed</a>

在 303 响应的主体中返回

gs://tfhub-modules/google/spice/2/uncompressed。然后,该库从该 GCS 目标读取模型。