本页面介绍如何在 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 型号。
- 如需创建挂接了 NVIDIA H100、A100 或 L4 GPU 的 Container-Optimized OS 虚拟机,请参阅创建加速器优化虚拟机。
- 如需创建挂接了 NVIDIA T4、P4、 P100 或 V100 GPU,请参阅 创建已挂接 GPU 的 N1 虚拟机。
您也可以添加 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 递交请求。
后续步骤
- 详细了解如何在 Container-Optimized OS 虚拟机实例上运行容器。
- 详细了解 Compute Engine 上的 GPU。
- 详细了解如何申请 GPU 配额。