本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
网络连接
对于节点间通信频繁的应用程序,可以考虑使用更高的网络带宽或弹性结构适配器
对于节点间通信需求较高的 Amazon EKS 上的分布式训练工作负载,可以考虑选择网络带宽更高的实例或弹性结构适配器 (EFA)。网络性能不足会阻碍数据传输,从而减慢分布式多 GPU 训练等机器学习任务的速度。请注意,推理工作负载的节点间通信通常不高。
示例
例如,使用 Karpenter:
apiVersion: v1 kind: Pod metadata: name: ml-workload spec: nodeSelector: karpenter.k8s.aws/instance-network-bandwidth: "100000" # 100 Gbps in Mbps node.kubernetes.io/instance-type: p5.48xlarge # EFA-enabled instance containers: - name: training-job image: `763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-inference:2.6.0-gpu-py312-cu124-ubuntu22.04-ec2-v1.6` resources: limits: vpc.amazonaws.com/efa: 1 # Requires EFA device plugin
确保在您的容器映像中安装 MPI 和 NCCL 等工具,以便利用 EFA 进行训练作业。
增加可用的 IP 地址数量以缩短 pod 启动时间
在 EKS 中,每个容器都需要来自 VPC CIDR 块的 IP 地址。随着集群随着更多节点和 Pod 的增加而扩展,您可能会冒着 IP 地址耗尽或性能下降的风险,但是启用前缀委派可以通过预先分配 IP 范围和减少 EC2 API 调用来缓解这些问题,从而缩短 Pod 启动时间并提高可扩展性。
在创建集群后启用前缀委派允许 VPC 容器网络接口 (CNI) 为实例上的网络接口分配 IP 前缀(/28,每个前缀提供 16 个 IP 地址)。 EC2 这意味着每个节点可以支持更多的 pod,从而降低了 IP 短缺的风险。例如,在一个c5.4xlarge
实例上,您最多可以支持 110 个带前缀委托的 pod。
虽然前缀委派对于在具有许多小容量的环境中优化 IP 使用至关重要,但 AI/ML 工作负载通常使用更少、更大的 pod(例如,每个 GPU 一个 pod)。启用前缀委派允许 VPC CNI 通过维护温池来预先分配前缀,从而更快地启动 pod。这意味着 IP 地址随时可用,与非前缀模式下的按需分配相比,缩短了 pod 初始化所需的时间。在这种情况下,启用前缀委派所节省的 IP 可以为 AI/ML 工作负载带来性能优势。通过减少配置 IP 地址和预先分配 IP 范围所需的 EC2 API 调用次数,使用前缀委派可以缩短 pod 启动时间,这对于快速扩展 AI/ML 工作负载特别有利。
启用前缀委托:
kubectl set env daemonset/aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
确保正确规划 VPC 子网以避免 IP 地址耗尽,尤其是在大型部署中,并管理 CIDR 块以避免相互重叠。 VPCs要了解更多信息,请参阅优化 IP 地址利用率和为带前缀的 Amazon EKS 节点分配更多 IP 地址。