この記事でわかること
- Slurmとは何か(ジョブスケジューラーとは?)
- なぜGPUクラスターにSlurmが必要なのか
- Slurmを使うと何が変わるのか
- 基本的な用語の意味(ノード・ジョブ・パーティション)
この記事はこんな人向け
- 「Slurm」という単語を初めて聞いた
- GPUサーバーを複数人で使う予定があるが、管理方法がわからない
- HPC・AIインフラの勉強を始めたばかり
1. そもそもSlurmって何?
Slurm(スラーム)は、複数のサーバーにまたがって「ジョブ(処理)」を管理・実行するためのソフトウェアです。
正式名称は Slurm Workload Manager といい、大学・研究機関・クラウドのHPC環境で世界的に広く使われています。
ざっくり言うと、「GPUサーバーの順番待ち管理システム」です。
2. Slurmがないと何が困るのか
GPUサーバーが1台だけで、使う人も1人なら特に困りません。
問題は複数人が同じGPUサーバーを使うときです。
たとえば、こんな状況を想像してください。
- AさんがGPU 8枚を使って学習ジョブを走らせている
- BさんもGPU 8枚を使いたいが、Aさんがいつ終わるかわからない
- CさんはGPU 2枚だけあれば動く軽いジョブを持っている
Slurmなしでこれを管理しようとすると:
- 「今GPUは空いてますか?」とTeams or Slackで聞く
- 空いてなければ手動で待つ
- 誰かが使っているのを知らずに上書きしてジョブが壊れる
これが10人・20人規模になると完全に破綻します。
3. Slurmがあると何が変わるのか
Slurmを入れると、以下が自動で管理されます。
- 順番待ちの自動管理:先に投入したジョブから順番に実行される
- リソースの自動割り当て:「GPU 2枚使いたい」と指定すると、空いているノードに自動で割り振られる
- 実行履歴の記録:誰がいつ何のジョブを何時間回したかが記録される
- 同時実行の制御:GPUが足りなければキューに並んで待つ
Slurmは「順番を守って、リソースを無駄なく使う」ための交通整理係です。
4. 基本用語を押さえる
Slurmを使う上で最低限知っておくべき用語を整理します。
ジョブ(Job)
Slurmに投入する「処理の単位」です。
「このスクリプトをGPU 4枚で実行してくれ」という命令1つがジョブです。
ノード(Node)
実際に処理を実行するサーバーのことです。
今回の構成では、H200を8枚搭載したBareMetalサーバー1台が「1ノード」です。
パーティション(Partition)
ノードをグループ分けしたものです。
たとえば「学習用ノード群」「推論用ノード群」のように用途別に分けることができます。
キュー(Queue)
実行待ちのジョブが並ぶ列です。
GPUが全部埋まっているときに投入したジョブはキューに入り、空き次第自動で実行されます。
slurmctld
Slurmの司令塔となるデーモンです。コントローラーノードで動きます。
slurmd
各ノードで動くデーモンです。slurmctldから命令を受けてジョブを実行します。
munge
ノード間の認証を担うソフトウェアです。
全ノードで同じ鍵を共有することで、なりすましを防ぎます。
5. ジョブ投入の流れ
実際にSlurmを使うときの流れはこうなります。
ユーザーから見ると、srun や sbatch コマンドでジョブを投入するだけです。
あとはSlurmが空きを見つけて自動で実行してくれます。
# GPU 1枚を使うジョブの投入例
srun --gres=gpu:1 python train.py
# バッチジョブとして投入(バックグラウンドで実行)
sbatch --gres=gpu:8 train.sh
# 現在のキューを確認
squeue
6. 今回の構成まとめ
| 項目 | 内容 |
|---|---|
| クラウド基盤 | FPT CLOUD |
| GPUノード | H200 BareMetal |
| GPU | NVIDIA H200 × 8枚 / ノード |
| ノード間ネットワーク | InfiniBand |
| ジョブスケジューラー | Slurm |
まとめ
- Slurmは「複数人・複数ジョブのGPUリソース管理」を自動化するソフトウェア
- 「順番待ち・リソース割り当て・実行履歴管理」が主な役割
- 規模が大きくなるほど、Slurmなしの運用は破綻する