差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
サーバ関連:slurm [2018/12/17 10:20]
mumeiyamibito
— (現在)
ライン 1: ライン 1:
-====== Slurm ====== 
-===== 概要 ===== 
-  * Torque や Sun Grid Engine のようなジョブ管理ツール。 
-  * 現状、ドキュメントは Torque の方が多く、Slurm は圧倒的にドキュメントが少なく、日本語ドキュメントはさらに少ない…。 
-  * Ubuntu のデフォルトリポジトリには登録されている。 
  
-===== プログラム ===== 
-  * ''​slurmctl'':​ ノード管理デーモン (マスターノード (親機) にインストール) 
-  * ''​slurmd'':​ 計算管理デーモン (各計算ノードにインストール) 
-  * 参考サイト:​ [[https://​slurm.schedmd.com/​quickstart.html | Slurm Workload Manager]] 
- 
-===== インストール方法 ===== 
-  * ここでは、Ubuntu 16.04 ベースで、ソースからコンパイルする方法を紹介する。 
- 
-  - 認証システム munge をインストールする。\\ <code bash> 
-$ sudo apt-get install libmunge-dev libmunge2 munge 
-</​code>​ 
-    * 通常はインストール時に認証鍵が生成されるが、されない場合は以下のコマンドをマスターノードでのみ行う (マスターノードの認証鍵を計算機ノードが参照するため)。\\ <code bash> 
-$ sudo create-munge-key 
-</​code>​ 
-  - インストール時にスタートアップの問題で失敗するので、修正する。\\ <code bash> 
-$ sudo systemctl edit --system --full munge 
-</​code>​ 
-    - ''​ExecStart=/​usr/​sbin/​munged''​ を ''​ExecStart=/​usr/​sbin/​munged --syslog''​ にする。 
-    - 再度インストールする。\\ <code bash> 
-$ sudo apt-get install -f 
-</​code>​ 
-  - slurm を https://​www.schedmd.com/​downloads.php からダウンロードする。 
-    * ここでは、''​SLURM-17.02.1-2.TAR.BZ2''​ をダウンロードする。 
-    * ダウンロードしたファイルは ''/​tmp''​ にあるものとする。 
-  - 展開する。\\ <code bash> 
-$ cd /tmp 
-$ tar axvf slurm-17.02.1-2.tar.gz 
-</​code>​ 
-  - インストールする。\\ <code bash> 
-$ cd slurm-17.02-1.2 
-$ ./configure 
-$ make -j 4 
-$ sudo make install 
-</​code>​ 
-  - 設定ファイルをコピーする。\\ <code bash> 
-$ sudo cp etc/​slurm.conf.example /​usr/​local/​etc/​slurm.conf 
-</​code>​ 
-  - 設定ファイルを編集する。 
-    * 詳しくはシステムの設定を参照 
-  - 必要なディレクトリを作成する。\\ <code bash> 
-$ sudo mkdir -p /​var/​spool/​slurm/​ctld 
-$ sudo mkdir -p /​var/​spool/​slurm/​d 
-</​code>​ 
-    * ''​slurm.conf.example''​ をベースに設定ファイルを作成した場合は、''​fatal:​ _create_clustername_file:​ failed to create file /​var/​spool...''​ というエラーが出るため、この作業が必要である。''​slurmctld''​ が起動できないのは、このディレクトリがなく、このディレクトリ以下にファイルを作成できないためである。 
-    * 設定を容易に行う別の方法として、''​doc/​html/​configurator.easy.html''​ を用いる方法があり、こちらで設定ファイルを作成した場合は、''​StateSaveLocation''​ や ''​SlurmdSpoolDir''​ が既に存在しているディレクトリを指しているため、このエラーは起こらない。 
-  - 自動起動するようにする。 
-    * マスターノード (マスターノードで計算させない場合は ''​slurmd.service''​ の行は不要)\\ <code bash> 
-$ sudo cp etc/​slurmctld.service /​etc/​systemd/​system 
-$ sudo cp etc/​slurmd.service /​etc/​systemd/​system 
-$ sudo systemctl enable slurmctld.service 
-$ sudo systemctl enable slurmd.service 
-</​code>​ 
-    * 計算ノード\\ <code bash> 
-$ sudo cp etc/​slurmd.service /​etc/​systemd/​system 
-$ sudo systemctl enable slurmd.service 
-</​code>​ 
-  - サービスを起動する。 
-    * マスターノード (マスターノードで計算させない場合は ''​slurmd.service''​ の行は不要)\\ <code bash> 
-$ sudo systemctl start  slurmctld.service 
-$ sudo systemctl start  slurmd.service 
-</​code>​ 
-    * 計算ノード\\ <code bash> 
-$ sudo systemctl start  slurmd.service 
-</​code>​ 
-  - 起動しているかを確認する。 
-    * マスターノード ​ (マスターノードで計算させない場合は ''​slurmd.service''​ の行は不要)\\ <code bash> 
-$ sudo systemctl status slurmctld.service 
-$ sudo systemctl status slurmd.service 
-</​code>​ 
-    * 計算ノード\\ <code bash> 
-$ sudo systemctl status slurmd.service 
-</​code>​ 
-  - ジョブを投入してテストする。\\ <code bash> 
-$ srun -l sleep 60 & 
-$ srun -l sleep 60 & 
-$ srun -l sleep 60 & 
-$ srun -l sleep 60 & 
-$ srun -l sleep 60 & 
-$ squeue 
-JOBID PARTITION ​    ​NAME ​    USER ST       ​TIME ​ NODES NODELIST(REASON) 
-   ​29 ​      ​ALL ​   sleep mumeiyam PD       ​0:​00 ​     1 (Resources) 
-   ​25 ​      ​ALL ​   sleep mumeiyam ​ R       ​0:​05 ​     1 master 
-   ​26 ​      ​ALL ​   sleep mumeiyam ​ R       ​0:​04 ​     1 master 
-   ​27 ​      ​ALL ​   sleep mumeiyam ​ R       ​0:​04 ​     1 master 
-   ​28 ​      ​ALL ​   sleep mumeiyam ​ R       ​0:​03 ​     1 master 
-</​code>​ 
- 
-===== システムの設定 ===== 
-  * マスターノード (master)、計算ノード (calc01, calc02, calc03) の例.\\ <code conf slurm.conf>​ 
-ControlMachine=master 
-ControlAddr=192.168.1.254 
- : 
-SlurmUser=root 
-SlurmdUser=root 
- : 
-SelectType=select/​cons_res 
-SelectTypeParameters=CR_CPU 
- : 
-PreemptType=preempt/​partition_prio 
-PreemptMode=SUSPEND,​GANG 
- : 
-# Node configuration 
-# Configure support for our four GPUs 
-GresTypes=gpu,​bandwidth 
- 
-# COMPUTE NODES 
-NodeName=master ​ Procs=8 NodeAddr=192.168.1.254 RealMemory=16016 State=UNKNOWN 
-NodeName=calc01 ​ Procs=8 NodeAddr=192.168.1.1 ​  ​RealMemory=16016 State=UNKNOWN 
-NodeName=calc02 ​ Procs=4 NodeAddr=192.168.1.2 ​  ​RealMemory=1969 ​ State=UNKNOWN 
-NodeName=calc03 ​ Procs=4 NodeAddr=192.168.1.3 ​  ​RealMemory=3921 ​ State=UNKNOWN 
- 
-# Partition configuration 
-PartitionName=ALL ​   Nodes=master,​calc01,​calc02,​calc03Default=YES MaxTime=UNLIMITED PriorityTier=1 State=UP 
-PartitionName=CPU1 ​  ​Nodes=master MaxTime=UNLIMITED PriorityTier=1 State=UP 
-PartitionName=CPU2 ​  ​Nodes=calc01 MaxTime=UNLIMITED PriorityTier=1 State=UP 
-PartitionName=CPU3 ​  ​Nodes=calc02,​calc03 MaxTime=UNLIMITED PriorityTier=1 State=UP 
-PartitionName=CPU1_h Nodes=master MaxTime=UNLIMITED PriorityTier=2 State=UP 
-PartitionName=CPU2_h Nodes=calc01 MaxTime=UNLIMITED PriorityTier=2 State=UP 
-PartitionName=CPU3_h Nodes=calc02,​calc03 MaxTime=UNLIMITED PriorityTier=2 State=UP 
-</​code>​ 
-    * ''​ControlMachine'':​ ジョブ管理ノード名 
-    * ''​ControlAddr'':​ ジョブ管理ノードの IP アドレス 
-    * ''​SlurmUser'':​ 管理者ユーザ 
-    * ''​SelectType'':​ ジョブの投入方法 (''​select/​liner''​|''​select/​cons_res''​|''​select_cray''​) 
-        * ''​select/​liner'':​ nodes (シングル CPU?) の場合 
-        * ''​select/​cons_res'':​ socket/​core/​CPU (複数 CPU?) の場合 
-        * ''​select_cray'':​ Cray systems without ALPS の場合 
-    * ''​SelectTypeParameters'':​ ''​SelectType''​ のパラメータ (詳細は [[https://​slurm.schedmd.com/​cons_res_share.html | Slurm Workload Manager]] や [[https://​slurm.schedmd.com/​cons_res.html | Slurm Workload Manager]] を参照) 
-        * ''​CR_Memory'':​ ''​select/​liner''​ 時のおすすめパラメータ (メモリの状況で判断?​) 
-        * ''​CR_CPU'':​ 複数 CPU の場合に CPU が空き次第投入する (CPU の状況で判断?​) 
-        * ''​CR_Core_Memory'':​ ''​select/​cons_res''​ 時のおすすめパラメータ (CPU あたりのメモリの状況で判断?​) 
-    * ''​PreemptType'':​ 割り込みタイプ 
-        * ''​preempt/​none'':​ 割り込まない 
-        * ''​preempt/​partition_prio'':​ 特定のパーティションのジョブが割り込む 
-    * ''​PreemptMode'':​ 割り込み時の優先度が低いジョブの挙動 
-        * ''​SUSPEND'':​ 低優先度のジョブを止める (終了はさせない) 
-        * ''​CANCEL'':​ 低優先度のジョブを終了させる 
-        * ''​CHECKPOINT'':​ チェックポイントを作成して低優先度のジョブを終了させる 
-        * ''​REQUEUE'':​ 低優先度のジョブを終了させて、再度キューに投入する (ジョブは別リソースでスタートする可能性がある) 
-        * ''​GANG'':​ ジョブ復帰のために必要なオプションで、他のオプションを組み合わせて使う 
-    * ''​NodeName'':​ 各計算機ノードのノード名 
-        * ''​NodeAddr'':​ 計算機ノードの IP アドレス 
-        * ''​Procs''​ or ''​CPUs'':​ CPU 数 
-        * ''​RealMemory'':​ 実メモリ (MiB) 
-        * ''​Gres'':​ GPU の設定 
-            * 1つ目のフィールド:​ ''​grep.conf''​ 内の名前 
-            * 2つ目のフィールド:​ GPU のアーキテクチャ 
-            * 3つ目のフィールド:​ GPU 数 
-    * ''​PartitionName'':​ パーティション (キュー) 名 
-        * ''​Nodes'':​ キューがサブミットできるノード (カンマでノード名を区切る;​ デフォルトはすべてのノード) 
-        * ''​Default'':​ デフォルトのキューか? (''​YES''​|**''​NO''​**) 
-        * ''​MaxTime'':​ 計算時間の上限 (''​mm''​|''​mm:​ss''​|''​hh:​mm:​ss''​|''​dd-hh''​|''​dd-hh:​mm''​|''​dd-hh:​mm:​ss''​|''​UNLIMITED''​) 
-            * root や slurmUser に指定されているユーザは適用されない 
-        * ''​PriorityTier'':​ パーティションの優先度 (デフォルトは 1) 
-        * ''​MaxCPUsPerNode'':​ パーティションで使えるノードごとの CPU 数 (このパーティションで同時に実行できるジョブ数を制限する際に使うと良い) 
-        *         * ''​State'':​ キューの有効/​無効 (**''​UP''​**|''​DOWN''​|''​DRAIN''​|''​INACTIVE''​) 
-            * ''​UP'':​ 有効 
-            * ''​DOWN'':​ ジョブは受け付けるが、実行しない 
-            * ''​DRAIN'':​ ジョブを受け付けない (キューに既にあるジョブは実行する) 
-            * ''​INACTIVE'':​ ジョブを受け付けない (キューに既にあるジョブは実行しない) 
-    * 参考サイト: ​ 
-       * slurm.conf: [[https://​slurm.schedmd.com/​slurm.conf.html | Slurm Workload Manager]] 
-       * GPU: [[https://​slurm.schedmd.com/​gres.html | Slurm Workload Manager]] 
-       * 割り込み:​ [[https://​slurm.schedmd.com/​preempt.html | Slurm Workload Manager]] 
- 
-===== トラブルシューティング ===== 
-==== "​error:​ we don't have select plugin type 101" というエラー、あるいはジョブが終了しても "​CG"​ というステータスのままフリーズ ==== 
-  * 原因: プラグインが未ロードのために起こるエラー 
-      * プラグインが必要な設定に書き換えた後、マスターノードのデーモン (slurmctl) をリロードしたが、計算ノードのデーモン (slurmd) をリロードしていない場合に起こる 
-  * 解決法: slurmd をリロードする 
-  * 参考サイト:​ [[https://​groups.google.com/​forum/#​!topic/​slurm-devel/​OMs91TahyNo | [slurm-dev] Jobs stuck in CG state and a bunch of plugin errors in slurmd\.log \- Google グループ]] 
- 
-==== 他のノードに計算が流れない ==== 
-  * 原因: munge が通信の認証を担当しているため、認証キーの不一致やパーミッション・所有者が異なるため 
-  * 解決法: ​ 
-      * 再度 /etc/munge 内の認証キーが同一か、パーミッション・所有者が適切に設定されているか確認する 
-      * もしかしたら、初歩的にネットワークがつながってないってこともあるので、そっちも確認する 
- 
-==== ノードの状態が "​drain"​ のままでジョブが実行されない ==== 
-  * 原因: 設定の読み込みのタイミングが失敗して、リソースがジョブに対し少なすぎると認識されている (メモリの設定などが 1 のままになっているとか) 
-  * 解決法: 
-      * slurm デーモンを再起動させてみる\\ <code bash> 
-$ sudo service slurm restart 
-</​code>​ 
-      * ノードの状態を強制的に変更する (詰まっているジョブを強制的に動かす)\\ <code bash> 
-$ sudo scontrol update nodename=NODENAME state=resume 
-</​code>​ 
-          * ''​NODENAME'':​ ''​drain''​ 状態のノード名 
-      * 強制的に設定ファイルを読み込む\\ <code bash> 
-$ sudo scontrol reconfigure 
-</​code>​ 
-      * 強制的に状態をクリアする\\ <code bash> 
-$ sudo service slurm stop 
-$ sudo service slurm startclean 
-</​code>​ 
-  * 参考サイト:​ [[https://​github.com/​clustervision/​trinity/​issues/​332 | trinity containers: slurm sets containers to "​drain"​ during some partition cases · Issue \#332 · clustervision/​trinity]] 
- 
-==== "sinfo -N" でノードがダウンした状態になる ==== 
-  * 原因1: ネットワークが繋がっていない 
-      * 解決方法:​ ネットワークケーブルやネットワークの設定を見直すこと 
-  * 原因2: ダウンしたノードの ''/​var/​log/​slurmd.log''​ に ''​error:​ authentication:​ Rewound credential''​ や ''​Unable to register: Zero Bytes were transmitted or received''​ がある 
-      * 解決方法:​ ''​Rewound''​ にあるとおり、ノードの時間の不一致により認証できないのが原因なので、時間を合わせる 
-      * 参考サイト 
-          * [[http://​pubs.cray.com/#/​Collaborate/​00446695-DC/​DD00439970/​What Does this Log Message Mean? | Cray : DITAweb]] 
-          * [[http://​thread.gmane.org/​gmane.comp.distributed.slurm.devel/​2655 | Re: Slurm not working: Reason=Node unexpectedly rebooted]] 
-  * 原因3: 上記解決法を試した後でも down のままになっていることがあるが、これは sinfo のキャッシュが更新されていないことがある。 
-      * 解決方法:​ drain の時と同じように ''​sudo scontrol update nodename=NODENAME state=resume''​ で詰まりを取る 
- 
-==== 起動しない ==== 
-  * エラー: ''​Couldn'​t find the specified plugin name for crypto/​munge looking at all files''​ 
-  * 原因: Ubuntu 18.04 + Slurm 17.11.8 以降で、''​libmunge-dev''​ パッケージが必要になった模様。 
-  * 解決方法:​ ''​libmunge-dev''​ を apt でインストールする。 
- 
-===== 参考サイト ===== 
-==== 導入方法 ==== 
-  * [[http://​qiita.com/​JeJeNeNo/​items/​c545e72373d4d1deb36a "Slurm Workload ManagerをUbuntu 16.04LTS に導入する - Qiita" | Slurm Workload ManagerをUbuntu 16.04LTS に導入する - Qiita]] 
-  * [[http://​www-fps.nifs.ac.jp/​ito/​memo/​slurm01.html "​Atsushi M. Ito web" | Atsushi M. Ito web]] 
- 
- 
- 
-{{tag>​Linux サーバ}} 
  • サーバ関連/slurm.1545009618.txt.gz
  • 最終更新: 2018/12/17 10:20
  • by mumeiyamibito