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

HPCとSlurm

slurm.confを書く

TT Labで続きを見る

目標

要件に合ったslurm.confを最初から作成し、整合性を検証するスクリプトを自分で作ります。

なぜ重要なのか

Slurmの設定ミスは、エラーが遅れて思わぬところに現れます。ノードがINVALやDOWNで外れ、ログに原因が1行出ているのに、それを見ないと何日も迷います。最もよくある2つは、CPUsがソケット×コア×スレッドと異なることと、パーティションが定義されていないノードを参照することです。どちらも人が手で計算するときに起きるミスで、どちらもスクリプトで事前に見つけられます。

実際のslurmdは動かしません。作成した設定と検証スクリプトを採点します。

このラボの要件

ステップ

  1. /etc/slurmと/root/slurmの2つのディレクトリを作成してください。
  2. /etc/slurm/slurm.confを作成し、次のキーを入れてください。 ClusterName=labhub-hpc、SlurmctldHost=ctl01、SlurmUser=slurm、StateSaveLocation=/var/spool/slurmctld、SlurmdSpoolDir=/var/spool/slurmd、AuthType=auth/munge
  3. スケジューリング関連のキーを追加してください。 SchedulerType=sched/backfill、SelectType=select/cons_tres、SelectTypeParameters=CR_Core_Memory、ProctrackType=proctrack/cgroup、TaskPlugin=task/cgroup,task/affinity
  4. ノード3台を定義してください。各行はNodeName=で始め、Sockets、CoresPerSocket、ThreadsPerCore、CPUs、RealMemory、Stateを含める必要があります。CPUsの値は、ソケット×コア×スレッドと一致している必要があります。
  5. パーティション2つを定義してください。batchはDefault=YESとMaxTime=24:00:00、shortはMaxTime=01:00:00です。どちらのパーティションも、Nodes=に書いたノードがステップ4で定義したものである必要があります。
  6. ログとアカウント関連のキーを追加してください。 SlurmctldLogFile=/var/log/slurm/slurmctld.log、SlurmdLogFile=/var/log/slurm/slurmd.log、JobAcctGatherType=jobacct_gather/cgroup、ReturnToService=2
  7. mungeユーザーとグループを作成し、/etc/munge/munge.keyを1024バイトのランダムデータで生成したうえで、権限を0400、所有者をmunge:mungeに設定してください。
  8. /root/slurm/validate.shを作成してください。最初の引数でslurm.confのパスを受け取り、次の2つのルールを検査します。違反がなければ終了コード0、あれば0以外の値で終了する必要があります。
    • ルール1: すべてのNodeName=行で、CPUsがSockets × CoresPerSocket × ThreadsPerCoreと等しいこと
    • ルール2: すべてのPartitionName=行のNodes=に出てくるノードが、NodeName=で定義されていること(範囲表記gpu-node[01-03]を展開して確認してください) 採点ツールが、あなたの/etc/slurm/slurm.conf(通過する必要があります)と/opt/fixtures/slurm/broken/slurm.conf(失敗する必要があります)の両方に対して実行します。

参考

設定ディレクトリを準備する

/etc/slurmと/root/slurmの2つのディレクトリを作成してください。

標準のパスは/etc/slurmです。作業用のディレクトリも別に作成してください。

基本のキーを書く

/etc/slurm/slurm.confを作成し、次のキーを入れてください。 ClusterName=labhub-hpc、SlurmctldHost=ctl01、SlurmUser=slurm、StateSaveLocation=/var/spool/slurmctld、SlurmdSpoolDir=/var/spool/slurmd、AuthType=auth/munge

クラスター名、コントローラーのホスト、実行アカウント、状態の保存先、認証方式が基本です。

スケジューラーとリソース選択

スケジューリング関連のキーを追加してください。 SchedulerType=sched/backfill、SelectType=select/cons_tres、SelectTypeParameters=CR_Core_Memory、ProctrackType=proctrack/cgroup、TaskPlugin=task/cgroup,task/affinity

GPUクラスターでは、リソースをコア単位に分ける選択プラグインが必要です。メモリも消費リソースに含める必要があります。

ノードを定義する

ノード3台を定義してください。各行はNodeName=で始め、Sockets、CoresPerSocket、ThreadsPerCore、CPUs、RealMemory、Stateを含める必要があります。CPUsの値は、ソケット×コア×スレッドと一致している必要があります。

CPUsはソケット×コア×スレッドと一致している必要があります。計算を2回確認してください。

パーティションを定義する

パーティション2つを定義してください。batchはDefault=YESとMaxTime=24:00:00、shortはMaxTime=01:00:00です。どちらのパーティションも、Nodes=に書いたノードがステップ4で定義したものである必要があります。

Nodesに書いたノードは、すべて定義されている必要があります。既定のパーティションは1つだけ指定します。

ログとアカウント

ログとアカウント関連のキーを追加してください。 SlurmctldLogFile=/var/log/slurm/slurmctld.log、SlurmdLogFile=/var/log/slurm/slurmd.log、JobAcctGatherType=jobacct_gather/cgroup、ReturnToService=2

コントローラーとノードそれぞれのログのパスが必要です。リソース収集のプラグインも指定してください。

mungeキーを準備する

mungeユーザーとグループを作成し、/etc/munge/munge.keyを1024バイトのランダムデータで生成したうえで、権限を0400、所有者をmunge:mungeに設定してください。

キーファイルの権限と所有者が正確であって初めて、mungedが起動します。サイズにも決まった値があります。

整合性を検証するスクリプト

/root/slurm/validate.shを作成してください。最初の引数でslurm.confのパスを受け取り、次の2つのルールを検査します。違反がなければ終了コード0、あれば0以外の値で終了する必要があります。

採点ツールが、正常な設定とフィクスチャの壊れた設定の両方に対して実行します。終了コードで区別してください。