SLURMリソース管理システム


本文は本人の簡書のブログから同期して来ます
前編ではLSFジョブ管理システムについて簡単に説明したが,以下ではSLURMリソース管理システムについて説明する.
概要
SLURM(Simple Linux Utility for Resource Management)は、大規模なコンピューティングノードクラスタに使用できる高度な伸縮性とフォールトトレランスのクラスタマネージャとジョブスケジューリングシステムであり、世界的なスーパーコンピュータとコンピューティングクラスタで広く採用されている.SLURMは、処理対象のジョブのキューを維持し、そのジョブの全体的なリソース利用を管理します.リソースのニーズに応じて、使用可能なコンピューティングノードを共有または非共有で管理し、ユーザーが作業を実行できます.SLURMは、タスクキューにリソースを適切に割り当て、完了するまでジョブを監視します.現在、SLURMはすでに多くの最も強力なスーパーコンピュータで使用されているリードリソースマネージャとなっており、天河2号ではSLURMリソース管理システムが使用されています.
共通コマンド
次に、最も一般的なSLURMコマンドを示します.
  • sacct:履歴ジョブ情報の表示
  • salloc:リソースの割り当て
  • sbatch:バッチジョブの発行
  • scancel:ジョブのキャンセル
  • scontrol:システム制御
  • sinfo:ノードとパーティションのステータスを表示する
  • squeue:キューステータスの表示
  • srun:実行ジョブ
  • 共通環境変数
    次の表は、SLURM環境変数です.
    変数#ヘンスウ#
    説明
    SLURM_NPROCS
    ロードするプロセスの数
    SLURM_TASKS_PER_NODE
    ノードごとにロードするタスクの数
    SLURM_JOB_ID
    ジョブのジョブID
    SLURM_SUBMIT_DIR
    ジョブの発行時の作業ディレクトリ
    SLURM_JOB_NODELIST
    ジョブ割当のノードリスト
    SLURM_JOB_CPUS_PER_NODE
    各ノードに割り当てられたジョブのCPU数
    SLURM_JOB_NUM_NODES
    ジョブに割り当てられたノード数
    HOSTNAME
    バッチ・ジョブの場合、この変数はバッチ・スクリプトが実行するノードのノード名に設定されます.
    リソース管理システムエンティティ
    SLURMリソース管理システムの管理対象は、ノード、パーティション、ジョブおよびジョブステップを含む.
  • ノード:Node
  • とは、計算ノード
  • を指す.
  • は、プロセッサ、メモリ、ディスク領域などのリソース
  • を含む.
  • は、アイドル、アサイメント、障害等の状態
  • を有する.
  • ノード名ID
  • を使用
  • パーティション:Partition
  • ノードの論理パケット
  • は、リソースの制限、アクセス権、優先度などを設定できる管理メカニズムを提供する
  • .
  • パーティションはオーバーラップ可能であり、キューと同様の機能
  • を提供する.
  • パーティション名ID
  • を使用
  • ジョブ:Job
  • 一次資源配分
  • は1つのパーティションにあり、ジョブはパーティション
  • にまたがることができない.
  • キュースケジューリング後割当リソース実行
  • は、ジョブID識別子
  • を通過する.
  • 作業ステップ:Jobstep
  • srunによるタスクロード
  • ジョブステップは、ジョブの一部のノード
  • のみを使用することができる.
  • 1ジョブは、複数のジョブステップを含むことができ、
  • を同時に実行することができる.
  • ジョブ内でジョブステップID識別子
  • を通過する.

    ジョブ実行モード
    SLURMシステムには、3つのジョブ実行モードがあります.
  • インタラクティブモードで、srunコマンドで実行します.
  • バッチモードで、sbatchコマンドで実行します.
  • はモードを割り当て、sallocコマンドで実行します.

  • インタラクティブモード
    インタラクティブモードジョブの使用手順は、次のとおりです.
  • 端末でリソース割当要求を提出し、リソースの数と制限を指定する.
  • リソースの割り当てを待つ.
  • リソースを取得した後、計算タスクをロードします.
  • 運転中、タスクI/Oは端末に伝達される.
  • は、I/O、信号などを含むタスクと対話することができる.
  • タスクの実行が完了すると、リソースが解放されます.

  • たとえば、srunを使用して4つのプロセスを申請してジョブステップを生成します.
    $ srun -n 4 ./example
    

    バッチ・モード
    バッチ・モード・ジョブの使用手順は、次のとおりです.
  • ユーザーはジョブスクリプトを作成します.
  • 宿題を提出する.
  • ジョブキュー待ちリソース割り当て;
  • リソースを割り当てた後、ジョブを実行する.
  • スクリプトの実行が終了し、リソースが解放されます.
  • 実行結果は、指定されたファイルに記録されます.

  • ジョブ・スクリプトの例を次に示します.
    #!/bin/env bash
    
    # file: example.sh
    
    # set the number of nodes
    #SBATCH --nodes=2
    
    # set the number of tasks (processes) per node
    #SBATCH --ntasks-per-node=4
    
    # set partition
    #SBATCH --partition=example-partition
    
    # set max wallclock time
    #SBATCH --time=2:00:00
    
    # set name of job
    #SBATCH --job-name=example-mpi4py
    
    # set batch script's standard output
    #SBATCH --output=example.out
    
    # mail alert at start, end and abortion of execution
    #SBATCH --mail-type=ALL
    
    # send mail to this address
    #SBATCH [email protected]
    
    # run the application
    srun python example-mpi4py.py

    バッチ・ジョブを次のコマンドで発行します.
    $ sbatch example.sh
    

    割当てモード
    割当てモード・ジョブの使用手順は、次のとおりです.
  • リソース割当要求を送信する.
  • ジョブキュー待ちリソース割り当て;
  • は、ユーザが指定したコマンドを実行する.
  • コマンド実行が終了し、リソースが解放されます.

  • 割り当てモードはsallocコマンドで実行されます.たとえば、2つのノード、4つのプロセス、推定実行時間100秒を使用します.
    $ salloc -N 2 -n 4 -p example-partition -t 100 /bin/bash
    

    リソース割り当て要求が成功するとbash shell端末に入り、srunを使用してジョブタスクをインタラクティブに実行できます.端末にexitコマンドまたはCtrl+Dを入力して割当てモードを終了します.
    天河2号上のSLURM管理システム
    天河2号ではSLURM資源管理システムが使用されているが、天河2号で使用されているSLURMコマンドはいずれも標準的なSLURMコマンドの先頭のsをyhに変更しており、以下のようになっている.
  • yhacct:履歴ジョブ情報の表示
  • yhalloc:リソースの割り当て
  • yhbatch:バッチジョブの発行
  • yhcancel:ジョブのキャンセル
  • yhcontrol:システム制御
  • yhinfo/yhi:ノードとパーティションのステータスを表示する
  • yhqueue/yhq:キューステータスの表示
  • yhrun:実行ジョブ
  • 以上、SLURMリソース管理システムについて説明したが、次の記事ではMPI-3の新機能について説明する.