ジョブの履歴、投入時刻、計算終了時刻、成功/失敗、実行者らを記録する
「アカウント」を作ってそれをposixユーザにアサインしてチームでの課金とかが図れるっぽい
なくてもslurmは使えます. だがあるともっと便利になるかもね. XDMoDが使えるみたい. ただしXDMoDが要求するDBはMySQL8.0は未サポート
このaccountingを利用するにはslurm.confにて「AccountingStorageType=accounting_storage/slurmdbd」とする必要がある.
つまりはデータベース MariaDB が必要になります
参照先https://gist.github.com/DaisukeMiyamoto/d1dac9483ff0971d5d9f34000311d312様
MariaDBをどこに設置するか.
とかでしょうか.
ここでは「管理ノードとは別のノードに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
|
として
[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/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/slurm/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
[root@slurmdbd ~]# mkdir /var/log/slurm; chown slurm. /var/log/slurm
[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 を再起動かな.
クライアントノード(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]$