slurm集群安装与踩坑详解

管理员部署 slurm 单机版或者集群版,单机版方便在自己电脑上直接提交一堆程序自动排队,无需等待一个计算完再计算另一个。

对于 ubuntu21.10 直接使用 apt 安装 slurm、openmpi 测试很完美,但是对于 ubuntu20.04 安装以后 mpi 有问题,后采用源码编译安装 slurmopenmpilammps,很完美!

由于服务器很多时候系统版本很 old,源安装不靠谱,推荐源码编译,我觉得能遇到的坑我遇到的差不多了……

  • slurm: 21.08.5
  • openmpi: 4.1.2
  • lammps: 2021 年 12 月 25 日 git 版

资料

slurm 初步了解

一般情况下,一台服务器(master)即主节点用来登录,提交程序,另外一堆服务器(node1 node2 node3 ... nodex ..)用来计算,这些服务器需要有

  • 一个共同的 linux 账户管理系统,方便快速创建 linux 用户,暂时不管这个(可以用NIS协议:ypbind,yp-tools),
  • 需要时间同步,暂时也不管这个(可以用网络时间协议: ntp)
  • 需要有一块硬盘在每一个服务器上都能访问上面的数据,方便计算,暂时也不管这个(可以用网络文件系统 NFS)

因为下面都是以单机(就只有一台电脑,既可以提交程序,也可以计算程序)为例,其他先不管

slurm 一般意义上包含 3 个程序

  • slurmdbd: 这个只在主节点(master)上运行,用来同步各个节点之间的数据,一般情况下依赖于 mysql 处理数据即可
  • slurmctld: 这也只在 master 上运行,用来控制其他计算节点
  • slurmd: 这个只在计算节点上运行,同时会把一些数据传递到主节点上。

如果是单机版,上面三个程序都要在这一台电脑上运行,看了上面的,再看官网的这个图大概就明白了

图解slurm

图可见官网:这里

除了这些,我们还需要一个 slurm 内部用户权限信息管理的软件 munge,如果需要并行,尤其是依赖于 openmpi 的并行程序,比如 lammps,我们必须在编译 slurm 时启动 pmi 插件,都 2021 年了,一般用 pmix (pmix_v3) 标准即可,这个标准 slurm 源码安装默认不支持

源安装

虽然不靠谱,但是我觉得以后会靠谱的

不靠谱的原因是,ubuntu2004slurm19.08,不支持 mpix_v4,所以用 apt 直接安装的 openmpi(默认是 4.0 的版本)编译 lammps,在 surm 里使用时会报错

但是,ubuntu21.10slurmopenmpi4 支持很好,为了深入了解 slurmmpilammps,我认为还是选择源码安装,这里的源安装留个记录,因为没有教程的情况下,这个小幅度的成功,有利于继续

至于怎么知道你安装的 slurm 支持哪种 mpi,安装以后输入 srun --mpi=list 即可去,切记 openmpi 的版本与 slurm 支持的 mpi 完全符合

安装软件

对于 ubuntu 来说,centos 一般情况把 apt 换成 yum 就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装用户权限管理 munge
sudo apt install munge
# 安装slurmdbd的数据库支持mysql,目前最新版一般都是mysql8了
sudo apt install mysql-server

# 安装slurm基础插件
# 不同系统版本不一样,所以最好是先搜索一下,注意 slurm/impish 0.4.3-2build4 这个软件不是slurm!
sudo apt search slurm | grep slurm

# 我们只需安装 `slurm-wlm` 即可,除了slurmdbd其他几个都会被自动安装
# 但是不同系统版本不一样,这个名字都可能不一样,对于ubuntu20.04和ubuntu21.10都是这个
# 但是版本也不一样,ubuntu20.04是slurm19,ubuntu21.04是slurm20,但是现在最新版是slurm21

sudo apt install slurm-wlm slurmdbd
# 注意,包含 `emulator` 的那两个不要安装,否则会报错

这就安装完了,需要配置 数据库 和 slurm.conf 以及 slurmdbd.conf 两个文件,在后面的源码编译安装中会详细介绍

源码编译安装

我都单独安装在 /usr/local 里面了,每个软件单独创建文件夹,没有撒在这个目录里,因此需要设置环境变量

我准备在 ~/code/slurm_data 这个文件夹里编译

你怎么解压下载的源码都行,我用了 终端工具 oh-my-zsh 与 p10k 国内镜像安装 的解压插件直接解压

1
x 压缩包文件名

要注意,github 下载的这个 release 与 git clone 源码不一样,这个不用 auto-tool 那一步,直接三步走编译安装即可

依赖

对于ubuntu20.04依赖如下,其他的根据报错,自己修改

1
sudo -E apt-get install git build-essential libssl-dev mysql-client mysql-server libmysql++-dev ffmpeg python3-pip openssh-server cmake -y

其中没有 libmysql++-dev slurm是没法使用mysql数据库的

对于 opensuse 系统数据库默认为 mariadb 所以需要的库为 libmariadb-devel

我们需要

  • mysql-server libmysql

  • munge

  • pmix

    但是当前slurm-21.08.5 不支持最新版 pmix,需要这个pmix-3.2.3

    怎么知道支持哪个?直接最新版,如果后面编译不支持,会有报错,这个在官网有说明,但是不在管理员文档里,在用户文档

    1
    2
    checking for pmix installation...
    configure: WARNING: unable to locate pmix installation

安装mysql

这个各个系统更新都比较及时,直接安装吧

1
sudo apt install mysql-server

但是注意这个还不够,编译slurm时会找不到,

1
sudo apt search libmysql | grep lib

一般有一个类似这个的

1
2
libmysql++-dev/impish,now 3.2.5-2 amd64 [已安装]
MySQL C++ library bindings (development)

安装上

1
sudo apt install libmysql++-dev

编译 munge

去 github 下载,Releases · dun/munge

https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd ~/code/slurm_data

wget https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz

x munge-0.5.14.tar.xz

cd munge-0.5.14

# 安装目录 /usr/local/munge-0.5.14
./configure --prefix=/usr/local/munge-0.5.14

# -j 指的是用所有cpu核心编译
make -j

# 安装到刚才的目录
sudo make install

# 设置一个版本通用的连接
cd /usr/local && sudo ln -s munge-0.5.14 munge && cd - && cd ../

添加环境变量

1
sudo vim /etc/profile.d/munge.sh

添加

1
2
3
export MUNGE_HOME=/usr/local/munge
export PATH=$MUNGE_HOME/bin:$PATH
export PATH=$MUNGE_HOME/sbin:$PATH

重新打开 bash 以后生效

编译 pmix

它又需要两个东西,注意版本号

  • hwloc
  • libevent

为什么我知道呢,因为直接会报错,所以先编译他们

pmix 也是去 github 找的,前面介绍了,slurm-21.08.5 只能用 pmix3

编译 hwloc

Releases · open-mpi/hwloc,我直接用的最新的,其实也是 2019 年的,下载这个文件 hwloc-2.1.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载 hwloc,根据前面的介绍,去github找的
wget https://github.com/open-mpi/hwloc/releases/download/hwloc-2.1.0/hwloc-2.1.0.tar.bz2

x hwloc-2.1.0.tar.bz2

cd hwloc-2.1.0

# 安装目录 /usr/local/hwloc-2.1.0
./configure --prefix=/usr/local/hwloc-2.1.0

# -j 指的是用所有cpu核心编译
make -j

# 安装到刚才的目录
sudo make install

# 设置一个版本通用的连接
cd /usr/local && sudo ln -s hwloc-2.1.0 hwloc && cd - && cd ../
编译 libevent

Releases · libevent/libevent,我用的最新的,libevent-2.1.12-stable.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载 libevent,根据前面的介绍,去github找的
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz

x libevent-2.1.12-stable.tar.gz

cd libevent-2.1.12-stable

# 安装目录 /usr/local/libevent-2.1.12
./configure --prefix=/usr/local/libevent-2.1.12

# -j 指的是用所有cpu核心编译
make -j

# 安装到刚才的目录
sudo make install

# 设置一个版本通用的连接
cd /usr/local && sudo ln -s libevent-2.1.12 libevent && cd - && cd ../
最后编译 pmix

去 github 找,Releases · openpmix/openpmix,前面说了,目前 slurm 只能用版本:

https://github.com/openpmix/openpmix/releases/download/v3.2.3/pmix-3.2.3.tar.bz2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载 pmix,根据前面的介绍,去github找的
wget https://github.com/openpmix/openpmix/releases/download/v3.2.3/pmix-3.2.3.tar.bz2

x pmix-3.2.3.tar.bz2

cd pmix-3.2.3

# 必须置顶刚才的两个依赖路径,因为我把他们单独放在一个文件夹了,方便以后更新、删除
./configure --prefix=/usr/local/pmix-3.2.3 --with-libevent=/usr/local/libevent --with-hwloc=/usr/local/hwloc

make -j

sudo make install

cd /usr/local && sudo ln -s pmix-3.2.3 pmix && cd - && cd ../

编译安装 openmpi

为了防止别人用其他方法安装的其他版本的 openmpi,在你的 slurm 里不能使用,你给他们编译好吧,注意必须使用 外部编译,即使用刚才的 pmix 和相关依赖编译安装,还缺少一个 ucx,一会 slurm 也可以用这个

ucx

Releases · openucx/ucx,下载绿色的稳定版,直接下载初步编译的源码:

https://github.com/openucx/ucx/releases/download/v1.11.2/ucx-1.11.2.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下载 ucx,根据前面的介绍,去github找的
wget https://github.com/openucx/ucx/releases/download/v1.11.2/ucx-1.11.2.tar.gz

x ucx-1.11.2.tar.gz

cd ucx-1.11.2

# 必须置顶刚才的两个依赖路径,因为我把他们单独放在一个文件夹了,方便以后更新、删除
# 对于archlinux,报错,最新版已经适配1.12.1
# 旧版可以参考这个解决,https://github.com/openucx/ucx/issues/7955
./configure --prefix=/usr/local/ucx-1.11.2

make -j

sudo make install

cd /usr/local && sudo ln -s ucx-1.11.2 ucx && cd - && cd ../

openmpi

官网下载 最新的稳定版:https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.2.tar.bz2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.2.tar.bz2

x openmpi-4.1.2.tar.bz2

cd openmpi-4.1.2

# 必须置顶刚才的两个依赖路径,因为我把他们单独放在一个文件夹了,方便以后更新、删除
./configure --prefix=/usr/local/openmpi-4.1.2 --with-pmix=/usr/local/pmix --with-ucx=/usr/local/ucx --with-hwloc=/usr/local/hwloc --with-libevent=/usr/local/libevent

make -j

sudo make install

cd /usr/local && sudo ln -s openmpi-4.1.2 openmpi && cd - && cd ../

添加环境变量

1
sudo vim /etc/profile.d/openmpi.sh

添加

1
2
3
export OPENMPI_HOME=/usr/local/openmpi
export PATH=$OPENMPI_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENMPI_HOME/lib:$LD_LIBRARY_PATH

重新打开 bash 以后生效

编译 slurm

官网下载 最新的稳定版:https://download.schedmd.com/slurm/slurm-21.08.5.tar.bz2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载
wget https://download.schedmd.com/slurm/slurm-21.08.5.tar.bz2

x slurm-21.08.5.tar.bz2

cd slurm-21.08.5

# 必须置顶刚才的两个依赖路径,因为我把他们单独放在一个文件夹了,方便以后更新、删除
./configure --prefix=/usr/local/slurm-21.08.5 --with-pmix=/usr/local/pmix --with-munge=/usr/local/munge --with-hwloc=/usr/local/hwloc --with-ucx=/usr/local/ucx

make -j

sudo make install

cd /usr/local && sudo ln -s slurm-21.08.5 slurm && cd - && cd ../

添加环境变量,bash 全局的话可以放在

1
sudo vim /etc/profile.d/slurm.sh

添加

1
2
3
4
5
export SLURM_HOME=/usr/local/slurm
export PATH=$SLURM_HOME/bin:$PATH
export PATH=$SLURM_HOME/sbin:$PATH
export LD_LIBRARY_PATH=$SLURM_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$SLURM_HOME/lib/slurm:$LD_LIBRARY_PATH

连通节点与 master

对于多台服务器需要,单机不需要

每一台服务器都如下

1
2
3
4
5
6
7
8
9
10
11
12
# 如果没有ssh,安装
sudo apt install openssh-server openssh-sftp-server openssh-client

# 如果没有,生成密钥
ssh-keygen

# 添加hosts
sudo echo "ip地址 名字" >> /etc/hosts
# 比如
sudo echo "196.10.10.1 master" >> /etc/hosts
sudo echo "196.10.10.2 node1" >> /etc/hosts
sudo echo "196.10.10.3 node2" >> /etc/hosts

其中 master 可访问 node

在 master 上输入,比如

1
2
3
4
# master免密码访问node1
ssh-copy-id node1
# 初次访问,必须
ssh node1

配置

包含数据库、slurm

配置数据库

注意都是以源码编译安装为例,安装位置都是按照前面的来的

接下来配置 slurmdbd 需要的数据库,这个即使源码安装 slurm 也需要

先修改个东西

1
sudo vim /etc/mysql/my.cnf

vim 会用吧,输入 i 添加下面的

1
2
3
4
[mysqld]
innodb_buffer_pool_size=1024M
innodb_log_file_size=64M
innodb_lock_wait_timeout=900

:wq 保存

1
2
3
4
5
# 然后启动mysql,并设置开机自启,如果只是开: sudo systemctl start mysql
sudo systemctl enable --now mysql

# 进入mysql,默认root的mysql没有密码,不建议设置
sudo mysql

创建 slurm 单独的用户和需要的数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建slurm单独的mysql用户,只本地访问即可,所以密码12345678就可以
create user 'slurm'@'localhost' identified by '12345678';

# 创建基础数据库
create database slurm_acct_db;

# 允许slurm用户访问
grant all on slurm_acct_db.* TO 'slurm'@'localhost';

# 创建另一个,这个不强制,但是建议,如果不创建,后面slurm配置需要改,所以还是创建吧
create database slurm_job_db;

grant all on slurm_job_db.* TO 'slurm'@'localhost';

下面的不要输入,但是有兴趣学习 mysql 可以入门

常用

1
2
3
4
5
6
7
8
9
10
11
12
13
# 删除用户libmariadb-devel
# 查看有哪些数据库
show databases;

# 查看某个数据库的表格
use slurm_acct_db;

# 查看某个表格的杰哥
describe 表格名字;

# 删除数据库和数据表
drop database 数据库名;
drop table 数据表名;

配置 slurmdbd.conf

注意都是以源码编译安装为例,安装位置都是按照前面的来的

详细可以看 官网 slurmdbd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ArchiveEvents=yes
ArchiveJobs=yes
ArchiveResvs=yes
ArchiveSteps=no
ArchiveSuspend=no
ArchiveTXN=no
ArchiveUsage=no
AuthInfo=/usr/local/munge/var/run/munge/munge.socket.2
AuthType=auth/munge
DbdHost=localhost
DebugLevel=info
PurgeEventAfter=1month
PurgeJobAfter=12month
PurgeResvAfter=1month
PurgeStepAfter=1month
PurgeSuspendAfter=1month
PurgeTXNAfter=12month
PurgeUsageAfter=24month
LogFile=/var/log/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
SlurmUser=root
StoragePass=12345678
StorageType=accounting_storage/mysql
StorageUser=slurm
StorageHost=localhost
StoragePort=3306

上面的配置直接复制的官网的,不同版本 slurm 有区别,但是我觉得区别不大,关键有几个点注意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
; 使用munge
AuthType=auth/munge

; munge安装未知
AuthInfo=/usr/local/munge/var/run/munge/munge.socket.2

; 数据库位置,这个就行,因为slurmdbdb只在master上
DbdHost=localhost

; 我们就不要新建用户了,直接root更方便
SlurmUser=root

; 开启数据插件
StorageType=accounting_storage/mysql
; 数据库的新建用户
StorageUser=slurm
; 数据库这个用户的密码
StoragePass=12345678
; 数据库位置在master,也就是本地
StorageHost=localhost
; 数据库默认端口
StoragePort=3306

文件生成以后放在 /usr/local/slurm/etc/slurmdbd.conf

如果是源安装,不在这里,而且不同版本不一样,一般是在/etc/slurm- 后面的名字不一样

配置 slurm.conf

注意都是以源码编译安装为例,安装位置都是按照前面的来的

这个去官网 Slurm System Configuration Tool 自动生成即可,不同版本不一样,其中比较重要的是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
; 单机就是 localhost即可
SlurmctldHost=localhost

; 这个是mpi的默认值,用户输入 --mpi=mpix_v3 这时候会覆盖这个
MpiDefault=pmix

; 这个优先用cgroup,如果报错,换这个
ProctrackType=proctrack/linuxproc

; 下面这些都是数据库相关的,配置一下就行
AccountingStorageHost=localhost
; 合格是munge的位置
AccountingStoragePass=/usr/local/munge/var/run/munge/munge.socket.2
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageUser=slurm
JobCompHost=localhost
JobCompLoc=slurm_job_db
JobCompPass=12345678
JobCompType=jobcomp/mysql
JobCompUser=slurm

; 这个是各个计算节点,单机的话直接 localhost就行,至于CPUs就是你的cpu核心数,错了也没事,一会开启时会有提示应该是多少,Sockets,cpu插槽数;CoresPerSocket每个插槽多少核心,ThreadsPerCore每个核心多少线程, RealMemory内存(不设置的话,用户申请--mem会报错)
NodeName=localhost CPUs=6 Sockets=1 CoresPerSocket=6 ThreadsPerCore=1 RealMemory=32041 State=UNKNOWN
PartitionName=ptt1 Nodes=ALL Default=YES MaxTime=INFINITE State=UP

文件生成以后放在 /usr/local/slurm/etc/slurm.conf

如果是源安装,不在这里,而且不同版本不一样,一般是在/etc/slurm- 后面的名字不一样

管理员测试

开启

注意都是以源码编译安装为例,安装位置都是按照前面的来的, 已经配置好了环境变量

先开启 munge

1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换到root
sudo su
# 输入
munged

# 查看是否有报错,没有error就行
cat /usr/local/munge/var/log/munge/munged.log

# 过几秒再看看,是否有问题
ps aux | grep munge

# 如果包含类似这个的,就没问题
root 1096 0.0 0.0 204152 3676 ? Sl 12月25 0:01 /usr/local/munge/sbin/munged

开启 slurmdbd

1
2
3
4
5
6
7
8
9
10
11
12
13
# 仍然在root

# 输入
slurmdbd

# 查看是否有报错,你启动以后的时间里没有error就行,之前的error没事
cat /var/log/slurmdbd.log

# 过几秒再看看,是否有问题
ps aux | grep slurmdbd

# 如果包含类似这个的,就没问题
root 2631 0.0 0.0 288368 10012 ? Ssl 12月25 0:00 /usr/local/slurm/sbin/slurmdbd -D

开启 slurmctld

1
2
3
4
5
6
7
8
9
10
11
12
13
# 仍然在root

# 输入
slurmctld

# 查看是否有报错,你启动以后的时间里没有error就行,之前的error没事
cat /var/log/slurmctld.log

# 过几秒再看看,是否有问题
ps aux | grep slurmctld

# 如果包含类似这个的,就没问题
root 2631 0.0 0.0 288368 10012 ? Ssl 12月25 0:00 /usr/local/slurm/sbin/slurmctld -D

前面的没问题再开启 slurmd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 仍然在root

# 输入
slurmd

# 查看是否有报错,你启动以后的时间里没有error就行,之前的error没事
cat /var/log/slurmd.log

# 报错1,可能因为之前slurm.conf最后,服务器cpu等填的不对,这时候会有提示,根据那个改一下

# 报错2,可能有cgroup相关的报错,之前slurm.conf,ProctrackType=proctrack/cgroup,改为ProctrackType=proctrack/linuxproc


# 过几秒再看看,是否有问题
ps aux | grep slurmd

# 如果包含类似这个的,就没问题
root 2631 0.0 0.0 288368 10012 ? Ssl 12月25 0:00 /usr/local/slurm/sbin/slurmd -D

测试

重新打开 bash 以后生效

测试

1
srun --mpi=list

正常能看到

1
2
3
4
5
6
srun: MPI types are...
srun: pmix
srun: pmix_v3
srun: cray_shasta
srun: none
srun: pmi2

开机自启

一共 4 个自己编译安装的,用 systemd 进行管理启动,单机的话直接配置就行,如果是集群,

  • master: munge slurmdbd slurmctld
  • node: munge slurmd

munge

1
sudo vim /etc/systemd/system/munge.service

添加这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# /etc/systemd/system/munge.service
[Unit]
Description=MUNGE authentication service
Documentation=man:munged(8)
After=network.target
After=time-sync.target

[Service]
Type=forking
EnvironmentFile=-/usr/local/mung/etc/default/munge
ExecStart=/usr/local/munge/sbin/munged $OPTIONS
PIDFile=/usr/local/munge/var/run/munge/munged.pid
RuntimeDirectory=munge
RuntimeDirectoryMode=0755
Restart=on-abort

[Install]
WantedBy=multi-user.target

slurmdbd

1
sudo vim /etc/systemd/system/slurmdbd.service

添加这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# /lib/systemd/system/slurmdbd.service
[Unit]
Description=Slurm DBD accounting daemon
After=network.target munge.service network-online.target mysql.service
Wants=munge.service network-online.target mysql.service
ConditionPathExists=/usr/local/slurm/etc/slurmdbd.conf
Documentation=man:slurmdbd(8)

[Service]
Type=simple
EnvironmentFile=-/etc/default/slurmdbd
ExecStart=/usr/local/slurm/sbin/slurmdbd -D $SLURMDBD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmdbd.pid
LimitNOFILE=65536
TasksMax=infinity

[Install]
WantedBy=multi-user.target

slurmctld

1
sudo vim /etc/systemd/system/slurmctld.service

添加这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# /lib/systemd/system/slurmctld.service
[Unit]
Description=Slurm controller daemon
After=slurmdbd.service
Wants=slurmdbd.service
ConditionPathExists=/usr/local/slurm/etc/slurm.conf
Documentation=man:slurmctld(8)

[Service]
Type=simple
EnvironmentFile=-/etc/default/slurmctld
ExecStart=/usr/local/slurm/sbin/slurmctld -D $SLURMCTLD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmctld.pid
LimitNOFILE=65536
TasksMax=infinity

[Install]
WantedBy=multi-user.target

slurmd

1
sudo vim /etc/systemd/system/slurmd.service

添加这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# /lib/systemd/system/slurmd.service
[Unit]
Description=Slurm node daemon
After=remote-fs.target slurmctld.service
Wants=slurmctld.service
ConditionPathExists=/usr/local/slurm/etc/slurm.conf
Documentation=man:slurmd(8)

[Service]
Type=simple
EnvironmentFile=-/etc/default/slurmd
ExecStart=/usr/local/slurm/sbin/slurmd -D $SLURMD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmd.pid
KillMode=process
LimitNOFILE=131072
LimitMEMLOCK=infinity
LimitSTACK=infinity
Delegate=yes
TasksMax=infinity

[Install]
WantedBy=multi-user.target

测试systemd

其实直接重启就行,如果不想重启,先把刚才测试的进程关闭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 关闭slurm相关的
ps aux | grep slurm

# 看到类似这些
root 2631 0.0 0.0 288368 10012 ? Ssl 12月25 0:00 /usr/local/slurm/sbin/slurmdbd -D
root 2632 0.0 0.0 766548 14736 ? Ssl 12月25 0:36 /usr/local/slurm/sbin/slurmctld -D
root 2633 0.0 0.0 73672 5860 ? Ss 12月25 0:00 /usr/local/slurm/sbin/slurmd -D

# 关闭,那些数字是从刚才里面找的
kill 2631 2632 2633



# 关闭munge
ps aux | grep munged

# 类似
root 1096 0.0 0.0 204152 3676 ? Sl 12月25 0:01 /usr/local/munge/sbin/munged

# 关闭
kill 1096

开机自启

1
2
3
4
5
6
7
8
systemctl enable --now mysql
systemctl enable --now munge

systemctl enable --now slurmdbd

systemctl enable --now slurmctld

systemctl enable --now slurmdbd

查看开启状态

1
2
3
4
5
6
7
8
systemctl status mysql
systemctl status munge

systemctl status slurmdbd

systemctl status slurmctld

systemctl status slurmdbd

关闭

1
2
3
4
5
6
7
8
systemctl stop mysql
systemctl stop munge

systemctl stop slurmdbd

systemctl stop slurmctld

systemctl stop slurmdbd

开启

1
2
3
4
5
6
7
8
systemctl start mysql
systemctl start munge

systemctl start slurmdbd

systemctl start slurmctld

systemctl start slurmdbd

查看集群

1
2
3
4
5
6
7
8
9
10
11
sinfo

# 一般应该是下面的
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
ptt1* up infinite 1 idle localhost

# 更详细
sinfo -N -O "nodelist:.6,partition:.10,available:.6,statelong:.12,memory:.12,allocmem:.10,freemem:.10,cpusstate:.16"

# 查看当前计算任务
squeue

添加用户

分3级 ClusterAccountUser

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sacctmgr add cluster cluster

# 这个只是分一下账户
sacctmgr add account icpcs Cluster=cluster

# 这个才是用户
sacctmgr add user yuh Account=icpcs

# 查看
sacctmgr list Cluster

sacctmgr list Account

sacctmgr list User

管理员常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# node1节点排空,不再接受程序提交
scontrol update nodename=node1 state=drain reason='停电节能'

scontrol show node node5

# node8节点恢复
scontrol update nodename=node8 state=resume

# 查看ptt3分区状态
sinfo -p ptt3
# 输出如下:单次运行最大14天
# PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
# ptt3 up 14-00:00:0 4 drain node[5-8]

# ptt3分区程序最大运行时间20160分钟。即14天
scontrol update partition=ptt3 MaxTime=20160

# 彻底修改某个分区运行时间
vim /usr/local/slurm/etc/slurm.conf
# 最后几行
# PartitionName=ptt3 Nodes=node[5-8] MaxTime=20160 State=UP

# 查看任务
sacct -j 264781


# 查看某些用户user的账户account信息以及cpu限制
sacctmgr list assoc format=Clusters,Account,User,qos,partition,GrpTRES,Priority

用户使用

看这里 :服务器与 SLURM 的使用

LAMMPS编译安装

看这里 :Linux系统源码编译安装LAMMPS

slurm提交请注意

申请一个核心一个线程,才最快即

1
srun -n 72  --ntasks-per-core 1  --mem=5G lmp -in file.in

72为核心数,--ntasks-per-core 代表一个核心一个进程 --mem=5G 申请的内存,file.in lammps脚本文件名


本文作者:yuhldr
本文地址https://yuhldr.github.io/posts/bfa79f01.html
版权声明:转载请注明出处!