使用 GPU 加速器运行实例

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

概览

在 Compute Engine 上,您可以创建配备 NVIDIA Tesla K80P100P4V100T4 GPU 的 Container-Optimized OS 虚拟机实例。GPU 提供的计算能力可用于完成深度学习任务,如图像识别和自然语言处理,以及视频转码和图像处理等其他计算密集型任务。

Google 提供提供无缝体验,让用户可在 Container-Optimized OS 虚拟机实例上的 Docker 容器中运行 GPU 工作负载,因此用户也能够受益于其他 Container-Optimized OS 功能,例如安全性和可靠性。

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

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

要求

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

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

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

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

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

使用入门:在 Container-Optimized OS 上运行 GPU

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

首先,您需要一个具有 GPU 的 Container-Optimized OS 虚拟机实例。您可以创建具有 GPU 的 Container-Optimized OS 虚拟机实例,也可以在现有 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 驱动程序版本:

cos-extensions list

安装 CUDA 工具包

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

通过 shell 命令安装驱动程序

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

cos-extensions install gpu

通过启动脚本安装驱动程序

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

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

#! /bin/bash

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 虚拟机实例上运行以下命令,以手动验证 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

配置 Docker 容器以使用 GPU

安装 GPU 驱动程序后,您可以将 Docker 容器配置为使用 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 运行 Docker 容器,以指定驱动程序安装与 Docker 容器之间的依赖关系。如需了解详情,请参阅端到端:在 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

关于 CUDA 库

您在 Container-Optimized OS 虚拟机实例上安装的 NVIDIA 设备驱动程序包括 CUDA 库

上面的示例还展示了如何将 CUDA 库和调试实用程序分别装载到 /usr/local/nvidia/lib64/usr/local/nvidia/bin 的 Docker 容器中。

在使用 NVIDIA GPU 的 Docker 容器中运行的 CUDA 应用需要动态发现 CUDA 库。这需要在 LD_LIBRARY_PATH 环境变量中包含 /usr/local/nvidia/lib64

基于 Ubuntu 的 CUDA Docker 基础映像用于 Container-Optimized OS 上的 CUDA 应用,其中已正确设置 LD_LIBRARY_PATH

安全

就像 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。您还可以使用 gcloud 命令行工具查看您的可用区中可用的 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 递交请求。

后续步骤