科学与工程计算国家重点实验室3号集群 LSSC-Ⅲ 用户手册 (v0.1)
最后修改日期:2011年5月10日
(本手册下载地址:http://lsec.cc.ac.cn/chinese/lsec/doc/QuickStart.txt)
一、系统组成
LSSC-Ⅲ的Internet域名为lssc3.cc.ac.cn, IP地址为159.226.92.72 。
LSSC-Ⅲ包括282个计算结点、两个I/O结点、两个登录结点、一个管理结点和一个胖结点。计算结点为“浪潮 NX7140N”刀片,每个刀片包含两颗Intel X5550 四核处理器和24GB内存,单核双精度浮点峰值性能为10.68Gflops,282个计算结点的总浮点峰值性能为24.09Tflops。所有结点同时通过千兆以太网和 DDR Infiniband网络连接。各类型结点名称及主要配置如下:
1个前端机,主机名为 m1
型号:浪潮NF5280,处理器:2颗E5530 (4核,2.40GHz),内存:24GB
2个登录结点,主机名分别为ln1和 ln2 。
型号:浪潮NF5280,处理器:2颗E5530 (4核,2.40GHz),内存:48GB
2个I/O结点,主机名分别为io1和io2
型号:浪潮NF5280,处理器:2颗E5530 (4核,2.40GHz),内存:32GB
1个胖结点,主机名为fat
型号:浪潮NF560D2,处理器:4颗E7450 (6核,2.40GHz),内存:96GB
282个计算结点,主机名为cxxbyy, 其中xx为机箱号 (1-21), yy为刀片号(1-14)
型号:浪潮NX7140N,处理器:2颗X5550 (4核,2.67GHz),内存:24GB
LSSC-Ⅲ 只允许通过 ssh 从远程登录或传输文件。用户登录时将由系统自动分配到一个登录结点上。
二、编译系统与并行环境
LSSC-Ⅲ 上的编译系统包括Intel C , Fortran 编译器 (11.1.064),GNU编译器,Intel VTune 调试器等。并行环境有MVAPICH,MVAPICH2, OpenMPI 1.4.1, Intel MPI (3.2.2), 用户可以根据自己的情况选用。
LSSC-Ⅲ上缺省GNU 编译器为 gcc-4.1.2 (另还安装了 gcc-4.4.3,用户可以根据自己的需要选择不同版本)。如果希望使用Intel 编译器则可分别用‘icc’(C/C++) 或 `ifort' (Fortran) 命令来进行编译。有关Intel 编译器的手册可在目录
/opt/intel/Compiler/11.1/064/Documentation/en_US
中找到 (getting_started_c.pdf,getting_started_f.pdf等)。
MPI程序编译命令分别为 `mpicc' (C), `mpicxx' (C++), `mpif77' (Fortran 77) 和 `mpif90' (Fortran 90)。不同版本MPI命令略有不同,用户需根据所用的MPI做相应调整。
三、数学库
LSSC-Ⅲ 安装了两套Intel数学核心库 MKL,一个是版本 10.2.3.029,位于目录 /opt/intel/mkl/10.2.3.029/lib/em64t,另外一个是与Intel 编译器配套的,位于目录 /opt/intel/Compiler/11.1/064/mkl/lib/em64t,我们建议用户使用后者。下面是该库的链接方法示例:
-L /opt/intel/Compiler/11.1/064/mkl/lib/em64t -Wl,-rpath,/opt/intel/Compiler/11.1/064/mkl/lib/em64t -lmkl -lguide -lpthread
MKL库按照是否支持多线程并行、整数类型等分为多套库。对于使用多线程并行的库, 用户可用环境变量OMP_NUM_THREADS来控制MKL运行时的线程数。MKL库中包含线性代数库BLAS和LAPACK、快速变换FFT、直接法求解器PARADISO等。关于MKL库的详细用法可参看 /opt/intel/mkl/10.2.3.029/doc 中的手册.
四、PHG 库
使用 PHG 的用户应该使用系统中安装的 PHG 库,即在自己的 Makefile 中用:
include ${PHG_MAKEFILE_INC}
来编译 PHG 程序。因为 LSSC-III 上的 PHG 需要一些特殊配置,用户自行编译的 PHG 有可能运行时发生异常 (如产生 `realloc’ 错误)。
五、程序调试
用户在调试串行或并行程序时可直接在所在的服务结点上运行,由于CPU类型不同, 服务结点上的运行速度会稍慢于计算结点。也可用 run 或 mpirun 命令在通过作业管理系统分配的计算结点上以交互方式运行。我们建议采用后者,以保证资源的独占使用及避免影响其他登录用户的响应速度。
mpirun 命令向作业管理系统申请结点并以交互的方式运行MPI程序, 可在调试并行程序时用。基命令行格式如下:
mpirun [-x] [-n 结点数] [-np 进程数] MPI程序名 [命令行参数]
各命令行选项的含义如下:
-n 结点数 - 指定使用的结点数,缺省为 (np+7)/8,如果np未指定则缺省为1。
-np 进程数 - 指定启动的MPI进程数,缺省为 n*8。
-x - 要求独占结点,即同一时刻不允许所分配的结点上运行其它作业。
(其它还有一些命令行选项,可以用 `mpirun -h’ 显示出来)
例:
mpirun -np 128 my_prog
交互运行MPI程序,使用16结点、128进程
mpirun -x -n 8 -np 16 my_prog
交互运行MPI程序,以独占方式使用8结点、16进程 (每结点2进程)
上述命令通过创建一个交互作业的方式来运行用户提交的程序. 交互作业使用与普通作业不同的队列, 每个用户同一时刻只能运行一个交互作业, 并且用'mpirun'递交的交互作业最长只能运行10分钟, 超时后将自动被系统杀掉.它们主要是为了方便用户调试程序. 需要长时间运行的作业应使用下节所介绍的命令以后台作业的方式提交.
六、后台作业的提交与管理
LSSC的作业管理系统为TORQUE,作业调度系统为Maui Scheduler。我们建议大家通过下面几条类-LSF命令提交、管理作业。
作业提交
a) 串行作业提交:
bsub -np 1 “程序名 [命令行参数]”
b) MPI 并行作业提交:
bsub [-x] [-n 结点数] [-np 进程数] “mpirun MPI程序名 [命令行参数]”
上述命令中的
mpirun' 亦可写为
mpijob’,二者是等价的。c) 提交作业到胖结点 (适用于大内存串行作业)
bsub -q fat -np 1 “程序名 [命令行参数]”
上述命令中的
-x',
-n’,-np' 选项其含义与交互式运行作业的
mpirun’ 命令中的相同。bsub 的其它选项及用法可以通过 `bsub -h’ 显示。bsub -np 8 mpijob progname
bsub -np 1 “progname outputfile”
bsub -x -n 8 -np 32 “mpirun progname >outputfile 2>&1”通过 bsub 提交的命令将作为 bash 命令被执行,因此用户可以使用任何合法的 bash 命令,例如:
bsub -np 8 ‘for n in 1 2 3 4 5 6 7 8 9; do mpirun myprog $n; done’
将运行 MPI 程序 `myprog’ 9 次,命令行参数依次取 1, 2, 3, …, 9。
下面是更多的提交作业的例子:
bsub -n 4 "mpijob progname <inputfile >outputfile"
bsub -n 4 -i inputfile -o outputfile "mpirun progname"
(提交使用4个结点的MPI作业, 两种写法完全等效)
用`bsub'提交的作业运行时,其标准输出和标准错误写在文件 `PBS_JOB_作业号.out' 中 (除非用户用 `-i'、`-o'、`<'、'>' 等进行了重定向),用户可在作业开始运行后用 `tail -f PBS_JOB_作业号.out' 命令来实时查看当前输出。
传递环境变量给作业
为方便控制程序运行,用户提交作业时的一些环境变量的值会被传递给 MPI 程序。受 MPI 程序启动方式的限止,只能确保部分环境变量被传递给程序,这些变量定义在文件 /opt/scripts/jobshell.vars 中。用户可以将其它需要传递给 MPI 程序的环境变量名放在一个文件中,然后在提交作业时用变量 JOBSHELL_ENV_FILE 给出该文件名即可 (最好给出全路径名),详可参看脚本文件 /opt/scripts/jobshell)。例如,假如文件 “myvars.lst” 中包含如下内容:
PETSC_OPTIONS
QTDIR
并且用户用 “env JOBSHELL_ENV_FILE=myvars.lst bsub …” 的形式提交作业,则环境变量 PETSC_OPTIONS 和 QTDIR 将确保会被传递给 MPI 程序。这些传递给程序的环境变量会显示在作业输出中。
传递给 MPI 程序的环境变量值可以在提交作业时给定,也可在 (非交互) 作业中运行程序时给出。例如,下面三个例子均运行两个 MPI 进程,每个 MPI 进程独占一个结点并且中使用 8 个 OpenMP 线程 (前两个例子为非交互作业,第三个例子为交互作业):
env OMP_NUM_THREADS=8 bsub -x -n 2 -np 2 "mpijob ./myprog"
bsub -x -n 2 -np 2 "env OMP_NUM_THREADS=8 mpijob ./myprog"
env OMP_NUM_THREADS=8 mpirun -x -n 2 -np 2 ./myprog
查看、管理作业
. bjobs [-aqvlh] [[-u|-j]{用户名|作业号|all}]
显示作业信息 (用 `bjobs -h’ 可得到帮助信息). bpeek 作业号
显示作业当前输出. bkill 作业号 [作业号 …]
. qdel 作业号 [作业号 …]
杀作业. btrace 可执行文件名 作业号
显示指定作业所有进程的 backtrace (调试程序用)使用 TORQUE/Maui 命令
除 bjobs 外,用户亦可以直接使用 TORQUE 和 Maui 的命令来查询作业状态。例如:
. qstat [作业号 [作业号 …]]
显示指定作业的状况. 但不给出作业号显示队列中所有作业的状况.. qstat -a [作业号 [作业号 …]]
显示有关作业的更多信息, 包括作业申请的结点数等.. qstat -f [作业号 [作业号 …]]
显示作业的详细信息.. showq
显示所有作业队列的信息.. showq -b
显示被阻止的作业及阻止的原因.查询结点状态
除了上述几条用于作业管理的命令外, 我们还提供了下述命令, 以方便大家查询机群中的结点使用情况:
. cnodes
显示结点状态 (`cnodes -h’ 显示帮助信息). nodes
显示结点作业状态. lsload
显示结点详细状态 (`lsload -h’ 显示帮助信息)
七、临时文件
程序运行过程中如果需要创建临时文件 (指程序在运行过程中创建,运行结束后不再需要的文件),建议建在计算结点本地目录 /scratch/tmp 中,并在程序结束前将其删除。该目录中的文件在启动下一个用户作业前会被自动清除。
八、作业中的程序出错时如何得到core文件
如果一个 MPI 程序运行出错,可以试试用下述方法生成 core 文件:
假设程序可执行文件为 "prog",制作一个 shell 脚本,例如取名为 "run_prog",
其中包含如下内容:
!/bin/bash
ulimit -c unlimited
`dirname $0`/prog "$@"
exit $?
然后用下述命令提交作业:
% chmod a+x run_prog
% bsub .... "mpijob ./run_prog ..."
程序出错退出后可能会生成一个或多个 core.xxxxxx 文件(xxxxxx 为进程号)。
然后可以用:
% gdb prog core.xxxxxx
来查看程序出错的现场。