NVIDIA GPU Operator 与 Amazon EKS#
使用 Amazon EKS 的方法#
您可以通过至少两种方式在 Amazon EKS 中使用 NVIDIA GPU 运行工作负载。
不使用 GPU Operator 的默认 EKS 配置#
默认情况下,您可以在支持 NVIDIA GPU 的实例类型上运行 Amazon EKS 优化的 Amazon Linux AMI。
使用默认配置有以下限制
预安装的 NVIDIA GPU 驱动程序版本和 NVIDIA 容器运行时版本滞后于 NVIDIA 的发布计划。
您必须部署 NVIDIA 设备插件,并且您承担升级该插件的责任。
如果这些限制对您来说可以接受,请参阅 Amazon EKS 文档中的 Amazon EKS 优化的 Amazon Linux AMI,了解有关配置集群的信息。您无需安装 NVIDIA GPU Operator。
使用 GPU Operator 的 EKS 节点组#
为了克服第一种方法的限制,您可以为您的集群创建一个节点组。使用具有 NVIDIA GPU 的实例类型配置节点组,并使用 GPU Operator 支持的操作系统 AMI。Operator 不支持在同一集群中混合运行 Amazon Linux 2 和其他受支持的操作系统的节点。
在这种情况下,Operator 管理所有操作数的生命周期,包括 NVIDIA GPU 驱动程序容器。此方法使您能够运行最新的 NVIDIA GPU 驱动程序,并使用 Operator 管理驱动程序和其他软件组件的升级,例如 NVIDIA 设备插件、NVIDIA Container Toolkit 和 NVIDIA MIG Manager。
此方法提供最新的软件,并且 Operator 减少了管理开销。
EKS 节点组简介和客户端应用程序#
当您配置 Amazon EKS 节点组时,您可以配置自管理节点或托管节点组。
Amazon EKS 支持许多客户端来创建节点组。
对于自管理节点,您可以使用 eksctl
CLI 或 Amazon Management Console。有关概念和步骤,请参阅前面的 URL。
对于托管节点组,您可以使用 Amazon Management Console。Amazon EKS 文档描述了如何使用 eksctl
CLI,但该 CLI 不支持除 Amazon Linux 2 之外的操作系统,并且 Operator 不支持该操作系统。有关概念和步骤,请参阅前面的 URL。
Terraform 支持创建自管理和托管节点组。有关更多信息,请参阅 Terraform 注册表中的 AWS EKS Terraform 模块。
关于将 Operator 与 Amazon EKS 一起使用#
要将 NVIDIA GPU Operator 与 Amazon Elastic Kubernetes Service (EKS) 一起使用而没有任何限制,您需要执行以下高级操作
创建具有 NVIDIA GPU 的实例类型的自管理或托管节点组。
请参阅 Amazon EC2 文档中的以下资源,以帮助您选择满足您需求的实例类型
在节点组中的节点上使用带有 Ubuntu 20.04 或 22.04 的 Amazon EKS 优化的 Amazon Machine Image (AMI)。
AMI 支持特定于 AWS 区域和 Kubernetes 版本。有关 AMI 值(例如
ami-00687acd80b7a620a
),请参阅 https://cloud-images.ubuntu.com/aws-eks/。使用您首选的客户端应用程序创建节点组。
示例:使用 eksctl 创建自管理节点组#
先决条件#
您可以访问 Amazon Management Console,或者您已安装并配置了 AWS CLI。请参阅 AWS CLI 文档中的 安装或更新到最新版本的 AWS CLI 和 配置 AWS CLI。
如果您首选
eksctl
CLI 作为您的客户端应用程序,则您已安装该 CLI。该 CLI 可从 https://eksctl.io/introduction/#installation 获取。您拥有来自 https://cloud-images.ubuntu.com/aws-eks/ 的 AMI 值。
您拥有用于节点的 EC2 实例类型。
步骤#
以下步骤展示了如何使用 eksctl
CLI 创建 Amazon EKS 集群。这些步骤创建了一个使用 Amazon EKS 优化 AMI 的自管理节点组。
创建一个文件,例如
cluster-config.yaml
,内容如下例所示apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: demo-cluster region: us-west-2 version: "1.25" nodeGroups: - name: demo-gpu-workers instanceType: g4dn.xlarge ami: ami-0770ab88ec35aa875 amiFamily: Ubuntu2004 minSize: 1 desiredCapacity: 3 maxSize: 3 volumeSize: 100 overrideBootstrapCommand: | #!/bin/bash source /var/lib/cloud/scripts/eksctl/bootstrap.helper.sh /etc/eks/bootstrap.sh ${CLUSTER_NAME} --container-runtime containerd --kubelet-extra-args "--node-labels=${NODE_LABELS}" ssh: allow: true publicKeyPath: ~/.ssh/id_rsa.pub
替换集群名称、Kubernetes 版本等的值。要解析覆盖引导命令中的环境变量,您必须获取引导程序辅助脚本的源。
提示
每个节点的默认卷大小为 20 GB。在许多情况下,带有 AI/ML 工作负载框架的容器通常非常大。示例 YAML 文件指定了 100 GB 的卷,以确保容器有足够的本地磁盘空间。
使用节点组创建 Amazon EKS 集群
$ eksctl create cluster -f cluster-config.yaml
创建集群需要几分钟时间。
示例输出
2022-08-19 17:51:04 [i] eksctl version 0.105.0 2022-08-19 17:51:04 [i] using region us-west-2 2022-08-19 17:51:04 [i] setting availability zones to [us-west-2d us-west-2c us-west-2a] 2022-08-19 17:51:04 [i] subnets for us-west-2d - public:192.168.0.0/19 private:192.168.96.0/19 ... [✓] EKS cluster "demo-cluster" in "us-west-2" region is ready
可选:查看集群名称
$ eksctl get cluster
示例输出
NAME REGION EKSCTL CREATED demo-cluster us-west-2 True
后续步骤#
默认情况下,
eksctl
CLI 将 Kubernetes 配置信息添加到您的~/.kube/config
文件中。您可以运行kubectl get nodes -o wide
以查看 Amazon EKS 集群中的节点。您已准备好使用 Helm 安装 NVIDIA GPU Operator。
如果您指定的 Kubernetes 版本低于
1.25
,则在运行helm install
命令时,请指定--set psp.enabled=true
。