基于kubeflow进行分布式训练
云机器操作
在云节点上直接操作 Kubernetes,需要先安装 kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl /usr/local/bin/
kubectl version --client
配置 kubeconfig,指向 KBS 云集群
mkdir -p ~/.kube
vim ~/.kube/config
在 config
文件里面填入配置,配置文件在 资源管理 -> 集群
,选择对应集群点击右侧 连接集群
按钮,创建 KubeConfig
,将 KubeConfig
内容保存到 config
。
测试连接,运行:
kubectl cluster-info
如果能看到类似:
Kubernetes control plane is running at https://xxx.xxx.xxx.xxx
CoreDNS is running at ...
说明配置成功。
安装 Training Operator
kubectl apply --force-conflicts --server-side -k "https://ghfast.top/github.com/kubeflow/training-operator.git/manifests/overlays/standalone?ref=v1.8.0"
运行以下指令验证 CRD 是否存在
kubectl get crd | grep -i kubeflow
启动训练
将以下代码,保存为 demo.py
,存储在挂载存储根目录下。例:挂载存储盘为 /data
,则存储为 /data/demo.py
。
import os
'''
for key, value in os.environ.items():
print(f"{key} = {value}")
print("-------------------------------")
print("")
'''
import torch
torch.distributed.init_process_group(init_method="env://")
rank = torch.distributed.get_rank()
world_size = torch.distributed.get_world_size()
print(f"rank {rank} world_size {world_size}")
a = torch.tensor([1])
torch.distributed.all_reduce(a)
print(f"rank {rank} world_size {world_size} result {a}")
torch.distributed.barrier()
print(f"rank {rank} world_size {world_size}")
执行以下命令,启动训练:
kubectl apply -f pytorch_cpu_demo.yaml
注意:如果出现以下错误
error when creating "pytorch_cpu_demo.yaml": Internal error occurred: failed calling webhook "validator.pytorchjob.training-operator.kubeflow.org": failed to call webhook: Post "https://training-operator.kubeflow.svc:443/validate-kubeflow-org-v1-pytorchjob?timeout=10s": dial tcp 10.233.18.200:443: connect: connection refused
删掉旧的 Secret,让 Operator 重建:
kubectl delete secret -n kubeflow training-operator-webhook-cert
重启 Operator:
kubectl rollout restart deploy -n kubeflow training-operator
说明:如果还是报错,说明集群里 cert-rotator 没有正确给 webhook 创建证书。这种情况在某些自建 K8s、KubeSphere、或者缺少 CA 管理组件的环境里很常见。
先绕过 webhook 运行,直接关掉 webhook 校验
kubectl delete validatingwebhookconfiguration validator.training-operator.kubeflow.org
再次启动训练
kubectl apply -f pytorch_cpu_demo.yaml
出现以下输出,即创建成功
pytorchjob.kubeflow.org/torchrun-cpu created
这样不会再走 webhook,所以不会报 TLS 错误。
缺点:参数不会被校验,运行时可能报错。