Flex集群系统用户手册 第一版 - Nanjing University › _upload › article › files › 38...

46
Flex 集群系统用户手册 第一版 V1.0.6 南京大学高性能计算中心 2017 年 06 月

Transcript of Flex集群系统用户手册 第一版 - Nanjing University › _upload › article › files › 38...

  • Flex 集群系统用户手册

    第一版 V1.0.6

    南京大学高性能计算中心

    2017 年 06 月

  • II  

    目录

     

    一、  集群系统硬件架构和软件配置 .......................................................................................................... 1 

    1.1  硬件架构 .............................................................................................................................................. 1 

    1.2  软件 ...................................................................................................................................................... 4 

    二、  刀片集群系统的接入方式 .................................................................................................................. 6 

    2.1  Windows 用户接入方式 ....................................................................................................................... 6 

    2.2  Linux 用户登录、传输文件与查看磁盘配额 .................................................................................. 8 

    2.3  环境变量 .............................................................................................................................................. 9 

    1.  修改默认环境变量 .............................................................................................................................. 9 

    2.  添加新的环境变量: .......................................................................................................................... 9 

    3.  使用 module 命令加载环境变量 ...................................................................................................... 10 

    三、  Linux 系统的常用命令 .................................................................................................................... 11 

    3.1  基本目录和文件操作 ........................................................................................................................ 11 

    3.2  文件打包和解包 ................................................................................................................................ 15 

    3.3  有关进程的命令 ................................................................................................................................ 16 

    3.4  命令帮助和参考 ................................................................................................................................ 17 

    3.5  文本编辑工具 vi 的快速参考 .......................................................................................................... 17 

    四、  编译环境 ............................................................................................................................................ 21 

    4.1  编译系统 ............................................................................................................................................ 21 

    4.2  数学核心库 MKL ................................................................................................................................. 22 

    4.3  并行编译环境 .................................................................................................................................... 22 

    五、  作业管理与调度系统 ........................................................................................................................ 25 

    5.1  LSF 基本介绍 .................................................................................................................................... 25 

    5.2  LSF 作业生命周期 ............................................................................................................................. 25 

    5.3  LSF 作业队列设置 ............................................................................................................................. 25 

    5.4  LSF 基本操作 ..................................................................................................................................... 26 

    5.5  bsub 命令常用自定义参数 ............................................................................................................... 35 

    5.6  提交作业举例 .................................................................................................................................... 37 

  • III  

    5.7  Materials Studio 作业的提交 ....................................................................................................... 38 

    5.8  Matlab 作业的提交 ........................................................................................................................... 40 

    六、  常见问题 ............................................................................................................................................ 42 

    6.1  为什么程序无法输出,也无法写文件? ........................................................................................ 42 

    6.2  为什么 serial 队列作业一直排队,或者 serial 队列作业提交不上去了? ............................ 42 

    6.3  为什么我的帐号登录不了了? ........................................................................................................ 42 

    6.4  登录节点卡顿怎么办? .................................................................................................................... 42 

    6.5  作业用 bkill 命令杀不掉怎么办? ................................................................................................ 42 

    6.6  为什么登录节点不能直接从外网下载软件或数据? .................................................................... 43 

  • 1  

    一、 集群系统硬件架构和软件配置

    南京大学 HPC 集群,包含 910 台 Lenovo System Flex X240M 刀片节点,4台 Lenovo System

    X3650M5 GPU 节点。总 CPU 计算能力达 900Tflops。

    配置两套存储系统,存储系统一为 IBM ESS GNL6,裸容量为 2P。存储系统二为 SSD 并行

    存储,由 16 台 System X3650M5 服务器,裸容量为 1P 的 SSD 硬盘存储组成。

    并行文件系统采用 Spectrum Scale(原 GPFS),作业调度系统使用 Spectrum LSF。

    1.1 硬件架构

    1.1.1 系统总体拓扑结构图

    1.1.2 节点命名规则

    根据用户系统内各节点角色划分为:

    (1) 登录节点 4台

    c01n01 (202.119.37.251)

    c01n02 (202.119.37.252)

  • 2  

    c01n03 (202.119.37.253)

    c01n04 (202.119.37.254)

    (2) 大内存节点(10 台)

    c01n05 c01n06 … c01n13 c01n14

    (3) 计算节点(896 台)

    c02n01 c02n02 … c02n13 c02n14

    ……

    c64n01 c64n02 … c64n13 c64n14

    c65n01 c65n02 … c65n13 c65n14

    (4) GPU 节点(4 台)

    gpu01 gpu02 gpu03 gpu04

    (5) 并行存储节点

    存储系统一为 IBM ESS GNL6,裸容量为 2P。

    对应目录:/share 可用容量:1.4PB

    存储系统二为 SSD 并行存储,包含 1P 的裸容量。

    对应目录:/scratch 可用容量:671TB

    1.1.3 登录节点配置

    型号:Flex X240M5

    2 颗 Intel E5-2680v3 CPU (2.5Ghz 12 核心) 256GB 内存 2 块 480GB SSD 盘 1 个万兆以太网网口 1 个 56Gb Infiniband 网口

    1.1.4 计算节点配置

    型号:Flex X240M5

    2 颗 Intel E5-2680v3 CPU(2.5Ghz 12 核心) 128GB 内存 1 块 120GB SSD 盘

  • 3  

    1 个千兆以太网网口 1 个 56Gb Infiniband 网口

    1.1.5 大内存节点配置

    型号:Flex X240M5

    2 颗 Intel E5-2680v3 CPU(2.5Ghz 12 核心) 256GB 内存 2 块 480GB SSD 盘 1 个千兆以太网网口 1 个 56Gb Infiniband 网口

    1.1.6 GPU 节点配置

    型号:System X3650M5

    2 颗 Intel E5-2680v3 CPU(2.5Ghz 12 核心) 2 块 nVidia Tesla K40c GPU 卡 128GB 内存 2 块 300GB 硬盘 1 个双口万兆光纤网口 一个万兆光纤模块及联接线缆 1 块 56Gb Infiniband HCA 卡

    1.1.7 存储系统配置 

    1) ESS 存储系统: ESS 存储系统(/share)作为用户的家目录和备份用。

    用户家目录路径为:/share/home/username

    可用容量:1.4PB

    2) SSD 存储系统: SSD 存储系统(/scratch)作为并行计算时的临时工作缓冲区,总共由 16 台 X3650

    机架服务器组成:

    可用容量:671TB

    特别提醒:联想 Flex 集群上 SSD 高速并行文件系统(/scratch 目录)只用于临

    时存放必要的计算文件,为了保证该文件系统正常、高效地运行,用户需要及时

    转移自己的计算结果,系统每天将自动清除/scratch 目录下超过 180 天的旧文

    件,“中心”不承担由此引起的一切责任和后果。

  • 4  

    目录名称 描述

    /share ESS 存储挂载点

    /share/apps 应用软件安装目录

    /share/software 应用软件安装包存放目录

    /share/home 用户家目录

    /scratch SSD 高速并行存储挂载点(超过 180 天

    的旧文件系统将自动清除)

    /scratch/${USERNAME} 高速并行存储用户目录

    1.1.8 网络交换机配置

    1) 两台 IB 交换机:Mellanox SX6536 56Gb/s 主要用于 GPFS 文件系统网络和计算网络,每台 612 口,接入登录节点、存储节点、计算节点及两台交换机互联。

    2) 两台 G7052 千兆交换机,主要用于硬件管理,每台两个万兆互联。 3) 两台 G8272 万兆交换机:主要用于作业调度网络,每台两个 4X 万兆口互联,万兆

    口接入计算、存储、调度和登录节点。

    1.2 软件

    1.2.1 操作系统

    Red Hat Enterprise Linux Server release 6.7 64 位操作系统

    1.2.2 作业管理系统

    Platform LSF 10.1

    1.2.3 编译软件

    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

  • 5  

    openmpi version 1.10.1

    openmpi version 2.0.1(intel 编译器编译)

    1.2.4 常用软件

    常用软件安装目录:/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 查看对应

    的软件目录及版本。

  • 6  

    二、 刀片集群系统的接入方式

    登录:

    本中心接入校园万兆光纤至交换机,4条万兆线路接入登录刀片中心交换机。登录方式如下:

    202.119.37.251~254:22 (校内,校外访问需先接入 bras,网速较快) hpcc.nju.edu.cn:8801~8804 (校内、校外)

    用户:

    用户在开户时我们会为新用户设立一个用户名,一个初始密码。 新用户在初次登录时会强制要求修改默认密码,否则无法使用 用户登录以后可用 passwd username 命令再次更改密码(例如 passwd zhangsan 可修改

    张三用户密码)。

    2.1 Windows 用户接入方式

    2.1.1 利用 Xmanager 进行登录:

  • 7  

    2.1.2 利用 Putty 登录界面:

    2.1.3 上传与下载用户数据

    用户可以将作业脚本、源程序和输入数据上传至登录节点的用户目录下, 或将计算

    结果下载。在 Windows 环境下建议用户使用 Win-SCP 客户端工具,在 Linux 系统上推荐使

    用 sftp 客户端工具。

  • 8  

    2.2 Linux 用户登录、传输文件与查看磁盘配额

    2.2.1 Linux 用户登录

    可以直接打开普通终端或 X终端登录,四个登录 IP 任选其一(202.119.37.251~254)

    键入:ssh [email protected] (zhangsan 为用户名)

    可进入登录界面。

    [test@hpc ~]$ ssh [email protected]

    [email protected]'s password:

    2.2.2 传输文件和数据

    利用 sftp 传输远程主机上的一个文件到当前目录

    $ sftp [email protected]:/share/home/zhangsan/test.txt .

    利用 scp -r 传输远程主机上的一个目录到当前目录

    $ scp -r [email protected]:/share/home/zhangsan/ABC .

    在远程主机上利用 scp -r 复制 c01n09 上的一个目录

    $ scp -r zhangsan@c01n09:/tmp/ABC .

    zhangsan@c01n09 password:

    2.2.3 查看硬盘空间是否超配额

    若使用的磁盘空间超过配额,所有的文件将只能读、不能写,作业会无法输出结果。

    若出现上述情况,可以用 mmlsquota 命令查看磁盘利用情况。如果超出配额,需要删除相

    应文件系统上的文件。命令如下:

    $ mmlsquota

    注:为提高高性能计算机的使用效率,便于管理,高性能计算中心对 FLEX 刀片集群的文

    件系统采用了硬盘配额限制策略。/share 目录下硬盘使用超过配额(运行 mmlsquota 命令后

    显示的 quota 值)后“七天”内必须将其降至允许容量以内,否则停止用户对硬盘的写操作,

    /scratch 目录下硬盘使用超过配额后“十五天”内必须将其降至允许容量以内,否则停止用

    户对硬盘的写操作;在任何时间,若用户的家目录(/share/username)使用达到配额的 110%

    或者/scratch/username 使用达到 2000GB,则立即停止其对对应目录的写操作。

  • 9  

    2.3 环境变量

    新用户创建后会将系统默认的环境变量填写到用户~/.bashrc 文件下(除 intel 环

    境变量外,其他全部用#注释,默认不生效)。用户可作为参考,根据使用情况进行修改。

    系统中也提供了.bashrc 的最新模板文件,位于/share/default.bashrc,也可供参考。

    修改环境变量的三种方式:

    1. 修改默认环境变量

    修改用户家目录下的.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 才会生效

    2. 添加新的环境变量:

    修改用户家目录下的.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 才会生效。

  • 10  

    3. 使用 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

  • 11  

    三、 Linux 系统的常用命令

    3.1 基本目录和文件操作

    3.1.1 查看当前所在目录

    $ pwd

    /share/home/zhangsan

    3.1.2 改变当前目录

    cd

    $ cd 不管用户在哪级目录下,都将回到用户的主目录。

    $ cd ./test/tt 到当前目录下的 test 目录下的 tt 目录里。

    $ cd ../src/doc 到上一级目录下的 src 目录下的 doc 目录里。

    $ cd /share/apps/intel 到指定的路径下。

    3.1.3 创建目录

    mkdir

    $ mkdir data

    在当前目录下创建一个 data 目录。

    $ mkdir ./test/tt/data

    在当前目录下的 test 目录下的 tt 目录下创建 data 目录。

    3.1.4 删除空目录

    rmdir

    $ rm data 删除空目录 data, 不能删除非空目录

    3.1.5 移动或换名

    mv

    $ mv vi.tex vi.txt

  • 12  

    把文件 vi.tex 换名为 vi.txt。

    $ mv data data1

    把目录 data 换名为 data1。

    3.1.6 复制文件或目录

    cp [源文件] [目标文件或路径]

    $ cp -a document ./doc

    把当前目录下的 document 按原属性复制到当前目录下的 doc 目录中。

    $ cp -r data ../maya

    把当前目录下的 data 目录复制到上一级目录下的 maya 目录中。

    3.1.7 删除文件或目录

    rm

    $ rm -rf data

    递归和强制删除当前目录下的 data 目录中的全部内容和 data 目录本身。

    $ rm -i *

    提问性的删除当前目录下的所有文件,回答 y或 yes 才删除被提示的文件。

    3.1.8 输出文件列表

    ls [目录或文件名]

    $ ls -l 列出当前目录下的目录和文件的详细信息

    lrwxrwxrwx 1 zhangsan zhangsan 11 Feb 28 15:14 access -> access.conf

    drwxr-xr-x 2 zhangsan zhangsan 4096 Feb 16 17:40 log

    -rw-r--r-- 1 zhangsan zhangsan 671 Feb 27 13:07 a

    第一个字符的位置表示文件类型:

    “d”表示 software 是一个目录

    “-”表示 vi.tex 是一个普通文件

    “l”表示这是一个链接文件

    后面 9个字符位置分别表示文件的属主、同组用户和其他用户对该文件的读、写和执行的

    权限, “r”表示可读, “w”表示可写, “x”表示可执行,下一个字段是文件的连接数,

  • 13  

    在后面分别是属主名、组名、文件的字节数、生成或最近修改文件的时间,最后是文件或目录

    名。

    $ ls -la 列出当前目录下所有文件(包括文件名前加“.”的隐藏文件)信息。

    $ ls -lt 按创建或修改的时间排列显示文件。

    $ ls -lS 按文件大小排列显示文件。

    $ ls 只显示文件和目录名。

    3.1.9 统计当前目录大小

    du [路径名]

    $ du -k 以 KB 为单位列出当前目录下的所有子目录的容量和总容量。

    $ du -ms 以 MB 为单位列出当前目录下的总容量。

    $ du -h 自动以 G/M/K 为单位列出当前目录下的所有子目录的容量和总容量。

    3.1.10 显示文件的全部内容

    cat

    $ cat vi.tex

    显示文件开头部分内容 head

    $ head -n 20 vi.tex

    显示 vi.tex 的前 20 行。

    显示文件末尾部分内容 tail

    $ tail -n 30 vi.tex

    显示 vi.tex 的最后 30 行。

    3.1.11 分屏查看文件内容

    more, less

    $ more vi.tex

    分屏查看文件 vi.tex 的内容。

    $ less readme.doc

    分屏查看文件 readme.doc 的内容。

    在执行其他命令输出信息较多时,也可以利用输入、输出重定向方式来分屏查看:

  • 14  

    $ ls -al|more 或

    $ ls -la |less

    3.1.12 创建一个空文件

    touch

    $ touch kl 创建一个空文件 kl。

    改变文件属性 chmod

    $ chmod 755 kl

    将文件 kl 改成自己可读、可写、可执行同组和其他用户只准读和执行。

    $ chmod -R +rwx test

    将当前目录下 test 目录下的子目录及文件改成自己可读、可写、可执行,同组和其他用

    户的属性不变。

    3.1.13 搜索符合条件的文件

    find -name

    $ find /share/apps -name ifort 从/share/apps 目录下开始查找名为 ifort 的文件

    3.1.14 从文件中搜索匹配字符串

    grep

    常用参数:-i 忽略大小写;-r 子目录递归搜索;-v 反匹配模式;-n 显示匹配行的行

    号。

    $ grep -inr MPI_Init test.f90

    在 test.f90 文件中查找有 MPI_Init 字符串的行。

    3.1.15 统计文件的字符数、词数或行数

    wc

    $ wc list 列出 list 文件的行数、词数和字符数。

    405 3631 31906 list

    $ wc -l list 列出 list 文件的行数 。

    405 list

  • 15  

    3.1.16 比较两个文件的不同处

    diff

    $ diff join.c join1.c

    3.2 文件打包和解包

    3.2.1 文件打包和解包工具

    tar

    $ tar cvf ../data/src.tar ./src

    把当前目录下的 src 目录中的目录及文件打包成 src.tar 放在上一级目录下的 data 目录

    中。

    $ tar xvf src.tar

    把当前目录下的 src.tar 在当前目录解开。

    3.2.2 文件的压缩和解压缩

    gzip ; gunzip

    $ gzip test.tar

    把 test.tar 文件压缩为 test.tar.gz,同时删除 test.tar 文件。

    $ gunzip test.tar.gz

    把 test.tar.gz 文件解压缩为 test.tar,同时删除 test.tar.gz 文件。

    3.2.3 文件的压缩和解压缩

    bzip2 ; bunzip2

    $ bzip2 test.tar

    把 test.tar 文件压缩为 test.tar.bz2,同时删除 test.tar 文件。

    $ bunzip2 test.tar.bz2

    把 test.tar.bz2 文件解压缩为 test.tar,同时删 test.tar.bz2 文件。

  • 16  

    3.3 有关进程的命令

    3.3.1 列出进程信息的命令

    ps

    $ ps -ef |less

    UID PID PPID C STIME TTY TIME CMD

    root 1 0 0 Jan13 ? 00:00:12 /sbin/init

    root 2 0 0 Jan13 ? 00:00:00 [kthreadd]

    root 3 2 0 Jan13 ? 00:00:00 [migration/0]

    其中 UID 为用户号,PID 为进程号, PPID 为父进程号, C 为占用 CPU 的百分比,STIME

    为递交进程的时间,TTY 为递交进程时所在终端,TIME 为该进程运行的时间, CMD 为

    该进程执行的命令。

    3.3.2 杀死进程的命令

    kill

    $ kill -9 9540

    3.3.3 显示主机任务列表的命令

    top

    $ top

    PID USER PR NI VIRT RES SHR S $CPU $MEM TIME+ COMMAND

    10424 root 15 0 12740 1124 816 R 0.3 0.0 0:00.02 top

    3 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0

    4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

    其中:

    PID 为进程号, USER 为用户名 PR 为优先级 NI 为优先级值,负值为高优先级,正值为低优先级 VIRT 进程使用的虚拟内存总量,单位 kb,VIRT=SWAP+RES

  • 17  

    RES 进程使用的、未被换出的物理内存大小,单位 kb,RES=CODE+DATA,SHR 共享内存大小, S 进程状态

    $CPU CPU 时间占用百分比 $MEM 进程使用的物理内存百分比 TIME+ 进程使用的 CPU 时间总计,单位 1/100 秒 COMMAND 命令名

    3.4 命令帮助和参考

    Linux 系统的命令有很多, 我们可以通过命令帮助或 man 命令等查询命令的使用方法及详

    细说明。

    3.4.1 命令帮助 command --help $ ls --help

    命令的简单用法可用这种方式查询。

    3.4.2 命令的详细说明 man $ man ls

    Man 命令可以给出被查询命令的详细解释。

    3.4.3 命令的查询 info $ info ls

    Linux 命令有两叁千个,我们这里只列出经常用到的少数命令。用户对其他命令有兴趣,

    请查阅相关手册或联机帮助。

    3.5 文本编辑工具 vi 的快速参考

    由于我们采用的是文本模式的终端,不提供 GUI 图形模式,所以用户在编程或编辑文本

    文件时大部分要用到 vi 命令。

    vi 编辑器的使用格式为:

    $ vi

    下面给出 vi 编辑器的快速参考。

  • 18  

    ******************************************************************

    vi 的快速参考

    ******************************************************************

    vi 分为三种工作模式,最后行模式、命令模式和插入模式

    *******************************************************************

    最后行模式

    *******************************************************************

    /exp 向前到表达式 exp

    ?exp 向后到表达式 exp

    :w 把编辑缓冲区的内容写到磁盘

    :w newfile 把编辑缓冲区的内容写到新文件

    :w >> file 把编辑缓冲区的内容追加到文件

    :w! file 绝对的写到文件

    :q 退出编辑

    :q! 退出编辑并丢弃编辑缓冲区的内容

    :wq 把编辑缓冲区的内容写到文件并退出

    :x 假如需要将写盘并退出

    :f 编辑并显示文件的信息

    :r 读文件到缓冲区

    :r file 读指定文件到缓冲区

    :e 重新编辑文件

    :e! 重新编辑文件并丢弃编辑缓冲区的内容

    :e file 编辑指定文件

    :6 光标移到第六行

    :3,8d 删除第 3-8 行

    :4,9m12 移动 4-9 行到第 12 行

    :2,5co 13 复制 2-5 行到第 13 行

    :5,9w file 写第 5-9 t 行到文件

    :s/old/new/ 在当前行中用“新的字符串”替换第一个“老的字符串”

    :s/old/new/g 在当前行中用“新的字符串”替换每一个“老的字符串”

    :3,9s/old/new 在 3-9 行中用“新的字符串”替换第一个“老的字符串”

    :$s/old/new 在所有行中用“新的字符串”替换第一个“老的字符串”

    :$s/old/new/g 在所有行中用“新的字符串”替换每一个“老的字符串”

    :set nu 显示行号

  • 19  

    :set nonu 取消显示行号

    :set all 显示全部的设置

    :set list 设置显示不可见的字符

    ************************************************************

    命令模式

    ************************************************************

    hjkl 光标向左、下、上、右移动

    G 光标到文件最后行

    3G 光标到第三行

    0 光标到当前行首

    $ 光标到当前行尾

    H 光标到屏幕顶部

    M 光标到屏幕中部

    L 光标到屏幕底部

    n 向下重复上一次搜索

    N 向上重复上一次搜索

    x 删除光标处的字符

    dw 删除光标处的一个词

    dd 删除一行

    D 删除到行尾

    d0 删除到行首

    dG 删除到文件尾

    4dd 删除 4 行

    u 取消最后的改变

    * 重做上一次改变

    Y 拷贝一行

    5Y 拷贝五行

    P 粘贴到光标下

    p 粘贴到光标上

    J 把下一行和当前行相连接

    4J 把下四行和当前行相连接

    >> 向右移动当前行

    3>> 向右移动三行

  • 20  

    3

  • 21  

    四、 编译环境

    本系统装有两套编译器, 一套为 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 命令” 查看。

  • 22  

    4.2 数学核心库 MKL

    开放源码程序往往要调用大量的数学函数进行各种计算,经过长期积累,已经有一些比较

    成熟的标准化的数学库,其中最常见的诸如线性代数方面的 BLAS、LAPACK、ScaLAPACK 等等。

    本系统使用 intel 的 MKL 动态和静态数学库,其功能包括:

    线性代数 - BLAS 和 LAPACK

    线性代数 - ScaLAPACK

    线性代数 - 稀疏矩阵解算器

    快速傅立叶转换用于分布式内存多处理器(集群)

    向量数学库

    矢量随机数生成器

    Intel 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 的编程请参考有关文献和书籍。

    下面给出一个计算π的 OpenMP 的完整例子,仅供参考:源程序名 pi.f90

  • 23  

    program Compute_pi

    integer*4 n,i

    real*8 w,x,sum,pi,f,a

    f(a)=4.d0/(1.d0+a*a)

    n=100000000

    w=1.d0/n

    sum=0.d0

    !$OMP PARALLEL DO PRIVATE(x),SHARED(w),REDUCTION(+:sum)

    do i=1,n

    x=w*(i-0.5d0)

    sum=sum+f(x)

    enddo

    !$OMP END PARALLEL DO

    pi=w*sum

    print *,'compute pi=',pi

    stop

    end

    在本程序中对 do 循环部分进行 openMP 并行。

    编译:$ ifort -O2 -o pi -qopenmp pi.f90

    递交作业: $ bsub -n 24 -q mpi < pi

    Job is submitted to queue .

    执行结果:$ more output.34601

    compute pi= 3.14159265358982

    4.3.2 MPI 程序的编译与运行 MPI 其实是一个设计规范的标准,提供了大量用于消息传递和管理的函数,支持从 C/C++

    和 Fortran 语言编写的程序中调用,也可以绑定到其它一些编程语言。MPI 只是一个标准,遵

    从这一标准可以有很多不同的软件实现,但具体的应用程序应该不加修改就可以重新编译运行,

    这也是标准化带来的优点。目前常见的支持 InfiniBand 网络的 MPI 实现是 MVAPICH /

    MVAPICH2和 OpenMPI (注意跟 OpenMP的区别)。在高级编程语言支持方面,主要可以使用 GNU、

  • 24  

    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 为可执行并行文件。

  • 25  

    五、 作业管理与调度系统

    南京大学高性能计算中心采用IBM公司的LSF资源调度软件对集群上的计算资源进行统一

    调度管理,用户提交作业时将统一使用 LSF 作业管理系统进行作业提交、管理、监控、删除、

    卸载等操作。

    5.1 LSF 基本介绍 LSF 是智能化的、基于调度策略的高性能计算负载均衡管理系统,通过集中监控、调度和

    分析联网计算机的负载, LSF 可最大限度地共享计算机的 CPU、内存、磁盘、License 等计算

    资源。

    集群系统上安装集成了 LSF 10.1

    5.2 LSF 作业生命周期

    用户在登录节点用 bsub 命令递交作业,作业调度主机接收并放到匹配的队列里排队等待,

    当系统满足该作业的资源及条件后,将作业分配到相关节点进行计算,计算结束时系统在登录

    节点上给出计算结果报告、错误报告和相关信息。

    注:作业只能在登录节点 c01n01 c01n02 c01n03 c01n04 上提交。gpu 作业也可以在 gpu01

    提交。

    5.3 LSF 作业队列设置 serial 队列(24 核(不含)以下作业默认队列)

    包含节点: c65 节点组部分(c65n09-c65n14,每节点 24 核,128GB 内存)

    总节点数 6,总 core 数量 144

    串行作业和 24 核(不含)以下的并行作业默认提交至此队列

    该队列每用户最多只能提交 20 个作业

  • 26  

    mpi 队列(24 核以上默认队列):

    包含节点:c02-c65 节点组(不含 c65n09-c65n14,每节点 24 核,128GB 内存)

    总节点数 890,总 core 数量 21360

    每个用户同时可使用的最大 core 为 2400

    用户作业请设置 24 的整数倍进行提交

    gpu 队列:

    包含节点:gpu01-04

    每节点配置 2块 Nvidia Tesla K40c GPU 卡

    largemem 队列:

    包含节点:c01n05-c01n14, 10 个节点

    单节点内存为 256G

    用户作业请设置 24 的整数倍进行提交

    test 队列 c02-c65 刀箱计算节点

    包含节点:c02-c65 节点组(每节点 24 核,128GB 内存)

    总节点数 896,总 core 数量 21504

    每个用户同时可使用的最大 core 为 2400

    用户作业请设置 24 的整数倍进行提交

    作业最长允许运行时间为 1小时,超过此时间作业将被系统终止

    以上各队列设置信息可能根据运行情况随时调整,具体队列设置情况请使用 bqueues 命

    令查看。

    5.4 LSF 基本操作 5.4.1 作业提交

    LSF 作业提交有两种方式:命令行方式和脚本方式。命令行方式简单方便,脚本方式

    灵活自由。命令行方式用法为:bsub 命令后加相应选项;脚本方式用法为:所有 LSF 选项

    以“#BSUB”开头,每一个选项对应一行,在 LSF 选项输入完毕后,可以添加 shell 脚本,

    灵活性更高。具体提交方法如下。

    1) 串行作业: a) 命令行方式:

    $ bsub [-i inputfile] [-o %J.out -e %J.err] ./serialjob.exe [CMD options]

  • 27  

    提交后系统显示:

    Job is submitted to queue .

    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 并行作业提交格式(Flex 集群默认使用的 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]

  • 28  

    其中:

    [ ] 表示括号里面的内容可以不指定;

    -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 的内容可根据需要增减,各选项的意义与命令行方式一致,[CMD

    options]为 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)同。

  • 29  

    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

  • 30  

    注:某些软件/应用需要在[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 选项的说明 请参考章节 5.5。

    5.4.2 检查作业状态 bjobs 命令列出了用户提交作业的作业号、用户名、作业状态、作业队列、作业提交节

    点、作业计算节点、作业名以及作业提交时间等信息。

    $ bjobs

    JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME

    29249 zhangsan RUN mpi c01n01 24*c26n10 *./wrf.exe Feb 6 18:55

    24*c24n04

    常用的 bjobs 参数

    -w wide format

    -aps 等待作业按作业执行顺序排序显示

  • 31  

    -u all 显示所有用户作业

    -s 显示作业被挂起(suspended)的原因

    -ls 显示作业被挂起的详细原因

    以下是分页显示指定作业的详细信息:

    $ bjobs -l 34609 |more

    Job , User , Project , Status , Queue , Co

    mmand

    Wed Mar 1 09:40:04: Submitted from host , CWD , 48 Task(s), Req

    uested Resources ;

    PENDING REASONS:

    There are no suitable hosts for the job;

    PENDING TIME DETAILS:

    Eligible pending time (seconds): 780

    Ineligible pending time (seconds): 0

    SCHEDULING PARAMETERS:

    r15s r1m r15m ut pg io ls it tmp swp mem

    loadSched - - - - - - - - - - -

    loadStop - - - - - - - - - - -

    5.4.3 在线检查作业执行结果命令 bpeek jobid

    $ bpeek -f 321

    >

    starting wrf task 48 of 48

    5.4.4 查看历史作业命令 $ bhist -a

    Summary of time in seconds spent in various states:

    JOBID USER JOB_NAME PEND PSUSP RUN USUSP SSUSP UNKWN TOTAL

    34600 zhangsan *wrf.exe 0 0 0 0 0 0 0

    34601 zhangsan *wrf.exe 2 0 0 0 0 0 2

  • 32  

    34602 zhangsan *wrf.exe 0 0 0 0 0 0 0

    34603 zhangsan test 1 0 0 0 0 0 1

    34608 zhangsan *wrf.exe 1 0 1 0 0 0 2

    34609 zhangsan *wrf.exe 1019 0 0 0 0 0 1019

    $ bhist -l 34608

    Job , User , Project , Command

    Wed Mar 1 09:39:47: Submitted from host , to Queue , CWD , 48 Task(s);

    Wed Mar 1 09:39:48: Dispatched 48 Task(s) on Host(s) ,

    Allocated 48 Slot(s) on Host(s) , E

    ffective RES_REQ ;

    Wed Mar 1 09:39:48: Starting (Pid 31598);

    Wed Mar 1 09:39:48: Running with execution home , Executio

    n CWD , Execution Pid ;

    Wed Mar 1 09:39:49: Exited with exit code 126. The CPU time used is 0.0 second

    s;

    Wed Mar 1 09:39:49: Completed ;

    PENDING TIME DETAILS:

    Eligible pending time (seconds): 1

    Ineligible pending time (seconds): 0

    Summary of time in seconds spent in various states by Wed Mar 1 09:39:49

    PEND PSUSP RUN USUSP SSUSP UNKWN TOTAL

    1 0 1 0 0 0 2

    5.4.5 结束作业进程命令 bkill jobid

    如:

    %bkill 112

    (注:如果发现 bkill 杀不掉作业,可以加-r 选项强制杀掉作业,即 bill –r jobid,但

    此选项在某些极端情况下有损坏输出文件的风险,请谨慎操作。)

  • 33  

    5.4.6 用户作业挂起命令 作业执行状态由 RUN 转变为 SUSPEND:bstop jobid

    %bstop 112

    5.4.7 继续执行用户作业命令 作业执行状态由 SUSPEND 转变为 RUN: bresume jobid

    %bresume 112

    5.4.8 查看系统队列配置 $ bqueues

    QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP

    serial 30 Open:Active - - - - 0 0 0 0

    mpi 30 Open:Active - - - - 0 0 0 0

    gpu 30 Open:Active - - - - 0 0 0 0

    test 30 Open:Active - - - - 0 0 0 0

    largemem 30 Open:Active - - - - 0 0 0 0

    查看指定队列的详细配置:

    $ bqueues -l mpi

    QUEUE: mpi

    -- For use mpi jobs

    PARAMETERS/STATISTICS

    PRIO NICE STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SSUSP USUSP RSV

    30 0 Open:Active - - - - 3072 48 3024 0 0 0

    Interval for a host to accept two jobs is 0 seconds

    SCHEDULING PARAMETERS

    r15s r1m r15m ut pg io ls it tmp swp mem

    loadSched - - - - - - - - - - -

    loadStop - - - - - - - - - - -

    adapter_windows poe nrt_windows

    loadSched - - -

  • 34  

    loadStop - - -

    USERS: all

    HOSTS: c01/ c02/ c03/ c04/ c05/ c06/ c07/ c08/ c09/ c10/ c11/ c12/ c13/ c14/ c15/

    c16/ c17/ c18/ c19/ c20/ c21/ c22/ c23/ c24/ c25/ c26/ c27/ c28/ c29/ c30/ c31/ c32/

    c33/ c34/ c35/ c36/ c37/ c38/ c39/ c40/ c41/ c42/ c43/ c44/ c45/ c46/ c47/ c48/ c49/

    c50/ c51/ c52/ c53/ c54/ c55/ c56/ c57/ c58/ c59/ c60/ c61/ c62/ c63/ c64/ c65/

    5.4.9 查看机器分组情况 $ bmgroup

    GROUP_NAME HOSTS

    job job01 job02 job03

    gpu gpu01 gpu02 gpu03 gpu04

    ssd -

    c01 c01n12 c01n13 c01n14 c01n05 c01n06 c01n07 c01n08 c01n09 c01n10 c01n11

    c02 c02n13 c02n02 c02n14 c02n03 c02n04 c02n05 c02n06 c02n07 c02n08 c02n09

    c02n10 c02n11 c02n12 c02n01

    c03 c03n03 c03n14 c03n04 c03n05 c03n06 c03n07 c03n08 c03n09 c03n10 c03n11

    c03n01 c03n12 c03n02 c03n13

    c04 c04n04 c04n05 c04n06 c04n07 c04n08 c04n09 c04n10 c04n11 c04n12 c04n01

    c04n13 c04n02 c04n14 c04n03

    5.4.10 查看机器负载情况 $ lsload

    HOST_NAME status r15s r1m r15m ut pg ls it tmp swp mem

    c27n12 ok 0.0 0.0 0.0 0% 0.0 0 1381 78G 15.6G 115G

    c58n11 ok 0.0 0.0 0.0 0% 0.0 0 8280 78G 15.6G 115G

    c59n03 ok 0.0 0.4 0.5 0% 0.0 0 59648 78G 405G 115G

    c28n10 ok 0.0 0.0 0.0 0% 0.0 0 1389 78G 2.7T 115G

  • 35  

    5.4.11 查看各节点 CPU 的负载情况 $ bhosts

    HOST_NAME STATUS JL/U MAX NJOBS RUN SSUSP USUSP RSV

    c01n01 closed - - 0 0 0 0 0

    c01n05 ok - 24 0 0 0 0 0

    c01n06 ok - 24 0 0 0 0 0

    5.4.12 统计用户作业使用的 CPU 时间 统计指定用户作业的 CPU 时间 bacct -u username

    % bacct -u zhangsan

    统计指定已完成作业的使用时间

    bacct -b jobid

    % bacct -b 44758

    注:此命令统计的时间为 CPU 时间,可以通过此时间大致估算程序的运行效率,但此时间

    不作为计费依据,计费时间为作业实际占用的 WallTime 时间*占用核数。

    5.5 bsub 命令常用自定义参数 5.5.1 指定提交队列 如果要查看某用户可使用哪些队列

    $ bqueues -u username

    -q 队列名 指定提交队列

    $ bsub -q gpu my_job

    这个例子提交作业到 gpu 队列

    5.5.2 指定作业名称 -J job_name 指定作业名称

    作业名称最多可以有 4096 个字符。作业名称不是唯一的,不同作业可以指定相同的作业

    名。

    $ bsub -J my_job sleep 1000

    提交一个 sleep 作业,作业名称被指定为 my_job

  • 36  

    5.5.3 指定作业执行主机 bsub 参数 -m “c010n10 c11n11 c12 c13”

    c010n10 c11n11 为指定的节点

    c12 c13 为指定的节点组

    如:

    $ bsub -m “c010n10 c11n11” my_job

    提交作业到 c010n10 c11n11 这两个个节点。

    可以指定不同主机的优先级,如

    $ bsub -m “c11+2 c12+1 c13”

    这样作业优先分配到 c11, 然后是 c12, 最后是 c13

    5.5.4 指定作业开始运行或结束的时间 -b [[year:][month:]day:]hour:minute 指定作业开始运行的时间

    如:

    $ bsub -b 20:00 my_job

    作业提交后处于排队状态,直到 20:00 再开始运行。

    -t [[year:][month:]day:]hour:minute

    指定作业结束时间,到达设定时间后会发送 SIGUSR2 参数,如果十分钟内作业没有结束就

    会被杀掉

    5.5.5 指定输出文件 -o out_file 指定作业输出文件

    -oo out_file 指定作业输出文件,会覆盖原文件

    -e err_file 指定标准错误输出文件

    -eo err_file 指定标准错误输出文件,会将原有文件覆盖

    5.5.6 指定作业运行的 shell 环境 -L login_shell 指定作业运行的 shell 环境,必须为绝对路径。如:

    bsub -L /bin/bash my_job 在 bash 环境运行作业

    bsub -L /bin/csh my_job 在 csh 环境运行作业

  • 37  

    5.5.7 指定并行作业的任务数 [-n min_tasks[,max_tasks] | -nn] 指定并行作业的任务数,也就是运行作业的核数

    如:

    bsub -n 4,8 my_parallel_job 使用 4-8core 运行作业

    bsub -n 8 my_parallel_job 指定使用 8core 运行作业

    5.5.8 设置作业运行时间 到达设定时间后会发送 SIGUSR2 参数,如果十分钟内作业没有结束就会被杀掉

    -W [hour:]minute[/host_name | /host_model] 设置作业的运行时间

    5.5.9 指定 jobs slot 的分配方式 -R span[hosts=1] 表示 job slots 都分配在一个节点上。这里 hosts 后面的值不能大于

    1.

    -R span[ptile=24] 表示每个节点分配 24job slots。 一般对于大规模并行作业 ptile 后

    面的值等于每个节点的 cpu cores 是比较好的。

    5.6 提交作业举例 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

    ===========================

    #!/bin/bash

    #BSUB -q mpi

    #BSUB -J testjob

    #BSUB -n 2

  • 38  

    #BSUB -o myoutfile

    #BSUB -o myerrfile

    #BSUB -W 40

    my_exe exe_options

    ===========================

    然后执行 bsub < test.job 提交作业

    5.7 Materials Studio 作业的提交 Accelrys MaterialsStudio 8.0 已经安装在 Flex 集群上,有需求的老师和同学已经可以

    使用。

    1) 安装目录:/share/apps/accelrys/MaterialsStudio8.0

    2) 已授权模块的许可数:

    MS Visualizer and Collection, 5

    MS Dmol3 Interface, 4

    MS Dmol3-Solid Parallel, 4

    MS DFTB+, 2

    MS COMPASS Parallel, 1

    MS Forcite Plus, 4

    MS GULP Interface, 1

    MS GULP Parallel, 1

    上述一个使用许可(用户数)允许用户在同一时间提交一个作业,但不限制并行的 CPU 数。

    若超过使用许可或使用未授权的模块,会出现"no license"等相关错误。用户可通过如下方式

    查看当前可用的许可数:

    source /share/apps/accelrys/MaterialsStudio8.0/LicensePack/etc/lp_profile

    lmstat -a

    3) 该软件授权给南京大学的教职员工及学生,若要使用上述软件进行大规模并行运算,

    则需要在高性能计算中心拥有计算账号。发表文章时需要有对南京大学高性能计算中心的相关

    致谢内容。

  • 39  

    4) 高性能计算中心禁止用户使用客户端/服务器端模式使用 Materials Studio,因此相应

    的Gateway进程已被停用。用户可以在客户端建模完成后将相关文件上传至Flex集群服务器,

    再通过相关的命令将作业提交运行。

    5) 提交 MS 作业的方式如下(以 Dmol3 为例):

    方式一:脚本方式

    例:把下面内容编写成脚本 MS_example

    #!/bin/sh

    #BSUB -o %J.out

    #BSUB -e %J.err

    #BSUB -n 48

    /share/apps/accelrys/MaterialsStudio8.0/MaterialsStudio8.0/etc/DMol3/bin/RunD

    Mol3.sh -np 48 Inputfile

    再通过"bsub < MS_example"提交。

    方式二:命令行方式

    bsub -n 48 /share/apps/accelrys/MaterialsStudio8.0/MaterialsStudio8.0/etc/DMo

    l3/bin/RunDMol3.sh -np 48 Inputfile

    注:若要使用大内存队列 largemem,则需要用-q largemem 指定队列名。

    建议在.bashrc 中进行如下环境变量设置,运行 MS 命令时即可不用输入全路径(以 DMol3

    为例):

    . /share/apps/accelrys/MaterialsStudio8.0/LicensePack/etc/lp_profile

    export MS_INSTALL_ROOT=/share/apps/accelrys/MaterialsStudio8.0/MaterialsStudi

    o8.0

    export PATH=$PATH:$MS_INSTALL_ROOT/etc/DMol3/bin

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MS_INSTALL_ROOT/lib

    更详细的.bashrc 环境变量设置可以参考/share/default.bashrc 文件,uncomment 掉“#

    for Materials Studio8.0”下面段落的相应设置。 

     

     

     

     

  • 40  

    5.8 Matlab 作业的提交 Flex 集群上的 Matlab 2015a 并行版最大支持并发用户数为 2,最大支持 96 核并行。主要

    包含如下工具箱:

    Symbolic Math Toolbox

    Statistics Toolbox

    Curve Fitting Toolbox

    Optimization Toolbox

    Global Optimization Toolbox

    Neural Network Toolbox

    Bioinformatics Toolbox

    SimBiology

    Parallel Computing Toolbox

    该软件授权给南京大学的教职员工及学生,大规模并行运算的话需要在高性能计算中心拥

    有计算账号。发表文章时需要有对南京大学高性能计算中心的相关致谢内容。

    1) 在.bashrc 文件中加入如下设置:

    MLM_LICENSE_FILE=27010@job01,27010@job02,27010@job03

    export PATH=/share/apps/matlab/R2015a/bin/:$PATH

    export LD_LIBRARY_PATH=/share/apps/matlab/R2015a/lib/:$LD_LIBRARY_PATH

    2) 提交作业:

    把下面内容编写成脚本,如 matlabjob

    #!/bin/bash

    #BSUB -app matlab

    #BSUB -o %J.out

    #BSUB -e %J.err

    #BSUB -n 1

    matlab -nodisplay -r example #(example ---> example.m)

    然后用 bsub < matlabjob 提交。

    也可直接用命令行方式提交,如:

    bsub matlab -nodisplay -r example

  • 41  

    注:上述命令会自动先提交一个串行程序到 serial 队列,执行 example.m 中的串行部分,

    在遇到并行执行代码时 matlab 会自动再次向作业调度系统提交相应的并行作业。因此,可能

    会出现提交该作业后出现两个 matlab 作业的情形(一个对应 matlab 程序串行部分、一个对应

    其并行部分)。

    以矩阵的特征值,奇异值分解等数值计算测试为例,example.m 文件如下:

    %% This is a parfor loop demo to show a new feature of DCT: matlabpool

    N=200;

    a=zeros(N,1);

    % Traditonal For Loop, then change it to Parfor to check the time consuming

    tic

    for (i=1:N)

    a(i)=max(abs(eig(rand(500))));

    end

    toc

    %plot(a);

    %% MATLABPOOL feature

    matlabpool open 8;

    tic

    parfor (i=1:N)

    a(i)=max(abs(eig(rand(500))));

    end

    toc

    save('mydata','a');

    matlabpool close

     

     

     

     

  • 42  

    六、 常见问题

    6.1 为什么程序无法输出,也无法写文件? 家目录或/scratch 目录下达到磁盘配额,对应的目录将会停止写操作。可以使

    用 mmlsquota 查看磁盘的使用情况,详见 2.2.3.

    特别提醒:联想 Flex 集群上 SSD 高速并行文件系统(/scratch 目录)只用于临

    时存放必要的计算文件,为了保证该文件系统正常、高效地运行,用户需要及时

    转移自己的计算结果,系统每天将自动清除/scratch 目录下超过 180 天的旧文

    件,“中心”不承担由此引起的一切责任和后果。

    6.2 为什么 serial 队列作业一直排队,或者 serial 队列作业提交不上去了? Flex集群的serial队列每帐号最多只能提交20个作业,超出的作业将无法提交。

    同时,每帐号 serial 队列下所有作业同时运行的核数不超过 23 核。

    6.3 为什么我的帐号登录不了了? 1、出于安全考虑,登录集群时如果十分钟之内连续输错十次密码,集群帐号将

    被临时锁定,24 小时后帐号自动解锁。

    2、如果该帐号属于博士后、专职科研岗等非固定职位岗位人员,在工作证或聘

    用合同上的有效日期到期后,账户将自动过期、禁止登录。请携带最新的有效证件或

    聘用合同(携带原件备查、复印件“中心”留存)办理帐号重新启用事宜。

    3、“中心”发现帐号存在严重的违规行为,暂停了该帐号的使用。此类情况需要

    帐号拥有者出具书面情况说明并签字后,方可解封帐号。

    6.4 登录节点卡顿怎么办? 如果某台登录节点上有用户在拷贝数据、运行高负载程序等,可能会造成该登录

    节点响应缓慢,此类情况可以尝试更换到其它登录节点。若所有登录节点卡顿,可能

    是外部网络因素(校园网、电信网络), 也可能是文件系统正在进行频繁读写。

    特别提醒:Flex 集群的 4台登录节点只能进行程序编译、简单的测试和作业的提

    交、查询等,不得在登录节点上直接运行作业。所有计算作业必须通过 LSF 作业调度

    系统提交,“中心”将对违规帐号进行记录并通知帐号拥有者,情况严重的将封禁帐

    号。若发现有帐号存在违规行为,大家可以向高性能计算中心进行投诉。

    6.5 作业用 bkill 命令杀不掉怎么办? 使用 bkill -r $JOBID 即可。

  • 43  

    6.6 为什么登录节点不能直接从外网下载软件或数据? Flex 集群登录节点使用的是学校提供的静态 IP 地址段,网络中心不支持静态 IP

    的 p.nju.edu.cn 认证,因此 Flex 集群的登录节点只能访问校内网络。如果需要安装

    软件,需要先将安装包上传至 Flex 集群再进行安装,不支持 git 等工具从校外的源

    直接安装/更新软件。