建立使用 Cloud RDMA 的執行個體


本頁說明如何建立具有啟用 RDMA 功能網路介面的 HPC 執行個體。如需建立使用 RDMA 的 A4 或 A3 Ultra 加速器最佳化執行個體的操作說明,請參閱「建立搭載 A4 或 A3 Ultra 的 AI 最佳化執行個體」。

如要建立使用遠端直接記憶體存取 (RDMA) 的運算執行個體,您必須在建立執行個體時設定至少兩個網路介面卡 (NIC)。其中一個 NIC 必須是 IRDMA NIC,並附加至具有 RDMA 網路設定檔的 VPC 網路,另一個 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 驗證說明文件中的「Authenticate for using REST」。

必要的角色

如要取得建立支援 RDMA 通訊的執行個體所需權限,請要求管理員授予您專案的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備建立支援 RDMA 通訊的執行個體所需權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要建立支援 RDMA 通訊的執行個體,必須具備下列權限:

  • 專案的 compute.instances.create
  • 如要使用自訂映像檔建立 VM: compute.images.useReadOnly 在映像檔上
  • 如要使用快照建立 VM: compute.snapshots.useReadOnly 快照
  • 如要使用執行個體範本建立 VM,請按照下列步驟操作: compute.instanceTemplates.useReadOnly 在執行個體範本上
  • 如要為 VM 指定子網路,請在專案或所選子網路上授予 compute.subnetworks.use 權限。
  • 如要為 VM 指定靜態 IP 位址: 專案的 compute.addresses.use
  • 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM: compute.subnetworks.useExternalIp 專案或所選子網路的權限
  • 如要為 VM 設定 VM 執行個體中繼資料,請在專案中執行下列指令: compute.instances.setMetadata
  • 如要為 VM 設定標記,請按照下列步驟操作: compute.instances.setTags 在 VM 上
  • 如要為 VM 設定標籤,請按照下列步驟操作: compute.instances.setLabels 在 VM 上
  • 如要設定 VM 使用的服務帳戶: compute.instances.setServiceAccount 在 VM 上
  • 為 VM 建立新磁碟: compute.disks.create 專案
  • 如要以唯讀或讀寫模式附加現有磁碟: 磁碟的 compute.disks.use
  • 如要以唯讀模式連接現有磁碟: compute.disks.useReadOnly 磁碟的權限

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

需求條件

設定執行個體的網路介面時,請參考下列規則:

  • 每個網路介面都必須連線至不同的虛擬私有雲網路。
  • 如要設定 IRDMA 網路介面,您必須先在與執行個體相同的區域和可用區中,建立具有 Falcon RDMA 網路設定檔的 VPC 網路。
  • 如果您未指定網路或子網路,Compute Engine 會使用預設虛擬私有雲網路,以及與執行個體位於相同區域的自動子網路。
  • 如果您指定子網路,但未指定網路,Compute Engine 會從指定的子網路推斷網路。
  • 如果您指定網路,則必須指定子網路,且子網路必須屬於同一網路。否則執行個體建立作業會失敗。

限制

  • 內部 IP 通訊的 Tier_1 網路僅與執行 gVNIC 虛擬網路驅動程式的 VM 相容。
  • 使用 RDMA 的 VM 無法進行即時遷移。您必須將執行個體設為在維護事件期間終止。
  • 您無法將 RDMA 與代管執行個體群組 (MIG) (代管或非代管) 搭配使用。
  • 您只能搭配啟用 RDMA 的執行個體使用 IPv4_ONLY 網路堆疊類型。
  • 您只能使用 H4D 系列機器建立使用 Cloud RDMA 的執行個體。

建立啟用 Cloud RDMA 的執行個體

啟用 Cloud RDMA 的執行個體至少需要兩個網路介面 (NIC):

  • NIC 類型 GVNIC:使用 gve 驅動程式處理 TCP/IP 和網際網路流量,用於一般 VM 對 VM 和 VM 對網際網路的通訊
  • NIC 類型 IRDMA:使用 IDPF/iRDMA 驅動程式,在執行個體之間進行 RDMA 通訊

執行個體只能有一個 IRDMA 介面。每個執行個體可有一到十個網路介面。

如要建立使用 IRDMA 的執行個體,請完成下列各節的步驟:

  1. 如果沒有合適的配置政策,請建立配置政策

  2. 建立新的虛擬私有雲網路,或使用現有的 RDMA 虛擬私有雲網路。

  3. 建立啟用 RDMA 的執行個體,該執行個體具有 IRDMA 網路介面、至少一個 GVNIC 網路介面,並使用密集配置方式政策。

為 RDMA 執行個體建立配置政策

使用 RDMA 通訊的執行個體必須位於單一區域,且更嚴格地說,必須位於單一叢集架構內。您可以建立密集配置政策,並指定最大距離值,在區域內設定最低密集度。指定最大距離值時,可指派緊湊型放置位置政策的執行個體數量有限,且上限會因您選擇的值而異。

  • 如要建立密集配置政策,以便搭配 RDMA 執行個體使用,請按照「建立密集配置政策」一文中的步驟操作,並指定最大距離值為 3 或更低。

建立虛擬私有雲網路

如要設定網路,您可以按照文件中的操作說明,或使用提供的指令碼。

操作指南

如要建立網路,請按照下列操作說明進行:

腳本

如要建立網路,可以使用下列指令碼。

  1. 選用:執行指令碼前,請列出 RDMA 網路設定檔,確認這些設定檔可用。

    gcloud beta compute network-profiles list
    
  2. 複製下列程式碼,並在 Linux 殼層視窗中執行。

#!/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:虛擬私有雲網路外部的 IP 位址範圍,用於 SSH 防火牆規則。最佳做法是指定您需要允許存取的特定 IP 位址範圍,而不是所有 IPv4 或 IPv6 來源。請勿使用 0.0.0.0/0::/0 做為來源範圍,因為這樣會允許來自所有 IPv4 或 IPv6 來源的流量,包括Google Cloud以外的來源。

建立啟用 RDMA 的執行個體

下列步驟說明如何建立執行個體,並將第一個網路介面設為 gVNIC 介面,第二個網路介面設為 IRDMA 網路介面:

主控台

  1. 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。

    前往「建立執行個體」

    如果出現系統提示,請選取您的專案,然後按一下 [Continue] (繼續)。

    「建立執行個體」頁面隨即顯示,並顯示「機器設定」窗格。

  2. 在「機器設定」窗格中,執行下列操作:

    1. 在「Name」(名稱) 欄位中,指定執行個體的名稱。詳情請參閱資源命名慣例
    2. 選用:在「Zone」(區域) 欄位中,選取這個執行個體的區域。

      選擇用於設定 RDMA 網路設定檔的可用區。

    3. 選擇「運算最佳化」機器系列。

    4. 在「系列」欄中,選取「H4D」機器系列。

    5. 在「Machine type」(機器類型) 部分中,選取執行個體的機器類型。

  3. 在左側導覽選單中,按一下「OS and Storage」(OS 和儲存空間)。在隨即顯示的「作業系統和儲存空間」窗格中,執行下列操作:

    1. 在「作業系統和儲存空間」專區底部,點選「變更」
    2. 在「Operating system」(作業系統) 和「Version」(版本) 清單中,選取支援 RDMA 的作業系統類型和版本。
    3. 確認「開機磁碟類型」已設為 Hyperdisk Balanced。
    4. 按一下窗格底部的「選取」,儲存變更。
  4. 在左側導覽選單中,按一下「Networking」(網路)。在隨即顯示的「Networking」(網路) 窗格中,執行下列操作:

    1. 前往「網路介面」部分。應該已經有一個網路介面,標示為 default
    2. 按一下「新增網路介面」。在隨即顯示的「New network interface」(新增網路介面) 專區中,執行下列操作:
      1. 在「網路介面卡」清單中,選取「IRDMA」。
      2. 在「Network」(網路) 欄位中,選取具有 RDMA 網路設定檔的虛擬私有雲網路。
      3. 選用:在「Subnetwork」(子網路) 清單中,選取執行個體要使用的子網路。
      4. 在「IP stack type」(IP 堆疊類型) 欄位中,確認已設為「IPV4-only」(僅限 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 VM 映像檔
    • IMAGE:選用:指定下列其中一項:
      • 特定版本的 OS 映像檔,例如 hpc-rocky-linux-8-v20250721
      • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這樣一來,系統會使用未淘汰的最新作業系統映像檔建立執行個體。舉例來說,如果您指定 family/hpc-rocky-linux-8,Compute Engine 會使用 HPC Rocky Linux 8 映像檔系列中的最新版 OS 映像檔建立執行個體。如要進一步瞭解如何使用映像檔系列,請參閱映像檔系列最佳做法
    • 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:選用:指定下列其中一項:

    • 特定版本的 OS 映像檔,例如 debian-12-bookworm-v20250415
    • 映像檔系列,格式必須為 family/IMAGE_FAMILY。這樣一來,系統會使用未淘汰的最新 OS 映像檔建立執行個體。舉例來說,如果您指定 family/debian-12,Compute Engine 會使用 Debian 12 映像檔系列中的最新版 OS 映像檔建立執行個體。如要進一步瞭解如何使用映像檔系列,請參閱「映像檔系列最佳做法」。
  • 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"
}

後續步驟