本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
分布式 GPU 训练
本节适用于基于 GPU 的集群上的分布式训练。
运行示例之前,请确保您的集群有 GU 节点。如果您的集群中没有 GPU 节点,请使用以下命令向集群添加节点组。请务必在 “加速计算” 类别中选择 Amazon EC2 实例node-type
)。
eksctl create nodegroup --cluster
$CLUSTER_NAME
--region$CLUSTER_REGION
\ --nodes2
--nodes-min1
--nodes-max3
--node-typep3.2xlarge
有关Deep Learning Containers 完整列表,请参阅Deep Learning Containers 映像。
PyTorch分布式 GPU 训练
本教程指导您在 MNIST 上训练分类模型,在单节点 GPU 实例 PyTorch中运行由 Kubeflow 管理的Deep L
-
创建一个 PyTorchJob.
-
验证 PyTorch 自定义资源是否已安装。
kubectl get crd
该输出应包含
pytorchjobs.kubeflow.org
。 -
确保 NVIDIA 插件
daemonset
正在运行。kubectl get daemonset -n kube-system
该输出值应该类似于以下内容。
NDESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvidia-device-plugin-daemonset 3 3 3 3 3 <none> 35h
-
使用以下文本创建基于 Gloo 的分布式数据并行作业。将其保存在名为的文件中
pt_distributed.yaml
。apiVersion: kubeflow.org/v1 kind: PyTorchJob metadata: name:
"kubeflow-pytorch-gpu-dist-job"
spec: pytorchReplicaSpecs: Master: replicas: 1 restartPolicy: OnFailure template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - name:"pytorch"
image:"763104351884.dkr.ecr.us-west-2.amazonaws.com/aws-samples-pytorch-training:2.0-gpu-py310-ec2"
args: - "--backend" - "gloo" - "--epochs" - "5" Worker: replicas: 2 restartPolicy: OnFailure template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - name:"pytorch"
image:"763104351884.dkr.ecr.us-west-2.amazonaws.com/aws-samples-pytorch-training:2.0-gpu-py310-ec2"
args: - "--backend" - "gloo" - "--epochs" - "5" resources: limits: nvidia.com/gpu: 1 -
运行分布式训练的训练分布式训练的训练的训练
kubectl create -f pt_distributed.yaml -n ${NAMESPACE}
-
-
监视你的 PyTorchJob.
-
查看状态部分以监控作业状态。以下是任务成功完成时的输出示例。
kubectl get -o yaml pytorchjobs kubeflow-pytorch-gpu-dist-job ${NAMESPACE}
-
检查每个 pod 的日志。
第一个命令来打印出特定的 Pod 列表 PyTorchJob,如以下示例所示。
kubectl get pods -l job-name=kubeflow-pytorch-gpu-dist-job -o name -n ${NAMESPACE}
第二条命令跟踪特定 pod 的日志。
kubectl logs
pod name
-n ${NAMESPACE}
-
有关清除在使用完集群后对其进行清理的信息,请参阅。
TensorFlow 使用 Horovod 分布式 GPU 训练
本教程将指导您在 GPU 集群 TensorFlow 上使用 Horovod
该示例要求一个 GPU 实例至少有 2 个 GPU。你可以使用node-type=p3.16xlarge
或更高版本。
-
创建 mpiJob。
-
验证 TensorFlow 自定义资源是否已安装。
kubectl get crd
该输出应包含
mpijobs.kubeflow.org
。 -
确保 NVIDIA 插件
daemonset
正在运行。kubectl get daemonset -n kube-system
该输出值应该类似于以下内容。
NDESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvidia-device-plugin-daemonset 3 3 3 3 3 <none> 35h
-
使用以下文本来创建 miJob。将其保存在名为的文件中
tf_distributed.yaml.
。apiVersion: kubeflow.org/v1 kind: MPIJob metadata: name:
tensorflow-tf-dist
spec: slotsPerWorker: 1 cleanPodPolicy: Running mpiReplicaSpecs: Launcher: replicas: 1 template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - image:763104351884.dkr.ecr.us-west-2.amazonaws.com/aws-samples-tensorflow-training:2.12-gpu-py310-ec2
name:tensorflow-launcher
command: - mpirun - -mca - btl_tcp_if_exclude - lo - -mca - pml - ob1 - -mca - btl - ^openib - --bind-to - none - -map-by - slot - -x - LD_LIBRARY_PATH - -x - PATH - -x - NCCL_SOCKET_IFNAME=eth0 - -x - NCCL_DEBUG=INFO - -x - MXNET_CUDNN_AUTOTUNE_DEFAULT=0 - python - /deep-learning-models/models/resnet/tensorflow2/train_tf2_resnet.py args: - --num_epochs - "10" - --synthetic Worker: replicas: 2 template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - image:763104351884.dkr.ecr.us-west-2.amazonaws.com/aws-samples-tensorflow-training:2.12-gpu-py310-ec2
name:tensorflow-worker
resources: limits: nvidia.com/gpu: 1 -
运行分布式训练的训练分布式训练的训练的训练
kubectl create -f tf_distributed.yaml -n ${NAMESPACE}
-
-
监视你的 PyTorchJob.
-
查看状态部分以监控作业状态。以下是任务成功完成后的输出示例。
kubectl get -o yaml mpijob tensorflow-tf-dist -n ${NAMESPACE}
-
检查每个 pod 的日志。
第一个命令打印特定的 pod 列表 PyTorchJob,例如以下示例。
kubectl get -o yaml mpijob tensorflow-tf-dist -n ${NAMESPACE}
第二条命令跟踪特定 pod 的日志。
kubectl logs
pod name
-n ${NAMESPACE}
-
有关清除在使用完集群后对其进行清理的信息,请参阅。