Slurm で特定ユーザ専用のパーティションを作る

Arai, Junya
nttlabs
Published in
7 min readMay 20, 2020
Photo by freestocks.org from Pexels

こんにちは.NTT の新井です.

CheckInstall による Slurm の deb パッケージ化」で述べたように,私が居るチームでは GPU クラスタのジョブスケジューリングに Slurm を使用しています.運用の中であるユーザ専用のパーティション (キュー) を作る必要が生じたので,その方法をメモしておきます.ここではユーザの Slurm アカウントを作成し,パーティションの AllowAccounts オプションでそのアカウントを指定します.

なお,ちょうど Slurm のパッケージを作ったところなので,そのパッケージを使ってインストールや初期設定を行うところから書き始めます.

1. Slurm のインストール

CheckInstall による Slurm の deb パッケージ化 」の手順で作成されたパッケージを Ubuntu 18.04 にインストールします.

$ sudo apt install ./slurm_20.02.2-1_amd64.deb

2. アカウンティング機能の有効化

パッケージをインストールしただけでは Slurm のアカウント関連機能は有効になりません.事前にデータベースの設定を行う必要があります.その後 Slurm の設定を変更し,デーモンを再起動すると機能が有効化されます.

$ sudo apt-get install mysql-server-5.7=5.7.21-1ubuntu1 \
mysql-server-core-5.7=5.7.21-1ubuntu1
$ sudo mysql
mysql> CREATE DATABASE slurm_acct_db;
mysql> CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'localhost';
mysql> EXIT
$ sudo sed -i \
-e 's/^ControlMachine=.*$/ControlMachine=localhost/' \
-e 's/^NodeName=.*$/NodeName=localhost Procs=1 State=UNKNOWN/' \
-e 's/^#\?AccountingStorageType=.*$/AccountingStorageType=accounting_storage\/slurmdbd/' \
/etc/slurm/slurm.conf
$ sudo systemctl restart slurmdbd
$ sudo systemctl restart slurmd
$ sudo systemctl restart slurmctld
$ sudo sacctmgr show user # 動作確認
User Def Acct Admin
---------- ---------- ---------
root root Administ+

2020年5月20日時点の Ubuntu 18.04 における最新版 MySQL (5.7.30–0ubuntu0.18.04.1) との組み合わせでは Slurm (slurmdbd) が動作しないことに注意してください (参考).ここでは古いバージョンを指定してインストールしています.将来の MySQL または Slurm のアップデートで修正されると思いますので,セキュリティの観点からもなるべく最新版を導入するようにしてください.

3. ユーザとその Slurm アカウントの作成

ここでは新しく Linux ユーザ ‘alice’ を作成し,alice にのみ特定パーティションへのジョブ投入を許可することにします.まず Linux ユーザを作成し,次に Slurm アカウントを作成し,最後に Linux ユーザを Slurm アカウントに紐づけます.

$ sudo adduser alice
$ sudo sacctmgr add account alice
Adding Account(s)
alice
Settings
Description = Account Name
Organization = Parent/Account Name
Associations
A = clusteradm C = linux
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
$ sudo sacctmgr add user alice defaultaccount=alice
Adding User(s)
alice
Settings =
Default Account = alice
Associations =
U = clusterad A = clusteradm C = linux
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y

4. パーティションの作成

alice 専用のパーティションをここでは ‘aliceonly’ という名前にします. slurm.conf におけるパーティションの設定で AllowAccounts=alice とすることにより alice にのみジョブ投入を許可します.

$ echo 'PartitionName=aliceonly Nodes=ALL MaxTime=INFINITE State=UP AllowAccounts=alice' \
| sudo tee -a /etc/slurm/slurm.conf >/dev/null
$ sudo scontrol reconfigure
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug* up infinite 1 idle localhost
aliceonly up infinite 1 idle localhost
$ sudo -u alice srun -p aliceonly echo hello # alice は投入できる
hello
$ sudo -u root srun -p aliceonly echo hello # alice 以外 (root も) は投入できない
srun: Requested partition configuration not available now
srun: job 2 queued and waiting for resources
^Csrun: Job allocation 8 has been revoked
srun: Force Terminated job 2

なお,最初から存在する debug パーティションはアカウントの制限がないので誰でも投入できます.

$ sudo -u alice srun -p debug echo hello
hello
$ sudo -u root srun -p debug echo hello
hello

まとめ

本記事では特定ユーザ専用のパーティションを作成する方法をご紹介しました.他にもやり方はあるかもしれませんが,欲しい情報が見つからないことも多く,私たちも手探りで利用しています.もし Slurm に関心がありましたら,ぜひ Slurm User Group Japan のメンバになってください.次回以降の Slurm User Group Meetup Tokyo で交流しましょう!

また,私たち NTT は OSS を活用した研究開発を共に行う仲間を募集しています.ぜひ 弊社ソフトウェアイノベーションセンタ紹介ページや, 採用情報ページ をご覧ください.

--

--

Arai, Junya
nttlabs
Writer for

Researcher, Nippon Telegraph and Telephone (NTT) Corp. Graph algorithms / parallel distributed processing / non-von Neumann processors.