土田 裕登
Slurmの設定memo

Slurmの設定memo

2024.3.10

内容

- 用語の整理

- login-node への入り方

- module

- Slurmコマンド

- sbatchジョブの投げ方

- srun の使い方


Slurmとは

Slurmは、計算機資源(CPU・GPU・メモリ・ノード)を複数人で共有するためのジョブ管理システム
ユーザーは「このくらいの資源を、これくらいの時間使いたい」という要求をジョブとして投入し、Slurmが空き状況に応じて実行

よく出る用語

  • ノード(node):計算機1台(CPU/GPU搭載マシン)
  • パーティション(partition):ノードのグループ(キューのようなもの)
  • ジョブ(job):実行単位
  • ジョブステップ(step):ジョブ内での実行単位(srunなど)
  • アロケーション(allocation):資源が確保された状態(対話ジョブなど)

login-node

  • ユーザー名・パスワードを入力

    ssh [LDAPユーザー名]@10.226.47.95
    
  • ホームディレクトリは /home/[LDAPユーザー名] になっていることが多い

  • login-node:編集、軽い前処理、ジョブ投入、結果確認(重い計算はしない)

  • 計算node:学習・推論など重い計算はSlurm経由で実行


ユーザーにsudo権限を与える

  • dockerコマンド実行時や、singularityでsifファイルの生成が必要なときにはsudoが必要になる場合がある
  • 例(Ubuntu):ユーザーを sudo グループに追加
    sudo usermod -aG sudo [username]
    
  • 反映には再ログインが必要

module(環境管理)

  • スパコン系の環境では、アプリケーションが Environment Modules で管理されることが多い
  • 使いたいものを module load してPATHなどを通す
    module load slurm
    

その他 module コマンド

  • 現在読み込んでいる module の確認

    module list
    
  • 利用できるアプリケーションのmodule名を表示

    module avail
    
  • moduleを外す

    module unload xxx
    

.bashrcmodule load slurm を書くと手間は減る


Slurmのよく使うコマンド

クラスタ全体の空き状況を見る

  • ノードやパーティションの状態

    sinfo
    
  • 各種引数

    sinfo -o "%P %a %l %D %t %N"
    
    • %P: partition名
    • %a: available
    • %l: time limit
    • %D: ノード数
    • %t: 状態
    • %N: ノード名

全体のジョブ状況を見る

  • ジョブキューを見る

    squeue
    
  • 自分のジョブだけ

    squeue -u $USER
    

ジョブの「投入 / 実行」方法

1) sbatch(バッチ投入)

  • 「ジョブスクリプト」を投げて、バックグラウンド実行&ログを残す

2) srun (対話型)

  • ノードを確保して、その場でコマンドを実行する 例:デバッグ、簡単な動作確認、対話環境(Jupyter等)

sbatch:ジョブファイルの投げ方

GPUジョブの例(PyTorch学習など)

#!/bin/bash
#SBATCH -p dgxh100-01
#SBATCH -N 1
#SBATCH --nodelist=dgxh100-01
#SBATCH --gres=gpu:8      # 各ノードに要求するGPUの数
#SBATCH -o ./result/test.out  # 出力ファイル名
#SBATCH -e ./result/error.out
hostname
# Singularity コンテナ内で仮想環境に入り、Python スクリプトを実行
singularity exec --nv --bind /mnt/file/:/home, env.sif /bin/bash
source /etc/profile.d/conda.sh
conda init bash
source ~/.bashrc 
conda activate [env] 
python /home/tsuchida/sample/pyversion.py
python /home/tsuchida/sample/test.py
pwd
nvidia-smi

投入:

sbatch job.sh

よく使う SBATCH オプション

  • -J:ジョブ名
  • -p:partition(キュー)
  • -t:制限時間
  • -N:ノード数(例:-N 1
  • -o / -e:ログ出力先

対話ジョブ:srun

srun(ワンショット実行)

srun --nodes=1 --gres=gpu:4 --pty -J test -p a100-40gbx4-02 bash -i

ジョブの停止・キャンセル

  • ジョブを止める

    scancel <jobid>
    
  • 自分の全ジョブを止める

    scancel -u $USER
    

状態コード

  • PD:Pending(待ち)
  • R:Running(実行中)
  • CG:Completing(終了処理中)
  • CD:Completed(正常終了)
  • F:Failed(失敗)
  • CA:Cancelled(キャンセル)