Ubuntu搭建计算集群
计算机硬件和技术的发展使得高性能模拟和计算在生活和工作中的作用逐渐显现出来,无论是计算化学,计算物理和当下的人工智能都离不开高性能计算。笔者工作主要围绕计算化学和物理开展,亦受限于自身知识和技术所限,文中只是浅显地尝试了整个搭建工作的步骤,很多细节没有深入,还望大家多指导,参考《计算化学集群构建入门》张鋆博士。同时集群搭建可以分为硬件和软件两部分,硬件可以参考北京科音自然科学研究中心内容,这里仅是在软件部分的尝试,记录下来也有个参考。本次采用VituralBox虚拟机,Ubuntu16.04系统,虚拟机采用VMware也是可以,系统亦可采用CentOS,这里相对真实的搭建缺少了交换机,两者还是有所不同的。
1.操作系统安装
可以采用U盘或者移动光驱来进行安装,较为简单。需要注意的是网络设置,要自主设定IP、子网掩码、默认网关(/etc/network/interfaces)、DNS(/etc/resolv.conf),主机名(/etc/hostname)和域名(/etc/hosts)。而虚拟机和真实搭建也有所不同,网络设定可以参考之前内容。使用ping命令尝试,是否各节点间是否能够ping通,与外网是否连通。
一定要注意后面是在哪些节点(控制节点,用control指代,计算节点,用compute指代)、是采用什么账户(root或非root用户)进行。还需要及时删除所有计算节点的非root用户账户(增删用户尽量采用adduser/deluser,相对useradd/userdel更为方便省去删除用户的主目录、用户的邮件箱以及其他用户相关的文件步骤)。
一些关于虚拟机和Ubuntu使用技巧:虚拟机可以采用复制的方式,相对节约安装系统的时间;Ubuntu可以采用'ctrl+alt+F*'的方式切换图形界面(F7)与命令行模式;dpkg --list可以查看已经安装的软件;使用apt update/upgrade/install/autoremove更新、安装和删除相关软件;/etc/init.d/networking restart,此文件夹内主要是为了设置系统自启动相关项目,现在已被systemd取代;为避免依赖关系混乱,安装命令一定要统一,
2.网络通信系统
前一步中的网络设置也可以算在这里面的“前奏”,这里面也可分为三部分:a.SSH主机间无密码登陆;b.NFS主机间文件共享;c.NIS主机间用户同步
a.SSH主机间无密码登陆
SSH为了实现远程登陆,数据加密。需要在所有节点(控制节点和计算节点)安装OpenSSH,并在控制节点采用非root用户(用norootuser替代)登陆执行命令
ssh-keygen -t rsa
cd /home/norootuser/.ssh
cat id_dsa.pub >> authorized_keys
之后在控制节点ssh本机主机名即可,具体配置也可以自己修改
b.NFS主机间文件共享
NFS为了实现各节点间文件保持同步。在控制节点安装nfs-kernel-server,在计算节点安装nfs-client,如果控制节点就是计算节点可以省去相关步骤。使用root用户在控制节点修改/etc/exports文件将需要共享的文件夹添加进去
/home 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
/opt 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
/usr/local 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
依次为共享文件夹、挂载IP范围、挂载配置,具体配置也可以查阅相关资料按需设定
使用root用户在计算节点修改/etc/fstab文件
control:/home /home nfs rw,defaults 0 0
control:/opt /opt nfs rw,defaults 0 0
control:/usr/local /usr/local nfs rw,defaults 0 0
在控制节点和计算节点执行或者重启节点为好,使用df命令在计算节点查看是否成功
control node:
/etc/init.d/nfs-kernel-server restart
compute node:
/etc/init.d/networking restart
c.NIS主机间用户同步
NIS起到用户管理工作。
在所有节点(控制节点和计算节点)使用root用户安装nis,要求输入域名时必须采用控制节点域名,此处为control。如果控制节点就是计算节点亦可省去相关步骤。
在所有节点(控制节点和计算节点)使用root用户编辑/etc/defaultdomain填入控制节点域名(默认已填入)
在所有节点(控制节点和计算节点)使用root用户编辑/etc/default/nis,控制节点设置为NISSERVER=master,NISCLIENT=true,计算节点设置为NISSERVER=false,NISCLIENT=true
在所有节点(控制节点和计算节点)使用root用户编辑/etc/yp.conf,写入ypserver control
在控制节点编译用户库,而且以后无论控制节点对/etc/passwd或group或shadow做任何修改,都应进行这一操作,以同步服务器和客户端用户信息
cd /var/yp
make
在计算节点对passwd,group,shadow编辑,写入“伪用户”信息
/etc/passwd 最后一行加入(一个+六个:):
+::::::
/etc/group 最后一行加入(一个+三个:):
+:::
/etc/passwd 最后一行加入(一个+八个:):
+::::::::
在所有节点(控制节点和计算节点)重启nis服务
/etc/init.d/nis restart
这样的话,ssh就可以正常登陆其他节点了
3.作业管理系统
之前的作业管理系统是通过Torque+Maui来完成的,随着其商用化,多数用户已经逐渐采用Slurm来管理作业进程,亦可参考内容。这里我们也使用Slrum来进行管理,具体来说Munge+Slurm来进行管理,前者在集群中能够实现本地或者远程主机进程的GID和UID验证。
a.MUNGE安装
所有节点都要安装和执行
apt install munge#获取为随机数据生成munge.key (推荐给没有耐心的人):
dd if=/dev/urandom bs=1 count=1024 >/etc/munge/munge.key#修改目录属主
chown -R munge:munge /var/{lib,log,run}/munge
chown -R munge:munge /etc/munge#修改目录模式
chmod 711 /var/lib/munge
chmod 700 /var/log/munge
chmod 755 /var/run/munge
chmod 700 /etc/munge
chmod 400 /etc/munge/munge.ke
这里有些地方提到关于munge权限的问题,本次直接生成了用户名为munge的用户,没有将其修改为root(在这里修改/lib/systemd/system/munge.service),有些攻略提到权限问题,这里没有遇到,如若需要,可以新建一个munge的用户或修改为root用户权限
#拷贝主节点密钥到其余节点
scp /etc/munge/munge.key munge@ip:/etc/munge
如若单节点上面步骤可以省略
systemctl start munge # 启动munge服务
systemctl enable munge # 设置munge服务为开机自启
# systemctl另外也支持停止服务stop,取消开机自启disable,重启服务restart,查看服务状态status
# 还碰到过munge被防火墙mask了,这时候我没有关防火墙服务,直接systemctl unmask munge就行了
测试安装是否成功
munge -n #本地查看凭据:
munge -n | unmunge #本地解码
munge -n | ssh node01 unmunge #验证compute node,远程解码(这一步验证不过,报错unmunge: Error: Invalid credential 重启对端munge服务即可
后记:配合slurm一起使用,修改/etc/slurm/slurm.conf:AuthType=auth/munge
b.Slurm安装
Slurm也分为三部分,slurmctld 完成管理节点的任务(故障切换、资源监控、队列管理、作业调度),slurmd完成计算节点的任务(启动任务、监控任务、分层通信),slurmdbd对于数据库管理应该也在控制节点,本次没有进行配置。
按照相应作用只在对应节点安装对应软件
b.1.安装软件
apt install slurm-wlm slurmctld #控制节点执行
apt install slurm-wlm slurmd #计算节点执行
如果是单节点,即控制节点就是计算节点,将以上软件在同一节点进行安装,slurm会自动创建用户名为slurm的账户,后续可以通过登录slurm用户启动服务,这里均使用root用户来操作。
b.2.配置文件
$ cd /usr/share/doc/slurmctld #此为默认位置,如果不是,使用dpkg+grep查找
$ chmod +r slurm-wlm-configurator.html
$ python3 -m http.server #前提安装python3
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
打开浏览器填入相应地址http://<your_ip>:8000, 点击进入 slurm-wlm-configurator.html 按照自己的需求填写设置,主要就是Control Machines,Compute Machines,也要注意Process Tracking,可能会遇到类似问题。填写完毕后,点击submit,将生成的内容拷贝进 /etc/slurm/slurm.conf
b.3.创建服务并启动
$ sudo mkdir /var/spool/slurmd
$ sudo mkdir /var/spool/slurmctld
$ sudo systemctl start slurmd # 启动 slurmd, 日志文件路径为 `/var/log/slurmd.log`
$ sudo systemctl start slurmctld # 启动 slurmctld, 日志文件路径为 `/var/log/slurmctld.log`
启动后无法正常使用 slurm 的话,先查看slurmd和slurmctld的状态,打开日志查看报错。
$ sudo systemctl status slurmd # 查看 slurmd 的状态
$ sudo systemctl status slurmctld # 查看 slurmctld 的状态
这里需要注意slurm.conf后三行,也可以用
slurm -C
不建议手动修改其中SlurmUser=root
给个脚本模板
#!/bin/bash
#SBATCH --job-name=test
#SBATCH -N 2
#SBATCH --ntasks-per-node=2
#SBATCH --output=%j.out
#SBATCH --error=%j.err#srun --mpi=pmi2 ./cpmd.x ntroma01_wft.inp /home/vbox_share/pseudo-extlib > ntroma01_wft.out
#mpirun -n $SLURM_NTASKS ./cpmd.x ntroma01_wft.inp /home/vbox_share/pseudo-extlib > ntroma01_wft.out
mpirun ./cpmd.x ntroma01_wft.inp /home/norootuser/CPMD-v4.3/pseudo-extlib > ntroma01_wft.out
相关文章:

Ubuntu搭建计算集群
计算机硬件和技术的发展使得高性能模拟和计算在生活和工作中的作用逐渐显现出来,无论是计算化学,计算物理和当下的人工智能都离不开高性能计算。笔者工作主要围绕计算化学和物理开展,亦受限于自身知识和技术所限,文中只是浅显地尝…...

数据结构~~树(2024/2/8)
目录 树 1、定义: 2、树的基本术语: 3、树的表示 树 1、定义: 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&…...

【教学类-48-03】202402011“闰年”(每4年一次 2月有29日)世纪年必须整除400才是闰年)
2000-2099年之间的闰年有25次, 背景需求: 已经制作了对称年月的数字提取,和年月日相等的年份提取 【教学类-48-01】20240205对称的“年”和“月日”(如2030 0302)-CSDN博客文章浏览阅读84次。【教学类-48-01】202402…...

如何开发一个属于自己的人工智能语言大模型?
要开发一个属于自己的人工智能语言模型,你需要遵循以下步骤: 数据收集:首先你需要大量的文本数据来训练你的模型。这些数据可以来自于各种来源,例如书籍、网站、新闻文章等。你需要确保这些数据足够多样化,以便模型能学…...

【HTTP】localhost和127.0.0.1的区别是什么?
目录 localhost是什么呢? 从域名到程序 localhost和127.0.0.1的区别是什么? 域名的等级划分 多网站共用一个IP和端口 私有IP地址 IPv6 今天在网上逛的时候看到一个问题,没想到大家讨论的很热烈,就是标题中这个: …...

Edge浏览器-常用快捷键
按键组合作用Ctrl Shift I开发人员工具Ctrl E定位到 空地址栏Ctrl L定位到 地址栏Ctrl Shift B显示或隐藏 收藏夹栏Ctrl Shift O打开收藏夹(搜索)Ctrl T打开一个新标签页Ctrl W关闭当前标签页Ctrl Shift T重新打开刚才关闭的标签页Ctrl Tab切换到下一个标签页Ctrl…...

C++:Vector动态数组的copy深入理解
动态数组分配的大小默认为2的n次方1,2,4,8... 在main中创建的vertices,push需要放到Vertex中(copy),下一次copy是因为要调整vertices的大小 vertices.push_back(Vertex(1,2,3));//拷贝 第一次&a…...

【PyTorch】PyTorch中张量(Tensor)切片操作
PyTorch深度学习总结 第三章 PyTorch中张量(Tensor)切片操作 文章目录 PyTorch深度学习总结一、前言二、获取张量中的元素1、切片(行、列数)方法2、torch.where()函数3、使元素置零的操作 一、前言 上文介绍了PyTorch中改变张量(Tensor)形状的操作&…...

GeoServer 2.11.1升级解决Eclipse Jetty 的一系列安全漏洞问题
Eclipse Jetty 资源管理错误漏洞(CVE-2021-28165) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7656) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7657) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7658) Jetty 信息泄露漏洞(CVE-2017-9735) Eclipse Jetty 安全漏洞(CVE-2022-20…...

【蓝桥杯选拔赛真题34】C++最大值 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
目录 C/C++最大值 一、题目要求 1、编程实现 2、输入输出...

STM32之USART
概述 串口通信,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter ),简称UART;而USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步收发传输器。 USAR…...

unity 点击事件
目录 点击按钮,显示图片功能教程 第1步添加ui button,添加ui RawImage 第2步 添加脚本: 第3步,把脚本拖拽到button,点击button,设置脚本的变量, GameObject添加 Component组件 点击按钮&am…...

idea自带的HttpClient使用
1. 全局变量配置 {"local":{"baseUrl": "http://localhost:9001/"},"test": {"baseUrl": "http://localhost:9002/"} }2. 登录并将结果设置到全局变量 PostMapping("/login")public JSONObject login(H…...

vue3-应用规模化-路由和状态
客户端 vs. 服务端路由 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时,浏览器会从服务端获得全新的 HTML,然后重新加载整个页面。 然而,在单页面应用中&…...

网络安全检查表
《网络攻击检查表》 1.应用安全漏洞 2.弱口令,默认口令 3.服务器互联网暴露 4.操作系统,中间件安全漏洞 5.研发服务器,邮件服务器等安全检查...

SSM框架,Maven的学习(下)
依赖传递和依赖冲突 依赖传递指的是当一个模块或库 A 依赖于另一个模块或库 B,而 B 又依赖于模块或库 C,那么 A 会间接依赖于 C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时,构建工具(如 Maven、Gradle&…...

Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)
目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线(添加约束文件)、生成比特流文件、烧录等步骤&a…...

C语言之动态内存管理
目录 1. 为什么要有动态内存分配2. malloc和freemallocfree 3. calloc和realloccallocrealloc 4. 常见的动态内存的错误对NULL直接的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存…...

【AIGC风格prompt深度指南】掌握绘画风格关键词,实现艺术模仿的革新实践
[小提琴家]ASCII风格,点,爆炸,光,射线,计算机代码 由冰和水制成的和平标志]非常详细,寒冷,冰冻,大气,照片逼真,流动,16K 胡迪尼模拟火和水&#x…...

Qt安装配置教程windows版(包括:Qt5.8.0版本,Qt5.12,Qt5.14版本下载安装教程)(亲测可行)
目录 Qt5.8.0版本安装教程Qt5.8.0版本下载安装 Qt5.12.2版本安装教程下载安装 Qt 5.14.2安装教程下载安装和创建项目 参考视频 QT为嵌入式系统提供了大量的库和可重用组件。 WPS Office,咪咕音乐,Linux桌面环境等都是QT开发的。 Qt5.8.0版本安装教程 Q…...

SpringCloud-Ribbon实现负载均衡
在微服务架构中,负载均衡是一项关键的技术,它可以确保各个服务节点间的负载分布均匀,提高整个系统的稳定性和性能。Spring Cloud 中的 Ribbon 就是一种负载均衡的解决方案,本文将深入探讨 Ribbon 的原理和在微服务中的应用。 一、…...

Qt网络编程-TCP与UDP
网络基础 TCP与UDP基础 关于TCP与UDP的基础这里就不过多介绍了,具体可以查看对应百度百科介绍: TCP(传输控制协议)_百度百科 (baidu.com) UDP_百度百科 (baidu.com) 需要知道这两者的区别: 可靠性: TC…...

Promise 常见题目
微信搜索“好朋友乐平”关注公众号。 1. Promise 对象池 请你编写一个异步函数 promisePool ,它接收一个异步函数数组 functions 和 池限制 n。它应该返回一个 promise 对象,当所有输入函数都执行完毕后,promise 对象就执行完毕。 池限制 定…...

五大架构风格之五:仓库架构风格
仓库架构风格: 仓库风格架构(Repository Architecture Style)是一种软件架构模式,它主要用于处理系统中的持久化数据存储和检索。在这一风格中,仓库(Repository)作为应用程序与数据库或其他持久…...

探索设计模式的魅力:外观模式简化术-隐藏复杂性,提供简洁接口的设计秘密
设计模式专栏:http://t.csdnimg.cn/U54zu 目录 引言:探索简化之路 一、起源和演变 二、场景案例分析 2.1 不用模式实现:用一坨坨代码实现 2.2 问题 2.3 外观模式重构代码 定义 界面 接口 利用外观模式解决问题步骤 外观模式结构和说明 重构…...

java之Maven
1. maven Maven是管理和构建java项目的工具 项目依赖资源(jar包)的管理,避免版本冲突统一项目结构项目构建,标准跨平台(Linux,window,MacOS)的自动化项目管理 2.maven依赖仓库 2.maven安装 maven安装视频教程 3. IDEA集成Maven 4. maven的依赖范围 5. maven生命…...

Elasticsearch(四)
是这样的前面的几篇笔记,感觉对我没有形成知识体系,感觉乱糟糟的,只是大概的了解了一些基础知识,仅此而已,而且对于这技术栈的学习也是为了在后面的java开发使用,但是这里的API学的感觉有点乱!然…...

蓝桥杯-X图形
问题描述 给定一个字母矩阵。一个 X 图形由中心点和由中心点向四个 45度斜线方向引出的直线段组成,四条线段的长度相同,而且四条线段上的字母和中心点的字母相同。 一个 X 图形可以使用三个整数 r,c,L 来描述,其中 r,c 表示中心点位于第 r 行…...

2. Maven 继承与聚合
目录 2. 2.1 继承 2.2继承关系 2.2.1 思路分析 2.2.2 实现 2.1.2 版本锁定 2.1.2.1 场景 2.1.2.2 介绍 2.1.2.3 实现 2.1.2.4 属性配置 2.2 聚合 2.2.1 介绍 2.2.2 实现 2.3 继承与聚合对比 maven1:分模块设计开发 2. 在项目分模块开发之后啊&#x…...

如何把手机平板变为电脑的屏幕
文章目录 安装软件运行效果结尾 本文首发地址 https://h89.cn/archives/181.html 最新更新地址 https://gitee.com/chenjim/chenjimblog 闲置的手机平板、触屏音箱等,均可作为电脑的扩展屏,为电脑增加一块显示屏,本文介绍如何使用免费的软件s…...