分布式 GPU 训练 - Amazon 深度学习容器
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

分布式 GPU 训练

本节适用于基于 GPU 的集群上的分布式训练。

运行示例之前,请确保您的集群有 GU 节点。如果您的集群中没有 GPU 节点,请使用以下命令向集群添加节点组。请务必在 “加速计算” 类别中选择 Amazon EC2 实例 (node-type)。

eksctl create nodegroup --cluster $CLUSTER_NAME --region $CLUSTER_REGION \ --nodes 2 --nodes-min 1 --nodes-max 3 --node-type p3.2xlarge

有关Deep Learning Containers 完整列表,请参阅Deep Learning Containers 映像

PyTorch分布式 GPU 训练

本教程指导您在 MNIST 上训练分类模型,在单节点 GPU 实例 PyTorch中运行由 Kubeflow 管理的Deep L earning Containers 中的容器Amazon。该示例使用 Gloo 作为后端。

  1. 创建一个 PyTorchJob.

    1. 验证 PyTorch 自定义资源是否已安装。

      kubectl get crd

      该输出应包含 pytorchjobs.kubeflow.org

    2. 确保 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
    3. 使用以下文本创建基于 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
    4. 运行分布式训练的训练分布式训练的训练的训练

      kubectl create -f pt_distributed.yaml -n ${NAMESPACE}
  2. 监视你的 PyTorchJob.

    1. 查看状态部分以监控作业状态。以下是任务成功完成时的输出示例。

      kubectl get -o yaml pytorchjobs kubeflow-pytorch-gpu-dist-job ${NAMESPACE}
    2. 检查每个 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 完成分布式训练。你将在你的容器 TensorFlow中运行这个分布式训练示例, ResNet 基于 Kubeflow on 管理的Deep ImageNet L earning ContainersAmazon。

该示例要求一个 GPU 实例至少有 2 个 GPU。你可以使用node-type=p3.16xlarge或更高版本。

  1. 创建 mpiJob。

    1. 验证 TensorFlow 自定义资源是否已安装。

      kubectl get crd

      该输出应包含 mpijobs.kubeflow.org

    2. 确保 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
    3. 使用以下文本来创建 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
    4. 运行分布式训练的训练分布式训练的训练的训练

      kubectl create -f tf_distributed.yaml -n ${NAMESPACE}
  2. 监视你的 PyTorchJob.

    1. 查看状态部分以监控作业状态。以下是任务成功完成后的输出示例。

      kubectl get -o yaml mpijob tensorflow-tf-dist -n ${NAMESPACE}
    2. 检查每个 pod 的日志。

      第一个命令打印特定的 pod 列表 PyTorchJob,例如以下示例。

      kubectl get -o yaml mpijob tensorflow-tf-dist -n ${NAMESPACE}

      第二条命令跟踪特定 pod 的日志。

      kubectl logs pod name -n ${NAMESPACE}

有关清除在使用完集群后对其进行清理的信息,请参阅。