mirror of
https://github.com/Estom/notes.git
synced 2026-02-03 02:23:31 +08:00
Merge branch 'master' of gitee.com:Eyestorm/notes
This commit is contained in:
@@ -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
|
||||
```
|
||||
316
Linux/工具篇/slrum作业调度.md
Normal file
316
Linux/工具篇/slrum作业调度.md
Normal 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为作业脚本文件。在批处理作业脚本中,脚本第一行以"#!"字符开头,并指定脚本文件的解释程序,如 sh,bash。接下来写作业使用到的调度系统参数,以#开头,最后写作业运行的程序命令。
|
||||
|
||||
用户可使用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> | 指定用户名称查看作业信息 |
|
||||
Reference in New Issue
Block a user