添加或移除 GPU

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 Consolegcloud 命令行工具API 创建具有一个或多个 GPU 的实例。

控制台

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

    转到“虚拟机实例”页面

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

gcloud

使用 regions describe 命令可确保您在要用于创建具有 GPU 的实例的区域中拥有足够的 GPU 配额。将 region 替换为您要检查 GPU 配额的区域

gcloud compute regions describe region

如需创建并启动实例,请使用带有以下标志的 gcloud compute instances create 命令:

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 \
    [--preemptible]

替换以下内容:

  • instance-name:新实例的名称。
  • machine-type:您为实例选择的机器类型。如需查看基于您所需的 GPU 数量适用的机器类型,请参阅 Compute Engine 上的 GPU
  • zone:实例所在的地区
  • image-family:支持 GPU 的映像系列
  • image-project:该映像系列所属的映像项目
  • accelerator-count:您要为实例添加的 GPU 数量。如需查看基于您的实例机器类型的 GPU 限制列表,请参阅 Compute Engine 上的 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

    如需查看可用 GPU 型号的列表,请参阅 Compute Engine 上的 GPU

  • --preemptible 是一个可选标志,用于将实例配置为抢占式实例。设置此标志可以降低实例和所挂接 GPU 的费用。如需了解详情,请参阅抢占式实例上的 GPU

例如,您可以使用以下 gcloud 命令启动位于 us-east1-d 地区并配有 1 个 NVIDIA Tesla K80 GPU 和 2 个 vCPU 的 Ubuntu 16.04 实例。

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

此示例命令会启动该实例,但您必须提前将 CUDA 和驱动程序安装到该实例上

API

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

GET https://compute.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://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances?key={YOUR_API_KEY}
{
  "machineType": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/machineTypes/machine-type",
  "disks":
  [
    {
      "type": "PERSISTENT",
      "initializeParams":
      {
        "diskSizeGb": "disk-size",
        "sourceImage": "https://compute.googleapis.com/compute/v1/projects/image-project/global/images/family/image-family"
      },
      "boot": true
    }
  ],
  "name": "instance-name",
  "networkInterfaces":
  [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/project-id/global/networks/network"
    }
  ],
  "guestAccelerators":
  [
    {
      "acceleratorCount": accelerator-count,
      "acceleratorType": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes/accelerator-type"
    }
  ],
  "scheduling":
  {
    "onHostMaintenance": "terminate",
    "automaticRestart": true,
    ["preemptible": true]
  },
}

替换以下内容:

  • instance-name:实例的名称。
  • project-id:您的项目 ID。
  • zone:实例所在的地区
  • machine-type:您为实例选择的机器类型。如需查看基于您所需的 GPU 数量适用的机器类型,请参阅 Compute Engine 上的 GPU
  • image-family:您的实例的启动磁盘映像。请从可用公共映像列表中指定映像系列。
  • image-project:映像系列所属的映像项目
  • disk-size:您的启动磁盘的大小(以 GB 为单位)。
  • network:您要用于此实例的 VPC 网络。您可以指定 default 来使用默认网络。
  • accelerator-count:您要为实例添加的 GPU 数量。如需查看基于您的实例机器类型的 GPU 限制列表,请参阅 Compute Engine 上的 GPU
  • accelerator-type:您要使用的 GPU 型号。如需查看可用 GPU 型号的列表,请参阅 Compute Engine 上的 GPU
  • "preemptible": true 是一个可选标志,用于将实例配置为抢占式实例。设置此标志可以降低实例和所挂接 GPU 的费用。如需了解详情,请参阅抢占式实例上的 GPU

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

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

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

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

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

控制台

如需为您的实例添加或移除 GPU,您可以停止该实例并修改其配置。

  1. 确认实例上的所有关键应用都已停止。您必须先停止该实例才能添加 GPU。

  2. 转到“虚拟机实例”页面,查看您的实例列表。

    转到“虚拟机实例”页面

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

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

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

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

  7. 机器配置部分中,点击 CPU 平台和 GPU,查看高级机器类型选项和可用的 GPU。

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

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

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

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

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

API

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

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

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/stop
    

    替换以下内容:

    • instance-name:要停止的实例的名称。这是您要将 GPU 挂接到的实例。
    • zone:实例所在的地区
  2. 确定要为您的实例添加的 GPU 类型。提交 GET 请求,列出在特定地区中可用于项目的 GPU 类型。

    GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes
    

    替换以下内容:

    • project-id:您的项目 ID。
    • zone:您要列出可用 GPU 类型的地区
  3. 如果该实例运行的是共享核心机器类型,您必须更改机器类型才能添加一个或多个 vCPU。您无法将加速器添加到具有共享核心机器类型的实例中。

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

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-name/setMachineResources
    
        {
         "guestAccelerators": [
          {
            "acceleratorCount": accelerator-count,
            "acceleratorType": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes/accelerator-type"
          }
         ]
        }
    

    替换以下内容:

    • instance-name:实例的名称。
    • project-id:您的项目 ID。
    • zone:实例所在的地区
    • accelerator-count:您要挂接到实例的 GPU 数量。如需查看基于您的实例机器类型的 GPU 限制列表,请参阅 Compute Engine 上的 GPU
    • accelerator-type:您要使用的 GPU 型号。如需查看可用的 GPU 型号列表,请参阅 Compute Engine 上的 GPU
  5. 创建 POST 命令,以设置实例的时间安排选项。如果您要向实例添加 GPU,则必须指定 "onHostMaintenance": "TERMINATE"。或者,如果您要从实例中移除 GPU,则可以指定 "onHostMaintenance": "MIGRATE"

    POST https://compute.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://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/start
    

    替换以下内容:

    • instance-name:要为其添加 GPU 的实例的名称。
    • zone:实例所在的地区

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

后续步骤