本文档介绍了在 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.KerasLayer、hub.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 目标读取模型。