NVIDIA GPU Operator 与 Google GKE#

关于在 Google GKE 中使用 Operator#

在 Google Kubernetes Engine (GKE) 中使用 NVIDIA GPU Operator 有两种方法。您可以使用 Google 驱动程序安装程序在节点上安装和管理 NVIDIA GPU 驱动程序,或者您可以使用 Operator 和驱动程序管理器来管理驱动程序和其他 NVIDIA 软件组件。

选择取决于操作系统以及您是否希望 Operator 管理所有软件组件。

支持的操作系统

摘要

Google
驱动程序
安装程序
  • Container-Optimized OS

  • 带有 containerd 的 Ubuntu

Google 驱动程序安装程序管理 NVIDIA GPU 驱动程序。NVIDIA GPU Operator 管理其他软件组件。

NVIDIA
驱动程序
管理器
  • 带有 containerd 的 Ubuntu

NVIDIA GPU Operator 管理驱动程序和其他 NVIDIA 软件的生命周期和升级。

以上信息涉及使用 GKE Standard 节点池。对于 Autopilot Pod,不支持使用 GPU Operator,您可以参考 在 Autopilot 中部署 GPU 工作负载

前提条件#

  • 您已安装并初始化 Google Cloud CLI。请参阅 Google Cloud 文档中的 gcloud CLI 概述

  • 您有一个 Google Cloud 项目用于您的 GKE 集群。请参阅 Google Cloud 文档中的 创建和管理项目

  • 您拥有 Google Cloud 项目的项目 ID。请参阅 Google Cloud 文档中的 识别项目

  • 您知道节点池的机器类型,并且该机器类型在您的区域和可用区中受支持。请参阅 Google Cloud 文档中的 GPU 平台

使用 Google 驱动程序安装程序#

执行以下步骤以使用 gcloud CLI 创建 GKE 集群,并使用 Google 驱动程序安装程序来管理 GPU 驱动程序。您可以创建一个使用 Container-Optimized OS 节点镜像或 Ubuntu 节点镜像的节点池。

  1. 创建节点池。请参阅 GKE 文档中的 在 GKE Standard 集群中运行 GPU

    创建节点池时,请指定以下额外的 gcloud 命令行选项,以禁用 Operator 不支持的 GKE 功能

    • --node-labels="gke-no-default-nvidia-gpu-device-plugin=true"

      节点标签禁用 GPU 节点上的 GKE GPU 设备插件 DaemonSet。

    • --accelerator type=...,gpu-driver-version=disabled

      此参数禁用在 GPU 节点上自动安装 GPU 驱动程序。

  2. 获取集群的身份验证凭据

    $ gcloud container clusters get-credentials demo-cluster --location us-west1
    
  3. 可选:验证您是否可以连接到集群

    $ kubectl get nodes -o wide
    
  4. 为 NVIDIA GPU Operator 创建命名空间

    $ kubectl create ns gpu-operator
    
  5. 创建一个文件,例如 gpu-operator-quota.yaml,内容如下例所示

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: gpu-operator-quota
    spec:
      hard:
        pods: 100
      scopeSelector:
        matchExpressions:
        - operator: In
          scopeName: PriorityClass
          values:
            - system-node-critical
            - system-cluster-critical
    
  6. 应用资源配额

    $ kubectl apply -n gpu-operator -f gpu-operator-quota.yaml
    
  7. 可选:查看资源配额

    $ kubectl get -n gpu-operator resourcequota
    

    示例输出

    NAME                  AGE     REQUEST
    gpu-operator-quota    38s     pods: 0/100
    
  8. 安装 Google 驱动程序安装程序 DaemonSet。

    对于 Container-Optimized OS

    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
    

    对于 Ubuntu,要应用的清单取决于 GPU 型号和节点版本。请参阅 GKE 文档中 手动安装 NVIDIA GPU 驱动程序Ubuntu 选项卡。

  9. 使用 Helm 安装 Operator

    $ helm install --wait --generate-name \
        -n gpu-operator \
        nvidia/gpu-operator \
        --version=v24.9.2 \
        --set hostPaths.driverInstallDir=/home/kubernetes/bin/nvidia \
        --set toolkit.installDir=/home/kubernetes/bin/nvidia \
        --set cdi.enabled=true \
        --set cdi.default=true \
        --set driver.enabled=false
    

    将 NVIDIA Container Toolkit 和驱动程序安装路径设置为 /home/kubernetes/bin/nvidia。在 GKE 节点镜像上,此目录是可写的,并且是存储 NVIDIA 运行时二进制文件的有状态位置。

    要使用 NVIDIA MIG Manager 配置 MIG,请指定以下额外的 Helm 命令参数

    --set migManager.env[0].name=WITH_REBOOT \
    --set-string migManager.env[0].value=true
    

使用 NVIDIA 驱动程序管理器#

执行以下步骤以使用 gcloud CLI 创建 GKE 集群,并使用 Operator 和 NVIDIA 驱动程序管理器来管理 GPU 驱动程序。这些步骤创建的集群具有使用 Ubuntu 和 containerd 节点镜像的节点池。

  1. 通过运行类似于以下示例的命令来创建集群

    $ gcloud beta container clusters create demo-cluster \
        --project <project-id> \
        --location us-west1 \
        --release-channel "regular" \
        --machine-type "n1-standard-4" \
        --accelerator "type=nvidia-tesla-t4,count=1" \
        --image-type "UBUNTU_CONTAINERD" \
        --node-labels="gke-no-default-nvidia-gpu-device-plugin=true" \
        --disk-type "pd-standard" \
        --disk-size "1000" \
        --no-enable-intra-node-visibility \
        --metadata disable-legacy-endpoints=true \
        --max-pods-per-node "110" \
        --num-nodes "1" \
        --logging=SYSTEM,WORKLOAD \
        --monitoring=SYSTEM \
        --enable-ip-alias \
        --default-max-pods-per-node "110" \
        --no-enable-master-authorized-networks \
        --tags=nvidia-ingress-all
    

    创建集群需要几分钟时间。

  2. 获取集群的身份验证凭据

    $ USE_GKE_GCLOUD_AUTH_PLUGIN=True \
        gcloud container clusters get-credentials demo-cluster --zone us-west1
    
  3. 可选:验证您是否可以连接到集群

    $ kubectl get nodes -o wide
    
  4. 为 NVIDIA GPU Operator 创建命名空间

    $ kubectl create ns gpu-operator
    
  5. 创建一个文件,例如 gpu-operator-quota.yaml,内容如下例所示

    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: gpu-operator-quota
    spec:
      hard:
        pods: 100
      scopeSelector:
        matchExpressions:
        - operator: In
          scopeName: PriorityClass
          values:
            - system-node-critical
            - system-cluster-critical
    
  6. 应用资源配额

    $ kubectl apply -n gpu-operator -f gpu-operator-quota.yaml
    
  7. 可选:查看资源配额

    $ kubectl get -n gpu-operator resourcequota
    

    示例输出

    NAME                  AGE     REQUEST
    gke-resource-quotas   6m56s   count/ingresses.extensions: 0/100, count/ingresses.networking.k8s.io: 0/100, count/jobs.batch: 0/5k, pods: 2/1500, services: 1/500
    gpu-operator-quota    38s     pods: 0/100
    
  8. 安装 Operator。请参阅 安装 NVIDIA GPU Operator