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…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
