使用 GPU 启动 Amazon EKS 集群以支持 KubeRay#
本指南将引导您完成创建具有 GPU 节点以专门支持 KubeRay 的 Amazon EKS 集群的步骤。此处概述的配置可应用于文档中找到的大多数 KubeRay 示例。
步骤 1:在 Amazon EKS 上创建 Kubernetes 集群#
请按照此 AWS 文档中的前两个步骤:(1) 创建您的 Amazon EKS 集群,以及 (2) 配置您的计算机以与您的集群通信。
步骤 2:为 Amazon EKS 集群创建节点组#
请按照此 AWS 文档中的“步骤 3:创建节点”来创建节点组。以下部分提供了更详细的信息。
创建 CPU 节点组#
通常,请避免在 Ray head 上运行 GPU 工作负载。为除 Ray GPU 工作进程以外的所有 Pod 创建 CPU 节点组,例如 KubeRay operator、Ray head 和 CoreDNS Pod。
以下是适用于文档中大多数 KubeRay 示例的常见配置
实例类型:m5.xlarge(4 vCPU;16 GB RAM)
磁盘大小:256 GB
期望大小:1,最小大小:0,最大大小:1
创建 GPU 节点组#
为 Ray GPU 工作进程创建 GPU 节点组。
以下是适用于文档中大多数 KubeRay 示例的常见配置
AMI 类型:Bottlerocket NVIDIA (BOTTLEROCKET_x86_64_NVIDIA)
实例类型:g5.xlarge(1 个 GPU;24 GB GPU 显存;4 个 vCPU;16 GB RAM)
磁盘大小:1024 GB
期望大小:1,最小大小:0,最大大小:1
请安装 NVIDIA 设备插件。(注意:如果您在上面的步骤中使用了
BOTTLEROCKET_x86_64_NVIDIAAMI,则可以跳过此步骤。)安装 NVIDIA 设备插件的 DaemonSet,以便在您的 Amazon EKS 集群中运行支持 GPU 的容器。您可以参考Amazon EKS 优化的加速版 Amazon Linux AMI或 NVIDIA/k8s-device-plugin 存储库以获取更多详细信息。
如果 GPU 节点有污点(taints),请将
tolerations添加到nvidia-device-plugin.yml中,以使 DaemonSet 能够将 Pod 调度到 GPU 节点上。
注意:如果您在
kubectl方面遇到权限问题,请按照AWS 文档中的“步骤 2:配置您的计算机以与您的集群通信”进行操作。# Install the DaemonSet kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml # Verify that your nodes have allocatable GPUs. If the GPU node fails to detect GPUs, # please verify whether the DaemonSet schedules the Pod on the GPU node. kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu" # Example output: # NAME GPU # ip-....us-west-2.compute.internal 4 # ip-....us-west-2.compute.internal <none>
添加 Kubernetes 污点以防止 CPU Pod 调度到此 GPU 节点组。对于 KubeRay 示例,请将以下污点添加到 GPU 节点:
Key: ray.io/node-type, Value: worker, Effect: NoSchedule,并包含 GPU Ray 工作进程 Pod 的相应tolerations。警告:GPU 节点极其昂贵。如果您不再需要该集群,请务必将其删除。
步骤 3:验证节点组#
注意:如果您在
eksctl方面遇到权限问题,请导航到您的 AWS 账户网页,然后从“命令行或编程访问”页面复制凭证环境变量,包括AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN。
eksctl get nodegroup --cluster ${YOUR_EKS_NAME}
# CLUSTER NODEGROUP STATUS CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID ASG NAME TYPE
# ${YOUR_EKS_NAME} cpu-node-group ACTIVE 2023-06-05T21:31:49Z 0 1 1 m5.xlarge AL2_x86_64 eks-cpu-node-group-... managed
# ${YOUR_EKS_NAME} gpu-node-group ACTIVE 2023-06-05T22:01:44Z 0 1 1 g5.12xlarge BOTTLEROCKET_x86_64_NVIDIA eks-gpu-node-group-... managed