计算化学公社

标题: 南叔装机小记——第四篇(下集):手搓slurm小集群 [打印本页]

作者
Author:
tomwong4253    时间: 2023-8-13 01:50
标题: 南叔装机小记——第四篇(下集):手搓slurm小集群
本帖最后由 tomwong4253 于 2024-11-8 15:41 编辑

各位好,这是上一篇的后续,本篇重点来唠叨一下软件部分的配置方法。

首先安利下a佬的hpc4you工具(https://gitee.com/hpc4you/hpc,对于linux苦手的萌新来说,这个工具已经算是最自动的集群配置的了。基本上能自动做得操作和配置里边都有,不用像这个帖子一样手搓这么多配置了。我主要参(bai)考(piao)的是a佬的工具中的网络配置和系统设置部分,剩余配置的部分则是参考了文档计算化学集群构建教程》(张鋆编,来自搜索引擎),同时加上自己的理解和尝试,汇总成的这篇帖子。

免责声明:本帖仅供参考,随着硬件配置及软件更新,可能部分操作会失效,敬请注意!

涉及到一些简单的原理和个人经验部分,本篇以蓝字表示,请注意这仅代表个人的理解以及对新手的一些科普,对于计算机理论及linux高手来说,蓝字不可避免有不准确的地方,还请海涵!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0. 系统基本配置
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

这些部分上一篇说了不少。虽说本篇是软件部分为主,不过还是不可避免牵扯到一些硬件的问题,作为上一篇的补充,这里再提几个重点:

1. 上一篇说过的DDR5代高频内存条与7000系CPU之间的兼容性问题,最开始严重到在BIOS设置中都会出现卡屏的现象。随着新的BIOS更新,这个问题已经得到了解决,目前使用上还没发现什么问题,因此请购买消费级硬件的朋友记得首先更新BIOS。

2. 消费级硬件不要过于追求极限的超频。毕竟它本身是主打性价比的消费级硬件,却要干接近于服务器硬件的重活,稳定性上也不能完全不考虑。CPU一般就默频用,让它自动飙睿频就可以,内存一般开个EXPO(如果是Intel平台则是XMP)足够。个人不建议CPU调CCX超频或者内存调小参超频,太极限了。当然,新手可能对这些东西有一定畏惧感,一些相对会搞一点硬件的朋友,真心还是建议适可而止(所谓淹死的大都是会游泳的,我自己就有因为电压给高了让一条内存当场去世的“光辉历史”)。

3. 我心目中的机器部件的重要性前三是电源>硬盘>散热,经费如果有限,缩啥也别缩它们。电源就不多说了,硬盘主要是真心不建议为了容量而去买那什么二手CHIA盘,因为它们虽然测试上没问题,但一是肯定没质保,二是到你手里的之前也不晓得是否安全存放、包装以及运输了,万一将来用的时候你的哪个重要文件搞到坏扇区去了,那就基本上寄了,送修什么的时间成本也极其高昂。这里散热主要是指CPU的风扇,如果可能就直接上滚珠轴承的,主要是寿命相对会长一些,即使为了便宜用是薄膜风扇,也一定用好一点牌子的,我真见到一个薄膜CPU风扇在我眼前停转并且再也不动的情况,还是某不错牌子的,真的惊悚。

4. 如果使用Gromacs等CPU/GPU混合计算的软件,并且想配多个GPU,每个GPU单独跑一个任务,一定一定一定(重要的说三遍)去买服务器主板,便宜的消费级主板配了超过一个PCIE插槽的情况下,那个不与CPU直连的GPU(远离CPU的PCIE插槽)性能已经不能用“抽象”来形容的了,纯GPU计算的程序(例如Amber)相对还好点。如果一定头铁要在消费级主板上装超过两个GPU,则千万不要装NVME固态,否则NVME固态又会挤占本就不多的PCIE通道。

下面进入正题:

1. 软件源及更新设置

按照上一篇的设置,安装好lubuntu20.04或22.04之后(新的消费级机器建议22.04,免得不能正确识别核显),找个显示器开机。首先在图形界面下,找到Prefences里边的Software Sources选项,在里边把download from选择成China的Server,lubuntu提供一个自动搜索的选项,不过一般可以按照你所在的地理位置选择,本人在江苏所以选择nju的源是最近的。关闭所有涉及到自动升级的选项(类似check updates,包括
是否更新新发行版等等都要关闭,升级一时爽,重装火葬场)。点close以后,系统会问你是否刷新软件源缓存,点reload,等待刷新完毕即可。

2. 设置超级用户密码

ubuntu类的系统与redhat不同,安装时并不会问你root的密码,安装时建立的用户如需要管理员权限,则使用sudo+命令,输入用户密码执行。这样给手搓一堆命令额外增加了很多步骤。本人以前是用redhat的,su习惯了,因此还是习惯设置一下su, 省得后面sudo来sudo去了。

打开终端
  1. sudo passwd root
复制代码

输入你的用户密码
输入root的密码,并重复一遍

此后,普通用户状态下输入su并输入root的密码,即可进入root用户,root用户下执行所有命令均不需要sudo。
本篇中的所有命令,如无特殊说明,均是进入root之后输入的,例如apt install就不再写作sudo apt install了

3. 设置苦力盘分区及开机挂载(可选)

该步骤仅在计算节点含有苦力盘时需要,控制节点没有苦力盘时不需要。

苦力盘顾名思义,是应对例如TDDFT等需要大量硬盘读写的计算任务时提升性能的,目前一般由以PCIE协议为基础的nvme固态硬盘充当,这里新手要稍微注意一下:一是别错把sata协议的m2接口也当成nvme固态硬盘购买了(典型特征是m2接口上大多有两个缺口,nvme硬盘的m2接口部分只有一个缺口),另一个就是目前不建议用PCIE4.0这种发热量超大的盘,除了贵,主要是在重读写下这种硬盘分分钟飙到可以煎肉的温度,除非外加散热,否则寿命和速度会不会有影响是很难说。

首先安装gparted工具(注意,由于使用到apt install,如果外部网络不通,建议先使用其它外部网络或按照下一步弄好网络转发后再进行此步)
  1. apt install gparted
复制代码

然后执行gparted,打开一个类似Diskgenius的界面,选择你的苦力盘(一般是/dev/nvme某某,如果你系统硬盘碰巧也是nvme的,注意别选错了)
右键这个硬盘内的容量,选format,格式化成xfs文件系统,或者ntfs文件系统,前者性能据反馈比后者好,后者对我这种二把刀技术比较容易配置(捂脸),点绿色对钩。
格式化完成以后,再次右键点这个硬盘,选information,复制下这个硬盘的UUID,关闭gparted。
  1. vi /etc/fstab
复制代码

打开 fstab,在该文件最下面,按照前几行的格式加入一行:

  1. UUID=上面复制的苦力盘UUID      /scratch       ntfs(或xfs,取决于上面你用gparted弄的什么文件系统)   umask=0000 0 0
复制代码

注意尽量对齐,保存退出vi,重启系统。
重启后,输入df,观察是否有一个名字叫/scratch的挂载,输入cd /进入根分区执行ll -a观察scratch的权限是否正确设置为777(与tmp一样颜色),都正确则表明苦力盘配置成功。后续在配置Gaussian等软件的时候可以直接使用/scratch作为临时目录。

4. 安装NVIDIA驱动及CUDA Toolkit(可选)

该步骤仅在需要做基于CUDA的GPU运算例如Gromacs等时需要,Guassian这种CPU为主或者节点用不到GPU的无需此步。

更新1:经E佬提醒,从很早开始,NVIDIA驱动就支持使用apt install方法安装了,可以直接执行apt install nvidia-smi,系统会有提示可选的驱动版本,按照提示重新运行apt install加上你要的驱动版本即可。不过,本人在自己的A520itx+lubuntu22.04机器上试验了一下,使用这种安装驱动的方式会有极大概率导致wifi掉驱动,怀疑是内核没有自动正确配置PCIE通道导致的,在只能使用wifi网卡的环境下,采用这种装驱动的方式时,需要首先update系统到最新的内核。因此南叔在此建议,如果条件允许,最好还是使用传统的网线连接互联网。

更新2:CPU带有核显的机器,在同时带有外接GPU时,无论装系统还是装驱动,遇到Ubuntu22.04的nouveau抽风的概率较大,表现为上文所说的引导黑屏或启动系统黑屏,解决方法是首先拔掉独立显卡,将显示器接在主板上,开机进BIOS设置首先使用核显(IGD),并用核显装好系统,之后blacklist掉nouveau,再重启一下确认nouveau已经彻底关掉且不造成系统黑屏,此时即可关机并装回独立显卡,但线仍然接在主板上,再次开机后一般不会再出现黑屏问题,可以直接驱动的安装。

关于这两部分的安装,由于操作比较常规,网上已经有很多教程了,本篇仅代表在上篇的硬件基础上的测试经验。其实安装这两个东西的重点是如何在保证系统还能开机的情况下禁用掉那天杀的开源驱动nouveau。部分大佬表示新的ubuntu发行版可以直接apt install,不过为了确保万无一失,本人使用的还是传统的blacklist大法。

  1. vi /etc/modprobe.d/blacklist.conf
复制代码

在最下面加上两行
  1. blacklist=nouveau
  2. option nouveau modeset=0
复制代码

保存退出,执行
  1. update-initmarfs -u
复制代码

此时注意不要直接重启,因为nouveau已经禁用,22.04在个别GPU上启动后会黑屏(Ctrl+F1大法也不管用,很迷),建议将系统切换到启动文字模式(此后操作均能在文字模式下进行
  1. systemctl set-default multi-user.target
复制代码

重启电脑。重启后自动进入的即为文字模式,一般会显示XXXX(你的节点名) login:,后面闪光标,输入root,输入密码,以root登录即可。
登录之后,输入lsmod | grep nouveau,无任何显示即表示nouveau已禁用,此时即可安装NVIDIA驱动。

找一台windows电脑,登录NVIDIA driver官网下载对应的驱动,注意选linux 64bit的,下载下来是个run文件,登录cuda toolkit下载合适的cuda版本,同样注意选x86_64,linux,ubuntu,run。
建议这两个部分不要下载太新的版本,应根据使用GPU的具体程序,选择对应年限的版本为佳,否则可能有潜在的不兼容问题。


将NVIDIA-XXXXX.run和cuda-XXXXXX.run拷贝到U盘中(我是直接用的lubuntu安装U盘,反正剩的空间足够了),插到对应的节点上。


因为是文字模式,执行cd /media/root,多按几次tab找到U盘所在的文件夹,执行cp将
NVIDIA-XXXXX.run和cuda-XXXXXX.run拷贝到/home里边。


cd /home,执行chmod +x
NVIDIA-XXXXX.run和chmod +x cuda-XXXXXX.run。分别执行./NVIDIA-XXXXXXX.run和/cuda-XXXX.run安装即可。
其中,安装NVIDIA驱动时一路OK或者continue,会问你是否需要安装32位的库,一般不需要,cancel之,最后问你是否需要自动配置X-server,一般也不需要。
NVIDIA驱动安装完毕后执行nvidia-smi,有输出表示安装正确。cuda安装完毕后需要设置PATH和LIBRARY_PATH,按照屏幕提示设置后,执行nvcc -V,有版本号输出表示安装正确。


注意:安装时出现cc找不到是没有正确配置编译器和make,执行apt install gcc,apt install g++及apt install make,再次重新执行./NVIDIA-XXXXXXX.run即可。安装cuda的时候不要安装cuda带的驱动,也没必要安装documention,只安装cuda tool kit就够了。cuda安装的时候屏有一会儿没有任何反应,到最后会突然提示安装完成,不要误以为死机了。


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 网络设置与SSH设置
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

再小再破的集群,都需要做个网络隔离。所谓网络隔离,简单来说就是把集群内的计算机自己整合起来,计算节点以控制节点为网关建立一个小的内部网络,不要都堆在工作单位的主网络上和其它N个设备去挤同一个上级设备。否则,且不说工作单位的网络管理部门会不会狂躁,上级设备会不会被你这海量的设备之间的通讯给挤爆,就算是给这一堆设备去申请独立的ip配置,也能给你和上级领导以及单位网络部门的领导整麻了。所以还是老老实实自己弄个手动的配置,即使将来单位网络升级/改造/变更之类的,最多也就涉及到控制节点这一台机器。

网络设置部分我自己也刚入门,参考的是a佬的视频(https://www.bilibili.com/video/BV1gP4y1u7Aw,个别细节部分我文字描述一下:


0. 硬件连接

采用交换机将控制节点和计算节点用网线连接在一起。

注意:一定使用交换机,勿用路由器。内网的连接速度是由交换机/网线/网卡三者中最低的那个为准,另外就是1Gbps/2.5Gbps和10Gbps的网线水晶头是不一样的,别搞出速度瓶颈或网线不兼容的低端问题。

1. 控制节点网络配置

网络隔离要求控制节点至少有两块网卡,其中一块负责连交换机和计算节点通讯,另一块负责连接单位的网络用于登录及连接外网。例如我这里统一弄的是wifi没有有线,那么外网只能用无线网卡(这样其实有点坑,毕竟有线是王道)。

执行ip a,确认控制节点上具体哪块网卡负责集群内部,哪块网卡负责外部,对我这种必须用wifi的来说,e开头的都是有线网卡,负责集群内网,wlx开头的是无线网卡,负责外部。如果你的外部网络也是有线网卡,可以通过ip a输出的ip判断下哪个网络目前连接的外网,将它视为外部网络即可。

配置hosts

  1. vi /etc/hosts
  2. 192.168.50.254 master
  3. 192.168.50.1     node1
  4. 192.168.50.2     node2
复制代码

有几台计算节点就加几行,保存退出

接着执行nmtui(如无此命令,apt install nmtui)
进入一个界面,选Edit Connection,分别配置内网的网卡和外网的网卡,其中。
负责内网的网卡的ipv4网络选manual,地址填写192.168.50.254,子网掩码255.255.255.0(再次进入会显示地址为192.168.50.254/24,一样的意思),网关填192.168.50.254,DNS根据你所在单位的网络情况选择(可以找台其它Windows机器看一下DNS抄上去)。注意一定选中(点上X)Never use this network for default route,不要选Automatically connect this networkipv6的网络选disabled。


负责外网的网卡根据你所在单位的实际情况配置,一般是默认的自动。注意不能选
Never use this network for default route,务必选Automatically connect this network。ipv6的网络同样选disabled。

退出nmtui之后,测试一下外部网络是否通畅:ping bbs.keinsci.com,有返回值即为正常。

如果你的控制节点机器名不是master,可以用nmtui就地更改。

2. 计算节点网络配置

配置hosts
  1. vi /etc/hosts
复制代码

加入
  1. 192.168.50.254 master
  2. 192.168.50.1     node1
  3. 192.168.50.2     node2
复制代码

...
与控制节点一致,保存退出

计算节点要停掉其它一切非内网的网络来源(例如计算节点主板自带的wifi,可以在BIOS中关闭或者nmtui中禁用,防止自动连上一些奇怪的东西)
执行nmtui(如无此命令,apt install nmtui)
进入一个界面,选Edit Connection,ipv4网络选manual,以node1为例,地址填写192.168.50.1,子网掩码255.255.255.0(再次进入会显示地址为192.168.50.1/24,一样的意思),网关填192.168.50.254,DNS空着。注意一定不能选Never use this network for default route,务必选Automatically connect this networkipv6的网络选disabled。


退出nmtui之后,测试一下内部网络是否通畅:ping master,有返回值即为正常。
控制节点执行ping node1,有返回值即为正常。此时即完成了内网配置,按照同样方法配置node2,node3等等,确保每台node与master互相都能ping通。

如果你的计算节点机器名不是node几,可以用nmtui就地更改。

3. NAT网络转发配置

如果确定计算节点不需要连接外网(不需要apt install),NAT转发可以不做。但如果你用了a佬的自动部署工具hpc4you或者你的计算节点比较多,建议还是做一下网络转发,否则计算节点apt install就需要先连上外网,搞好之后再改回内网。设备少不嫌麻烦可以如此,设备多或者嫌麻烦还是老老实实配置NAT转发让计算节点能够分享控制节点的网络吧,该操作仅在控制节点操作即可:

  1. vi /etc/sysctl.conf
复制代码

找到一行net.ipv4.ip_forward,如前面有#则删除(取消注释),后面改成1,即net.ipv4.ip_forward=1,保存退出并重启。
下载a佬提供的NAT转发脚本(https://gitee.com/hpc4you/linux/blob/master/nat.sh)。
vi nat.sh
将其中的LAN后面的引号部分改成内网的网卡名(记不清可以用ip a命令看),WAN后面的引号部分改成外网的网卡名,LANNET后面引号部分改成192.168.50.0/24,其它部分不要动,保存退出。
  1. chmod +x nat.sh
  2. ./nat.sh
复制代码

此时可以试一下用某个计算节点执行ping bbs.keinsci.com,计算节点能同时ping通master和bbs.keinsci.com,表明NAT转发配置成功

这个转发脚本重启后可能会失效,如果需要重启控制节点,需要重新运行nat.sh,或者按照下文配置开机启动自动执行。


注意:按照上述配置,用计算节点ping bbs.keinsci.com有时会显示域名无法解析,可以尝试(1)找台能上网的windows机器看看DNS是多少,填在在nmtui配置内网时的DNS里边,(2)vi /etc/resolv.conf 输入search+本单位的DNS,(3)问问本单位网络管理部门如何获取正确的DNS。

计算节点网络通畅之后,记得第一时间执行apt update更新软件源缓存。

4. SSH配置

slurm集群管理软件需要ssh作为基本的通讯手段,因此控制节点和计算节点都需要配置ssh,此处主要说明如何防止ssh配置掉线以及为后续nis配置做好准备。

  1. apt install ssh
  2. vi /etc/ssh/sshd_config
复制代码

找到如下三行,取消其前面的#号,把有no的地方改为yes,数字适当改大,即:
  1. TCPKeepAlive yes
  2. ClientAliveInterval 60
  3. ClientAliveCountMax 30
复制代码

TCPKeepAlive很重要,无此项很有可能导致长时间没有作业时,ssh可能会频繁断开,连带slurm也会down后面两个参数的前者代表每隔多少秒发一个包检测是否掉线,后者表示有几个包收不到就自动断开,建议把这两个数改大一点。


找到X11_forward行,取消前面的#号,并把yes改成no,否则控制节点放在无线网不好的地方或者单位网络不好的时候,用ssh连接控制节点会非常卡,写好保存退出。
systemctl restart ssh

从此处开始,计算节点不再需要除了root之外的其它用户。执行
userdel -r 安装时用的用户名
再执行一遍会显示user XXXX does not exist,说明删除干净了,重启并以root用户登录即可。此操作仅在计算节点进行,千万不能在控制节点删除任何用户!

5. 配置开机启动脚本


上面的nat.sh和后面的nis(如果是22.04版本)在节点重启后需要重新设置,如果节点不太方便碰到,可以使用rc.local进行开机自动设置。
  1. cp /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
  2. vi /etc/rc.local
复制代码
第一行写#!/bin/bash,后面每行写上开机要执行的命令即可,写好保存退出。
  1. vi /etc/systemd/system/rc-local.service
复制代码
在该文件最后加上两行
  1. [INSTALL]
  2. WantedBy=multi-user.target
复制代码

写好后保存退出,最后执行
  1. systemctl enable rc-local.service
复制代码


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2. NFS设置
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

NFS全程Network File System,它在集群中的作用可以简单理解成让所有计算节点共享控制节点的硬盘,此时控制节点即同时兼具存储节点的作用。一般我们主要共享的是/opt(用来装软件)和/home(用来存数据),上一篇的配置中写到的控制节点中120GB的固态硬盘和4T的机械硬盘即为此用。如果不配置NFS而让计算节点自己在自己的硬盘上存储,那么计算完毕后需要自己上相应的计算节点去取数据,非常麻烦且不利于数据的备份,亦不利于统一的管理。当然NFS的性能是与控制节点和计算节点之间的网络吞吐能力相关的,弄个100Mbps的网络去搞NFS会严重拖慢整个集群的读写速度,甚至数据吞吐量大时可能造成频繁断线。因此
内部网络最起码也得是1Gbps的,有条件最好弄10Gbps的。

1. 控制节点nfs配置

  1. apt install nfs-kernel-server
复制代码
  1. vi /etc/exports
复制代码

在文件最后添加
  1. /home    192.168.50.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
  2. /opt       192.168.50.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
复制代码
执行
  1. systemctl restart nfs-kernel-server
复制代码


2. 计算节点nfs配置


  1. apt install nfs-common
复制代码
  1. vi /etc/fstab
复制代码


在文件最后添加
  1. master:/home  /home  nfs   rw,defaults 0 0
  2. master:/opt     /opt      nfs   rw,defaults 0 0
复制代码

保存退出,重启。
执行df,检查有无master:/home和master:/opt正常挂载,如有即表明nfs配置成功。

此后,安装如Gaussian,Gromacs等程序只需进入控制节点,将程序拷贝或编译到/opt下面,然后在计算节点的slurm脚本中设置相应的环境变量,计算节点会自动配置好相应的计算程序,无需一台一台装,同样所有的计算输入文件和输出数据都会统一存放在/home下面。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3. NIS设置
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

NIS即Network Information Service,在集群中的主要作用就是确保用户在各个节点中的统一。比如在控制节点新建了sob用户调用slurm向计算节点提交作业时,第一步的ssh就会报错,因为计算节点的系统中未必有sob这个用户。因此如果没有nis服务,每新增一个用户你就得一台一台新建这个用户,每删除一个用户又得一台一台删除这个用户。所以还是老老实实配置nis服务,确保集群内用户信息的统一。

注意nis在lubuntu20.04和22.04上配置方法有很大不同,参考方法中很多步骤在不同版本中频繁报错,经过尝试,分别说明如下:

~~~~Lubuntu 20.04 nis配置方法

1. 控制节点配置

  1. apt install nis
复制代码

安装时要输入控制节点的名称master
  1. cat /etc/defaultdomain
复制代码

确认defaultdomain文件中内容为master(控制节点名称)
  1. vi /etc/default/nis
复制代码

修改NISSERVER=master,NISCLIENT=true,保存退出
  1. vi /etc/yp.conf
复制代码

去掉ypserver前的#,修改改行为ypserver master,保存退出。
  1. systemctl restart nis
  2. cd /var/yp
  3. make
复制代码

注意:后续进行了任何增加账户或删除账户操作后,都应cd /var/yp然后执行make。

2. 计算节点配置

  1. apt install nis
复制代码

安装时要输入控制节点的名称master
  1. cat /etc/defaultdomain
复制代码

确认defaultdomain文件中内容为master(控制节点名称)
  1. vi /etc/default/nis
复制代码

修改NISSERVER=false,NISCLIENT=true,保存退出。

  1. vi /etc/yp.conf
复制代码

去掉ypserver前的#,修改改行为ypserver master,保存退出。

  1. vi /etc/passwd,最后一行写入+::::::(即一个加号六个冒号)
  2. vi /etc/group,最后一行写入+:::(即一个加号三个冒号)
  3. vi /etc/shadow,最后一行写入+::::::::(即一个加号八个冒号)
  4. i /etc/nsswitch.conf
  5. 将开头为hosts,passwd,group,shadow等等的行都加上一个nis,保存退出。
  6. systemctl restart nis
复制代码


计算节点执行yptest,最后输出all  tests passed表明nis配置正确。

~~~~Lubuntu 22.04 nis配置方法

1. 控制节点配置

  1. apt install nis
  2. nisdomainname master
复制代码

(如重启,则需要手动再次执行该命令,或按照上述开机自动执行脚本配置该命令自动执行)
  1. vi /etc/defaultdomain
复制代码

内容填写为master,保存退出(该文件须手动新建,否则yptest报错)
  1. vi /etc/default/nis
复制代码

修改NISSERVER=master,NISCLIENT=true,保存退出
  1. vi /etc/yp.conf
复制代码

去掉ypserver前的#,修改改行为ypserver master,保存退出。
  1. /usr/lib/yp/ypinit -m
复制代码

执行后程序会问你ypserver的名称,默认localhost,回车,按Ctrl+D结束输入。
  1. systemctl restart ypserv
  2. systemctl enable ypserv
复制代码

2. 计算节点配置

  1. apt install nis
  2. nisdomainname master
复制代码

(如重启,则需要手动再次执行该命令,或按照上述开机自动执行脚本配置该命令自动执行)
  1. vi /etc/defaultdomain
复制代码

内容填写为master,保存退出(该文件须手动新建,否则yptest报错)

  1. vi /etc/default/nis
复制代码

修改NISSERVER=false,NISCLIENT=true,保存退出

  1. vi /etc/yp.conf
复制代码

去掉ypserver前的#,修改改行为ypserver master,保存退出。

  1. vi /etc/passwd,最后一行写入+::::::(即一个加号六个冒号)
  2. vi /etc/group,最后一行写入+:::(即一个加号三个冒号)
  3. vi /etc/shadow,最后一行写入+::::::::(即一个加号八个冒号)
复制代码
  1. vi /etc/nsswitch.conf
复制代码

将开头为hosts,passwd,group,shadow等等的行都加上一个nis,保存退出。

  1. systemctl restart ypbind
  2. systemctl enable ypbind
复制代码

计算节点执行yptest,输出all tests passed表明nis配置正确。

注意:22.04的nis服务似乎会自动make,但为确保万无一失,后续进行了任何增加账户或删除账户操作后,还是建议cd /var/yp然后执行make。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4. Slurm安装与设置
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

集群管理软件有很多种,例如PBS,LSF,Torque,Slurm等。功能是各有千秋,不过由于Slurm免费,对于GPU等设备的支持度很高,因此采用slurm是不错的选择。
Slurm可以从官网下载源码编译,不过那样要同时准备大量的依赖包,少了一个或者一些可能会导致slurm无法正常启动。本人懒惰上身就直接用apt install了。

1. slurm下载安装

无论20.04还是22.04,执行
  1. apt install slurm-wlm
复制代码

正常会自动安装slurm相应的依赖包,仔细看一下,注意munge这个加密工具一定要有。

2. 配置munge秘钥

控制节点操作
  1. cp /etc/munge/munge.key /home
复制代码

所有计算节点操作
  1. cp /home/munge.key /etc/munge/
复制代码

此步骤相当于统一了所有控制节点和计算节点上的munge.key文件,此操作为必须。
控制节点及计算节点均操作
  1. systemctl restart munge
  2. systemctl enable munge
  3. systemctl status munge
复制代码


根据输出信息确认munge服务正常running即可,如果不正常,须检查每个节点的munge.key文件是否一致。

3. slurm配置文件准备

准备一个slurm.conf文件(直接vi建立即可)
lubuntu20.04的slurm为19版本,conf文件放置位置在/etc/slurm-llnl(相应的conf中的路径含有slurm的要改成slurm-llnl)
lubuntu22.04的slurm为21版本,conf文件放置位置在/etc/slurm
本人的slurm.conf内容如下:

  1. ClusterName=MyCluster
  2. ControlMachine=master
  3. SlurmUser=root
  4. SlurmctldPort=6817
  5. SlurmdPort=6818
  6. AuthType=auth/munge
  7. StateSaveLocation=/var/spool/slurmctld
  8. SlurmdSpoolDir=/var/spool/slurmd
  9. SwitchType=switch/none
  10. MpiDefault=none
  11. SlurmctldPidFile=/var/run/slurmctld.pid
  12. SlurmdPidFile=/var/run/slurmd.pid
  13. ProctrackType=proctrack/pgid
  14. ReturnToService=0
  15. SlurmctldTimeout=3000
  16. SlurmdTimeout=3000
  17. InactiveLimit=0
  18. MinJobAge=300
  19. KillWait=30
  20. Waittime=0
  21. SchedulerType=sched/backfill
  22. SelectType=select/cons_tres
  23. SelectTypeParameters=CR_Core_Memory
  24. SlurmctldDebug=info
  25. SlurmctldLogFile=/var/log/slurm/slurmctld.log
  26. SlurmdDebug=info
  27. SlurmdLogFile=/var/log/slurm/slurmd.log
  28. JobCompType=jobcomp/filetxt
  29. JobCompLoc=/var/log/slurm/job_completion

  30. PartitionName=CPU-cluster Nodes=node[1-4] Default=YES MaxTime=INFINITE State=UP
  31. NodeName=node1 Sockets=1 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=62000 State=UNKNOWN
  32. NodeName=node2 Sockets=1 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=62000 State=UNKNOWN
  33. NodeName=node3 Sockets=1 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=62000 State=UNKNOWN
  34. NodeName=node4 Sockets=1 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=62000 State=UNKNOWN

复制代码

其中最主要的是最后几行涉及到节点注册的。

如果是普通CPU节点,按照上面的写法写就行,本人的7950X是16核,关了超线程,64GB内存想留一点给系统就只写了62000(单位MB),当然写64000也没问题。

如果是双路节点,例如18核36线程的2686v4,并且开着超线程,假设也是64GB内存,则写法是
  1. NodeName=node1 Sockets=2 CoresPerSocket=18 ThreadsPerCore=2 RealMemory=62000 State=UNKNOWN
复制代码

如果节点有GPU,则在保证NVIDIA驱动正确安装(/dev/nvidia文件存在)的前提下。需要在第一个NodeName行前面多写一行Grestypes=gpu,即需要改成
  1. Grestypes=gpu
复制代码

同时计算节点需要在slurm.conf的同目录下另外新建一个文件gres.conf,内容如下
  1. AutoDetect=off
  2. NodeName=node1 Name=gpu File=/dev/nvidia0
复制代码

如果有不止一块GPU,例如两快,则文件应为
  1. AutoDetect=off
  2. NodeName=node1 Name=gpu File=/dev/nvidia[0-1]
复制代码

如果控制节点也想加入计算,则在slurm.conf中按照计算节点的写法增加一行NodeName,如有GPU相应增加gres.conf即可。

最后,确保控制节点和计算节点上的slurm.conf内容完全一致。

计算节点执行下列命令(如果控制节点也参与计算,则也需要执行此句)
  1. systemctl restart slurmd
复制代码

控制节点执行
  1. systemctl restart slurmctld
复制代码

执行sinfo -N,能够看见所有节点都是idle状态,表明slurm集群已基本配置完成。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5. 时间同步服务ntp安装
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间同步对于集群来说非常重要,如果节点之间时间不同步,会导致munge乃至slurm通讯断掉,显示节点DOWN。

控制节点和计算节点均执行
  1. apt install ntp
复制代码


保持控制节点互联网通畅的情况下,一般不需要额外配置。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6. 结语
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

截至本帖完成时,回看整个2023年的7月份,本人都在孜孜不倦的手搓这个小小的集群。虽然本人技术顶多二把刀,基本上都是循着大佬的脚步一路抄过来,搓出来的集群很明显还有这样那样的功能缺失。不过这个过程总体上来说还是很有意义的。诚然这些信息技术和我们做计算化学/生物学本身关系并不太大,但是作为一个教育工作者,本人始终觉得,工具从自己手里打磨出来,对自己的锻炼和成长,那是听多少节课都不一定能达到的。

有关手搓集群的具体使用,与slurm使用无二,帖子太长了就不再往后添加了。

感谢参考文献中的各位大佬,衷心希望本人的小小经验能帮助大家。

撒花撒花~~~






作者
Author:
Entropy.S.I    时间: 2023-8-13 03:47
本帖最后由 Entropy.S.I 于 2023-8-13 03:50 编辑

从很多年前开始,就可以从apt源里面直接装NVIDIA driver,没必要手动去官网下载.run包来搞一堆复杂操作。Driver装好后再装CUDA Toolkit需要在模块选择的页面取消选中driver

作者
Author:
tomwong4253    时间: 2023-8-13 10:03
Entropy.S.I 发表于 2023-8-13 03:47
从很多年前开始,就可以从apt源里面直接装NVIDIA driver,没必要手动去官网下载.run包来搞一堆复杂操作。Dr ...

感谢E佬提醒。我以前也注意到用apt install nvidia-smi会弹出提示可以直接install驱动。主要是nouveau这个东东说实在的有点烦,好几版nvidia驱动连正确禁用掉nouveau都做不好,我确实担心让它自己配置会搞崩,每次都是先手动宰了nouveau确认没问题了再装驱动。其实18.04包括16.04这两版,没记错的话nouveau上来就是禁用的,直接装驱动啥报错没有,不知道20.04之后ubuntu咋又发神经了。
作者
Author:
abin    时间: 2023-8-13 11:40
slurmd -C
得到节点参数。

为了保证系统安全,一般建议把内存数目后三位改为零。
比如Realmemory=654380
修改为 Realmemory=654000.

这是偷懒的做法。
或者可以从第四位直接减去1.

上述配置,似乎没有cgroup相关设定,
只能排队,不能管理资源。

我记得你用的这两个Ubuntu 版本,对cgroup支持的版本还有差异……

集群配置,就是一个琐碎的事情……
大道理都是一样的……

楼主提及的我那个工具,
也稀松平常的很,唯一能做的,
就是把这所有的折腾,做成了自动处理。


作者
Author:
abin    时间: 2023-8-13 11:44
另,我提供的nat.sh
显然需要指定网卡名称和网段。

无需告诉系统开启转发……

只需保证开机后可以移动,执行该脚本……

你可以用这个,给课题组几十台机器,负责网络……

这玩意,我用了十多年了,超级稳定高效……

用户只需修改一下网关地址即可……

作者
Author:
tomwong4253    时间: 2023-8-13 11:56
abin 发表于 2023-8-13 11:44
另,我提供的nat.sh
显然需要指定网卡名称和网段。

感谢大佬提供的脚本,我在执行配置的过程中确实有点小疑问。
1)脚本里LANNET变量我看好像没有用到?
2)net.ipv4.ip_forward这个按照脚本操作后貌似重启会失效?
3)还有就是那个很抽象的解析问题,我直接运行脚本100%会碰到域名解析不了,必须手搓一个DNS给它才行,不知道是不是我们这儿坑爹的DNS设定。。。
作者
Author:
tomwong4253    时间: 2023-8-13 11:57
abin 发表于 2023-8-13 11:40
slurmd -C
得到节点参数。

嗯嗯,所以我这个手搓的很糙了,cgroup啥的就没动。回头研究研究cgroup
有个小问题,我squeue之后看不到已经完成的任务,是必须得搞那个什么slurmdb?
作者
Author:
abin    时间: 2023-8-13 12:30
tomwong4253 发表于 2023-8-13 11:56
感谢大佬提供的脚本,我在执行配置的过程中确实有点小疑问。
1)脚本里LANNET变量我看好像没有用到?
2 ...

配置DNS是你自己的事情呀……

大陆网络复杂,
我能用的DNS,不代表你能用呀……

重启,你得让这个脚本开机执行呀……

另,squeue只记录近期的日志……
其他的设定,看手册……
作者
Author:
Picardo    时间: 2023-9-11 15:33
请教一下,集群里面多种cpu的机器混杂,不需要跨节点,只用slurm做个账户管理,是不是也是一样弄就完事了
作者
Author:
abin    时间: 2023-9-11 16:00
Picardo 发表于 2023-9-11 15:33
请教一下,集群里面多种cpu的机器混杂,不需要跨节点,只用slurm做个账户管理,是不是也是一样弄就完事了

简单说,是。

其他可以参考这里视频讲解。

https://gitee.com/hpc4you/linux
作者
Author:
Picardo    时间: 2023-9-14 22:02
abin 发表于 2023-9-11 16:00
简单说,是。

其他可以参考这里视频讲解。

谢谢,我研究下
作者
Author:
lilf    时间: 2023-10-15 08:51
Entropy.S.I 发表于 2023-8-13 03:47
从很多年前开始,就可以从apt源里面直接装NVIDIA driver,没必要手动去官网下载.run包来搞一堆复杂操作。Dr ...

apt源安装的NVIDIA driver与Cuda,会不兼容吗?好像遇到过不兼容的问题
作者
Author:
Entropy.S.I    时间: 2023-10-15 14:29
lilf 发表于 2023-10-15 08:51
apt源安装的NVIDIA driver与Cuda,会不兼容吗?好像遇到过不兼容的问题

通过apt安装NVIDIA GPU driver(apt install nvidia-driver-xxx),再通过CUDA Toolkit官网的.run文件安装CUDA Toolkit,选择不安装driver即可。这种方法完全不需要额外的手动配置,很优雅。

判断Driver和CUDA Toolkit的兼容性的最简单的方法:看CUDA Toolkit的.run文件名中的Driver版本号是否≤实际安装的驱动版本号。也可以看nvidia-smi命令输出信息右上角显示的CUDA版本是否≥CUDA Toolkit版本。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3