模型权重
huggingface_hub 读 HF_ENDPOINT,而平台会把 TUNEPLANE_HF_ENDPOINT 原样注入每个训练容器和
Playground 容器。把它指向一个反向代理即可——Nexus、Artifactory,或者任何能代理 Hub 的东西。
有两项调整会自动跟着一起生效,它们的存在都是因为某种极难诊断的失败:
超时被放宽
超时被放宽
huggingface_hub 默认十秒超时。镜像第一次取一个它从未缓存过的文件时要一路回源,
这经常超过十秒。症状是冷文件下载失败、重试又成功,看起来像网络不稳定,而不像配置问题。Xet 被关闭
Xet 被关闭
Xet 需要短时效 token,而反向代理签不出来。不关的话,权重下载会卡在一个 400 上,
而那个响应体里除了一个 URL 什么都没有——没有消息、没有字段,连搜都没得搜。如果你的镜像确实实现了 Xet,用
TUNEPLANE_PASSTHROUGH_ENV 显式覆盖。容器镜像
训练镜像来自 recipe catalog,而 catalog 里写的是nvcr.io 这类公共仓库。内网里需要先转存再重定向:
生产环境用 digest 而不是 tag。在你自己的镜像仓库里挪动的 tag,仍然是一个挪动过的 tag。
在镜像站后面构建镜像
Dockerfile 默认走公共上游,所以在哪都能构建。用 build 参数把它指向内网镜像站:APT_MIRROR 留空就保持 Debian 自己的源——能正常访问互联网的机器上你要的就是这个。
平台运行时
作业侧需要tuneplane 才能回传指标,而训练镜像里不会有它。
默认的 TUNEPLANE_JOB_RUNNER_MODE=bundled 不需要任何网络就解决了这件事:
服务端把一个内容寻址的 PEX 注入作业,训练镜像不需要预装任何东西。
这是少数几个「离线反而更简单」的地方——这项设置保持默认就好。
数据集
这里没有任何东西需要访问互联网。数据集用tp dataset push 推进部署自己的对象存储,
作业启动时拉进共享缓存。见数据集。
基准数据
基准会自己拉数据,三个 harness 各拉各的地方。其中两个需要你做点事。 lm-eval(gsm8k、mmlu、humaneval、ifeval、math)从 Hub 下载,上面的TUNEPLANE_HF_ENDPOINT
已经覆盖,不用额外做什么。
evalscope(C-Eval 及其它中文基准)是 ModelScope 原生的:它从 www.modelscope.cn 下载
evalscope/ceval。它的覆盖变量是
MODELSCOPE_DOMAIN,而它和 HF_ENDPOINT 有一处关键
差别,直接决定了你的拓扑:它接受的是域名,不是 URL。客户端只做 https:// + 这个值,不带路径。
Nexus 的代理仓库在 /repository/<名字> 下,因此没法直接填 —— 镜像必须在一个属于它自己的主机名
根路径上应答:
--dataset-hub huggingface
只改去哪找、不翻译 id,于是向一个从来没有 evalscope/ceval 的镜像去要它,报错写的是「数据集找不到」,
而不是「连不上 ModelScope」。
有些 suite 拉的是固定 URL。 比如 lm-eval 的 math500 从
openaipublic.blob.core.windows.net 读一个 CSV。这类没有端点设置可用:要么为那个主机开一个 raw
代理,要么接受这个 suite 不可用。在向别人承诺某个基准之前,值得按 suite 逐个确认一遍。
确认成功
提交快速开始里那个作业,看日志。你要看到的顺序是:HF_ENDPOINT 的是平台,而不是你自己的脚本。