ジョブの履歴、投入時刻、計算終了時刻、成功/失敗、実行者らを記録する
「アカウント」を作ってそれをposixユーザにアサインしてチームでの課金とかが図れるっぽい
なくてもslurmは使えます. だがあるともっと便利になるかもね. XDMoDが使えるみたい. ただしXDMoDが要求するDBはMySQL8.0は未サポート
このaccountingを利用するにはslurm.confにて「AccountingStorageType=accounting_storage/slurmdbd」とする必要がある.
つまりはデータベース MariaDB が必要になります
参照先https://gist.github.com/DaisukeMiyamoto/d1dac9483ff0971d5d9f34000311d312
様
MariaDB の準備 †
MariaDBをどこに設置するか.
- 管理ノード(slurmノード)内にslurmdbdを設置して、そこにDBも同居させる.
- 管理ノード内にslurmdbdを設置するが、DBは別の場所(ノード)に.
- 管理ノードとは別のノードにslurmdbdを設置して、そこにDBも住まわせる.
- 管理ノードとは別のノードにslurmdbdを設置して、DBも別の場所で稼働させる.
とかでしょうか.
ここでは「管理ノードとは別のノードにslurmdbdを設置して、そこにDBも置く」で作ってみる.
ディストリビューター様のパッケージを使います. RockyLinux8.6で提供される MariaDB は 10.3.35 である. MySQLでは 5.7系 に相当
[root@slurmdbd ~]# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)
[root@slurmdbd ~]# dnf install mariadb-server
[root@slurmdbd ~]# systemctl enable mariadb --now
(確認)
[root@slurmdbd ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.35-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
MariaDB [(none)]> \q
Bye
[root@slurmdbd ~]#
全くの初期状態である.
これにデータベース「slurm_acct_db」を作って、そのデータベースにアクセス可能なユーザとして
slurmを作ります. データベース内アカウントでOSアカウントではないです っで管理ノードからこのslurmを使ってアクセスする想定です
[root@slurmdbd ~]# mysql
(database作成)
MariaDB [(none)]> create database slurm_acct_db;
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| slurm_acct_db |
+--------------------+
(databaseアクセスユーザの作成)
MariaDB [(none)]> create user 'slurm'@'localhost' identified by 'SLURM';
MariaDB [(none)]> select user,host from mysql.user;
+-------+-----------+
| user | host |
+-------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| slurm | localhost | <-- 作られたユーザ
| root | slurmdbd |
+-------+-----------+
MariaDB [(none)]>
(権限付与)
MariaDB [(none)]> grant all on slurm_acct_db.* TO 'slurm'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
あと微調整 https://slurm.schedmd.com/accounting.html
| --- /etc/my.cnf.d/mariadb-server.cnf.orig 2022-09-13 17:23:01.000000000 +0900
+++ /etc/my.cnf.d/mariadb-server.cnf 2022-12-30 06:46:23.649058607 +0900
@@ -18,6 +18,9 @@
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
+innodb_buffer_pool_size=4096M
+innodb_log_file_size=64M
+innodb_lock_wait_timeout=900
#
|
として
[root@slurmdbd ~]# systemctl restart mariadb
接続テスト †
[root@slurmdbd ~]# mysql -u slurm -h localhost -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.35-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
[root@slurmdbd ~]#
と接続は上手く行った
slurm-slurmdbdパッケージのインストールとmunge.keyの受領 †
slurm/nodeにて作成したパッケージを入れます
(同じRockyLinux8の管理ノードslurmから)
[root@slurm ~]# scp rpmbuild/RPMS/x86_64/slurm-22.05.7-1.el8.x86_64.rpm rpmbuild/RPMS/x86_64/slurm-slurmdbd-22.05.7-1.el8.x86_64.rpm slurmdbd:
[root@slurmdbd ~]# groupadd -g 5001 munge && useradd -d /var/lib/munge -s /bin/bash -u 5001 -g munge munge
[root@slurmdbd ~]# dnf localinstall slurm-22.05.7-1.el8.x86_64.rpm slurm-slurmdbd-22.05.7-1.el8.x86_64.rpm
(同時に munge がインストールされます)
(管理ノードslurmからmunge.keyのコピー)
[root@slurm ~]# scp /etc/munge/munge.key slurmdbd:/etc/munge/
[root@slurmdbd ~]# chown munge. /etc/munge/munge.key && systemctl enable munge --now
接続設定 †
管理ノードとは別のノードに slurmDBD を設置したので、管理ノードのslurmにslurmDBDの場所を伝える必要がある
[root@slurm ~]# vi /opt/slurm/etc/slurm.conf
(略)
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=slurmdbd
AccountingStorageExternalHost=slurmdbd
AccountingStoragePort=6819
次にslurmDBDノードでの設定ファイルを作る
[root@slurmdbd ~]# mkdir /opt/slurm/etc
[root@slurmdbd ~]# vi /opt/slurm/etc/slurmdbd.conf
##
## Archive info
ArchiveEvents=yes
ArchiveJobs=yes
ArchiveResvs=yes
ArchiveSteps=no
ArchiveSuspend=no
ArchiveTXN=no
ArchiveUsage=no
# Authentication info
AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdHost=slurmdbd
DbdPort=6819
DebugLevel=info
PurgeEventAfter=1month
PurgeJobAfter=12month
PurgeResvAfter=1month
PurgeStepAfter=1month
PurgeSuspendAfter=1month
PurgeTXNAfter=12month
PurgeUsageAfter=24month
LogFile=/var/log/slurmdbd.log
SlurmUser=slurm
#
# Database info
StorageType=accounting_storage/mysql
StorageUser=slurm
StoragePass=SLURM
StorageLoc=slurm_acct_db
[root@slurmdbd ~]#
あと、データベース接続のためのパスワードが平文で入っているので 0600 にします. それと所有者を変更します
[root@slurmdbd ~]# chmod 600 /opt/slurm/etc/slurmdbd.conf
[root@slurmdbd ~]# chown slurm. /opt/slurm/etc/slurmdbd.conf
firewall †
[root@slurmdbd ~]# firewall-cmd --add-port=6819/tcp --zone=public --permanent
[root@slurmdbd ~]# firewall-cmd --reload
起動 †
[root@slurmdbd ~]# systemctl enable slurmdbd.service --now
起動順番的には mariadb(データベース) -> slurmdbd(課金ノード)/slurmd(計算ノード) -> slurmctld(管理ノード) って感じかな.
「mysql_db_insert_ret_id: We should have gotten a new id: Table 'slurm_acct_db.cluster_job_table' doesn't exist」って言われたら
[root@slurmdbd ~]# /opt/slurm/bin/sacctmgr
sacctmgr: add cluster cluster
sacctmgr: quit
[root@slurmdbd ~]#
とします。「add cluster」で「cluster」を登録してます。この「cluster」は「/opt/slurm/etc/slurm.conf」にある「ClusterName」の値になります
その後に slurmdbd と slurmctld を再起動かな.
accounting 動作確認 †
クライアントノード(slurm-client)で
[illya@slurm-client ~]$ sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
[illya@slurm-client ~]$
ジョブを流した後
[illya@slurm-client sample]$ sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
71 a.sh workq 2 COMPLETED 0:0
71.batch batch 2 COMPLETED 0:0
[illya@slurm-client sample]$
sleepを含ませたjobを流したら
[illya@slurm-client sample]$ sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
71 a.sh workq 2 COMPLETED 0:0
71.batch batch 2 COMPLETED 0:0
72 a.sh workq 2 RUNNING 0:0
72.batch batch 2 RUNNING 0:0
[illya@slurm-client sample]$
となった.
より詳しく
[illya@slurm-client sample]$ sacct -o User,JobID,Partition,NNodes,Submit,Start,End,Elapsed,State -X
User JobID Partition NNodes Submit Start End Elapsed State
--------- ------------ ---------- -------- ------------------- ------------------- ------------------- ---------- ----------
illya 71 workq 1 2022-12-29T01:32:25 2022-12-29T01:32:25 2022-12-29T01:32:29 00:00:04 COMPLETED
illya 72 workq 1 2022-12-29T01:33:36 2022-12-29T01:33:36 2022-12-29T01:34:25 00:00:49 COMPLETED
[illya@slurm-client sample]$
「sacct -o」の中で使える項目は「sacct --helpformat」で見える
[illya@slurm-client sample]$ sacct --helpformat
Account AdminComment AllocCPUS AllocNodes
AllocTRES AssocID AveCPU AveCPUFreq
AveDiskRead AveDiskWrite AvePages AveRSS
AveVMSize BlockID Cluster Comment
Constraints ConsumedEnergy ConsumedEnergyRaw Container
(略
[illya@slurm-client sample]$