创建使用 Cloud RDMA 的实例


本页面介绍了如何创建具有启用 RDMA 的网络接口的 HPC 实例。如需了解如何创建使用 RDMA 的 A4 或 A3 Ultra 加速器优化实例,请参阅创建经过 AI 优化的 A4 或 A3 Ultra 实例

如需创建使用远程直接内存访问 (RDMA) 的计算实例,您必须在创建实例时配置至少两个网络接口 (NIC)。一个 NIC 必须是连接到采用 RDMA 网络配置文件的 VPC 网络的 IRDMA NIC,另一个 NIC 必须使用 GVNIC

使用机器系列比较表确定哪些机器系列支持 RDMA 网络接口。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色

如需获得创建支持 RDMA 通信的实例所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建支持 RDMA 通信的实例所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建支持 RDMA 通信的实例,需要具备以下权限:

  • 针对项目的 compute.instances.create 权限
  • 使用自定义映像创建虚拟机:针对映像的 compute.images.useReadOnly 权限
  • 使用快照创建虚拟机:针对快照的 compute.snapshots.useReadOnly 权限
  • 使用实例模板创建虚拟机:针对实例模板的 compute.instanceTemplates.useReadOnly 权限
  • 为虚拟机指定子网:针对项目或所选子网的 compute.subnetworks.use 权限
  • 为虚拟机指定静态 IP 地址:针对项目的 compute.addresses.use 权限
  • 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的 compute.subnetworks.useExternalIp 权限
  • 为虚拟机设置虚拟机实例元数据:针对项目的 compute.instances.setMetadata 权限
  • 为虚拟机设置标记:针对虚拟机的 compute.instances.setTags 权限
  • 为虚拟机设置标签:针对虚拟机的 compute.instances.setLabels 权限
  • 为虚拟机设置要使用的服务账号:针对虚拟机的 compute.instances.setServiceAccount 权限
  • 为虚拟机创建新磁盘:针对项目的 compute.disks.create 权限
  • 以只读或读写模式挂接现有磁盘:针对磁盘的 compute.disks.use 权限
  • 以只读模式挂接现有磁盘:针对磁盘的 compute.disks.useReadOnly 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

要求

请查看以下有关为实例配置网络接口的规则:

  • 每个网络接口都必须连接到不同的 Virtual Private Cloud 网络。
  • 如需配置 IRDMA 网络接口,您必须先在与实例相同的区域和可用区中创建具有 Falcon RDMA 网络配置文件的 VPC 网络。
  • 如果您没有指定网络或子网,Compute Engine 会使用默认 VPC 网络以及与实例位于同一区域的自动子网。
  • 如果您指定了子网,但未指定网络,Compute Engine 会根据指定的子网推断网络。
  • 如果您指定了网络,则必须指定子网,并且此子网必须属于同一个网络。否则,实例创建将失败。

限制

  • 用于内部 IP 通信的 Tier_1 网络仅与运行 gVNIC 虚拟网络驱动程序的虚拟机兼容。
  • 对于使用 RDMA 的虚拟机,您无法使用实时迁移。您必须将实例配置为在维护事件期间终止。
  • 您无法将 RDMA 与托管式实例组 (MIG)(托管式或非托管式)搭配使用。
  • 您只能将 IPv4_ONLY 网络堆栈类型与启用 RDMA 的实例搭配使用。
  • 您只能使用 H4D 机器系列创建使用 Cloud RDMA 的实例。

创建启用了 Cloud RDMA 的实例

启用 Cloud RDMA 的实例至少需要两个网络接口 (NIC):

  • NIC 类型 GVNIC:使用 gve 驱动程序处理 TCP/IP 和互联网流量,以实现正常的虚拟机间和虚拟机与互联网之间的通信
  • NIC 类型 IRDMA:使用 IDPF/iRDMA 驱动程序在实例之间进行基于 RDMA 的通信

一个实例只能有一个 IRDMA 接口。每个实例可以有 1 到 10 个网络接口。

如需创建使用 IRDMA 的实例,请完成以下各部分中的步骤:

  1. 如果没有合适的布置政策,请创建布置政策

  2. 创建新的 VPC 网络,或使用现有的支持 RDMA 的 VPC 网络。

  3. 创建启用 RDMA 的实例,该实例具有 IRDMA 网络接口、至少一个 GVNIC 网络接口,并使用紧凑布置政策。

为 RDMA 实例创建放置政策

使用 RDMA 进行通信的实例必须位于单个可用区内,更严格地说,必须位于单个集群网络结构内。您可以创建紧凑布置政策并指定最大距离值,以设置可用区内的最低紧凑度。指定距离上限值时,您可以为紧凑布置政策分配的实例数量有限制,并且该限制会根据您选择的值而变化。

  • 如需创建与 RDMA 实例搭配使用的紧凑布置政策,请按照创建紧凑布置政策中的步骤操作,并指定最大距离值为 3 或更低。

创建虚拟私有云网络

如需设置网络,您可以按照文档中的说明操作,也可以使用提供的脚本。

说明指南

如需创建网络,您可以按照以下说明操作:

脚本

如需创建网络,您可以使用以下脚本。

  1. 可选:在运行脚本之前,列出 RDMA 网络配置文件以验证它们是否可用。

    gcloud beta compute network-profiles list
    
  2. 复制以下代码,然后在 Linux shell 窗口中运行该代码。

#!/bin/bash

# Create standard VPC (network and subnet) for the GVNIC interface
  gcloud beta compute networks create GVNIC_NAME_PREFIX-net-0 \
    --subnet-mode=custom

  gcloud beta compute networks subnets create GVNIC_NAME_PREFIX-sub-0 \
    --network=GVNIC_NAME_PREFIX-net-0 \
    --region=REGION \
    --range=10.0.0.0/16

  gcloud beta compute firewall-rules create GVNIC_NAME_PREFIX-internal-0 \
    --network=GVNIC_NAME_PREFIX-net-0 \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=10.0.0.0/8

# Create SSH firewall rules
gcloud beta compute firewall-rules create GVNIC_NAME_PREFIX-ssh \
  --network=GVNIC_NAME_PREFIX-net-0 \
  --action=ALLOW \
  --rules=tcp:22 \
  --source-ranges=IP_RANGE

# Optional: Create an external IP for only the GVNIC interface
gcloud beta compute firewall-rules create GVNIC_NAME_PREFIX-allow-ping-net-0 \
  --network=GVNIC_NAME_PREFIX-net-0 \
  --action=ALLOW \
  --rules=icmp \
  --source-ranges=IP_RANGE

# Create network for RDMA over Falcon transport
gcloud beta compute networks create RDMA_NAME_PREFIX-irdma \
  --network-profile=ZONE-vpc-falcon \
  --subnet-mode custom

# Create subnet for RDMA
gcloud beta compute networks subnets create RDMA_NAME_PREFIX-irdma-sub \
    --network=RDMA_NAME_PREFIX-irdma \
    --region=REGION \
    --range=10.1.0.0/16  # offset to avoid overlap with GVNIC network

替换以下内容:

  • GVNIC_NAME_PREFIX:用于使用 GVNIC NIC 类型的标准虚拟私有云网络和子网的名称前缀。
  • RDMA_NAME_PREFIX:用于使用 IRDMA NIC 类型的虚拟私有云网络和子网的名称前缀。
  • ZONE:您希望在其中创建网络和计算实例的可用区。请使用 us-central1-aeurope-west4-b
  • REGION:您希望创建网络的区域。 此区域必须与指定的可用区相对应。例如,如果您的可用区为 europe-west4-b,则您的区域为 europe-west4
  • IP_RANGE:VPC 网络之外用于 SSH 防火墙规则的 IP 地址范围。 最佳实践是指定您需要允许访问的特定来源 IP 地址范围,而不是所有 IPv4 或 IPv6 来源。 请勿使用 0.0.0.0/0::/0 作为来源范围,因为这会允许来自所有 IPv4 或 IPv6 来源(包括Google Cloud外部的来源)的流量。

创建启用了 RDMA 的实例

以下步骤展示了如何创建实例,其中第一个网络接口配置为 gVNIC 接口,第二个网络接口配置为 IRDMA 网络接口:

控制台

  1. 在 Google Cloud 控制台中,前往创建实例页面。

    转到“创建实例”

    如果出现提示,请选择您的项目并点击继续

    此时将显示创建实例页面,并显示机器配置窗格。

  2. 机器配置窗格中,执行以下操作:

    1. 名称字段中,指定实例的名称。如需了解详情,请参阅资源命名惯例
    2. 可选:在可用区字段中,为此实例选择可用区。

      选择您用于设置 RDMA 网络配置文件的可用区。

    3. 选择计算优化机器家族。

    4. 系列列中,选择 H4D 机器系列。

    5. 机器类型部分中,为实例选择机器类型。

  3. 在左侧导航菜单中,点击操作系统和存储空间。在显示的操作系统和存储空间窗格中,执行以下操作:

    1. 操作系统和存储空间部分底部,点击更改
    2. 操作系统版本列表中,选择支持 RDMA 的操作系统类型和版本。
    3. 确保将启动磁盘类型设置为 Hyperdisk Balanced。
    4. 点击窗格底部的选择以保存更改。
  4. 在左侧导航菜单中,点击网络。在显示的网络窗格中,执行以下操作:

    1. 前往网络接口部分。应该已经有一个标记为 default 的网络接口。
    2. 点击添加网络接口。在显示的新建网络接口部分中,执行以下操作:
      1. 网络接口卡列表中,选择 IRDMA
      2. 网络字段中,选择具有 RDMA 网络配置文件的 VPC 网络。
      3. 可选:在子网列表中,选择供实例使用的子网。
      4. IP 栈类型字段中,确保其设置为 仅限 IPv4
      5. 外部 IPv4 地址列表中,选择
      6. 如需确认网络接口详细信息,请点击完成
  5. 可选:为实例指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项

  6. 要创建并启动该实例,请点击创建

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 使用 gcloud compute instances create 命令,并至少添加两个 --network-interface 标志,一个用于 GVNIC 接口,另一个用于 IRDMA 接口。您可以根据需要自定义其余的命令选项。

    gcloud compute instances create INSTANCE_NAME \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE \
        --create-disk=boot=yes, \
            image=projects/IMAGE_PROJECT/global/images/IMAGE, \
            size=SIZE \
        --maintenance-policy=TERMINATE \
        --network-interface \
            nic-type=GVNIC, \
            network=NETWORK_NAME,subnet=SUBNET_NAME, \
            stack-type=STACK_TYPE, \
            private-network-ip=INTERNAL_IPV4_ADDRESS, \
            address=EXTERNAL_IPV4_ADDRESS \
        --network-interface \
            nic-type=IRDMA, \
            network=RDMA_NETWORK_NAME,subnet=RDMA_SUBNET_NAME, \
            stack-type=IPV4_ONLY, \
            no-address \
    

    替换以下内容:

    • INSTANCE_NAME:计算实例的名称
    • ZONE:在其中创建实例的可用区,例如 europe-west1-b。实例的区域是根据地区推断出来的。
    • MACHINE_TYPE(可选):要用于实例的机器类型。
    • IMAGE_PROJECT(可选):包含映像的映像项目。在预览期间,请使用自定义映像或 HPC 虚拟机映像
    • IMAGE(可选):指定以下其中一项:
      • 操作系统映像的特定版本,例如 hpc-rocky-linux-8-v20250721
      • 映像系列,其格式必须为 family/IMAGE_FAMILY。此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/hpc-rocky-linux-8,则 Compute Engine 会使用 HPC Rocky Linux 8 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践
    • SIZE:可选:新磁盘的大小。 该值必须是整数。默认的计量单位为 GiB。
    • NETWORK_NAME(可选):网络的名称
    • SUBNET_NAME:要用于网络接口的子网的名称。如需查看网络中的子网列表,请使用 gcloud compute networks subnets list 命令

      对于 gVNIC 网络接口,您可以省略 networksubnet 标志,而改用 default 网络。

    • STACK_TYPE(可选):GVNIC 网络接口的栈类型。STACK_TYPE 必须是以下值之一:IPV4_ONLYIPV4_IPV6IPV6_ONLY。默认值为 IPV4_ONLY

    • INTERNAL_IPV4_ADDRESS(可选):您希望计算实例在目标子网中使用的内部 IPv4 地址。如果您不需要特定 IP 地址,请省略此标志。

      如需指定内部 IPv6 地址,请改用 --internal-ipv6-address 标志。

    • EXTERNAL_IPV4_ADDRESS(可选):要与网络接口搭配使用的静态外部 IPv4 地址。您之前必须已预留外部 IPv4 地址。执行下列其中一项操作:

      • 指定子网中的有效 IPv4 地址。
      • 如果您不希望网络接口具有外部 IP 地址,请改用 no-address 标志。
      • 如果您希望接口接收临时外部 IP 地址,请指定 address=''

      如需指定外部 IPv6 地址,请改用 --external-ipv6-address 标志。

    • RDMA_NETWORK_NAME:您使用 RDMA 网络配置文件创建的网络的名称。

    • RDMA_SUBNET_NAME:RDMA 网络中子网的名称。

REST

如需创建配置为使用 RDMA 的实例,请向 instances.insert 方法发出 POST 请求。包含 networkInterfaces 对象,其中至少包含两个网络配置,一个用于 gVNIC 接口,另一个用于 IRDMA 接口。您可以根据需要自定义其余的实例属性。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:要创建实例的项目的 ID
  • ZONE:要在其中创建实例的可用区
  • MACHINE_TYPE:要使用的机器类型,例如 h4d-highmem-192-lssd
  • INSTANCE_NAME:新实例的名称
  • IMAGE_PROJECT(可选):映像所在的映像项目
  • IMAGE(可选):指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20250415
    • 映像系列,格式必须为 family/IMAGE_FAMILY。此项会通过最新的未弃用的操作系统映像创建实例。例如,如果您指定 family/debian-12,则 Compute Engine 会使用 Debian 12 映像系列中最新版本的操作系统映像创建实例。如需详细了解如何使用映像系列,请参阅映像系列最佳实践
  • NETWORK_NAME(可选):要与 gVNIC 网络接口搭配使用的网络的名称
  • SUBNET_NAME:要与 gVNIC 网络接口搭配使用的子网的名称

    对于 GVNIC 网络接口,您可以省略 networksubnet 属性,而改用 default 网络。

  • INTERNAL_IPV4_ADDRESS: 可选:您希望计算实例在目标子网中使用的内部 IPv4 地址。如果您不需要特定 IP 地址,请省略此标志。
  • EXTERNAL_IPV4_ADDRESS: 可选:要与网络接口搭配使用的静态外部 IPv4 地址。您之前必须已预留外部 IPv4 地址
  • RDMA_NETWORK_NAME:您使用 RDMA 网络配置文件创建的网络的名称
  • RDMA_SUBNET_NAME:RDMA 网络中子网的名称

HTTP 方法和网址:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

请求 JSON 正文:

{
    "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
    "name": "INSTANCE_NAME",
    "disks": [
      {
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        },
        "boot": true
      }
    ],
    "networkInterfaces": [
      {
        "network": "NETWORK_NAME",
        "subnetwork": "SUBNET_NAME",
        "networkIP": "INTERNAL_IPV4_ADDRESS",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "External IP",
            "natIP": "EXTERNAL_IPV4_ADDRESS"
          }
        ],
        "stackType": "IPV4_ONLY",
        "nicType": "GVNIC",
      },
      {
        "network": "RDMA_NETWORK_NAME",
        "subnetwork": "RDMA_SUBNET_NAME",
        "stackType": "IPV4_ONLY",
        "nicType": "IRDMA",
      }
    ]
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "compute#operation",
  "id": "9216044482154695709",
  "name": "operation-1739207409646-62dccc7d7bc58-d1350b42-64fdb7f7",
  "zone": "https://www.googleapis.com/compute/v1/projects/`PROJECT_ID`/zones/`ZONE`",
  "operationType": "insert",
  "targetLink": "https://www.googleapis.com/compute/v1/projects/`PROJECT_ID`/zones/`ZONE`/instances/`INSTANCE_NAME`",
  "targetId": "2679381553616227357",
  "status": "RUNNING",
  "user": "USER_ID",
  "progress": 0,
  "insertTime": "2025-02-10T09:10:10.551-08:00",
  "startTime": "2025-02-10T09:10:10.551-08:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/`PROJECT_ID`/zones/`ZONE`/operations/operation-1565289606387-58f9f62f5989c-e582f586-6d22f38"
 "kind": "compute#operation"
}

后续步骤