Skip to main content
训练镜像里装 CUDA、Python,以及你的 train.sh 会 import 的东西。仅此而已。
不要把 StarForge CLI 装进镜像,也不要从旧的教程仓库里抄可观测性代码。 平台运行时会在启动时以内容寻址 PEX 的形式注入——镜像里不需要任何东西,回传就能工作。

镜像里装什么

日志:printlogging、框架打到 stdout/stderr 的内容进控制台日志页。不要 POST /api/ingest/logs 曲线:不会从 stdout 里猜。训练代码里调 starforge.report

一份能改的 Dockerfile

风格对齐平台 TRL 镜像:CUDA devel 基底、venv 在 PATH 最前。catalog custom/custom 建议在后面的 RUN 里装 starforge-core
包名按 train.py 实际 import 来改。DeepSpeed 要运行期 JIT 的话,通常需要带 nvcc 的 devel 镜像,和 Dockerfile.trl 一样。 local 执行器会用 bash 跑入口。PATH 仍须指向那个 venv,否则 train.sh 里的 python 可能是没有 torch 的 /usr/bin/python

构建和推送

tag 或 digest 都能提交:

白名单

--image 会解析出仓库主机(ghcr.iolocalhost:5000、没有主机名时是 docker.io)。这个主机必须出现在服务端 FORGE_ALLOWED_IMAGE_REGISTRIES.env 里逗号分隔的主机名)。 运维可以写成 FORGE_ALLOWED_IMAGE_REGISTRIES=registry.example.com,ghcr.io。节点还要能拉到镜像(KubeRay 的 imagePullSecret、agent 上的 Docker login、Slurm 侧已经转好的 SIF)。

各执行器

拉镜像慢时作业停在 PENDING,直到 preRunning 超时变成 FAILED。这不是训练代码的问题。

不要做的事

  • 把 StarForge 源码 COPY 进 /opt,指望它和服务器 runner 对得上。capsule 是内容寻址、启动时注入的。
  • HF_TOKEN 烤进镜像层。服务端会注入 HF_TOKEN / HUGGING_FACE_HUB_TOKEN,或给一个密钥文件路径(CLUSTER_SECRETS_FILE)。
  • FORGE_INGEST_URL 设成控制台机器上的 127.0.0.1。训练节点用不了你笔记本的 loopback。这个变量在服务端,提交的人不用设;stdout 正常但图表空,多半是运维配错了。