模型权重
huggingface_hub 读 HF_ENDPOINT,而平台会把 FORGE_HF_ENDPOINT 原样注入每个训练容器和
Playground 容器。把它指向一个反向代理即可——Nexus、Artifactory,或者任何能代理 Hub 的东西。
有两项调整会自动跟着一起生效,它们的存在都是因为某种极难诊断的失败:
超时被放宽
超时被放宽
huggingface_hub 默认十秒超时。镜像第一次取一个它从未缓存过的文件时要一路回源,
这经常超过十秒。症状是冷文件下载失败、重试又成功,看起来像网络不稳定,而不像配置问题。Xet 被关闭
Xet 被关闭
Xet 需要短时效 token,而反向代理签不出来。不关的话,权重下载会卡在一个 400 上,
而那个响应体里除了一个 URL 什么都没有——没有消息、没有字段,连搜都没得搜。如果你的镜像确实实现了 Xet,用
FORGE_PASSTHROUGH_ENV 显式覆盖。容器镜像
训练镜像来自 recipe catalog,而 catalog 里写的是nvcr.io 这类公共仓库。内网里需要先转存再重定向:
生产环境用 digest 而不是 tag。在你自己的镜像仓库里挪动的 tag,仍然是一个挪动过的 tag。
在镜像站后面构建镜像
Dockerfile 默认走公共上游,所以在哪都能构建。用 build 参数把它指向内网镜像站:APT_MIRROR 留空就保持 Debian 自己的源——能正常访问互联网的机器上你要的就是这个。
平台运行时
作业侧需要starforge 才能回传指标,而训练镜像里不会有它。
默认的 FORGE_JOB_RUNNER_MODE=bundled 不需要任何网络就解决了这件事:
服务端把一个内容寻址的 PEX 注入作业,训练镜像不需要预装任何东西。
这是少数几个「离线反而更简单」的地方——这项设置保持默认就好。
数据集
这里没有任何东西需要访问互联网。数据集用sf dataset push 推进部署自己的对象存储,
作业启动时拉进共享缓存。见数据集。
确认成功
提交快速开始里那个作业,看日志。你要看到的顺序是:HF_ENDPOINT 的是平台,而不是你自己的脚本。