在 GKE Standard 节点池中运行 GPU

本页面介绍了如何在 Google Kubernetes Engine (GKE) 标准集群的节点中挂接并使用 NVIDIA® 图形处理器 (GPU) 硬件加速器,以运行和优化计算密集型工作负载(例如人工智能 [AI] 和图形处理)。如果您改用 Autopilot Pod,请参阅在 Autopilot 中部署 GPU 工作负载

如果您想部署搭载 NVIDIA B300、NVIDIA B200 或 NVIDIA H200 141GB GPU 的集群,请改为参阅以下资源:

概览

利用 GKE,您可以创建配备了 GPU节点池。GPU 提供的计算能力可用于完成深度学习任务,如图片识别、自然语言处理,以及视频转码和图片处理等其他计算密集型任务。 在 GKE Standard 模式下,您可以将 GPU 硬件挂接到集群中的节点,然后将 GPU 资源分配给在这些节点上运行的容器化工作负载。

如需详细了解 GPU 应用场景,请参阅 Google Cloud的 GPU 页面。如需详细了解 GKE 中的 GPU 以及 Standard 模式与 Autopilot 模式之间的差异,请参阅 GKE 中的 GPU 简介

如果您的工作负载可以容忍频繁的节点中断,您也可以将 GPU 用于 Spot 虚拟机。使用 Spot 虚拟机可降低运行 GPU 的费用。如需了解详情,请参阅将 Spot 虚拟机与 GPU 节点池搭配使用

从 1.29.2-gke.1108000 版开始,您现在可以在 GKE Sandbox 上创建 GPU 节点池。如需了解详情,请参阅 GKE SandboxGKE Sandbox 配置

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行 gcloud components update 命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。

GKE 上的 GPU 的要求

GKE 上的 GPU 具有以下要求:

  • GPU 配额:您必须在所选可用区拥有 Compute Engine GPU 配额,然后才能创建 GPU 节点。如需确保项目中有充足的 GPU 配额,请参阅 Google Cloud 控制台中的配额

    如果您需要额外的 GPU 配额,则必须在 Google Cloud 控制台中申请 GPU 配额。如果您已有结算账号,则在您提交配额申请后,您的项目会自动获得配额。

    默认情况下,免费试用账号不会获得 GPU 配额。

  • NVIDIA GPU 驱动程序:创建集群或节点池时,您可以指示 GKE 根据您的 GKE 版本自动安装驱动程序版本。如果您不指示 GKE 自动安装 GPU 驱动程序,则必须手动安装驱动程序

  • 机器系列:可以使用的 GPU 类型取决于机器系列,如下所示:

    您应该确保您的项目中有足够的配额用于与您选择的 GPU 类型和数量对应的机器系列。

  • GKE 版本:您必须针对特定机器系列和配置使用特定 GKE 版本:

    • 加速器优化型 A 系列:请参阅相应的集群创建指南,了解版本要求。
    • 采用标准模式的 G4 机器系列

      • 具有一个或多个 GPU 的机器类型:1.34.0-gke.1662000 或更高版本
      • GPU 数量少于 1 的机器类型:根据 GKE 次要版本,使用以下补丁版本之一或更高版本:

        • 1.34:1.34.5-gke.1153000
        • 1.35 或更高版本:1.35.3-gke.1389000
  • Ubuntu 节点上的 GPU:如果您将 GPU 与 Ubuntu 节点搭配使用,则需要满足以下要求:

    • Ubuntu 驱动程序兼容性

      • L4 GPUH100 GPU:NVIDIA 驱动程序 535 或更高版本

      • H200 GPU:NVIDIA 驱动程序 550 版或更高版本

      • B200 GPU:NVIDIA 驱动程序 570 版或更高版本

      • RTX PRO 6000 GPU:NVIDIA 驱动程序 580 版或更高版本。此版本兼容性不包括 GPU 数量少于 1 个的 G4 机器类型,因为它们不支持 Ubuntu 节点映像。

      如果所需的驱动程序版本或更高版本不是 GKE 版本中的默认版本,则必须在节点上手动安装受支持的驱动程序。

    • Ubuntu 版本兼容性

      在 Ubuntu 节点池中使用 A4 机器系列时,您必须使用包含 ubuntu-gke-2404-1-32-amd64-v20250730 映像的 GKE 版本或更高版本的节点映像。最低 GKE 版本如下:

      • 1.32.7-gke.1067000 或更高版本(适用于 GKE 1.32 版)
      • 1.33.3-gke.1247000 或更高版本(适用于 GKE 版本 1.33)
最佳实践

将 Container-Optimized OS 用于 GPU 节点。Container-Optimized OS 包含所需的驱动程序,以支持 GPU 节点的特定 GKE 版本。

在 GKE 上使用 GPU 的限制

在使用 GKE 上的 GPU 之前,请注意以下限制:

按区域和可用区划分的 GPU 可用性

GPU 仅在特定区域和地区可用。当您申请 GPU 配额时,请考虑要在哪些区域运行集群。

如需查看适用区域和可用区的完整列表,请参阅 Compute Engine 上的 GPU

您还可以使用 Google Cloud CLI 查看您的可用区中可用的 GPU。如需查看每个可用区支持的所有 GPU 加速器类型的列表,请运行以下命令:

gcloud compute accelerator-types list

价格

如需了解 GPU 价格,请参阅 Google Cloud GPU 页面上的价格表

确保有足够的 GPU 配额

GPU 配额是可在 Google Cloud 项目中运行的 GPU 数量上限。要创建使用 GPU 的集群,您的项目必须拥有足够的 GPU 配额。

您的 GPU 配额至少应该等于您打算在集群中运行的 GPU 的总数。如果您启用集群自动扩缩功能,则申请的 GPU 配额至少应该等于每个节点的 GPU 数乘以集群的最大节点数所得的值。

例如,如果您创建一个包含三个节点的集群,每个节点运行两个 GPU,则您的项目至少需要六个 GPU 配额。

申请 GPU 配额

如需申请 GPU 配额,请使用 Google Cloud 控制台。如需详细了解如何申请配额,请参阅 Compute Engine 文档中的 GPU 配额

如需搜索 GPU 配额并提交配额请求,请使用 Google Cloud 控制台:

  1. 前往 Google Cloud 控制台中的 IAM 和管理配额页面。

    转到“配额”

  2. 过滤条件框中,执行以下操作:

    1. 选择配额属性,输入 GPU 模型的名称,然后按 Enter 键。
    2. (可选)如需应用更高级的过滤条件来缩小结果范围,请选择维度(如位置)属性,添加您正在使用的区域或可用区的名称,然后按 Enter 键。
  3. 从 GPU 配额列表中,选择要更改的配额。

  4. 点击修改配额。系统会打开申请表单。

  5. 填写每个配额申请的新配额上限字段。

  6. 申请说明字段中,填写有关您的申请的详细信息。

  7. 点击下一步

  8. 替换确认对话框中,点击确认

  9. 详细联系信息界面中,输入您的姓名和审批人可能用来完成配额更改请求的电话号码。

  10. 点击提交请求

  11. 您会收到一封确认电子邮件,用于跟踪配额更改情况。

在 GKE Standard 集群中运行 GPU

如需在 GKE Standard 集群中运行 GPU,请创建挂接了 GPU 的节点池。

最佳实践

如需提高 GKE 上 GPU 的性价比、可靠性和可用性,请执行以下操作:

  • 创建单独的 GPU 节点池。对于每个节点池,请将节点位置限制为提供所需的 GPU 的可用区。
  • 在每个节点池中启用自动扩缩。
  • 使用区域级集群跨区域中的可用区复制 Kubernetes 控制平面,从而提高可用性。
  • 配置 GKE 以自动在节点池上安装默认或最新 GPU 驱动程序,这样您就无需手动安装和管理驱动程序版本。

如以下部分所述,GKE 使用节点污点和容忍度来确保不会将 Pod 调度到不合适的节点。

对 GPU 节点池设置污点,以免对其进行不当调度

您可以利用节点污点对节点进行标记,以便调度器避免或阻止将其用于特定 Pod。根据以下场景,GKE 会自动添加 nvidia.com/gpu=present:NoSchedule 污点,您也可以手动添加该污点:

  • 当您将 GPU 节点池添加到已运行非 GPU 节点池的现有集群时,GKE 会自动使用以下节点污点污染 GPU 节点:

    • nvidia.com/gpu
    • present
    • 效果NoSchedule

    只有集群中存在至少一个非 GPU 节点池时,GKE 才会添加此污点。

  • 如果您向仅包含 GPU 节点池的集群添加 GPU 节点池,或者如果您创建一个默认节点池挂接了 GPU 的新集群,则可以手动为新节点池设置污点,并使用以下值:

    • nvidia.com/gpu
    • present
    • 效果NoSchedule
  • 在日后向集群添加非 GPU 节点池时,GKE 不会以追溯方式将此污点应用于现有 GPU 节点。您需要手动为新节点池设置污点

使用容忍设置自动限制调度

借助容忍,您可以指定能在“有污点的”节点上使用的 Pod。GKE 会自动应用容忍设置,以便仅在 GPU 节点上调度请求 GPU 的 Pod。这样可实现更高效的自动扩缩,因为如果没有足够的 Pod 请求 GPU,则 GPU 节点可以快速缩减。为此,GKE 会运行 ExtendedResourceToleration 准入控制器。

创建 GPU 节点池

如需在现有集群中创建单独的 GPU 节点池,您可以使用Google Cloud 控制台或 Google Cloud CLI。您还可以使用 Terraform 预配 GKE 集群和 GPU 节点池。

在以下场景中,GKE 支持自动安装 NVIDIA 驱动程序:

  • 对于控制平面版本为 1.32.2-gke.1297000 及更高版本的 GKE 集群,GKE 会自动为所有 GPU 节点(包括通过节点自动预配创建的节点)安装默认的 NVIDIA 驱动程序版本。
  • 对于控制平面版本为 1.30.1-gke.1156000 至 1.32.2-gke.1297000 的 GKE 集群,GKE 会自动为未使用节点自动预配创建的节点安装默认的 NVIDIA 驱动程序版本。
  • 您可以选择最新的可用驱动程序版本,也可以明确停用自动安装驱动程序功能。在 1.30.1-gke.1156000 之前的版本中,如果您在创建或更新节点池时未指定驱动程序版本,GKE 默认不会安装驱动程序。

gcloud

如需在集群中创建具有 GPU 的节点池,请运行以下命令:

gcloud container node-pools create POOL_NAME \
  --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \
  --machine-type MACHINE_TYPE \
  --cluster CLUSTER_NAME \
  --location CONTROL_PLANE_LOCATION \
  --node-locations COMPUTE_ZONE1[,COMPUTE_ZONE2] \
  [--sandbox=type=gvisor]
  [--enable-autoscaling \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES] \
  [--scopes=SCOPES] \
  [--service-account=SERVICE_ACCOUNT] \
  [--reservation-affinity=specific --reservation=RESERVATION_NAME]

请替换以下内容:

  • POOL_NAME:您为节点池选择的名称。
  • GPU_TYPE:您使用的 GPU 加速器的类型。例如 nvidia-tesla-t4
  • AMOUNT:要挂接到节点池中节点的 GPU 数量。将此数字设置为机器类型的 GPU 数量。例如,如果您将 MACHINE_TYPE 设置为 g4-standard-384,请将 AMOUNT 设置为 8,即挂接到相应机器类型的 GPU 数量。不过,如果您使用的 G4 机器类型的 GPU 不足一个,则必须将 AMOUNT 设置为 1。当您将 GPU_TYPE 设置为 nvidia-rtx-pro-6000 且将 MACHINE_TYPE 设置为以下值之一时,此参数是必需的:

    • g4-standard-6(GPU 的八分之一)
    • g4-standard-12(四分之一的 GPU)
    • g4-standard-24(半个 GPU)
    • g4-standard-48(一个 GPU)

    此外,对于运行低于 1.36 版的 GKE 版本的集群,请务必按照说明为 GPU 数量少于 1 的 G4 机器类型准备工作负载

  • DRIVER_VERSION:要安装的 NVIDIA 驱动程序版本。可以是下列选项之一:

    • default:为您的节点 GKE 版本安装默认驱动程序版本。在 GKE 1.30.1-gke.1156000 及更高版本中,如果您省略 gpu-driver-version 标记,则此标记为默认选项。在早期版本中,如果您省略此标志,GKE 不会安装驱动程序。
    • latest:为您的 GKE 版本安装最新可用的驱动程序版本。仅适用于使用 Container-Optimized OS 的节点。
    • disabled:跳过自动驱动程序安装。创建节点池后,您必须手动安装驱动程序。 在 1.30.1-gke.1156000 之前的 GKE 版本中,这是默认选项。

    gpu-driver-version 选项仅适用于 GKE 1.27.2-gke.1200 版及更高版本。在早期版本中,请省略此标志并在创建节点池后手动安装驱动程序。如果您将现有集群或节点池升级到此版本或更高版本,GKE 会自动安装与 GKE 版本对应的默认驱动程序版本,除非您在开始升级时指定不同的版本。

  • MACHINE_TYPE:节点的 Compute Engine 机器类型。对于以下 GPU 类型是必需的:

    • NVIDIA B200 GPU(对应于 nvidia-b200 加速器类型和 A4 机器系列
    • NVIDIA H200 141 GB GPU(对应于 nvidia-h200-141gb 加速器类型和 A3 Ultra 机器类型)或 NVIDIA H100 80 GB GPU(对应于 nvidia-h100-80gb 加速器类型和 A3 High 机器类型)或 NVIDIA H100 80GB Mega GPU(对应于 nvidia-h100-mega-80gb 加速器类型和 A3 Mega 机器类型)。如需了解详情,请参阅 Compute Engine 文档中的 A3 机器系列
    • NVIDIA A100 40 GB GPU(对应于 nvidia-tesla-a100 加速器类型和 A2 标准机器类型)或 NVIDIA A100 80GB GPU(对应于 nvidia-a100-80gb 加速器类型和 A2 超级机器)。如需了解详情,请参阅 Compute Engine 文档中的 A2 机器系列
    • NVIDIA L4 GPU(对应 nvidia-l4 加速器类型和 G2 机器系列)。
    • NVIDIA RTX PRO 6000 GPU(对应于 nvidia-rtx-pro-6000 加速器类型和 G4 机器系列)。

    对于所有其他 GPU,此标志是可选的。

  • CLUSTER_NAME:要在其中创建节点池的集群的名称。

  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。

  • COMPUTE_ZONE1,COMPUTE_ZONE2,[...]:GKE 创建 GPU 节点的特定可用区。可用区必须与集群位于同一区域,由 --location 标志指定。您定义的 GPU 类型必须在所选的每个可用区中可用。如果您使用预留,则必须指定预留具有容量的可用区。我们建议您在创建节点池时始终使用 --node-locations 标志,以指定包含所请求 GPU 的一个或多个可用区。

  • (可选)您可以创建节点池,以使用 gVisor 运行沙盒化的工作负载。如需了解详情,请参阅 GKE Sandbox

  • MIN_NODES:任何时候节点池中每个可用区的节点数下限。仅当使用 --enable-autoscaling 标志时,此值才相关。

  • MAX_NODES:任何时候节点池中每个可用区的节点数上限。仅当使用 --enable-autoscaling 标志时,此值才相关。

  • 您可以选择通过附加以下标志,使用自定义服务账号创建 GPU 节点池。如果省略,则节点池会使用 Compute Engine 默认服务账号

    • SERVICE_ACCOUNT:节点使用的 IAM 服务账号的名称。
    • SCOPES:要授予的访问权限范围的逗号分隔列表。确保其中一个范围是 storage-rohttps://www.googleapis.com/auth/devstorage.read_only。如需详细了解范围,请参阅设置访问权限范围。如果您省略范围标志,GPU 节点池创建会失败,并显示 AccessDenied 错误,指出无法从 GCS 存储桶下载 gpu_driver_versions.bin

  • RESERVATION_NAME:要使用的 GPU 预留的名称。指定 --reservation 标志并搭配 --reservation-affinity=specific,以使用特定预留中的 GPU 容量。如需了解详情,请参阅使用特定的单项目预留

例如,以下命令会在区域级集群 t4-cluster 中创建一个高可用性自动扩缩节点池 t4,每个节点有两个 T4 GPU。GKE 会自动在这些节点上安装默认驱动程序。

gcloud container node-pools create t4 \
  --accelerator type=nvidia-tesla-t4,count=2,gpu-driver-version=default \
  --cluster t4-cluster \
  --location us-central1 \
  --node-locations us-central1-c \
  --min-nodes 0 --max-nodes 5 --enable-autoscaling

您还可以更新现有节点池。例如,您可能需要更新 GPU 驱动程序来切换到最新的可用驱动程序:

gcloud container node-pools update t4 \
  --accelerator type=nvidia-tesla-t4,count=2,gpu-driver-version=latest \
  --cluster t4-cluster \
  --location us-central1

控制台

如需创建具有 GPU 的节点池,请运行以下命令:

  1. 前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击节点标签页。

  4. 点击 创建由用户管理的节点池

  5. (可选)在节点池详情页面上,选中启用自动扩缩复选框。

  6. 根据需要配置节点池。

  7. 在导航窗格中,选择节点

  8. 机器配置下,点击 GPU

  9. 选择要在每个节点上运行的 GPU 类型GPU 数量

  10. 阅读警告,然后选择我了解这些限制

  11. GPU Driver installation 部分中,选择以下方法之一:

    • Google 管理:GKE 会自动安装驱动程序。如果您选择此选项,请从版本下拉列表中选择以下项之一:
      • 默认:安装默认驱动程序版本。
      • 最新:安装最新可用的驱动程序版本。
    • 由客户管理:GKE 不会安装驱动程序。您必须按照安装 NVIDIA GPU 设备驱动程序中的说明手动安装兼容的驱动程序。
  12. 点击创建

Terraform

您可以通过 Terraform 模块创建一个使用具有 GPU 的 Terraform 的区域级集群。

  1. 通过在 variables.tf 文件中添加以下代码块来设置 Terraform 变量:

    variable "project_id" {
      default     = PROJECT_ID
      description =