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