本页面介绍了如何在 Google Kubernetes Engine (GKE) 标准集群的节点中挂接并使用 NVIDIA® 图形处理器 (GPU) 硬件加速器,以运行和优化计算密集型工作负载(例如人工智能 [AI] 和图形处理)。
如果您改用 Autopilot Pod,请参阅在 Autopilot 中部署 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 Sandbox 和 GKE Sandbox 配置。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
GKE 上的 GPU 的要求
GKE 上的 GPU 具有以下要求:
Kubernetes 版本:可用的版本取决于 GPU 使用的节点映像:
- Container-Optimized OS:GKE 版本 1.9 或更高版本。
- Ubuntu:GKE 版本 1.11.3 或更高版本。
GPU 配额:您必须在所选可用区拥有 Compute Engine GPU 配额,然后才能创建 GPU 节点。如需确保项目中有充足的 GPU 配额,请参阅 Google Cloud 控制台中的配额。
如果您需要额外的 GPU 配额,则必须在 Google Cloud 控制台中申请 GPU 配额。如果您已有结算账号,则在您提交配额申请后,您的项目会自动获得配额。
默认情况下,免费试用账号不会获得 GPU 配额。
NVIDIA GPU 驱动程序:创建集群或节点池时,您可以指示 GKE 根据您的 GKE 版本自动安装驱动程序版本。如果您不指示 GKE 自动安装 GPU 驱动程序,则必须手动安装驱动程序。
A100 GPU:只有 a2 机器类型支持 A100 GPU。您必须确保底层 A2 机器类型有足够的配额来使用 A100 GPU。
Ubuntu 节点上的 GPU:如果您将 GPU 与 Ubuntu 节点搭配使用,则需要满足以下驱动程序要求。
L4 GPU 和 H100 GPU:NVIDIA 驱动程序 535 或更高版本。
如果所需的驱动程序版本或更高版本不是 GKE 版本中的默认版本,则必须在节点上手动安装受支持的驱动程序。
将 Container-Optimized OS 用于 GPU 节点。Container-Optimized OS 包含所需的驱动程序,以支持 GPU 节点的特定 GKE 版本。
在 GKE 上使用 GPU 的限制
在使用 GKE 上的 GPU 之前,请注意以下限制:
- 您无法将 GPU 添加到现有节点池。
- 在维护事件期间,GPU 节点无法进行实时迁移。
可以使用的 GPU 类型取决于机器系列,如下所示:
您应该确保您的项目中有足够的配额用于与您选择的 GPU 类型和数量对应的机器系列。
Windows Server 节点池不支持 GPU。
运行 1.28.2-gke.1098000 或更低版本的 GKE Standard 集群不支持节点自动配置,因此无法创建包含 L4 GPU 的节点池。不过,运行较早版本的集群支持使用集群自动扩缩器扩缩现有节点池。
如果您使用的是 H100 GPU,并且希望在 Pod 中使用本地固态硬盘,则必须明确指定要挂接到底层 A3 虚拟机的本地固态硬盘 的精确数量。使用
--ephemeral-storage-local-ssd=count=SSD_COUNT
标志(对于临时存储)或--local-nvme-ssd-block=count=SSD_COUNT
标志(对于块访问)指定数量。如果您不添加其中一个标志,将无法在 Pod 中使用本地固态硬盘。GKE 中支持的机器大小为
a3-highgpu-8g
,相应的本地 SSD 数量为16
。
按区域和可用区划分的 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 控制台:
转到 Google Cloud 控制台中的 IAM 和管理配额页面。
在过滤条件框中,执行以下操作:
- 选择配额属性,输入 GPU 模型的名称,然后按 Enter 键。
- (可选)如需应用更高级的过滤条件来缩小结果范围,请选择维度(如位置)属性,添加您正在使用的区域或可用区的名称,然后按 Enter 键。
从 GPU 配额列表中,选择要更改的配额。
点击修改配额。系统会打开申请表单。
填写每个配额申请的新配额上限字段。
在申请说明字段中,填写有关您的申请的详细信息。
点击下一步。
在替换确认对话框中,点击确认。
在详细联系信息界面中,输入您的姓名和审批人可能用来完成配额更改请求的电话号码。
点击提交请求。
您会收到一封确认电子邮件,用于跟踪配额更改情况。
在 GKE Standard 集群中运行 GPU
如需在 GKE Standard 集群中运行 GPU,请创建挂接了 GPU 的节点池。
如需提高 GKE 上 GPU 的性价比、可靠性和可用性,请执行以下操作:
- 创建单独的 GPU 节点池。对于每个节点池,请将节点位置限制为提供所需的 GPU 的可用区。
- 在每个节点池中启用自动扩缩。
- 使用区域级集群跨区域中的可用区复制 Kubernetes 控制平面,从而提高可用性。
- 配置 GKE 以自动在节点池上安装默认或最新 GPU 驱动程序,这样您就无需手动安装和管理驱动程序版本。
如以下部分所述,GKE 使用节点污点和容忍度来确保不会将 Pod 调度到不合适的节点。
自动污染 GPU 节点池,以免将其不当调度
您可以利用节点污点对节点进行标记,以便调度器避免或阻止将其用于特定 Pod。当您将 GPU 节点池添加到已运行非 GPU 节点池的现有集群时,GKE 会自动为 GPU 节点添加以下节点污点:
- 键:
nvidia.com/gpu
- 效果:
NoSchedule
只有集群中存在非 GPU 节点池时,GKE 才会添加此污点。如果您向所有现有节点池都是 GPU 节点池的集群添加 GPU 节点池,或者如果您创建一个默认节点池挂接了 GPU 的新集群,则上述污点不会添加到 GPU 节点。
如果您日后向集群添加非 GPU 节点池,则 GKE 不会以追溯方式将此污点应用于现有 GPU 节点。
使用容忍设置自动限制调度
借助容忍,您可以指定能在“有污点的”节点上使用的 Pod。GKE 会自动应用容忍设置,以便仅在 GPU 节点上调度请求 GPU 的 Pod。这样可实现更高效的自动扩缩,因为如果没有足够的 Pod 请求 GPU,则 GPU 节点可以快速缩减。为此,GKE 会运行 ExtendedResourceToleration 准入控制器。
创建 GPU 节点池
如需在现有集群中创建单独的 GPU 节点池,您可以使用 Google Cloud 控制台或 Google Cloud CLI。您还可以使用 Terraform 预配 GKE 集群和 GPU 节点池。
在 GKE 控制平面版本 1.30.1-gke.1156000 及更高版本中,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 \
--region COMPUTE_REGION --cluster CLUSTER_NAME \
--node-locations COMPUTE_ZONE1[,COMPUTE_ZONE2] \
[--enable-autoscaling \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES] \
[--ephemeral-storage-local-ssd=count=SSD_COUNT]
请替换以下内容:
POOL_NAME
:您为节点池选择的名称。GPU_TYPE
:您使用的 GPU 加速器的类型。例如nvidia-tesla-t4
。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 版本对应的默认驱动程序版本,除非您在开始升级时指定不同的版本。AMOUNT
:要挂接到节点池中节点的 GPU 数量。MACHINE_TYPE
:节点的 Compute Engine 机器类型。对于以下 GPU 类型是必需的:- 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 机器系列)。
对于所有其他 GPU,此标志是可选的。
- NVIDIA H100 80 GB GPU(对应于
COMPUTE_REGION
:集群的 Compute Engine 区域,例如us-central1
。选择一个区域,该区域至少有一个提供请求的 GPU 的可用区。CLUSTER_NAME
:要在其中创建节点池的集群的名称。COMPUTE_ZONE1,COMPUTE_ZONE2,[...]
:GKE 创建 GPU 节点的特定可用区。可用区必须与集群位于同一区域,由--region
标志指定。您定义的 GPU 类型必须在所选的每个可用区中可用。我们建议您在创建节点池时始终使用--node-locations
标志,以指定包含所请求 GPU 的一个或多个可用区。MIN_NODES
:任何时候节点池中每个可用区的节点数下限。仅当使用--enable-autoscaling
标志时,此值才相关。MAX_NODES
:任何时候节点池中每个可用区的节点数上限。仅当使用--enable-autoscaling
标志时,此值才相关。SSD_COUNT
:要挂接以用作临时存储的本地 SSD 数量。在具有 H100 GPU 的 A3 机器类型中使用本地 SSD 时需要此标志。
例如,以下命令会在区域级集群 p100-cluster
中创建一个高可用性自动扩缩节点池 p100
,每个节点有两个 P100 GPU。GKE 会自动在这些节点上安装默认驱动程序。
gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2,gpu-driver-version=default \
--region us-central1 --cluster p100-cluster \
--node-locations us-central1-c \
--min-nodes 0 --max-nodes 5 --enable-autoscaling
控制台
如需创建具有 GPU 的节点池,请运行以下命令:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
点击 add_box 添加节点池。
(可选)在节点池详情页面上,选中启用自动扩缩复选框。
根据需要配置节点池。
在导航窗格中,选择节点。
在机器配置下,点击 GPU。
选择要在每个节点上运行的 GPU 类型和 GPU 数量。
阅读警告,然后选择我了解这些限制。
在 GPU Driver installation 部分中,选择以下方法之一:
- Google 管理:GKE 会自动安装驱动程序。如果您选择此选项,请从版本下拉列表中选择以下项之一:
- 默认:安装默认驱动程序版本。
- 最新:安装最新可用的驱动程序版本。
- 由客户管理:GKE 不会安装驱动程序。您必须按照安装 NVIDIA GPU 设备驱动程序中的说明手动安装兼容的驱动程序。
- Google 管理:GKE 会自动安装驱动程序。如果您选择此选项,请从版本下拉列表中选择以下项之一:
点击创建。
Terraform
您可以通过 Terraform 模块创建一个使用具有 GPU 的 Terraform 的区域级集群。
通过在
variables.tf
文件中添加以下代码块来设置 Terraform 变量:variable "project_id" { default = PROJECT_ID description = "the gcp_name_short project where GKE creates the cluster" } variable "region" { default = CLUSTER_REGION description = "the gcp_name_short region where GKE creates the cluster" } variable "zone" { default = "COMPUTE_ZONE1,COMPUTE_ZONE2" description = "the GPU nodes zone" } variable "cluster_name" { default = "CLUSTER_NAME" description = "the name of the cluster" } variable "gpu_type" { default = "GPU_TYPE" description = "the GPU accelerator type" } variable "gpu_driver_version" { default = "DRIVER_VERSION" description = "the NVIDIA driver version to install" } variable "machine_type" { default = "MACHINE_TYPE" description = "The Compute Engine machine type for the VM" }
请替换以下内容:
PROJECT_ID
:您的项目 ID。CLUSTER_NAME
:GKE 集群的名称。CLUSTER_REGION
:集群的 计算区域。COMPUTE_ZONE1,COMPUTE_ZONE2,[...]
:GKE 创建 GPU 节点的特定可用区。可用区必须在region
变量指定的区域内。这些可用区必须具有您定义的 GPU 类型。如需了解哪些可用区具有 GPU,请参阅可用性。在创建 GPU 节点池时应使用node_locations
变量,以指定包含所请求 GPU 的一个或多个可用区。GPU_TYPE
:您使用的 GPU 加速器的类型。例如nvidia-tesla-t4
。DRIVER_VERSION
:GKE 自动安装的 GPU 驱动程序版本。此字段是可选字段。 支持以下值:INSTALLATION_DISABLED
:停用 GPU 驱动程序自动安装。 您必须手动安装驱动程序才能运行 GPU。在 1.30.1-gke.1156000 之前的 GKE 版本中,如果您省略此字段,则此字段为默认选项。DEFAULT
:自动安装与节点操作系统版本对应的默认驱动程序版本。 在 GKE 1.30.1-gke.1156000 及更高版本中,如果您省略此字段,则会使用默认选项。在早期版本中,如果您省略此字段,GKE 不会安装驱动程序。LATEST
:自动安装节点操作系统版本可用的最新驱动程序版本。 仅适用于使用 Container-Optimized OS 的节点。
如果省略此字段,GKE 不会自动安装驱动程序。使用节点自动预配功能的节点池不支持此字段。如需手动安装驱动程序,请参阅本文档中的手动安装 NVIDIA GPU 驱动程序。
MACHINE_TYPE
:节点的 Compute Engine 机器类型。对于以下 GPU 类型是必需的:- 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 机器系列)。
对于所有其他 GPU,此标志是可选的。
- NVIDIA H100 80 GB GPU(对应于
将以下块添加到 Terraform 配置中:
provider "google" { project = var.project_id region = var.region } resource "google_container_cluster" "ml_cluster" { name = var.cluster_name location = var.region node_locations = [var.zone] } resource "google_container_node_pool" "gpu_pool" { name = google_container_cluster.ml_cluster.name location = var.region cluster = google_container_cluster.ml_cluster.name node_count = 3 autoscaling { total_min_node_count = "1" total_max_node_count = "5" } management { auto_repair = "true" auto_upgrade = "true" } node_config { oauth_scopes = [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/trace.append", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", ] labels = { env = var.project_id } guest_accelerator { type = var.gpu_type count = 1 gpu_driver_installation_config { gpu_driver_version = var.gpu_driver_version } } image_type = "cos_containerd" machine_type = var.machine_type tags = ["gke-node", "${var.project_id}-gke"] disk_size_gb = "30" disk_type = "pd-standard" metadata = { disable-legacy-endpoints = "true" } } }
Terraform 会调用 Google Cloud API,以设置一个包含使用 GPU 的节点池的新集群。节点池最初有三个节点,并且启用了自动扩缩功能。如需详细了解 Terraform,请参阅 terraform.io 上的 google_container_node_pool
资源规范。
为避免产生更多费用,请使用 terraform destroy
命令移除配置文件中定义的所有资源。
最佳实践:您还可以创建具有 GPU 的新集群,并使用 --node-locations
标志指定可用区。不过,我们建议您在现有集群中创建单独的 GPU 节点池,如本部分所示。
手动安装 NVIDIA GPU 驱动程序
您可以通过将安装 DaemonSet 部署到这些节点,在节点上手动安装 NVIDIA GPU 驱动程序。在以下情况下,请使用手动安装:
- 您在创建 GPU 节点池时选择了停用自动设备驱动程序安装。
- 您使用的 GKE 版本低于自动安装支持的最低版本。
- 您的工作负载需要特定的 NVIDIA 驱动程序版本,而该版本无法作为默认驱动程序或自动安装的最新驱动程序。
尽可能使用自动驱动程序安装。为此,请在创建标准集群时在 --accelerator
标志中指定 gpu-driver-version
选项。如果您已在 2023 年 1 月 25 日或之前使用安装 DaemonSet 来手动安装 GPU 驱动程序,您可能获取重新应用 DaemonSet 以获得忽略使用自动驱动程序安装的节点的版本。
为了运行安装 DaemonSet,GPU 节点池需要使用 https://www.googleapis.com/auth/devstorage.read_only
范围与 Cloud Storage 进行通信。如果没有此范围,则下载 DaemonSet 清单将失败。此范围是默认范围之一,通常在您创建集群时添加。
以下说明介绍了如何使用 Terraform 在 Container-Optimized OS (COS) 和 Ubuntu 节点上安装驱动程序。
COS
要部署 DaemonSet 的安装并安装默认的 GPU 驱动程序版本,请运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
或者,如需安装较新的 GPU 驱动程序版本(请参阅下表),请运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded-latest.yaml
安装需要几秒钟才能完成。安装完成后,NVIDIA GPU 设备插件会使用 Kubernetes API 提供 NVIDIA GPU 容量。
每个版本的 Container-Optimized OS 映像都至少有一个受支持的 NVIDIA GPU 驱动程序版本。如需了解默认支持的版本,请参阅主要 Container-Optimized OS LTS 里程碑的版本说明。
下表列出了每个 GKE 版本中可用的驱动程序版本:
GKE NVIDIA 驱动程序版本 | ||
---|---|---|
1.30 | R535(默认)或 R550 | |
1.29 | R535(默认)或 R550 | |
1.28 | R535(默认)或 R550 | |
1.27 | R470(默认)、R525、R535 或 R550 | |
1.26 | R470(默认)、R525、R535 或 R550 |
Ubuntu
您部署的 DaemonSet 取决于 GPU 类型和 GKE 节点版本,如下所示:
对于除 NVIDIA L4 GPU 和 NVIDIA H100 GPU 以外的所有 GPU,请运行以下命令:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml
对于运行 2024-R05 版本或更高版本的节点版本的 NVIDIA L4 GPU 或 H100 GPU,请安装
R535
驱动程序:kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml
对于运行在 2024-R05 版本或更高版本之前的版本中发布的节点版本的 NVIDIA L4 GPU 或 H100 GPU,请安装
R525
驱动程序:kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R525.yaml
安装需要几秒钟才能完成。安装完成后,NVIDIA GPU 设备插件会使用 Kubernetes API 提供 NVIDIA GPU 容量。
下表列出了每个 GKE 版本中可用的驱动程序版本:
Ubuntu GPU 驱动程序和 GKE 版本 | ||
---|---|---|
1.30 | R470 或 R535 | |
1.29 | R470 或 R535 | |
1.28 | R470 或 R535 | |
1.27 | R470 或 R535 | |
1.26 | R470 或 R535 |
Terraform
您可以使用 Terraform 来根据节点类型安装默认 GPU 驱动程序版本。在以下两种情况下,您都必须配置 kubectl_manifest
Terraform 资源类型。
如需安装 DaemonSet on COS,请在 Terraform 配置中添加以下块:
data "http" "nvidia_driver_installer_manifest" { url = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml" } resource "kubectl_manifest" "nvidia_driver_installer" { yaml_body = data.http.nvidia_driver_installer_manifest.body }
如需安装 DaemonSet on Ubuntu,请在 Terraform 配置中添加以下块:
data "http" "nvidia_driver_installer_manifest" { url = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml" } resource "kubectl_manifest" "nvidia_driver_installer" { yaml_body = data.http.nvidia_driver_installer_manifest.body }
将节点自动预配与 GPU 搭配使用来安装驱动程序
将节点自动预配与 GPU 搭配使用时,默认情况下,自动预配的节点池没有足够的范围来安装驱动程序。如需授予所需的范围,请修改节点自动预配的默认范围,以添加 logging.write
、monitoring
、devstorage.read_only
和 compute
,如以下示例所示。
gcloud container clusters update CLUSTER_NAME --enable-autoprovisioning \
--min-cpu=1 --max-cpu=10 --min-memory=1 --max-memory=32 \
--autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/compute
在 GKE 1.29.2-gke.1108000 版及更高版本中,您可以选择 GPU 驱动程序版本,以供 GKE 自动安装在自动预配的 GPU 节点中。请将以下字段添加到清单中:
spec:
nodeSelector:
cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"
将 DRIVER_VERSION
替换为以下某个值:
default
- 适用于节点 GKE 版本的默认稳定驱动程序。如果您在清单中省略 nodeSelector,则这是默认选项。latest
- 适用于节点 GKE 版本的最新可用驱动程序版本。
如需详细了解自动预配,请参阅使用节点自动预配。
配置 Pod 使用 GPU
您可以使用资源限制来配置 Pod,以使用 GPU。您可以使用以下键值对在 Pod 规范中指定资源限制
- 键:
nvidia.com/gpu
- 值:要使用的 GPU 数量
不支持将 alpha.kubernetes.io/nvidia-gpu
用作 GKE 中的资源名称。请改为将 nvidia.com/gpu
用作资源名称。
以下清单是使用 GPU 的 Pod 规范示例:
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: 2
使用多种 GPU 类型
如果每个集群要使用多种 GPU 加速器类型,那么您必须创建多个节点池,每个节点池都具有各自的加速器类型。 GKE 将特有的节点选择器附加到 GPU 节点,以帮助您将 GPU 工作负载置于具有特定 GPU 类型的节点上:
- 键:
cloud.google.com/gke-accelerator
- 值:您使用的 GPU 加速器的类型。例如
nvidia-tesla-t4
。
您可以将此节点选择器添加到工作负载的 Pod 规范中,以定位特定的 GPU 类型。例如:
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: 2
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-tesla-t4
使用加速器(GPU 和 TPU)升级节点池
GKE 会自动升级 Standard 集群,包括节点池。如果您希望节点更快地升级到更高版本,也可以手动升级节点池。如需控制集群升级的方式,请使用发布渠道、维护窗口和排除项以及 发布顺序。
您还可以为节点池配置节点升级策略,例如超额配置升级或蓝绿升级。通过配置这些策略,您可以确保节点池的升级方式能够在速度和环境中断之间实现最佳平衡。对于多主机 TPU 切片节点池,GKE 会在单一步骤中以原子方式重新创建整个节点池,而不是使用配置的节点升级策略。如需了解详情,请参阅 GKE 中的 TPU 相关术语中的“原子性”定义。
使用节点升级策略会暂时要求 GKE 预配更多资源,具体取决于配置。如果 Google Cloud 对节点池的资源具有容量限制(例如,您尝试使用 GPU 或 TPU 创建更多节点时出现资源可用性错误),请参阅在资源受限的环境中升级。
关于 NVIDIA CUDA-X 库
CUDA 是 NVIDIA 的并行计算平台和 GPU 的编程模型。如需使用 CUDA 应用,您使用的映像必须具有库。如需添加 NVIDIA CUDA-X 库,您可以通过在容器规范的 LD_LIBRARY_PATH
环境变量中添加以下值来构建和使用自己的映像:
/usr/local/cuda-CUDA_VERSION/lib64
:NVIDIA CUDA-X 库在节点上的位置。将
CUDA_VERSION
替换为您使用的 CUDA-X 映像版本。某些版本还在/usr/local/nvidia/bin
中包含调试实用程序。如需了解详情,请参阅 DockerHub 上的 NVIDIA CUDA 映像。如需查看您的 CUDA 版本所需的最低 GPU 驱动程序版本,请参阅 CUDA 工具包和兼容驱动程序版本。
/usr/local/nvidia/lib64
:NVIDIA 设备驱动程序的位置。
监控 GPU 节点工作负载性能
如果您的 GKE 集群启用了系统指标,则 Cloud Monitoring 中提供以下指标来监控 GPU 工作负载的性能:
- 工作周期 (
container/accelerator/duty_cycle
):加速器活跃处理的时间占过去的采样周期(10 秒)的百分比。介于 1 到 100 之间。 - 内存用量 (
container/accelerator/memory_used
):已分配的加速器内存量(以字节为单位)。 - 内存容量 (
container/accelerator/memory_total
):加速器内存总量(以字节为单位)。
您可以使用预定义的信息中心来监控具有 GPU 节点的集群。如需了解详情,请参阅查看可观测性指标。如需了解有关监控集群及其资源的一般信息,请参阅 GKE 可观测性。
查看工作负载的用量指标
您可以在 Google Cloud 控制台的工作负载信息中心内查看工作负载 GPU 用量指标。
如需查看工作负载 GPU 用量,请执行以下步骤:
进入 Google Cloud 控制台中的工作负载页面。
进入“工作负载”- 选择工作负载。
“工作负载”信息中心会显示 GPU 内存用量和容量以及 GPU 工作周期的图表。
查看 NVIDIA 数据中心 GPU 管理器 (DCGM) 指标
您可以使用 Google Cloud Managed Service for Prometheus 收集并直观呈现 NVIDIA DCGM 指标。对于 Autopilot 集群,GKE 会安装这些驱动程序。 对于 Standard 集群,您必须安装 NVIDIA 驱动程序。
如需了解如何部署 GKE 管理的 DCGM 软件包,请参阅收集和查看 NVIDIA Data Center GPU Manager (DCGM) 指标。
配置 GPU 节点的正常终止
在控制平面运行 1.29.1-gke.1425000 或更高版本的 GKE 集群中,GPU 节点支持 SIGTERM
信号,用于提醒节点即将关停。在 GPU 节点中,即将关停通知的可配置时间最长为 60 分钟。
如需将 GKE 配置为在此通知时间范围内正常终止工作负载,请按照管理 GKE 节点中断情况(适用于 GPU 和 TPU)中的步骤操作。