slurm集群部署安装+ansible

slurm集群部署安装

前期节点准备,三个节点,一个管理节点(也是部署节点),两个计算节点

1、最小化安装centos7,注意python环境就用默认的2.7就行

2、安装git,只在管理/部署节点安装

yum -y install git

ssh-keygen -t rsa -C "起个SSH名字"

//密钥放到gitee

自动化部署slurm仓库地址:

https://gitee.com/wanghuiic/demo-ansible#%E9%83%A8%E7%BD%B2

3、修改主机名

hostnamectl 查看主机名

hostnamectl set-hostname (跟着自己的主机名)

4、SSH互信,注意奥:如果部署节点就是对应的slurm控制节点的时候,需要自己给自己SSH互信,

ssh-keygen -t rsa 一路回车,每个节点都要搞

//在管理节点使用
ssh-copy-id (hostIP 或者在/etc/hosts定义好IP地址与hostname的映射)
ssh-copy-id master ##自己给自己搞SSH互信

5、执行make命令出错,所以在之前先安装virtualenv

wget  https://bootstrap.pypa.io/pip/2.7/get-pip.py

python get-pip.py

//豆瓣家的就是快
pip install  virtualenv -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple

6、执行make,然后make install,make之后可能下载速度忒慢了

修改build.sh install.sh 中关于使用pip命令下载的方式
后面都加上-i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple
或者说,在centos7系统里面修改pip镜像源

7、使用make, make install,还有make test,关联文件

build.sh   install.sh  test.sh

8、修改global.yml

slurmdbd_database_address slurmdbd数据库服务器IP地址,注意修改为master地址
[mariadb] [slurmservers] [slurmdbdservers] [slurmrestservers] 都用一个节点

9、修改multinode

[mariadb:vars]
db_interface=ens33       --网卡为自己系统的网卡型号
db_address_family="ipv4"

[slurm:vars]
network_interface=ens33  --网卡为自己系统的网卡型号
enable_slurm=yes
------以上两处都需要修改

ip address  //查询网卡型号

10、passwords.yml存放的是MySQL密码,以及slurmdbd密码

11、打开端口

stcp 6817 slurmctld
tcp 6818 slurmd
tcp 6819 slurmdbd
tcp 6820 slurmrestd
tcp 3306 mysqld

firewall-cmd --zone=public --add-port=8000/tcp --permanent ##打开8000端口命令
 
firewall-cmd --zone=public --remove-port=8000/tcp --permanent

firewall-cmd --reload ##配置立刻生效

firewall-cmd --permanent --query-port=80/tcp ##查看80端口有没开放

firewall-cmd --state ##查看防火墙状态,是否是running

systemctl status firewalld.service ##查看防火墙状态

systemctl start firewalld.service ##启动防火墙

systemctl stop firewalld.service ##临时关闭防火墙

systemctl enable firewalld.service ##设置开机启动防火墙

systemctl disable firewalld.service ##设置禁止开机启动防火墙

firewall-cmd --list-ports ##查看以及生效的端口

12、创建用户,所有节点,并授权

adduser slurmtest01
adduser slurmtest02

//查看授权用户
ll /etc/sudoers

chmod u+w /etc/sudoers

//添加格式
slurmtest01    ALL=(ALL)      NOPASSWD: ALL

chmod u-w /etc/sudoers

13、执行部署命令

./test.sh slurmtest -vvv ##执行之后能看到细节问题,不加--vvv看不到细节问题

./test.sh slurmtest 简化版部署方案

14、执行srun -N-99999 hostname 命令,不报错说明成功了

15、测试一下使用MPI demo与 OpenMP demo测试

16、 当使用sinfo查看节点状态为unknow/unk*的时候,重置节点状态

[root@master demo-ansible]# scontrol update nodename=node2 state=DOWN reason=hung_completing
[root@master demo-ansible]# scontrol update nodename=node2 state=RESUME

17、出现以下问题,Job allocation 9 has been revoked可能是munge密钥的问题

-----------问题-----------------
[root@ltw ~]# srun -n2 -l hostname
srun: Required node not available (down, drained or reserved)
srun: job 9 queued and waiting for resources
^Csrun: Job allocation 9 has been revoked
srun: Force Terminated job 9

-----------解决办法-------------
//接着执行,可能会出错
systemctl disable --now NetworkManager NetworkManager-wait-online NetworkManager-dispatcher dbus-org.freedesktop.NetworkManager

[root@master ~]# scp /etc/munge/munge.key node1:/etc/munge/
[root@master ~]# scp /etc/munge/munge.key node2:/etc/munge/
[root@node1 ~]# systemctl restart munge
[root@node2 ~]# systemctl restart munge

出现问题sbatch提交作业之后出作业为PD模式

scontrol show node ##查看节点状态

cat /var/log/slurm/slurmctld.log | tail -n 20 ##查看报错信息

如果是批处理文件,对应的批处理脚本可能不对

18、作业应该拷贝到同样的节点一份,这样才能保证执行的通过,否则就会出现计算节点没有相应执行文件

19、为什么有的作业执行有了结果,但是sacct显示失败了?

确实是失败了,可以查看sacct查看对应的结果,failed说明batch脚本运行有问题,可以查看批处理作业输出的文件

/var/spool/slurm/slurmd/job00019/slurm_script: line 11: module: command not found
/var/spool/slurm/slurmd/job00019/slurm_script: line 12: module: command not found
/var/spool/slurm/slurmd/job00019/slurm_script: line 15: mpicc: command not found
slurmstepd: error: execve(): hello.mpi: No such file or directory
slurmstepd: error: execve(): hello.mpi: No such file or directory
srun: error: node1: tasks 0-1: Exited with exit code 2

有两个问题,一个是module没安装,这里需要安装environment-modules ,直接yum -y install environment-modules即可,execve()少了个头文件<unistd.h>,真不应该。

20、environment-modules安装使用介绍

为什么使用?

​ 使用集群过程中,经常要安装不同的编译器和库文件,如常用的编译器有GCC,常用的 MPI并行库有OpenMPI、MPICH2等。在使用某个软件时,通常采用不同的编译设置得到不同版本的可执行程序和链接库,或者需要修改、切换不同版本的环境变量。由于程序在编译时会调用不同类型编译器或第三方库,程序之间还存在着依赖关系。导致当执行某个特定版本的程序时,修改环境变量变得十分复杂。

​ Environment Modules是一个简化Shell初始化的软件包,可以在使用modulefiles模块与集群进行会话期间修改模块对应的运行环境。每个模块文件都包含应用程序配置所需的信息。集群用户可共享系统上的模块文件,并且用户可以拥有自己的集合来补充或替换共享模块文件。

yum -y install environment-modules
//安装软件,之后需要重启一下终端
vim /usr/share/Modules/init/bash
# 在末尾添加 
export MODULEPATH=/share/apps/Modules/modulefiles:$MODULEPATH
source /usr/share/Module/init/bash 
module avail #查看当前环境下的module

修改路径,安装devtoolset

vim /usr/share/Modules/init/bash
# 在末尾添加 
export MODULEPATH=/share/apps/Modules/modulefiles:$MODULEPATH
source /usr/share/Module/init/bash

yum -y install devtoolset-2
# 如果发现找不到devtoolset-2,请输入以下命令,再执行yum -y install devtoolset-2
wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo

#注意:
#devtoolset目前有4个版本:devtoolset-1 devtoolset-2 devtoolset-3 devtoolset-4,
#以上版本分别对应gcc的版本为4.7、4.8、4.9、5.2

添加进去/usr/share/Modules/modulefiles/gcc/4.8.5

#%Module1.0########
proc ModulesHelp {} {
	global version modroot
	puts stdout "\t loads gcc 4.8.5\n"
}

module-whatis "load gcc-4.8.5"

set version 4.8.5
set prefix	/share/apps/Modules

conflict gcc

setenv CC gcc
setenv CXX g++

prepend-path PATH  /opt/rh/devtoolset-2/root/usr/bin

if [ module-info mode load ] {
	system echo "gcc 4.8.5 is loaded"
}
if [ module-info mode switch2 ] {
	system echo "gcc 4.8.5 is loaded"
}
if [ module-info mode remove ] {
	system echo "gcc 4.8.5 is unloaded"
}

然后测试

module avail

#返回结果
--------------------------------------------------------------------------- /usr/share/Modules/modulefiles ----------------------------------------------------------------------------
dot         gcc/4.8.5   module-git  module-info modules     null        use.own

module load gcc/4.8.5
module unload gcc

常用的module命令如下:

  • module avail:显示可以使用的模块
  • module load:加载模块
  • module unload:卸载模块
  • module list:显示已经加载的模块

21、安装OpenMPI,MPICH

什么是MPI?

​ MPI是这样一种API:MPI是一套通信标准,由MPI Forum创建并维护(MPI Forum是一个开放组织,由工业、学术界的高性能计算领域的专家组成)。MPI一般作为一个消息传递的中间件,上层应用程序可以通过调用MPI接口来执行消息传递。MPI定义了一系列与平台无关的、高度抽象的API接口,用于进程之间的消息传递。比如说,进程X是发送进程,只需提供消息内容(例如一个双精度数组)以及另一个接收进程的标识(例如进程Y),同时接收进程Y只需提供发送进程的标识(例如进程X),消息就可以从X传递给Y。

  • 可移植
  • 高性能的IPC通信

​ Open-MPI 使 MPI 接口的一个开源实现。短消息传递的超低latency,短消息传递的超高网络注入率等特点。

源码安装

# 源码安装,下载openmpi-3.0.0
tar -zxvf openmpi-3.0.0.tar.gz

# 然后
cd openmpi-3.0.0/
./configure --prefix=/usr/local/openmpi
# 注意上一步可能会出错
	configure: error: C++ preprocessor “/lib/cpp” fails sanity 
	check See `config.log’ for more details
# 先yum install glibc-headers
# 然后yum install gcc-c++
# 再./configure --prefix=/usr/local/openmpi

make && make install

修改PATH配置文件,修改后注意使用source命令使修改生效:
vim ~/.bash_profile

# 将以下两句添加到.bash_profile文件末尾位置,按Esc后:wq保存修改
export PATH=$PATH:/usr/local/openmpi/bin
export LD_LIBRARY_PATH=/usr/local/openmpi/lib

# 使用source命令激活修改:
source ~/.bash_profile

# openmpi卸载,需进入安装目录
make uninstal

想要使用module load openmpi/3.0.0还需要自己在usr/share/Modules/modulefiles/目录下添加openmpi/3.0.0文件,文件格式如下

#%Module1.0#####################################################################
##
## modulefiles/openmpi-3.0.1  Generated by EHS 1.0.0
##
proc ModulesHelp { } {
  puts stderr "\tmodules - loads the modules software & application environment"
  puts stderr "\n\tThis loads environment of openmpi-3.0.1"
}

module-whatis   "loads the openmpi-3.0.1 environment"
prepend-path PATH  ${installpath}/bin  
prepend-path LD_LIBRARY_PATH  ${installpath}/lib
prepend-path LIBRARY_PATH  ${installpath}/lib

yum安装(推荐),好像得reboot一下

# 安装openmpi
yum install openmpi opemmpi-dev
# 安装openmpi3
yum install openmpi3 openmpi3-dev
# 推荐安装 openmpi3 ,openmpi 的版本过低。

# 也是一个MPI软件,下面四个都得下,要不然mpicc用不了
yum install mpich-3.2.x86_64
yum install mpich-3.2-autoload.x86_64
yum install mpich-3.2-devel.x86_64 
yum install mpich-3.2-doc.noarch

# openmpi
module load mpi/openmpi-x86_64
# openmpi3
module load mpi/openmpi3-x86_64

# 因为自动在下面文件中就有了
cat /etc/modulefiles/mpi/openmpi3-x86_64
cat /etc/modulefiles/mpi/mpich-3.2-x86_64

22、执行多节点批处理作业时候每次都是node1节点进行处理,而不使用node2节点。

sbatch: error: Batch job submission failed: Requested node configuration is not available #批处理文件写错了

一个解释是:
批处理执行的作业被调度运行后,在所分配的首个节点上执行作业脚本。

23、关于用户、账户、预约处理等命令

  • 用户操作

    sacctmgr show user (withassoc) # 查看用户信息
    sacctmgr add user username defaultaccount=bank01  # 添加用户并且用户所在账户为bank01
    sacctmgr modify user username set QOS=normal # 修改用户信息
    sacctmgr delete user username #删除用户
    
  • 账户管理

    sacctmgr show account (withassoc) # 查看账户信息
    sacctmgr add account accountname  # 添加账户
    sacctmgr modify account accountname set Partent=root # 设置父账户为root
    sacctmgr delte account accountname #删除账户
    
  • 预约处理

    scontrol create reservation user=root starttime=now duration=60 nodes=node1 # 给root用户,申请预约一个从现在开始的60分钟,申请节点为node1,会生成一个预约名称,reservationname
    scontrol update reservationname=root_1 duration=120 #修改预约名称为root_1的用户预约时长为120分钟
    scontrol show reservation # 查看预约
    scontrol delete reservation=reservationname #删除预约名称为reservationname的预约
    

    注意:

    • 预约仅仅可以被root用户或配置的SlurmUser使用scontrol命令进行创建,更新,删除。

24、SlurmRestAPI 学习。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值