售前咨询电话

021-61872201

客服电话

021-80166080*834

有问题直接回复客服

微信扫码

注册 登录
产品
支持
帮助与文档
高性能集群计算 > 命令行操作手册 > 剑鱼-1集群命令行操作说明
剑鱼-1集群命令行操作说明
1. 作业管理系统简介
剑鱼-1集群系统采用LSF 10.1作业管理系统对集群上的计算资源和计算任务进行统一调度管理。用户提交作业时将统一使用LSF作业管理系统进行作业提交、管理、监控、删除、卸载等操作。严禁不通过作业管理系统直接运行程序
用户在登录节点用 bsub 命令递交作业,作业管理系统接收命令并将计算作业任务放到匹配的队列里排队等待,当系统满足该作业的资源及条件后,将作业分配到相关节点进行计算,计算过程中以及计算结束时可查看到计算输出、错误输出和相关信息。
2. 计算节点和队列设置
计算节点即集群中的单个计算机,是集群系统的基本单位。计算节点的编号可通过bhosts命令查看。
队列是作业管理系统的基本概念,根据作业并行规模的不同,剑鱼-1集群系统设置了两个队列,队列的具体设置情况可通过bqueues 命令查看:
- serial 队列
串行作业和24 核(不含)以下的并行作业默认提交至此队列;该队列每用户最多只能提交20 个作业;
- mpi 队列
并行规模为24的整数倍作业默认提交至此队列。
3. LSF 基本操作命令
3.1 作业提交
LSF 作业提交有两种方式:命令行方式和脚本方式。
命令行方式简单方便,其用法为:bsub 命令后加相应选项;
脚本方式灵活性更高,其用法为:bsub < 脚本文件。脚本文件中包含所有LSF选项和shell命令。所有LSF 选项以“#BSUB”开头,每一个选项对应一行;在LSF 选项输入完毕后,可以添加shell 命令脚本,比较灵活自由。
具体提交方法如下:
1) 串行作业:
a) 命令行方式:
$ bsub [-i inputfile] [-o %J.out -e %J.err] ./serialjob.exe [CMD options]
		提交后系统显示:
		Job <30601> is submitted to queue <serial>.
b) 脚本方式:
编辑一个脚本文件
$ vi spoolfile
如下:
		#BSUB -q serial
		#BSUB -n 1
		./serialjob.exe [CMD options]
		
用bsub 递交这个脚本文件
$ bsub < spoolfile
注:[CMD options]斜括号中的内容为serialjob.exe 程序运行参数,括号表示此为可选项,可根据需要确定是否添加。
2) 并行作业(使用外部MPI 的通用并行作业):
a) 命令行方式:
Intel MPI 并行作业提交格式(剑鱼-1集群默认使用的MPI):
$ bsub -n 48 [-q mpi] [-i inputfile] [-o %J.out -e %J.err] mpirun ./mpijob.exe  [CMD options]
也可以采用如下方式:
$ bsub -n 48 [-q mpi] [-i inputfile] [-o %J.out -e %J.err] -a intelmpi mpirun.lsf ./mpijob.exe [CMD options]
OpenMPI 并行作业提交格式:
$ bsub -n 48 [-q mpi] [-i inputfile] [-o %J.out -e %J.err] mpirun ./mpijob.exe [CMD options]
其它MPI 并行作业提交格式:
$ bsub -n 48 [-q mpi] [-i inputfile] [-o %J.out -e %J.err] -a XXXmpi mpirun ./mpijob.exe [CMD options]
或者:
$ bsub -n 48 [-q mpi] [-i inputfile] [-o %J.out -e %J.err] -a XXXmpi mpirun.lsf ./mpijob.exe [CMD options]
其中:
[ ] 表示括号里面的内容可以不指定;
		-q mpi 指定该作业使用mpi 队列,若不指定默认提交至mpi 队列;
		-n 48 指定作业进程数;
		-a XXXmpi 指定应用程序所用的mpi,如mvapich,mpich2;
		-o %J.out 指定作业的标准输出文件,%J 指用作业的ID 作为文件名;
		-e %J.err 指定作业的标准错误文件,%J 用作业的ID 作为文件名;
		mpijob.exe 为可执行文件。
b) 脚本方式:
编辑一个脚本文件
$ vi spoolfile
如下:
#BSUB -q mpi
		#BSUB -n 48
		#BSUB –i inputfile
		#BSUB –o %J.out
		#BSUB –e %J.err
		mpirun ./mpijob.exe [CMD options]
用bsub 递交这个脚本文件
$ bsub < spoolfile
注:脚本方式中#BSUB的内容可根据需要增减,各选项的意义与命令行方式一致,[CMDoptions]为mpijob.exe 程序运行参数,括号表示此为可选项,可根据需要确定是否添加。
3) 特殊并行作业(应用程序自带并行机制的并行作业):
$ bsub -n 48 [-q mpi] [-i inputfile] [-o %J.out-e %J.err] ./self_parallel_job.exe [CMD options]
注:此时可能需要额外的脚本读取作业系统分发的hosts 信息,参考相关软件使用手册和LSF 使用手册。脚本方式与2)同。
4) MPI/OpenMP 混合并行作业(Hybrid MPI/OpenMP Jobs)
MPI/OpenMP 混合作业是指同时使用MPI 和OpenMP 并行的作业。每个MPI 进程运行的OpenMP 线程数目可以通过修改环境变量OMP_NUM_THREADS 的值实现。MPI/OpenMP 混合并行作业又分为两种情形:
a) 若“作业运行的MPI 进程数”小于“bsub –n 选项中的CPU 核数”,需要设置环境变量OMP_NUM_THREADS,并执行hybridmpi.sh脚本,否则作业进程不会均分至各个计算节点。此时各参数(变量)符合如下公式:
“bsub –n 选项中的CPU 核数”=“作业运行的OpenMP 线程总数”= “环境变量OMP_NUM_THREADS 的值”ד作业运行的MPI 进程数”
b) 若“作业运行的MPI 进程数”等于或大于“bsub –n 选项中的CPU 核数”,作业仅需设置环境变量OMP_NUM_THREADS,不需要执行hybridmpi.sh 脚本。此时各参数(变量)符合如下公式:
“bsub –n 选项中的CPU 核数” = “作业运行的MPI 进程总数”(mpirun 命令后面不指定特别的-np 或-n 参数的情况下)
“作业运行的OpenMP 线程总数” = “环境变量OMP_NUM_THREADS 的值” × “作业运行的MPI 进程数”
由于需要设置OMP_NUM_THREADS 参数,为了不影响其它作业的正常运行,此处建议使用脚本方式提交作业。情形a)的提交方式如下:
编辑一个脚本文件
$ vi spoolfile
如下:
		#BSUB -q mpi
		#BSUB -n 48
		#BSUB –i inputfile
		#BSUB –o %J.out
		#BSUB –e %J.err
		export OMP_NUM_THREADS 2
		export MP_TASK_AFFINITY=core:$OMP_NUM_THREADS
		source /share/apps/lsf/10.1/linux2.6-glibc2.3-x86_64/etc/hybridmpi.sh
		mpirun ./hybridjob.exe [CMD options]
		
用bsub 递交这个脚本文件
$ bsub < spoolfile
注:某些软件/应用需要在[CMD Options]中强制指定OpenMP 参数,请参考相关软件的说明文档。
情形b)的提交方式如下:
编辑一个脚本文件
$ vi spoolfile
如下:
#BSUB -q mpi
		#BSUB -n 48
		#BSUB –i inputfile
		#BSUB –o %J.out
		#BSUB –e %J.err
		export OMP_NUM_THREADS 2
		export MP_TASK_AFFINITY=core:$OMP_NUM_THREADS
		mpirun ./hybridjob.exe [CMD options]
用bsub 递交这个脚本文件
$ bsub < spoolfile
注:某些软件/应用需要在[CMD Options]中强制指定OpenMP 参数,请参考相关软件的说明文档。
5) 一些bsub 选项的说明,请参考章节3.12。
3.2 查看作业状态
bjobs
命令列出了用户提交作业的作业号、用户名、作业状态、作业队列、作业提交节点、作业计算节点、作业名以及作业提交时间等信息。
常用的bjobs 参数:
-w wide format 显示更多的信息
-aps 等待作业按作业执行顺序排序显示
-ls 显示作业被挂起的详细原因
以下是分页显示指定作业的详细信息:
3.3 查看作业输出
bpeek jobid
3.4 结束作业
bkill jobid
(注:如果发现bkill 杀不掉作业,可以加-r 选项强制杀掉作业,即bkill –r jobid,但此选项在某些极端情况下有损坏输出文件的风险,请谨慎操作。)
3.5 挂起作业
bstop jobid
作业执行状态由 RUN 转变为 SUSPEND。
3.7 继续执行已挂起的作业
bresume jobid
作业执行状态由SUSPEND 转变为 RUN。
3.8 查看系统队列配置
bqueues
3.9 查看节点分组情况
bmgroup
3.10 查看机器负载情况
lsload
3.11 查看各节点 CPU 的负载情况
bhosts
3.12 bsub 命令常用自定义参数说明
3.12.1 指定提交队列
如果要查看某用户可使用哪些队列
$ bqueues -u username
如:
-q 队列名 指定提交队列
$ bsub -q mpi my_job
		这个例子提交作业到mpi 队列
3.12.2 指定作业名称
-J job_name 指定作业名称
作业名称最多可以有4096 个字符。作业名称不是唯一的,不同作业可以指定相同的作业名。如:
$ bsub -J SSCT < gromacs.lsf
		即提交一个作业名为SSCT,提交脚本为gromacs.lsf的作业到系统
3.12.4 指定作业开始运行或结束的时间
-b [[year:][month:]day:]hour:minute 指定作业开始运行的时间
如:
$ bsub -b 14:15 < gromacs.lsf
作业提交后处于排队状态,直到14:15 再开始运行。
-t [[year:][month:]day:]hour:minute
指定作业结束时间,到达设定时间后会发送SIGUSR2 参数,如果十分钟内作业没有结束就会被杀掉
如:
$ bsub -t 00:01 < gromacs.lsf
作业提交后将于00:01时刻自动结束 (无论是否跑完)
3.12.5 指定输出文件
-o out_file 指定作业输出文件
-oo out_file 指定作业输出文件,会覆盖原文件
-e err_file 指定标准错误输出文件
-eo err_file 指定标准错误输出文件,会将原有文件覆盖
3.12.6 指定作业运行的shell 环境
-L login_shell 指定作业运行的shell 环境,必须为绝对路径。如:
$bsub -L /bin/bash my_job
在bash 环境运行作业
$bsub -L /bin/csh my_job
在csh 环境运行作业
3.12.7 指定并行作业的任务数
[-n min_tasks[,max_tasks] | -nn] 指定并行作业的任务数,也就是运行作业的核数
如:
$bsub -n 4,8 my_parallel_job
使用4-8core 运行作业
bsub -n 8 my_parallel_job
指定使用8core 运行作业
3.12.8 设置作业运行时间
-W [hour:]minute[/host_name | /host_model] 设置作业的运行时间
到达设定时间后会发送SIGUSR2 参数,如十分钟内作业没有结束就会被杀掉
3.12.9 指定jobs slot 的分配方式
-R span[hosts=1] 表示job slots 都分配在一个节点上。这里hosts 后面的值不能大于1.
-R span[ptile=24] 表示每个节点分配24job slots。 一般对于大规模并行作业ptile 后面的值等于每个节点的cpu cores 是比较好的。
3.13提交作业示例
a) 命令行提交作业
举例如下:
$bsub -q mpi -J testjob -n 96 -o out.log -e err.log my_exe exe_options
选项说明:
-q mpi 指定作业运行在mpi 队列
		-J testjob 指定作业名称为testjob
		-n 96 指使用96 核心
		-o out.log 指定作业标准输出信息记录到out.log 文件中
		-e err.log 指定作业标准错误信息记录到err.log 文件中
b) 脚本提交作业
上面的命令行可以写到一个脚本中,如test.job
$vi test.job
		#!/bin/bash
		#BSUB -q mpi
		#BSUB -J testjob
		#BSUB -n 2
		#BSUB -o myoutfile
		#BSUB -o myerrfile
		#BSUB -W 40
		my_exe exe_options
		然后执行bsub < test.job 提交作业
4. 编译环境
系统安装有两套编译器, 一套为Linux 系统自带的GNU 编译器, 包括GNU Fortran, GNU C/C++的等;另一套为 Intel Compiler 17.0.1 建议用户使用 Intel 编译器, 但应用软件有特殊需要的除外。
4.1 编译系统
4.1.1 GNU Fortran, GNU C/C++, f77 和f95
以下是用于编译、链接的常用命令:
G77: 用于Fortran 程序编译和链接. 优化选项用 "-O2" 或 "-O3" 即可。
例:对于单进程FORTRAN 程序编译、链接用
$ g77 -O2 -o mytest mytest.f
		$ gfortran -O3 -o mytest mytest.f
cc, gcc, g++, c++等: 用于C/C++程序的编译和链接. 优化选项可用 "-O", "-O2" 或"-O3".
例:对于单进程C 程序编译、链接用
$ gcc -O3 -o mytest mytest.c
关于g77,gfortran, gcc,g++这几个命令更详细的说明,可以用“$man 命令” 查看。
4.1.2 Intel Compiler
软件装在/share/apps/intel/compilers_and_libraries_2017/linux/bin/intel64/目录中,支持C, C++, FORTRAN90, FORTRAN95。以下是用于编译、链接的常用命令:
icc 是Intel 公司的C 语言编译器
例:对于单进程C 程序编译、链接用
$ icc -O2 -o tt tt.c
ifort 是Intel 公司的FORTRAN 语言编译器
例:对于单进程FORTRAN 程序编译、链接用
$ ifort -O2 -o tt tt.f
编译器更多的命令和参数,请使用“$man 命令” 查看。
4.2 数学核心库MKL
开放源码程序往往要调用大量的数学函数进行各种计算,经过长期积累,已经有一些比较成熟的标准化的数学库,其中最常见的诸如线性代数方面的 BLAS、LAPACK、ScaLAPACK 等等。
本系统使用 intel 的 MKL 动态和静态数学库,其功能包括:
线性代数 - BLAS 和 LAPACK
线性代数 - ScaLAPACK
线性代数 - 稀疏矩阵解算器
快速傅立叶转换用于分布式内存多处理器(集群)
向量数学库
矢量随机数生成器
MKL安装在/share/apps/intel/compilers_and_libraries/linux/mkl/下。
4.3 并行编译环境
刀片集群上可以有两类并行计算,一类为单节点SMP 架构的共享内存并行计算 OpenMP;另一类为分布式消息传递的 MPI 并行计算。
4.3.1 OpenMP 程序的编译与运行
OpenMP 是由一组硬件和软件商(如DEC、 Intel、IBM、SGI、 )联合开发的编程标准, OpenMP并行实际上是在一个单一系统的共享内存计算机上进行的。Intel C++ 和Fortran for Linux编译器支持 OpenMP 并行,只需要利用编译命令结合 -openmp 编译选项进行编译即可,例如:
$ icc -O2 -o myomp -openmp myomp.c
将 OpenMP 的 C 程序 myomp.c 编译为可执行程序 myomp。
$ ifort -O2 -o pi -qopenmp pi.f90
将 OpenMP 的 FORTRAN 程序myomp.f90 编译为可执行程序 myomp。
OpenMP 的运行一般是在运行前通过设置环境变量OMP_ NUM _THREADS 来控制进程数,例如在bash 中利用 export OMP_ NUM _THREADS=24 来控制进程数为24(最多只能为24,因为一个节点里两颗CPU,24 个核)。
用bsub 命令递交作业: bsub -x -np 4 myprog-omp 这里的-x 指定作业独占该节点的资源。当然我们的-np 不能大于24 。有关OpenMP 的编程请参考有关文献和书籍。
4.3.2 MPI 程序的编译与运行
MPI 其实是一个设计规范的标准,提供了大量用于消息传递和管理的函数,支持从 C/C++和 Fortran 语言编写的程序中调用,也可以绑定到其它一些编程语言。MPI 只是一个标准,遵从这一标准可以有很多不同的软件实现,但具体的应用程序应该不加修改就可以重新编译运行,这也是标准化带来的优点。目前常见的支持 InfiniBand 网络的 MPI 实现是 MVAPICH /MVAPICH2 和 OpenMPI (注意跟 OpenMP 的区别)。在高级编程语言支持方面,主要可以使用 GNU、Portland Group (PGI)、Intel、PathScale 还有 Open64 的 C/C++和 Fortran77/90 编译器。具体语言编写的程序如何编译,调用的相应命令可参看书籍。
Intel MPI 软件安装在/share/apps/intel/impi/2017.1.132/intel64/bin 目录中,运行环境设置文件为mpivars.sh。常用编译命令有mpif77、 mpif90、mpiifort、mpigcc、 mpig77、mpigxx、mpiicc 和mpicc 等,常用并行运行命令有mpirun 和mpiexec 等。
编译并行源程序的例子:
$ mpiicc -O3 -o tc tc.c
这里的tc.c 为用MPI 并行C 语言编写的源程序,-O3 指定优化级别,-o tc 是指定生成的运行文件名,如果不指定运行文件名,将自动生成a.out 。
$ mpiifort -O3 -o tt tt.f
这里的tt.f 为用MPI 并行FORTRAN 语言编写的源程序,-O3 指定优化级别,-o tt 是指定生成的运行文件名,如果不指定运行文件名,将自动生成a.out 。运行程序的例子:
$ mpirun -n 4 -np 32 tt
这里-n 4 -np 32 是向系统申请4 个节点32 个CPU(核),tt 为可执行并行文件。
$ mpirun -np 8 tc
这里-np 8 是向系统申请8 个CPU(核),tc 为可执行并行文件。
5. 软硬件环境
5.1 存储系统配置
1) ESS 存储系统:
ESS 存储系统(/share)作为用户的家目录和备份用。用户家目录路径为:/share/home/
可用容量:1.4PB
2) SSD 存储系统:
SSD 存储系统(/scratch)作为并行计算时的临时工作缓冲区。路径为:
/scratch/
可用容量:671TB
特别提醒: /scratch 目录只用于临时存放必要的计算文件,为保证该文件系统高效运行,用户需及时转移自己的计算结果;系统每天将自动清除/scratch 目录下超过180 天的旧文件,主机不承担由此引起的一切责任和后果。
目录名称 描述 /share ESS存储挂载点 /share/apps 应用软件安装目录 /share/software 应用软件包存放目录 /share/home 用户家目录 /scratch SSD高速并行存储挂载点 /scratch/ 高速并行存储用户家目录
5.2 软件环境
5.2.1 系统环境
剑鱼-1集群操作系统
Red Hat Enterprise Linux Server release 6.7 64bit
作业管理系统
Platform LSF 10.1
账号基本环境
Intel C version 17.0.1.132
Intel Fortran version 17.0.1.132
gcc version 4.4.7
gcc version 4.9.4
gcc version 5.4.0
openmpi version 1.10.1
openmpi version 2.0.1(intel 编译器编译)
5.2.2 软件配置
常用软件安装目录:/share/apps/
1 abinit-8.0.8 32 mrbayes-3.2.6
2 binutils-2.27 33 ncl_ncarg-6.2.1
3 BLACS 34 nco-4.6.3
4 BLAS-3.6.0 35 ncview-2.1.7
5 blcr-0.8.5 36 netcdf-4.2_intel
6 charm-6.7.1 37 netcdf-4.4.1_intel
7 cmake-3.7.0 38 netcdf-4.4.1_intel.tar.gz
8 coreutils-8.25 39 netcdf-4.4.4_ifort
9 expat_2.2.0 40 netcdf-4.4.4_intel
10 fttw 41 netcdf-4.4_gcc
11 gmp-6.1.1 42 netcdf-4.4_intel
12 gnuplot-5.0.5 43 openmpi-1.10.1
13 grads-2.0.2 44 openmpi-2.0.1_intel
14 hdf-4.2.5 45 parallel-netcdf-1.7.0
15 hdf5-1.10.0 46 parallel-netcdf-1.7.0-intel
16 hdf5-1.8.12 47 ParaView-5.2.0-Qt4-OpenGL2-MPI-Linux-64bit
17 hdf5-1.8.12_gcc 48 pari-2.9.0
18 hdf5-1.8.12_intel 49 python-2.7.6
19 intltool-0.50.2 50 R-3.2.5
20 itstool-1.0.0 51 rlwrap-0.43
21 jasper-2.0.6 52 rtm
22 jpeg-9b 53 rtm.tar
23 lapack-3.6.0 54 ruby-2.3.3
24 mercurial-3.9.2-1 55 samtools-1.3.1
25 mgtools-1.5.6 56 scilab-5.5.2
26 modulefiles 57 SuperLU_5.2.1
27 molden5.7 58 szip-2.1
28 mpc-1.0.3 59 udunits-2.1.24
29 mpfr-3.1.5 60 valgrind-3.12.0
30 mpfun2015 61 visit2_12_0.linux-x86_64
31 mpfun90 62 zlib-1.2.8
注:应用软件随用户使用过程逐渐更新,查看最新的应用软件执行命令ls /share/apps 查看对应的软件目录及版本。
5.2.3 账号环境配置
新用户创建后会将系统默认的环境变量填写到用户~/.bashrc 文件下(除intel 环境变量外,其他用#注释,默认不生效)。系统中也提供了.bashrc 的最新模板文件供参考,位于/share/default.bashrc 修改环境变量的三种方式:
a. 修改默认环境变量
修改用户家目录下的.bashrc (例如:/share/home/zhangsan/.bashrc)
注:以#号作为行起始标志,代表注释,此时环境变量不生效:
#for gcc-5.4.0
		#export PATH=/share/apps/gcc-5.4.0/bin/:$PATH
		#export LD_LIBRAYR_PATH=/share/apps/gcc-5.4.0/lib/:$LD_LIBRARY_PATH
去除export 前面的 #号,此时表示启用:
#for gcc-5.4.0
		export PATH=/share/apps/gcc-5.4.0/bin/:$PATH
		export LD_LIBRAYR_PATH=/share/apps/gcc-5.4.0/lib/:$LD_LIBRARY_PATH
注:需要用户重新登录或者 source ~/.bashrc 才会生效
b. 添加新的环境变量:
修改家目录下的.bashrc 文件(例如:/share/home/zhangsan/.bashrc)
举例:若张三用户想使用/share/apps 目录下的python-2.7.6 软件编辑 /share/home/zhangsan/.bashrc 文件,增加如下内容即可。
export PATH=/share/apps/python-2.7.6/bin/:$PATH
		export LD_LIBRARY_PATH=/share/apps/python-2.7.6/lib/:$LD_LIBRARY_PATH
注:需要用户重新登录或者 source ~/.bashrc 才会生效。
c. 使用module 命令加载环境变量
Module 是Linux下的一个环境变量管理工具,可以很方便的加载和移除一系列环境变量,尤其对管理同一软件多个版本的情况非常方便。在集群中将一些常用的程序环境设置了module 文件,用户可以通过命令进行加载。常用命令如:
$ module avail  #显示当前可用的module
		$ module load modulename  #加载相应的module
		$ module unload modulename  #卸载相应的module
举例如下:
$ module load mpi/openmpi-1.10    #加载mpi/openmpi-1.10
		$ module list       #查看当前module
		Currently Loaded Modulefiles:
		1) mpi/openmpi-1.10
		$ module unload mpi/openmpi-1.10   #卸载mpi/openmpi-1.10
		$module whatis mpi/openmpi-1.10 查看mpi/openmpi-1.10
		#说明mpi/openmpi-1.10 : loads the openmpi-1.10.3 environment
免费试用,零门槛体验高性能计算魅力
免费体验
首页 Copyright © 2016-2020 上海超算科技有限公司 沪ICP备16034967号-5