はじめに:ラックスケールハードウェアとスケジューラのギャップ

NVIDIA GB200 NVL72およびGB300 NVL72システムは、1ラックに18のコンピュートトレイが高密度に実装されたラックスケールスーパーコンピュータです。NVLinkスイッチで接続されたGPUファブリック、ノード間共有メモリを可能にするIMEXドメインなど、ハードウェア性能は非常に魅力的ですが、実際の運用者にとっての課題は「これをどうやってスケジューラに認識させるか」にあります。

従来のSlurmやKubernetesはGPUをフラットなプールとして扱います。同じNVLinkドメインに属するGPU同士が通信することで初めて性能が最大化されるという事実を、スケジューラは知りません。本記事では、NVIDIA Mission Control、Slurm topology/blockプラグイン、Kubernetes ComputeDomain、NVIDIA Run:aiがこの問題をどのように解決するのか、実際のコードを交えて解説します。

参考資料: 本記事はNVIDIA公式ブログの内容をベースに、実務視点で再構成しました。

NVIDIA Blackwell rack-scale supercomputer with NVLink fabric topology diagram Programming Illustration

核となる概念:Cluster UUIDとClique ID

NVLinkトポロジをスケジューラが理解するには、ハードウェア情報をソフトウェアが読み取れる識別子に抽象化する必要があります。NVIDIAはこのために2つの識別子を提供しています。

  • Cluster UUID:NVLinkドメイン(物理的に同じラックに属するか)を示します。同じNVL72ラック内の全GPUは同一のCluster UUIDを持ちます。
  • Clique ID:NVLinkパーティション(論理分割)を示します。同じラック内でもGPUグループを分割するとClique IDが異なります。

これらの識別子は、Slurmのtopology/blockプラグイン、KubernetesのComputeDomain、Run:aiの自動ラベリングにおいて中核的な役割を果たします。

Slurmでの活用

SlurmでNVLinkパーティションをブロックとしてマッピングすると、同じNVLinkドメイン内にのみジョブが配置されるように強制できます。

# slurm.conf 設定例(NVLinkパーティションをブロックとして定義)
# 各ラックを1ブロック、またはラック内パーティションを複数ブロックとして構成
# 例: 2台のNVL72ラック → 2ブロック

# topology.conf
SwitchName=rack0 Nodes=node[0-17] Weight=1
SwitchName=rack1 Nodes=node[18-35] Weight=10

# slurm.conf
TopologyPlugin=topology/block
TopologyParam=TopoOptional

この設定により、Slurmはデフォルトで同じブロック(同じNVLinkドメイン)内にジョブを配置し、ブロックをまたぐ必要がある場合のみWeightを考慮します。

IMEX管理:Slurmにおけるper-job分離

IMEXはマルチノードCUDAジョブが共有メモリモデルを利用できるようにするシステムレベルデーモンです。Mission ControlはIMEXがジョブに参加するコンピュートトレイでのみ実行され、ジョブ終了後にクリーンアップされることを保証します。

# Mission Control CLIによるIMEXドメイン作成例
# (実際のコマンドはNVIDIA Mission Control Administrator Guide参照)
mc imex create --domain my-job-domain --trays tray-0,tray-1,tray-2
# Slurm prolog/epilogスクリプトで呼び出し、ジョブ単位で分離

これにより、異なるジョブ間でIMEXチャネルが干渉せず、安定性が大幅に向上します。

AI workload scheduling flow from Slurm partition to NVLink domain placement Algorithm Concept Visual

Kubernetes + Run:ai:ComputeDomainでNVLinkを認識する

KubernetesはデフォルトでNVLinkを認識しません。NVIDIA DRA(Dynamic Resource Allocation)ドライバがこのギャップを埋めます。ComputeDomain CRDを使用することで、NVLink/MNNVLドメインをKubernetesリソースとして表現できます。

# ComputeDomainリソース例(NVLinkドメインに18ノード割り当て)
apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
  name: compute-domain
spec:
  numNodes: 18
  channel:
    resourceClaimTemplate:
      name: compute-domain-resource-claim
# ワークロードデプロイ時にComputeDomainを接続
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-workload
  labels:
    app: test-workload
spec:
  replicas: 18
  selector:
    matchLabels:
      app: test-workload
  template:
    metadata:
      labels:
        app: test-workload
    spec:
      containers:
      - name: ctr
        image: ubuntu:22.04
        command: ["test-workload"]
        resources:
          limits:
            nvidia.com/gpu: 4
          claims:
          - name: compute-domain
      resourceClaims:
      - name: compute-domain
        resourceClaimTemplateName: compute-domain-resource-claim

NVIDIA Run:aiはこのComputeDomainを自動生成し、ノードラベリングを通じてNVLinkドメインメンバーシップを管理します。ユーザーは単にGPU数をリクエストするだけで、Run:aiが最適なノードに配置します。

Topograph:トポロジ自動検出

手動でNVLinkドメインを定義することは大規模環境ではスケーラブルではありません。NVIDIAのオープンソースツール Topograph がこの問題を解決します。Topographはノードメタデータを収集し、NVLinkドメイン、ラック境界、ネットワーク階層を自動検出し、スケジューラが利用可能なAPIを提供します。

# Topograph CLI例(仮想)
topograph discover --cluster my-cluster --output topology.json
# 出力: 各ノードのCluster UUID、Clique ID、スイッチ接続情報

この情報はSlurmのtopology.conf生成やKubernetesノードラベリングに自動的に活用されます。

Kubernetes ComputeDomain resource claim YAML example for multi-node GPU training Development Concept Image

国内AIインフラ環境での適用コンテクスト

国内の大企業AIセンターやHPCクラスタを運用されている方なら、「ハードウェアは良いのにスケジューラが追いつかない」という話をよく聞くのではないでしょうか。特にSlurmを使用する研究環境では、--gres=gpu:8のような単純なリクエストが、実際には異なるNVLinkドメインにまたがってGPUを割り当て、性能が半減してしまうケースが少なくありません。

本記事で紹介したtopology/blockプラグインとComputeDomain方式を導入することで:

  • GPU割り当ての性能予測可能性が向上します。
  • ユーザー(研究者/エンジニア)がNVLinkトポロジを知らなくても最適配置が保証されます。
  • クラスタ全体のGPU利用率が向上します。

本技術の限界と注意点

  • 初期設定の複雑さ:Mission Control、Topograph、DRAドライバのインストールと連携には相応のエンジニアリング時間が必要です。特に既存のSlurmクラスタにtopology/blockを導入すると、既存ジョブキューの動作が変わる可能性があるため、十分なテストが必須です。
  • ベンダー依存:NVIDIA専用ハードウェア(NVLink、IMEX)に依存するため、AMDやIntel GPUクラスタには適用できません。
  • オーバーヘッド:ジョブごとにComputeDomainを作成/削除するとetcdに負荷がかかる可能性があります。大規模クラスタ(数千ノード)ではDRAリソースクレーム管理に注意が必要です。

あわせて読みたい記事

次のステップとしての学習方向

  1. Mission Controlの実践:NVIDIA LaunchPadでGrace Blackwell NVL72環境を体験してみてください。
  2. Topographへのオープンソースコントリビューション:GitHubでTopographリポジトリをフォークし、ご自身のクラスタに合わせて拡張してみてください。
  3. Slurm topology/blockの深掘り:Slurm公式ドキュメントのtopology.conf作成ガイドを参照し、さまざまなトポロジパターンを実験してみてください。

AIインフラ運用者として、ハードウェア性能を最大限引き出すことは、単にGPUの数を増やすことではなく、スケジューラとハードウェアが対話できるようにすることにかかっています。本記事がその第一歩となれば幸いです。

本コンテンツは、信頼性の高い情報源をもとにAIツールを活用して作成され、編集者によるレビューを経て公開されています。専門家によるアドバイスの代替となるものではありません。