当前位置: 首页 > 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…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...