前言
- 第一次接触使用学校的高性能平台是在今年上半年进行毕业设计的时候,当时有大量的数据需要在Matab中进行模型运算,便向学校申请了账号,使用了HPC平台。计算速度确实比个人电脑快了太多太多。
- 近期,有很多初次想使用高性能计算平台的研究生学长学姐来向我咨询,一遍遍说明确实很麻烦,决定趁着周末的空挡来写下这篇入门使用指南(已经熟悉使用linux系统的可不用观看,直接阅读LFS系统操作手册即可)。
什么高性能计算
- 高性能计算简称 HPC,是指利用聚集起来的计算能力来处理标准工作站无法完成的数据密集型计算任务,包括仿真、建模和渲染等。我们在处理各种计算问题时常常遇到这样的情况:由于需要大量的运算,一台通用的计算机无法在合理的时间内完成工作,或者由于所需的数据量过大而可用的资源有限,导致根本无法执行计算。HPC 方法通过使用专门或高端的硬件,或是将多个单元的计算能力进行整合,能够有效地克服这些限制。将数据和运算相应地分布到多个单元中。
- 说的简单点,就是把你需要计算的东西交给一群特别厉害的电脑帮你同时算,提高整体的运算效率。
南京工业大学高性能计算平台
- 本校高性能计算平台由2个登录节点、1个管理节点、2个IO节点、96个计算节点、存储系统以及网络系统构成,具体节点配置情况在这里不作过多叙述。
整个集群计算节点浮点运算理论峰值约为:75.26 Tflops,实测值约为69.12Tflops,达到理论峰值90%以上;存储可用容量达到264TB。实测读写带宽大于5892MB/S 。
- 平台操作系统:CentOS Linux release 7.3.1611 (Core)
- 平台作业管理系统:Platform LSF 10.1
这里解释一下,高性能计算平台上进行运算是需要将自己的运算过程编写成脚本,然后提交到作业管理系统中,由该系统根据当前账户的优先级、计算节点的空闲情况以及脚本提交的先后顺序来判定进行哪一项脚本的运算。在高性能计算平台中,严禁直接在登录节点上运行脚本进行计算。
- 编译软件:
Intel® Parallel Studio XE 2015 Update 3 Cluster Edition
Intel® Parallel Studio XE 2017 Update 6 Cluster Edition
Intel™ Parallel Studio XE 2019 Cluster Edition - 常用软件:通过
ls /gpfs/soft
命令查看已安装的软件。
学校高性能计算中心并未购买任何商业软件的使用授权,用户需自行解决软件版权问题,用户由于软件使用而产生的所有版权问题与高性能计算中心无关!
- 队列分布:
Test:运行测试任务,运行于 node02,运行时间 20min。
Normal:运行普通并行作业,运行于node1~node70节点 ,除 node02提交任务时在作业脚本中需加-q normal
,运行时间为 5天 。
High:优先级高,只有高成果数的用户,申请后经中心专家委员会审核,才可以提交。
compute2:运行大并行作业(slots大于等于32),运行于node71~node94节点 。
Fat:运行大内存作业( MEM需求大于等于100GB)。
GPU:运行需要使用GPU的作业(需特别申请才可使用)。 - 存储系统:
存储系统为 Lenovo DS5760,裸容量为 384TB。
对应目录:/gpfs
可用容量:262TB
高斯等一些高读写的软件需要高速缓存盘,目前设置是在本地
/tmp
目录下,但是这个固态硬盘只有200GB容量,为了满足大缓存需求现在高性能计算平台提供4TB高速缓存盘/scratch
。注意:本地固态硬盘速度比此高缓存读写快,因小作业请不要修改到/scratch
。
如何登录
- 下载Xshell远程连接客户端。到Xshell官网使用本校Njtech邮箱下载学校用户免费版,点此直达,输入邮箱、姓名,下载链接便会发送至学校Njtech邮箱中,下载安装即可,安装过程全部选择默认。
- Xshell安装完成后,双击桌面Xshell图标,打开软件。点击会话框中的新建。
- 在弹出的会话框中输入正确的主机与端口号。
南京工业大学高性能平台登录节点主机为:
10.3.249.8
或10.3.249.9
,二者选用一个登录即可,端口号均为22,平台只能在Njtech、Njtech-Home系列WIFI下,和有线接入学校网络的情况下登录。
4. 在左侧类别中,选择**用户身份验证**,然后在对话框中输入自己的 用户名与密码,点击连接即可。
高性能计算平台的用户名和密码为 智慧南工平台的学号(工号)与密码。
5. 当前电脑首次连接时会出现下列警告,选择接受并保存。
6. 出现下列界面,便已经登录成功。
如何进行文件传输
- 下载安装WinSCP,打开官网下载最新版,点此直达。
WinSCP是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。
2. 安装过程,全部选择默认选项安装。
3. 双击桌面WinScp图标,打开软件,在新建连接页面中选择文件协议为:SCP
4. 输入主机、端口号、用户名、密码,这些同Xshell中的信息。可以在登录前选择保存并记住密码,方便下次登录。信息填写完毕后,点击登录。
5. 首次登录会提示下列警告,选择是即可。
6. 出现当前用户的主目录时,便登录成功。
- 在右侧HPC目录区空白处点击右键,可以新建目录或文件。
- 选择HPC目录中的文件夹或文件,点击右键,可以下载该文件夹或文件到左侧本地电脑目录。
- 同理,选择左侧本地电脑中的脚本或文件夹,点击右键,可以上传该脚本或文件夹到HPC中的当前目录。
- 使用WinScp可直接编辑脚本,或查看文本信息。编辑HPC目录下的文件,保存后会自动上传并替换原文件。
进行任务提交(本文以提交MATLAB任务为例)
- 在本地电脑将MATLAB模型文件打包整理
- 新建任务脚本
job-matlab.sh
,新建文件后会自动弹出编辑器。 - 编写任务脚本并保存。常用软件的任务脚本在南工高性能计算中心QQ群文件中有上传,可以下载参考。
此处我们建立两个脚本,一个是正常提交作业的脚本
job-matlab.sh
,另一个是在test队列
进行测试用的脚本job-matlab-test.sh
。
#!/bin/sh
#BSUB -q normal
#BSUB -o %J.out
#BSUB -e %J.err
#BSUB -n 28
#BSUB -J matlab
module load matlab
matlab -nodesktop -nosplash -nodisplay -r start
#BSUB -q normal
:用来指定任务在normal
队列运行,根据任务需要填写。#BSUB -o %J.out
:用来指定任务运行情况输出目录。#BSUB -e %J.err
:用来指定任务错误信息输出目录。#BSUB -n 28
:指定任务运行所用核心数28
。
- 提交任务的任务核数
normal队列
必须是14核的倍数;compute2队列
必须是32的倍数。 - 确定核数前,一定确保软件及所建立的模型支持多核并行计算,并使用
busers -w xxxgroup
命令(xxx为所开户老师的工号)查询本组可使用的总核数。
#BSUB -J matlab
:设置任务名称为matlab
同上操作,建立一个job-matlab-test.sh脚本,在该脚本中,将#BSUB -q normal
改为#BSUB -q test
- 上传MATLAB模型至HPC用户目录。
- 使用Xhsell工具远程连接登录HPC,查看模型文件是否已经上传。
登录后,我们处于当前用户的主目录,可以使用pwd
命令查看所在目录。
[1907160330@login02 ~]$ pwd
/gpfs/users_home/1907160xxx
使用ll
或ls
命令可查看当前目录下的所有文件或文件夹。
[1907160330@login02 ~]$ ls
ai_datastore matlab-0 soft
[1907160330@login02 ~]$ ll
total 0
drwxr-xr-x 6 1907160330 3561 4096 Jun 10 13:41 ai_datastore
drwxr-xr-x 4 1907160330 3561 4096 Sep 20 19:12 matlab-0
drwxr-xr-x 3 1907160330 3561 4096 Sep 20 18:47 soft
此时可以看到,前面通过WinScp上传的matlab-0
模型文件夹已经在目录下。
使用cd 文件夹名称
命令可进入该文件夹,然后使用pwd
命令查看目录路径,再使用ls
或ll
命令查看文件夹下的文件。
[1907160330@login02 ~] cd matlab-0
[1907160330@login02 matlab-0]$ pwd
/gpfs/users_home/1907160330/matlab-0
[1907160330@login02 matlab-0]$ ls
job-matlab.sh job-matlab-test.sh main public start.m
此时如果想回到上一级文件夹,可以使用cd ..
命令。通过pwd
命令可确认是否已经回到上级目录。
[1907160330@login02 ~]$ cd ..
[1907160330@login02 ~]$ pwd
/gpfs/users_home/1907160330
[1907160330@login02 ~]$ ls
ai_datastore matlab-0 soft
- 进入脚本所在文件夹,对准备计算的模型进行测试。
使用cd
命令进入,查看脚本文件。
[1907160330@login02 ~]$ ls
ai_datastore matlab-0 soft
[1907160330@login02 ~]$ cd matlab-0
[1907160330@login02 matlab-0]$ ls
job-matlab.sh job-matlab-test.sh main public start.m
job-matlab.sh
与 job-matlab-test.sh
都在当前目录下。
使用bsub <脚本名
命令进行提交(<
符号切记不可少),首先使用test队列
对脚本及模型进行测试,避免出现排队几天,运算1秒的情况,浪费时间。test队列
会运算20分钟。
[1907160330@login02 matlab-0]$ bsub <job-matlab-test.sh
Job <151359> is submitted to queue <test>.
提交后,使用bjobs
命令查看作业运行情况。
[1907160330@login02 matlab-0]$ bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
151359 1907160 RUN test login02 28*node02 matlab Sep 20 19:29
使用bqueues
命令,可查看所有队列运行状况。
[1907160330@login02 matlab-0]$ bqueues
QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP
test 80 Open:Active - - - - 56 28 28 0
special 80 Open:Active - - - - 0 0 0 0
high 31 Open:Active - - - - 4011 2506 1477 0
normal 30 Open:Active - - - - 2086 1659 427 0
parallel 30 Closed:Active - - - - 0 0 0 0
compute2 30 Open:Active - - - - 1440 672 768 0
fat 30 Open:Active - - - - 14 0 14 0
gpu 30 Open:Active - - - - 2 0 2 0
QUEUE_NAME
:队列名称PRIO
:优先级,数字越大优先级越高STATUS
:状态Open:active
:表示已激活,可使用Closed:active
:表示已关闭,不可用MAX
:队列对应的最大CPU核数,-表示无限,以下类似JL/U
:单个用户同时可以的CPU核数NJOBS
:排队、运行和被挂起的总作业所占CPU核数PEND
:排队中的作业所需CPU核数RUN
:运行中的作业所占CPU核数SUSP
:被挂起的作业所占CPU核数
20分钟后,脚本会自动停止运算,此时到模型文件夹下,可以看到.out
文件和.err
文件。在WinScp中进入模型文件夹,双击打开.err
文件和.out
文件,查看是否有报错。数据正常输出则可以进入下一步正式提交。
- 正式提交作业脚本。
Xshell登录HPC,进入到模型脚本所在文件夹。使用bsub <脚本名
命令提交运算脚本(<
符号切记不可少),提交后使用bjobs
命令查看作业情况,以及queues
命令查看队列使用情况。确认任务以及在排队等待运算后,完成任务提交流程,等待运算完毕。
[1907160330@login02 ~]$ pwd
/gpfs/users_home/1907160330
[1907160330@login02 ~]$ ls
ai_datastore matlab-0 matlab_crash_dump.1099-1 soft
[1907160330@login02 ~]$ cd matlab-0
[1907160330@login02 matlab-0]$ ls
151359.err 151359.out job-matlab.sh job-matlab-test.sh main public start.m
[3561@login02 matlab-0]$ bsub <job-matlab.sh
Job <151363> is submitted to queue <normal>.
[1907160330@login02 matlab-0]$ bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
151363 1907160 PEND normal login02 matlab Sep 20 19:56
[1907160330@login02 matlab-0]$ bqueues
QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP
test 80 Open:Active - - - - 0 0 0 0
special 80 Open:Active - - - - 0 0 0 0
high 31 Open:Active - - - - 4011 2492 1477 0
normal 30 Open:Active - - - - 2100 1687 413 0
parallel 30 Closed:Active - - - - 0 0 0 0
compute2 30 Open:Active - - - - 1440 672 768 0
fat 30 Open:Active - - - - 14 0 14 0
gpu 30 Open:Active - - - - 2 0 2 0
- 如果发现脚本提交错误,可以使用
bkill
命令终止某个运行中或者排队中的作业。
[1907160330@login02 matlab-0]$ bjobs
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
151363 1907160 PEND normal login02 matlab Sep 20 19:56
[1907160330@login02 matlab-0]$ bkill 151363
Job <151363> is being terminated
请及时终止请及时终止有问题或无需再运行的程序,避免算力浪费
- 计算完成后,使用WinScp工具,将算得数据后模型文件下载到本地处理。
环境变量的配置
新用户创建后会将系统默认的环境变量填写到用户~/.bashrc
文件下(除intel 环境变量外,其他全部用#注释,默认不生效)。用户可作为参考,根据使用情况进行修改。
(推荐)使用Environment Modules进行环境变量管理
Environment Modules 包是一个简化 shell 初始化的工具,它允许用户在使用 modulefiles 进行会话期间轻松修改其环境。每个模块文件都包含为应用程序配置 shell 所需的信息。模块文件可以由系统上的许多用户共享,并且用户可以拥有自己的集合来补充或替换共享模块文件。
Modules 指令
module avail
:列出当前 module path 中的所有可用模块文件。
[1907160330@login02 ~]$ module avail
module load MODULEFILE
:加载模块文件/类。
[1907160330@login02 ~]$ module load matlab/R2016a
module list
: 显示已经加载的模块。
[1907160330@login02 ~]$ module list
Currently Loaded Modulefiles:
1) matlab/R2016a
module unload MODULEFILE
:卸载模块文件/类
[1907160330@login02 ~]$ module unload matlab/R2016a
[1907160330@login02 ~]$ module list
No Modulefiles Currently Loaded.
module switch MODULEFILE-A MODULEFILE-B
:切换模块
执行命令会卸载模块A,加载模块B
[1907160330@login02 ~]$ module load matlab/R2016a
[1907160330@login02 ~]$ module list
Currently Loaded Modulefiles:
1) matlab/R2016a
[1907160330@login02 ~]$ module switch matlab/R2016a cmake/3.8.1
[1907160330@login02 ~]$ module list
Currently Loaded Modulefiles:
1) cmake/3.8.1
[1907160330@login02 ~]$
自定义MODULEFILE
在管理员配置的MODULE中没有你需要的环境时,普通用户就可以创建属于自己的MODULEFILE文件。
- 进入到用户主目录下,使用
mkdir
命令创建一个名为privatemodules
的文件夹。
[1907160330@login02 ~]$ mkdir privatemodules
[1907160330@login02 ~]$ ls
3.6.1 ai_datastore matlab-0 matlab_crash_dump.1099-1 privatemodules soft
- 进入到
privatemodules
文件夹中,创建变量,此处以ffmpeg
为例。
[1907160330@login02 privatemodules]$ mkdir ffmpeg
[1907160330@login02 privatemodules]$ cd ffmpeg
[1907160330@login02 ffmpeg]$ vim 4.3.1
此时会打开vim编辑器,在里面输入或者复制如下脚本(英文状态下,按i
开始编辑):
#%Module1.0
proc ModulesHelp { } {
puts stderr "\t FFmpeg \n"
}
module-whatis "\t For more information, \$module help ffmpeg \n"
conflict modulefile
prepend-path PATH /gpfs/users_home/1907160330/soft/ffmpeg
编辑完成后,按Esc退出编辑模式,然后输入:wq!
,保存并退出。
3. 使用cd ~
回到用户主目录,修改当前用户的环境变量文件.bashrc
,为module
加入我们自建的目录。
[1907160330@login02 ffmpeg]$ cd ~
[1907160330@login02 ~]$ vim .bashrc
英文状态下按i
在当中插入:export MODULEPATH=/gpfs/users_home/xxx/privatemodules:$MODULEPATH
(xxx为你的用户名)
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
export MODULEPATH=/gpfs/users_home/1907160330/privatemodules:$MODULEPATH
# User specific aliases and functions
编辑完成后,按Esc退出编辑模式,然后输入:wq!
,保存并退出。
- 使用
source
命令,让你的配置文件生效。
[1907160330@login02 ~]$ source .bashrc
-bash: PROMPT_COMMAND: readonly variable
- 在使用
module av
命令查看,即可看到我们自行添加的MODULEFILE。
[1907160330@login02 ~]$ module avail
---------- /gpfs/users_home/1907160330/privatemodules ----------
ffmpeg/4.3.1 python3/3.7.1
常见软件任务脚本
仅限校园网内下载,下载后根据自身需要修改软件版本等参数。可使用
ls /gpfs/soft
查询软件列表。
job-ABAQUS:点此下载
job-comsol:点此下载
job-fluent:点此下载
job-gau16:点此下载
job-gromacs5.1-double:点此下载
job-gromacs5.1-float:点此下载
job-lammps:点此下载
job-openfoam:点此下载
job-vasp:点此下载