6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KCCSデジタルソリューションAdvent Calendar 2024

Day 3

LLM時代に必須!?トレーニングジョブを管理するSlurmのセットアップ手順

Last updated at Posted at 2024-12-27

はじめに

こんにちは、京セラコミュニケーションシステム 川村(@kccs_takahiro-kawamura)です。

皆さんはSlurmについてご存知ですか?
強力なGPUマシンでLLMをトレーニングしたり、スパコンで大規模な演算処理を行う際にそのジョブを管理するソフトウェアです。
今回は、Slurmのセットアップ手順と注意すべき点を記載します。

本記事は2024年12月ごろに作成しております。よって、引用している文章などはこの時点での最新となります。ご了承ください。

本記事の対象者

  • Slurmでジョブ管理を検討している方

本記事におけるサーバー構成

以下の図のようなサーバー構成を前提に記載します。
また、サーバーのOSはUbuntu 24.04LTSを使用します。
architecture.png

管理ノード

Slurmのクラスターとジョブを管理するサーバーです。
slurmctldが動作します。

計算ノード

Slurmのジョブを実行するサーバーです。
slurmdが動作します。

管理ノードのセットアップ

ここからは管理ノードのセットアップ手順を記載します。

1. 関連パッケージのインストール

まずは、aptを更新します。

$ sudo apt update

続いて、パッケージをインストールします。
mailutilsのインストール後にPostfixの設定が出るため必要に応じて設定してください。
No Configurationを選択してもSlurmは動作します。

$ sudo apt install -y build-essential mailutils

2. mungeのインストール

Slurmの各ノード間の安全な認証と認可を提供するシステムです。
各ノードに同じ鍵ファイルを配置することで安全なノード間通信を実現します。
インストールするパッケージは2つあります。

$ sudo apt install -y munge libmunge-dev

3. mungeの鍵ファイル生成

Slurm間の通信で使用する鍵ファイルを生成します。
この鍵ファイルは何かしらの方法で計算ノードに共有する必要があります。

$ sudo dd if=/dev/random of=/etc/munge/munge.key bs=1024 count=1
$ sudo chown munge:munge /etc/munge/munge.key
$ sudo chmod 400 /etc/munge/munge.key
$ sudo systemctld restart munge

4. slurmのインストール

Slurmは、オフィシャルサイトからダウンロードします。
この時、ダウンロードしたファイルを配置する場所は適宜変更してください。
今回はホームディレクトリにダウンロードします。
また、ダウンロードするSlurmのバージョン等はこちらから確認してご自身の環境にあったものをダウンロードください。

$ cd ~
$ wget https://download.schedmd.com/slurm/slurm-24.05.3.tar.bz2

ダウンロードしたファイルを展開します。

$ tar -jxvf slurm-24.05.3.tar.bz2
$ cd ~/slurm-24.05.3

Slurmをインストールします。

$ ./configure
$ make
$ sudo make install

5. slurmの設定ファイル作成

設定ファイルは公式サイトに作成できるツールがあります。
簡易バージョンフルバージョンがあります。
設定は環境に合わせて行っていただく必要があるため、今回は簡易バージョンで設定ファイルを生成した上でいくつか設定項目を追加します。
設定ファイルは、/usr/local/etc/slurm.confに配置してください。

# slurm.conf file generated by configurator easy.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ClusterName=slurm-cluster
SlurmctldHost=controller-node
#
MailProg=/bin/mail
#MpiDefault=
#MpiParams=ports=#-#
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
#SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
#SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=slurm
#SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
#SwitchType=
TaskPlugin=task/affinity,task/cgroup
#
#
# TIMERS
#KillWait=30
#MinJobAge=300
#SlurmctldTimeout=120
#SlurmdTimeout=300
#
#
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
#
#
# LOGGING AND ACCOUNTING
#AccountingStorageType=
#JobAcctGatherFrequency=30
#JobAcctGatherType=
#SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
#SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
#
# AUTHENTICATION
AuthType = auth/munge
CredType = cred/munge
#
# COMPUTE NODES
NodeName=compute-node-01 CPUs=2 State=UNKNOWN
NodeName=compute-node-02 CPUs=2 State=UNKNOWN
PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP

いくつの項目をピックアップして説明します。

  • SlurmctldHost: 管理ノードのホスト名を記載します。
  • AuthType: Slurmの認証方式です。
  • CredType: 認証で使用する鍵ファイルの種類です。
  • NodeName: 計算ノードのホスト名を記載します。続くCPUsは実際のHWに合わせて記載します。(※1)
  • PartitionName: パーティション(計算ノードのグループ)の名前です。パーティションに追加する計算ノードをNodesに記載します。

※1: 管理ノードと計算ノードで名前解決できる必要があります。/etc/hostsに記載するなど環境に合わせて対応してください。

6. slurmのデーモン化

サーバー起動時にサービスが起動するようにします。

$ cd ~/slurm-24.05.3
$ sudo cp /etc/slurmctld.service /etc/systemd/system
$ sudo systemctl enable slurmctld.service

7. slurmユーザーの作成

slurmユーザーを作成して、sudoグループへの追加とsyslogグループへの追加をします。

$ sudo adduser slurm
$ sudo gpasswd -a slurm sudo
$ sudo usermod -aG syslog slurm

8. 必要なディレクトリの作成と権限変更

$ sudo mkdir -p /var/spool/slurmctld
$ sudo chown -R slurm:slurm /var/spool/slurmctld
$ sudo chmod -R 750 /var/spool/slurmctld
$ sudo chown slurm:slurm /usr/local/etc/slurm.conf
$ sudo chmod 644 /usr/local/etc/slurm.conf

9. slurmctldの起動

$ sudo systemctl start slurmctld
$ sudo systemctl status slurmctld

ステータスがActive: active (running)になっていたらOKです。

● slurmctld.service - Slurm controller daemon
     Loaded: loaded (/etc/systemd/system/slurmctld.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-11-29 02:42:36 UTC; 6s ago
   Main PID: 86552 (slurmctld)
      Tasks: 14 (limit: 4680)
     Memory: 4.3M
     CGroup: /system.slice/slurmctld.service
             ├─86552 /usr/local/sbin/slurmctld --systemd
             └─86554 slurmctld: slurmscriptd

管理ノード側のセットアップはひとまずここまでです。

計算ノードのセットアップ

続いて計算ノードのセットアップ手順を記載します。

1. 関連パッケージのインストール

まずは、aptを更新します。

$ sudo apt update

続いて、パッケージをインストールします。
Postfixの設定が出るため必要に応じて設定してください。

$ sudo apt install -y build-essential mailutils libdbus-1-dev

2. mungeのインストール

同様にインストールします。

$ sudo apt install -y munge libmunge-dev

3. mungeの鍵ファイル生成

管理ノードで生成した鍵ファイルと同じものを配置する必要があります。
今回は、scpを使用して管理ノードから計算ノードにコピーすることにします。

管理ノードで実行するコマンド

$ sudo scp /etc/munge/munge.key compute-node-01:/etc/munge/

計算ノードで実行するコマンド

$ sudo chown munge:munge /etc/munge/munge.key
$ sudo chmod 400 /etc/munge/munge.key
$ sudo systemctld restart munge

4. slurmのインストール

同様にインストールします。

$ cd ~
$ wget https://download.schedmd.com/slurm/slurm-24.05.3.tar.bz2

ダウンロードしたファイルを展開します。

$ tar -jxvf slurm-24.05.3.tar.bz2
$ cd ~/slurm-24.05.3

Slurmをインストールします。

$ ./configure
$ make
$ sudo make install

5. slurmの設定ファイル作成

mungeの鍵ファイル同様にこちらも管理ノードで作成した設定ファイルと同じものを計算ノードに配置する必要があります。
こちらも今回はscpを使用してコピーします。

管理ノードで実行するコマンド

$ sudo scp /usr/local/etc/slurm.conf compute-node-01:/usr/local/etc

計算ノードで実行するコマンド

権限変更は後でまとめて行うため、ここでは実行するコマンドはありません。

6. slurmのデーモン化

サーバー起動時にサービスが起動するようにします。

$ cd ~/slurm-24.05.3
$ sudo cp /etc/slurmd.service /etc/systemd/system
$ sudo systemctl enable slurmd.service

7. slurmユーザーの作成

slurmユーザーを作成して、sudoグループへの追加とsyslogグループへの追加をします。

$ sudo adduser slurm
$ sudo gpasswd -a slurm sudo
$ sudo usermod -aG syslog slurm

ここで作成したslurmユーザーのUIDと管理ノードのUIDが同じである必要があります。
管理ノードと計算ノードで次のコマンドを実行することでslurmユーザーのUIDを確認できます。

$ sudo cat /etc/passwd | awk -F ':' '{printf "%4s" " " "%-20s\n", $3, $1}'| sort -n

UIDが異なっていた場合は、計算ノードで次のコマンドを実行し、UIDを変更します。

$ sudo usermod -u [管理ノードのslurmユーザーのUID] slurm

8. 必要なディレクトリの作成と権限変更

$ sudo mkdir -p /var/spool/slurmd
$ sudo chown -R slurm:slurm /var/spool/slurmd
$ sudo chmod -R 750 /var/spool/slurmd
$ sudo chown slurm:slurm /usr/local/etc/slurm.conf
$ sudo chmod 644 /usr/local/etc/slurm.conf

9. slurmctldの起動

$ sudo systemctl start slurmd
$ sudo systemctl status slurmd

ステータスがActive: active (running)になっていたらOKです。

● slurmd.service - Slurm node daemon
     Loaded: loaded (/etc/systemd/system/slurmd.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-11-29 03:42:36 UTC; 6s ago
   Main PID: 86553 (slurmd)
      Tasks: 1 (limit: 4680)
     Memory: 2.2M
     CGroup: /system.slice/slurmd.service
             └─86553 /usr/local/sbin/slurmd --systemd

以上で、管理ノードと計算ノードのセットアップが完了です。

まとめ

今回は、Slurmのセットアップ手順と注意点を記載しました。
鍵ファイルや設定ファイルがそれぞれのノードで内容が異なっていたり、計算ノードのリソースが実際のHWと異なる記載になっている場合はエラーになりますのでご注意ください。
次回は、このセットアップした環境でジョブを実行する手順と注意点について記載いたします。

次回の記事もお楽しみに!

おしらせ

弊社X(旧:Twitter)では、Qiita投稿に関する情報や各種セミナー情報をお届けしております。情報収集や学びの場を求める皆さん!ぜひフォローしていただき、最新情報を手に入れてください😄

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?