使用 H4D 機器類型和彈性啟動功能建立 MIG


本教學課程說明如何建立使用 H4D HPC 最佳化機器類型的代管執行個體群組 (MIG)。MIG 會使用 Dynamic Workload Scheduler 彈性啟動消耗模式,取得最多七天的運算資源。

建立 MIG 後,您就能將多部虛擬機器 (VM) 視為單一實體進行管理。MIG 中的每個 VM 都是以執行個體範本為基礎。MIG 會自動管理群組中的 VM,因此可提供高可用性和擴充性。如要進一步瞭解 MIG,請參閱「代管執行個體群組」。

如要瞭解 HPC VM 和 HPC 叢集建立選項,請參閱「HPC 叢集建立總覽」。

本教學課程的適用對象為 HPC 工程師、平台管理員和作業人員,以及有興趣為短期工作負載建立互連 HPC 執行個體群組的資料和 MPI 專家。產生的執行個體不會使用自動化調度管理工具來管理執行個體或排定工作時間。

目標

  1. 選用:要求先占配額。
  2. 選用:建立虛擬私有雲網路。
  3. 建立執行個體範本。
  4. 建立 MIG 和大小調整要求。
  5. 清除所用資源。

費用

本教學課程使用 Google Cloud的計費元件,包括:

如要根據預測用量估算費用,請使用 Pricing Calculator

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  4. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the required API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable compute.googleapis.com
  8. Install the Google Cloud CLI.

  9. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  10. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the required API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable compute.googleapis.com
  14. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/compute.instanceAdmin.v1,roles/compute.networkAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: your project ID.
    • USER_IDENTIFIER: the identifier for your user account—for example, myemail@example.com.
    • ROLE: the IAM role that you grant to your user account.
  15. 選用:要求先占配額

    新增至 MIG 的 VM 執行個體會耗用地區配額。 VM 執行個體、執行個體群組、CPU 和磁碟的配額可供所屬區域中的任何 VM 執行個體使用,無論所在可用區為何。

    使用彈性啟動時,配額可以是標準配額或可搶占配額。

    • 標準配額:如果專案沒有先占配額,且您從未要求先占配額,則執行個體資源會消耗標準配額。
    • 先占配額:要求先占配額可為臨時資源提供獨立配額,有助於提高配額取得率。不過,當 Compute Engine 授予您某個地區的先占配額後,所有適用資源只會消耗先占配額。如果這項配額用盡,您必須為 VM 資源申請額外的搶占型配額。

    如要申請搶占型配額,請按照「申請調整配額」一文中的步驟操作。

    需要的配額類型

    如要使用執行個體群組,您必須確保該群組會使用的所有資源仍有配額 (例如 CPU 配額),群組資源本身的配額也充足無虞。視執行個體使用的機器類型而定,H4D 執行個體可能會使用下列配額類型:

    資源 標準配額 先占配額
    CPU CPUS_PER_VM_FAMILY Preemptible CPUs
    本機 SSD Local SSD per machine family (GB) Preemptible Local SSDs (GB)

    如要在本教學課程中建立資源,可能需要下列額外的區域配額:

    • 區域性 (單一區域) 代管執行個體群組:Instance group managersInstance groups
    • Google Cloud Hyperdisk:

      • Hyperdisk Balanced Capacity (GB)
      • Hyperdisk Balanced Throughput (MB/s)
      • Hyperdisk Balanced IOPS

    選用:建立虛擬私有雲網路

    除非選擇停用,否則每個專案都會具備預設網路,可用於為執行個體提供網路連線。建立 VM 時,您可以指定虛擬私有雲網路和子網路。如果省略這項設定,系統會使用預設的網路和子網路。

    您可以將 H4D 執行個體設定為使用 Cloud RDMA。Cloud RDMA 採用 IRDMA 網路驅動程式,支援 Compute Engine 執行個體之間的遠端直接記憶體存取 (RDMA),可提供低延遲的可靠訊息傳輸功能。

    在本教學課程中,您將:

    • 如要將 H4D 執行個體設為使用 Cloud RDMA,請完成本節中的步驟。
    • 如果不想使用 Cloud RDMA,可以略過本節,改用預設網路。

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

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

    使用 Cloud RDMA 的執行個體只能有一個 IRDMA 介面。每個執行個體最多可新增八個額外 GVNIC 網路介面,總共 10 個 NIC。

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

    操作指南

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

    指令碼

    每個執行個體最多可建立九個 GVNIC 網路介面和一個 IRDMA 網路介面。每個網路介面都必須連接到不同的網路。如要建立網路,可以使用下列指令碼,為 GVNIC 建立兩個網路,並為 IRDMA 建立一個網路。

    1. 選用:執行指令碼前,請列出 RDMA 網路設定檔,確認是否有可用的設定檔。
        gcloud beta compute network-profiles list
        
    2. 複製下列程式碼,並在 Linux 殼層視窗中執行。

        #!/bin/bash
        # Set the number of GVNIC interfaces to create. You can create up to 9.
        NUM_GVNIC=NUMBER_OF_GVNIC
      
        # Create standard VPC (networks and subnets) for the GVNIC interfaces
          for N in $(seq 0 $(($NUM_GVNIC - 1))); do
            gcloud compute networks create GVNIC_NAME_PREFIX-net-$N \
                --subnet-mode=custom
      
            gcloud compute networks subnets create GVNIC_NAME_PREFIX-sub-$N \
                --network=GVNIC_NAME_PREFIX-net-$N \
                --region=REGION \
                --range=10.$N.0.0/16
      
            gcloud compute firewall-rules create GVNIC_NAME_PREFIX-internal-$N \
                --network=GVNIC_NAME_PREFIX-net-$N \
                --action=ALLOW \
                --rules=tcp:0-65535,udp:0-65535,icmp \
                --source-ranges=10.0.0.0/8
        done
      
        # Create SSH firewall rules
        gcloud 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 a firewall rule for the external IP address for the
        #  first GVNIC network interface
        gcloud 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 a network for the RDMA over Falcon network interface
        gcloud beta compute networks create RDMA_NAME_PREFIX-irdma \
            --network-profile=ZONE-vpc-falcon \
            --subnet-mode custom
      
        # Create a subnet for the RDMA network
        gcloud beta compute networks subnets create RDMA_NAME_PREFIX-irdma-sub \
            --network=RDMA_NAME_PREFIX-irdma \
            --region=REGION \
            --range=10.2.0.0/16  # offset to avoid overlap with GVNIC subnet ranges
        

      更改下列內容:

      • NUMBER_OF_GVNIC:要建立的 GVNIC 介面數量。請指定介於 1 到 9 之間的數字。
      • GVNIC_NAME_PREFIX:用於標準虛擬私有雲網路和子網路的名稱前置字元,這些網路和子網路使用 GVNIC NIC 類型。
      • REGION:要建立網路的區域。建立 RDMA 網路時,這必須對應至為 --network-profile 旗標指定的區域。舉例來說,如果您將區域指定為 europe-west4-b,則您的地區為 europe-west4
      • IP_RANGE:虛擬私有雲網路外部的 IP 位址範圍,用於 SSH 防火牆規則。最佳做法是指定需要允許存取的特定 IP 位址範圍,而非所有 IPv4 或 IPv6 來源。請勿使用 0.0.0.0/0::/0 做為來源範圍,因為這樣會允許來自所有 IPv4 或 IPv6 來源的流量,包括 Google Cloud以外的來源。
      • RDMA_NAME_PREFIX:用於虛擬私有雲網路和子網路的名稱前置字元,這些網路和子網路使用 IRDMA NIC 類型。
      • ZONE:您要建立網路和運算執行個體的區域。使用 us-central1-aeurope-west4-b
    3. 選用:如要確認虛擬私有雲網路資源是否建立成功,請在 Google Cloud 控制台中檢查網路設定:

      1. 在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。

        前往「VPC Networks」(虛擬私有雲網路)

      2. 在清單中搜尋您在上一個步驟中建立的網路。
      3. 如要查看子網路、防火牆規則和其他網路設定,請按一下網路名稱。

    建立執行個體範本

    如要使用「彈性啟動」消耗量選項,請建立空白 MIG,然後為該 MIG 建立規模調整要求。當您要求的容量可用時,Compute Engine 會佈建該容量,並在 MIG 中建立執行個體。您最多可取得七天的資源。

    如要為 MIG 中的每個執行個體指定執行個體和耗用屬性,請使用下列其中一種方法建立執行個體範本:

    gcloud

    如要建立區域執行個體範本,請使用 gcloud beta compute instance-templates create 指令

    gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --machine-type=MACHINE_TYPE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --instance-template-region=REGION \
        --boot-disk-type=hyperdisk-balanced \
        --boot-disk-size=DISK_SIZE \
        --scopes=cloud-platform \
        
    --network-interface=nic-type=GVNIC, \
          network=GVNIC_NAME_PREFIX-net-0, \
          subnet=GVNIC_NAME_PREFIX-sub-0, \
          stack-type=STACK_TYPE, \
          address=EXTERNAL_IPV4_ADDRESS \
    --network-interface=nic-type=GVNIC, \
          network=GVNIC_NAME_PREFIX-net-1, \
          subnet=GVNIC_NAME_PREFIX-sub-1,no-address \
    --network-interface=nic-type=IRDMA, \
          network=RDMA_NAME_PREFIX-irdma, \
          subnet=RDMA_NAME_PREFIX-irdma-sub, \
          stack-type=IPV4_ONLY,no-address \
        
        --reservation-affinity=none \
        --instance-termination-action=DELETE \
        --max-run-duration=RUN_DURATION \
        --maintenance-policy=TERMINATE \
        --provisioning-model=FLEX_START
    

    更改下列內容:

    • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。
    • MACHINE_TYPE:執行個體使用的 H4D 機器類型。
    • IMAGE_FAMILY:您要使用的 OS 映像檔的映像檔系列。 如需支援的作業系統清單,請參閱「支援的作業系統」。
    • IMAGE_PROJECT:OS 映像檔的專案 ID。
    • REGION:要建立執行個體範本的區域。 指定您要使用的機器類型所在的區域。
    • DISK_SIZE:開機磁碟的大小 (以 GiB 為單位)。
    • GVNIC_NAME_PREFIX:您為 gVNIC 介面建立標準 VPC 網路和子網路時使用的名稱前置字元。

      如果使用預設網路,請只加入一個 --network-interface 欄位,並將 nic-type 欄位設為 GVNIC。此外,請省略這個網路介面的 networksubnetwork 設定。

    • STACK_TYPE:選用:用於 gVNIC 介面的堆疊類型。 指定 IPV4_ONLYIPV4_IPV6。如未指定值,系統會預設使用 IPV4_ONLY
    • EXTERNAL_IPV4_ADDRESS:選用:要搭配 gVNIC 網路介面使用的靜態外部 IPv4 位址。您必須先保留外部 IPv4 位址。 執行下列其中一個步驟:

      • 從子網路指定有效的 IPv4 位址。
      • 如果不希望網路介面有外部 IP 位址,請使用 no-address 旗標。
      • 如要讓網路介面接收臨時外部 IP 位址,請指定 address=''

      如要為 GVNIC 網路介面指定外部 IPv6 位址,請改用 --external-ipv6-address 旗標。

    • RDMA_NAME_PREFIX:建立 IRDMA 網路介面的虛擬私有雲網路和子網路時使用的名稱前置字元。

      如果 H4D 執行個體未使用 Cloud RDMA,請省略 IRDMA 介面的 --network-interface 欄位。

    • RUN_DURATION:您希望所要求執行個體執行的時間長度。您必須將值格式化為天數、時數、分鐘數或秒數,並分別加上 dhms。例如,指定 30m 代表 30 分鐘,或指定 1d2h3m4s 代表 1 天 2 小時 3 分鐘 4 秒。這個值必須介於 10 分鐘至七天之間。

    REST

    如要建立區域執行個體範本,請對 beta regionInstanceTemplates.insert 方法發出 POST 要求

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates
    {
      "name":"INSTANCE_TEMPLATE_NAME",
      "properties":{
        "disks":[
          {
            "boot":true,
            "initializeParams":{
              "diskSizeGb":"DISK_SIZE",
              "diskType":"hyperdisk-balanced",
              "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
            },
            "mode":"READ_WRITE",
            "type":"PERSISTENT"
          }
        ],
        "machineType":"MACHINE_TYPE",
        
            "networkInterfaces": [
            {
              "network": "GVNIC_NAME_PREFIX-net-0",
              "subnetwork": "GVNIC_NAME_PREFIX-sub-0",
              "accessConfigs": [
                {
                    "type": "ONE_TO_ONE_NAT",
                    "name": "External IP",
                    "natIP": "EXTERNAL_IPV4_ADDRESS"
                }
              ],
              "stackType": "IPV4_ONLY",
              "nicType": "GVNIC",
          },
          {
              "network": "GVNIC_NAME_PREFIX-net-1",
              "subnetwork": "GVNIC_NAME_PREFIX-sub-1",
              "stackType": "IPV4_ONLY",
              "nicType": "GVNIC",
          },
          {
              "network": "RDMA_NAME_PREFIX-irdma",
              "subnetwork": "RDMA_NAME_PREFIX-irdma-sub",
              "stackType": "IPV4_ONLY",
              "nicType": "IRDMA",
          }
        ],
    ,
        "reservationAffinity": {
            "consumeReservationType": "NO_RESERVATION"
          },
        "scheduling": {
            "instanceTerminationAction": "DELETE",
            "maxRunDuration": {
              "seconds": RUN_DURATION
            },
            "onHostMaintenance": "TERMINATE",
            "provisioningModel": "FLEX_START"
          }
    
      }
    }
    

    更改下列內容:

    • INSTANCE_TEMPLATE_NAME:執行個體範本的名稱。
    • MACHINE_TYPE:執行個體使用的機器類型。指定 H4D 機器類型。詳情請參閱 H4D 機器類型
    • IMAGE_FAMILY:您要使用的 OS 映像檔映像檔系列。 如需支援的作業系統清單,請參閱「支援的作業系統」。
    • IMAGE_PROJECT:OS 映像檔的專案 ID。
    • REGION:要建立執行個體範本的區域。 指定您要使用的機器類型適用的地區。 如要瞭解區域,請參閱「區域和可用區」。
    • DISK_SIZE:開機磁碟的大小 (以 GiB 為單位)。
    • GVNIC_NAME_PREFIX:您為 gVNIC 介面建立標準 VPC 網路和子網路時使用的名稱前置字元。

      如果使用預設網路,請只加入一個 --network-interface 欄位,並將 nic-type 欄位設為 GVNIC。此外,請省略這個網路介面的 networksubnetwork 設定。

    • EXTERNAL_IPV4_ADDRESS:選用:要搭配 gVNIC 網路介面使用的靜態外部 IPv4 位址。您必須先保留外部 IPv4 位址

      如要為 GVNIC 網路介面指定外部 IPv6 位址,請改用 --external-ipv6-address 旗標。

    • RDMA_NAME_PREFIX:建立 IRDMA 網路介面的虛擬私有雲網路和子網路時使用的名稱前置字元。

      如果 H4D 執行個體未使用 Cloud RDMA,請省略 IRDMA 介面的 --network-interface 欄位。

    • RUN_DURATION:您希望要求的執行個體執行的時間長度 (以秒為單位)。這個值必須介於 600 (600 秒,也就是 10 分鐘) 和 604800 (604,800 秒,也就是七天) 之間。

    建立執行個體範本後,您可以查看範本,瞭解範本 ID 並檢查執行個體屬性。

    建立含有大小調整要求的 MIG

    如要同時建立所有要求的彈性啟動執行個體,請建立 MIG,然後在 MIG 中建立規模調整要求,如本節所述。

    建立 MIG

    如要建立 MIG,請選取下列任一選項:

    gcloud

    請按照下列步驟建立可用區或區域性 MIG:

    • 如要建立可用區 MIG,請使用下列 instance-groups managed create 指令

          gcloud compute instance-groups managed create MIG_NAME \
              --template=INSTANCE_TEMPLATE_URL \
              --size=0 \
              --default-action-on-vm-failure=do-nothing \
              --zone=ZONE
          
    • 如要建立地區 MIG,請使用下列 instance-groups managed create 指令

          gcloud compute instance-groups managed create MIG_NAME \
              --template=INSTANCE_TEMPLATE_URL \
              --size=0 \
              --default-action-on-vm-failure=do-nothing \
              --zones=ZONE \
              --target-distribution-shape=any-single-zone \
              --instance-redistribution-type=none
          

    REST

    請按照下列步驟建立可用區或區域性 MIG:

    • 如要建立區域 MIG,請向 instanceGroupManagers.insert 方法發出 POST 要求,如下所示。
            POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
            {
              "versions": [
              {
                "instanceTemplate": "INSTANCE_TEMPLATE_URL"
              }
              ],
              "name": "MIG_NAME",
              "targetSize": 0,
              "instanceLifecyclePolicy": {
                  "defaultActionOnFailure": "DO_NOTHING"
              }
            }
           
    • 如要建立地區 MIG,請對 regionInstanceGroupManagers.insert 方法發出 POST 要求,如下所示:
            POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
            {
              "versions": [
                {
                  "instanceTemplate": "INSTANCE_TEMPLATE_URL"
                }
              ],
              "name": "MIG_NAME",
              "targetSize": 0,
              "distributionPolicy": {
                "targetShape": "ANY_SINGLE_ZONE",
                "zones": [
                  {
                  "zone": "projects/PROJECT_ID/zones/ZONE"
                  }
                ]
              },
              "updatePolicy": {
                "instanceRedistributionType": "NONE"
              },
              "instanceLifecyclePolicy": {
                "defaultActionOnFailure": "DO_NOTHING"
              }
            }
           

    建立大小調整要求

    如要在 MIG 中建立規模調整要求,請選取下列任一選項:

    gcloud

    建立大小調整要求,方法如下:

    • 如要在區域 MIG 中建立調整大小要求,請使用 instance-groups managed resize-requests create 指令,如下所示:

          gcloud compute instance-groups managed resize-requests create MIG_NAME \
              --resize-request=RESIZE_REQUEST_NAME \
              POPULATION_METHOD \
              --zone=ZONE
          
    • 如要在區域 MIG 中建立調整大小要求,請使用 beta instance-groups managed resize-requests create 指令,如下所示:

            gcloud beta compute instance-groups managed resize-requests create MIG_NAME \
                --resize-request=RESIZE_REQUEST_NAME \
                POPULATION_METHOD \
                --region=REGION
            

    REST

    在可用區或區域 MIG 中建立規模調整要求,方法如下:

    清除所用資源

    如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

    刪除專案

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    刪除資源

    1. 刪除 MIG 中的大小調整要求

    2. 刪除 MIG 和執行個體

    3. 如果執行個體範本中磁碟的自動刪除狀態設為 False,刪除 VM 執行個體時,系統不會自動刪除磁碟。你可以透過下列任一方式刪除磁碟:

      主控台

      1. 前往 Google Cloud 控制台的「Disks」(磁碟) 頁面。

      前往「Disks」(磁碟) 頁面

      1. 選取包含您在本教學課程中建立磁碟的資料列。確認每個磁碟的「In use by」(使用者) 欄都是空白。

      2. 依序點選 「Delete」(刪除) 和「Delete」(刪除) 確認操作。

      gcloud

      使用 gcloud compute disks delete 指令

      gcloud compute disks delete DISK_NAME \
          --project PROJECT_ID --zone ZONE
      

      更改下列內容:

      • DISK_NAME :要刪除的磁碟名稱
      • PROJECT_ID:磁碟所在的專案 ID
      • ZONE:磁碟的可用區

      REST

      使用 disks.delete 方法刪除磁碟。

      DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME 
      

      更改下列內容:

      • PROJECT_ID:磁碟所在的專案 ID
      • ZONE:磁碟的可用區
      • DISK_NAME :要刪除的磁碟名稱
    4. 刪除網路

    5. 刪除執行個體範本

    後續步驟