Deploy slurm on ubuntu 18.04

黃馨平
Jackycsie
Published in
9 min readMar 11, 2020

因工作需求,開始研究 slurm,那什麼是 slurm 呢 ? 他是一個跨平台的流程管理系統,其主要的功能其實只有一個就是 FIFO,那下面是介紹如何透過兩台以上的 machine 將 slurm 建立起來。

環境配置

Controller Node

  • jacky97

Compute Node

  • jacky98

因機器數量有限就拿 2 台做實驗吧。

Tips:

  • 若是可以先將 ssh 設定為輸入 ip or hostname 就可以登入較佳。
  • 目前自己實測 slurm 的版本必須相同,另外也是使用相同的 Ubuntu 18.04,不同的 OS version,盡量改成相同的 slurm tool version。
  • 在未來的 slurm.conf 與 munge 的 key 都是所有的 machine 都要有相同的一份,並且啟動與關閉時,確保每一台 machine 都有相同 state,較不容易出錯。

Install Munge ( every node, machine)

MUNGE is an authentication service for creating and validating credentials. It is designed to be highly scalable for use in an HPC cluster environment. It allows a process to authenticate the UID and GID of another local or remote process within a group of hosts having common users and groups. These hosts form a security realm that is defined by a shared cryptographic key. Clients within this security realm can create and validate credentials without the use of root privileges, reserved ports, or platform-specific methods.

  • Download munge
wget https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz
  • 解壓縮, install
tar xJf munge-0.5.14.tar.xz \
&& cd munge-0.5.14 \
&& ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--runstatedir=/run \
&& make \
&& make check \
&& sudo make install
  • 這步非常的重要,首先我們先在 controller node, create key
    然後將 key 複製到每一個 node 的資料夾。
jacky97: create-munge-key
  • 複製 key 到每一個 node 上,我們這邊是透過 scp 的方式。
jacky97: scp /etc/munge/munge.key root@jacky98:/etc/munge/
  • 接著在每一個 node 上啟動 munge
/etc/init.d/munge start
  • 啟動成功後,來驗證一下本機是否成功使用 munge。
jacky97: munge -n | unmungeSTATUS:           Success (0)
ENCODE_HOST: jacky97 (127.0.1.1)
ENCODE_TIME: 2020-03-11 14:09:18 +0800 (1583906958)
DECODE_TIME: 2020-03-11 14:09:18 +0800 (1583906958)
TTL: 300
CIPHER: aes128 (4)
MAC: sha256 (5)
ZIP: none (0)
UID: root (0)
GID: root (0)
LENGTH: 0
  • 接著驗證一下 compute node (jacky98)
jacky97: munge -n | ssh jacky98 unmunge
STATUS: Success (0)
ENCODE_HOST: jacky98 (127.0.1.1)
ENCODE_TIME: 2020-03-11 14:11:20 +0800 (1583907080)
DECODE_TIME: 2020-03-11 14:11:21 +0800 (1583907081)
TTL: 300
CIPHER: aes128 (4)
MAC: sha256 (5)
ZIP: none (0)
UID: root (0)
GID: root (0)
LENGTH: 0

正常的模式應該要每一個 node 都可以驗證到另一個 node ,才合理。

Install slurm

安裝 slurm

sudo apt update -y
sudo apt install slurm-wlm slurm-wlm-doc -y
  • 安裝完成後 check slurm 在每一個 node 保持一致。
jacky97: slurmd -V
slurm-wlm 17.11.2
  • 透過 slurmd -C 指令了解這個 node 的硬體配置。
jacky97: slurmd -C
NodeName=jacky97 CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=8 ThreadsPerCore=2 RealMemory=128900
UpTime=0-04:46:35
  • 設定 slurm configure

設定 config 有兩種方式:

  1. 透過 官方提供的 https://slurm.schedmd.com/configurator.html ,選擇你想要的內容案送出就會有 slurm.conf ,接著 copy 到每一個 node 就可以了。
  2. 使用自己的 config,然後在每一個 node 上放入 slurm.conf。放入的位置是 /etc/slurm-llnl/ 。
  • 這裡要注意的地方在 ControlMachine 就是 control node 設你的 hostname, NodeName,有幾個 control node 就設幾個 Node name,最後最重要的是 PartitionName 的 Nodes 必須把想要 run 的 node 都寫進去,不然會偵測不到。
  • 與配置文件對應,創建相應的目錄和權限設置
rm -rf  /var/spool/slurm-llnl
mkdir /var/spool/slurm-llnl
chown -R slurm.slurm /var/spool/slurm-llnl
rm -rf /var/run/slurm-llnl/
mkdir /var/run/slurm-llnl/
chown -R slurm.slurm /var/run/slurm-llnl/
sudo mkdir -p /opt/slurm
sudo chmod -Rf 777 /opt/slurm
cd /opt/slurm
touch acct
touch jobcomp
  • 啟動和設置開機自啟
systemctl start slurmd
systemctl enable slurmd
systemctl start slurmctld
systemctl enable slurmctld
  • Check 目前 slurm 的狀態
jacky97: sinfoPARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug* up infinite 2 idle jacky[97-98]
  • slurm 關閉
systemctl stop slurmd
systemctl disable slurmd
systemctl stop slurmctld
systemctl disable slurmctld
  • Slurm FIFO Experiment

執行 Slurm 可以透過三種方法,最常用的是 sbatch, srun, salloc,後面可以接 shell script, command 都可以。

sbatch bwa_script.sh使用下面 command 可以知道每一個 command 的 CPU 使用量
squeue -o"%.7i %.9P %.8j %.8u %.2t %.10M %.6D %C"

在這裡可以看到,當平常我們使用 slurm 時,check squeue他的狀態,納線圖就可以知道他的狀態。

  • JOBID : 目前您的 job 排的序位。
  • ST :
    R 代表執行中,
    PD 代表 hold 住 等目前的跑完就換他了。
  • TIME : 表示目前跑了多久。
  • NODELST (REASON) : 代表正在跑的 node 有誰。
jacky97: squeue

若有時候 slurm 出現問題,可以重新啟動 slurm

/etc/init.d/slurmd stop/etc/init.d/slurmd startclean

參考文獻

  1. Deploy slurm on Ubuntu 18.04 (single machine).

2. Multiple server deploy (website).

3. Ubuntu 18.04/Mint 19 单机安装Slurm.

4. Munge 安裝檔.

5. 超完整 slurm 介紹,不推不行 (website).

6. Slurm 中文官方網站 (website).

7.Slurm 英文官方網站 (website).

8. Slrum 框架介紹圖 (website).

9. 簡單小筆記 (website).

10. Partition introduce (website).

11. slurm execute job log record (website).

這篇專注在安裝跟基礎教學,非常推薦看第 5 個連結,非常容易懂,若有問題可以在下方留言,或者想要看甚麼類型的 Demo 都可以 17 討論喔。

--

--

黃馨平
Jackycsie

閱讀本是尋常事,繁華靜處遇知音