GPUDirect を有効にして A3 Mega、A3 High、または A3 Edge インスタンスを作成する

このドキュメントでは、8 個の NVIDIA H100 GPU が接続され、GPUDirect-TCPX または GPUDirect-TCPXO のいずれかの GPUDirect テクノロジーを使用する A3 Mega、A3 High、または A3 Edge 仮想マシン(VM)インスタンスの設定について説明します。GPU が 8 個未満の A3 High インスタンスを作成するには、A3 High インスタンスまたは A2 インスタンスを作成するをご覧ください。

使用する GPUDirect テクノロジーは、選択した A3 マシンタイプによって異なります。

  • GPUDirect-TCPXO: 8 個の H100 GPU を搭載した A3 Mega(a3-megagpu-8g)マシンタイプでサポートされている RDMA のようなオフロード ネットワーキング スタックです。
  • GPUDirect-TCPX: レイテンシを短縮するゲスト TCP の最適化バージョンです。8 個の H100 GPU を搭載した A3 High(a3-highgpu-8g)マシンタイプと A3 Edge(a3-edgegpu-8g)マシンタイプでサポートされています。

A3 アクセラレータ最適化マシンシリーズは、208 個の vCPU と最大 1,872 GB のメモリを備えています。a3-megagpu-8ga3-highgpu-8ga3-edgegpu-8g の各マシンタイプでは、GPU あたり 80 GB の GPU メモリが提供されます。これらのマシンタイプは最大 1,800 Gbps のネットワーク帯域幅を利用できるため、Transformer ベースの大規模な言語モデル、データベース、ハイ パフォーマンス コンピューティング(HPC)に最適です。

GPUDirect-TCPX と GPUDirect-TCPXO はどちらも NVIDIA GPUDirect テクノロジーを使用して、A3 VM のパフォーマンスを向上させ、レイテンシを短縮します。これは、CPU とシステムメモリをバイパスして、データパケットのペイロードを GPU メモリからネットワーク インターフェースに直接転送することで実現されます。これは、リモート ダイレクト メモリアクセス(RDMA)の一種です。Google Virtual NIC(gVNIC)と組み合わせることで、A3 VM は、前世代の A2 または G2 アクセラレータ最適化マシンタイプと比較して、クラスタ内の VM 間で最高のスループットを提供できます。

このドキュメントでは、A3 Mega、A3 High、A3 Edge VM を作成し、GPUDirect-TCPX または GPUDirect-TCPXO を有効にして、改善された GPU ネットワーク パフォーマンスをテストする方法について説明します。

始める前に

  • GPU が割り当てられたインスタンスの作成に関する制限事項とその他の前提条件(OS イメージの選択や GPU の割り当ての確認など)を確認するには、GPU が割り当てられたインスタンスの作成の概要をご覧ください。
  • まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
    1. Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    2. Set a default region and zone.

必要なロール

VM の作成に必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1)IAM ロールを付与するよう管理者に依頼します。ロールの付与について詳しくは、プロジェクト、フォルダ、組織へのアクセス権を管理するをご覧ください。

この事前定義ロールには、VM の作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

VM を作成するには、次の権限が必要です。

  • プロジェクトに対する compute.instances.create
  • カスタム イメージを使用して VM を作成する: イメージに対する compute.images.useReadOnly
  • スナップショットを使用して VM を作成する: スナップショットに対する compute.snapshots.useReadOnly
  • インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly
  • VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する compute.subnetworks.use
  • VM の静的 IP アドレスを指定する: プロジェクトに対する compute.addresses.use
  • VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する compute.subnetworks.useExternalIp
  • VM にレガシー ネットワークを割り当てる: プロジェクトに対する compute.networks.use
  • レガシー ネットワークを使用する際に VM に外部 IP アドレスを割り当てる: プロジェクトに対する compute.networks.useExternalIp
  • VM の VM インスタンス メタデータを設定する: プロジェクトに対する compute.instances.setMetadata
  • VM にタグを設定する: VM に対する compute.instances.setTags
  • VM にラベルを設定する: VM に対する compute.instances.setLabels
  • VM が使用するサービス アカウントを設定する: VM に対する compute.instances.setServiceAccount
  • VM 用の新しいディスクを作成する: プロジェクトに対する compute.disks.create
  • 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する compute.disks.use
  • 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する compute.disks.useReadOnly

これらの権限は、カスタムロールや他の事前定義ロールを使用して取得することもできます。

概要

GPUDirect を使用してネットワーク パフォーマンスをテストするには、次のように操作します。

  1. 大きな MTU が構成された 1 つ以上の Virtual Private Cloud(VPC)ネットワークを設定します。
  2. GPU インスタンスを作成します。

VPC ネットワークを設定する

GPU VM の効率的な通信を有効にするには、管理ネットワークと 1 つ以上のデータ ネットワークを作成する必要があります。管理ネットワークは、外部アクセス(SSH など)と一般的なネットワーク通信のほとんどに使用されます。データ ネットワークは、異なる VM の GPU 間の高パフォーマンス通信(リモート ダイレクト メモリアクセス(RDMA)トラフィックなど)に使用されます。

これらの VPC ネットワークでは、最大伝送単位(MTU)をより大きい値に設定することをおすすめします。MTU 値を大きくすると、パケットサイズが大きくなり、パケット ヘッダーのオーバーヘッドが減少するため、ペイロードのデータ スループットが向上します。 VPC ネットワークの作成方法の詳細については、ジャンボ フレーム MTU ネットワークの作成と確認をご覧ください。

管理ネットワーク、サブネット、ファイアウォール ルールを作成する

管理ネットワークを設定するには、次の手順で操作します。

  1. networks create コマンドを使用して、管理ネットワークを作成します。

    gcloud compute networks create NETWORK_NAME_PREFIX-mgmt-net \
        --project=PROJECT_ID \
        --subnet-mode=custom \
        --mtu=8244
    
  2. networks subnets create コマンドを使用して、管理サブネットを作成します。

    gcloud compute networks subnets create NETWORK_NAME_PREFIX-mgmt-sub \
        --project=PROJECT_ID \
        --network=NETWORK_NAME_PREFIX-mgmt-net \
        --region=REGION \
        --range=192.168.0.0/24
    
  3. firewall-rules create コマンドを使用して、ファイアウォール ルールを作成します。

    1. 管理ネットワークのファイアウォール ルールを作成します。

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-internal \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=tcp:0-65535,udp:0-65535,icmp \
          --source-ranges=192.168.0.0/16
      
    2. tcp:22 ファイアウォール ルールを作成して、SSH を使用して VM に接続できる送信元 IP アドレスを制限します。

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ssh \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=tcp:22 \
          --source-ranges=SSH_SOURCE_IP_RANGE
      
    3. ネットワーク内のデータ転送の問題を確認するために使用できる icmp ファイアウォール ルールを作成します。

      gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ping \
          --project=PROJECT_ID \
          --network=NETWORK_NAME_PREFIX-mgmt-net \
          --action=ALLOW \
          --rules=icmp \
          --source-ranges=0.0.0.0/0
      

次のように置き換えます。

  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • PROJECT_ID: プロジェクト ID。
  • REGION: ネットワークを作成するリージョン。
  • SSH_SOURCE_IP_RANGE: CIDR 形式の IP 範囲。 SSH を使用して VM に接続できる送信元 IP アドレスを指定します。

データ ネットワーク、サブネット、ファイアウォール ルールを作成する

データ ネットワークの数は、作成する GPU マシンのタイプによって異なります。

A3 Mega

A3 Mega には 8 つのデータ ネットワークが必要です。次のコマンドを使用して、それぞれサブネットとファイアウォール ルールを持つ 8 つのデータ ネットワークを作成します。

for N in $(seq 1 8); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
    --project=PROJECT_ID \
    --subnet-mode=custom \
    --mtu=8244

gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --region=REGION \
    --range=192.168.$N.0/24

gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=192.168.0.0/16
done

A3 High、A3 Edge

A3 High と A3 Edge には 4 つのデータ ネットワークが必要です。次のコマンドを使用して、それぞれサブネットとファイアウォール ルールを持つ 4 つのデータ ネットワークを作成します。

for N in $(seq 1 4); do
gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \
    --project=PROJECT_ID \
    --subnet-mode=custom \
    --mtu=8244

gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --region=REGION \
    --range=192.168.$N.0/24

gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \
    --project=PROJECT_ID \
    --network=NETWORK_NAME_PREFIX-data-net-$N \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=192.168.0.0/16
done

A3 Mega インスタンスを作成する(GPUDirect-TCPXO)

cos-121-lts 以降の Container-Optimized OS イメージを使用して A3 Mega インスタンスを作成します。

COS

GPUDirect-TCPXO でネットワーク パフォーマンスをテストするには、少なくとも 2 つの A3 Mega VM インスタンスを作成します。cos-121-lts 以降の Container-Optimized OS イメージを使用して各 VM を作成し、前の手順で作成した VPC ネットワークを指定します。

A3 Mega VM には、9 つの Google Virtual NIC(gVNIC)ネットワーク インターフェースが必要です。1 つは管理ネットワーク用、8 つはデータ ネットワーク用です。

VM の作成に使用するプロビジョニング モデルに基づいて、次のいずれかのオプションを選択します。

標準

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address

次のように置き換えます。

  • VM_NAME: VM インスタンスの名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。

スポット

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=SPOT \
    --instance-termination-action=TERMINATION_ACTION

次のように置き換えます。

  • VM_NAME: VM インスタンスの名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • TERMINATION_ACTION: プリエンプション時に VM を停止するか削除するか。次のいずれかの値を指定します。
    • VM を停止するには: STOP
    • VM を削除するには: DELETE

Flex Start

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --reservation-affinity=none

次のように置き換えます。

  • VM_NAME: VM インスタンスの名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • TERMINATION_ACTION: 実行期間の終了時に VM を停止するか削除するか。次のいずれかの値を指定します。
    • VM を停止するには: STOP
    • VM を削除するには: DELETE
  • RUN_DURATION: Compute Engine が VM を停止または削除するまでの VM の最大実行時間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。たとえば、値 30m は 30 分の時間を定義し、値 1h2m3s は 1 時間 2 分 3 秒の時間を定義します。10 分~7 日の範囲で値を指定できます。
  • VALID_FOR_DURATION`: リクエストされたリソースのプロビジョニングを待機する最大時間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。ワークロードのゾーン要件に基づいて、VM 作成リクエストが成功する可能性を高めるために、次のいずれかの期間を指定します。
    • ワークロードで特定のゾーンに VM を作成する必要がある場合は、90 秒(90s)から 2 時間(2h)の期間を指定します。期間が長いほど、リソースを取得できる可能性が高くなります。
    • VM がリージョン内の任意のゾーンで実行できる場合は、期間を 0 秒(0s)に指定します。この値は、リソースがすぐに使用可能な場合にのみ Compute Engine がリソースを割り当てることを指定します。リソースが使用できないため作成リクエストが失敗した場合は、別のゾーンでリクエストを再試行します。

予約で制限

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=a3-megagpu-8g \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-5,subnet=NETWORK_NAME_PREFIX-data-sub-5,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-6,subnet=NETWORK_NAME_PREFIX-data-sub-6,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-7,subnet=NETWORK_NAME_PREFIX-data-sub-7,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-8,subnet=NETWORK_NAME_PREFIX-data-sub-8,no-address \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

次のように置き換えます。

  • VM_NAME: VM インスタンスの名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • TERMINATION_ACTION: 予約期間の終了時に VM を停止するか削除するか。次のいずれかの値を指定します。
    • VM を停止するには: STOP
    • VM を削除するには: DELETE
  • RESERVATION_URL: 使用する予約の URL。次のいずれかの値を指定します。
    • 同じプロジェクトで予約を作成した場合: example-reservation
    • 予約が別のプロジェクトにあり、 プロジェクトで使用できる場合: projects/PROJECT_ID/reservations/example-reservation

GPU ドライバをインストールする

各 A3 Mega VM に GPU ドライバをインストールします。

  1. NVIDIA GPU ドライバをインストールします。

    sudo cos-extensions install gpu -- --version=latest
    
  2. パスを再マウントします。

    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia
    

NIC に GPU へのアクセス権を付与する

各 A3 Mega VM で、NIC に GPU へのアクセス権を付与します。

  1. すべての受信 TCP 接続を受け入れ、クラスタ内のノード間の通信を有効にするようにファイアウォール設定を調整します。
    sudo /sbin/iptables -I INPUT -p tcp -m tcp -j ACCEPT
  2. dmabuf モジュールを構成するdmabuf フレームワークの一部である import-helper モジュールを読み込みます。このフレームワークにより、GPU とネットワーク インターフェース カード(NIC)間で高速のゼロコピー メモリ共有が可能になります。これは、GPUDirect テクノロジーの重要なコンポーネントです。
    sudo modprobe import-helper
  3. Artifact Registry へのリクエストを認証するように Docker を構成します。
    docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  4. コンテナで RxDM を起動します。RxDM は、GPU アプリケーションとともに実行され、GPU メモリを管理する管理サービスです。このサービスは、受信ネットワーク トラフィック用に GPU メモリを事前割り当てして管理します。これは GPUDirect テクノロジーの重要な要素であり、高性能ネットワーキングに不可欠です。rxdm という名前の Docker コンテナを起動します。
    docker run --pull=always --rm --detach --name rxdm \
        --network=host  --cap-add=NET_ADMIN  \
        --privileged \
        --volume /var/lib/nvidia:/usr/local/nvidia \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
        us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.19 \
        --num_hops=2 --num_nics=8

    RxDM が正常に起動したことを確認するには、コマンドを実行します。「バッファ マネージャーの初期化が終了」というメッセージが表示されるまで待ち、RxDM の初期化が成功したことを確認します。

    docker container logs --follow  rxdm

    または、RxDM 初期化完了ログを確認します。

    docker container logs rxdm 2>&1 | grep "Buffer manager initialization complete"

NCCL 環境を設定する

各 A3 VM で、次の手順で操作します。

  1. nccl-net ライブラリをインストールします。これは、ネットワーク経由で GPUDirect 通信を可能にする NCCL のプラグインです。次のコマンドは、インストーラ イメージを pull し、必要なライブラリ ファイルを /var/lib/tcpxo/lib64/ にインストールします。
    NCCL_NET_IMAGE="us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.13-1"
    
    docker run --pull=always --rm --privileged \
        --network=host --cap-add=NET_ADMIN \
        --volume /var/lib/nvidia:/usr/local/nvidia  \
        --volume /var/lib:/var/lib \
        --device /dev/nvidia0:/dev/nvidia0   \
        --device /dev/nvidia1:/dev/nvidia1  \
        --device /dev/nvidia2:/dev/nvidia2  \
        --device /dev/nvidia3:/dev/nvidia3  \
        --device /dev/nvidia4:/dev/nvidia4  \
        --device /dev/nvidia5:/dev/nvidia5  \
        --device /dev/nvidia6:/dev/nvidia6  \
        --device /dev/nvidia7:/dev/nvidia7  \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm  \
        --device /dev/nvidiactl:/dev/nvidiactl  \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper  \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \
        ${NCCL_NET_IMAGE} install  --install-nccl
    
    sudo mount --bind /var/lib/tcpxo /var/lib/tcpxo && sudo mount -o remount,exec /var/lib/tcpxo
    
  2. NCCL テスト用の専用コンテナ nccl-tests を起動します。このコンテナには、必要なツールとユーティリティ スクリプトが事前構成されており、GPUDirect 設定のパフォーマンスを検証するためのクリーンで一貫性のある環境が確保されます。

    このコマンドは、前の手順で設定した NCCL_NET_IMAGE 変数を再利用します。

    docker run --pull=always --rm --detach --name nccl \
        --network=host --cap-add=NET_ADMIN \
        --privileged \
        --volume /var/lib/nvidia:/usr/local/nvidia  \
        --volume /var/lib/tcpxo:/var/lib/tcpxo \
        --shm-size=8g \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --device /dev/dmabuf_import_helper:/dev/dmabuf_import_helper \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/var/lib/tcpxo/lib64 \
        ${NCCL_NET_IMAGE} daemon

nccl-tests ベンチマークを実行する

nccl-tests ベンチマークを実行するには、単一の A3 Mega VM で次の操作を行います。

  1. nccl-tests コンテナ内でインタラクティブな bash シェルを開きます。
    docker exec -it nccl bash
  2. nccl-tests コンテナの bash シェル内で、次の操作を行います。

    1. SSH を設定し、ホストファイルを生成して、マルチノード実行の環境を構成します。VM_NAME_1VM_NAME_2 は、各 VM の名前に置き換えます。
      /scripts/init_ssh.sh VM_NAME_1 VM_NAME_2
      /scripts/gen_hostfiles.sh VM_NAME_1 VM_NAME_2
        

      これにより、/scripts/hostfiles2 という名前のディレクトリが作成されます。

    2. all_gather_perf ベンチマークを実行して、集団通信のパフォーマンスを測定します。
      /scripts/run-nccl-tcpxo.sh all_gather_perf "${LD_LIBRARY_PATH}" 8 eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8 1M 512M 3 2 10 8 2 10

A3 High インスタンスと Edge インスタンスを作成する(GPUDirect-TCPX)

cos-121-lts 以降の Container-Optimized OS イメージを使用して、A3 High インスタンスと Edge インスタンスを作成します。

COS

GPUDirect-TCPX でネットワーク パフォーマンスをテストするには、少なくとも 2 つの A3 High VM または A3 Edge VM を作成する必要があります。cos-121-lts 以降の Container-Optimized OS イメージを使用して各 VM を作成し、前の手順で作成した VPC ネットワークを指定します。

VM は Google Virtual NIC(gVNIC)ネットワーク インターフェースも使用する必要があります。A3 High VM または Edge VM の場合は、gVNIC ドライバのバージョン 1.4.0rc3 以降を使用する必要があります。このドライバ バージョンは Container-Optimized OS で利用できます。 最初の仮想 NIC は一般的なネットワーキングとストレージのプライマリ NIC として使用されます。他の 4 つの仮想 NIC は、同じ PCIe スイッチ上の 8 つの GPU のうち 2 つと NUMA アラインされています。

VM の作成に使用するプロビジョニング モデルに基づいて、次のいずれかのオプションを選択します。

標準

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address

次のように置き換えます。

  • VM_NAME: VM の名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • MACHINE_TYPE: VM のマシンタイプ。 a3-highgpu-8g または a3-edgegpu-8g を指定します。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。

スポット

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=SPOT \
    --instance-termination-action=TERMINATION_ACTION

次のように置き換えます。

  • VM_NAME: VM の名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • MACHINE_TYPE: VM のマシンタイプ。 a3-highgpu-8g または a3-edgegpu-8g を指定します。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • TERMINATION_ACTION: プリエンプション時に VM を停止するか削除するか。次のいずれかの値を指定します。
    • VM を停止するには: STOP
    • VM を削除するには: DELETE

Flex Start

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --reservation-affinity=none

次のように置き換えます。

  • VM_NAME: VM の名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • MACHINE_TYPE: VM のマシンタイプ。 a3-highgpu-8g または a3-edgegpu-8g を指定します。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • TERMINATION_ACTION: 実行期間の終了時に VM を停止するか削除するか。次のいずれかの値を指定します。
    • VM を停止するには: STOP
    • VM を削除するには: DELETE
  • RUN_DURATION: Compute Engine が VM を停止または削除するまでの VM の最大実行時間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。たとえば、値 30m は 30 分の時間を定義し、値 1h2m3s は 1 時間 2 分 3 秒の時間を定義します。10 分~7 日の範囲で値を指定できます。
  • VALID_FOR_DURATION`: リクエストされたリソースのプロビジョニングを待機する最大時間。値は、日数、時間、分、秒として指定し、その後にそれぞれ dhms を続ける必要があります。ワークロードのゾーン要件に基づいて、VM 作成リクエストが成功する可能性を高めるために、次のいずれかの期間を指定します。
    • ワークロードで特定のゾーンに VM を作成する必要がある場合は、90 秒(90s)から 2 時間(2h)の期間を指定します。期間が長いほど、リソースを取得できる可能性が高くなります。
    • VM がリージョン内の任意のゾーンで実行できる場合は、期間を 0 秒(0s)に指定します。この値は、リソースがすぐに使用可能な場合にのみ Compute Engine がリソースを割り当てることを指定します。リソースが使用できないため作成リクエストが失敗した場合は、別のゾーンでリクエストを再試行します。

予約で制限

gcloud compute instances create VM_NAME \
    --project=PROJECT_ID \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE --restart-on-failure \
    --image-family=cos-121-lts \
    --image-project=cos-cloud \
    --boot-disk-size=BOOT_DISK_SIZE \
    --metadata=cos-update-strategy=update_disabled \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \
    --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --reservation-affinity=specific \
    --reservation=RESERVATION_URL

次のように置き換えます。

  • VM_NAME: VM の名前。
  • PROJECT_ID: 実際のプロジェクトの ID。
  • ZONE: マシンタイプをサポートするゾーン。
  • MACHINE_TYPE: VM のマシンタイプ。 a3-highgpu-8g または a3-edgegpu-8g を指定します。
  • BOOT_DISK_SIZE: ブートディスクのサイズ(GB 単位)。例: 50
  • NETWORK_NAME_PREFIX: VPC ネットワークとサブネットに使用する名前の接頭辞。
  • TERMINATION_ACTION: 予約期間の終了時に VM を停止するか削除するか。次のいずれかの値を指定します。
    • VM を停止するには: STOP
    • VM を削除するには: DELETE
  • RESERVATION_URL: 使用する予約の URL。次のいずれかの値を指定します。
    • 同じプロジェクトで予約を作成した場合: example-reservation
    • 予約が別のプロジェクトにあり、 プロジェクトで使用できる場合: projects/PROJECT_ID/reservations/example-reservation

GPU ドライバをインストールする

各 A3 High VM または Edge VM で、次の手順を完了します。

  1. 次のコマンドを実行して、NVIDIA GPU ドライバをインストールします。
    sudo cos-extensions install gpu -- --version=latest
  2. 次のコマンドを実行して、パスを再マウントします。
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia

NIC に GPU へのアクセス権を付与する

各 A3 High VM または Edge VM で、次の手順で NIC に GPU へのアクセス権を付与します。

  1. レジストリを構成します。
    • Container Registry を使用している場合は、次のコマンドを実行します。
      docker-credential-gcr configure-docker
    • Artifact Registry を使用している場合は、次のコマンドを実行します。
      docker-credential-gcr configure-docker --registries us-docker.pkg.dev
  2. 受信データパス マネージャーを構成します。マネージド サービスである GPUDirect-TCPX Receive Data Path Manager は、GPUDirect-TCPX を使用するアプリケーションとともに実行する必要があります。各 Container-Optimized OS VM でサービスを開始するには、次のコマンドを実行します。
    docker run --pull=always --rm \
        --name receive-datapath-manager \
        --detach \
        --privileged \
        --cap-add=NET_ADMIN --network=host \
        --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
        --device /dev/nvidia0:/dev/nvidia0 \
        --device /dev/nvidia1:/dev/nvidia1 \
        --device /dev/nvidia2:/dev/nvidia2 \
        --device /dev/nvidia3:/dev/nvidia3 \
        --device /dev/nvidia4:/dev/nvidia4 \
        --device /dev/nvidia5:/dev/nvidia5 \
        --device /dev/nvidia6:/dev/nvidia6 \
        --device /dev/nvidia7:/dev/nvidia7 \
        --device /dev/nvidia-uvm:/dev/nvidia-uvm \
        --device /dev/nvidiactl:/dev/nvidiactl \
        --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \
        --volume /run/tcpx:/run/tcpx \
        --entrypoint /tcpgpudmarxd/build/app/tcpgpudmarxd \
        us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd \
        --gpu_nic_preset a3vm --gpu_shmem_type fd --uds_path "/run/tcpx" --setup_param "--verbose 128 2 0"
       
  3. receive-datapath-manager コンテナが起動したことを確認します。
    docker container logs --follow receive-datapath-manager

    出力は次のようになります。

    I0000 00:00:1687813309.406064       1 rx_rule_manager.cc:174] Rx Rule Manager server(s) started...
  4. ログの表示を停止するには、ctrl-c を押します。
  5. IP テーブルルールをインストールします。
    sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
  6. NVIDIA Collective Communications Library(NCCL)と GPUDirect-TCPX プラグインを構成します。

    GPUDirect-TCPX サポート付きの NCCL を使用するには、特定の NCCL ライブラリ バージョンと GPUDirect-TCPX プラグイン バイナリの組み合わせが必要です。 Google Cloud には、この要件を満たすパッケージが用意されています。

    Google Cloud パッケージをインストールするには、次のコマンドを実行します。

    docker run --rm -v /var/lib:/var/lib us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx install --install-nccl
    sudo mount --bind /var/lib/tcpx /var/lib/tcpx
    sudo mount -o remount,exec /var/lib/tcpx

    このコマンドが成功すると、libnccl-net.so ファイルと libnccl.so ファイルが /var/lib/tcpx/lib64 ディレクトリに配置されます。

テストを実行する

各 A3 High VM または Edge VM で、次の手順で NCCL テストを実行します。

  1. コンテナを起動します。
    #!/bin/bash
    
    function run_tcpx_container() {
    docker run \
       -u 0 --network=host \
       --cap-add=IPC_LOCK \
       --userns=host \
       --volume /run/tcpx:/tmp \
       --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
       --volume /var/lib/tcpx/lib64:/usr/local/tcpx/lib64 \
       --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \
       --device /dev/nvidia0:/dev/nvidia0 \
       --device /dev/nvidia1:/dev/nvidia1 \
       --device /dev/nvidia2:/dev/nvidia2 \
       --device /dev/nvidia3:/dev/nvidia3 \
       --device /dev/nvidia4:/dev/nvidia4 \
       --device /dev/nvidia5:/dev/nvidia5 \
       --device /dev/nvidia6:/dev/nvidia6 \
       --device /dev/nvidia7:/dev/nvidia7 \
       --device /dev/nvidia-uvm:/dev/nvidia-uvm \
       --device /dev/nvidiactl:/dev/nvidiactl \
       --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/tcpx/lib64 \
       "$@"
    }
    

    上記のコマンドにより、次の処理が行われます。

    • NVIDIA デバイスを /dev からコンテナにマウントする
    • コンテナのネットワーク名前空間をホストに設定する
    • ホストするコンテナのユーザー名前空間を設定する
    • コンテナの機能に CAP_IPC_LOCK を追加する
    • ホストの /tmp をコンテナの /tmp にマウントする
    • NCCL と GPUDirect-TCPX NCCL プラグインのインストール パスをコンテナにマウントし、マウントされたパスを LD_LIBRARY_PATH に追加する
  2. コンテナを起動すると、NCCL を使用するアプリケーションをコンテナ内から実行できます。たとえば、run-allgather テストを実行するには、次の手順を完了します。
    1. 各 A3 High または Edge VM で、次のコマンドを実行します。
      $ run_tcpx_container -it --rm us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx shell
    2. 1 つの VM で次のコマンドを実行します。
      1. VM 間の接続を設定します。VM-0VM-1 は、各 VM の名前に置き換えます。
        /scripts/init_ssh.sh VM-0 VM-1
        pushd /scripts && /scripts/gen_hostfiles.sh VM-0 VM-1; popd

        これにより、各 VM に /scripts/hostfiles2 ディレクトリが作成されます。

      2. スクリプトを実行します。
        /scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2

    run-allgather スクリプトの実行には約 2 分かかります。ログの最後に、all-gather の結果が表示されます。

    NCCL ログに次の行がある場合は、GPUDirect-TCPX が正常に初期化されたことを確認できます。

    NCCL INFO NET/GPUDirectTCPX ver. 3.1.1.
    

マルチインスタンス GPU

マルチインスタンス GPU は、単一の NVIDIA H100 GPU を、同じ VM 内にある最大 7 つの独立した GPU インスタンスに分割します。これらは、それぞれ独自のメモリ、キャッシュ、ストリーミング マルチプロセッサを備え、同時に実行されます。この設定により、NVIDIA H100 GPU は、以前の GPU モデルと比較して最大 7 倍高い品質保証(QoS)を提供できます。

最大 7 つのマルチインスタンス GPU を作成できます。H100 80 GB GPU では、各マルチインスタンス GPU に 10 GB のメモリが割り当てられます。

複数インスタンス GPU の使用について詳しくは、NVIDIA マルチインスタンス GPU ユーザーガイドをご覧ください。

複数インスタンス GPU を作成する手順は次のとおりです。

  1. A3 Mega、A3 High、または A3 Edge インスタンスを作成します。

  2. GPU ドライバをインストールします。

  3. MIG モードを有効にします。手順については、MIG を有効にするをご覧ください。

  4. GPU パーティションを構成します。手順については、GPU パーティションを操作するをご覧ください。