1台のワークステーション(Ubuntu 24.04)にSlurmをインストールする(認証なしの超シンプル構成)


1台のワークステーション(Ubuntu 24.04)にSlurmをインストールする(認証なしの超シンプル構成)

スパコン使ってると必ず使う?キューイングシステム。キューを投げとけばあとは勝手にどんどん捌いていってくれてとても便利なので、自分のワークステーションでも使うことにする。

とはいえ、クラスター組んでるわけでもなく、たった一台のワークステーション(PC)なので、認証(munge)とかなしの最小構成でいれる。ラボのネットワークは外部と遮断されてるし、自分しか使わないので、セキュリティーとか無視。参考にされる方はご注意を。

aptでインストール

aptでインストールできる。

Terminal window
$ sudo apt install slurm-wlm

mungeとかも一緒にインストールされるが、今回は使わない。

slurm.confを作る

Terminal window
$ sudo vim /etc/slurm/slurm.conf

中身は以下。

/etc/slurm/slurm.conf
ClusterName=local
ControlMachine=hostname
NodeName=hostname
PartitionName=main Nodes=hostname Default=YES MaxTime=INFINITE State=UP
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/none
SlurmUser=slurm
StateSaveLocation=/var/spool/slurm
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
TaskPlugin=task/none

hostnamehostname -sで表示される値

NodeNameCPUsとか他に書くことあるみたいだが、リソース分けたりするつもりないので何も書いていない。slurmd -Cで色々出てくるので何も書かなくても認識してくれてる可能性あり。リソース分けて並列でジョブ走らせたいとかあるなら書いておいた方がいのかもしれない。

AuthType=auth/noneにしておく。

ディレクトリ作成と権限付与

Terminal window
$ sudo mkdir -p /var/spool/slurm
$ sudo mkdir -p /var/spool/slurmd
$ sudo chown -R slurm: /var/spool/slurm /var/spool/slurmd

munge無効化

auth/noneを使うのでmungeは不要。切らなくてもいいと思うけど、ここでは一応切っておく。

Terminal window
$ sudo systemctl disable --now munge

slurm起動

Terminal window
$ sudo systemctl enable --now slurmctld
$ sudo systemctl enable --now slurmd

起動しているか確認

Terminal window
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
main* up infinite 1 idle localhost

ジョブを投げてみる

Terminal window
$ 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になっていることがある。下記のコマンドで解消するが原因はわからない。

Terminal window
sudo scontrol update nodename=hostname state=idle

jobを割り込ませたい時

既にジョブをかなりの数投げていてキューに並んでいるが、今すぐこの計算を優先してやりたいっていうとき、下記で可能。

とりあえず普通にジョブを投げる。

Terminal window
$ sbatch job.sh

優先度を変える。

Terminal window
$ sudo scontrol update jobid=<jobid> Nice=-10

デフォルトでNice値は0。0より小さい値に変更すれば小さいものから優先して計算される。sudoじゃないとpermission denied。

sacctを使う

ジョブの履歴を見たい時はこの設定が必要。

Terminal window
$ 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に以下を記載。

/etc/slurm/slurmdbd.conf
AuthType=auth/none
DbdHost=localhost
DbdPort=6819
StorageType=accounting_storage/mysql
StorageHost=localhost
StoragePass=パスワード
StorageUser=slurm
StorageLoc=slurm_acct_db
LogFile=/var/log/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
SlurmUser=slurm

パーミッションと所有権を変更

Terminal window
$ sudo chown slurm: /etc/slurm/slurmdbd.conf
$ sudo chmod 600 /etc/slurm/slurmdbd.conf

/etc/slurm/slurm.confに下記を追記

/etc/slurm/slurm.conf
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=<slurmdbdが動くホスト名>

slurmdbdをstart、slurmctld, slurmdをリスタート.

Terminal window
sudo systemctl start slurmdbd
sudo systemctl restart slurmctld slurmd

sacctしてみる。

Terminal window
$ sacct -o User,JobID,Partition,NNodes,Submit,Start,End,Elapsed,State -X

(メンテナンス時等)今走ってるジョブが終わったら停止する。

Terminal window
$ sudo scontrol update NodeName=<ノード名> State=DRAIN Reason="Maintenance after current job"

戻す場合は以下。

Terminal window
$ sudo scontrol update NodeName=<ノード名> State=RESUME

Author

me

入谷 史人

Scientist (Ph.D.), Programer, Web Developer, Guitarist, Photographer

more...