跳转到主要内容
训练镜像装的是 CUDA、Python,以及你的训练器 import 的东西。别的都不要。
不要把平台源码树复制进镜像,也不要装 tuneplane-server。运行时在启动时以内容寻址的 PEX 注入, 所以日志、生命周期和产物这些事,镜像里不需要平台的任何东西。唯一的例外是在已发布的 custom/custom recipe 下、你的训练代码里的 import tuneplane —— 那个 recipe 声明 external observability,因此不会改 PYTHONPATH。为此要装 tuneplane wheel。见自带训练器。

里面该有什么

日志不需要任何东西:print、logging 和框架的 stdout 都会到 Logs 标签页。曲线不从 stdout 解析 —— 可以调用 tuneplane.report,或声明 TensorBoard/JSONL 输出用于 原生采集;独立采集器不要求训练镜像安装 Python SDK。

一个起手的 Dockerfile

关于那个 venv 有两点。Job Capsule 用镜像自己的 Python,所以要让 venv 排在 PATH 最前 —— 否则 train.sh 里的 python 是 /usr/bin/python,没有 torch。另外,需要 nvcc 时用 devel 基础镜像, DeepSpeed 的 JIT 编译就需要。

推上去,然后钉住

标签可用。digest 能阻止一个移动的标签在准入之后改变作业。

镜像仓库白名单

--image 会被解析出仓库主机:ghcr.io、localhost:5000,名字里不带主机时是 docker.io。那个 主机必须在 TUNEPLANE_ALLOWED_IMAGE_REGISTRIES 里,它是部署方设的逗号分隔列表。 管理员设成类似 TUNEPLANE_ALLOWED_IMAGE_REGISTRIES=registry.example.com,ghcr.io,并且节点要能拉:KubeRay 上的 imagePullSecrets、每台已注册机器上的 Docker 登录,或 Slurm 上已经转换好的 SIF。

各后端要什么形态

拉得慢会让作业停在 PENDING 直到 pre-running 超时,然后 FAILED。那不是训练的 bug。

确认成功

然后提交。tp job logs 能到你自己那行启动命令,就说明镜像拉下来了、venv 也在 PATH 上。

下一步

自带训练器 · 作业环境变量 · Fleet