使用 GPU 加速器运行实例

本页面介绍如何在 Container-Optimized OS 虚拟机 (VM) 实例上使用 NVIDIA 图形处理器 (GPU) 硬件加速器。

概览

通过使用 Compute Engine,您可以创建 挂接了 GPU 的 Container-Optimized OS。在 Compute Engine 上运行 GPU 时,您只能使用两个机器系列:加速器优化型和 N1 通用型。

  • 对于加速器优化机器类型,每种机器类型都挂接了特定型号的 NVIDIA GPU。

    • 对于 A3 加速器优化机器类型,挂接了 NVIDIA H100 80GB GPU
    • 对于 A2 加速器优化机器类型, 已挂接 NVIDIA A100 GPU。 有 A100 40GB 和 A100 80GB 可供选择。
    • G2 加速器优化机器类型挂接 NVIDIA L4 GPU
  • 对于 N1 通用机器类型,您可以挂接以下 GPU:

GPU 提供计算能力,可推动图像识别等深度学习任务 以及自然语言处理和其他计算密集型任务, 例如视频转码和图片处理。

Google Cloud 为您提供运行 GPU 工作负载的无缝体验 Container-Optimized OS 虚拟机实例上的容器内, 也可以受益于其他 Container-Optimized OS 功能 安全性和可靠性

如需详细了解 GPU 的用例,请参阅 Cloud GPU

如需了解如何在 Google Kubernetes Engine (GKE) 上使用 GPU,请参阅在 GKE 上运行 GPU

要求

在 Container-Optimized OS 虚拟机实例上运行 GPU 具有以下要求:

  • Container-Optimized OS x86 映像:仅基于 x86 的 Container-Optimized OS 支持运行 GPU。基于 ARM 的 Container-Optimized OS 映像不会 支持该功能。

  • Container-Optimized OS 版本:要在 Container-Optimized OS 虚拟机实例上运行 GPU,Container-Optimized OS 发布里程碑必须为 LTS 里程碑并且里程碑编号必须为 85 或更高。

  • GPU 配额:您必须拥有所选可用区的 Compute Engine GPU 配额,才能创建具有 GPU 的 Container-Optimized OS 虚拟机实例。如需确保项目中有足够的 GPU 配额,请参阅 Google Cloud 控制台中的配额

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

  • NVIDIA GPU 驱动程序:您必须在 Container-Optimized OS 虚拟机实例上自行安装 NVIDIA GPU 驱动程序。本部分介绍如何在 Container-Optimized OS 虚拟机实例上安装驱动程序。

创建虚拟机

以下部分介绍了如何在 Container-Optimized OS 虚拟机上运行 GPU。

首先,您需要一个具有 GPU 的 Container-Optimized OS 虚拟机实例。用于创建虚拟机的方法取决于所选的 GPU 型号。

您也可以添加 GPU 现有 Container-Optimized OS 虚拟机实例

创建虚拟机时,请记住从 cos-cloud 映像项目中选择映像或映像系列。

如需检查当前 Container-Optimized OS 虚拟机实例附加的所有 GPU,请运行以下命令:

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

替换以下内容:

安装 NVIDIA GPU 设备驱动程序

创建具有一个或多个 GPU 的实例后,系统需要安装设备驱动程序,以便应用可以访问该设备。本指南介绍在 Container-Optimized OS 虚拟机实例上安装 NVIDIA 专有驱动程序的方法。

Container-Optimized OS 提供一个内置实用程序 cos-extensions,用于简化 NVIDIA 驱动程序安装过程。运行该实用程序,即表示用户接受 NVIDIA 许可协议。

确定 GPU 驱动程序版本

每个版本的 Container-Optimized OS 映像都有一个支持的清单 每种 GPU 类型的 NVIDIA GPU 驱动程序版本,以及 每种类型。 如需查看受支持版本的完整列表,请参阅主要 Container-Optimized OS LTS 里程碑的版本说明

您也可以查看设备上的 GPU 支持的所有 GPU 驱动程序版本 Container-Optimized OS 虚拟机实例:

sudo cos-extensions list

确定所需的 CUDA 工具包版本

如果您的应用使用 CUDA,请在容器中安装 NVIDIA 的 CUDA 工具包。各个版本的 CUDA 都有最低 GPU 驱动程序版本要求(或更高版本)。如需查看您的 CUDA 版本所需的最低 GPU 驱动程序版本,请参阅 CUDA 工具包和兼容驱动程序版本。确保您正在使用的 Container-Optimized OS 版本具有您使用的 CUDA 版本的正确 GPU 驱动程序版本。

安装驱动程序

您可以使用 shell 命令、启动脚本或 cloud-init 安装 GPU。这三种方法都使用 sudo cos-extensions install gpu 命令为 Container-Optimized OS LTS 版本安装默认 GPU 驱动程序。

Shell

连接到 Container-Optimized OS 虚拟机实例后,您可以手动运行以下命令来安装驱动程序:

sudo cos-extensions install gpu

启动脚本

您还可以通过启动脚本安装 GPU 驱动程序。您可以在创建虚拟机实例时提供启动脚本,也可以将脚本应用于正在运行的虚拟机实例,然后重新启动虚拟机。这样,您就可以在不连接到虚拟机的情况下安装驱动程序。这还将确保每次虚拟机重新启动时都配置 GPU 驱动程序。

下面是安装驱动程序的示例启动脚本:

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

Cloud-init 与启动脚本类似,但功能更强大。以下示例展示了如何通过 cloud-init 安装 GPU 驱动程序:

#cloud-config

runcmd:
  - cos-extensions install gpu

您可以使用 cloud-init 指定依赖项,以便 GPU 只有安装了该驱动程序后,应用才会运行。如需了解详情,请参阅端到端:在 Container-Optimized OS 上运行 GPU 应用部分。

如需详细了解如何在 Container-Optimized OS 虚拟机实例上使用 cloud-init,请参阅创建和配置实例页面。

在某些情况下,Container-Optimized OS 包含的默认驱动程序 您的 CUDA 工具包或应用的 GPU 模型。请参阅必需的 NVIDIA 驱动程序 版本,了解特定类型的 GPU 的版本要求。

如需安装特定的 GPU 驱动程序版本,请运行以下命令:

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

DRIVER_VERSION 替换为以下某个选项:

  • default:安装由 Container-Optimized OS 版本。此版本修复了 bug 安全更新
  • latest:安装 Container-Optimized OS 版本中提供的最新驱动程序。请注意,这可能会导致 由于跨 COS 的潜在主要版本更新导致的兼容性变化 发布。
  • 完整版本:使用此选项可为工作负载固定到特定版本 对驾驶员变更敏感。例如,指定版本 535.183.01
  • NVIDIA 驱动程序分支:在特定 NVIDIA 分支中安装最新的稳定版驱动程序,以便及时了解该分支中的安全更新和 bug 修复。例如,指定分支 R535。此选项将于以下日期开始提供: cos-gpu-installer:v2.2.1起。

如需查看每种选项的可用版本,请运行标识 GPU 驱动程序版本的命令。

验证安装

您可以在 Container-Optimized OS 虚拟机实例上运行以下命令,以手动验证 GPU 驱动程序的安装。该命令的输出会显示 GPU 设备信息,例如设备状态和驱动程序版本。

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

配置容器以使用 GPU

安装 GPU 驱动程序后,您可以将容器配置为使用 GPU。以下示例展示了如何在使用 /dev/nvidia0 的 Docker 容器中运行 CUDA 应用:

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

您可以通过 cloud-init 运行容器,以指定 驱动程序安装和容器之间的依赖关系请参阅 端到端:在 Container-Optimized OS 上运行 GPU 应用 部分。

端到端:在 Container-Optimized OS 上运行 GPU 应用

以下端到端示例向您展示了如何使用 cloud-init 配置 Container-Optimized OS 虚拟机实例,以便在安装 GPU 驱动程序后预配 GPU 应用容器 myapp:latest

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

关于 NVIDIA CUDA-X 库

CUDA® 是 NVIDIA 的并行计算平台和 GPU 的编程模型。如需使用 CUDA 应用,您使用的映像中必须包含这些库。您可以执行以下任一操作来添加 NVIDIA CUDA-X 库:

  • 使用预装了 NVIDIA CUDA-X 库的映像。例如,您可以使用 Google 的 Deep Learning Containers。这些容器预安装了关键的数据科学框架 NVIDIA CUDA-X 库和工具。或者,NVIDIA 的 CUDA 映像仅包含 NVIDIA CUDA-X 库。

  • 构建并使用您自己的映像。在本例中,请在 LD_LIBRARY_PATH 环境变量中添加包含 NVIDIA CUDA-X 库的 /usr/local/cuda-XX.X/lib64 和包含 NVIDIA 设备驱动程序的 /usr/local/nvidia/lib64。对于 /usr/local/cuda-XX.X/lib64,目录的名称取决于您使用的映像版本。例如,Docker 容器中的 NVIDIA CUDA-X 库和调试实用程序可分别位于 /usr/local/cuda-11.0/lib64/usr/local/nvidia/bin

安全

就像 Container-Optimized OS 上的其他内核模块一样,GPU 驱动程序也通过内置于 Container-Optimized OS 内核中的密钥进行加密签名和验证。与其他某些发行版不同,Container-Optimized OS 不允许用户注册其机器所有者密钥 (MOK),以及使用这些密钥对自定义内核模块进行签名。这是为了确保 Container-Optimized OS 内核的完整性并减少攻击面。

限制

Container-Optimized OS 版本限制

只有 Container-Optimized OS LTS 发布里程碑 85 及更高版本支持在安装 NVIDIA GPU 设备驱动程序部分中提及的 cos-extensions 实用程序。对于早期的 Container-Optimized OS 版本里程碑,请使用 cos-gpu-installer 开源工具,手动安装 GPU 驱动程序。

虚拟机实例限制

具有 GPU 的虚拟机实例存在特定限制,因而其行为与其他类型的实例会有所不同。如需了解详情,请参阅 Compute Engine GPU 限制页面。

配额和可用性

GPU 仅在特定区域和地区可用。 当您申请 GPU 配额时,请考虑要在哪些地区运行 Container-Optimized OS 虚拟机实例。

如需查看适用区域和可用区的完整列表,请参阅 Compute Engine 上的 GPU。您还可以使用 Google Cloud CLI 查看您的可用区中可用的 GPU。

gcloud compute accelerator-types list

价格

如需了解 GPU 价格,请参阅 Compute Engine 价格页面

可支持性

每个 Container-Optimized OS 发布版本都有至少一个支持的 NVIDIA GPU 驱动程序版本。Container-Optimized OS 团队会在发布之前针对 Container-Optimized OS 版本限定支持的 GPU 驱动程序,以确保这些驱动程序兼容。NVIDIA GPU 驱动程序的新版本可能会不时提供。某些 GPU 驱动程序版本不符合 Container-Optimized OS 要求,并且无法保证资格时间轴。

当 Container-Optimized OS 团队在发布里程碑发布新版本时,我们会尝试在相应的驱动程序分支上支持最新的 GPU 驱动程序版本。这是为了尽快修复在 GPU 驱动程序中发现的 CVE。

如果 Container-Optimized OS 客户发现与 NVIDIA GPU 驱动程序相关的问题,则客户必须直接向 NVIDIA 寻求支持。如果问题与驱动程序无关,则用户可以向 Cloud Customer Care 递交请求。

后续步骤