Slurm Workload Manager(旧称:Simple Linux Utility for Resource Management、SLURM)またはSlurmは、LinuxおよびUnix系のカーネルのためのフリーでオープンソースなジョブスケジューラーである。世界中の多くのスーパーコンピューターやコンピュータークラスタで使用されている。Slurmは3つの主要な機能を提供している。1番目は、計算を実行するユーザーに対してリソース(コンピューターノード)への排他的・非排他的なアクセスを割り当てる機能である。2番目は、割り当てられたノードの集合上でのジョブの開始、実行、モニタリング(MPIなどの並列ジョブでよく使用される)を行う機能である。3番目は、待機中のジョブのキューを管理することで、リソースへの競合を解決する機能である。

Slurmは、TOP500の約60%のスーパーコンピューターでワークロードマネージャーとして使用されている。これには、2016年まで世界最速だったTianhe-2が含まれる。

Slurmは、Hilbert curve schedulingまたはFat treeネットワークトポロジーに基づいた最良あてはめアルゴリズムを使用することで、並列コンピューターにおけるタスク割当の局所性を最適化している。

## 歴史

Slurmは当初、主にローレンス・リバモア国立研究所、SchedMD、Linux NetworX、ヒューレット・パッカード、Groupe Bullによる共同開発のフリーソフトウェアリソースマネージャーとして始まった。クローズドソースのQuadrics RMSにインスパイアされており、似たような構文を持っている。名前はフューチュラマのFry and the Slurm Factoryに由来する。世界中の100人以上の開発者がプロジェクトに貢献している。以来、多くの巨大なコンピューターセンターの要求を満たす性能を持つ、洗練されたバッチシステムとして進化してきた。

2017年11月 (2017-11)現在、世界で最も高性能なコンピューターを表すTOP500リストにおいて、Slurmが上位10位中6個のシステムでワークロードマネージャーとして使用されている。これには、10,649,600個の計算コアを持つ第1位のSunway TaihuLightも含まれる。

## 構造

Slurmは高度にモジュール化された設計になっており、約100個のオプションプラグインがある。最小構成であれば、数分でインストールと設定が可能である。より洗練された設定を行うことで、アカウントのデータベースとの統合、リソースの制限の管理、ワークロードの優先付けなどが使用できる。

## 特徴的な機能

Slurmの特徴的な機能としては、以下のような点が挙げられる。

- 単一障害点が存在せず、バックアップデーモンを持ち、耐障害性のあるジョブオプションが設定できる
- 極めてスケーラブルである(たとえば、IBM Sequoiaの100,000ソケット上で最大100,000の独立したジョブをスケジューリングできた)
- ハイパフォーマンス(最大で、ジョブ登録が1,000ジョブ/秒、ジョブ実行が600ジョブ/秒)
- フリーでオープンソースのソフトウェアである(GNU General Public License)
- 約100のプラグインを使用することで高度にカスタマイズが可能
- 階層的なバンクアカウントを用いたフェアな共有スケジューリング
- プリエンプティブ・ギャングスケジューリングの設定(並列ジョブの時間をスライスできる)
- アカウントと設定をデータベースと統合
- ネットワークトポロジーおよびノード上のトポロジー(ソケット、コア、ハイパースレッディング)に最適化したリソースの割り当て
- 発展的なリソースの予約
- アイドルノードの電源をオフにすることができる
- 各ジョブごとに異なるオペレーティングシステムをブートすることができる
- 一般のリソース(例:GPU)に対してスケジューリングが可能
- リアルタイムのタスクレベルでの統計(UPUやメモリの使用量が高いタスクを特定できる)
- ユーザーまたはバンクアカウントごとのリソース制限
- ジョブごとの消費電力の集計
- IBM Parallel Environment(PE/POE)のサポート
- ジョブアレイのサポート
- ジョブのプロファイリング(CPUの使用量、メモリの使用量、消費電力量、ネットワークおよびファイルシステムの使用量の定期的なサンプリング)
- さまざまな指標に基づいた洗練されたジョブ優先度決定アルゴリズム
- MapReduce+のサポート

以下の機能は、2014年11月にリリースされたSlurm14.11の機能である。

- ジョブアレイデータ構造とスケーラビリティーの改善
- heterogeneousな汎用のリソースのサポート
- CPU governorを設定するユーザーオプションの追加
- exitの値に基づいた自動ジョブリキューポリシー
- レポートAPIを使用した、ユーザー・タスクの種類・回数・消費時間を取得
- 通信ゲートウェイノードのスケーラビリティーの向上

## 対応プラットフォーム

Slurmは主にLinuxディストリビューションで動作するように開発されているが、少数のPOSIXベースのオペレーティングシステム、BSDs(FreeBSD、NetBSDおよびOpenBSD)もサポートしている。Slurmは以下のようなユニークなアーキテクチャーもサポートする。

- 20 petaflop IBM Sequoiaを含むIBM BlueGene/Qモデル
- Cray XT、XE、Cascade
- Tianhe-2 - 32,000個のIntel Ivy Bridgeと48,000 Intel Xeon Phiを使用した、合計3,100,000のコアを持つ33.9ペタフロップスのシステム
- IBM Parallel Environment
- Anton

## ライセンス

SlurmはGNU General Public License V2の元で使用できる。

## 商用サポート

2010年、Slurmの開発者たちはSchedMDを立ち上げ、標準ソースのメンテナンス、開発リソースの提供、レベル3の商用サポート、およびトレーニングサービスを提供している。商用サポートは、Bright Computing、Bull、Cray、およびScience + Computingからも提供されている。

## SLURMコマンド

以下のリストは、SLURMで使用できる便利なコマンドのリストである。いくつかのコマンドはCCRで開発され、ユーザーがレポートを簡単に作成できるようになっている。

これらのコマンドの使用方法の情報を確認するには、--helpコマンドを使用すること(例: sinfo --help)

linuxコマンド「man」を使用すると、これらのコマンドの大部分に関する詳細な情報を確認できる(例: man sinfo)

コマンドの太字になっている部分は、ユーザーが入力する情報である。ブラケット部分はオプションであることを表している。

| LiSLURM | slurmhelp |
| --- | --- |
| [View information about SLURM nodes & partitions  ] | sinfo [-p partition\_name or -M cluster\_name] |
| [List example SLURM scripts | ls -p /util/slurm-scripts less |
| [Submit a job script for later execution | sbatch 'script-file |
| [Cancel a pending or running job | scancel jobid |
| [Check the state of a user’s jobs | squeue --user=username |
| [Allocate compute nodes for interactive use | salloc |
| [Run a command on allocated compute nodes | srun |
| [Display node information | snodes [node cluster/partition state] |
| [Launch an interactive job | fisbatch [various sbatch options] |
| [List priorities of queued jobs | sranks |
| [Get the efficiency of a running job | sueff user-name |
| [Get SLURM accounting information for a user’s jobs from start date to now | suacct start-date user-name |
| [Get SLURM accounting and node information for a job | slist jobid |
| [Get resource usage and accounting information for a user’s jobs from start date to now | slogs start-date user-list |
| [Get estimated starting times for queued jobs | stimes [various squeue options] |
| [Monitor performance of a SLURM job | /util/ccrjobvis/slurmjobvis jobid |