Slurm安装 old
Slurm 安装
依赖安装
apt-get install libmunge-dev libmariadb-dev libpam0g-dev libcgroup-dev libhwloc-dev build-essential fakeroot devscripts equivs
munge 安装
在新服务器上安装 munge
# 安装 munge
apt update; apt install munge
# 将 master 节点的 root 用户的公钥复制到计算节点 `${node}` 的 root 用户的 authorized_keys 中。
cat XXXX >> /root/.ssh/authorized_keys # 将 master 节点 ada-709 的公钥复制进新服务器
在 masker 节点 ada-709 中的 /etc/hosts 文件中添加新服务器的 ip 和 hostname。然后在 master 节点(ada-709)上将 munge.key 传给新服务器:
然后切换到新节点上,运行:
chown munge. /etc/munge/munge.key # 修改权限
systemctl enable --now munge # 设置 munge 开机自启动
systemctl restart munge # 重新启动服务
可在 master 节点(
ada-709)上验证 munge 是否配置成功:若上述命令的输出中包含
STATUS: Success (0),则说明配置成功
Slurm 安装
曾尝试过在新服务器上使用不同于 ada-709 的 slurm 版本 22.05 的 slurmd,但失败了。
-
如果使用 slurm 21.xx,会发现这个版本的 slurm 不支持 cgroup v2,但自从 ubuntu 22.04 后,apt 安装的 cgroup 为 v2,如果非要使用这个版本的 slurm,只能强制给 cgroup 降级,但不到万不得已不建议降级。
-
如果使用 slurm 23.xx,会发现消息格式不兼容,如下是报错内容:


因此,为了保证可用性,建议在新服务器上源码安装和 ada-709 一致的 slurm —— 22.05.4。
首先,在新服务器上,将源码下载到本地:
cd ~
wget https://download.schedmd.com/slurm/slurm-22.05.4.tar.bz2
mkdir -p /opt/slurm/22.05.4
apt update; apt install bzip2
tar -xaf slurm-22.05.4.tar.bz2; rm slurm-22.05.4.tar.bz2
编译源码
apt install libdbus-1-dev # 缺少这个包,否则 make cgroup_v2.so 会报错,必须在 ./cofigure 命令之前安装好
cd ~/slurm-22.05.4
./configure --prefix=/opt/slurm/22.05.4/ # --plugindir=/opt/slurm/
cd /opt/slurm/22.05.4/src/plugins/cgroup/v2; make -j
cd /opt/slurm/22.05.4/src/plugins/cgroup; make install -j
rm ~/slurm-22.05.4 # 删除源码
为 slurm 添加用户
添加环境变量配置文件 /etc/profile.d/slurm.sh,内容如下:
保存以后,退出重新登录,或者运行 source /etc/profile.d/slurm.sh,以使得配置生效。运行 slurmd -C 查看该节点资源信息,例如,ada-A100 的资源信息如下:
NodeName=ada-A100 CPUs=24 Boards=1 SocketsPerBoard=1 CoresPerSocket=12 ThreadsPerCore=2 RealMemory=257232
添加 /etc/systemd/system/slurmd.service 文件,内容如下:
[Unit]
Description=Slurm node daemon
After=munge.service network-online.target remote-fs.target
Wants=network-online.target
[Service]
Type=simple
EnvronmentFile=-/etc/default/slurmd
ExecStart=/opt/slurm/22.05.4/sbin/slurmd --conf-server ada-709:6817 -D -s $SLURMD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
LimitNOFILE=131072
LimitMEMLOCK=infinity
LimitSTACK=infinity
Delegate=yes
TasksMax=infinity
[Install]
WantedBy=multi-user.target
设置 slurmd 开机自启动,并开启 slurmd 服务:
然后切换到 master 节点(ada-709)修改 slurm 配置文件:
- 在
/opt/slurm/22.05.4/etc/gres.conf中添加新节点的 GPU 资源信息,例如,ada-A100信息如下:
-
在
/opt/slurm/22.05.4/etc/gres.conf中添加新节点的信息,需要进行的配置如下: -
添加节点信息,例如,
ada-A100信息如下: -
添加 Partition 信息,例如,
ada-A100对应的 partition 信息如下:
配置完成后,重启 slurmctl:
若采用无配置(Configless)模式,只用在管理节点放置配置文件,而计算节点无需配置文件。若要启用无配置模式,需要在 slurm.conf 中添加 SlurmctldParameters=enable_configless,并重启 slurmctld。
Pyxis 安装
安装 enroot
如下安装过程适用于 Debian-based 的发行版,若是其他 Linux 系统,请查看:enroot Installation。
安装 build 依赖,并 clone enroot 仓库:
sudo apt install -y git gcc make libcap2-bin libtool automake libmd-dev
cd /opt/
git clone --recurse-submodules https://github.com/NVIDIA/enroot.git
安装运行时依赖
sudo apt install -y curl gawk jq squashfs-tools parallel
sudo apt install -y fuse-overlayfs libnvidia-container-tools pigz squashfuse # optional
若要安装 optinal,若报
E: Unable to locate package libnvidia-container-tools的错误,请按如下方法解决:
修改 /opt/enroot/conf/enroot.conf 文件,添加如下变量配置:(很重要,否则 pyxis 默认会在 /run/user/<uid/ 下放置 enroot 文件,但是 /run/user/<uid/ 这个目录是用户登录时由 systemd 创建的,slurm 并不走这套流程,导致 pyxis 在尝试创建 /run/user/<uid/ 时 permission deny)
ENROOT_RUNTIME_PATH /mnt/<NODE_NAME>/data/enroot/$(id -u)
ENROOT_CACHE_PATH /mnt/<NODE_NAME>/data/enroot/enroot-cache/group-$(id -g)
ENROOT_DATA_PATH /mnt/<NODE_NAME>/data/enroot/enroot-data/user-$(id -u)
编译源码并 install,并允许非特权用户 import images。
记得提前创建目录:
mkdir -p /mnt/$NODE_NAME/data/enroot/enroot-cache
mkdir -p /mnt/$NODE_NAME/data/enroot/enroot-data
chmod 777 /mnt/$NODE_NAME/data/enroot /mnt/$NODE_NAME/data/enroot/enroot-cache /mnt/$NODE_NAME/data/enroot/enroot-data
从 ubuntu 23.04 起,需要设置 kernel.apparmor_restrict_unprivileged_userns=0,否则,非特权用户使用 enroot 会发生 permission denied。添加文件 /etc/sysctl.d/50-userns.conf,内容如下:
安装 pyxis
clone pyxis 仓库
修改 pyxis 中的 Makefile:
# 找到 CFLAGS 的赋值行:
# CFLAGS := -std=gnu11 -O2 -g -Wall -Wunused-variable -fstack-protector-strong -fpic $(CFLAGS)
# 添加 slurm 安装路径中的 include 到 CFLAGS 中,以便编译器找到 slurm 的 spank.h 头文件:
CFLAGS := -I/opt/slurm/22.05.4/include -std=gnu11 -O2 -g -Wall -Wunused-variable -fstack-protector-strong -fpic $(CFLAGS)
编译安装
若是管理节点:
重启服务