Training Runtime 镜像

适用于 Kubeflow Trainer v2 的 Curated TrainingRuntime 镜像。每个镜像都打包了特定的 PyTorch + accelerator 栈,因此用户无需重新构建即可提交 TrainJob

可用运行时

镜像设备框架拉取
torch (CUDA)NVIDIA GPU (CUDA 12.6)PyTorch 2.6, transformers, accelerate, datasets, mlflowalaudadockerhub/torch2.6-cu126-amd64:v0.1.0
torch (CANN)Huawei Ascend NPU (CANN 8.5)PyTorch 2.6 + torch_npu 2.6.0.post5alaudadockerhub/torch2.6-cann8.5-arm64:v0.1.0
LLaMA-Factory (CUDA)NVIDIA GPU (CUDA 12.6)LLaMA-Factory 0.9.4 (metrics,awq,modelscope)alaudadockerhub/llamafactory0.9-cu126-amd64:v0.1.0
LLaMA-Factory (CANN)Huawei Ascend NPU (CANN 8.5)LLaMA-Factory 0.9.4 (metrics,modelscope)alaudadockerhub/llamafactory0.9-cann8.5-arm64:v0.1.0
TrainingHub (CUDA)NVIDIA GPU (CUDA 12.6)trl, peft, bitsandbytes, deepspeed (SFT/OSFT/DPO)alaudadockerhub/traininghub0.1-cu126-amd64:v0.1.0
MindSpeed-LLM (CANN)Huawei Ascend NPU (CANN 8.5)MindSpeed + MindSpeed-LLM (Megatron core 0.8.0)alaudadockerhub/mindspeed-llm-cann8.5-arm64:v0.1.0
Fine-tune (LlamaFactory CUDA)NVIDIA GPU (CUDA 12.6)LLaMA-Factory 0.9.4 + git-lfs, MLflow, MySQL/Postgres clients — runtime for fine-tune-with-trainer-v2.ipynbalaudadockerhub/fine_tune_with_llamafactory:v0.1.11
Fine-tune (LlamaFactory CANN)Huawei Ascend NPU (CANN 8.5)LLaMA-Factory 0.9.4 + torch_npu 2.6 + git-lfs — NPU counterpart of the LlamaFactory fine-tune imagealaudadockerhub/fine_tune_with_llamafactory_npu:v0.9.4-cann_8.5.0-torch_2.6.0-v2
Workbench PyTorch CANNHuawei Ascend NPU (CANN 8.5)Jupyter + PyTorch 2.9 + torch_npu 2.9 + MindSpeed-LLM — 用于 Ascend NPU fine-tune / pretrain notebooksfine-tune-with-trainer-v2-mindspeed-npu.ipynbalaudadockerhub/alauda-workbench-jupyter-pytorch-cann-py312-ubi9:v0.1.7
Workbench MindSpore CANNHuawei Ascend NPU (CANN 8.5)Jupyter + MindSpore 2.8 + msadapter + bundled MindSpeed-Core-MS (MindSpeed + MindSpeed-LLM + Megatron-LM + MSAdapter source tree at /opt/app-root/share/MindSpeed-Core-MS/) — used by qwen3_0.6b_finetune_verify.ipynbalaudadockerhub/alauda-workbench-jupyter-mindspore-cann-py312-ubi9:v0.1.7
torch-distributedNVIDIA GPU (CUDA 12.6)PyTorch 2.9.1 + torchvision distributed-training base — ClusterTrainingRuntime referenced by Kubeflow Trainer Quick Startalaudadockerhub/torch-distributed:v2.9.1-aml2

CUDA 镜像仅支持 amd64;CANN 镜像仅支持 arm64。

docker pull alaudadockerhub/torch2.6-cu126-amd64:v0.1.0

选择运行时

  • 在 GPU 上使用 torchruntorch2.6-cu126-amd64
  • 在 NPU 上使用 torchruntorch2.6-cann8.5-arm64(设置 runtimeClassName: ascend
  • 使用 LLaMA-Factory 进行 LLM SFT / LoRAllamafactory0.9-cu126-amd64(GPU)或 llamafactory0.9-cann8.5-arm64(NPU)
  • TRL / PEFT SFT / OSFT / DPOtraininghub0.1-cu126-amd64
  • 在 Ascend 上进行 Megatron 风格训练mindspeed-llm-cann8.5-arm64

应用 TrainingRuntime

可直接应用的 YAML 位于 assets/training-runtimes/。每个 YAML 都固定使用 :v0.1.0;如需跟踪其他发布版本,请覆盖该标签。YAML 默认使用 Kubeflow Profile 命名空间 — 请将 metadata.namespace 修改为你提交作业的命名空间。

base=https://raw.githubusercontent.com/alauda/aml-docs/master/docs/en/train/guides/assets/training-runtimes
# NVIDIA GPU
kubectl apply -f $base/torch2.6-cu126-amd64-trainingruntime.yaml
kubectl apply -f $base/llamafactory0.9-cu126-amd64-trainingruntime.yaml
kubectl apply -f $base/traininghub0.1-cu126-amd64-trainingruntime.yaml
# Huawei Ascend NPU
kubectl apply -f $base/torch2.6-cann8.5-arm64-trainingruntime.yaml
kubectl apply -f $base/llamafactory0.9-cann8.5-arm64-trainingruntime.yaml
kubectl apply -f $base/mindspeed-llm-cann8.5-arm64-trainingruntime.yaml

提交 TrainJob

共享 smoke 模板适用于任意运行时 — 将 spec.runtimeRef.name 设置为你要验证的运行时:

kubectl apply -f $base/trainjob-smoke.yaml
kubectl -n <your-namespace> get trainjobs
trainjob=$(kubectl -n <your-namespace> get trainjobs -o name | tail -1)
kubectl -n <your-namespace> logs -f -l jobset.sigs.k8s.io/jobset-name=${trainjob##*/}-node

设备资源请求

NVIDIA GPU

整卡请求:

resources:
  limits:
    nvidia.com/gpu: 1

HAMI vGPU 切片:

resources:
  limits:
    nvidia.com/gpualloc: 1    # virtual GPU slot
    nvidia.com/gpucores: 50   # 50% of one physical GPU
    nvidia.com/gpumem: "8192" # 8 GiB

Huawei Ascend NPU

务必设置 runtimeClassName: ascend,以便注入宿主机驱动库和 DCMI sockets。

标准 Huawei device-plugin:

spec:
  runtimeClassName: ascend
  containers:
    - resources:
        limits:
          huawei.com/Ascend910: "1"

HAMI vNPU(每个 910B4 切分为 20 cores / 32 GiB):

spec:
  schedulerName: hami-scheduler
  runtimeClassName: ascend
  containers:
    - resources:
        limits:
          huawei.com/Ascend910B4: "1"
          huawei.com/Ascend910B4-memory: "8192"

使用 HAMI 时,allocatable.huawei.com/Ascend910B4 显示为 0,因为 HAMI 通过其 scheduler extender 进行分配。如果 Pod 一直处于 Pending 且提示 hami-scheduler: 1 node unregistered,请确认宿主机驱动已加载(/sys/bus/pci/drivers/davincinpu-smi info 正常),并且节点已标记为 ascend=on

镜像注意事项

  • 所有 CANN 镜像runtimeClassName: ascend 会 bind-mount 宿主机的 /usr/local/Ascend,但不会导出 CANN 环境变量(LD_LIBRARY_PATHASCEND_HOME_PATH 等)。任何导入 torch_npu 的入口程序都必须先 source /usr/local/Ascend/ascend-toolkit/set_env.sh(以及可选的 /usr/local/Ascend/nnal/atb/set_env.sh);否则导入会因 libhccl.so: cannot open shared object file 而失败。已发布的运行时 YAML 已经包含这些操作 — 请在任何派生运行时中保留这些 source 行。
  • traininghub0.1-cu126-amd64 — 提供 CUDA runtime,但不包含 toolkit。DeepSpeed JIT op 编译需要 nvcc;如果使用这些 ops,请挂载或安装 nvidia-cuda-toolkit,并设置 CUDA_HOME
  • mindspeed-llm-cann8.5-arm64megatron.core 需要 pkg_resources,因此请在作业入口程序中安装 setuptools<81。目前 import mindspeed_llm 会因为 mindspeed_llm master / core_r0.8.0 不匹配而失败;在没有该 adapter shim 的情况下,底层的 torch + torch_npu + megatron.core + mindspeed 栈可正常训练。

自行构建

Containerfiles、多架构 buildkitd helper、e2e harness,以及 post-fix 扫描证据位于 kubeflow-plugin/training-runtimes。每个框架镜像都只是 torch2.6-cu126-amd64torch2.6-cann8.5-arm64 上的一层薄封装,因此派生一个新运行时基本上就是在 FROM docker.io/alaudadockerhub/torch2.6-cu126-amd64:v0.1.0 的基础上再安装对应框架。