slurm [1ノードでの設定方法]

slurmとは、スパコンなどでよく使用されているオープンソースのジョブスケジューラです。スパコンと聞くと、自分のPCに導入するのはオーバースペックなのではないかと思われる方が多いと思いますが、slurm自体はクラスタの規模に合わせた柔軟なスケーリングができるソフトウェアなので、コア数の多いマシンやマルチGPUのマシンを手に入れた人は使ってみてもいいと思います。

slurmのインストール方法

slurmのソフトウェアはgithubで配布されています

Slurmをaptを利用してインストールすることもできますが、長期的にはソースコードからのビルドが推奨されます。Slurmを導入するほど大規模な計算資源を有している場合、将来的にマルチノードで運用する可能性が高いと考えられます。その際、Slurmのバージョンを全ノードで揃えることが重要となります。

apt経由でのソフトウェア配布では、古いバージョンの配布が停止されることが一般的です。そのため、将来的にノードを追加する場合、古いバージョンが提供されず、全ノードでSlurmのバージョンを揃えられない可能性があります。

一方、GitHub経由でソースコードを取得する場合は、全てのバージョンの履歴が残っているため、古いバージョンを含む任意のバージョンをビルドしてインストールすることができます。これにより、全ノードでSlurmのバージョンを確実に揃えることができます。そのような背景を踏まえ、本記事では、単一ノードでslurmを運用するために必要なソフトウェアとその設定ファイルの編集方法について以下の順番で説明します

  1. slurmのインストール方法についての説明
  2. slurmを運用するために必要な設定ファイルの編集方法

Step1. slurmのダウンロードとビルド

まず、slurmをインストール方法について説明します。slurmを動かすためには、依存関係にあるソフトウェアである

  1. munge; ノード間の認証に使用するアプリケーション
  2. インストール方法は、この記事を参照してください
  3. dbus: プロセス間通信に使用するアプリケーション
  4. 後述しますが、aptを使用してインストールします
  5. mpi: 並列計算に使用
  6. インストール方法は、この記事を参照してください

これらの依存関係にあるソフトウェアをインストールするためには、下記のスクリプトを実行します:

# 依存関係のあるソフトウェアをダウンロード
# mungeは、この段階でインストールしておく
sudo apt-get install autoconf automake build-essential net-tools gcc g++ gfortran libdbus-1-dev 
# slurmをclone
git clone https://github.com/SchedMD/slurm
cd slurm
# -----------
# prefixには、使用するmpiライブラリが配置している場所を探す
sudo ./configure --with-slurm --with-pmi --prefix="/usr/local/openmpi"
# mpiを指定しないでbuildすることもでき、その場合は下のコマンドを実行:
# sudo ./configure
# ビルドしてインストールする
sudo make
sudo make install

これでslurmのソフトウェア自体のインストールは完了です。次に、slurmの設定ファイルの編集方法について説明します。

Step2. slurmの設定ファイルの編集方法についての説明

slurmの管理者が設定する必要があるファイルは3つ存在します

  1. slurm.conf: slurmのジョブ管理の形式やノードの情報を入力するファイル
  2. slurmctld.service: slurm.confの内容に応じて、編集する場合がある
  3. cgroup.conf: ユーザーグループごとにジョブのリソース割り当てを管理するための設定ファイル

to be written...

# 必要なディレクトリを作成する
sudo mkdir -p /var/lib/slurm
sudo mkdir -p /var/lib/slurm/spool
sudo mkdir -p /var/log/slurm
sudo mkdir -p /var/spool/slurm
sudo mkdir -p /var/spool/slurm/ctld
sudo mkdir -p /var/spool/slurm/d
sudo mkdir -p /var/spool/slurmd
# ポートを開放する
sudo ufw allow 6817
sudo ufw allow 6818
sudo ufw allow 7321
# move edited slurm.conf
sudo cp ~/slurm/etc/slurm.conf /usr/local/etc/slurm.conf
# for master node
sudo cp ~/slurm/etc/slurmctld.service /etc/systemd/system
sudo cp ~/slurm/etc/slurmd.service /etc/systemd/system
# for computation node
sudo cp ~/slurm/etc/slurm.conf /usr/local/etc/slurm.conf
sudo cp ~/slurm/etc/cgroup.conf.example /usr/local/etc/cgroup.conf
#
sudo systemctl enable slurmctld.service
sudo systemctl enable slurmd.service
sudo systemctl start slurmctld
sudo systemctl start slurmd