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 文档中的以下资源,以帮助您选择满足您需求的实例类型

    • 加速计算实例类型表,了解有关 GPU 型号和数量、RAM 和存储的信息。

    • 最大网络接口表,了解加速计算实例类型。确保实例类型支持您工作负载所需的足够 IP 地址。例如,g4dn.xlarge 实例类型支持节点上 pod 的 29 个 IP 地址。

  • 在节点组中的节点上使用带有 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 创建自管理节点组#

先决条件#

步骤#

以下步骤展示了如何使用 eksctl CLI 创建 Amazon EKS 集群。这些步骤创建了一个使用 Amazon EKS 优化 AMI 的自管理节点组。

  1. 创建一个文件,例如 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 的卷,以确保容器有足够的本地磁盘空间。

  2. 使用节点组创建 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
    
  3. 可选:查看集群名称

    $ 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