スパコン使ってると必ず使う?キューイングシステム。キューを投げとけばあとは勝手にどんどん捌いていってくれてとても便利なので、自分のワークステーションでも使うことにする。
とはいえ、クラスター組んでるわけでもなく、たった一台のワークステーション(PC)なので、認証(munge)とかなしの最小構成でいれる。ラボのネットワークは外部と遮断されてるし、自分しか使わないので、セキュリティーとか無視。参考にされる方はご注意を。
aptでインストール
aptでインストールできる。
$ sudo apt install slurm-wlmmungeとかも一緒にインストールされるが、今回は使わない。
slurm.confを作る
$ sudo vim /etc/slurm/slurm.conf中身は以下。
ClusterName=localControlMachine=hostnameNodeName=hostnamePartitionName=main Nodes=hostname Default=YES MaxTime=INFINITE State=UP
SlurmctldPort=6817SlurmdPort=6818AuthType=auth/noneSlurmUser=slurmStateSaveLocation=/var/spool/slurmSlurmdSpoolDir=/var/spool/slurmdSwitchType=switch/noneTaskPlugin=task/nonehostnameはhostname -sで表示される値
NodeNameはCPUsとか他に書くことあるみたいだが、リソース分けたりするつもりないので何も書いていない。slurmd -Cで色々出てくるので何も書かなくても認識してくれてる可能性あり。リソース分けて並列でジョブ走らせたいとかあるなら書いておいた方がいのかもしれない。
AuthType=auth/noneにしておく。
ディレクトリ作成と権限付与
$ sudo mkdir -p /var/spool/slurm$ sudo mkdir -p /var/spool/slurmd$ sudo chown -R slurm: /var/spool/slurm /var/spool/slurmdmunge無効化
auth/noneを使うのでmungeは不要。切らなくてもいいと思うけど、ここでは一応切っておく。
$ sudo systemctl disable --now mungeslurm起動
$ sudo systemctl enable --now slurmctld$ sudo systemctl enable --now slurmd起動しているか確認
$ sinfoPARTITION AVAIL TIMELIMIT NODES STATE NODELISTmain* up infinite 1 idle localhostジョブを投げてみる
$ set +H$ echo -e "#!/bin/bash\necho Hello, Slurm!" > test.sh$ chmod +x test.sh$ sbatch test.sh$ squeue$ cat slurm-*.out再起動時にSTETEがDOWNの場合の対処
なぜか再起動するとSTATEがDOWNになっていることがある。下記のコマンドで解消するが原因はわからない。
sudo scontrol update nodename=hostname state=idlejobを割り込ませたい時
既にジョブをかなりの数投げていてキューに並んでいるが、今すぐこの計算を優先してやりたいっていうとき、下記で可能。
とりあえず普通にジョブを投げる。
$ sbatch job.sh優先度を変える。
$ sudo scontrol update jobid=<jobid> Nice=-10デフォルトでNice値は0。0より小さい値に変更すれば小さいものから優先して計算される。sudoじゃないとpermission denied。
sacctを使う
ジョブの履歴を見たい時はこの設定が必要。
$ sudo apt install slurmdbd mysql-server-8.0$ sudo service mysql start$ sudo mysql -u root(mysql) CREATE DATABASE slurm_acct_db;(mysql) CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'パスワード';(mysql) GRANT ALL ON slurm_acct_db.* TO 'slurm'@'localhost';(mysql) FLUSH PRIVILEGES;/etc/slurm/slurmdbd.confに以下を記載。
AuthType=auth/noneDbdHost=localhostDbdPort=6819
StorageType=accounting_storage/mysqlStorageHost=localhostStoragePass=パスワードStorageUser=slurmStorageLoc=slurm_acct_db
LogFile=/var/log/slurmdbd.logPidFile=/var/run/slurmdbd.pidSlurmUser=slurmパーミッションと所有権を変更
$ sudo chown slurm: /etc/slurm/slurmdbd.conf$ sudo chmod 600 /etc/slurm/slurmdbd.conf/etc/slurm/slurm.confに下記を追記
AccountingStorageType=accounting_storage/slurmdbdAccountingStorageHost=<slurmdbdが動くホスト名>slurmdbdをstart、slurmctld, slurmdをリスタート.
sudo systemctl start slurmdbdsudo systemctl restart slurmctld slurmdsacctしてみる。
$ sacct -o User,JobID,Partition,NNodes,Submit,Start,End,Elapsed,State -X(メンテナンス時等)今走ってるジョブが終わったら停止する。
$ sudo scontrol update NodeName=<ノード名> State=DRAIN Reason="Maintenance after current job"戻す場合は以下。
$ sudo scontrol update NodeName=<ノード名> State=RESUME