皆さん、こんにちは!
HPC環境において、Slurmは計算資源の管理に不可欠なツールですが、ジョブの投入が無制限に行われると、システムの安定性や利用者間の公平性が損なわれることがあります。
今回は、このような問題を未然に防ぎ、Slurmクラスターを効率的かつ安定的に運用するために非常に重要なAssociation Limit、特にMaxJobsとMaxSubmitの設定についてご紹介します。
SlurmのAssociation Limitを設定しないと起こる問題点
MaxJobsやMaxSubmitを設定しない場合、以下のような問題が発生する可能性があります。
無制限なジョブ投入による負荷増大
- あるユーザーが意図的または誤ってsbatchコマンドを大量に実行すると、数万から数十万件のジョブがキューに蓄積される可能性があります。
- これにより、Slurmコントローラ(slurmctld)に大きな負荷がかかり、システムのレスポンス低下やスケジューラの遅延を招く恐れがあります。
公平性の欠如
- 特定のアカウント(研究室やプロジェクトなど)が大量のジョブを投入すると、そのアカウントが計算資源を独占し、他のアカウントのジョブがなかなかスケジューリングされなくなることがあります。
- これは「一部ユーザーが資源を独占する」状況を生み出し、クラスター利用者間の不公平感につながります。
運用トラブルのリスク増大
- キューに溜まりすぎたジョブを整理するために、管理者がscancelコマンドを頻繁に使用する必要が出てきます。
- また、DBバックエンド(AccountingStorage)への書き込み量が急増し、slurmdbdが重くなるケースも発生する可能性があります。
MaxJobsとMaxSubmitを設定するメリット
これらの問題を解決するために、MaxJobsとMaxSubmitを設定することには多くのメリットがあります。
システム安定性の向上
- MaxSubmitは、投入できるジョブ数の上限を制限することで、キューの暴走を防止します。
- MaxJobsは、同時に実行できるジョブ数の上限を制限することで、計算資源の独占を防ぎます。
- これにより、管理ノードやスケジューラが過負荷になるのを防ぎ、システム全体の安定性を向上させることができます。
公平な資源配分
- アカウント単位での制限を設けることで、複数のグループ間で計算資源が偏りなく利用されるようになります。
- 「研究室Aが数千ジョブを同時に実行しているため、研究室Bのジョブが全く動かない」といった状況を効果的に防止できます。
運用負荷の軽減
- 管理者が「ジョブが停止している」「キューに大量のジョブがある」といったトラブル対応に追われることが減少します。
- ルールが明確になるため、利用者間での無用なトラブル防止にもつながります。
計画的な利用促進
- 利用者は「自分のアカウントでは一度に何件までジョブを流せるか」を意識してジョブ投入を行うようになります。
- 投入ジョブをまとめたり、依存関係を整理したりといった工夫を促すことで、より効率的な計算資源の利用につながります。
では、具体的な設定例と動作を見てみましょう。
Account「maint」に対してMaxJobs=6、MaxSubmit=6を設定し、この「maint」アカウントに所属するUser「aoki」に設定がどのように反映されるかを考えます。
# sacctmgr show Association format=Cluster,Account,User,MaxJobs,MaxSubmit
Cluster Account User MaxJobs MaxSubmit
---------- ---------- ---------- ------- ---------
cluster root
cluster root root
cluster maint 3 6
cluster maint aoki 3 6
上記のように、User「aoki」は最大で3ジョブを同時に実行でき、6ジョブまでキューに投入できる設定になっています。
ここで最大8ジョブを同時実行できる計算ノードへ、User「aoki」でジョブを連続で8回投入してみます。
# sbatch --partition=cpu-P testjob.sh
同時投入数が6ジョブに制限されているため(MaxSubmit=6)、7ジョブ目を実行すると以下のエラーメッセージが表示され、ジョブを投入できません。
# sbatch --partition=cpu-P testjob.sh
sbatch: error: AssocMaxSubmitJobLimit
sbatch: error: Batch job submission failed: Job violates accounting/QOS policy (job submit limit, user's size and/or time limits)
ジョブの実行状況は以下の通り、同時実行数が3ジョブ、実行中のジョブも含めて同時投入数が6ジョブとなります。
# squeue --federation
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
67109100 cpu-P testjob. oga PD 0:00 1 (AssocMaxJobsLimit)
67109099 cpu-P testjob. oga PD 0:00 1 (AssocMaxJobsLimit)
67109098 cpu-P testjob. oga PD 0:00 1 (AssocMaxJobsLimit)
67109097 cpu-P testjob. oga R 0:05 1 com1
67109096 cpu-P testjob. oga R 0:06 1 com1
67109095 cpu-P testjob. oga R 0:09 1 com1
PD(Pending)状態のジョブには(AssocMaxJobsLimit)と表示され、MaxJobsの制限によって実行が保留されていることがわかります。
まとめ
今回は、Slurm環境におけるMaxJobsとMaxSubmitの設定が、システムの安定性確保と利用者間の公平な資源配分にいかに重要かをご紹介しました。
これらの設定を適切に行うことで、無制限なジョブ投入によるシステム負荷の増大や、特定のユーザーによる資源独占を防ぎ、クラスター運用をよりスムーズに、そして効率的に行うことができます。
私たちライフマティックス株式会社では、このようなSlurmの複雑な設定や運用でお困りのお客様向けに、Slurmの保守サービスをご提供しております。
お客様の計算環境を最大限に活用できるよう、専門のエンジニアが強力にサポートいたしますので、ぜひお気軽にご相談ください。
このブログ記事が、皆さんの研究や開発を加速させる一助となれば幸いです!