H4D マシンタイプと Flex Start を使用して MIG を作成する

このチュートリアルでは、H4D マシンタイプを使用するマネージド インスタンス グループ(MIG)を作成する方法について説明します。MIG は、Dynamic Workload Scheduler の Flex Start 消費モデルを使用して、最大 7 日間のコンピューティング リソースを取得します。

MIG を作成すると、複数の仮想マシン(VM)を単一のエンティティとして管理できます。MIG 内の各 VM はインスタンス テンプレートに基づいています。MIG はグループ内の VM を自動的に管理することで、高可用性とスケーラビリティを実現します。MIG の詳細については、マネージド インスタンス グループをご覧ください。

HPC VM と HPC クラスタの作成オプションについては、HPC クラスタの作成の概要をご覧ください。

このチュートリアルは、短期間のワークロード用に相互接続された HPC インスタンスのグループを作成することに関心がある HPC エンジニア、プラットフォーム管理者、オペレーター、データと MPI のスペシャリストを対象としています。結果のインスタンスは、インスタンス管理やジョブ スケジューリングにオーケストレーターを使用しません。

省略可: プリエンプティブル割り当てをリクエストする

MIG に追加された VM インスタンスは、リージョン割り当てを消費します。VM インスタンス、インスタンス グループ、CPU、ディスクの各割り当ては、ゾーンに関係なくリージョン内の VM インスタンスが消費できます。

Flex Start を使用する場合、割り当ては標準割り当てまたはプリエンプティブル割り当てのいずれかになります。

  • 標準割り当て: プロジェクトにプリエンプティブル割り当てがなく、プリエンプティブル割り当てをリクエストしたことがない場合、インスタンス リソースは標準割り当てを消費します。
  • プリエンプティブル割り当て: プリエンプティブル割り当てをリクエストすると、一時的なリソースに個別の割り当てを提供することで、割り当ての取得を改善できます。ただし、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

省略可: VPC ネットワークを作成する

無効にすることを選択しない限り、各プロジェクトには デフォルト ネットワークがあります。このネットワークを使用して、インスタンスのネットワーク接続を提供できます。VM を作成するときに、VPC ネットワークとサブネットを指定できます。この構成を省略すると、デフォルトのネットワークとサブネットが使用されます。

H4D インスタンスは、Cloud RDMA を使用するように構成できます。Cloud RDMA は、Compute Engine インスタンス間のリモート ダイレクト メモリ アクセス(RDMA)をサポートする IRDMA ネットワーク ドライバを使用して、低レイテンシの信頼性の高いメッセージング機能を有効にします。

このチュートリアルでは、次のことを行います。

  • Cloud RDMA を使用するように H4D インスタンスを構成する場合は、このセクションの手順を完了します。
  • Cloud RDMA を使用しない場合は、このセクションをスキップして、代わりにデフォルト ネットワークを使用できます。

RDMA 対応インスタンスには、少なくとも 2 つのネットワーク インターフェース(NIC)が必要です。

  • NIC タイプ GVNIC: 通常の VM-VM 間通信と VM-インターネット間通信で TCP/IP とインターネット トラフィックに gve ドライバを使用します。
  • NIC タイプ IRDMA: インスタンス間の Cloud RDMA ネットワーキングに IDPF/iRDMA ドライバを使用します。

Cloud RDMA を使用するインスタンスには、IRDMA インターフェースを 1 つだけ設定できます。インスタンスごとに最大 8 つの追加の GVNIC ネットワーク インターフェースを追加して、合計 10 個の NIC を使用できます。

インスタンスで使用する Falcon VPC ネットワークを設定するには、ドキュメントに記載されている手順に沿って操作するか、提供されているスクリプトを使用します。

手順ガイド

ネットワークを作成するには、次の操作を行います。

スクリプト

インスタンスごとに最大 9 個の GVNIC ネットワーク インターフェースと 1 個の IRDMA ネットワーク インターフェースを作成できます。各ネットワーク インターフェースは、別々のネットワークに接続する必要があります。ネットワークを作成するには、次のスクリプトを使用します。このスクリプトは、GVNIC 用に 2 つのネットワークを作成し、IRDMA 用に 1 つのネットワークを作成します。

  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 タイプを使用する標準 VPC ネットワークとサブネットに使用する名前の接頭辞。
    • REGION: ネットワークを作成するリージョン。これは、RDMA ネットワークの作成時に --network-profile フラグに指定したゾーンに対応している必要があります。たとえば、ゾーンを europe-west4-b として指定すると、リージョンは europe-west4 になります。
    • IP_RANGE: SSH ファイアウォール ルールに使用する VPC ネットワーク外の IP アドレス範囲。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。0.0.0.0/0 または ::/0 をソース範囲として使用しないでください。これにより、 Google Cloudの外部にあるソースを含むすべての IPv4 または IPv6 ソースからのトラフィックが許可されます。
    • RDMA_NAME_PREFIX: IRDMA NIC タイプを使用する VPC ネットワークとサブネットに使用する名前の接頭辞。
    • ZONE: ネットワークとコンピューティング インスタンスを作成するゾーンus-central1-a または europe-west4-b を使用します。
  3. 省略可: VPC ネットワーク リソースが正常に作成されたことを確認するには、 Google Cloud コンソールでネットワーク設定を確認します。

    1. Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。

      [VPC ネットワーク] に移動

    2. リストで、前の手順で作成したネットワークを検索します。
    3. サブネット、ファイアウォール ルール、その他のネットワーク設定を表示するには、ネットワークの名前をクリックします。

インスタンス テンプレートの作成

Flex Start 使用オプションを使用するには、空の MIG を作成してから、MIG のサイズ変更リクエストを作成します。リクエストされた容量が使用可能になると、Compute Engine はその容量をプロビジョニングし、MIG にインスタンスを作成します。リソースは最大 7 日間取得されます。

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 ネットワークとサブネットの作成時に使用した名前の接頭辞。

    デフォルト ネットワークを使用している場合は、nic-type フィールドが GVNIC に設定された 1 つの --network-interface フィールドのみを含めます。また、このネットワーク インターフェースの networksubnetwork の設定は省略します。

  • STACK_TYPE: 省略可。gVNIC インターフェースに使用するスタックタイプ。IPV4_ONLY または IPV4_IPV6 を指定します。値を指定しない場合、デフォルトで IPV4_ONLY が使用されます。
  • EXTERNAL_IPV4_ADDRESS: 省略可。gVNIC ネットワーク インターフェースで使用する静的外部 IPv4 アドレス。外部 IPv4 アドレスは予約済みである必要があります。次のいずれかを行います。

    • サブネットの有効な IPv4 アドレスを指定します。
    • ネットワーク インターフェースで外部 IP アドレスを使用しない場合は、フラグ no-address を使用します。
    • ネットワーク インターフェースでエフェメラル外部 IP アドレスを受信する場合は、address='' を指定します。

    GVNIC ネットワーク インターフェースの外部 IPv6 アドレスを指定するには、代わりに --external-ipv6-address フラグを使用します。

  • RDMA_NAME_PREFIX: IRDMA ネットワーク インターフェースの VPC ネットワークとサブネットの作成時に使用した名前の接頭辞。

    H4D インスタンスで Cloud RDMA を使用していない場合は、IRDMA インターフェースの --network-interface フィールドを省略します。

  • RUN_DURATION: リクエストされたインスタンスを実行する期間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。たとえば、30 分の場合は 30m を指定し、1 日と 2 時間 3 分 4 秒の場合は 1d2h3m4s を指定します。値は 10 分~ 7 日の範囲で指定してください。

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 ネットワークとサブネットの作成時に使用した名前の接頭辞。

    デフォルト ネットワークを使用している場合は、nic-type フィールドが GVNIC に設定された 1 つの --network-interface フィールドのみを含めます。また、このネットワーク インターフェースの networksubnetwork の設定は省略します。

  • EXTERNAL_IPV4_ADDRESS: 省略可。gVNIC ネットワーク インターフェースで使用する静的外部 IPv4 アドレス。外部 IPv4 アドレスは予約済みである必要があります。

    GVNIC ネットワーク インターフェースの外部 IPv6 アドレスを指定するには、代わりに --external-ipv6-address フラグを使用します。

  • RDMA_NAME_PREFIX: IRDMA ネットワーク インターフェースの VPC ネットワークとサブネットの作成時に使用した名前の接頭辞。

    H4D インスタンスで Cloud RDMA を使用していない場合は、IRDMA インターフェースの --network-interface フィールドを省略します。

  • RUN_DURATION: リクエストされたインスタンスの実行時間(秒単位)。値は 600(600 秒、10 分)から 604800(604,800 秒、7 日間)の範囲で指定する必要があります。

インスタンス テンプレートを作成したら、テンプレートを表示して ID を確認し、インスタンス プロパティを確認できます。

サイズ変更リクエストを使用して MIG を作成する

リクエストされたすべての Flex Start インスタンスを同時に作成するには、MIG を作成し、このセクションで説明するように MIG でサイズ変更リクエストを作成します。

MIG を作成する

MIG を作成するには、次のいずれかのオプションを選択します。

gcloud

ゾーン MIG またはリージョン 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 を次のように作成します。

  • ゾーン 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

次のようにサイズ変更リクエストを作成します。

REST

ゾーン MIG またはリージョン MIG でサイズ変更リクエストを作成します。

  • ゾーン MIG でサイズ変更リクエストを作成するには、次のように instanceGroupManagerResizeRequests.insert メソッドPOST リクエストを送信します。
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }
          
  • リージョン MIG でサイズ変更リクエストを作成するには、次のように beta.regionInstanceGroupManagerResizeRequests.insert メソッドPOST リクエストを送信します。
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }