使用 GPU 加速器运行实例

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

概览

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

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

Google Cloud 为您提供在 Container-Optimized OS 虚拟机实例上的容器内运行 GPU 工作负载的无缝体验,使您可以从其他 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 模型。

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

创建虚拟机时,请务必从 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 映像都有一个默认支持的 NVIDIA GPU 驱动程序版本。如需了解默认支持的版本,请参阅主要 Container-Optimized OS LTS 里程碑的发行说明

您还可以通过在 Container-Optimized OS 虚拟机实例上运行以下命令来检查所有支持的 GPU 驱动程序版本:

sudo cos-extensions list

K80 GPU 兼容性

NVIDIA R470 驱动程序是支持 K80 GPU 的最后一个驱动程序系列。如果要在配备 K80 GPU 的实例中安装更高版本,则由 cos-extensions 调用的 cos-gpu-installer:v2(从 v2.0.26 开始)将自动回退到可用的 R470 版本。

确定所需的 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,请参阅创建和配置实例页面。

在某些情况下,默认驱动程序不符合 CUDA 工具包或 GPU 模型的最低驱动程序要求。如需安装 GPU 驱动程序的特定驱动程序版本,请附加版本标志。将 DRIVER_VERSION 替换为您的 GPU 模型所需的且 Container-Optimized OS 支持的最低 GPU 驱动程序版本。Container-Optimized OS 仅支持一组选定的 NVIDIA 驱动程序。

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

验证安装

您可以在 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 环境变量中添加 /usr/local/cuda-XX.X/lib64(包含 NVIDIA CUDA-X 库)和 /usr/local/nvidia/lib64(包含 NVIDIA 设备驱动程序)。对于 /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 递交请求。

后续步骤