
文档开发工具教程【免费下载链接】docsTensorFlow documentation项目地址https://gitcode.com/gh_mirrors/doc/docs点击查看免费下载导读本文是 TensorFlow 官方文档库中 Caching model downloads from TF Hub 一文的深度展开系统讲解tensorflow_hub库加载模型时的两种底层模式压缩下载 本地磁盘缓存默认与直接从远程存储GCS读取。你将掌握TFHUB_CACHE_DIR、TFHUB_MODEL_LOAD_FORMAT、hub.resolve()等关键接口与配置项的完整用法并能针对 Colab TPU、磁盘空间受限等真实场景给出可复制的解决方案。一、两种模型加载模式本地缓存 vs 远程直读tensorflow_hub库下文简称hub目前支持两种模型下载模式模式触发方式磁盘占用适用环境压缩下载 磁盘缓存默认不设置任何加载格式变量高模型解压后占用磁盘绝大多数常规环境远程存储直读UNCOMPRESSEDTFHUB_MODEL_LOAD_FORMATUNCOMPRESSED或--tfhub_model_load_format极低无需缓存目录磁盘紧张但网络带宽与延迟极佳的环境无论采用哪种模式Python 代码中对hub函数的调用都可以、也应该继续使用 tfhub.dev 的规范模型 URL如https://tfhub.dev/google/nnlm-en-dim128/2。这类 URL 具有两个重要优点跨系统可移植代码中写死同一个句柄即可在任何机器上运行且可直接在浏览器中导航查看模型文档。这一设计正是 模型托管协议 的核心特征——代码里加载模型的 URL 与浏览器中查看文档的 URL 完全相同。在极少数情况下用户代码确实需要拿到模型在文件系统上的真实位置例如下载解压完成之后或把模型句柄解析为文件系统路径之后可以通过hub.resolve(handle)函数获得。仓库中的实际用例可参考 bird_vocalization_classifier.ipynb其中通过hub.resolve(model_handle) /assets/label.csv定位模型资产目录下的标签文件。二、压缩下载与磁盘缓存默认模式2.1 工作机制默认情况下hub库从 tfhub.dev或其他遵循托管协议的站点下载模型后会在文件系统上解压并缓存。这种模式适合大多数环境唯一例外是磁盘空间紧张、但网络带宽和延迟极佳的场景——此时应改用下面的远程直读模式。下载流程背后的协议细节参见 托管协议文档库通过向模型 URL 追加?tf-hub-formatcompressed参数下载.tar.gz压缩包解压后得到标准的 SavedModel 目录结构saved_model.pb、variables/、assets/等并将其缓存到本地。模型 URL 是带版本号的且给定版本的模型内容是不可变的因此缓存可以无限期保留。整个下载 → 解压 → 缓存 → 加载的流程如下图所示2.2 缓存位置默认值与三种自定义方式默认位置是本地临时目录具体为/tmp/tfhub_modules更准确地说是os.path.join(tempfile.gettempdir(), tfhub_modules)的求值结果。这个默认位置在大多数情况下都能正常工作。缓存位置可通过以下两种方式自定义设置环境变量TFHUB_CACHE_DIR推荐传入命令行参数--tfhub_cache_dir2.3 跨重启持久化缓存默认的临时目录在系统重启后可能被清理导致模型需要重新下载。希望持久化缓存的用户可以把TFHUB_CACHE_DIR指向主目录下的某个位置。例如Linux 系统使用 bash 的用户可以在~/.bashrc中加入如下一行export TFHUB_CACHE_DIR$HOME/.cache/tfhub_modules然后重启 shell 使配置生效此后所有hub下载的模型都会缓存到该目录。重要提醒使用持久化目录时不会有自动清理机制。缓存会随使用模型的增多不断累积需要用户自行管理磁盘空间。2.4 缓存目录故障排查如果程序在写入默认缓存目录/tmp/tfhub_modules或类似位置时失败可以参考 常见问题指南 的排查建议并根据本文第二节的方法显式修改缓存目录位置。此外该指南也给出了一种完全绕开缓存的备选方案手动用curl模拟协议下载解压模型到本地目录再把本地路径作为 handle 传给hub函数$ mkdir /tmp/moduleA $ curl -L https://tfhub.dev/google/universal-sentence-encoder/2?tf-hub-formatcompressed | tar -zxvC /tmp/moduleA2.5 缓存机制与历史 API 的一致性缓存机制不仅适用于 TF2 的hub.load()/hub.KerasLayerAPI也适用于旧版 TF1 Hub 格式。根据 TF1 Hub 格式文档当通过 URL 创建hub.Module时模块内容同样会被下载并缓存在系统临时目录位置同样可通过TFHUB_CACHE_DIR覆盖。也就是说无论使用新旧 API缓存配置是统一的。三、从远程存储直接读取UNCOMPRESSED 模式3.1 启用方式用户可以通过以下任一方式指示hub库直接从远程存储GCS读取模型而不是先下载到本地方式一设置环境变量os.environ[TFHUB_MODEL_LOAD_FORMAT] UNCOMPRESSED方式二设置命令行参数--tfhub_model_load_format UNCOMPRESSED3.2 底层协议启用该模式后库不再下载压缩包而是向模型 URL 追加?tf-hub-formatuncompressed参数发起请求。根据托管协议文档的说明该请求会返回一个指向 GCS 上未压缩模型文件夹的路径。例如请求https://tfhub.dev/google/spice/2?tf-hub-formatuncompressed会在 303 响应体中得到类似gs://kaggle-tfhub-models-uncompressed/tfhub-modules/google/spice/2/uncompressed的 GCS 路径库随后直接从该 GCS 位置读取模型。3.3 适用场景与注意事项这种模式无需任何缓存目录特别适合磁盘空间小、但网络连接快的环境。需要留意的是远程直读可能带来更高的延迟——这一点在托管协议文档中同样有明确提示因为每次读取都可能涉及网络往返而不是本地磁盘访问。因此决策依据应当是本地磁盘空间 vs 网络带宽与延迟之间的权衡。四、Colab TPU 场景缓存冲突与两种解决方案在 colab.research.google.com 上使用 TPU 时下载压缩模型会与 TPU 运行时产生冲突。原因在于TPU 模式下计算负载被委派给另一台机器执行而该机器默认无法访问 Colab 主机的缓存目录——也就是说模型虽然下载到了 Colab 主机TPU worker 却读不到。针对这一情况官方提供了两种成熟的工作区方案方案 1使用 TPU worker 可访问的 GCS 桶最简单的做法是让hub库按第三节的方式从 TF Hub 的 GCS 桶直接读取模型。如果用户自己有 GCS 桶也可以把桶中的某个目录指定为缓存位置import os os.environ[TFHUB_CACHE_DIR] gs://my-bucket/tfhub-modules-cache这段代码必须在调用tensorflow_hub库之前执行。由于 GCS 桶是 TPU worker 与 Colab 主机都能访问的共享存储缓存位置的冲突就得到了解决。方案 2将所有读取重定向到 Colab 主机另一种思路是把所有读取包括大变量的读取都重定向到 Colab 主机上通过tf.saved_model.LoadOptions指定 I/O 设备为 localhost 实现load_options tf.saved_model.LoadOptions(experimental_io_device/job:localhost) reloaded_model hub.load(https://tfhub.dev/..., optionsload_options)这样模型数据先由 Colab 主机读取再分发到 TPU 设备绕开了 worker 无法访问缓存的问题。关于句柄的补充说明上面代码中的https://tfhub.dev/...只是示意。关于哪些 handle 是合法的tfhub.dev URL、文件系统路径、Kaggle Models URL 等详见 SavedModels from TF Hub in TensorFlow 2 的 Model Handles 一节。五、决策速查表与最佳实践场景推荐配置常规训练/推理磁盘充足使用默认缓存如需跨重启保留设置TFHUB_CACHE_DIR$HOME/.cache/tfhub_modules磁盘空间紧张、网络快速os.environ[TFHUB_MODEL_LOAD_FORMAT] UNCOMPRESSED无需缓存目录Colab TPU方案一读取 TF Hub GCS 桶或设置TFHUB_CACHE_DIR为自己的 GCS 桶路径方案二LoadOptions(experimental_io_device/job:localhost)需要拿到模型真实文件路径调用hub.resolve(handle)获取解压后/解析后的文件系统位置几个关键要点总结代码中始终使用规范 URL无论底层采用哪种加载模式业务代码都应写 tfhub.dev 的规范模型 URL保持可移植性与文档可导航性缓存无自动清理使用持久化TFHUB_CACHE_DIR时需自行管理磁盘空间参考 caching.md版本不可变给定版本的模型资产不可变因此缓存可无限期复用模型更新通过发布新版本实现参见 common_issues.md新旧 API 配置统一TFHUB_CACHE_DIR同时作用于 TF2 的hub.load()/hub.KerasLayer与旧版hub.Module见 tf1_hub_module.md。延伸阅读模型托管协议含 URL 参数与压缩/未压缩托管细节TF2 SavedModels 的加载、句柄与微调指南TF1 Hub 格式与缓存行为常见问题排查缓存目录写入失败、手动下载等赞分享文档开发工具教程【免费下载链接】docsTensorFlow documentation项目地址https://gitcode.com/gh_mirrors/doc/docs点击查看免费下载相关推荐OneFlow Hub 模型仓库实战指南发布、加载与缓存机制全解析OneFlow Hub 模型仓库实战指南发布、加载与缓存机制全解析 OneFlow Hub 是 OneFlow 深度学习框架内置的预训练模型分发与加载机制旨深度学习分布式训练模型优化TensorFlow Hub 库tensorflow_hub使用指南加载、缓存与复用预训练模型TensorFlow Hub 库tensorflow_hub使用指南加载、缓存与复用预训练模型 tensorflow_hub 是 TensorFlow 官文档开发工具教程AlpaSim仿真服务配置场景下载机制如何从远程存储服务自动下载仿真场景资源文件AlpaSim仿真服务配置场景下载机制如何从远程存储服务自动下载仿真场景资源文件 AlpaSim是一个功能强大的自动驾驶仿真平台其场景下载机制是实现高效仿真自动驾驶科研上一篇CMS架构设计Instatic组件化与模块化实现指南下一篇LinvoDB3实战5个关键技巧优化Electron和NW.js应用的数据存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考