
AWS ParallelCluster 3.0.0 と Ubuntu 18.04 または Ubutu 20.04 の組み合わせはヘッドノード再起動後にコンピュートノードが起動できない原因と対処方法について
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS ParallelCluster 3.0.0 と Ubuntu 20.04の組み合わせのクラスターで検証していました。以前はジョブを登録するとコンピュートノードが正常に起動してたのに、ヘッドノードを再起動後するとコンピュートノードが起動しなくなりました。原因と対処方法がわかったので紹介します。
結論
ヘッドノードへログインしsudo service supervisor startでサービスを手動起動させる必要がある。
supervisor.serviceは自動起動有効になっていますが起動してきません。
詳細は以下のリンクをご確認ください。
ワークアラウンド
インスタンス起動時にcronでサービス開始する設定を仕込めば回避できます。後述します。
対象とされる環境
- AWS ParallelClusterのバージョンは
3.0.0 - OSは
Ubuntu 18.04とUbuntu 20.04のみ 
原因
- ParallelClusterのデーモン
clustermgtdがヘッドノードの再起動後にデーモンが再起動しない clusutermgtdがコンピュートノードのスケールアップを管理しているため、ジョブを登録してもコンピュートノードが起動できない- 根本的な原因はヘッドノードの
supervisord.serviceがヘッドノードの再起動にinactive (dead)であるため 
状況
ジョブを登録すると以下のメッセージ(REASON)が表示され、コンピュートノードがまったく起動できない状態になりました。
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                13  cpu-spot  test.sh   ubuntu PD       0:00      1 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions)
                14  cpu-spot  test.sh   ubuntu PD       0:00      1 (ReqNodeNotAvail, UnavailableNodes:cpu-spot-dy-c5a4xlarge-[1-20])
STATEからノードがdownしていることを確認できます。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST cpu-spot* up infinite 20 down~ cpu-spot-dy-c5a4xlarge-[1-20]
原因切り分けのために以下の対応しましたが解決には至りませんでした。
ヘッドノードの再起動後に発生していることがわかり、そこを中心に調査を進めました。
対処
Wikiよりsupervisord.serviceサービスが起動しない問題を抱えていることがわかりました。
サービスのステータスを確認します。
systemctl status supervisord.service
inactive (dead)でした。
● supervisord.service - LSB: Start/stop supervisor
     Loaded: loaded (/etc/init.d/supervisord; generated)
     Active: inactive (dead)
       Docs: man:systemd-sysv-generator(8)
サービスを起動します。
sudo service supervisor start systemctl status supervisord.service
active (running)になりました。
● supervisord.service - LSB: Start/stop supervisor
     Loaded: loaded (/etc/init.d/supervisord; generated)
     Active: active (running) since Sat 2021-10-09 01:27:30 UTC; 6s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1398 ExecStart=/etc/init.d/supervisord start (code=exited, status=0/SUCCESS)
      Tasks: 4 (limit: 4631)
     Memory: 83.2M
     CGroup: /system.slice/supervisord.service
             ├─1405 /opt/parallelcluster/pyenv/versions/3.7.10/envs/cookbook_virtualenv/bin/python3.7 /opt/parallelcluster/pyen>
             ├─1413 /opt/parallelcluster/pyenv/versions/3.7.10/envs/node_virtualenv/bin/python3.7 /opt/parallelcluster/pyenv/ve>
             └─1420 /opt/parallelcluster/pyenv/versions/3.7.10/envs/cookbook_virtualenv/bin/python /opt/parallelcluster/pyenv/v>
ノードのSTATEはidele%に変化しました。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST cpu-spot* up infinite 20 idle% cpu-spot-dy-c5a4xlarge-[1-20] high-cpu-spot up infinite 10 idle~ high-cpu-spot-dy-c5a24xlarge-[1-10]
キューは捌けていきませんでした。一度scancelでキュー削除してきれいサッパリにします。
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                13  cpu-spot  test.sh   ubuntu PD       0:00      1 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions)
                14  cpu-spot  test.sh   ubuntu PD       0:00      1 (ReqNodeNotAvail, UnavailableNodes:cpu-spot-dy-c5a4xlarge-[1-20])
キューをクリアしました。
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
テストジョブでコンピュートノード起動確認
テストジョブを投げて動作確認します。
sbatch test.sh
キューに登録されました。
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                15  cpu-spot  test.sh   ubuntu CF       0:01      1 cpu-spot-dy-c5a4xlarge-1
STATEがmix~になりました。この後すぐにdown#にならなければ問題はほぼほぼ解決したようなものです。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST cpu-spot* up infinite 1 mix~ cpu-spot-dy-c5a4xlarge-1 cpu-spot* up infinite 19 idle~ cpu-spot-dy-c5a4xlarge-[2-20]
コンピュートノード起動してくる素振りを見せるだけで2時間ほど原因切り分けしていた身としては感動的な光景です。
正常に起動しました。大きな前進です。
キューは捌けました。
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
出力結果を返したファイルが作成されています。ホスト名を返すだけのジョブでしたが、コンピュートノードの起動確認において十分な結果です。
$ cat slurm-15.out cpu-spot-dy-c5a4xlarge-1
サービス自動起動しておけばよくないですか?
悲しいことにenabledで自動起動になっています。自動起動したあとに異常終了していたならinactive (dead)ではなくfailedになるはずです。根本的な原因まではわかりませんが、自動起動になっているにもかかわらず起動処理が走らないことに問題があるように思えます。
$ systemctl list-unit-files -t service | grep supervisord supervisord.service generated enabled
ワークアラウンド(cronでサービス起動させる)
ヘッドノード(ECインスタンス)起動時に一度だけサービス起動させるcronを仕込みます。ヘッドノードの停止・開始、再起動してもsupervisord.serviceをactive (running)状態に持っていけました。
crontab -eでcronの設定に以下の1行を追記してください。
@reboot sudo systemctl start supervisord.service
動作確認はヘッドノードの停止・開始後にsystemctl status supervisord.serviceでサービスが開始されているか確認してください。
おわりに
GitHubのWikiのタイトルだとわかる人にしかわからないです。シンプルにヘッドノード再起動にコンピュートノードが起動できないという問題を抱えています。検索から当記事がヒットし一次ソースのWikiへたどり着いてもらえば幸いです。 Amazon Linux2、CentOSでは同じ問題は報告されてないため他OSは心配ありません。









