TT Lab
はじめる
学ぶ 学習パス コース

HPCとSlurm

GPUをGRESとして定義する

TT Labで続きを見る

目標

slurm.confとgres.confを一緒に作成してGPUをGRESとして定義し、2つのファイルの個数の一致を検証します。

なぜ重要なのか

GRESの設定ミスの第1位は、slurm.confのGPUの個数とgres.confのデバイスの個数の不一致です。slurm.confにgpu:a100:8と書いたのに、gres.confがFile=/dev/nvidia[0-3]だと4個しかなく、slurmdがcount reported lower than configuredを残してノードをDRAINにします。この検証は、デプロイ前にスクリプトで自動化すべき代表的な項目です。

また、Cores=でNUMAアフィニティを伝えると、SlurmがGPUとCPUを同じソケットに配置して、PCIeの往復を減らします。大規模な学習では、この差が数パーセントになります。

前のラボ(slurm-conf)で作成した/etc/slurm/slurm.confを引き続き使います。

ステップ

  1. /etc/slurm/slurm.confにGresTypes=gpuを追加してください。
  2. 3台のノードのNodeName行にGres=gpu:a100:4を追加してください。
  3. /etc/slurm/gres.confを作成してください。3台のノードそれぞれについて、NodeName=、Name=gpu、Type=a100、File=を含む行が必要で、Fileはデバイス4個を指す必要があります。
  4. gpu-node01については、デバイスを1つずつ4行に分けて書き、/dev/nvidia0と/dev/nvidia1はCores=0-15、/dev/nvidia2と/dev/nvidia3はCores=16-31に指定してください。(残りの2台のノードは、ステップ3の範囲表記のままでかまいません。)
  5. /etc/slurm/slurm.confにGPU専用のパーティションgpuを追加してください。Nodes=は3台すべて、MaxTime=72:00:00、State=UPです。
  6. /root/slurm/gres-check.txtを次の2行で作成してください。値は、設定ファイルをパースして得た実際の個数です。 SLURM_CONF_GPUS=<slurm.conf 의 Gres 로 선언된 GPU 총 개수> / GRES_CONF_DEVICES=<gres.conf 의 File 이 가리키는 장치 총 개수>(プレースホルダーは、slurm.confのGresで宣言されたGPUの総数と、gres.confのFileが指すデバイスの総数です) 2つの値は同じである必要があります。
  7. /root/slurm/autodetect.txtを次の3行で作成してください。 AUTODETECT=nvml / NEEDS=nvml-library / MANUAL_PRO=reproducible
  8. /root/slurm/gres-report.txtを次の4行で作成してください。 GRESTYPES=gpu / NODES=3 / GPUS_PER_NODE=4 / PARTITIONS=<slurm.conf 의 PartitionName 줄 수>(プレースホルダーは、slurm.confのPartitionName行の数です)

参考

GRESタイプを宣言する

/etc/slurm/slurm.confにGresTypes=gpuを追加してください。

slurm.confの最上部の領域に1行あれば十分です。複数のタイプはカンマで区切ります。

ノードごとのGPUを宣言する

3台のノードのNodeName行にGres=gpu:a100:4を追加してください。

NodeName行にGres=を追加します。形式は名前:タイプ:個数です。

gres.confを作成する

/etc/slurm/gres.confを作成してください。3台のノードそれぞれについて、NodeName=、Name=gpu、Type=a100、File=を含む行が必要で、Fileはデバイス4個を指す必要があります。

ノードごとに1行ずつ書くことも、デバイスごとに1行ずつ書くこともできます。範囲表記を使うと簡潔です。

NUMAアフィニティを記述する

gpu-node01については、デバイスを1つずつ4行に分けて書き、/dev/nvidia0と/dev/nvidia1はCores=0-15、/dev/nvidia2と/dev/nvidia3はCores=16-31に指定してください。(残りの2台のノードは、ステップ3の範囲表記のままでかまいません。)

各GPUに近いコアの範囲を書きます。デバイスを半分ずつに分けて、2つのソケットに振り分けてください。

GPU専用のパーティション

/etc/slurm/slurm.confにGPU専用のパーティションgpuを追加してください。Nodes=は3台すべて、MaxTime=72:00:00、State=UPです。

既存のパーティションとは別に、もう1つ定義します。最大時間は長めにしてください。

個数の一致を検証する

/root/slurm/gres-check.txtを次の2行で作成してください。値は、設定ファイルをパースして得た実際の個数です。 SLURM_CONF_GPUS=<slurm.conf 의 Gres 로 선언된 GPU 총 개수> / GRES_CONF_DEVICES=<gres.conf 의 File 이 가리키는 장치 총 개수>(プレースホルダーは、slurm.confのGresで宣言されたGPUの総数と、gres.confのFileが指すデバイスの総数です) 2つの値は同じである必要があります。

slurm.confのGresの個数の合計と、gres.confのFileの範囲から出てくるデバイス数を比較してください。

AutoDetectの比較メモ

/root/slurm/autodetect.txtを次の3行で作成してください。 AUTODETECT=nvml / NEEDS=nvml-library / MANUAL_PRO=reproducible

自動検出と手動定義のトレードオフを、キー=値の形でまとめます。

GRES設計レポート

/root/slurm/gres-report.txtを次の4行で作成してください。 GRESTYPES=gpu / NODES=3 / GPUS_PER_NODE=4 / PARTITIONS=<slurm.conf 의 PartitionName 줄 수>(プレースホルダーは、slurm.confのPartitionName行の数です)

値は、作成した設定をパースして得る必要があります。