模型托管协议

本文档介绍了在 tfhub.dev 上托管所有模型类型(TFJS、TF Lite 和 TensorFlow 模型)时使用的网址惯例。此外,本文档还介绍了由 tensorflow_hub 库实现的基于 HTTP(S) 的协议,目的是将 tfhub.dev 中的 TensorFlow 模型和兼容服务加载到 TensorFlow 程序中。

它的关键功能是在代码中使用相同的网址来加载模型,并在浏览器中使用相同的网址来查看模型文档。

通用网址惯例

tfhub.dev 支持以下网址格式:

  • 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 模型具有版本化网址 <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/<model_name>/<version> 和可解析为最新版本模型的未版本化网址 <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/<model_name>

通过将网址参数附加到 tfhub.dev 模型网址,可以将 TF Hub 模型下载为压缩资源。但是,实现该目标所需的网址参数取决于模型类型:

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

例如:

类型 模型网址 下载类型 网址参数 下载网址
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 分发服务应提供此协议的实现。

请注意,本部分不会介绍如何托管 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 库期望模型网址进行版本化,并且给定版本的模型内容是不可变的,以便可以无限期地对其进行缓存。详细了解缓存模型

未压缩托管

当环境变量 TFHUB_MODEL_LOAD_FORMAT 或命令行标志 --tfhub_model_load_format 设置为 UNCOMPRESSED 时,会直接从远程存储空间 (GCS) 读取模型,而不是在本地下载和解压缩模型。启用此行为后,库会将 ?tf-hub-format=uncompressed 附加到模型网址。该请求将返回 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 目标读取模型。