小集群的使用说明

一.集群的介绍

集群采用slurm调度系统,NIS用户认证系统,操作系统为Centos Linux release 8.3.2011版本,家目录所在存储为/share06。计算节点CPU为2颗AMD EPYC 7H12,每颗CPU有64核心,单节点共计128核心,内存为512G。

1.调度系统:slurm

Slurm(Simple Linux Utility for Resource Management,http://slurm.schedmd.com/)是开源的、具有容错性和高度可扩展大型和小型Linux集群资源管理和作业调度系统。超级计算系统可利用Slurm进行资源和作业管理,以避免相互干扰,提高运行效率。所有需运行的作业无论是用于程序调试还是业务计算均必须通过交互式并行srun、批处理式sbatch或分配式salloc等命令提交,提交后可以利用相关命令查询作业状态等。请不要在登录节点直接运行作业(编译除外),以免影响其余用户的正常使用。
点击slurm官网查看更多内容和了解slurm的安装与使用。

2.用户认证系统:nis

集群登录节点与计算节点采用统一的用户认证.如果登录计算节点需要密码,输入访问集群的密码即可,当然也可以设置秘钥,实现节点间免密登录。
用户家目录(登入集群后所在目录即为每个用户的家目录)所在存储是共享到所有节点。

二.集群的使用

1.连接集群

windows可以使用Xshell和Putty工具;
mac和linux可以在终端里直接连接:ssh username@server_ip -P port。

ssh命令行登录:
ssh -i username.id username@server_ip -p port
scp传输文件:
scp -P port -i username.id  file username@server_ip:/path/on/cluster/

(1)第一次登录后,强烈修改密码,密码长度建议超过10,且包含大小写、数字、特殊字符,提高安全性。(密码登录方式后续将统一修改成使用秘钥登录,第一次登录后不需要修改密码)

修改密码的命令:
$ yppasswd 

(2)Mac和linux上设置免密登录服务器:

##通过命令将本地公钥id_rsa.pub拷贝到服务器上的authorized_keys文件中,也可以选择手动复制
ssh-copy-id -i ~/.ssh/id_rsa.pub  -p port username@server_ip

2.加载环境变量

集群有部分软件已预设在module环境里;可以通过module工具去加载;其他自行安装的软件则可以通过export的命令去加载。
目前共享目录下安装了两款软件,intel编译器2022.2.0版本和openmpi的4.1.4版本。

  • 方法一:module
$ module avail
------------- /share06/soft/modulefiles ------------- 
anaconda2-2019  anaconda3-2022  cmake-3.26.0  intel-2018u3  intel-2022.2.0  openmpi-4.1.4
$ module load intel-2022.2.0   ###加载环境变量
$ module list
Currently Loaded Modulefiles:
 1) intel-2022.2.0
$ which mpirun
/share06/soft/intel-2022.2.0/mpi/2021.6.0/bin/mpirun
$ module unload intel-2022.2.0    ###卸载该环境变量
  • 方法二:export
#加载可执行命令的环境变量
export PATH=/share06/soft/openmpi-4.1.4/bin:$PATH
#加载库的环境变量
export LD_LIBARY_PATH=/share06/soft/openmpi-4.1.4/bin/lib:$LD_LIBRARY_PATH
#加载include的环境变量
export CPATH=/share06/soft/openmpi-4.1.4/bin/include:$CPATH

3.登录&&管理节点

连接上集群后,登录的pmo002节点为登录&&管理节点,该节点不允许直接跑程序,否则会被自动杀掉,请将程序通过slurm调度系统提交到后端计算节点运行。

4.slurm基本情况的查看

常用命令:sinfo,squeue,sacct。下面简单介绍下用法,更多参数请查看man手册。

(1)查看队列与节点情况
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
th02         up   infinite      1    mix th02
• PARTITION:分区名,也成为队列名称
• AVAIL:分区状态
• TIMELIMIT:时间限制
     – infinite:表示没有时间限制
• NODES:该分区的节点数
• STATE:节点的状态
     – idle:节点空闲
     – mix:The node has some of its CPUs ALLOCATED while others are IDLE。
     – alloc:节点资源已被全部分配,该节点不再接受新作业调度
     – down:节点故障
     – unk:节点状态未知
     – drng/drain:节点被人为置为drain状态,如果当前有作业正在运行,则变成drng,作业结束后变成drain
     – comp:有作业正在退出
• NODELIST:节点列表
(2)查看节点的详细信息
$ scontrol show node th02
NodeName=th02 Arch=x86_64 CoresPerSocket=1
   CPUAlloc=20 CPUTot=128 CPULoad=25.85
   AvailableFeatures=(null)
   ActiveFeatures=(null)
   Gres=(null)
   NodeAddr=th02 NodeHostName=th02 Version=20.11.6
   OS=Linux 4.18.0-240.el8.x86_64 #1 SMP Fri Sep 25 19:48:47 UTC 2020
   RealMemory=515800 AllocMem=80560 FreeMem=503205 Sockets=128 Boards=1
   State=MIXED ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
   Partitions=th02
   BootTime=2023-01-06T17:55:54 SlurmdStartTime=2023-01-10T10:46:46
   CfgTRES=cpu=128,mem=515800M,billing=128
   AllocTRES=cpu=20,mem=80560M
   CapWatts=n/a
   CurrentWatts=0 AveWatts=0
   ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
   Comment=(null)
CPUAlloc=20:该节点已经使用了20个CPU核
CPUTot=128:该节点共有128个CPU核心可供分配
(3)查看已提交的作业

目前集群没有做作业限制,因此每个人都可以看到别人提交的作业信息。

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            284074      th02    el.sh    xiazq  R      10:17      1 th02
(4)查看历史提过运行过的作业
$ sacct -u xiazq -X --field=jobid,partition,jobname,user,nnodes,nodelist,start,end,elapsed,state
       JobID  Partition    JobName      User   NNodes        NodeList               Start                 End    Elapsed      State
------------ ---------- ---------- --------- -------- --------------- ------------------- ------------------- ---------- ----------
284050             th02   hostname     xiazq        1            th02 2023-01-10T10:54:04 2023-01-10T10:54:04   00:00:00  COMPLETED
284073             th02      el.sh     xiazq        1            th02 2023-01-10T15:45:31 2023-01-10T15:59:32   00:14:01     FAILED
284074             th02      el.sh     xiazq        1            th02 2023-01-10T15:55:24             Unknown   00:13:20    RUNNING

3.使用slurm提交作业

推荐使用slurm的提交脚本提交作业。提交命令为:sbatch sub.sh
取消作业的命令为:scancel jobid(jobid为执行squeue获取到的第一列数值)。

每个用户最多使用128核。如集群当前空闲,用户需要超过128核时,可在微信群里进行申请。

(1)srun提交作业:适合新程序的调试使用,参数与sbatch参数一致,使用方式:srun -p th02 -N 1 -n 10 -J test python xxx.py
作业提交后,默认会在当前终端进行输出,当前终端连接断开后,则该作业也会中断,因此建议使用该方式进行作业调试。
(2)sbatch提交作业:适合日常程序的运行
一个简单的提交脚本如下所示:

$ cat sub.sh
#!/bin/bash
#SBATCH -p th02
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -J test
#SBATCH --mem 20GB

hostname

针对每一条的注释:

参数含义
sub.sh这是脚本名称,可以自定义
#SBATCH -p th02指定使用的分区,th02分区
#SBATCH -N 1指定一共使用的节点数,1个节点
#SBATCH -n 1指定一共使用的核数,1个CPU核
#SBATCH -J test指定作业名,test
#SBATCH --mem 20GB默认单核分配4G内存,如程序对内存消耗比较大,可指定需要的内存大小
#SBTACH -o %j.out指定正常输出,输出到以作业号命名的out文件(877.out),默认的输出文件名称为slurm-877.out
#SBTACH -e %j.err指定错误输出,输出到以作业号命名的err文件(877.err),默认的输出文件名称为slurm-877.out
hostname从这里开始,写程序本身运行时需要加载的环境变量以及运行命令即可

示例一:例如我们需要运行一个2节点共40个核的vasp程序,提交脚本如下:

$ cat sub.sh
#!/bin/bash
#SBATCH -p th02
#SBATCH -N 2
#SBATCH -n 40
#SBATCH -J vasp544

module load intel-2022.2.0
mpirun -np 40 vasp_std

示例二:例如我们需要运行一个1节点共1个核的python程序,提交脚本如下:

$ cat sub.sh
#!/bin/bash
#SBATCH -p th02
#SBATCH -N 1
#SBATCH -n 1

export PATH=/share06/soft/anaconda3/bin:$PATH
python myscript.py
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Spring项目中使用Redis集群的配置,你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中添加了Spring Data Redis的依赖。你可以在项目的`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 在项目的配置文件(如`application.properties`或`application.yml`)中,配置Redis的连接信息。对于Redis集群,你需要提供多个节点的连接信息。示例配置如下: ```yaml spring: redis: cluster: nodes: <redis-node-1>:<port>, <redis-node-2>:<port>, <redis-node-3>:<port> ``` 其中,`<redis-node-1>:<port>`表示Redis集群中的一个节点的主机名(或IP地址)和端口号。你可以根据实际情况添加更多节点的连接信息。 3. 可选地,你可以配置一些其他的Redis相关属性,例如连接超时时间、密码等。以下是一些常用的配置示例: ```yaml spring: redis: cluster: nodes: <redis-node-1>:<port>, <redis-node-2>:<port>, <redis-node-3>:<port> timeout: 2000 # 连接超时时间(单位:毫秒) password: <redis-password> # Redis密码(如果有的话) ``` 4. 在你的代码中,你可以使用`RedisTemplate`或`StringRedisTemplate`来操作Redis集群。例如,你可以使用`StringRedisTemplate`来存储和获取键值对: ```java @Autowired private StringRedisTemplate redisTemplate; public void setValue(String key, String value) { redisTemplate.opsForValue().set(key, value); } public String getValue(String key) { return redisTemplate.opsForValue().get(key); } ``` 这样,你就可以在Spring项目中成功配置和使用Redis集群了。希望对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值