大模型训练平台架构(Volcano 调度 + Kubeflow Operator 分布式训练)
2026-08-11 09:57:40 # Kubernetes

一、背景

分布式训练(数据并行 / 模型并行)要求所有 Worker 同时启动且网络通信稳定。普通 K8s 调度可能把任务拆散导致“等不齐”,需要 Gang Scheduling

二、环境信息

  • K8s + GPU 节点
  • 调度器:Volcano v1.8
  • 训练 Operator:Kubeflow PyTorchOperator / TFOperator

三、操作要点

1. 安装 Volcano

1
kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/v1.8.0/installer/volcano-development.yaml

2. 使用 PodGroup 保证 Gang 调度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata: { name: pytorch-dist }
spec:
minAvailable: 4 # 4 个 pod 必须同时就绪,否则都不调度
tasks:
- name: worker
replicas: 4
template:
spec:
schedulerName: volcano
containers:
- name: train
image: pytorch-train:latest
resources: { limits: { nvidia.com/gpu: 1 } }

3. Kubeflow PyTorchJob

1
2
3
4
5
6
7
8
9
10
apiVersion: kubeflow.org/v1
kind: PyTorchJob
spec:
pytorchReplicaSpecs:
Worker:
replicas: 4
template:
spec:
schedulerName: volcano
containers: [{ name: pytorch, image: ..., resources: { limits: { nvidia.com/gpu: 1 } } }]

4. 数据集共享

训练数据放共享存储(NFS / CephFS PVC),所有 Worker 挂载同一 PVC,避免重复下载。

四、验证方式

1
2
3
kubectl get pods -l job-name=pytorch-dist   # 4 个同时 Running
kubectl logs pytorch-dist-worker-0 # 出现 allreduce / NCCL 初始化日志
kubectl get podgroups # minAvailable 满足

五、常见问题

  • Gang 死锁:资源总量不足 minAvailable,需扩容或降副本
  • NCCL 通信失败:检查节点间网络(RDMA/IB)、CNI、防火墙、MTU
  • 数据加载慢:用本地缓存或高性能共享存储,开启多进程预取
  • 节点故障:Volcano 支持任务级重调度;结合检查点(checkpoint)续训