このチュートリアルでは、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 managersとInstance 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 ネットワークを設定するには、ドキュメントに記載されている手順に沿って操作するか、提供されているスクリプトを使用します。
手順ガイド
ネットワークを作成するには、次の操作を行います。
GVNICネットワーク インターフェースのホスト ネットワークを作成するには、VPC ネットワークの作成と管理をご覧ください。GVNICネットワーク インターフェースを 1 つだけ構成する場合は、デフォルトの VPC ネットワークと、インスタンスと同じリージョンにある自動サブネットを使用できます。IRDMAネットワーク インターフェースのネットワークを作成するには、RDMA ネットワーク プロファイルを使用して VPC ネットワークを作成するをご覧ください。RDMA ネットワークの最大伝送単位(MTU)のデフォルト値(8896)を使用します。
スクリプト
インスタンスごとに最大 9 個の GVNIC ネットワーク インターフェースと 1 個の IRDMA ネットワーク インターフェースを作成できます。各ネットワーク インターフェースは、別々のネットワークに接続する必要があります。ネットワークを作成するには、次のスクリプトを使用します。このスクリプトは、GVNIC 用に 2 つのネットワークを作成し、IRDMA 用に 1 つのネットワークを作成します。
- 省略可: スクリプトを実行する前に、RDMA ネットワーク プロファイルを一覧表示して、使用可能なプロファイルがあることを確認します。
gcloud beta compute network-profiles list
次のコードをコピーして、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を使用します。
省略可: VPC ネットワーク リソースが正常に作成されたことを確認するには、 Google Cloud コンソールでネットワーク設定を確認します。
- Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
- リストで、前の手順で作成したネットワークを検索します。
- サブネット、ファイアウォール ルール、その他のネットワーク設定を表示するには、ネットワークの名前をクリックします。
インスタンス テンプレートの作成
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フィールドのみを含めます。また、このネットワーク インターフェースのnetworkとsubnetworkの設定は省略します。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: リクエストされたインスタンスを実行する期間。値は、日数、時間、分、秒として指定し、その後にそれぞれd、h、m、sを続ける必要があります。たとえば、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フィールドのみを含めます。また、このネットワーク インターフェースのnetworkとsubnetworkの設定は省略します。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
次のようにサイズ変更リクエストを作成します。
-
ゾーン 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 にサイズ変更リクエストを作成するには、次のようにベータ版の
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 またはリージョン 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 }