在多集群中运行 TrainJob

从 Kubeflow Trainer v2 运行一个由 MultiKueue 调度的 TrainJob。

开始之前

查阅 MultiKueue 安装指南以了解如何正确设置 MultiKueue 集群。

为了简化设置和使用,我们建议至少使用 Kueue v0.11.0 版本以及 Kubeflow Trainer 至少 v2.0.0 版本。

查看 Trainer 安装获取 Kubeflow Trainer v2 的安装和配置详情。

MultiKueue 集成

完成设置后,你可以通过运行一个 TrainJob sample-trainjob 来测试它。

ClusterTrainingRuntime 和 TrainingRuntime

在 MultiKueue 环境中的 TrainJob 可与 ClusterTrainingRuntime 和 TrainingRuntime 协同工作:

  • ClusterTrainingRuntime:必须安装在所有工作集群上。运行时定义应在各集群间保持一致。
  • TrainingRuntime:必须安装在工作集群上对应命名空间中,TrainJob 将在其下运行。

确保你的 TrainJob 引用的运行时配置在目标工作集群上可用,然后才分发作业。

示例

这是一个完整的示例,展示如何使用 MultiKueue 运行 TrainJob:

  1. 创建一个 ClusterTrainingRuntime 在所有集群(管理和工作)上:
apiVersion: trainer.kubeflow.org/v1alpha1
kind: ClusterTrainingRuntime
metadata:
  name: torch-distributed
  labels:
    trainer.kubeflow.org/framework: torch
spec:
  mlPolicy:
    numNodes: 1
    torch:
      numProcPerNode: auto
  template:
    spec:
      replicatedJobs:
        - name: node
          template:
            metadata:
              labels:
                trainer.kubeflow.org/trainjob-ancestor-step: trainer
            spec:
              template:
                spec:
                  containers:
                    - name: node
                      image: pytorch/pytorch:2.7.1-cuda12.8-cudnn9-runtime
  1. 在管理集群上创建启用 MultiKueue 的 TrainJob
apiVersion: trainer.kubeflow.org/v1alpha1
kind: TrainJob
metadata:
  name: pytorch-multikueue
  namespace: default
  labels:
    kueue.x-k8s.io/queue-name: multikueue-queue
spec:
  runtimeRef:
    name: torch-distributed
    kind: ClusterTrainingRuntime
  trainer:
    numNodes: 2
    resourcesPerNode:
      requests:
        cpu: "4"
        memory: "8Gi"
        nvidia.com/gpu: "1"

TrainJob 将根据 MultiKueue 配置和可用资源被派发到指定的 worker 集群。 训练 Pod 将在选定的 worker 集群上创建并执行。