本ページは OCI: HPC Cluster のサブページになります。
実現したいこと
HPC ClusterのAutoscaling環境にてユーザーが投入できるジョブ数の制限設定を実現例について解説します。
例: 以下のパーティションに対して以下のユーザーが投入できるジョブ数を4ジョブまでに制限したい。ジョブの同時実行数は2ジョブとしたい。
- パーティション: partition-a
- ユーザー: user-a, user-b
設定内容を図解すると以下のようになります。
- ユーザーが投入できるジョブ数についてはSLURMのQoSで実現します
- ジョブの同時実行数についてはAutoscalingを構成している関係上、Autoscaling側で該当のパーティションで作成できるクラスタ数を制限して実現します
前提となる設定状況
LDAPユーザー
以下のLDAPユーザーに対してジョブの制限を設定します。
$ cluster user list
DN: cn=user-a,ou=People,dc=local - STATUS: Read - READ TIME: 2024-04-12T09:00:16.174386
cn: user-a
displayName: User A
gecos: User A
gidNumber: 10006
homeDirectory: /home/user-a
loginShell: /bin/bash
sn: user-a
uid: user-a
uidNumber: 10001
DN: cn=user-b,ou=People,dc=local - STATUS: Read - READ TIME: 2024-04-12T09:00:16.174560
cn: user-b
displayName: User B
gecos: User B
gidNumber: 10006
homeDirectory: /home/user-b
loginShell: /bin/bash
sn: user-b
uid: user-b
uidNumber: 10006
Autoscaling設定
- name: partition-a
default: false
instance_types:
- name: bm-cluster
default: true
shape: BM.Optimized3.36
instance_keyword: optimized3
permanent: false
cluster_network: false
compute_cluster: false
max_number_nodes: 16
max_cluster_size: 8
max_cluster_count: 2
region: ap-tokyo-1
ad: xxxx:AP-TOKYO-1-AD-1
private_subnet: 172.16.4.0/22
private_subnet_id: ocid1.subnet...
image: ocid1.image.oc1..
targetCompartment: ocid1.compartment.oc1...
boot_volume_size: 100
use_marketplace_image: true
use_compute_agent: true
instance_pool_ocpus: 1
instance_pool_memory: 8
instance_pool_custom_memory: true
marketplace_listing: HPC_OL8
hyperthreading: true
設定手順
SLURMのアカウントを作成する
このアカウントというのはSLURMにおけるグループのような概念です。
ここではabc-group
という名前のアカウントを作成します。
$ sudo sacctmgr add account abc-group
Adding Account(s)
abc-group
Settings
Description = Account Name
SlurmctldHost=eval-slurm-controller
Organization = Parent/Account Name
Associations
A = abc-group C = cluster
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
アカウントが作成されたことを確認します。
[opc@eval-slurm-controller ~]$ sacctmgr list account
Account Descr Org
---------- -------------------- --------------------
abc-group abc-group abc-group
root default root account root
アカウントにLDAPユーザーを割り当てる
LDAPユーザーであるuser-a
とuser-b
をabc-group
に割り当てます。
$ sudo sacctmgr add user user-a account=abc-group
Adding User(s)
user-a
Associations =
U = user-a A = abc-group C = cluster
Non Default Settings
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
$ sudo sacctmgr add user user-b account=abc-group
Adding User(s)
user-b
Associations =
U = user-b A = abc-group C = cluster
Non Default Settings
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
QoSの設定を有効にする
任意のエディタで管理者権限でslurm.conf
を開いて変種します。
sudo vi /etc/slum/slurm.conf
以下の記述を追加します。
AccountingStorageEnforce=limits
QoSを作成する
ここではsubmit-qos
という名前のQoSの定義を作成します。
$ sudo sacctmgr add qos submit-qos
Adding QOS(s)
submit-qos
Settings
Description = submit-qos
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
QoSの定義にMaxSubmitJobsPerAccountを設定する
作成したQoSに対して、MaxSubmitJobsPerAccount
パラメーターに=4
の設定を追加します。
これにより、「ユーザーが投入できるジョブ数を4ジョブまでに制限」が実現されます。
MaxSubmitJobsPerAccount:
The maximum number of jobs an account (or sub-account) can have running and pending at a given time.
$ sudo sacctmgr modify qos submit-qos set MaxSubmitJobsPerAccount=4
Modified qos...
submit-qos
Would you like to commit changes? (You have 30 seconds to decide)
(N/y): y
設定されたことを確認します。
$ sacctmgr show qos format="Name,MaxSubmitJobsPerAccount"
Name MaxSubmitPA
---------- -----------
normal
limited_j+
submit-qos 4
QoSとパーティションを関連づける
設定したQoSとパーティションを紐づけます。
管理者権限でslurm.confを修正します。
sudo vi /etc/slurm/slurm.conf
対象のパーティションの行の文末にQOS=submit-qos
を追加して保存します。
PartitionName=partition-a Nodes=<node>-[1-1024] Default=NO MaxTime=INFINITE State=UP QOS=submit-qos
slurmctldをrestartする
slurm.confの変更を適用させるためにslurmctldをretartさせる。
sudo systemctl restart slurmctld
設定が反映されていることを確認します。
$ scontrol show partition partition-a | grep QoS
AllocNodes=ALL Default=NO QoS=submit-qos
動作確認
動作確認としてuser-a
やuser-b
で設定した制限以上のジョブを投入してみます。
上限に達すると以下のエラーにてジョブが投入できなくなることを確認します。
$ sbatch job.sh
sbatch: error: MaxSubmitJobsPerAccount
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user's size and/or time limits)
注意点
本設定にあたりslurm.confを修正していますが、HPC-Clusterのqueues.confの変更を適用するslurm_config.shを実行すると記載した以下の内容が消えてしまうのでご注意ください。
-
AccountingStorageEnforce=limits
の記述 - Partition= で始まる行の文末に設定した
QOS=submit-qos
の記述
HPC-Clusterの仕様上の問題がありますので、本設定は以下のの流れで実施をするように注意してください。
- queues.confの編集
- slurm_config.shの実行
- 本パーティション設定
参照資料
本手順の作成にあたり以下のURLを参考にさせていただきました。