添加或移除 GPU

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

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

准备工作

  • 如果您要使用本指南中的命令行示例,请执行以下操作:
    1. 安装或更新到 gcloud 命令行工具的最新版本。
    2. 设置默认地区和区域
  • 如果您要使用本指南中的 API 示例,请设置 API 访问权限
  • 参阅 Compute Engine 上的 GPU 价格,了解在实例上使用 GPU 的费用。
  • 参阅包含 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 的实例无法实时迁移,因为它们已分配给特定的硬件设备。如需了解详情,请参阅 GPU 限制

使用 Google Cloud Consolegcloud 命令行工具Compute Engine 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

    请参阅 Compute Engine 上的 GPU,获取可用的 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://www.googleapis.com/compute/v1/projects/project-id/zones/zone/machineTypes/machine-type",
  "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]
  },
}

请替换以下内容:

  • 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. 确认实例上的所有关键应用都已停止。

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

    转到“虚拟机实例”页面

  3. 点击要添加 GPU 的实例的名称。虚拟机实例详情页面随即打开。

  4. 虚拟机实例详情页面中完成以下步骤。

    1. 在页面顶部,点击停止以停止实例。

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

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

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

    5. 点击添加 GPU。如果您已有 GPU,则会显示这些 GPU 而不是添加 GPU 部分。

    6. 点击 GPU 类型以查看可用的 GPU 列表。

    7. 选择要添加到实例的 GPU 数量和 GPU 型号。或者,您也可以通过点击现有 GPU 旁边的 X 来移除 GPU。

    8. 查看主机维护时部分。

      • 如果您向实例添加了 GPU,则主机维护设置会自动设置为终止虚拟机实例。请参阅处理 GPU 主机维护事件
      • 如果您已从该实例中移除 GPU,则可以选择将主机维护设置重新设为迁移虚拟机实例
    9. 点击页面底部的保存以应用您的更改。

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

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://www.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 驱动程序,以便系统可以使用该设备。

后续步骤