如何在搭载Slurm的Linux HPC集群上部署OpenMPI并同步到计算节点?
我来帮你搞定在Slurm集群上安装OpenMPI的事儿——尤其是确保所有计算节点都能正常用的关键点,这事儿我在HPC集群上折腾过好多次,给你捋清楚一步步该怎么做:
一、前期准备:选对环境和节点
首先得在**登录节点(head node)**上操作,别直接碰计算节点——计算节点通常有诸多权限限制,折腾起来麻烦。先确认登录节点有必备的编译工具:
- 检查
gcc、g++、make、cmake这些有没有装,没有的话用集群包管理器补装(比如yum install gcc-c++ make cmake或者apt install build-essential cmake) - 还要提前装好
libibverbs-dev(用InfiniBand网络的话)、libssl-dev这些依赖,不然OpenMPI的不少功能会用不了
二、编译OpenMPI(登录节点上操作)
先下载稳定版的OpenMPI,比如4.1.5版本(选自己需要的稳定版就行):
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.gz tar xzf openmpi-4.1.5.tar.gz cd openmpi-4.1.5配置编译参数,这里是核心关键:
./configure --prefix=/opt/openmpi-4.1.5 --with-slurm --with-verbs --enable-mpi-cxx给你解释下必看参数:
--prefix:指定安装目录,必须选所有计算节点都能访问的共享文件系统路径(比如集群共享的/opt,或者你用户目录下的~/apps/openmpi),绝对不能选登录节点本地的路径!--with-slurm:必须加!让OpenMPI和Slurm调度系统集成,后面用srun启动多节点MPI任务才顺畅--with-verbs:集群用InfiniBand高速网络就加,不用的话可以去掉--enable-mpi-cxx:需要C++ MPI接口就加,不需要可以省略
编译安装:
make -j $(nproc) # 用所有CPU核心加速编译,节省时间 sudo make install如果是装在自己用户目录下,就不用
sudo,直接make install就行
三、同步环境到所有计算节点
计算节点要能找到OpenMPI的二进制文件和库,这里有两种最常用的方法:
方法1:利用共享文件系统(最推荐)
如果你的安装目录已经在共享文件系统上(比如/opt是NFS挂载的),那计算节点其实已经能访问到文件了,只需要把环境变量配置同步过去:
全局配置的话,在登录节点新建
/etc/profile.d/openmpi.sh,内容如下:export PATH=/opt/openmpi-4.1.5/bin:$PATH export LD_LIBRARY_PATH=/opt/openmpi-4.1.5/lib:$LD_LIBRARY_PATH然后用集群的节点批量工具(比如
pdsh、clush)把这个文件复制到所有计算节点的对应目录:pdsh -w compute[01-10] sudo cp /etc/profile.d/openmpi.sh /etc/profile.d/(这里
compute[01-10]是你的计算节点范围,根据实际集群节点名改)如果是用户级安装,直接在自己的
~/.bashrc里加上面的环境变量就行——用户目录一般也是共享的,计算节点登录后会自动加载
方法2:手动复制到每个计算节点(无共享存储时用)
如果集群没有共享存储,那就得把安装好的OpenMPI目录复制到每个计算节点的相同路径:
# 假设计算节点是compute01到compute10 for node in compute{01..10}; do scp -r /opt/openmpi-4.1.5 $node:/opt/ done
然后同样用批量工具给每个节点配置环境变量:
pdsh -w compute[01-10] 'echo "export PATH=/opt/openmpi-4.1.5/bin:\$PATH" >> /etc/profile' pdsh -w compute[01-10] 'echo "export LD_LIBRARY_PATH=/opt/openmpi-4.1.5/lib:\$LD_LIBRARY_PATH" >> /etc/profile'
四、验证安装是否成功
先在登录节点验证:
mpicc --version mpirun --version能正常输出OpenMPI的版本信息,说明登录节点没问题
验证计算节点:
用Slurm启动一个单节点任务,检查计算节点的OpenMPI:srun -N1 -n1 mpicc --version再跑个多节点测试程序,比如编译OpenMPI自带的例子:
cd openmpi-4.1.5/examples mpicc hello_c.c -o hello srun -N2 -n4 ./hello # 在2个节点上跑4个进程如果能看到每个进程对应的节点名和ID,就说明所有节点都正常工作了
五、几个避坑提醒
- 绝对不能漏加
--with-slurm参数,不然OpenMPI没法和Slurm调度系统配合,多节点任务启动会各种报错 - 安装路径一定要保证所有计算节点都能访问,共享文件系统是最优解,能省掉重复复制的麻烦
- 如果集群有不同架构的节点(比如x86和ARM),得分别编译对应版本,或者用交叉编译——不过大部分HPC集群都是同架构的,不用太担心
- 升级OpenMPI的时候,记得先清理旧版本的环境变量,避免版本冲突
内容的提问来源于stack exchange,提问作者airzinger1




