Merge branch 'master' of gitee.com:Eyestorm/notes

This commit is contained in:
estomm
2022-01-13 13:21:59 +08:00
2 changed files with 375 additions and 0 deletions

View File

@@ -84,3 +84,62 @@ scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest
## 网络教程
### 1 单个文件传输
下面定义的远程计算机的主机域名是192.168.1.104 上传文件的路径是 /usr/local/nginx/html/webs下面的文件且 服务器的账号是root 那么密码需要自己输入自己的密码即可。
1. 从本地上传文件到远程计算机或服务器的命令如下:
先进入本地目录下,然后运行如下命令:
```
scp my_local_file.zip root@192.168.1.104:/usr/local/nginx/html/webs
```
2. 从远程主机复制文件到本地主机(下载)的命令如下假如远程文件是about.zip
先进入本地目录下,然后运行如下命令:
```
scp root@192.168.1.104:/usr/local/nginx/html/webs/about.zip .
```
### 1 多文件传输
1. 从本地文件复制多个文件到远程主机(多个文件使用空格分隔开)
先进入本地目录下,然后运行如下命令:
```
scp index.css json.js root@192.168.1.104:/usr/local/nginx/html/webs
```
2. 从远程主机复制多个文件到当前目录
先进入本地目录下,然后运行如下命令:
```
scp root@192.168.1.104:/usr/local/nginx/html/webs/\{index.css,json.js\} .
```
### 3 复制整个文件夹(使用r switch 并且指定目录)
1. 从本地文件复制整个文件夹到远程主机上文件夹假如是diff
先进入本地目录下,然后运行如下命令:
```
scp -v -r diff root@192.168.1.104:/usr/local/nginx/html/webs
```
2. 从远程主机复制整个文件夹到本地目录下文件夹假如是diff
先进入本地目录下,然后运行如下命令:
```
scp -r root@192.168.1.104:/usr/local/nginx/html/webs/diff .
```
### 4 在两个远程主机之间复制文件
scp也可以把文件从一个远程主机复制到另一个远程主机上。
如下命令:
```
scp root@192.168.1.104:/usr/local/nginx/html/webs/xx.txt root@192.168.1.105:/usr/local/nginx/html/webs/
```
### 5 使用压缩来加快传输
在文件传输的过程中,我们可以使用压缩文件来加快文件传输,我们可以使用 C选项来启用压缩功能该文件在传输过程中被压缩
在目的主机上被解压缩。
如下命令:
```
scp -vrC diff root@192.168.1.104:/usr/local/nginx/html/webs
```

View File

@@ -0,0 +1,316 @@
> 参考文献
> https://www.hpccube.com/doc/1.0.6/30000/general-handbook/scheduler/intro.html
## 介绍
不要在登录节点上不通过作业调度管理系统直接运行作业(编译等日常 操作除外),以免影响其余用户的正常使用。
不通过作业调度管理系统直接在计算节点上运行将会被杀掉。
## 分区信息查询-sinfo
用户在使用时首先需要了解哪些分区可以使用。在计算服务中使用sinfo命令查询队列信息。根据命令输出可以看到当前节点所在集群的作业调度系统的队列情况并可看到每个分区可访问的空闲节点数量、节点名称。
命令的默认输出中PARTITION表示分区、NODES表示节点数、STATE表示节点运行状态、NODELIST表示节点列表。其中状态一列中idle表示节点处于空闲状态可接收新的作业allocated表示节点已经分配了一个或者多个作业且所有核心用满在作业释放前不能再被分配作业mix状态为使用部分核心仍可以被分配作业drain状态表示对应节点已经下线drng表示已下线但仍有作业在运行。需要关注的是PARTITION和STATE两列。PARTITION指示任务可提交到的分区即队列。下表列出关于sinfo命令常用选项更多选项可通过man sinfo命令查看sinfo手册。
| sinfo | 信息 |
|----------------------------------------------------|-----------------|
| -a, --all | 查看所有分区信息 |
| -d, --dead | 查看处于dead状态的详细信息 |
| -l, --long | 查看分区详细信息 |
| -N, --Node | 查看节点信息 |
| -p <patition>, --partition=<partition> | 查看指定分区信息 |
| -t <states>, --state=<state> | 查看指定状态的节点 |
## 2 提交交互式作业
交互式提交作业在计算服务E-Shell窗口中执行srun命令主要命令格式如下
```
srun [options] program
```
### srun常用选项
srun包括多个选项其中最常用的选项主要有以下几个
```
-n 或 --ntasks=number
```
指定要运行的任务数,默认每个任务一个处理器核。
```
-c 或 --cpus-per-task=ncpus
```
作业步的每个任务需要 ncpus 个处理器核。若未指定该选项,则默认为每个任务分配一个处理器核。
```
-N 或 --nodes=nnodes
```
请求为作业分配nnodes个节点。如果作业的请求节点个数超出了分区中配置的节点数目作业将被拒绝。
```
-p 或 --partition=partitionname
```
在指定分区中分配资源。如未指定,则在系统默认分区中分配资源。
```
-w 或 --nodelist=nodenamelist
```
请求指定的节点名称列表。列表可以用逗号分隔的节点名或节点范围(如 h02r1n[00-19])指定。
```
--exclusive
```
作业独占节点,作业运行过程中不允许其他作业使用节点,即使节点核心未用满。
```
-h, --help
```
若需使用 srun 更多选项可通过“srun -h” 或“srun --help” 查看。
使用示例
在分区 normal 上指定任务数运行 hostname如下图所示
```
srun -p normal -n 2 hostname
```
在分区 normal 上指定节点运行 hostname如下图所示
```
srun -p normal -N 2 -n 2 -2 abc,def hostname
```
在分区 normal 上指定节点数2任务数6独占运行 hostname如下图所示
```
srun -p normal -N 2 -n 6 --exclusive hostname
```
## 3 提交批处理作业-sbatch
### 简介
用户使用sbatch命令提交作业脚本其基本格式为sbatch jobfile。jobfile为作业脚本文件。在批处理作业脚本中脚本第一行以"#!"字符开头,并指定脚本文件的解释程序,如 shbash。接下来写作业使用到的调度系统参数#开头,最后写作业运行的程序命令。
用户可使用sbatch命令提交用户作业脚本。示例如下
```
sbatch < xxx.sbatch
```
作业提交脚本格式编写如下,作业控制指令以"#SBATCH"开头,其他注释以"#"开头。例如wrf测试脚本run.sbatch如下
```
#!/bin/bash
#SBATCH -J wrf
#SBATCH --comment=WRF
#SBATCH -n 128
#SBATCH --ntasks-per-node=32
#SBATCH -p normal
#SBATCH -o %j
#SBATCH -e %j
mpirun -np 128./wrf.exe
```
### sbatch常用选项。
作业控制参数如下:
| 选项 | 含义 | 类型 | 示例 |
|------------------------------------------|-------------------------------|-----|---------------------------------------|
| -J | 作业名称使用squeue看到的作业名 | 字符串 | -J wrf表示作业名称为"wrf" |
| -n | 作业申请的总cpu核心数 | 数值 | -n 240表示作业申请240个cpu核心 |
| -N | 作业申请的节点数 | 数值 | -N 10 表示作业申请10个计算节点 |
| -p | 指定作业提交的队列 | 字符串 | -p silicon表示将作业提交到silicon队列 |
| --ntasks-per-node | 指定每个节点运行进程数 | 数值 | --ntasks-per-node=32表示每个节点运行32个进程任务 |
| --cpus-per-task=<count> | 指定任务需要的处理器数目 | 数值 | --cpus-per-task=1 表示每个任务占用1个处理器核 |
| -t | 指定作业的执行时间,若超过该时间,作业将会被杀死 | 数值 | -t 30 表示作业的执行时间不超过30分钟 |
| -o | 指定作业标准输出文件的名称不能使用shell环境变量 | 字符串 | -o %j表示使用作业号作为作业标准输出文件的名称%J表示作业号 |
| -e | 指定作业标准错误输出文件的名称不能使用shell环境变量 | 字符串 | -e %j表示使用作业号作为作业标准错误输出文件的名称 |
| -w, --nodelist=hosts... | 指定分配特定的计算节点 | 字符串 | -w t0100,t0101 表示使用t0100 t0101等2个节点 |
| -x, --exclude=hosts... | 指定不分配特定的阶段节点 | 字符串 | -x t0100,t0101 表示不使用t0100 t0101等2个节点 |
| --exclusive | 指定作业独占计算节点 | 字符串 | sbatch exclusivetest.job |
| --mem=<size[units]> | 指定作业在每个节点使用的内存限制。 | 数字 | --mem=2G 限定作业在每个节点最多占用2G的最大内存。 |
| --mem-per-cpu=<size[units]> | 限定每个进程占用的内存数。 | 数字 | --mem-per-cpu=512M 限定作业每个进程占用的最大内存。 |
| -d, --dependency=<dependency_list> | 作业依赖关系设置 | 字符串 | -d after:123 表示本作业须待作业123开始以后再执行 |
| --gres=<list> | 指定每个节点使用通用资源名称及数量 | 字符串 | --gres=加速卡:2 表示本作业使用加速卡且每个节点使用2卡 |
### 使用示例-串行作业示例
```
#!/bin/bash
#SBATCH J TestSerial
#SBATCH -p normal
#SBATCH -N 1
#SBATCH n 1
#SBATCH -o log/%j.loop
#SBATCH -e log/%j.loop
echo "SLURM_JOB_PARTITION=$SLURM_JOB_PARTITION"
echo "SLURM_JOB_NODELIST=$SLURM_JOB_NODELIST"
srun ./calc_serial 1000000
```
### 使用实例-mpi作业示例
OpenMPI支持多种方式与作业调度集成其中最推荐的方式是使用srun直接启动任务。
在作业脚本中使用srun
```sh
#!/bin/bash
#SBATCH -o %j
#SBATCH -J MPI
#SBATCH -t 00:10:00
#SBATCH -p hpc
#SBATCH --mem-per-cpu=3G
#SBATCH --tasks-per-node=32
#SBATCH -N 2
module load compiler/devtoolset/7.3.1
module load compiler/rocm/2.9
module load mpi/hpcx/2.4.1/gcc-7.3.1
# 4x32, about 60 sec
export LOOPMAX=1000000
CORELOOP=$(expr $LOOPMAX / 128)
echo "CORELOOP=$CORELOOP"
export LOOPMAX=$(expr $SLURM_NTASKS \* $CORELOOP )
echo "LOOPMAX=$LOOPMAX"
export MPITYPE=pmix_v3
echo "use srun, loop=$LOOPMAX" && time srun --mpi=$MPITYPE ./open_fire_v5 $LOOPMAX
```
### 作业环境变量
提交作业后,作业管理软件会产生一些环境变量,可以在作业脚本中使用。列举如下
| 名称 | 含义 | 类型 | 示例 |
|------------------------|-----------------------------------|-----|--------------------------------------------------------------------------|
| SLURM\_JOB\_ID | 作业id即作业调度系统为作业分配的作业号可用于bjobs等命令 | 数值 | hostfile=" ma\.$SLURM\_JOB\_ID" 使用$SLURM\_JOB\_ID定义machinefile指定mpi节点文件 |
| SLURM\_JOB\_NAME | 作业名称,即\-J 选项指定的名称 | 字符串 | mkdir $\{SLURM\_JOB\_NAME\} 根据作业名称创建临时工作目录 |
| SLURM\_JOB\_NUM\_NODES | 作业分配到的节点总数 | 数值 | echo $SLURM\_JOB\_NUM\_NODES |
| SLURM\_JOB\_NODELIST | 作业被分配到的节点列表 | 字符串 | echo $SLURM\_JOB\_NODELIST |
| SLURM\_JOB\_PARTITION | 作业被分配到的队列名 | 字符串 | echo $SLURM\_JOB\_NODELIST |
## 4 提交节点资源获取作业-salloc
### 简介
该命令支持用户在提交作业前,先获取所需计算资源。
### 使用示例
首先申请资源,如图所示:
```
salloc -n=4
```
ssh到计算节点执行命令
```
ssh abced
```
执行exit退出作业资源释放
```
exit
```
## 5 作业信息查询-squeue
用户使用squeue命令可以查看作业信息例如hc用户执行命令输出如下
```
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
64509 debug DL_test hc R 3:58:40 300
b01r1n[00-08],b01r4n[06-08],b03r1n[00-08,10-18],b06r2n[10-18],b06r3n[00-08,10-18],b07r1n[00-08,10-18],b07r2n[00-08,10-18],b07r3n[00-08,10-18],b08r1n[00-08,10-18],b08r2n[00-08,10-18],b08r4n[00-08,10-18],b09r1n[00-08,10-18],b09r2n[00-08,10-18],b09r3n[00-08,10-18],b09r4n[00-08,10-18],b10r4n[00-08,10-18],b11r1n[00-08,10-18],g05r4n[15-19],g06r1n[00-06],g09r1n[15-19],g09r2n[00-09]
```
其中JOBID表示任务ID编号PARTITION表示作业所在队列分区NAME表示任务名称USER为用户ST为作业状态TIME为已运行时间NODES表示占用节点数NODELIST(REASON)为任务运行的节点列表或者原因说明。另外状态列中R-Runing正在运行PD-PenDing资源不足排队中CG-COMPLETING(作业正在完成中)CA-CANCELLED作业被人为取消CD-COMPLETED作业运行完成F-FAILED 作业运行失败NF-NODE_FAIL节点问题导致作业运行失败PR 作业被抢占S 作业被挂起TO 作业超时被杀。
| squeue |信息|
|--------------------------------|---|
| \-\-jobs <job\_id\_list> | 查看指定JOB IDS的作业信息 |
| \-\-name=<name> | 查看指定名称的作业信息 |
| \-\-partition=<names> | 查看指定分区的作业信息 |
| \-\-priority | 按照优先级查看作业信息 |
| \-\-state=<names> | 指定状态查看作业信息 |
| \-\-users=<names> | 指定用户名称查看作业信息 |
## 6 节点/作业详细信息查询-scontrol
查看、修改SLURM配置和状态此处仅介绍常用的查看命令。
查看节点信息
```sh
scontrol show node[=node_name]
```
查看节点的详细信息如果不指定ndoe_name默认会显示所有节点信息如果指定node_name则仅显示指定节点的信息。
```sh
$ scontrol show node b13r2n18
NodeName=b13r2n18 Arch=x86_64 CoresPerSocket=8
CPUAlloc=32 CPUTot=32 CPULoad=0.10
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=加速卡:国产处理器:4
NodeAddr=b13r2n18 NodeHostName=b13r2n18 Version=18.08
OS=Linux 3.10.0-693.el7.x86_64 #1 SMP Mon Apr 8 19:28:59 CST 2019
RealMemory=126530 AllocMem=61856 FreeMem=116609 Sockets=4 Boards=1
MemSpecLimit=10240
State=ALLOCATED ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=debug
BootTime=2019-07-14T13:42:57 SlurmdStartTime=2019-07-14T13:43:22
CfgTRES=cpu=32,mem=126530M,billing=32,gres/加速卡=4
AllocTRES=cpu=32,mem=61856M,gres/加速卡=4
CapWatts=n/a
CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
```
### 查看作业信息
```
scontrol show job [jod_id]
```
查看作业的详细信息如果指定job_id则仅显示指定作业的信息。
```
$ scontrol show job 64509
JobId=64509 JobName=DL_test
UserId=hc(1060) GroupId=nobody(1060) MCS_label=N/A
Priority=1000 Nice=0 Account=sugon QOS=normal
JobState=RUNNING Reason=None Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=1 Reboot=0 ExitCode=0:0
RunTime=04:01:35 TimeLimit=1-00:00:00 TimeMin=N/A
SubmitTime=2019-07-16T13:44:19 EligibleTime=2019-07-16T13:44:19
AccrueTime=2019-07-16T13:44:19
StartTime=2019-07-16T13:44:20 EndTime=2019-07-17T13:44:20 Deadline=N/A
PreemptTime=None SuspendTime=None SecsPreSuspend=0
LastSchedEval=2019-07-16T13:44:20
Partition=debug AllocNode:Sid=j00admin2:44146
ReqNodeList=(null) ExcNodeList=(null)
NodeList=b01r1n[00-08],b01r4n[06-08],b03r1n[00-08,10-18],b06r2n[10-18],b06r3n[00-08,10-18],b07r1n[00-08,10-18],b07r2n[00-08,10-18]b07r3n[00-08,10-18],b08r1n[00-08,10-18],b08r2n[00-08,10-18],b08r4n[00-08,10-18],b09r1n[00-08,10-18],b09r2n[00-08,10-18],b09r3n[00-0810-18],b09r4n[00-08,10-18],b10r4n[00-08,10-18],b11r1n[00-08,10-18],g05r4n[15-19],g06r1n[00-06],g09r1n[15-19],g09r2n[00-09]
BatchHost=b01r1n00
NumNodes=300 NumCPUs=9600 NumTasks=9600 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
TRES=cpu=9600,mem=18556800M,node=300,billing=9600,gres/加速卡=1200
Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
MinCPUsNode=1 MinMemoryCPU=1933M MinTmpDiskNode=0
Features=(null) DelayBoot=00:00:00
OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
Command=/public/home/hc/slurm/sleep.slurm
WorkDir=/public/home/hc/slurm
StdErr=/public/home/hc/slurm/slurm-64509.out
StdIn=/dev/null
StdOut=/public/home/hc/slurm/slurm-64509.out
Power=
TresPerNode=加速卡:4
```
## 7 作业删除-scancel
作业删除命令scancel <作业号> 。
```
[haowj@h01r1n00 ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
65639 normal executab haowj R 0:02 2 h07r1n[14-15]
[haowj@h01r1n00 ~]$ scancel 65639
[haowj@h01r1n00 ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
[haowj@h01r1n00 ~]$
```
普通用户只能查看、删除自己提交的作业;
| squeue |信息|
|--------------------------------|---|
| \-\-jobs <job\_id\_list> | 查看指定JOB IDS的作业信息 |
| \-\-name=<name> | 查看指定名称的作业信息 |
| \-\-partition=<names> | 查看指定分区的作业信息 |
| \-\-priority | 按照优先级查看作业信息 |
| \-\-state=<names> | 指定状态查看作业信息 |
| \-\-users=<names> | 指定用户名称查看作业信息 |