Slurmジョブスクリプトを自動生成する無料ツール|CPU・GPUの指定から投入まで
CPU・メモリ・GPU・実行時間からSlurmのジョブスクリプトと投入手順を自動生成。対話モードの使い方と、H100・A100で実行した検証結果を動画付きで解説します。
無料スクリプト / Slurm / CPU・GPUジョブ
Slurmを導入したあと、利用者が最初につまずきやすいのが「計算を投入するジョブスクリプト」です。CPU数、メモリ、GPU枚数、実行時間。毎回同じ項目を書き直すうちに、指定を忘れたり、別の環境の例をそのままコピーしたりしがちです。
そこで、質問に答えるだけでSlurm用のjob.shを作れる無料ツール「ServerGear Slurm Job Builder 0.1.0」を用意しました。繰り返し利用する方向けに、コマンド形式での生成にも対応しています。
H100 PCIe×2とA100 80GB PCIe×4の実機で、生成したジョブを実際に投入しました。CPU計算、GPU1枚・全枚数の小さなCUDA計算、プログラムが失敗した場合の終了コードまで確認しています。
メールアドレスの確認と、お知らせ配信への同意が必要です。スクリプトの更新・GPU/HPCの技術情報と、関連製品・構築サービスをご案内します。配信はいつでも停止できます。
約3分の動画で流れを見る
動画は図解・コマンド例・実機検証記録を使った解説です。操作画面の連続録画ではありません。ナレーションにはAI音声(OpenAI Marin)を使用しています。以下では、コピーして使えるコマンドと確認のポイントを説明します。
このツールでできること
CPU数・ホストメモリ・GPU枚数・最大実行時間・実行コマンドを指定すると、新しいフォルダーへ次のファイルを保存します。
| ファイル | 役割 |
|---|---|
| job.sh | 内容を確認してsbatchへ渡すジョブスクリプト |
| job.json | 指定した条件とコマンド引数の記録 |
| HOWTO.txt | 確認・投入・ログの見方 |
| SHA256SUMS | 生成ファイルのチェックサム |
生成に必要なのはPython 3.10以上です。追加Pythonパッケージもsudoも不要で、SlurmがないMacでも作成できます。生成時に入力コマンドを実行することはなく、ジョブの自動投入やSlurm設定の変更も行いません。
初版は1ノード・1タスクのCPU/GPUジョブ向けです。MPI、複数ノード、ジョブ配列、DDPの自動構成は対象外です。実際の計算には、利用できるSlurm環境と、計算ノード上のプログラム・入力データが必要です。
1. まずは対話モードで作る
ダウンロードページからZIPを取得して展開します。Ubuntuでは、配布ファイルの整合性を確認してから始められます。
sha256sum -c SHA256SUMS
python3 sg-slurm-job.py wizard
種類、ジョブ名、パーティション、CPU数、メモリ、最大時間、GPU枚数、作業場所、実行コマンド、保存先などを順に入力します。GPU種別・アカウント・QoSは、環境で必要な場合に指定します。最後に内容を確認してyesを入力すると保存します。
最初は「CPU/Python等のコマンド」を選び、小さな処理から試すと確認しやすくなります。生成先は新しいフォルダーを指定してください。既存ファイルやフォルダーを上書きする機能はありません。
パーティション名を確認する
Slurmクライアントのあるホストでは、次のコマンドで情報を表示できます。
python3 sg-slurm-job.py inspect
表示するのは、パーティション・稼働状態・最大時間・ノードあたりのCPU/メモリ/GRESなどです。空き資源や投入権限を保証するものではありません。
今回のH100機ではcompute、A100の既存環境ではallを利用しました。以下の例のcomputeは、自分の環境に合わせて置き換えてください。アカウントやQoSが必要な場合は、管理者の案内に従います。
2. コマンド形式でCPUジョブを生成する
繰り返し同じ条件を使う場合は、generateが便利です。まずは1から1000までの整数和を計算する小さなジョブを作ります。
python3 sg-slurm-job.py generate \
--name cpu-demo --partition compute \
--cpus 2 --mem 1G --time 00:01:00 \
--output cpu-job -- python3 -c 'print(sum(range(1001)))'
CPU2・ホストメモリ1G・最大1分を要求し、cpu-job/job.shなどを生成します。期待する出力は500500です。CPUを2つ要求しても、この直列のPythonプログラムそのものを自動的に並列化するわけではありません。
生成されるジョブは、#SBATCHの資源要求に加え、srunで実行コマンドを起動します。割り当てCPU数に合わせてOMP/OpenBLAS/MKL/NumExprのスレッド上限を設定し、コマンドの終了コードをSlurmへ伝えます。
3. GPU1枚を使うPythonジョブを作る
python3 sg-slurm-job.py generate \
--name train --partition compute \
--cpus 4 --mem 16G --gpus 1 --time 02:00:00 \
--output train-job -- /home/yourname/venv/bin/python train.py --epochs 10
この例はCPU4・ホストメモリ16G・GPU1枚・最大2時間です。/home/yourname/venv/bin/pythonは計算ノード上の実在するPythonの絶対パスに、train.pyは自分のプログラムに置き換えます。学習環境・PyTorch・プログラムを自動でインストールする機能ではありません。

--memはGPUのVRAM容量ではありません。また、--gpus 2に変更しても、プログラムが自動的に2GPUへ対応するわけではありません。CPU数が物理コアを表すか論理CPUを表すかも、Slurmの設定によります。
GPU種別が必要なら--gpu-type h100などを追加できます。これは製品名の自動判定ではなく、管理者が設定したGRES名を指定する機能です。必要な環境では--account lab --qos normalも追加します。
module・conda・venvのactivateなどを自動実行する機能はありません。初期化や複数コマンドが必要なら、自分で確認したBashファイルへまとめ、-- bash my-task.shのように指定できます。対話入力の|や>、$HOMEなどはシェルの演算や変数展開として扱いません。
4. 内容を確認し、自分で投入する
生成したjob.shを開き、資源要求とコマンドを確認します。計算プログラムや入力データを置いた作業ディレクトリーへ移動して、一般ユーザーで以下を実行します。
# /absolute/path/cpu-jobは実際の生成先の絶対パスに置換
umask 077
bash -n /absolute/path/cpu-job/job.sh
sbatch --test-only /absolute/path/cpu-job/job.sh
sbatch /absolute/path/cpu-job/job.sh
# 表示されたジョブ番号を指定
squeue -j JOB_ID
bash -nはBashの構文を確認します。プログラムやデータの存在までは確認しません。sbatch --test-onlyはジョブを投入せずにSlurmへ資源要求を問い合わせますが、実際の計算成功までは保証しません。
相対パスの起点は、生成したフォルダーではなく、sbatchを実行した場所です。 既定の作業場所は.で、--workdirで変更できます。Macで生成する場合も、実行時の計算ノード側のパスを指定してください。
標準出力はsg-cpu-demo-JOB_ID.out、標準エラーは.errとして投入場所に保存されます。umask 077は、Slurmがログを作る前のsbatch実行前に指定します。会計が有効な環境ならsacct -j JOB_IDでも結果を確認できます。
投入元のSBATCH_*・SRUN_*環境変数、sbatch追加オプション、サイトの受付プラグインによって、実際の要求条件が変わる場合があります。生成ファイルだけでクラスタ全体の動作を固定するものではありません。
5. GPUの小さな計算を確認する
自分の学習コードを動かす前に、GPUを割り当てたジョブが動くかを確認したい場合は、同梱のテンプレートを使えます。
python3 sg-slurm-job.py generate \
--name gpu-check --partition compute --gpus 1 \
--mem 1G --time 00:01:00 --template gpu-check \
--output gpu-check-job
生成後は同じように内容・構文・資源要求を確認し、自分でsbatchへ投入します。正常なNVIDIAドライバーとPython3が必要ですが、この小さな確認にCUDA ToolkitやPyTorchのインストールは不要です。確認コードはjob.shに埋め込みます。
CUDAが認識するGPU数を確認し、各GPUで42 + 1 = 43を計算します。認識台数・計算結果が想定と違えば失敗します。さらに/dev/nvidiaNを開ける台数を観察し、要求枚数と違う場合は警告を出します。性能測定・長時間負荷試験・GPU間通信の試験ではありません。
実機検証:H100とA100で何を確認したか
検証日は2026年10月25日です。既存のSlurm設定を変更せず、通常ユーザーで生成したジョブを投入しました。
| 項目 | H100 PCIe×2 | A100 80GB PCIe×4 |
|---|---|---|
| OS | Ubuntu 26.04.1 | Ubuntu 24.04.4 |
| Slurm | 25.11.2 | 23.11.4 |
| NVIDIAドライバー | 595.91.07 | 595.99.02 |
| パーティション | compute | all |
| CPU計算 | 500500 / COMPLETED 0:0 | 500500 / COMPLETED 0:0 |
| GPU1枚指定 | CUDA計算43 | CUDA計算43 |
| 全GPU指定 | 2枚とも43 | 4枚とも43 |
| 意図的に終了コード7 | FAILED 7:0 | FAILED 7:0 |
最後のFAILEDは、プログラムの失敗がSlurmへ正しく伝わることを確認するために、意図的に起こした結果です。全ジョブでbash -nとsbatch --test-onlyも成功しました。

A100で分かった、割り当てと隔離の違い
A100の既存環境では、1GPU指定時にCUDAから見えるGPUは1枚でしたが、開ける物理GPUデバイスは4枚ありました。既存のTaskPluginは(null)です。ツールはこの違いを警告として示し、Slurm設定には手を加えていません。
H100の1GPU指定では、開ける物理GPUデバイスも1枚でした。この環境はtask/cgroup,task/affinityを使用しています。ただし、台数が一致するだけで全条件の隔離を証明できるわけではなく、特に全GPUを要求した場合の一致は隔離の確認にはなりません。
共有サーバーでは、ジョブの要求だけでなく、管理者側のGPUアクセス制限も確認してください。CPUジョブにGPUを要求しないことと、GPUデバイスへのアクセスを禁止することも別です。
資源指定、引数の引用、上書き拒否、生成時にコマンドを実行しないことなど、22件のオフライン試験も実施しました。配布ページの検証条件と、ZIP内のREADME・検証記録に範囲を記載しています。H200・B200・RTX・MIG・Windowsは今回実機検証していません。
Slurmの導入から、利用・構築の相談まで
まだSlurmを導入していない方には、Slurm Starterも公開しています。単一サーバーへSlurmを導入し、その次に本ツールでジョブを作る、という順番で利用できます。
本ツールの使い方やエラーは、無料スクリプト相談窓口へお寄せください。AIが一次対応し、確認方法や追加質問をご案内します。ツール名・版、Slurmの版、要求資源、困った段階、必要なエラー部分をお知らせいただくと確認が進めやすくなります。job.shやjob.jsonにはコマンドやパスが含まれるため、秘密情報を除いた必要部分だけを本文へ貼ってください。
共有GPUサーバーの隔離設計、複数ノードの構築、用途に合うGPU・メモリ・ストレージの選定は、ServerGearの構築・購入相談をご利用ください。
仕様の参考:Slurm sbatch公式資料、srun公式資料、GPU GRES、cgroup。本記事の実測値はServerGearの検証環境での結果です。