当前位置: 首页 > news >正文

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搭建计算集群

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

数据结构~~树(2024/2/8)

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

【教学类-48-03】202402011“闰年”(每4年一次 2月有29日)世纪年必须整除400才是闰年)

2000-2099年之间的闰年有25次&#xff0c; 背景需求&#xff1a; 已经制作了对称年月的数字提取&#xff0c;和年月日相等的年份提取 【教学类-48-01】20240205对称的“年”和“月日”&#xff08;如2030 0302&#xff09;-CSDN博客文章浏览阅读84次。【教学类-48-01】202402…...

如何开发一个属于自己的人工智能语言大模型?

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

【HTTP】localhost和127.0.0.1的区别是什么?

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

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&#xff0c;2&#xff0c;4&#xff0c;8... 在main中创建的vertices&#xff0c;push需要放到Vertex中&#xff08;copy&#xff09;&#xff0c;下一次copy是因为要调整vertices的大小 vertices.push_back(Vertex(1,2,3));//拷贝 第一次&a…...

【PyTorch】PyTorch中张量(Tensor)切片操作

PyTorch深度学习总结 第三章 PyTorch中张量(Tensor)切片操作 文章目录 PyTorch深度学习总结一、前言二、获取张量中的元素1、切片&#xff08;行、列数&#xff09;方法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

概述 串口通信&#xff0c;通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter &#xff09;&#xff0c;简称UART&#xff1b;而USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff09;通用同步收发传输器。 USAR…...

unity 点击事件

目录 点击按钮&#xff0c;显示图片功能教程 第1步添加ui button&#xff0c;添加ui RawImage 第2步 添加脚本&#xff1a; 第3步&#xff0c;把脚本拖拽到button&#xff0c;点击button&#xff0c;设置脚本的变量&#xff0c; 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 应用中点击一个链接时&#xff0c;浏览器会从服务端获得全新的 HTML&#xff0c;然后重新加载整个页面。 然而&#xff0c;在单页面应用中&…...

网络安全检查表

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

SSM框架,Maven的学习(下)

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

Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线&#xff08;添加约束文件&#xff09;、生成比特流文件、烧录等步骤&a…...

C语言之动态内存管理

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

【AIGC风格prompt深度指南】掌握绘画风格关键词,实现艺术模仿的革新实践

[小提琴家]ASCII风格&#xff0c;点&#xff0c;爆炸&#xff0c;光&#xff0c;射线&#xff0c;计算机代码 由冰和水制成的和平标志]非常详细&#xff0c;寒冷&#xff0c;冰冻&#xff0c;大气&#xff0c;照片逼真&#xff0c;流动&#xff0c;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&#xff0c;咪咕音乐&#xff0c;Linux桌面环境等都是QT开发的。 Qt5.8.0版本安装教程 Q…...

5大场景解锁智能群管理:如何让LuckyLilliaBot提升社群运营效率80%

5大场景解锁智能群管理&#xff1a;如何让LuckyLilliaBot提升社群运营效率80% 【免费下载链接】LuckyLilliaBot NTQQ的OneBot API插件 项目地址: https://gitcode.com/gh_mirrors/li/LuckyLilliaBot LuckyLilliaBot作为一款基于OneBot11协议的NTQQ插件&#xff0c;能够将…...

BURSTER 9235 (85437090) 应变片信号放大器

BURSTER 9235 (85437090) 应变片信号放大器品牌&#xff1a;BURSTER&#xff08;德国波司特&#xff0c;精密测量技术专家&#xff09;型号&#xff1a;9235内部订货号&#xff1a;85437090类型&#xff1a;直连式&#xff08;In-Line&#xff09;应变片传感器信号放大器一、核…...

OpenClaw备份策略:GLM-4.7-Flash模型与技能容灾方案

OpenClaw备份策略&#xff1a;GLM-4.7-Flash模型与技能容灾方案 1. 为什么需要备份OpenClaw环境 去年冬天的一个深夜&#xff0c;我的MacBook突然遭遇硬盘故障。当时OpenClaw正在执行一个长达3小时的自动化数据处理任务&#xff0c;所有中间状态和配置瞬间消失。这次事故让我…...

嵌入式开发实战:用状态机+事件驱动框架搞定串口通信(附完整代码)

嵌入式开发实战&#xff1a;状态机与事件驱动框架在串口通信中的高效应用 串口通信作为嵌入式系统中最基础也最常用的外设接口之一&#xff0c;其稳定性和效率直接影响着整个系统的性能表现。传统的轮询式串口处理方式不仅占用大量CPU资源&#xff0c;还难以应对复杂通信协议和…...

人体关键点检测实战:如何用OKS和AP评估模型性能(附Python代码示例)

人体关键点检测实战&#xff1a;OKS与AP指标深度解析与Python实现 在计算机视觉领域&#xff0c;人体姿态估计一直是热门研究方向&#xff0c;而准确评估模型性能则是项目落地的关键环节。不同于常规的目标检测任务&#xff0c;人体关键点检测需要更精细的评估体系——这正是OK…...

SMUDebugTool:16核心独立调节与实时硬件监控的锐龙平台性能优化工具

SMUDebugTool&#xff1a;16核心独立调节与实时硬件监控的锐龙平台性能优化工具 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...

探索电池2RC等效电路模型:从参数辨识到SOC估计

电池2RC等效电路模型&#xff0c;最小二乘法参数辩识&#xff0c;电池端电压误差小&#xff0c;扩展卡尔曼估计SOC精度高。 有文档&#xff0c;数据&#xff0c;视频&#xff0c;仿真图。在电池研究领域&#xff0c;准确建模和参数估计对于理解电池行为至关重要。今天咱就唠唠电…...

无障碍辅助利器:OpenClaw+GLM-4.7-Flash语音控制电脑实操

无障碍辅助利器&#xff1a;OpenClawGLM-4.7-Flash语音控制电脑实操 1. 为什么我们需要语音控制电脑 去年夏天&#xff0c;我的一位程序员朋友因意外导致手部受伤&#xff0c;暂时失去了正常使用键盘鼠标的能力。看着他艰难地用语音输入法逐字敲代码&#xff0c;我开始思考&a…...

【声音克隆】Qwen3-TTS-12Hz-1.7B-Base优化技巧:如何生成更自然、更逼真的语音

【声音克隆】Qwen3-TTS-12Hz-1.7B-Base优化技巧&#xff1a;如何生成更自然、更逼真的语音 1. 理解Qwen3-TTS的核心能力 1.1 多语言与方言支持 Qwen3-TTS-12Hz-1.7B-Base模型支持10种主要语言和多种方言风格&#xff0c;包括中文、英文、日文等。这种广泛的语言覆盖能力使其…...

仿真模型中硅胶减震器的特征频率与谐振频率的受力分析

COMSOL仿真模型硅胶减震器减振器特征频率谐振频率受力分析仿真模型最近在研究硅胶减震器的特性&#xff0c;发现用COMSOL来仿真这东西还挺有意思的。硅胶减震器嘛&#xff0c;主要就是用来减振的&#xff0c;比如在一些精密仪器或者机械设备上&#xff0c;防止振动对设备造成损…...