添加或删除 GPU

Google Compute Engine 提供图形处理器 (GPU),您可以将其添加到虚拟机实例。您可以使用这些 GPU 加速实例上的特定工作负载,例如机器学习和数据处理。

要详细了解可以使用 GPU 执行的操作以及提供的 GPU 硬件类型,请阅读 Compute Engine 上的 GPU

准备工作

创建具有 GPU 的实例

在创建具有 GPU 的实例之前,请选择要用于实例的启动磁盘映像,并确保已安装相应的 GPU 驱动程序。

如果您要使用 GPU 进行机器学习,则可以为您的实例使用 Deep Learning VM Image。Deep Learning VM Image 预先安装了 GPU 驱动程序,并包含 TensorFlow 和 PyTorch 等软件包。您还可以将 Deep Learning VM Image 用于常规 GPU 工作负载。如需了解可用映像以及映像上安装的软件包,请参阅 Deep Learning VM 文档

您还可以使用任何公开映像自定义映像,但某些映像可能需要本指南未介绍的独特驱动程序或安装过程。您必须确定哪些驱动程序适合您的映像。

如需了解安装驱动程序的步骤,请参阅安装 GPU 驱动程序

创建具有一个或多个 GPU 的实例时,必须将实例设置为在主机维护时终止。具有 GPU 的实例无法实时迁移,因为它们已分配给特定的硬件设备。请参阅 GPU 限制了解详情。

使用 Google Cloud Platform Consolegcloud 命令行工具API 创建具有一个或多个 GPU 的实例。

Console

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 点击创建实例
  3. 选择 GPU 可用的地区。查看 GPU 的可用地区列表。
  4. 机器类型部分中,选择要用于此实例的机器类型。或者,可以稍后指定自定义机器类型设置。
  5. 机器类型部分中,点击自定义查看高级机器类型选项和可用的 GPU。
  6. 点击 GPU,查看可用的 GPU 列表。
  7. 指定 GPU 类型和所需的 GPU 数量。
  8. 如有必要,请调整机器类型以适应您所需的 GPU 设置。如果保留这些设置不变,实例将使用您在打开机器类型自定义屏幕之前指定的预定义机器类型。
  9. 要配置启动磁盘,请在启动磁盘部分中点击更改
  10. 操作系统映像标签中,选择一个映像。
  11. 点击选择,确认您的启动磁盘选项。
  12. 或者,您也可以添加一个启动脚本,用于在实例启动时安装 GPU 驱动程序。在自动化部分中,在启动脚本下添加启动脚本的内容。请参阅安装 GPU 驱动程序,获取示例脚本。
  13. 配置所需的任何其他实例设置。例如,您可以更改抢占设置,将实例配置为抢占式实例。这样可以降低实例和附加 GPU 的费用。如需了解详情,请阅读抢占式实例上的 GPU
  14. 在页面底部,点击创建以创建实例。

gcloud

使用 regions describe 命令确保在要创建具有 GPU 的实例的区域中拥有足够的 GPU 配额。

gcloud compute regions describe [REGION]

其中,[REGION] 是要检查 GPU 配额的区域

启动具有映像系列中的最新映像的实例:

gcloud compute instances create [INSTANCE_NAME] \
    --machine-type [MACHINE_TYPE] --zone [ZONE] \
    --accelerator type=[ACCELERATOR_TYPE],count=[ACCELERATOR_COUNT] \
    --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='[STARTUP_SCRIPT]' \
    [--preemptible]

其中:

  • [INSTANCE_NAME] 是新实例的名称。
  • [MACHINE_TYPE] 是您为实例选择的机器类型。请参阅 Compute Engine 上的 GPU,查看基于您所需的 GPU 数量的适用机器类型。
  • [ZONE] 是此实例的地区
  • [IMAGE_FAMILY]可用映像系列中的一种。
  • [ACCELERATOR_COUNT] 是要添加到实例中的 GPU 数量。请参阅 Compute Engine 上的 GPU,获取基于您的实例机器类型的 GPU 限制列表。
  • [ACCELERATOR_TYPE] 是您要使用的 GPU 型号。请使用以下某个值:

    • NVIDIA® Tesla®T4:nvidia-tesla-t4(测试版)
    • 具有 NVIDIA® GRID® 的 NVIDIA® Tesla® T4 虚拟工作站:nvidia-tesla-t4-vws(测试版)
    • NVIDIA® Tesla® P4:nvidia-tesla-p4
    • 具有 NVIDIA® GRID® 的 NVIDIA® Tesla® P4 虚拟工作站:nvidia-tesla-p4-vws
    • NVIDIA® Tesla® P100:nvidia-tesla-p100
    • 具有 NVIDIA® GRID® 的 NVIDIA® Tesla® P100 虚拟工作站:nvidia-tesla-p100-vws
    • NVIDIA® Tesla® V100:nvidia-tesla-v100
    • NVIDIA® Tesla® K80:nvidia-tesla-k80

    请参阅 Compute Engine 上的 GPU,获取可用的 GPU 型号列表。

  • [IMAGE_PROJECT] 是映像系列所属的映像项目

  • [STARTUP_SCRIPT] 是一个可选的启动脚本,您可以在实例启动时用它安装 GPU 驱动程序。请参阅安装 GPU 驱动程序获取示例。

  • --preemptible 是一个可选标志,用于将实例配置为抢占式实例。这样可以降低实例和附加 GPU 的费用。如需了解详情,请阅读抢占式实例上的 GPU

例如,您可以使用以下 gcloud 命令在 us-east1-d 地区启动具有一个 NVIDIA® Tesla® K80 GPU 和 2 个 vCPU 的 Ubuntu 16.04 实例。startup-script 元数据指示实例安装附带了推荐驱动程序版本的 CUDA 工具包

gcloud compute instances create gpu-instance-1 \
    --machine-type n1-standard-2 --zone us-east1-d \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='#!/bin/bash
    echo "Checking for CUDA and installing."
    # Check for CUDA and try to install.
    if ! dpkg-query -W cuda-10-0; then
      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      dpkg -i ./cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
      apt-get update
      apt-get install cuda-10-0 -y
    fi'

此示例命令会启动实例,但需要花费几分钟时间完成安装 CUDA 和驱动程序。

API

确定要添加到实例的 GPU 类型。提交 GET 请求,列出在特定地区中可用于项目的 GPU 类型。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是要列出可用 GPU 类型所在的地区

在 API 中,创建 POST 请求以创建新实例。加入 acceleratorType 参数以指定要使用的 GPU 类型,并加入 acceleratorCount 参数以指定要添加的 GPU 数量。另外,将 onHostMaintenance 参数设置为 TERMINATE

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?key={YOUR_API_KEY}
{
  "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/n1-highmem-2",
  "disks":
  [
    {
      "type": "PERSISTENT",
      "initializeParams":
      {
        "diskSizeGb": "[DISK_SIZE]",
        "sourceImage": "https://www.googleapis.com/compute/v1/projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
      },
      "boot": true
    }
  ],
  "name": "[INSTANCE_NAME]",
  "networkInterfaces":
  [
    {
      "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/[NETWORK]"
    }
  ],
  "guestAccelerators":
  [
    {
      "acceleratorCount": [ACCELERATOR_COUNT],
      "acceleratorType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes/[ACCELERATOR_TYPE]"
    }
  ],
  "scheduling":
  {
    "onHostMaintenance": "terminate",
    "automaticRestart": true,
    ["preemptible": true]
  },
  "metadata":
  {
    "items":
    [
      {
        "key": "startup-script",
        "value": "[STARTUP_SCRIPT]"
      }
    ]
  }
}

其中:

  • [INSTANCE_NAME] 是实例的名称。
  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是此实例的地区
  • [MACHINE_TYPE] 是您为实例选择的机器类型。请参阅 Compute Engine 上的 GPU,查看基于您所需的 GPU 数量的适用机器类型。
  • [IMAGE_PROJECT] 是映像所属的映像项目
  • [IMAGE_FAMILY] 是实例的启动磁盘映像。从可用的公开映像列表中指定映像系列。
  • [DISK_SIZE] 是启动磁盘的大小(以 GB 为单位)。
  • [NETWORK] 是要用于此实例的 VPC 网络。指定 default 可使用默认网络。
  • [ACCELERATOR_COUNT] 是要添加到实例中的 GPU 数量。请参阅 Compute Engine 上的 GPU,获取基于您的实例机器类型的 GPU 限制列表。
  • [ACCELERATOR_TYPE] 是您要使用的 GPU 型号。请参阅 Compute Engine 上的 GPU,获取可用的 GPU 型号列表。
  • [STARTUP_SCRIPT] 是一个可选的启动脚本,您可以在实例启动时用它安装 GPU 驱动程序。请参阅安装 GPU 驱动程序获取示例。
  • "preemptible": true 是一个可选参数,用于将实例配置为抢占式实例。这样可以降低实例和附加 GPU 的费用。如需了解详情,请阅读抢占式实例上的 GPU

如果已使用启动脚本自动安装 GPU 设备驱动程序,请验证 GPU 驱动程序是否已正确安装

如果您在创建实例期间未使用启动脚本安装 GPU 驱动程序,请在实例上手动安装 GPU 驱动程序,以便系统可以使用该设备。

在现有实例上添加或移除 GPU

您可以在现有实例上添加或分离 GPU,但必须先停止该实例并更改其主机维护设置,使其终止而不是进行实时迁移。具有 GPU 的实例无法实时迁移,因为它们已分配给特定的硬件设备。请参阅 GPU 限制了解详情。

另请注意,添加 GPU 后,必须在此实例上安装 GPU 驱动程序。用于创建此实例的启动磁盘映像会决定所需的驱动程序。您必须确定哪些驱动程序适合实例的永久性启动磁盘映像上的操作系统。请阅读安装 GPU 驱动程序了解详情。

您可以使用 Google Cloud Platform ConsoleAPI 在实例中添加或移除 GPU。

Console

您可以通过停止实例和编辑实例的配置,在实例中添加或移除 GPU。

  1. 确认实例上的所有关键应用都已停止。在添加 GPU 之前,必须停止实例。

  2. 转到“VM 实例”页面查看您的实例列表。

    转到“虚拟机实例”页面

  3. 在实例列表中,点击要添加 GPU 的实例的名称。实例详情页面会打开。

  4. 在实例详情页面的顶部,点击停止以停止实例。

  5. 实例停止运行后,点击修改以更改实例属性。

  6. 如果实例具有共享核心机器类型,则必须更改机器类型,以具有一个或多个 vCPU。您无法将加速器添加到具有共享核心机器类型的实例中。

  7. 机器类型部分中,点击自定义查看高级机器类型选项和可用的 GPU。

  8. 点击 GPU,查看可用的 GPU 列表。

  9. 选择要添加到实例的 GPU 数量和 GPU 型号。或者,您可以将 GPU 的数量设置为,从实例中移除现有的 GPU。

  10. 如果已将 GPU 添加到实例,请将主机维护设置设为终止。如果已从实例中移除 GPU,则可以选择将主机维护设置重新设为迁移虚拟机实例

  11. 在实例详情页面的底部,点击保存以应用更改。

  12. 保存实例设置后,在实例详情页面的顶部点击启动,以再次启动该实例。

API

您可以通过 API 停止实例并更改实例的配置,在实例中添加或移除 GPU。

  1. 确认实例上的所有关键应用都已停止,然后创建 POST 命令以停止该实例,使它可以转移到有可用 GPU 的主机系统。

    POST https://www.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/stop
    

    其中:

    • [INSTANCE_NAME] 是要添加 GPU 的实例的名称。
    • [ZONE] 是实例所在的地区
  2. 确定要添加到实例的 GPU 类型。提交 GET 请求,列出在特定地区中可用于项目的 GPU 类型。

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [ZONE] 是要列出可用 GPU 类型所在的地区
  3. 如果实例具有共享核心机器类型,则必须更改机器类型,以具有一个或多个 vCPU。您无法将加速器添加到具有共享核心机器类型的实例中。

  4. 在实例停止后,创建 POST 请求,在您的实例中添加或移除一个或多个 GPU。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMachineResources
    
    {
     "guestAccelerators": [
      {
        "acceleratorCount": [ACCELERATOR_COUNT],
        "acceleratorType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes/[ACCELERATOR_TYPE]"
      }
     ]
    }
    

    其中:

    • [INSTANCE_NAME] 是实例的名称。
    • [PROJECT_ID] 是您的项目 ID。
    • [ZONE] 是此实例的地区
    • [ACCELERATOR_COUNT] 是您的实例所需的 GPU 数量。请参阅 Compute Engine 上的 GPU,获取基于您的实例机器类型的 GPU 限制列表。
    • [ACCELERATOR_TYPE] 是您要使用的 GPU 型号。请参阅 Compute Engine 上的 GPU,获取可用的 GPU 型号列表。
  5. 创建 POST 命令,以设置实例的时间安排选项。如果要将 GPU 添加到实例,则必须指定 "onHostMaintenance": "TERMINATE"。或者,如果要从实例中移除 GPU,则可以指定 "onHostMaintenance": "MIGRATE"

    POST https://www.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/setScheduling
    
    {
     "onHostMaintenance": "[MAINTENANCE_TYPE]",
     "automaticRestart": true
    }
    

    其中:

    • [INSTANCE_NAME] 是要添加 GPU 的实例的名称。
    • [ZONE] 是实例所在的地区
    • [MAINTENANCE_TYPE] 是在需要主机维护时,您希望实例采取的操作。如果要将 GPU 添加到实例,请指定 TERMINATE。或者,如果已从实例中删除所有 GPU 并希望实例在发生主机维护事件时继续迁移,则可以指定 "onHostMaintenance": "MIGRATE"
  6. 启动实例。

    POST https://www.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/start
    

    其中:

    • [INSTANCE_NAME] 是要添加 GPU 的实例的名称。
    • [ZONE] 是实例所在的地区

接下来,在实例上安装 GPU 驱动程序,以便系统可以使用该设备。

使用实例模板创建 GPU 实例组

您可以使用实例模板创建托管实例组,并将 GPU 添加到每个实例。托管实例组使用该模板创建多个相同的实例。您可以调节组中实例的数量以匹配您的工作负载。

如需了解创建实例模板的步骤,请参阅创建实例模板

如果使用 Console 创建实例模板,请自定义机器类型,并选择要添加到实例模板的 GPU 的类型和数量。

如果您使用的是 gcloud 命令行工具,请加入 --accelerators--maintenance-policy TERMINATE 标志。或者,加入 --metadata startup-script 标志并指定启动脚本,用于在实例启动时安装 GPU 驱动程序。如需适用于 GPU 实例的示例脚本,请参阅安装 GPU 驱动程序

以下示例创建一个实例模板,其中包含 2 个 vCPU、一个带 Ubuntu 16.04 的 250GB 启动磁盘、一个 NVIDIA® Tesla® K80 GPU 和一个启动脚本。启动脚本安装附带了推荐驱动程序版本的 CUDA 工具包

gcloud beta compute instance-templates create gpu-template \
    --machine-type n1-standard-2 \
    --boot-disk-size 250GB \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure \
    --metadata startup-script='#!/bin/bash
    echo "Checking for CUDA and installing."
    # Check for CUDA and try to install.
    if ! dpkg-query -W cuda-10-0; then
      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      dpkg -i ./cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      apt-get update
      apt-get install cuda-10-0 -y
    fi'

创建模板后,使用该模板创建实例组。当您每次向组中添加实例时,它都会使用实例模板中的设置启动该实例。

如果要创建区域托管实例组,请确保选择支持所需的特定 GPU 型号的地区。如需 GPU 型号和可用地区的列表,请参阅 Compute Engine 上的 GPU。以下示例在两个支持 nvidia-tesla-k80 型号的地区中创建区域托管实例组。

gcloud beta compute instance-groups managed create example-rmig \
    --template gpu-template --base-instance-name example-instances \
    --size 30 --zones us-east1-c,us-east1-d

注意:如果要选择特定地区,请使用 gcloud beta 组件,因为地区选择功能目前处于测试版阶段。

要详细了解如何管理和调节实例组,请参阅创建托管实例组

安装 GPU 驱动程序

创建具有一个或多个 GPU 的实例后,系统需要安装设备驱动程序,以便应用可以访问该设备。本指南介绍如何在具有公开映像的实例上安装 NVIDIA 专有驱动程序。

您可以通过以下选项之一安装 GPU 驱动程序:

使用脚本安装 GPU 驱动程序

各个版本的 CUDA 都有最低 GPU 驱动程序版本要求(或更高版本)。要查看您的 CUDA 版本所需的最低驱动程序版本,请参阅 CUDA 工具包和兼容驱动程序版本

在 Google Compute Engine 上运行的 NVIDIA GPU 必须使用以下驱动程序版本:

  • Linux 实例:

    • NVIDIA 410.79 驱动程序或更高版本
  • Windows Server 实例:

    • NVIDIA 411.98 驱动程序或更高版本

对于大多数驱动程序的安装,您可以通过安装 NVIDIA CUDA 工具包来获得这些驱动程序。

在某些映像上,您可以使用脚本简化驱动程序安装过程。您可以将这些脚本指定为实例上的启动脚本,也可以将这些脚本复制到您的实例中,并以具有 sudo 权限的用户身份通过终端运行它们。

您必须准备可用于所选启动磁盘映像的脚本。如果已为实例导入自定义启动磁盘映像,则可能需要修改启动脚本,才能在该自定义映像中正确运行。

对于无法自动执行驱动程序安装过程的 Windows Server 实例或 SLES 12 实例,请手动安装驱动程序

以下示例是启动脚本,用于在公开映像上安装 CUDA 和 NVIDIA® GPU 的关联驱动程序。如果您使用的软件需要特定版本的 CUDA,请修改脚本以下载所需的 CUDA 版本。

如需了解 CUDA 的支持以及修改 CUDA 安装的步骤,请参阅 CUDA 工具包文档

要验证启动脚本是否完成运行,您可以查看日志或查看串行控制台

CentOS

这些示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 10 软件包及其关联的专有驱动程序。

CentOS 7 - CUDA 10:

#!/bin/bash
# Install kernel headers and development packages
echo "Installing kernel headers and development packages."
yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-10-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.0.130-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel7-10.0.130-1.x86_64.rpm
  yum clean all
  rm -rf /var/cache/yum
  # Install Extra Packages for Enterprise Linux (EPEL) for dependencies
  yum install epel-release -y
  yum update -y
  yum install cuda-10-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-10-0; then
  yum install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

在具有 CentOS 7 映像的实例上,脚本完成驱动程序和 CUDA 软件包的安装后,可能需要重新启动该实例。如果已完成脚本运行并且 nvidia-smi 命令返回以下错误,请重新启动实例:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
driver. Make sure that the latest NVIDIA driver is installed and
running.

CentOS 6 - CUDA 10:

#!/bin/bash
# Install kernel headers and development packages
echo "Installing kernel headers and development packages."
yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-10-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-10.0.130-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel6-10.0.130-1.x86_64.rpm
  yum clean all
  # Install Extra Packages for Enterprise Linux (EPEL) for dependencies
  yum install epel-release -y
  yum update -y
  yum install cuda-10-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-10-0; then
  yum install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

在具有 CentOS 6 映像的实例上,脚本完成驱动程序和 CUDA 软件包的安装后,可能需要重新启动该实例。如果已完成脚本运行并且 nvidia-smi 命令返回以下错误,请重新启动实例:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
driver. Make sure that the latest NVIDIA driver is installed and
running.

RHEL

这些示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 10 软件包及其关联的专有驱动程序。

RHEL 7 - CUDA 10:

#!/bin/bash
# Install kernel headers and development packages
echo "Installing kernel headers and development packages."
yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-10-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.0.130-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel7-10.0.130-1.x86_64.rpm
  yum clean all
  rm -rf /var/cache/yum
  # Install Extra Packages for Enterprise Linux (EPEL) for dependencies
  yum install epel-release -y
  yum update -y
  yum install cuda-10-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-10-0; then
  yum install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

在具有 RHEL 7 映像的实例上,脚本完成驱动程序和 CUDA 软件包的安装后,可能需要重新启动该实例。如果已完成脚本运行并且 nvidia-smi 命令返回以下错误,请重新启动实例:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
driver. Make sure that the latest NVIDIA driver is installed and
running.

RHEL 6 - CUDA 10:

#!/bin/bash
# Install kernel headers and development packages
echo "Installing kernel headers and development packages."
yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-10-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-10.0.130-1.x86_64.rpm
  rpm -i --force ./cuda-repo-rhel6-10.0.130-1.x86_64.rpm
  yum clean all
  # Install Extra Packages for Enterprise Linux (EPEL) for dependencies
  yum install epel-release -y
  yum update -y
  yum install cuda-10-0 -y
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-10-0; then
  yum install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

在具有 RHEL 6 映像的实例上,脚本完成驱动程序和 CUDA 软件包的安装后,可能需要重新启动该实例。如果已完成脚本运行并且 nvidia-smi 命令返回以下错误,请重新启动实例:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
driver. Make sure that the latest NVIDIA driver is installed and
running.

要验证脚本是否已完成运行,您可以查看串行控制台

SLES

SLES 15 - CUDA 10:

此示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 10 软件包及其关联的专有驱动程序。

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-10-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/sles15/x86_64/cuda-repo-sles15-10.0.130-1.x86_64.rpm
  rpm -i --force ./cuda-repo-sles15-10.0.130-1.x86_64.rpm
  zypper --gpg-auto-import-keys refresh
  zypper install -ny cuda-10-0
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-10-0; then
  zypper install -ny cuda-10-0
fi
# Enable persistence mode
nvidia-smi -pm 1

SLES 12 Service Pack 3 - CUDA 9.1:

此示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 9.1 软件包及其关联的专有驱动程序。

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! rpm -q cuda-9-1; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/sles123/x86_64/cuda-repo-sles123-9.1.85-1.x86_64.rpm
  rpm -i --force ./cuda-repo-sles123-9.1.85-1.x86_64.rpm
  zypper --gpg-auto-import-keys refresh
  zypper install -ny cuda-9-1
fi
# Verify that CUDA installed; retry if not.
if ! rpm -q cuda-9-1; then
  zypper install -ny cuda-9-1
fi
# Enable persistence mode
nvidia-smi -pm 1

SLES 12:

在其他 SLES 12 实例上,手动安装驱动程序

Ubuntu

Ubuntu 18.04 - Cuda 10:

此示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 10 软件包及其关联的专有驱动程序。

 #!/bin/bash
 echo "Checking for CUDA and installing."
 # Check for CUDA and try to install.
 if ! dpkg-query -W cuda-10-0; then
   curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
   dpkg -i ./cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
   apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
   apt-get update
   apt-get install cuda-10-0 -y
 fi
# Enable persistence mode
nvidia-smi -pm 1

Ubuntu 17.04 和 17.10 - CUDA 9:

此示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 9 软件包及其关联的专有驱动程序。

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-9-0; then
  # The 17.04 installer works with 17.10.
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1704_9.0.176-1_amd64.deb
  dpkg -i ./cuda-repo-ubuntu1704_9.0.176-1_amd64.deb
  apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
  apt-get update
  apt-get install cuda-9-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

Ubuntu 16.04 LTS - CUDA 10:

此示例脚本会检查现有的 CUDA 安装,然后安装完整的 CUDA 10 软件包及其关联的专有驱动程序。

#!/bin/bash
echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-10-0; then
  # The 16.04 installer works with 16.10.
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
  dpkg -i ./cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
  apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
  apt-get update
  apt-get install cuda-10-0 -y
fi
# Enable persistence mode
nvidia-smi -pm 1

Windows Server

在 Windows Server 实例上,必须手动安装驱动程序

脚本运行完毕后,您可以验证是否已安装 GPU 驱动程序

手动安装 GPU 驱动程序

如果您无法使用脚本安装 GPU 的驱动程序,则可以自行手动安装驱动程序。您负责选择最适合您的应用的安装程序和驱动程序版本。如果您需要特定的驱动程序,或者您需要将驱动程序安装在自定义映像或无法使用任何一个安装脚本的公开映像上,请使用此安装方法。

对于大多数公开映像,您都可以使用此过程在具备这些映像的实例上手动安装驱动程序。对于自定义映像,您可能需要修改该过程才能将其用于您的独特环境。

CentOS

  1. 连接到您需要安装驱动程序的实例

  2. 安装内核标头和开发软件包。

    yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
    
  3. 选择驱动程序代码库并将其添加到您的实例。例如,使用 curl 下载 CUDA 工具包并使用 rpm 命令将代码库添加到您的系统:

    • CentOS 7

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.0.130-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel7-10.0.130-1.x86_64.rpm
      
    • CentOS 6

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-10.0.130-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel6-10.0.130-1.x86_64.rpm
      
  4. 安装 epel-release 代码库。该代码库包含在 CentOS 上安装 NVIDIA 驱动程序所需的 DKMS 软件包。

    $ sudo yum install epel-release
    
  5. 清理 Yum 缓存:

    $ sudo yum clean all
    
  6. 安装包含 NVIDIA 驱动程序的 CUDA 10。

    $ sudo yum install cuda-10-0
    
  7. 在具有 CentOS 映像的实例上,安装驱动程序和 CUDA 软件包后,您可能需要重新启动实例。如果已完成脚本运行并且 nvidia-smi 命令返回以下错误,请重新启动实例:

    NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
    driver. Make sure that the latest NVIDIA driver is installed and
    running.
    
  8. 启用持久模式。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

RHEL

  1. 连接到您需要安装驱动程序的实例

  2. 安装内核标头和开发软件包。

    yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
    
  3. 选择驱动程序代码库并将其添加到您的实例。例如,使用 curl 下载 CUDA 工具包并使用 rpm 命令将代码库添加到您的系统:

    • RHEL 7

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.0.130-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel7-10.0.130-1.x86_64.rpm
      
    • RHEL 6

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-10.0.130-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-rhel6-10.0.130-1.x86_64.rpm
      
  4. 安装 epel-release 代码库。该代码库包含安装 NVIDIA 驱动程序所需的 DKMS 软件包。在 RHEL 上,必须从 fedoraproject.org 下载此代码库的 .rpm 并将其添加到您的系统中。

    • RHEL 7

      $ curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      
      $ sudo rpm -i epel-release-latest-7.noarch.rpm
      
    • RHEL 6

      $ curl -O https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
      
      $ sudo rpm -i epel-release-latest-6.noarch.rpm
      
  5. 清理 Yum 缓存:

    $ sudo yum clean all
    
  6. 安装包含 NVIDIA 驱动程序的 CUDA 10。

    $ sudo yum install cuda-10-0
    
  7. 在具有 RHEL 映像的实例上,安装驱动程序和 CUDA 软件包后,您可能需要重新启动实例。如果已完成脚本运行并且 nvidia-smi 命令返回以下错误,请重新启动实例:

    NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA
    driver. Make sure that the latest NVIDIA driver is installed and
    running.
    
  8. 启用持久模式。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

SLES

  1. 连接到您需要安装驱动程序的实例

  2. 选择驱动程序代码库并将其添加到您的实例。例如,使用 curl 下载 CUDA 工具包并使用 rpm 命令将代码库添加到您的系统:

    • SLES 15

      $ curl -O https://developer.download.nvidia.com/compute/cuda/repos/sles15/x86_64/cuda-repo-sles15-10.0.130-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-sles15-10.0.130-1.x86_64.rpm
      
    • 带有 Service Pack 3 的 SLES 12

      $ curl -O https://developer.download.nvidia.com/compute/cuda/repos/sles123/x86_64/cuda-repo-sles123-9.1.85-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-sles123-9.1.85-1.x86_64.rpm
      
    • 带有 Service Pack 2 的 SLES 12

      $ curl -O https://developer.download.nvidia.com/compute/cuda/repos/sles122/x86_64/cuda-repo-sles122-9.0.176-1.x86_64.rpm
      
      $ sudo rpm -i cuda-repo-sles122-9.0.176-1.x86_64.rpm
      
  3. 刷新 Zypper:

    $ sudo zypper refresh
    
  4. 安装包含 NVIDIA 驱动程序的 CUDA。

    $ zypper install cuda
    
  5. 启用持久模式。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

Ubuntu

  1. 连接到您需要安装驱动程序的实例

  2. 选择驱动程序代码库并将其添加到您的实例。例如,使用 curl 下载 CUDA 工具包并使用 dpkg 命令将代码库添加到您的系统。然后,使用 apt-key 命令对下载内容进行身份验证:

    • Ubuntu 18.04

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
      
      $ sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
      $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1704/x86_64/7fa2af80.pub
      
    • Ubuntu 17.04 和 17.10

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1704/x86_64/cuda-repo-ubuntu1704_9.0.176-1_amd64.deb
      
      $ sudo dpkg -i cuda-repo-ubuntu1704_9.0.176-1_amd64.deb
      $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1704/x86_64/7fa2af80.pub
      
    • Ubuntu 16.04 和 16.10 LTS

      $ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      
      $ sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
      
  3. 更新软件包列表:

    $ sudo apt-get update
    
  4. 安装包含 NVIDIA 驱动程序的 CUDA。

    • Ubuntu 16.04、16.10 和 18.04

      $ sudo apt-get install cuda-10-0
      
    • Ubuntu 17.04 和 17.10

      $ sudo apt-get install cuda-9-0
      
  5. 启用持久模式。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

Windows Server

  1. 连接到您需要安装驱动程序的实例

  2. 将包含 R384 分支:NVIDIA 386.07 或更高版本驱动程序的 .exe 安装程序文件下载到您的实例。对于大多数 Windows Server 实例,可以使用以下选项之一:

    例如,在 Windows Server 2016 中,您可以以管理员身份打开 PowerShell 终端,并使用 wget 命令下载所需的驱动程序安装程序。

    PS C:\> wget https://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network -o cuda_10.0.130_win10_network.exe
  3. 运行 .exe 安装程序。例如,您可以以管理员身份打开 PowerShell 终端并运行以下命令。

    PS C:\> .\\cuda_10.0.130_win10_network.exe
    

安装程序完成运行后,请验证是否已安装 GPU 驱动程序

验证 GPU 驱动程序的安装

驱动程序完成安装后,验证驱动程序是否已正确安装和初始化。

Linux

连接到 Linux 实例并使用 nvidia-smi 命令验证驱动程序是否正常运行。

$ nvidia-smi

Wed Jan  2 19:51:51 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   42C    P8     7W /  75W |     62MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

Windows Server

连接到 Windows Server 实例并使用 nvidia-smi.exe 工具来验证驱动程序是否正常运行。

PS C:\> & 'C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe'

Fri Jan 04 16:47:42 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 411.31                 Driver Version: 411.31                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            TCC  | 00000000:00:04.0 Off |                    0 |
| N/A   31C    P8     6W /  75W |      0MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

如果驱动程序无法运行,并且您在安装驱动程序时使用了脚本,请查看启动脚本日志,确保脚本已完成运行并在安装过程中未失败。

为虚拟工作站安装 GRID® 驱动程序

如需可在 Compute Engine 上使用的 NVIDIA 驱动程序的完整列表,请参阅 NVIDIA 驱动程序 Cloud Storage 存储分区的内容。

Linux

  1. 使用以下命令下载 GRID 驱动程序:

    curl -O \  https://storage.googleapis.com/nvidia-drivers-us-public/GRID/GRID7.1/NVIDIA-Linux-x86_64-410.92-grid.run
    
  2. 使用以下命令启动安装程序:

    sudo bash NVIDIA-Linux-x86_64-410.92-grid.run
    
  3. 在安装过程中,请选择以下选项:

    • 如果系统提示您安装 32 位二进制文件,请选择
    • 如果系统提示您修改 x.org 文件,请选择

Windows Server

  1. 根据您的 Windows Server 版本,下载以下 NVIDIA GRID 驱动程序之一:

  2. 运行安装程序,然后选择快速安装。

  3. 安装完成后,重启虚拟机。重启后,您将断开与会话的连接。

  4. 使用 RDP 或 PCoIP 客户端重新连接到您的实例。

验证 GRID 驱动程序是否已安装

Linux

运行以下命令:

sudo nvidia-smi --persistence-mode=1
nvidia-smi

该命令的输出类似于以下内容:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.92                Driver Version: 410.92                     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  On   | 00000000:00:04.0 Off |                    0 |
| N/A   34C    P0    26W / 250W |      0MiB / 16276MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

Windows Server

  1. 使用 RDP 或 PCoIP 客户端连接到 Windows 实例。

  2. 右键点击桌面,然后选择 NVIDIA 控制面板

  3. 在“NVIDIA 控制面板”的“帮助”菜单中,选择系统信息。这些信息显示了虚拟机正在使用的 GPU 以及驱动程序版本。

优化 GPU 性能

通常,您可以使用以下设置优化 Linux 实例上 GPU 设备的性能:

  • 启用持久模式。此设置适用于实例中的所有 GPU。

    $ sudo nvidia-smi -pm 1
    Enabled persistence mode for GPU 00000000:00:04.0.
    Enabled persistence mode for GPU 00000000:00:05.0.
    All done.
    

  • 在具有 NVIDIA® Tesla® K80 GPU 的实例上,停用自动启动功能:

    $ sudo nvidia-smi --auto-boost-default=DISABLED
    All done.
    

处理主机维护事件

GPU 实例无法进行实时迁移。GPU 实例必须终止才能进行主机维护事件,但可以自动重启。通常,这些维护事件每周进行一次,但在必要时会更频繁。

您可以通过以下过程处理维护事件:

  • 按照更适合您的应用的时间表定期重启实例,以此来避免这些中断。
  • 确定安排实例进行主机维护的时间,并准备好工作负载在系统重启期间进行某种转换。

要接收主机维护事件的事先通知,请监控 /computeMetadata/v1/instance/maintenance-event 元数据值。如果对元数据服务器的请求返回 NONE,则不会安排实例终止。例如,从实例中运行以下命令:

$ curl http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event -H "Metadata-Flavor: Google"

NONE

如果元数据服务器返回一个时间戳,则该时间戳就是将强制终止实例的时间。Compute Engine 会提前一小时为 GPU 实例提供终止通知,而普通实例仅提前 60 秒收到通知。将应用配置为在维护事件期间进行某种转换。例如,您可以使用以下方法之一:

  • 将应用配置为暂时将正在进行的工作移至 Google Cloud Storage 存储分区,然后在实例重启后检索该数据。

  • 将数据写入辅助永久性磁盘。当实例自动重启时,永久性磁盘可以重新附加并且应用可以继续进行重启前的工作。

您也可以在不进行轮询的情况下,接收此元数据值发生更改的通知。要获取有关如何在未进行轮询的情况下接收主机维护事件事先通知的示例,请参阅获取实时迁移通知

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档