

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SageMaker HyperPod での UltraServer の使用
<a name="sagemaker-hyperpod-ultraserver"></a>

SageMaker HyperPod は Ultraserver をサポートして、AI および機械学習ワークロード向けに高パフォーマンス GPU コンピューティング機能を提供します。NVIDIA GB200 および NVL72 アーキテクチャを基盤とするこれらの Ultraserver は、デュアルラック構成で 18 基の GB200 インスタンス (合計 72 基の B200 GPU) に NVLink 接続を提供します。この NVLink ファブリックにより、ワークロードは GPU 通信を使用できるようになります。これにより、個別のインスタンスで可能な範囲を超えて、使用可能な GPU キャパシティとアドレス指定可能なメモリが増加し、より複雑でリソースを大量に消費する AI モデルをサポートできます。NVLink 接続は、同一ラック内のインスタンス間でセキュアな GPU ファブリック接続のための低レベルの構成を処理 NVIDIA IMEX テクノロジーが基盤となります。

HyperPod を使用すると、インテリジェントなトポロジー認識と自動設定により、これらの GPU クラスターのデプロイと管理を簡素化します。プラットフォームは、ノードの物理的な場所とキャパシティブロック情報を自動的に検出してラベリングします。これにより、分散ワークロードのトポロジー認識スケジューリングがサポートされます。HyperPod は複雑な IMEX 設定要件を抽象化するため、低レベルの GPU ファブリック設定にわずらわされることなく、ワークロードのデプロイに集中できます。セルフマネージドノードと EKS マネージドノードグループの両方を含む、柔軟なデプロイオプションを選択できます。Amazon EKS は、事前設定された NVIDIA ドライバー、Fabric Manager、IMEX ドライバーなど、シームレスな運用に必要なすべてのシステムソフトウェアを含む最適化された AMI を提供します。

この統合には、標準の Kubernetes トポロジーラベルを使用しており、NVL72 ドメイン全体にわたって分散ワークロードが最適にスケジュールされるようにするポッド配置機能が含まれています。組み込みのモニタリング機能と自動リカバリ機能により運用サポートが提供され、AMI ヘルスエージェントはカーネルログから GPU エラーを検出し、問題を自動的に修復するか、マネージドノードグループ内の障害のあるノードを置き換えます。GPU スケール、インテリジェントなワークロード配置、自動オペレーションの組み合わせにより、インフラストラクチャの複雑さにわずらわされることなく、AI/ML イノベーションに集中しながら、GPU への投資から最大限のパフォーマンスを実現できます。

HyperPod クラスターで UltraServer を設定するには、次の手順を参照してください。

1. 「[ EKS ベースの HyperPod クラスター](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-operate-console-ui-create-cluster.html)」を作成します。インスタンスグループを選択する際は、必ず UltraServer を選択します。

1. クラスターを作成したら、次のコマンドを使用してオペレーションプラグインをインストールします。

   NVIDIA デバイスプラグイン v0.17.2

   ```
   kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.2/deployments/static/nvidia-device-plugin.yml
   ```

   FD DaemonSet v0.17.3

   ```
   kubectl apply -k "https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref=v0.17.3"
   ```

   GPU 機能検出

   ```
   kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.2/deployments/static/gpu-feature-discovery-daemonset.yaml
   ```

これで、ジョブを実行できるようになりました。次の例は、ドメインを作成し、IMEX ドメインを設定し、チャネル割り当てを有効にする方法を示しています。この手順で、NCCL 通信のチャネルをプロビジョンするポッドを作成することもできます。

1. Kubectl で使用するリソース仕様ファイルを作成します。

   ```
   cat <<EOF > imex-channel-injection.yaml
   ---
   apiVersion: resource.nvidia.com/v1beta1
   kind: ComputeDomain
   metadata:
     name: imex-channel-injection
   spec:
     numNodes: 1
     channel:
       resourceClaimTemplate:
         name: imex-channel-0
   ---
   apiVersion: v1
   kind: Pod
   metadata:
     name: imex-channel-injection
   spec:
     affinity:
       nodeAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
           nodeSelectorTerms:
           - matchExpressions:
             - key: nvidia.com/gpu.clique
               operator: Exists
             - key: topology.k8s.aws/ultraserver-id
               operator: In
               values: 
               - <{{UltraServer-ID}}>
     containers:
     - name: ctr
       image: ubuntu:22.04
       command: ["bash", "-c"]
       args: ["ls -la /dev/nvidia-caps-imex-channels; trap 'exit 0' TERM; sleep 9999 & wait"]
       resources:
         claims:
         - name: imex-channel-0
     resourceClaims:
     - name: imex-channel-0
       resourceClaimTemplateName: imex-channel-0
   EOF
   ```

1. 作成した設定を適用します。

   ```
   kubectl apply -f imex-channel-injection.yaml
   ```

1. `get pods` コマンドを実行して、サービスが作成されたことを検証します。

   ```
   kubectl get pods
   kubectl get pods -n nvidia-dra-driver-gpu -l resource.nvidia.com/computeDomain
   ```

1. ポッドのログをチェックして、通信チャネルが割り当てられているかどうかの確認もできます。

   ```
   kubectl logs imex-channel-injection
   ```

   ```
   total 0
   drwxr-xr-x 2 root root     60 Feb 19 10:43 .
   drwxr-xr-x 6 root root    380 Feb 19 10:43 ..
   crw-rw-rw- 1 root root 507, 0 Feb 19 10:43 channel0
   ```

1. ログをチェックして、自動 IMEX 設定が割り当てられたチャネルで実行されていることを確認することもできます。

   ```
   kubectl logs -n nvidia-dra-driver-gpu -l resource.nvidia.com/computeDomain --tail=-1
   /etc/nvidia-imex/nodes_config.cfg:
   ```

   ```
   IMEX Log initializing at: 8/8/2025 14:23:12.081
   [Aug 8 2025 14:23:12] [INFO] [tid 39] IMEX version 570.124.06 is running with the following configuration options
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Logging level = 4
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Logging file name/path = /var/log/nvidia-imex.log
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Append to log file = 0
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Max Log file size = 1024 (MBs)
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Use Syslog file = 0
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] IMEX Library communication bind interface =
   
   [JAug 8 2025 14:23:12] [INFO] [tid 39] IMEX library communication bind port = 50000
   
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Identified this node as ID 0, using bind IP of '10.115.131.8', and network interface of enP5p9s0
   [Aug 8 2025 14:23:120] [INFO] [tid 39] nvidia-imex persistence file /var/run/nvidia-imex/persist.dat does not exist.  Assuming no previous importers.
   [Aug 8 2025 14:23:12] [INFO] [tid 39] NvGpu Library version matched with GPU Driver version
   [Aug 8 2025 14:23:12] [INFO] [tid 63] Started processing of incoming messages.
   [Aug 8 2025 14:23:12] [INFO] [tid 64] Started processing of incoming messages.
   [Aug 8 2025 14:23:12] [INFO] [tid 65] Started processing of incoming messages.
   [Aug 8 2025 14:23:12] [INFO] [tid 39] Creating gRPC channels to all peers (nPeers = 1).
   [Aug 8 2025 14:23:12] [INFO] [tid 66] Started processing of incoming messages.
   [Aug 8 2025 14:23:12] [INFO] [tid 39] IMEX_WAIT_FOR_QUORUM != FULL, continuing initialization without waiting for connections to all nodes.
   [Aug 8 2025 14:23:12] [INFO] [tid 67] Connection established to node 0 with ip address 10.115.131.8. Number of times connected: 1
   [Aug 8 2025 14:23:12] [INFO] [tid 39] GPU event successfully subscribed
   ```

1. すべてを確認したら、ワークロードを削除し、設定を削除します。

   ```
   kubectl delete -f imex-channel-injection.yaml
   ```