Ubuntu on WSL安装作业调度器Slurm
前言
Slurm是高性能计算机上使用最广泛的作业资源调度器,它能够管理多节点CPU计算资源,也支持管理GPU计算资源。
下面介绍单节点部署slurm的方法,通过slurm管理小型工作站计算资源。单节点安装相比集群安装简化很多步骤。
测试环境
- 工作站:12核24线程 CPU,1块NVIDIA RTX 3060 GPU。
- Ubuntu 24.04 LTS @WSL
- slurm-wlm 23.11.4
安装
这里通过Ubuntu apt包管理器安装slurm,相比源代码安装简单方便。
- 安装slurm及依赖munge
$ sudo apt install munge slurm-wlm
- 查询节点信息,后续slurm配置需要
$ hostname
$ slurmd -C
- 配置slurm.conf文件
slurm提供了网页版生成配置信息的方法,只需要填入对应的参数,就能一键生成配置信息。
使用浏览器打开/usr/share/doc/slurmctld/slurm-wlm-configurator.easy.html
(WSL中可以利用wslview调用Windows的浏览器打开网页或者拷贝这个文件到Windows中打开)。
将生成的配置信息拷贝到/etc/slurm/slurm.conf
中
$ sudo vi /etc/slurm/slurm.conf
- 开启slurmctld和slurmd服务
$ sudo systemctl enable slurmctld
$ sudo service slurmctld start
$ sudo systemctl enable slurmd
$ sudo service slurmd start
- 启动munge服务
$ sudo /etc/init.d/munge start
- 检查Slurm服务状态
$ sinfo
$ scontrol show node
测试
- srun测试
srun -p exp -n 8 hostname
- sbatch提交MPI作业测试
#!/bin/bash
#SBATCH -J test
#SBATCH -p exp
#SBATCH -n 4
sleep 30
mpirun ./mpi_hello
$ sbatch job.sh
GPU资源支持
工作站有一块NVIDIA RTX 3060的显卡,希望通过slurm进行计算资源管理。
首先修改前面介绍的slurm.conf
配置文件,添加GresTypes=gpu
以及Gres
字段。
GresTypes=gpu
NodeName=node00 CPUs=24 RealMemory=31953 Gres=gpu:1 Sockets=1 CoresPerSocket=12 ThreadsPerCore=2 State=UNKNOWN
然后添加gres.conf
配置文件
NodeName=node00 Name=gpu File=/dev/dxg
注意这里的File
使用的是/dev/dxg
,而不是常见的dev/nvidia0
,这是因为WSL Ubuntu虚拟化通过/dev/dxg
访问Windows的GPU驱动。
具体说明:https://learn.microsoft.com/en-us/windows/wsl/faq
GPU access in WSL happens through a /dev/dxg
device, which routes GPU calls out to the Windows GPU. This setup is different than a traditional Linux set up.
GPU作业脚本:
#!/bin/bash
#SBATCH -p exp
#SBATCH -n 1
#SBATCH --gres=gpu:1
sleep 10
./matrixMul # 来自CUDA Samples程序
提交作业,sbatch run.sh
程序运行LOG:
[Matrix Multiply Using CUDA] - Starting...
GPU Device 0: "Ampere" with compute capability 8.6
MatrixA(320,320), MatrixB(640,320)
Computing result using CUDA Kernel...
done
Performance= 904.44 GFlop/s, Time= 0.145 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
Checking computed result for correctness: Result = PASS
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
问题排查
如果发现节点不能正常使用,可能配置文件有错误,比如由于配置错误导致节点状态为drain
。
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
exp* up infinite 1 drain node00
问题排查时可以查看slurm log文件:
- /var/log/slurm/slurmctld.log
- /var/log/slurm/slurmd.log
或者查看服务状态systemctl status slurmctld
。
sinfo -R
也能告知节点故障原因。
REASON USER TIMESTAMP NODELIST
gres/gpu count repor slurm 2024-09-14T08:35:12 node00
参考资料
https://nablacfd.github.io/2019/01/27/Notes-of-installing-slurm-in-Ubuntu-WSL/

