超级计算

指引

欢迎您使用e-Science中心超算服务

高性能计算集群提供了安全多样的远程登录方法,使用 SFTP、ZMODEM、云盘等多种方式可以进行数据传输。集群已集成云盘便捷同步和备份数据,如数据量巨大可采用移动存储直接进行数据拷贝,主要文件数据请自行备份!注意查看组和用户的的存储配额情况,满了就无法写入数据了。

禁止在登录节点或计算节点直接运行计算程序,用户必须通过作业调度系统提交作业控制作业,通过容器化技术可以在完全自主和隔离的环境中运行程序。海量作业需要进行优化以便管理,查看信息可见作业调度和集群等整体情况。

集群有丰富的种类各异计算资源,有详细的描述和配置信息,用户可以根据自己的需求进行选择。存储资源中的高性能的全闪Burst Buffer为所有文件系统提供了高速缓存,可大幅提高IO密集型作业的性能。

集群在/fs00/software/中安装有大量的软件资源,如GNUIntelNVIDIAAMD的编译器和数学库等,常用的计算资源支撑软件

集群的所有运行监控运行监控数据全部公开访问,所有维护操作都记录在维护记录中,其中对用户有显著影响和重大维护均在维护日志中列出。

请用户仔细阅读使用手册,如有疑问可以通过QQ群、邮件和电话咨询。

姚舸

地址:江苏省南京市鼓楼区金银街15号唐仲英楼

电话:025-83621186

邮箱:yaoge@nju.edu.cn

QQ群:1406661 公众号:微结构eScience
hpcqqqun.png wechat.jpg

校内用户超算集群申请与基本使用简明指南(2024年后新版)

2024年春节后,集群登录方式迎来较大更新,本文为翻新版简明指南。

本文将简述集群使用的基本过程,但是详细的操作和使用仍然需要仔细阅读超级计算使用说明。

一、账号获取

  1. 新用户在scc.nju.edu.cn首页点击注册账户

  1. 无论校内还是校外用户,均正常按照流程注册:

  1. 填写表单,用户组名称输入所在课题组的用户组名(不知道就去问课题组里),提交申请;
  2. 组长(即课题组里负责审批的人,如果不清楚也问组里)登录scc.nju.edu.cn自助审批新用户,通过后账号立刻生效,即可使用。
  3. 新用户再次登入scc.nju.edu.cn,即可进行一些账号信息的维护,包括重置密码、查看机时费用等。

如果组里之前没注册过相关账号,请参考账号管理申请新组并联系姚老师:yaoge@nju.edu.cn

二、登入资产

注册成功后,用注册成功的账号和密码(不是统一身份认证)访问entry.nju.edu.cn

2.1、首次登入

首次登入必须使用浏览器,会要求设置两步认证,屏幕会出现一个二维码要求绑定。手机安装下列支持 RFC 6238 的 TOTP 客户端 APP,扫描二维码(也可手动输入),然后点击“完成绑定”。具体建议的APP参照:eScience服务与软件兼容性报告 -两步认证软件支持情况表

两步认证请另行参阅:eScience服务双重认证简明指南

按照需求使用一个验证器即可。但注意,如果没有备份和导出功能,手机一旦更换,这个设置也会失效。

如需重新进行两步认证绑定(如手机丢失),请用注册预留邮箱发邮件至yaoge@nju.edu.cn申请并抄送填写用户注册表单的教职工邮箱。 下面以Microsoft Authenticator(绑定微软账号云端备份,推荐,但可能安卓/鸿蒙手机需要谷歌框架,不同机型如何打开或安装谷歌框架请直接百度)为例:

扫描二维码即可添加成功。

2.2、绑定成功后登入

打开前面的两步认证软件,点开对应entry.nju.edu.cn的账号:

获取其中的一次性密码代码,登入

进入后,可以看见你的账户下分配的资产:

按照本页顶端的提示,安装AccessClient之后,点击更多,会显示三种访问方式:

直接点击上述选项访问可以直接在从浏览器访问而无需再次登入账户。此外,用户可以通过点击右上角用户名,更改账号设置-会话配置-字符会话/文件传输来实现更加方便地登入。例如,将字符会话和文件传输会话访问方式分别修改为xshellxftp或其他本机安装有的客户端,即可实现从entry.nju.edu.cn点击直接唤起已经安装的Xshell和Xftp,无需再次输入密码。

三、登录资产

3.1、SSH客户端登入:以Xshell为例

由于命令行一定是需要跨过去的坎,所以后面默认会主要使用ssh方式。

Windows下推荐使用Xshell(当然你有其他的客户端甚至是原生的Linux都可以): 家庭/学校免费 - NetSarang Website(最新版直接下载普通版本即可使用)

安装完打开Xshell,点击左上角的新建来新建会话

设置自定义的名称之后,将主机设置为entry.nju.edu.cn

连接-用户身份验证中,按照集群用户名/10.1.0.101/self的格式填入用户名,同时密码空着(或者输入账户密码也可,但是需要阅读下面“分两步输入”的方法介绍):

确定后保存。

打开刚刚新建的会话,然后第一次连接可能会出现“SSH安全警告”,询问是否“接受此主机密码?”,接受并保存即可。

下一步中,需要输入密码。密码有两种输入方式:

  1. 一次性输入:和原来一样,遵循账户密码+两步认证的格式,其中账户密码和scc.nju.edu.cn的登录密码相同,但是中间用空格空开。例如,账户密码为:qwerty,此时两步认证软件内的代码为123456,那么你这里需要填写qwerty 123456。千万不要勾选记住密码,因为这个方式显然后半部分每次会变。
  2. 分两步输入:先输入账户密码,在字符界面需要“2nd Password”时再单独输入手机两步认证软件内中的动态口令。可以勾选记住密码,因为这个方式中账户密码不变。

一次性输入或分两步输入均可

分两步输入需要单独输入第二个动态密码

登入成功后,是登录节点。应当会这么显示:

友情提示——在这里改字体和大小:

在这里改配色方案:

对自己的眼睛好一点……

当然,你也可以直接登录entry.nju.edu.cn,按照前文说明配置会话,点击ssh方式登录资产自动登录Xshell。这是最简单的做法。

扩展阅读: 什么是SSH?SSH是如何工作的? - 华为

3.2、更易用的文件传输:Xftp

集群支持sftp方式的文件传输。比起使用rz、sz等命令的方式,sftp客户端具有易用、直观的特点,适合传输多个、大批量的文件。Windows下,这里和Xshell配套的软件便是Xftp。

XFTP - NetSarang Website

Xftp使用参数:

其他情况可以去远程登录文档内寻找答案。

当然,你也可以直接登录entry.nju.edu.cn,按照前文说明配置会话,点击sftp方式登录资产自动登录Xftp。这是最简单的做法。

3.3、网页端的文件传输与编辑

新版scc.nju.edu.cn集群门户引入了一个新功能:文件浏览器。这个功能会更像网盘一样,让你直接访问集群上的文件并进行一定简单操作。

在主页面左上角点开,可以看到 “文件浏览器” 应用,点击:

弹出的界面中,会要求你登录身份。注意,这里的登录方式和前文不一样,密码与scc.nju.edu.cn登录方式一致。即:

认证后,还有两步认证验证码:

这里的两步认证验证码即为entry.nju.edu.cn中该集群账号所绑定的两步认证。

“管道”连接成功之后,刷新该页面就可以看到文件目录了。你可以在网页端完成对文件的操作,包括:

四、Linux命令行使用

命令行五花八门,说到底,都是命令 参数(注意中间的空格)这种格式。

基本命令行参考:

命令 用途
ls <路径> 列出指定目录<路径>下的文件和文件夹
cd <路径> 切换到指定目录<路径>
mkdir <文件夹> 在当前目录创建一个叫<文件夹>的文件夹
vim <文件> 使用Vim编辑文本文件<文件>(脚本之类的),如果<文件>不存在,就创建它。Vim是一款非常强大的命令行编辑器,学习见:Linux vi/vim | 菜鸟教程GitHub - wsdjeg/Learn-Vim_zh_cn
rzsz <文件> 少量小文件传输和下载
tar 打包压缩与解压,可以用来打包或解压多个文件
cp 复制
mv 移动
rm 删除

上表只是告诉了你一个目录,具体各个命令如何使用你可以根据上述表来搜索学习。 在集群上为了提交作业,还需要知道bsubbjobs等集群使用的lsf作业系统命令。这部分需要仔细阅读:https://doc.nju.edu.cn/books/efe93/page/4f4ad

尽管有SFTP软件可以免去大量Linux命令文件操作,但是还是建议稍微了解一些Linux的基础命令。

五、一个提交作业的演示

基本的脚本提交

以提交一个DMI_pbc.mix的mumax计算脚本为例: ssh登入后,在登录节点上输入:

ls

查看当前目录(登录节点的用户主目录)有些什么。

mkdir mumax_20221014
cd mumax_20221014

第一行:创建一个mumax_20221014的文件夹(make directory)管理这一次的计算任务

第二行:切换进刚刚创建的那个目录(change directory)

rz

唤起传输界面:

选择要上传的mumax计算脚本DMI_pbc.mix文件。

vim job.lsf

创建一个job.lsf的作业提交脚本,并且参照https://doc.nju.edu.cn/books/efe93/page/mumax 的示例写入:

#BSUB -q 723090ib
#BSUB -gpu num=1

mx3in=DMI_pbc.mix

module load cuda/11.2.0
/fs00/software/mumax/3.10-cuda11.0/mumax3 $mx3in

第1行:作业参数,指定使用的计算队列

第2行:作业参数,指定使用的GPU数目

第4行:mx3in变量设定为DMI_pbc.mix,当然你可以不叫这个变量名

第6行:载入cuda-11.2.0的依赖(见:https://doc.nju.edu.cn/books/efe93/page/nvidia

第7行:使用mumax3软件输入mx3in变量的值所表示的计算脚本

当然,如果上述流程实在用不习惯,也可以:

  1. 直接从图形界面登入,用文本编辑器修改

  1. 使用SFTP方案直接在本地修改,然后上传回去

无论是如何上传脚本,从Windows上传回集群最好用dos2unix命令来转换换行符,或者干脆在Windows下通过编辑器如VS Code自己的换行符切换来处理这个问题。

  1. 使用scc.nju.edu.cn的在线文件浏览器简单编辑文本

作业提交脚本本质上其实是shell脚本,因此Shell 教程 | 菜鸟教程也通用。

bsub < job.lsf

job.lsf通过bsub命令按照作业提交脚本的设定提交至计算队列。提交完成后会显示:

[hfd_jitz@login1 mumax_test_2]$ bsub < mumax_job.lsf 
Job <40999791> is submitted to queue <723090ib>.

查看作业情况

bjobs

可以查看你当前在跑的任务情况:

[hfd_jitz@login1 mumax_test_2]$ bjobs
JOBID    USER        STAT  QUEUE       JOB_NAME   SUBMIT_TIME  EXEC_HOST
40999791 hfd_jitz    RUN   723090ib    *x3 $mx3in Oct 14 22:08 6*m002

任务ID:40999791

计算队列:723090ib

CPU核数:6(单GPU分配的默认值)

主机:m002

特别地,本例子是一个GPU任务,因此还可以这样查看GPU任务的运行情况:

ssh m002

登入到计算节点(注意看@前后的“host”已经从login1变为m002):

[hfd_jitz@login1 mumax_test_2]$ ssh m002
Last login: Fri Oct 14 11:37:26 2022 from m002
[hfd_jitz@m002 ~]$ 

在计算节点执行

nvidia-smi

可以查看GPU上的资源使用情况,对应的GPU编号即是你在使用的部分。

top

可以查看当前计算节点的任务。

此外,还有一个可视化查看的方法:https://mon.nju.edu.cn

进入grafana,在General/NVIDIA DCGM Exporter中,instance为m002:9400(也就是刚才那个m002)的GPU情况如下:

可以看出,上述任务15分钟不到就跑完了。

如果需要从计算节点m002返回到登录节点login1,则输入

exit

如果要下载文件,通过sz <文件路径>命令可以下载单个文件;或者通过Xftp传输管理;或者先通过图形界面(xfwd)/网页端文件浏览器进行一些简单的数据结果查看,再把数据弄回来。

此外,亦可通过HPC账号集成的云盘来实现文件同步:集成云盘,其用法与Box云盘基本一致。

新存储迁移指南

背景

新存储

迁移建议

迁移方式

手工迁移

  1. /fsa用户在/fsa/home/<username>/下创建一个空文件@done-fsb,有这个空文件的目录会被自动迁移工具忽略
  2. 自己通过rsync等工具将文件(注意.开头的隐藏文件和目录)自行迁移至/fsb,迁移完成后在QQ群中通知我变更HOME到/fsb下
  3. 请ssh x013节点进行迁移,该节点有IB迁移速度更快

自动迁移

删除数据

费用

路径变更

使用手册

使用前请仔细阅读本手册

使用手册

远程登录

登录方式

远程控制-登录方式

参考上述远程控制-登录方式链接内容,并合并覆盖以下内容:

账号密码

  1. 账号:集群用户名
  2. 密码:集群密码

Web

  1. Web支持图形界面xfwd、命令行界面ssh,文件传输sftp

SSH

  1. Username: 输入集群用户名/10.1.0.101/self(如用户名是yaoge,则输入yaoge/10.1.0.101/self)

SFTP

  1. Username: 输入集群用户名/10.1.0.101/self(如用户名是yaoge,则输入yaoge/10.1.0.101/self)

注意事项

  1. 登录后用 passwd 命令更改密码,密码至少8个字符,包含小写字母、大写字母、数字和特殊字符中至少三种,不能是常见密码
  2. 必须通过作业调度系统进行计算,不得在登录节点或计算节点直接运行计算程序,否则会被杀掉进程

VPN

南京大学 VPN

  1. 使用南京大学统一身份认证账号、密码登录南京大学VPN
  2. 南京大学VPN使用方法参考信息化建设管理服务中心网站

eScience中心 VPN

  1. 官网(中文) 官网(English)下载安装对应的 VPN 客户端
  2. 服务器:cm.yaoge123.cn
  3. 端口:4433
  4. 用户名、密码:超算的用户名密码,注意密码不含动态口令
  5. 登录后仅能通过此VPN访问eScience中心的服务

数据传输

  1. SFTP:使用SFTP客户端浏览并传输文件,适合大文件和整个目录的上下传。
  2. ZMODEM:在登录节点上可用rz上传文件、sz下载文件,适合单个小文件的上下传。
  3. 云盘:通过云盘自动同步、传输和备份文件。
  4. 数据拷贝:直接使用移动硬盘拷贝大量数据文件。

数据拷贝

为方便大数据传输,中心提供数据拷贝服务,用户需提供大容量移动存储设备,文件系统格式为 ext4/XFS/exFAT ,并告知需要拷贝数据的目录(绝对路径),保证剩余空间足够。

使用手册

集成云盘

独立账号

高性能计算集群用户可以使用集群账号直接登录云盘,用户名为集群账号@hpc.nju.edu.cn,密码即集群账号密码;如集群账号为yaoge,用户名填写yaoge@hpc.nju.edu.cn。首次使用需要登录网页端激活账号,但集群账号不能使用云盘的上下传外链功能。

云盘上的集群账号与南京大学统一身份认证账号相互独立,如集群账号yaoge@hpc.nju.edu.cn和南京大学统一身份认证账号0102003是两个完全独立的账号,需要分别激活才能使用。

文件同步

通过云盘的多平台多终端同步功能,可将集群中的目录和本地计算机的目录同步,对本地目录的操作几乎立刻反应在集群的目录中,不再需要通过 SFTP 上下传文件。

客户端

登录节点已安装云盘同步客户端和挂载盘客户端

除官方客户端外,也支持rclone便捷操作。

挂载盘命令行客户端

  1. 获取Token(<username>替换为集群账号,<password>替换为密码)

    curl -d 'username=<username>@hpc.nju.edu.cn' -d 'password=<password>' https://box.nju.edu.cn/api2/auth-token/
    
  2. 创建配置文件~/seadrive.conf<username>替换为集群账号,<token>替换为上一步的返回值

    [account]
    server = https://box.nju.edu.cn
    username = <username>@hpc.nju.edu.cn
    token = <token>
    is_pro = true
    [general]
    client_name = hpc-login
    [cache]
    size_limit = 10GB
    clean_cache_interval = 10
    
  3. 启动挂载盘,命令在前台运行,新开一个窗口进行其它操作

    seadrive -c ~/seadrive.conf -f -d ~/.seadrive/data -l ~/.seadrive/data/logs/seadrive.log ~/SeaDrive
    
  4. 如果报错 Transport endpoint is not connected ,执行:fusermount -u ~/SeaDrive

  5. ~/SeaDrive 目录就是云盘挂载在本地的目录,可以直接读写访问

同步命令行客户端

  1. 创建客户端本地数据目录(目录名可更改)
    mkdir ~/Seafile
    
  2. 初始化客户端并指定本地数据目录(上一步创建的目录)
    seaf-cli init -d ~/Seafile
    
  3. 启动客户端
    seaf-cli start
    
  4. 列出云盘资料库ID(<username>替换为集群账号)
    seaf-cli list-remote -s https://box.nju.edu.cn -u <username>@hpc.nju.edu.cn
    
  5. 将本地目录与云盘资料库同步(<library-id>替换为上一步列出的某个资料库ID,<folder>替换为本地目录)
    seaf-cli sync -s https://box.nju.edu.cn -u <username>@hpc.nju.edu.cn -l <library-id> -d <folder>
    
    将云盘资料库下载到本地目录
    seaf-cli download -s https://box.nju.edu.cn -u <username>@hpc.nju.edu.cn -l <library-id> -d <folder>
    
  6. 查看当前同步状态
    seaf-cli status
    
  7. 解除本地目录同步
    seaf-cli desync -d <folder>
    
  8. 停止客户端
    seaf-cli stop
    

使用 rclone 进行云端文件操作

rclone 是一个强大的云存储管理工具,云盘也在其支持的存储类型内。使用rclone可以更加符合命令行用户使用习惯地去存取云盘文件。

  1. (登录后第一次需要)启用rclone工具
    module load rclone
    
  2. (仅需设置一次)初次使用rclone需要进行设置。在~/.config/rclone/目录下创建一名为rclone.conf的文件,内容(<username>替换为集群账号)如下:
    ;不一定必须叫 hpc_box,你可以任意设置这个标签,但是后文必须相应地使用该标签
    [hpc_box]
    type = seafile
    url = https://box.nju.edu.cn
    user = <username>@hpc.nju.edu.cn
    ;如果开启了两步认证,下条设置为true
    2fa = false
    
  3. (仅需设置一次)设置密码。<password>替换为密码:
    rclone config update hpc_box pass <password>
    
  4. 设置完毕后,之后按照下方使用即可。列出云端目录:
    rclone lsd hpc_box:
    
  5. 创建云端资料库(<library>替换为资料库名):
    rclone mkdir hpc_box:<library> --seafile-create-library
    #例如, rclone mkdir hpc_box:test --seafile-create-library 将在云盘创建一个名为`test`的资料库。
    
  6. 向云端上传文件。<destination_path>替换为需要上传的本地路径,<source_path>替换为云端路径:
    rclone copy <destination_path> hpc_box:<source_path>
    
    #例如,假设本地当前目录下有个 myfile.txt 文件:
    #rclone copy myfile.txt hpc_box:test 将把本地当前目录的 myfile.txt 文件上传至云端的 test 资料库下。
    #再例如,假设本地当前目录下有个 myfolder 文件夹,里面有很多文件:
    #rclone copy myfoler hpc_box:test 将把本地当前目录的 myfolder 文件夹内的所有文件夹和文件(不包括 myfolder 自身)上传至云端的 test 资料库下。
    
  7. 从云端下载文件:
    rclone copy hpc_box:<source_path> <destination_path>
    
    #例如,假设云端资料库`test`下有个 myfile.txt 文件:
    #rclone copy hpc_box:test/myfile.txt . 将把云端资料库`test`下的 myfile.txt 下载至本地当前目录。
    #例如,假设云端资料库`test`下有个 myfolder 文件夹,里面有很多文件:
    #rclone copy hpc_box:test/myfolder . 将把云端资料库`test`下的 myfolder 文件夹内的所有文件夹和文件(不包括 myfolder 自身)下载至本地当前目录。
    
  8. 在传输过程中,如果加上-P会显示进度条,强烈建议添加;如果上传或下载过程中,文件较多,建议再加上--no-traverse避免列出文件导致传输时间过长:
    rclone copy hpc_box:<source_path> <destination_path> -P --no-traverse
    
    #例如,假设云端资料库`test`下有个 myfile.txt 文件:
    #rclone copy hpc_box:test/myfolder . -P --no-traverse 将把云端资料库`test`下的 myfolder 文件夹内的所有文件夹和文件(不包括 myfolder 自身)下载至本地当前目录,且显示进度条,不列出所有文件。
    
  9. 更多rclone的用法见rclone - commands;若有加密资料库等其他云盘需求,或查看rclone对云盘的支持功能,请参考rclone - seafilerclone - storage systems
使用手册

环境变量

集群使用Environment Modules以模块的形式对环境变量进行管理。在高性能计算集群系统中,安装有多种软件及其不同版本,它们需要设置不同的环境变量,Environment Module可以将这些环境变量做成模块文件(modulefile)。模块可以被加载(load)、卸载(unload)、切换(switch)等,这些操作会改变相应的环境变量设置,让用户方便的在不同环境之间切换。相比将环境变量设置写入/etc/profile、~/.bashrc或~/.bash_profile,Environment Module操作只影响当前用户的当前登录环境;相比直接source文件,Environment Module的操作可以撤销(卸载)。普通用户还可以自己编写module,具有很好的定制性。用户不仅可以在命令行中Environment Modules,也能在作业提交脚本中使用,对编译和计算环境都能够很好的控制。

常用命令

非 Bash

使用非 Bash 作为 Login Shell 的用户,请在作业提交脚本的首行指明 Shell 或使用 bsub 选项 -L 指定作业运行时 Login Shell 为 Bash

如 Login Shell 为 tcsh,使用下面两种方法中的一种

#!/bin/tcsh #首行指明Shell
#BSUB ...
...
...
#BSUB -L /bin/bash #指定运行时Login Shell为Bash
...

加载模块示例

$ module avail #查看所有可用模块

------------------------------ /fs00/software/modulefiles ------------------------------
gcc/5.2.0                          impi/5.0.3.048
iccifort/15.0.3                   ips/2011sp1u3
ics/2013                           ips/2015u3
ics/2013sp1u1                  openmpi/1.10.0-gcc-5.2.0
imkl/11.2.3                      openmpi/1.10.0-iccifort-15.0.3

$ module list #显示已加载模块
No Modulefiles Currently Loaded. #没有模块被加载

$ icc --version #故icc找不到
-bash: icc: command not found

$ module whatis ips/2015u3 #查看模块说明
ips/2015u3           : Intel Parallel Studio XE 2015 Update 3 Cluster Edition

$ module load ips/2015u3 #加载模块
$ icc --version
icc (ICC) 15.0.3 20150407
Copyright (C) 1985-2015 Intel Corporation.  All rights reserved.

$ module list #显示已加载模块
Currently Loaded Modulefiles:
  1) ips/2015u3

$ module unload ips/2015u3 #卸载模块

搜索路径示例

$ module use
Search path for module files (in search order):
  /fs00/software/modulefiles

$ module avail 
--- /fs00/software/modulefiles ---
gcc/12.1.0
……                                


$ module use /fs00/software/modulefiles/oneapi/2024.0 #添加MODULEPATH搜索目录

$ module use
Search path for module files (in search order):
  /fs00/software/modulefiles/oneapi/2024.0
  /fs00/software/modulefiles

$ module avail 
--- /fs00/software/modulefiles/oneapi/2024.0 ---
mkl32/2024.0
compiler/2024.0.2
mkl/2024.0
……

--- /fs00/software/modulefiles ---
gcc/12.1.0
……
使用手册

提交作业

集群使用作业调度系统管理所有计算作业,该系统接受用户的作业请求,并将作业合理的分配到合适的节点上运行,因此所有用户均应通过作业调度系统提交计算作业,不可直接在任何节点上直接运行。用户使用bsub命令向作业调度系统提交作业,bsub选项非常繁多,可对作业进行非常细致的控制,这里简要介绍常用选项和方法。

bsub 使用方式

命令行方式

bsub [options] command [arguments]

例:提交一个作业到 e5v3ib 队列,需要24核的 MPI 并行程序

$ bsub -q e5v3ib -n 24 "module load oneapi/2024.0/mpi && mpirun ./app"
Job <3206000> is submitted to queue <e5v3ib>

脚本方式

bsub < jobfile

jobfile 为作业的 shell 脚本文件,文件名任意且不需要运行权限,脚本内容如下:

#BSUB [options]
command [arguments]

脚本中以#BSUB开头的行后跟bsub的选项,其它行为作业运行脚本

例:提交一个作业到 e5v3ib 队列,需要48核,需要大内存节点,作业名为 MgSiO3,标准输出文件为out,标准错误输出文件为err,Intel MPI 的并行作业0

$ cat job.lsf 
#BSUB -q e5v3ib
#BSUB -n 48
#BSUB -J MgSiO3
#BSUB -o out
#BSUB -e err
module load ips/2018u4
mpirun ./app

$ bsub < job.lsf 
Job <3207099> is submitted to queue <e5v3ib>.

等价如下命令行方式

$ bsub -q e5v3ib -n 48 -J MgSiO3 -o out -e err "module load ips/2018u4;mpirun ./app"
Job <3207099> is submitted to queue <e5v3ib>.

bsub 常用选项

资源请求
CPU绑定
自动重运行
输入输出

更多选项见官方文档

GPU 作业

提交作业时使用 -gpu 选项申请所需的 GPU 资源,计算进程只可见作业调度系统分配的 GPU。CPU 核自动按照申请节点 GPU 的比例分配,如一节点8个 GPU 和40个 CPU 核,申请2个 GPU 则分配10个 CPU 核。

-gpu 的各个选项用:分隔,默认值为num=1:mode=shared:mps=no:j_exclusive=yes,常用选项如下

作业依赖

一个计算任务可能分成几步,而每一步对资源的需求不同,因此需要分开提交,但这些作业之间又具有依赖关系,bsub 可使用选项 -w 'dependency_expression'指定依赖关系。如果计算任务分成几步,但是每步对资源需求一样,那么请写在一个作业任务中依次执行。

更多详细信息见官方文档

MPI/OpenMP 混合作业

OpenMP (Open Multi-Processing) 是一种共享内存方式的单进程多线程并行编程技术;MPI (Message Passing Interface) 是一种多进程基于信息传递的并行编程技术。OpenMP 的特点是单节点、进程内、多线程、基于共享内存的并行运算;MPI 的特点是单或多节点、进程间、非共享内存、基于消息传递的并行运算。

混合并行编程模型构建的应用程序可以同时使用 OpenMP 和 MPI ,节点内NUMA内进程内使用 OpenMP 共享内存并行可降低内存需求,跨节点跨NUMA跨进程使用 MPI 消息传递可大规模并行。需要注意的是,并不是一个节点一个MPI进程是最优的,这往往会导致跨NUMA的内存访问,因此需要通过测试确定最佳配比。

mpirun一般会根据环境变量LSB_MCPU_HOSTS启动相应的MPI进程,因此可以通过下列方法改变此环境变量中每个节点的CPU核数,以匹配MPI/OpenMP混合作业的MPI进程分布:

  1. #BSUB -n 指定的仍然是总CPU核数
  2. 提交作业脚本中需要在计算命令前首先运行
    source /fs00/software/lsf/misc/ompthreads.sh [N]
    
  3. 每个 MPI 进程的 OpenMP 线程数量可以用环境变量OMP_NUM_THREADS指定或上述命令行参数指定,同时指定时命令行参数优先,需要保证每个节点的 CPU核数可以被线程数整除!

常用环境变量

作业运行时

LSB_DJOB_NUMPROC=6
LSB_HOSTS="node1 node1 node1 node2 node2 node2"
LSB_MCPU_HOSTS="node1 3 node2 3"
$ cat $LSB_DJOB_HOSTFILE
node1
node1
node1
node2
node2
node2

LSB_HOSTS 和 LSB_MCPU_HOSTS 以不同的格式包含相同的信息,LSB_MCPU_HOSTS 比 LSB_HOSTS 更短更精简,如果 LSB_HOSTS 超过 4096 字节,则仅有 LSB_MCPU_HOSTS。

作业脚本示例

串行作业

  提交一个串行作业到 e52660 队列,命令行方式和脚本方式分别为:

$ bsub -q e52660 ./app
Job <3279929> is submitted to queue <e52660>.
$ cat job.lsf 
#BSUB -q e52660
./app
$ bsub < job.lsf 
Job <3279930> is submitted to queue <e52660>.

MPI 并行作业

  MPI程序需要使用mpirun启动

  提交一个需要48核的 Intel MPI 并行作业到 e5v3ib,命令行方式为:

$ bsub -q e5v3ib -n 48 "module load ips/2018u4;mpirun ./app"
Job <3280120> is submitted to queue <e5v3ib>.

  提交一个需要48核的 Open MPI 并行作业到 e5v3ib,脚本方式为:

$ cat job.lsf 
#BSUB -q e5v3ib
#BSUB -n 48
module load iccifort/15.0.3 imkl/11.2.3 openmpi/1.10.0-iccifort-15.0.3
mpirun ./app

$ bsub < job.lsf 
Job <3280122> is submitted to queue <e5v3ib>.

OpenMP 并行作业

  OpenMP 不能跨节点,因此-n不能指定超过一个节点的CPU核数

  提交一个需要64核的 OpenMP 并行作业到 e7v4ib,使用程序参数 -nt 指定线程数量,命令行方式为:

$ bsub -q e7v4ib -n 64 "./app-nt \$LSB_DJOB_NUMPROC"
Job <3348175> is submitted to queue <e7v4ib>.

  提交一个需要64核的 OpenMP 并行作业到 e7v4ib,使用环境变量OMP_NUM_THREADS指定线程数量,脚本方式为:

$ cat job.lsf 
#BSUB -q e7v4ib
#BSUB -n 64
OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
./app

$ bsub < job.lsf 
Job <3348182> is submitted to queue <e7v4ib>.

MPI/OpenMP 混合作业

每个MPI进程跑6个OpenMP线程

通过环境变量OMP_NUM_THREADS指定

#BSUB -q 6140ib
#BSUB -n 72
export OMP_NUM_THREADS=6
source /fs00/software/lsf/misc/ompthreads.sh
module load ips/2018u4
mpirun ./run

通过命令行参数指定(有些计算程序需要通过命令行参数指定线程数量)

#BSUB -q 6140ib
#BSUB -n 72
source /fs00/software/lsf/misc/ompthreads.sh 6
module load ips/2018u4
mpirun ./openmx -nt 6

GPU 作业

提交一个需要1个 GPU 的作业到 e5v4p100ib 队列

bsub -q e5v4p100ib -gpu num=1 ./gpu_app

提交一个需要4个 GPU 的作业到 62v100ib 队列,进行 GPU-CPU 绑定

bsub -q 62v100ib -gpu "num=4:aff=yes" ./gpu_app
使用手册

控制作业

常用控制命令

命令 功能
bjobs 查看自己未结束的作业
bjobs -l JOBID 查看某个未结束作业的详情
bhist 查看自己已结束的历史作业
bhist -l JOBID 查看某个已结束历史作业的详情
bpeek JOBID 查看正在运行某个作业的stdout/stderr
bkill JOBID 终止某个作业
btop JOBID 设置作业最先运行
bbot JOBID 设置作业最后运行

作业状态

bjobs命令的作业状态可能值包括:

状态 描述
PEND 作业正在等待中。也就是说,作业尚未开始。
PROV 作业已被派发到一个正在唤醒的节能状态主机。在作业可以发送到
sbatchd之前,它处于PROV状态。
PSUSP 作业在等待期间被挂起,可能是作业所有者或LSF管理员操作的。
RUN 作业当前正在运行。
USUSP 作业在运行期间被挂起,可能是作业所有者或LSF管理员操作的。
SSUSP 作业被LSF挂起。
DONE 作业以状态0终止。
EXIT 作业以非零状态终止。
UNKWN 一般是两种情况之一,如果作业状态长时间处于UNKWN状态,一般来
说就是计算节点坏了可以直接杀掉作业。①因为计算节点负载过高,未
能及时获取作业状态导致状态未知,这种情况一般只需要等待即可,待
负载下降获取状态后就正常了。②因为计算节点出现故障且长时间未恢
复,调度系统无法获取作业状态,此时如果登录不到相应的计算节点,
可以直接杀掉作业。
WAIT 对于提交到块作业队列的作业,块作业中的成员正在等待运行。
ZOMBI ①当sbatchd在执行主机上不可达时,非可重新运行的作业被bkill杀死,
并且作业显示为UNKWN。 ②运行可重新运行作业的主机不可用,并且LSF
已将作业重新排队,分配了新的作业ID,就像提交了新作业一样。 ③在执
行主机可用之后,LSF尝试杀死ZOMBI作业。ZOMBI作业成功终止后,作业
的状态将更改为EXIT。 使用MultiCluster时,当在远程执行群集上运行的作
业变为ZOMBI作业时,执行群集将像本地ZOMBI作业一样处理该作业。此外,
它还会通知提交群集作业处于ZOMBI状态,并且提交群集将重新排队作业。

作业等待

bwait -w "wait_condition" [-t timeout]

暂停并等待作业条件满足,不满足一直暂停等待,满足则执行完毕返回。

典型用法:在脚本中不要循环使用bjobs判断作业状态,而用bwait等待作业运行完成,这样更优雅且能显著降低对集群的压力。

使用手册

海量作业

作业组

为了便于管理海量的作业,可以对作业定义作业组。

作业组的名字是类似于Linux的路径名的树状结构,如作业组 /test ,而 /test/1 和 /test/2 都属于 /test

需要注意的是作业组是全局的,创建者是这个作业组的拥有者,作业组拥有者可以对这个作业组及其子组内的所有作业进行控制(哪怕这个作业是其他人提交的,拥有者也能进行控制)。如果您不想作业被别人控制,请确保提交到的作业组从/开始拥有者都是自己。

创建作业组

bgadd /test		#显式创建作业组
bsub -g /test	#使用bsub提交作业时指定一个不存在的作业组,则作业组会被隐式创建

查看作业组

bjgroup /test	#最后一列就是作业组的拥有者,请注意拥有者也是层次继承的

删除作业组

bgdel /test		#集群已经配置自动清理空的隐式创建的作业组

有了作业组以后就可以对一组作业进行控制了

bjobs -g /test		#查看指定作业组的作业
bkill -g /test 0	#终止指定作业组的所有作业

作业序列

作业序列是一系列作业,这些作业执行相同的操作和资源要求,但是输入输出文件不同。这些作业共享同一个作业ID,并可以通过索引来区分每个子作业。

bsub 使用 -J "arrayName[indexList, ...]" 参数命名并创建一个作业序列,也可以理解为一个作业数组,中括号里面就是数组的下标,可以是一维数组也可以是多维数组。indexList = start[-end[:step]] 下标的起始、结束和步长均可指定。

作业调度系统提供了两个运行时变量 %I 和 %J,%I 为子作业的索引值,%J 为作业ID,一般用于输入输出文件名中;以及运行时环境变量 LSB_JOBINDEX

bsub -J "myArray[1-10]" myJob		#提交一个有10个子作业的作业
bsub -J "myArray[1-10]" -i "input.%I" -o "output.%I" myJob		#每个子作业定义不同的输入输出文件
bkill 123[1]	#杀掉 jobid 是123的第一个子作业
bkill 123		#杀掉 jobid 是123的整个作业

海量作业

提交大量的作业,将使得作业的管理将变得困难,虽然可以用上述作业组和作业序列进行批量管理,但是海量作业仍然对调度系统会造成很大的压力,特别是分钟级或秒级的短作业在调度时会浪费大量的时间,因此可以根据作业情况将多个作业合并为一个作业提交。对于不同的作业可以用两种方法来进行合并:

多作业串行执行

申请1个CPU核,顺序执行每个串行作业,前一个运行完成后再运行下一个,可以将非常多的串行作业合并成一个。对于每个串行作业运行时间都很短且运行时间不一定相同的适用这种方式提交。

4个串行作业串行执行合并为一个作业,提交到x5650队列,脚本方式为:

$ cat job.lsf
#BSUB -q x5650
./a.out >& 1.out
./a.out >& 2.out
./a.out >& 3.out
./a.out >& 4.out

$ bsub < job.lsf
Job <3366369> is submitted to queue <x5650>.

多作业并行执行

申请N个CPU核,同时执行N个串行作业,N不可大于单节点CPU核数,每个串行作业运行时间需要相同,最后需要 wait 命令等待所有作业运行完毕返回。对于每个串行作业运行时间较长且运行时间都完全相同的适用这种方式提交。

12个串行作业并行执行合并为一个作业,提交到x5650队列,脚本方式为:

$ cat job.lsf
#BSUB -q x5650
#BSUB -n 12
( ./a.out >& 1.out )&
( ./a.out >& 2.out )&
( ./a.out >& 3.out )&
( ./a.out >& 4.out )&
( ./a.out >& 5.out )&
( ./a.out >& 6.out )&
( ./a.out >& 7.out )&
( ./a.out >& 8.out )&
( ./a.out >& 9.out )&
( ./a.out >& 10.out )&
( ./a.out >& 11.out )&
( ./a.out >& 12.out )
wait

$ bsub < job.lsf
Job <3366370> is submitted to queue <x5650>.
使用手册

查看信息

查看队列

查看所有队列:bqueues

$ bqueues 
QUEUE_NAME      PRIO STATUS          MAX JL/U JL/P JL/H NJOBS  PEND   RUN  SUSP 
x7542!           50  Open:Active       -    -    -    -    24     0    24     0
e5645!           50  Open:Active       -    -    -    -     0     0     0     0
e52643tgb!       50  Open:Active       -    -    -    -     8     0     8     0
……
6226rib          30  Open:Active       -    -    -    -     0     0     0     0
5218             30  Open:Active       -    -    -    -     0     0     0     0
6230r            30  Open:Active       -    -    -    -    32     0    32     0

查看队列详细信息:bqueues -l

$ bqueues -l e5v3ib

QUEUE: e5v3ib
  -- CPU: 2*E5-2680v3, RAM: 256GB/128GB, NET: 56Gb FDR InfiniBand

……

SCHEDULING POLICIES:  FAIRSHARE  EXCLUSIVE
FAIRSHARE_QUEUES:  e5v3ib e5v3ib! e7v4ib x5650ib 6140ib 62v100ib 722080tiib 72rtxib 7702ib ……
DISPATCH_ORDER:  QUEUE
USER_SHARES:  [root=, 999999] ……

SHARE_INFO_FOR: e5v3ib/
 USER/GROUP   SHARES  PRIORITY  STARTED  RESERVED  CPU_TIME  RUN_TIME   ADJUST  GPU_RUN_TIME
root=       999999  202255.328      0        0      8456.5     1542       0.000             0
……

USERS: all ~test/ 
HOSTS:  f01+10 f02+10 f03+10 f04+10 f05s+10 f05l/ 
RES_REQ:  span[ptile=24]
Maximum slot reservation time: 43200 seconds

查看节点


lshosts			#查看节点配置和资源

lshosts -gpu	#查看节点GPU配置和拓扑结构

lsload			#查看节点当前负载信息

lsload -gpu		#查看节点GPU整体负载

lsload -gpuload	#查看节点每个GPU负载

bhosts			#查看所有节点状态

自动关机

集群会对动力环境进行监控,遇市电中断或温度过高,将会自动终止所有作业,按照安全顺序进行关机操作。

关机时会在 /fs00/reports/bjobs/ 目录下会自动保存一份作业列表备查。如文件 /fs00/reports/bjobs/bjobs.20130728070457 表明2013年07月28日07点04分57秒时刻所有作业的状态(bjobs -uall -w 的输出),同时也说明这个时间点开始自动关机。

如果温度未触及高点,但已明显增高,为了防止温度继续增高,集群会停止派发新作业,并且关闭空闲节点。

进程监督

用户只能登录到登录节点,且可从登录节点登录到有自己正在运行作业的计算节点。

所有节点的用户进程都会被检查,如果发现如下情况,将会杀掉该节点此用户所有进程,并记录在 /fs00/reports/process 中

使用手册

容器化

容器技术

容器技术能够对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而可以在不同环境(如开发、测试和生产等环境)之间轻松迁移应用,同时还可保留应用的全部功能。有了容器不再需要管理员为你安装任何东西。容器是一个独立的系统,你可以在里面做任何想做的事情。

Apptainer

2021年11月,Singularity 开源项目加入 Linux 基金会,并更名为 Apptainer。Apptainer 是一套类似于 Docker 的容器解决方案,是用于HPC容器系统。Apptainer 兼容 Singularity Image File (SIF)、Singularity 的环境变量、Singularity 的命令、自动迁移 Singularity 的用户配置。

镜像

一般保存为压缩只读Singularity Image File (SIF)格式的镜像文件。

公共镜像

/fs00/software/singularity-images/ 已存放了许多常用的SIF镜像文件,可直接使用。

导入镜像

以从 Docker Hub 等镜像仓库或镜像文件直接创建SIF镜像文件

制作镜像

  1. 创建沙盒目录:apptainer build --fix-perms --sandbox build docker://docker.nju.edu.cn/library/ubuntu
  2. 进入沙盒容器:apptainer shell build/
  3. 在容器中安装和编译软件:如apt make
  4. 退出容器:exit
  5. 将沙盒打包成SIF镜像文件:apptainer build abc.sif build

因登录节点无root权限,可能出现问题,因此建议在自己的系统上制作镜像。

CI创建镜像

git.nju.edu.cn 上的 CI/CD 自动调用 kaniko 构建 Docker 镜像,详见官方文档,然后再导入apptainer build ocr.sif docker://reg.nju.edu.cn/yaoge123/ocr

一个简单的示例见:CI/CD自动化构建Docker镜像

提交作业

提交容器作业的示例脚本

#BSUB -q 62v100ib
#BSUB -gpu num=4

apptainer exec --nv cuda.sif app

常用选项

相关网站

使用手册

常见问题

网络

登录节点进行网络接入认证

在登录节点登录校园网账号

集群中的登录节点进行网络接入认证(即登入南京大学校园网认证p.nju.edu.cn)后才可访问互联网,认证后登录节点所有用户均可访问互联网(相当于整个登录节点共享),请注意网络与账号隐私安全!

命令行登录和登出p.nju.edu.cn的方法有:

curl -X POST https://p.nju.edu.cn/api/portal/v1/login -H "Content-type: application/json" -d '{"username":"<username>","password":"<password>"}'
curl -X POST https://p.nju.edu.cn/api/portal/v1/logout -H "Content-type: application/json" -d '{}'
curl -s "http://p2.nju.edu.cn/portal_io/login?username=<username>&password=<password>"
curl -s http://p2.nju.edu.cn/portal_io/logout

**【强烈推荐】**如果有一些软件源需求,如condapip等包管理,或者需要外部代码库、容器,您可以通过中心提供的下列服务直接在集群上使用,无需登录校园网认证:

计算节点访问网络

所有计算节点均不能自由无限制的访问外网(含校园网和互联网),如需访问可以单独申请开放。当前已经放开的网络访问

SSH/SFTP登录时报 no matching host key type found

SSH/SFTP登录时报错no matching host key type found. Their offer: ssh-rsa,ssh-dss,命令行添加选项-o HostKeyAlgorithms=+ssh-rsa或在~/.ssh/config中增加HostKeyAlgorithms +ssh-rsa

安装

pip安装包到自己的目录下

Python的大多数包不需要root权限也能安装,只需在pip install后加-t指定安装目录即可,如:

cd scikit-opt-master
pip install -t $HOME .

这样就装到自己的家目录下。在~/.bashrc里或者作业脚本中加上环境变量

export PYTHONPATH=$HOME:$PYTHONPATH

作业

作业运行时实际占用CPU核数过多

  1. 在作业中限定使用的CPU核数与申请核数相同,否则超过申请核数使用资源的作业会被杀掉。

特别是Python,很多Python包会自动多核并行计算,需要使用环境变量(如 OMP_NUM_THREADSNUMEXPR_NUM_THREADSOPENBLAS_NUM_THREADSMKL_NUM_THREADS)等方式设定线程数,与进程数一起匹配申请的核数。

export OMP_NUM_THREADS=$LSB_DJOB_NUMPROC
export NUMEXPR_NUM_THREADS=$LSB_DJOB_NUMPROC
export OPENBLAS_NUM_THREADS=$LSB_DJOB_NUMPROC
export MKL_NUM_THREADS=$LSB_DJOB_NUMPROC
  1. 可以尝试在提交作业时添加如下参数,做CPU亲和绑定
#BSUB -R affinity[core:cpubind=core:membind=localprefer:distribute=pack]
  1. 如果实在不行可以 #BSUB -x 独占节点运行作业

排队作业数上限

动态限制用户排队作业数不能超过MAX(1000,MIN((30000-总作业数)/10,(20000-总排队作业数)/6))

即用户排队作业数,不超过三万减去总作业数的十分之一,也不超过二万减去总排队作业数的六分之一,但保底一千个。

作业状态UNKWN

一般是两种情况之一,如果作业状态长时间处于UNKWN状态,一般来说就是计算节点坏了可以直接杀掉作业。

  1. 因为计算节点负载过高,未能及时获取作业状态导致状态未知,这种情况一般只需要等待即可,待负载下降获取状态后就正常了。
  2. 因为计算节点出现故障且长时间未恢复,调度系统无法获取作业状态,此时如果登录不到相应的计算节点,可以直接杀掉作业。

路径

$HOME相对路径

让/bbfs相应目录保持在$HOME下的相对路径,这样可以轻松应对未来路径的变更

[yaoge123@login1 ~]$ ln -s /bbfs$HOME cache
[yaoge123@login1 ~]$ ln -s /bbfs/scratch/$USER scratch
[yaoge123@login1 ~]$ ls -l|grep bbfs
lrwxrwxrwx 1 yaoge123 yaoge 26 Mar 16 11:45 cache -> /bbfs/fsb/home/yaoge/yaoge123
lrwxrwxrwx 1 yaoge123 yaoge 20 Mar 16 11:45 scratch -> /bbfs/scratch/yaoge123

硬件资源

计算存储等所有硬件资源详情

硬件资源

服务节点

管理、监控、认证、调度和登录节点均为虚拟机,CPU/RAM/SSD根据需求分配

硬件资源

通讯网络

骨干以太网:2*100Gb

服务网络:100Mb/1Gb Ethernet

管理网络:1/10/25/40/100Gb Ethernet

高速网络:40/56/100/200Gb QDR/FDR/HDR InfiniBand, 100Gb Omni-Path Architecture

硬件资源

计算资源

命名规则和优先级

每组计算节点均对应两个队列;标准队列和优先队列

计算队列

合计

总览

表格

查看详细表格

SSD:

详情

e52643tgb

e52692v2ib

e52680v3ib

e5v3ib

e5v3k40ib

e52630v4

e52640v4

e52650v4

e52680v4ib

e52682v4opa

e74820v4

e7v4ib

e5v4p100ib

6140ib

6148v100ib

5218

5218q

7552v100

62v100ib

9242opa

7702ib

722080tiib

72rtxib

5220r

6226rib

6230r

5318h

6330ib

6338

7k83

83a100ib

813080

723080

723090ib

814080

734090d

944090d

734090ib

75434090ib

9654

9754

6458q

cpu1

硬件资源

存储资源

合计

总览

表格

查看表格

并行存储

高速全闪(Tier 0)

特点:热数据、高性能

/bbfs

采用全NVMe SSD构建的高性能Burst Buffer,具备极高的顺序和随机读写性能,无快照。

/bbfs/fs*/

所有文件系统(/fs*/)均在此目录中有映射,/bbfs/fs*/ 是 /fs*/ 的高速缓存,在 /bbfs/fs*/ 中重读和写入具有极高的性能,与直接在 /fs*/ 下相比有显著提升,保存在 /bbfs/fs*/ 下的文件会自动回写 /fs*/ 保存。

如:作业输入文件位于 /fsb/home/yaoge/yaoge/in,如果此输入文件近期会被读取多次(无论是单个作业还是多个作业),则应将输入文件路径指定为 /bbfs/fsb/home/yaoge/yaoge/in,那么从第二次开始均从高速SSD上读取,减少作业读取文件上花费的时间。

如:作业输出文件如较大,则应将数据文件路径指定为 /bbfs/fsb/home/yaoge/yaoge/out,那么将直接写入高速SSD中,然后系统会自动将文件回写到 /fsb/home/yaoge/yaoge/out 便于长期保存,减少作业写入文件上花费的时间。

/bbfs/scratch/

用于保存临时文件,超过30天没有访问(atime)的文件会被自动删除,适合于临时存储计算中间结果、checkpoint等无需长期保留的文件。文件名以 .tmp 和 .temp 结尾的文件保存为单副本(无数据保护)。

如:作业运行过程中保存的Check Point文件或多个作业之间通过临时文件传输数据,这些文件无需长期保存,则可以保存在/bbfs/scratch/yaoge目录下,读写均在高速SSD上。

家目录(Tier 1)

特点:温数据、中性能、快照

快照

快照是特定时间点数据的只读副本,用户可以从中恢复删除的文件或文件的过往版本。部分家目录文件系统有快照,可以在文件系统目录/.snapshot中查找。

如:/fsb的快照位于/fsb/.snapshots,/fsb/.snapshots/20220804-1800是2022年8月4日18时0分创建的快照,在这个目录下可以查阅快照创建时间点的所有文件。

/fsb

/fs04

/fs08

/fs09

/fs10

/fs12

/fs13

/fs14

支撑目录

/fs00

归档存储(Tier 2)

特点:冷数据、低性能、快照

/archive

快照

快照是特定时间点数据的只读副本,用户可以从中恢复删除的文件或文件的过往版本,可以在文件系统目录/.zfs/snapshot中查找。

如:/archive的快照位于/archive/.zfs/snapshot,/archive/.zfs/snapshot/20220904-0000是2022年9月4日0时0分创建的快照,在这个目录下可以查阅快照创建时间点的所有文件。

对象存储(Tier 2)

打破壁垒实现集群内外数据的统一访问。同一份数据,集群内外共同使用,访问方式相同,再无迁移数据的烦恼!

s3.nju.edu.cn

临时目录

/tmp/ /var/tmp/

节点本地根文件系统的临时文件目录

/dev/shm/

节点内存中的临时文件系统目录,容量为总内存的一半,重启不保留

/ssd/ /tmp/ssd

部分节点有额外的SSD用于临时存储,则挂载于此目录

软件资源

部分软件资源

软件资源

GNU

GNU Compiler Collection

Name Path Module
GNU Compiler Collection (GCC) 12.1.0 & GNU Binutils 2.38 /fs00/software/gcc/12.1.0 gcc/12.1.0
GNU Compiler Collection (GCC) 11.3.0 & GNU Binutils 2.36.1 /fs00/software/gcc/11.3.0 gcc/11.3.0
GNU Compiler Collection (GCC) 10.5.0 & GNU Binutils 2.34 /fs00/software/gcc/10.5.0 gcc/10.5.0
GNU Compiler Collection (GCC) 9.5.0 & GNU Binutils 2.32 /fs00/software/gcc/9.5.0 gcc/9.5.0
GNU Compiler Collection (GCC) 8.5.0 & GNU Binutils 2.30 /fs00/software/gcc/8.5.0 gcc/8.5.0
GNU Compiler Collection (GCC) 7.5.0 & GNU Binutils 2.28.1 /fs00/software/gcc/7.5.0 gcc/7.5.0
GNU Compiler Collection (GCC) 6.5.0 & GNU Binutils 2.26.1 /fs00/software/gcc/6.5.0 gcc/6.5.0
GNU Compiler Collection (GCC) 5.4.0 /fs00/software/gcc/5.4.0 gcc/5.4.0

GNU Make

Name Path Module
GNU Make 4.3 /fs00/software/make/4.3 make/4.3
GNU Make 4.2.1 /fs00/software/make/4.2.1 make/4.2.1
GNU Make 4.2 /fs00/software/make/4.2 make/4.2

GNU Scientific Library

Name Compiler Path Module
GNU Scientific Library (GSL) 2.7.1 GCC 12.1.0 /fs00/software/gsl/2.7.1-gcc12.1.0 gsl/2.7.1-gcc12.1.0
GNU Scientific Library (GSL) 2.5 GCC 8.3.0 /fs00/software/gsl/2.5-gcc8.3 gsl/2.5-gcc8.3

GNU C Library

Name Compiler Path Module
GNU C Library (glibc) 2.36 GCC 12.1.0 /fs00/software/glibc/2.36-gcc12.1.0 glibc/2.36-gcc12.1.0
GNU C Library (glibc) 2.30 GCC 9.2.0 /fs00/software/glibc/2.30-gcc9.2.0 glibc/2.30-gcc9.2.0

GNU Binutils

Name Compiler Path Module
GNU Binutils 2.38 GCC 12.1.0 /fs00/software/binutils/2.38-gcc12.1.0 binutils/2.38-gcc12.1.0
GNU Binutils 2.27 GCC 5.4.0 /fs00/software/binutils/2.27-gcc5.4.0 binutils/2.27-gcc5.4.0
软件资源

Intel

Intel oneAPI

Name Path MODULEPATH
Intel oneAPI Base Toolkit 2024.0.1
Intel HPC Toolkit 2024.0.1
/fs00/software/intel/oneapi2024.0 /fs00/software/modulefiles/oneapi/2024.0

Intel Parallel Studio

Name Path Module
Intel Parallel Studio XE 2020 Update 2 Cluster Edition /fs00/software/intel/ps2020u2 ips/2020u2
Intel Parallel Studio XE 2019 Update 5 Cluster Edition /fs00/software/intel/ps2019u5 ips/2019u5
Intel Parallel Studio XE 2018 Update 4 Cluster Edition /fs00/software/intel/ps2018u4 ips/2018u4
Intel Parallel Studio XE 2017 Update 6 Cluster Edition /fs00/software/intel/ps2017u6 ips/2017u6
Intel Parallel Studio XE 2017 Update 2 Cluster Edition /fs00/software/intel/ps2017u2 ips/2017u2
Intel Parallel Studio XE 2016 Update 4 Cluster Edition /fs00/software/intel/ps2016u4 ips/2016u4
Intel Parallel Studio XE 2015 Update 6 Cluster Edition /fs00/software/intel/ps2015u6 ips/2015u6
Intel Cluster Studio XE 2013 Service Pack 1 (SP1) Update 1 /fs00/software/intel/cs2013sp1u1 ics/2013sp1u1
Intel Cluster Studio XE 2013 /fs00/software/intel/cs2013 ics/2013
Intel Parallel Studio XE 2011 SP1 Update 3 /fs00/software/intel/ps2011sp1u3 ips/2011sp1u3

Intel Distribution for Python

Name Path
Intel Distribution for Python 2.7 2019 Update 5 /fs00/software/intel/ps2019u5/intelpython2
Intel Distribution for Python 3.6 2019 Update 5 /fs00/software/intel/ps2019u5/intelpython3
Intel Distribution for Python 2.7 2018 Update 3 /fs00/software/intel/python2018u3/intelpython2
Intel Distribution for Python 3.6 2018 Update 3 /fs00/software/intel/python2018u3/intelpython3
Intel Distribution for Python 2.7 2017 Update 3 /fs00/software/intel/python2017u3/intelpython2
Intel Distribution for Python 3.5 2017 Update 3 /fs00/software/intel/python2017u3/intelpython3
软件资源

NVIDIA

CUDA Toolkit

Name Path Module
CUDA Toolkit 12.3.1 /fs00/software/cuda/12.3.1 cuda/12.3.1
CUDA Toolkit 12.0.0 /fs00/software/cuda/12.0.0 cuda/12.0.0
CUDA Toolkit 11.8.0 /fs00/software/cuda/11.8.0 cuda/11.8.0
CUDA Toolkit 11.2.0 /fs00/software/cuda/11.2.0 cuda/11.2.0
CUDA Toolkit 10.2.89 /fs00/software/cuda/10.2.89 cuda/10.2.89
CUDA Toolkit 10.1.243 /fs00/software/cuda/10.1.243 cuda/10.1.243
CUDA Toolkit 10.0.130 /fs00/software/cuda/10.0.130 cuda/10.0.130
CUDA Toolkit 9.2.148 /fs00/software/cuda/9.2.148 cuda/9.2.148
CUDA Toolkit 9.0.176 with Patch 3 /fs00/software/cuda/9.0.176 cuda/9.0.176
CUDA Toolkit 8.0 GA2 8.0.61 with Patch 2 /fs00/software/cuda/8.0.61 cuda/8.0.61

cuDNN

Name CUDA Path Module
cuDNN v8.9.7.29 12.x /fs00/software/cudnn/8.9.7.29-cuda12 cudnn/8.9.7.29-cuda12
cuDNN v8.9.7.29 11.x /fs00/software/cudnn/8.9.7.29-cuda11 cudnn/8.9.7.29-cuda11
cuDNN v8.7.0.84 11.x /fs00/software/cudnn/8.7.0.84-cuda11 cudnn/8.7.0.84-cuda11
cuDNN v8.7.0.84 10.2 /fs00/software/cudnn/8.7.0.84-cuda10 cudnn/8.7.0.84-cuda10
cuDNN v8.1.1.33 11.2 /fs00/software/cudnn/11.2-v8.1.1.33 cudnn/11.2-v8.1.1.33
cuDNN v8.2.2.26 10.2 /fs00/software/cudnn/10.2-v8.2.2.26 cudnn/10.2-v8.2.2.26
cuDNN v7.6.5.32 10.2 /fs00/software/cudnn/10.2-v7.6.5.32 cudnn/10.2-v7.6.5.32
cuDNN v7.6.4.38 10.1 /fs00/software/cudnn/10.1-v7.6.4.38 cudnn/10.1-v7.6.4.38
cuDNN v7.6.5.32 10.0 /fs00/software/cudnn/10.0-v7.6.5.32 cudnn/10.0-v7.6.5.32
cuDNN v7.1.4 9.2 /fs00/software/cudnn/9.2-v7.1.4 cudnn/9.2-v7.1.4
cuDNN v7.1.4 9.0 /fs00/software/cudnn/9.0-v7.1.4 cudnn/9.0-v7.1.4
cuDNN v7.0.5 8.0 /fs00/software/cudnn/8.0-v7.0.5 cudnn/8.0-v7.0.5
cuDNN v6.0 8.0 /fs00/software/cudnn/8.0-v6.0 cudnn/8.0-v6.0
cuDNN v5.1 8.0 /fs00/software/cudnn/8.0-v5.1 cudnn/8.0-v5.1

HPC SDK

Name Path MODULEPATH
HPC SDK 23.11 /fs00/software/nvhpc/23.11 /fs00/software/nvhpc/23.11/modulefiles
HPC SDK 22.11 /fs00/software/nvhpc/22.11 /fs00/software/nvhpc/22.11/modulefiles
HPC SDK 21.3 /fs00/software/nvhpc/21.3 /fs00/software/nvhpc/21.3/modulefiles
HPC SDK 20.9 /fs00/software/nvhpc/20.9 /fs00/software/nvhpc/20.9/modulefiles

HPC-X

Name CUDA Path MODULEPATH
HPC-X 2.17.1 12.x /fs00/software/hpcx/2.17.1-cuda12 /fs00/software/hpcx/2.17.1-cuda12/modulefiles

NCCL

Name CUDA Path Module
NCCL 2.19.3 12.3 /fs00/software/nccl/2.19.3-cuda12.3 nccl/2.19.3-cuda12.3
NCCL 2.16.2 12.0 /fs00/software/nccl/2.16.2-cuda12.0 nccl/2.16.2-cuda12.0
NCCL 2.16.2 11.8 /fs00/software/nccl/2.16.2-cuda11.8 nccl/2.16.2-cuda11.8
NCCL 2.16.2 11.0 /fs00/software/nccl/2.16.2-cuda11.0 nccl/2.16.2-cuda11.0
NCCL v2.5.6 10.2 /fs00/software/nccl/10.2-v2.5.6 nccl/10.2-v2.5.6
NCCL v2.4.8 10.1 /fs00/software/nccl/10.1-v2.4.8 nccl/10.1-v2.4.8

TensorRT

Name CUDA cuDNN Path Module
TensorRT 8.6.1.6 12.0 /fs00/software/tensorrt/8.6.1.6-cuda12.0 tensorrt/8.6.1.6-cuda12.0
TensorRT 8.6.1.6 11.8 /fs00/software/tensorrt/8.6.1.6-cuda11.8 tensorrt/8.6.1.6-cuda11.8
TensorRT 8.5.2.2 11.8 8.6 /fs00/software/tensorrt/8.5.2.2-cuda11.8-cudnn8.6 tensorrt/8.5.2.2-cuda11.8-cudnn8.6
TensorRT 8.5.2.2 10.2 8.6 /fs00/software/tensorrt/8.5.2.2-cuda10.2-cudnn8.6 tensorrt/8.5.2.2-cuda10.2-cudnn8.6
TensorRT 8.2.0.6 11.4 8.2 /fs00/software/tensorrt/8.2.0.6-cuda11.4-cudnn8.2 tensorrt/8.2.0.6-cuda11.4-cudnn8.2
TensorRT 8.2.0.6 10.2 8.2 /fs00/software/tensorrt/8.2.0.6-cuda11.4-cudnn8.2 tensorrt/8.2.0.6-cuda10.2-cudnn8.2
软件资源

AMD

AMD Optimizing C/C++ Compiler

Name Path Module
AMD Optimizing C/C++ Compiler 2.3.0 (AOCC) /fs00/software/aocc/2.3.0 aocc/2.3.0
AMD Optimizing C/C++ Compiler 2.1.0 (AOCC) /fs00/software/aocc/2.1.0 aocc/2.1.0
AMD Optimizing C/C++ Compiler 2.0.0 (AOCC) /fs00/software/aocc/2.0.0 aocc/2.0.0

AMD Optimizing CPU Libraries

Name Path Module
AMD Optimizing CPU Libraries 2.2 (AOCL) /fs00/software/aocl/2.2 aocl/2.2
AMD Optimizing CPU Libraries 2.0 (AOCL) /fs00/software/aocl/2.0 aocl/2.0
软件资源

Python

请使用者自行解决License问题,本中心概不负责!

Anaconda

Name Path Module
Anaconda 3 (Python3) Latest /fs00/software/anaconda/3 anaconda/3
Anaconda 2 (Python2) Latest /fs00/software/anaconda/2 anaconda/2
Anaconda 5.0.1 (Python 3.6) /fs00/software/anaconda/3-5.0.1 anaconda/3-5.0.1
Anaconda 5.0.1 (Python 2.7) /fs00/software/anaconda/2-5.0.1 anaconda/2-5.0.1
Anaconda 3.4.1 (Python 3.6) /fs00/software/anaconda/3-3.4.1 anaconda/3-3.4.1
Anaconda 3.4.1 (Python 2.7) /fs00/software/anaconda/2-3.4.1 anaconda/2-3.4.1
软件资源

Golang

Golang

Name Path Module
Golang 1.21.6 /fs00/software/golang/1.21.6 golang/1.21.6
Golang 1.19.5 /fs00/software/golang/1.19.5 golang/1.19.5
Golang 1.18.10 /fs00/software/golang/1.18.7 golang/1.18.10
Golang 1.17.13 /fs00/software/golang/1.17.13 golang/1.17.13
Golang 1.16.15 /fs00/software/golang/1.16.15 golang/1.16.15
Golang 1.15.15 /fs00/software/golang/1.15.15 golang/1.15.15
软件资源

Open MPI

Open MPI

Name Compiler Path Module
Open MPI 4.1.2 GNU Compiler Collection (GCC) 11.2.0 /fs00/software/openmpi/4.1.2-gcc11.2.0 openmpi/4.1.2-gcc11.2.0
Open MPI 3.1.2 GNU Compiler Collection (GCC) 8.2.0 /fs00/software/openmpi/3.1.2-gcc8.2.0 openmpi/3.1.2-gcc8.2.0
Open MPI 1.10.0 Intel C++ Compiler XE 15.0 Update 3 & Fortran Compiler XE 15.0 Update 3 /fs00/software/openmpi/1.10.0-iccifort-15.0.3 openmpi/1.10.0-iccifort-15.0.3
Open MPI 1.10.0 GNU Compiler Collection (GCC) 5.2.0 /fs00/software/openmpi/1.10.0-gcc-5.2.0 openmpi/1.10.0-gcc-5.2.0
Open MPI 1.10.5 GNU Compiler Collection (GCC) 5.4.0 /fs00/software/openmpi/1.10.5-gcc5.4.0 openmpi/1.10.5-gcc5.4.0
软件资源

Tcl/TK

Tcl/Tk

Name Compiler Path Module
Tcl/Tk 8.6.12 GNU Compiler Collection (GCC) 11.2.0 /fs00/software/tcl/8.6.12-gcc11.2.0 tcl/8.6.12-gcc11.2.0
Tcl/Tk 8.6.6 Intel Parallel Studio XE 2017 Update 2 /fs00/software/tcl/8.6.6-ips2017u2 tcl/8.6.6-ips2017u2
Tcl/Tk 8.6.4 /fs00/software/tcl/8.6.4 tcl/8.6.4
Tcl/Tk 8.6.4 Intel Parallel Studio XE 2016 Update 2 /fs00/software/tcl/8.6.4-ips2016u2 tcl/8.6.4-ips2016u2
Tcl/Tk 8.6.4 Intel Parallel Studio XE 2016 Update 2 /fs00/software/tcl/8.6.4-ips2016u2-avx2 tcl/8.6.4-ips2016u2-avx2
软件资源

计算软件

请使用者自行解决License问题,本中心概不负责!

FFTW 3.3.7

/fs00/software/fftw/3.3.7-iccifort-17.0.6-* 依赖iccifort/17.0.6

FFTW 3.3.8

/fs00/software/fftw/3.3.8-ips2019u5 依赖ips/2019u5

LAMMPS 11Aug17

/fs00/software/lammps/11Aug17

OpenFOAM® v1806

/fs00/software/openfoam/v1806-ips2017u6

source /fs00/software/openfoam/v1806-ips2017u6/OpenFOAM-v1806/etc/bashrc

P4vasp 0.3.29

/fs00/software/p4vasp/0.3.29

Modulefile: p4vasp/0.3.29

Phonopy 1.11.2

/fs00/software/phonopy/1.11.2

Quantum ESPRESSO 5.2.0 & 6.1

/fs00/software/qe/5.2.0-ips2015u3/ 依赖ips/2015u3

/fs00/software/qe/6.1-ips2017u2/ 依赖ips/2017u2

ShengBTE

/fs00/software/shengbte 依赖 iccifort/15.0.3 openmpi/1.10.0-iccifort-15.0.3

Siesta 3.2-pl-5

/fs00/software/siesta/3.2-pl-5 依赖ips/2017u6

thirdorder 1.0.2 04d3f46feb78

/fs00/software/thirdorder/1.0.2

Modulefile: thirdorder/1.0.2 依赖 anaconda/2-4.3.1 spglib/1.9.9

TBPLaS

/fs00/software/tbplas

MKL+MPI Version

Modulefile:

软件资源

VASP6 GPU 编译

VASP6 GPU(N卡) 编译实例

王勇 (孙建课题组)

人工微结构科学与技术协同创新中心高性能计算中心

根据vasp官方给出的信息,以后vasp gpu版本会着重开发openacc标准的版本,之前老cuda版本会逐渐被废弃,因此我们以vasp6.2 的openacc版本结合官方指导进行编译。 官方指导链接

https://www.vasp.at/wiki/index.php/OpenACC_GPU_port_of_VASP

编译器:

Openacc gpu Vasp6官方给出编译器意见为使用NVIDIA HPC-SDK或者 PGI's Compilers & Tools (version >=19.10)。在此vasp官方建议使用NVIDIA HPC-SDK且版本号最好为20.9,因为之后的版本可能会有一些对于vasp的bug。

关于NVIDIA HPC-SDK 20.9的安装,见

https://developer.nvidia.com/nvidia-hpc-sdk-209-downloads 

相关主页,安装流程十分简单,使用wget下载,一键式安装,对于不连接外网的节点,可以手动下载tarball压缩包,上传后本地解压,在此不再赘述,安装前请使用nvidia-smi命令查看本地硬件驱动和兼容的cuda版本(version >=10.0),确保匹配,必要时候需升级硬件驱动。

安装HPC-SDK 20.9的过程中会询问安装路径,我们以路径为/usr/software/nv-hpcsdk为例,在安装过程中指定此路径为例以后,需要设定环境变量:

export NVARCH=`uname -s`_`uname -m`;
export NVCOMPILERS=/usr/software/nv-hpcsdk #修改此处为安装路径
export PATH=$NVCOMPILERS/$NVARCH/20.9/compilers/bin:$PATH
export MANPATH=$MANPATH:$NVCOMPILERS/$NVARCH/20.9/compilers/man
export LD_LIBRARY_PATH=$NVCOMPILERS/$NVARCH/20.9/compilers/lib/:$LD_LIBRARY_PATH
export PATH=$NVCOMPILERS/$NVARCH/20.9/comm_libs/mpi/bin/:$PATH

上述可以每次使用gpu vasp6时手动添加在任务脚本,也可直接写在bashrc,但是不建议直接写在bashrc,可能会和intel版本的 mpirun冲突,造成其他之前软件的运行问题。

依赖库:

安装完NVIDIA HPC-SDK 20.9以后,还需要将软件运行需要的依赖库整理好,主要有CUDA Toolkit, QD, NCCL, 以及FFTW, 前三项直接包含在HPC-SDK,不需要单独安装。

对于FFTW,最好不要用nvhpc-sdk的编译器进行安装,如果设置了上面安装完hpc-sdk的环境变量,请先用GNU或者intel的编译器环境变量进行覆盖,不然可能会导致计算效率问题,可以自己编译,也可以直接使用集群内已经安装好的版本,路径为/fs00/software/fftw/3.3.8-ips2019u5

编译:

准备好编译器和依赖库以后,就可以进行编译了,进入vasp6.2根目录,

cp arch/makefile.include.linux_nv_acc makefile.include`

可以使用

which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }'`

查看nvfortran是否为nv-hpc-sdk的路径,如有问题,可以重新添加一遍环境变量。

(注:最近vasp官方又在官网添加了新的openacc+openmp混编版本的makefile.include.linux_nv_acc+omp+mkl来解决nccl库限制openacc版本只能单进程运行的问题,通过openmp来提升单进程多线程的运算效率,但目前没有太多相关测试的数据来支撑openmp混编会提升很多并行速度,所以在此我仍以旧版本的makefile.include.linux_nv_acc为例,同时官方也在积极改进这个问题,后续应该也可以多进程运行)

makefile.include的内容需要修改几处,包括确认编译器的位置,明确依赖库的路径等。修改后的makefile.include如下(需要注意和修改的位置后面有注释):

#Precompiler options

CPP_OPTIONS= -DHOST=\"LinuxPGI\" \
         -DMPI -DMPI_BLOCK=8000 -DMPI_INPLACE -Duse_collective \
         -DscaLAPACK \
         -DCACHE_SIZE=4000 \
         -Davoidalloc \
         -Dvasp6 \
         -Duse_bse_te \
         -Dtbdyn \
         -Dqd_emulate \
         -Dfock_dblbuf \
         -D_OPENACC \
         -DUSENCCL -DUSENCCLP2P

CPP        = nvfortran -Mpreprocess -Mfree -Mextend -E $(CPP_OPTIONS) $*$(FUFFIX)  > $*$(SUFFIX)

FC         = mpif90 -acc -gpu=cc60,cc70,cc80,cuda11.0
FCL        = mpif90 -acc -gpu=cc60,cc70,cc80,cuda11.0 -c++libs

FREE       = -Mfree

FFLAGS     = -Mbackslash -Mlarge_arrays

OFLAG      = -fast

DEBUG      = -Mfree -O0 -traceback

#Specify your NV HPC-SDK installation, try to set NVROOT automatically
NVROOT     =$(shell which nvfortran | awk -F /compilers/bin/nvfortran '{ print $$1 }')
#or set NVROOT manually
#NVHPC      ?= /opt/nvidia/hpc_sdk
#NVVERSION  = 20.9
#NVROOT     = $(NVHPC)/Linux_x86_64/$(NVVERSION)

#Use NV HPC-SDK provided BLAS and LAPACK libraries
BLAS       = -lblas
LAPACK     = -llapack

BLACS      =
SCALAPACK  = -Mscalapack

CUDA       = -cudalib=cublas,cusolver,cufft,nccl -cuda

LLIBS      = $(SCALAPACK) $(LAPACK) $(BLAS) $(CUDA)

#Software emulation of quadruple precsion
QD         = $(NVROOT)/compilers/extras/qd                    #注意并修改这里
LLIBS      += -L$(QD)/lib -lqdmod -lqd
INCS       += -I$(QD)/include/qd

#Use the FFTs from fftw
FFTW       = /fs00/software/fftw/3.3.8-ips2019u5              #修改fftw路径至本地安装路径
LLIBS      += -L$(FFTW)/lib -lfftw3
INCS       += -I$(FFTW)/include

OBJECTS    = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o

#Redefine the standard list of O1 and O2 objects
SOURCE_O1  := pade_fit.o
SOURCE_O2  := pead.o

#For what used to be vasp.5.lib
CPP_LIB    = $(CPP)
FC_LIB     = nvfortran
CC_LIB     = nvc
CFLAGS_LIB = -O
FFLAGS_LIB = -O1 -Mfixed
FREE_LIB   = $(FREE)

OBJECTS_LIB= linpack_double.o getshmem.o

#For the parser library
CXX_PARS   = nvc++ --no_warnings

#Normally no need to change this
SRCDIR     = ../../src
BINDIR     = ../../bin

此外编译前和每次提交任务前请清除其他环境并重新设置一遍环境变量:

module load ips/2019u5  #这是为了我们使用集群安装好的fftw找到依赖的路径
export NVARCH=`uname -s`_`uname -m`;
export NVCOMPILERS=/usr/software/nv-hpcsdk
export PATH=$NVCOMPILERS/$NVARCH/20.9/compilers/bin:$PATH
export MANPATH=$MANPATH:$NVCOMPILERS/$NVARCH/20.9/compilers/man
export LD_LIBRARY_PATH=$NVCOMPILERS/$NVARCH/20.9/compilers/lib/:$LD_LIBRARY_PATH
export PATH=$NVCOMPILERS/$NVARCH/20.9/comm_libs/mpi/bin/:$PATH

/usr/software/nv-hpcsdk为nv-hpc-sdk的安装路径 确认好以上所有设置后,就可以使用

make std gam ncl

进行编译了,注意,由于openacc版本的原因,直接取消了编译make gpu的方式,编译得到的vasp_std之类的版本直接可以使用GPU进行计算。

其他注意事项:

1.由于nccl库的限制,openacc的gpu版本只能单进程运行.

2.INCAR中NCORE在openacc版本中只能设为1.

3.INCAR中NSIM和KPAR参数需要对不同体系进行测试来达到效率最大化,一般来说,KPAR和所使用的GPU也就是进程数一致,NSIM需要设置的比在cpu上更大,具体请自行测试.

更多相关问题可以见GPU官方指导

也可以去VASP论坛提问

软件资源

Quantum Espresso

使用Apptainer

例:使用qe7.1版本,输入文件为当前目录下的FeO_test.in,申请1个GPU提交到723090ib队列,使用pw.x

#BSUB -J FeO_test
#BSUB -q 723090ib
#BSUB -gpu num=1

export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
QE="apptainer run --nv /fs00/software/singularity-images/ngc_quantum_espresso_qe-7.1.sif"
${QE} pw.x < FeO_test.in > FeO_test.out
软件资源

NAMD

NAMD 2.12 (2016-12-22)

例:输入文件为当前目录下的in.conf,申请48个核提交到e5v3ib队列

#BSUB -n 48
#BSUB -q e5v3ib

input=in.conf
#bindir=/fs00/software/namd/2.12/verbs/
bindir=/fs00/software/namd/2.12/ibverbs/

nodefile=nodelist
echo "group main" > $nodefile
for i in `echo $LSB_HOSTS`
do
	echo "host $i" >> $nodefile
done

${bindir}charmrun ++remote-shell ssh ++nodelist $nodefile +p$LSB_DJOB_NUMPROC ${bindir}namd2 $input
软件资源

OOMMF

The Object Oriented MicroMagnetic Framework (OOMMF) 1.2 alpha 6

例:输入文件为当前目录下的sample.mif,申请72个核提交到6140ib队列

#BSUB -q 6140ib
#BSUB -n 72

module load ips/2016u2
module load tcl/8.6.4-ips2016u2-avx2

oommfin=sample.mif

oommfrun=/fs00/software/oommf/12a6-tcl8.6.4-ips2016u2-avx2/oommf.tcl

OOMMF_HOSTPORT=`tclsh $oommfrun launchhost 0`
export OOMMF_HOSTPORT
tclsh $oommfrun mmArchive
tclsh $oommfrun boxsi -numanodes auto -threads $LSB_DJOB_NUMPROC $oommfin
tclsh $oommfrun killoommf all
软件资源

Mumax3

mumax 3.10

例:输入文件为当前目录下的sample.mx3,申请1个GPU提交到723090ib队列

#BSUB -q 723090ib
#BSUB -gpu num=1

mx3in=sample.mx3

module load cuda/11.2.0
/fs00/software/mumax/3.10-cuda11.0/mumax3 $mx3in
软件资源

支撑软件

请使用者自行解决License问题,本中心概不负责!

AWS CLI v2

Name Path Module
AWS CLI current /fs00/software/aws-cli/v2/current aws-cli/current
AWS CLI 2.9.6 /fs00/software/aws-cli/v2/2.9.6 aws-cli/2.9.6

bbcp

Name Path Module
bbcp 14.04.14.00.1 /fs00/software/bbcp/14.04.14.00.1 bbcp/14.04.14.00.1

Boost

Name Path Module
Boost 1.72.0 /fs00/software/boost/1.72.0 boost/1.72.0
Boost 1.58.0 /fs00/software/boost/1.58.0 boost/1.58.0

CMake

Name Path Module
CMake 3.23.2 /fs00/software/cmake/3.23.2/ cmake/3.23.2
CMake 3.16.3 /fs00/software/cmake/3.16.3/ cmake/3.16.3
CMake 3.11.4 /fs00/software/cmake/3.11.4/ cmake/3.11.4

Git

Name Path Module
Git 2.38.1 /fs00/software/git/2.38.1 git/2.38.1

Grace

Name Path Module
Grace 5.1.25 /fs00/software/grace/5.1.25 grace/5.1.25

HDF5

Name Path Module
HDF5 1.10.5 /fs00/software/hdf5/1.10.5 hdf5/1.10.5

libpng

Name Path Module
libpng 1.5.26 /fs00/software/libpng/1.5.26 libpng/1.5.26

jq

Name Path Module
jq 1.7 /fs00/software/jq/1.7 jq/1.7

Libxc

Name Compiler Path Module
Libxc 5.2.2 GNU Compiler Collection (GCC) 11.2.0 /fs00/software/libxc/5.2.2 libxc/5.2.2

libzip

Name Path Module
libzip 1.6.1 /fs00/software/libzip/1.6.1 libzip/1.6.1

NetCDF-C

Name Path Module
NetCDF-C 4.7.0 /fs00/software/netcdf/c-4.7.0 netcdf/c-4.7.0

PCRE

Name Path Module
PCRE 8.39 /fs00/software/pcre/8.39 pcre/8.39

Qt

Name Path Module
Qt 5.11.1 /fs00/software/qt/5.11.1 qt/5.11.1

rclone

Name Path Module
rclone latest /fs00/software/rclone/latest rclone/latest
rclone 1.66.0 /fs00/software/rclone/1.66.0 rclone/1.66.0

Spglib (OpenMP)

Name Compiler Path Module
Spglib 1.9.9 /fs00/software/spglib/1.9.9 spglib/1.9.9
Spglib 1.9.0 GNU Compiler Collection (GCC) 5.2.0 /fs00/software/spglib/1.9.0-gcc5.2.0 spglib/1.9.0-gcc5.2.0

tmux

Name Path Module
tmux 3.3a /fs00/software/tmux/3.3a tmux/3.3a

zlib

Name Path Module
zlib 1.2.11 /fs00/software/zlib/1.2.11 zlib/1.2.11
软件资源

Singularity Image

/fs00/software/singularity-images/

有丰富的官方容器镜像包

软件资源

gnuplot

gnuplot

Name Path Module
gnuplot 5.2.7 /fs00/software/gnuplot/5.2.7 gnuplot/5.2.7
gnuplot 5.2.2 /fs00/software/gnuplot/5.2.2 gnuplot/5.2.2
gnuplot 5.0.6 /fs00/software/gnuplot/5.0.6 gnuplot/5.0.6
gnuplot 5.0.1 /fs00/software/gnuplot/5.0.1 gnuplot/5.0.1
软件资源

OVITO

OVITO

Name Path Module
OVITO 3.7.12 /fs00/software/ovito/3.7.12 ovito/3.7.12
OVITO 2.9.0 /fs00/software/ovito/2.9.0 ovito/2.9.0
软件资源

Vim

Vim

Name Path Module
Vim 9.0.1677 /fs00/software/vim/9.0.1677 vim/9.0.1677
Vim 8.2.0488 /fs00/software/vim/8.2.0488 vim/8.2.0488
Vim 8.1 /fs00/software/vim/8.1 vim/8.1
软件资源

Zsh

Name Path Module
Zsh latest /fs00/software/zsh/latest zsh/latest
Zsh 5.8 /fs00/software/zsh/5.8 zsh/5.8

或从镜像站下载编译安装

Environment Modules

添加 Environment Modules 至 Zsh

echo "source /fs00/software/modules/latest/init/profile.sh" >> ~/.zshrc

命令行提示符

module load zsh/latest && exec zsh

Oh My Zsh

安装

在本地克隆后获取安装脚本再进行安装

git clone https://mirror.nju.edu.cn/git/ohmyzsh.git
cd ohmyzsh/tools
REMOTE=https://mirror.nju.edu.cn/git/ohmyzsh.git sh install.sh

切换已有 Oh My Zsh 至镜像源

git -C $ZSH remote set-url origin https://mirror.nju.edu.cn/git/ohmyzsh.git
git -C $ZSH pull

升级

omz update

主题

Powerlevel10k

安装
git clone --depth=1 https://mirror.nju.edu.cn/git/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

编辑 ~/.zshrc 的主题 ZSH_THEME="powerlevel10k/powerlevel10k"

升级
cd ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k && git pull
256色终端

开启 xterm 终端的256色以便正确显示提示颜色

echo "export TERM=xterm-256color" >> ~/.zshrc
永久在左侧显示主机名

在集群中经常需要登录到各个节点,因此最好在左侧永久显示主机名防止误操作 编辑 ~/.p10k.zsh

  1. POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS中的context剪切到POWERLEVEL9K_LEFT_PROMPT_ELEMENTS的第一项
  2. 注释typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=这一行
  3. 更改typeset -g POWERLEVEL9K_CONTEXT_PREFIX=''

插件

zsh-autosuggestions

安装
git clone https://mirror.nju.edu.cn/git/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

编辑 ~/.zshrcplugins= 中添加 zsh-syntax-highlighting

plugins=( ... zsh-autosuggestions)
升级
cd ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && git pull

zsh-syntax-highlighting

安装
git clone https://mirror.nju.edu.cn/git/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

编辑 ~/.zshrcplugins= 最后添加 zsh-syntax-highlighting

plugins=( [plugins...] zsh-syntax-highlighting)
升级
cd ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && git pull

软件资源

AlphaFold 2

/fs00/software/alphafold/2.3.2/AlphaFold-v2.3.2.sif

#BSUB -J alphafold
#BSUB -q gpu
#BSUB -n 16
#BSUB -gpu num=1

export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
export MKL_NUM_THREADS="$LSB_DJOB_NUMPROC"

ALPHAFOLD_DATADIR=/fsb/data/alphafold/2
ALPHAFOLD_IMAGE=AlphaFold-v2.3.2.sif

ALPHAFOLD_APP=/app/alphafold

RUN_ALPHAFOLD="apptainer run --bind ${ALPHAFOLD_DATADIR}:${ALPHAFOLD_APP}/download \
                            --nv ${ALPHAFOLD_IMAGE}"

${RUN_ALPHAFOLD} python ${ALPHAFOLD_APP}/run_alphafold.py --use_gpu_relax \
    --data_dir=${ALPHAFOLD_APP}/download \
    --uniref90_database_path=${ALPHAFOLD_APP}/download/uniref90/uniref90.fasta \
    --mgnify_database_path=${ALPHAFOLD_APP}/download/mgnify/mgy_clusters_2022_05.fa \
    --bfd_database_path=${ALPHAFOLD_APP}/download/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
    --pdb70_database_path=${ALPHAFOLD_APP}/download/pdb70/pdb70 \
    --uniref30_database_path=${ALPHAFOLD_APP}/download/uniref30/UniRef30_2021_03 \
    --template_mmcif_dir=${ALPHAFOLD_APP}/download/pdb_mmcif/mmcif_files \
    --obsolete_pdbs_path=${ALPHAFOLD_APP}/download/pdb_mmcif/obsolete.dat \
    --model_preset=monomer \
    --max_template_date=2022-10-1 \
    --db_preset=full_dbs \
    --output_dir=output \
    --fasta_paths=input/input.fasta

软件资源

AlphaFold 3

/fs00/software/alphafold/3.0.0/AlphaFold-v3.0.0.sif

0. 基本信息

alphafold3是Google DeepMind开发的、用于生物分子复合体结构预测的人工智能模型,该模型接受一个json形式的、用于描述生物分子体系的文件,输出预测结构与置信度打分信息。结构预测过程主要分为两步:

此处部署的是基于官方github库打包的apptainer容器。容器内包含alphafold3程序本体和依赖,不包含程序运行所需的数据库与预训练权重——这些需要在运行时以命令行参数传入。集群上部署有生信搜索所需数据库,模型权重的使用受term of use控制,请自行向Google DeepMind申请。

1. 使用方法

为避免冗长的路径和指令重复出现,定义变量

path_to_af3db="/fsb/data/alphafold/3"
path_to_af3container="/fs00/software/alphafold/3.0.0/AlphaFold-v3.0.0.sif "

io_dir=</path/to/your/input/and/output>
weights_dir=<path/to/directory/containing/your/af3-weights>

RUN_ALPHAFOLD="apptainer run --nv --bind ${path_to_af3db}:/databases,${io_dir}:/host_iopath,${weights_dir}:/af3_weights ${path_to_af3container} python run_alphafold.py"

其中${path_to_af3db}是集群上alphafold3数据库地址,${io_dir}是输入文件所在的、及希望结果输出的目录,${weights_dir}是自己申请的alphafold3权重文件所在目录。run_alphafold.py官方github库提供的接口文件。本页面后续出现的指令均默认这些变量存在。

输出帮助信息 (包括参数说明)

${RUN_ALPHAFOLD} --help

将输入文件input.json放在${io_dir}目录下,如下指令可使用alphafold3预测此文件描述体系的结构

${RUN_ALPHAFOLD} --db_dir=/databases/ --model_dir=/af3_weights/ \
  --json_path=/host_iopath/input.json --output_dir=/host_iopath/ 

程序将根据input.json中的name字段值,在${io_dir}下创建同名子目录,data pipeline结束时补全的json文件、预测结构文件和confidence score都会被保存在这个子目录中。运行时log信息通过stderr输出 (这是python logging模块的行为)。关于更详细的输入输出文件说明,请参考官方input documentationoutput documentation

2. 分步运行data pipeline与inference

如前所述,程序运行主要分为data pipeline和inference两步。其中,data pipeline只使用cpu计算且耗时很长,如果在gpu队列上运行会导致gpu资源长期空置,可能导致高额费用和gpu资源浪费。因此,推荐先在cpu队列上运行data pipeline,得到中间结果 (也就是补全的json) 退出,然后再到gpu队列上进行结构预测

为满足上述需求,可以用bool型命令行参数--run_data_pipeline--run_inference控制模型只运行其中一步,两参数默认值均为True.

分步运行指令示例:

另外,出于研究或加速计算的目的,用户可能希望使用自行准备的msa或templates,因而需要跳过alphafold3搜索步骤,此时需要手动将msa和templates写进输入json文件,然后带--run_data_pipeline=False参数运行模型,进行结构预测。关于如何将msa和templates写入json文件,请自行参考DeepMind-input documentation。注意,msa和templates会以文本形式写入json中,因此写入了msa和templates的json文件大小会达到数十到百Mb量级。

3. 关于其他命令行参数

除去以上参数外,容器还可接受很多其他参数,可以用${RUN_ALPHAFOLD} --help查看,或是在run_alphafold.py中查看。我认为有3点值得注意:

4. 队列兼容性、测试中的运行耗时

data pipeline对设备要求不高,inference则可能对gpu设备有些要求。目前测试了两例:

在队列83a100ib和734090d上测试结果显示:以上体系在单张A100卡 (memory 40 G) 或单张4090d (memory 24 G) 上均可完成inference. 在队列722080tiib和72rtxib上无法成功运行. 其他GPU队列未做测试。注意,官方performance documentation文档指出官方仅测试过alphafold3在A100(80G), A100(40 G)和H100设备上推理的准确性,因此使用如4090等其他设备做推理时,请自行校验结果准确性。

测试中data pipeline和inference计算所需时间如下:

更多performance信息可参考官方performance documentation

5. 运行结果准确性评估

比较2PV7预测结构与实验结构,全原子RMSD=4.410 (单位: Angstrom,下同)。 为衡量单链水平结构误差,计算预测A:B链-实验A:B链间RMSD,4个RMSD值分别为3.012, 2.759, 2.971, 2.740. 此单链上,alphafold3预测准确度低于alphafold2. 为衡量2个subunits间相对位置误差,计算DockQ分数为0.499>0.23,预测结构docking成功。

1AKE双链结构预测有较大错误,预测结构与1AKE实验结构RMSD=18.176,与4AKE实验结构RMSD=26.791,该结果远不如alphafold2-multimer。subunits间DockQ=0.019<<0.23,说明结构相对位置也预测错误。尚不清楚是Alphafold3本身原因,还是部署或使用不当导致。使用4090d和A100推理的结果无明显差异。

dockQ (Mirabello & Wallner, 2024, Bioinformatics) 打分用于衡量模型对subunits 间位置关系预测准确度。此分数取值范围是0-1,通常<0.23认为错误,>0.8认为准确。

软件资源

RoseTTAFold

/fs00/software/rosettafold/1.1.0

注意:apptainer默认会bind用户的home目录,如果用户本来就有RoseTTAFold或者folding的conda环境则可能会发生冲突。用户可通过添加--no-home选项避免此问题。

#BSUB -J RoseTTAFold
#BSUB -q gpu
#BSUB -n 8
#BSUB -gpu num=1

###### Configurie Numpy threads  ######

export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
export MKL_NUM_THREADS="$LSB_DJOB_NUMPROC"

###### Definition ######

ROSETTAFOLD_DATADIR=/fsb/data/rosettafold      # path to RoseTTAFold data (host)
ROSETTAFOLD_IMAGE=RoseTTAFold-1.1.0.sif         # path to RoseTTAFold image (host)
ROSETTAFOLD_APPDIR=/app/RoseTTAFold             # path to RoseTTAFold working directory (container)

###### Database ######

UNIREF30_DB=$ROSETTAFOLD_DATADIR/UniRef30_2020_06
BFD_DB=$ROSETTAFOLD_DATADIR/bfd
PDB100_DB=$ROSETTAFOLD_DATADIR/pdb100_2021Mar03

###### Example ######

RUN_ROSETTAFOLD="apptainer run --bind $UNIREF30_DB:$ROSETTAFOLD_APPDIR/UniRef30_2020_06 \
                --bind $BFD_DB:$ROSETTAFOLD_APPDIR/bfd \
                --bind $PDB100_DB:$ROSETTAFOLD_APPDIR/pdb100_2021Mar03 \
                --nv $ROSETTAFOLD_IMAGE"

# For monomer structure prediction (e2e)
${RUN_ROSETTAFOLD} $ROSETTAFOLD_APPDIR/run_e2e_ver.sh $ROSETTAFOLD_APPDIR/example/input.fa output/

# For monomer structure prediction (pyrosetta)
${RUN_ROSETTAFOLD} $ROSETTAFOLD_APPDIR/run_pyrosetta_ver.sh $ROSETTAFOLD_APPDIR/example/input.fa output/

# For complex modeling
${RUN_ROSETTAFOLD} python $ROSETTAFOLD_APPDIR/network/predict_complex.py \
                -i $ROSETTAFOLD_APPDIR/example/complex_modeling/paired.a3m \
                -o output/ -Ls 218 310

# For PPI screening using faster 2-track version (example input and output are at example/complex_2track)
${RUN_ROSETTAFOLD} python $ROSETTAFOLD_APPDIR/network_2track/predict_msa.py \
                -msa $ROSETTAFOLD_APPDIR/example/complex_2track/input.a3m \
                -npz output/complex.npz -L1 218

软件资源

ParallelFold 2

/fs00/software/parallelfold/2.0-2.3.1/ParallelFold-v2.0-with-AlphaFold-v2.3.1.sif

#BSUB -J parafold
#BSUB -q gpu
#BSUB -n 16
#BSUB -gpu num=1

export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
export MKL_NUM_THREADS="$LSB_DJOB_NUMPROC"

ALPHAFOLD_DATADIR=/fsb/data/alphafold/2
PARAFOLD_IMAGE=ParallelFold-v2.0-with-AlphaFold-v2.3.1.sif

PARAFOLD_APP=/app/ParallelFold

RUN_PARAFOLD="apptainer run --bind ${ALPHAFOLD_DATADIR}:${PARAFOLD_APP}/download \
                            --nv ${PARAFOLD_IMAGE}"

${RUN_PARAFOLD} python ${PARAFOLD_APP}/run_alphafold.py --use_gpu_relax \
    --parameter_path=${PARAFOLD_APP}/download/params \
    --uniref90_database_path=${PARAFOLD_APP}/download/uniref90/uniref90.fasta \
    --mgnify_database_path=${PARAFOLD_APP}/download/mgnify/mgy_clusters_2022_05.fa \
    --bfd_database_path=${PARAFOLD_APP}/download/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt \
    --pdb70_database_path=${PARAFOLD_APP}/download/pdb70/pdb70 \
    --uniref30_database_path=${PARAFOLD_APP}/download/uniref30/UniRef30_2021_03 \
    --template_mmcif_dir=${PARAFOLD_APP}/download/pdb_mmcif/mmcif_files \
    --obsolete_pdbs_path=${PARAFOLD_APP}/download/pdb_mmcif/obsolete.dat \
    --model_preset=monomer \
    --max_template_date=2022-10-1 \
    --db_preset=full_dbs \
    --output_dir=output \
    --fasta_paths=${PARAFOLD_APP}/input/input.fasta

服务门户

https://scc.nju.edu.cn

服务门户

登录方式

使用集群的用户名密码登录中心主持研发的HPC服务门户,在集群上没有账号的使用门户的用户名密码登录。

服务门户

账号管理

组一般对应课题组,用户则对应每个人。因涉及到收费,组长一般为教职工(如PI、导师),组员一般为学生或老师。

组长可自助审批组员账号,通过后账号立刻生效,即可使用。组长还可以禁用启用组员账号,被禁用的账号不能远程登录集群和服务门户,被禁用账号的数据和作业不受影响。

申请新组

  1. 新组长首页点击申请组
  2. 南京大学校内人员请绑定统一身份认证;
  3. 填写表单,提交申请;
  4. 与管理员联系,等待审批。

申请组员

  1. 新用户在首页点击注册账户
  2. 南京大学校内人员请绑定统一身份认证;
  3. 填写表单,用户组输入Linux Group Name,提交申请;
  4. 组长登录服务门户自助审批新用户,通过后账号立刻生效,即可使用。

测试报告

测试报告

AMD EPYC Rome VASP 测试

周健 2019.11.18

测试算例

Ruddlesden-Popper 钛酸锶 Sr4Ti3O10,305个原子。

输入文件

SYSTEM = STO

PREC=A

ENCUT=520
EDIFF=1E-6

ADDGRID=.T.

ISMEAR= 1     
SIGMA=0.2

LWAVE=.F.
LCHARG=.F.

NELMIN=4
NELM=100
LREAL=Auto

K-Points
0
Gamma
2 2 1
0 0 0

eScience中心测试,软件版本:VASP5.4.4 Intel 2018,CUDA 10.1.243

队列信息 CPU 核数 Elapsed time (s) scf次数 E0 in OSZICAR
e5v3ib队列,2*Intel Xeon E5-2680 v3 (12 Cores 2.50 GHz) 256 G RAM 24 6676 23 -.23554005E+04
e52682v4opa队列, 2*Intel Xeon E5-2682 v4 (16 Cores, 2.50 GHz) 32 5967 23 -.23554005E+04
6140ib队列, 4*Intel Xeon Gold 6140 (18 Cores, 2.30 GHz) 384 G RAM 72 2080 23 -.23554005E+04
6140ib队列, 4*Intel Xeon Gold 6140 (18 Cores, 2.30 GHz) 384 G RAM 36 2456 23 -.23554005E+04
6140ib队列, 4*Intel Xeon Gold 6140 (18 Cores, 2.30 GHz) 384 G RAM 18 5005 23 -.23554005E+04
7702队列, 2*AMD EPYC 7702 (64 Cores, 256MB Cache, 2.0 GHz) 256 G RAM 32 5034 23 -.23554005E+04
7702队列, 2*AMD EPYC 7702 (64 Cores, 256MB Cache, 2.0 GHz) 256 G RAM 64 3663 22 -.23554005E+04
7702队列, 2*AMD EPYC 7702 (64 Cores, 256MB Cache, 2.0 GHz) 256 G RAM 128 4401 23 -.23554005E+04
7502队列, 2*AMD EPYC 7502 (32 Cores, 128MB Cache, 2.5 GHz) 256 G RAM 32 5290 23 -.23554005E+04
7502队列, 2*AMD EPYC 7502 (32 Cores, 128MB Cache, 2.5 GHz) 256 G RAM 64 4176 22 -.23554005E+04
62v100ib队列,2*Intel Xeon Gold 6248 (20 Cores, 27.5MB Cache, 2.50 GHz) 768 GB RAM,8*NVIDIA Tesla V100 SXM2 32GB (5120 CUDA Cores 1290MHz, 32GB HBM2 876MHz 4096-bit 900 GB/s, NVLink, PCI-E 3.0 x16) 1CPU 1GPU 3053 23 -.23554005E+04

校计算中心测试,软件版本:VASP 5.4.4 Intel 2017,CUDA 10.1.168

队列信息 CPU/GPU Elapsed time (s) scf次数 E0 in OSZICAR
fat_384队列,4*Intel Xeon Gold 6248 (20 Cores, 2.50 GHz) 384 G RAM 20 5326.949 23 -.23554005E+04
fat_384队列,4*Intel Xeon Gold 6248 (20 Cores, 2.50 GHz) 384 G RAM 40 3105.863 23 -.23554005E+04
fat_384队列,4*Intel Xeon Gold 6248 (20 Cores, 2.50 GHz) 384 G RAM 80 2896.237 21 -.23554005E+04
gpu_v100队列,8 X TESLA V100 NVLink GPU,2 X CPU intel Xeon Gold 6248, 20核,2.5GHz, 768GB 内存 1/1 3202.687 23 -.23554005E+04
gpu_v100队列,8 X TESLA V100 NVLink GPU,2 X CPU intel Xeon Gold 6248, 20核,2.5GHz, 768GB 内存 2/2 2244.153 23 -.23554005E+04
gpu_v100队列,8 X TESLA V100 NVLink GPU,2 X CPU intel Xeon Gold 6248, 20核,2.5GHz, 768GB 内存 4/4 1379.651 23 -.23554005E+04
gpu_v100队列,8 X TESLA V100 NVLink GPU,2 X CPU intel Xeon Gold 6248, 20核,2.5GHz, 768GB 内存 8/8 1214.461 23 -.23554005E+04

结论

测试报告

Gromacs

注意:为了保证GPU性能, 在没有特殊要求的情况下,请使用2021版本的Gromacs,并用GPU计算所有的相互作用。没特殊要求的话请看第三部分。

1. Gromacs-2018.8

说明:

Gromacs使用CPU计算成键相互作用,使用GPU计算非键相互作用。

编译环境:

gcc/7.4.0
cmake/3.16.3
ips/2017u2
fftw/3.3.7-iccifort-17.0.6-avx2
cuda/10.0.130

软件信息:

GROMACS version:    2018.8
Precision:          single
Memory model:       64 bit
MPI library:        MPI
OpenMP support:     enabled (GMX_OPENMP_MAX_THREADS = 64)
GPU support:        CUDA
SIMD instructions:  AVX2_256
FFT library:        fftw-3.3.7-avx2-avx2_128
CUDA driver:        11.40
CUDA runtime:       10.0 

测试算例:

ATOM  102808(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)
nsteps      = 25000000     ;50 ns

eScience中心GPU测试: 所有GPU节点使用单个GPU进行模拟。

gromacs2010.png


2. Gromacs-2021.3

说明:

使用的是集群自带的容器化(singularity)的gromacs-2021.3. Gromacs使用CPU计算成键相互作用,使用GPU计算非键相互作用。

文件位置

/fs00/software/singularity-images/ngc_gromacs_2021.3.sif

提交代码

#BSUB -q GPU_QUEUE
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx mdrun -nb gpu -deffnm <NAME>

软件信息:

GROMACS version:    2021.3-dev-20210818-11266ae-dirty-unknown
Precision:          mixed
Memory model:       64 bit
MPI library:        thread_mpi
OpenMP support:     enabled (GMX_OPENMP_MAX_THREADS = 64)
GPU support:        CUDA
SIMD instructions:  AVX2_256
FFT library:        fftw-3.3.9-sse2-avx-avx2-avx2_128-avx512
CUDA driver:        11.20
CUDA runtime:       11.40

测试算例:

ATOM  102808(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)
nsteps      = 25000000     ;50 ns

eScience中心GPU测试: 所有GPU节点使用单个GPU进行模拟。 gromacs2021-singularity.png


3. Gromacs-2021.3(全部相互作用用GPU计算)

说明:

由于从2019版本开始,不同的相互作用慢慢都可以在GPU上进行运算,2021版本已经可以将所有模拟的计算用GPU来模拟,所以尝试用GPU进行所有相互作用的运算。

文件位置

/fs00/software/singularity-images/ngc_gromacs_2021.3.sif

提交代码

#BSUB -q GPU_QUEUE
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"	# 需要,否则会占用所有CPU,反而导致速度变慢
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx mdrun -nb gpu -bonded gpu -update gpu -pme gpu -pmefft gpu -deffnm <NAME>	# 设置所有的运算用GPU进行

测试算例:

ATOM  102808(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)
nsteps      = 25000000     ;50 ns

eScience中心GPU测试: 所有GPU节点使用单个GPU进行模拟。 gromacs2021-singularity-gpu.png


结论:

  1. 对于GPU节点来说,如果使用GPU+CPU混合运算,主要限制的速度的会是CPU,所以应该尽可能使用GPU进行相互作用的计算。

补充信息

每个GPU队列带有的CPU核数

Queue CPU Core
72rtxib 4
722080tiib 4
723090ib 6
62v100ib 5
83a100ib 8
测试报告

vasp6 gpu 测试

测试报告

Gromacs-2021.3 (比较常用GPU队列)

4. Gromacs-2021.3 (比较常用GPU队列)

说明:

使用Singularity容器解决方案,调用/fs00/software/singularity-images/ngc_gromacs_2021.3.sif完成Gromacs的能量最小化(em)、平衡模拟(nvt、npt)以及成品模拟(md)在公共共享100%GPU队列722080tiib、72rtxib、723090ib的表现。

队列情况:

队列 节点数 每节点CPU 每节点内存(GB) 平均每核内存(GB) CPU主频(GHz) 每节点GPU数量 每GPU显存(GB) 浮点计算理论峰值(TFLOPS)
83a100ib 1 64 512 8 2.6 8 40 双精度:82.92
单精度:------
723090ib 2 48 512 10.7 2.8 8 24 双精度:4.30
单精度:569.28
722080tiib 4 16 128 8.0 3.0 4 11 双精度:3.07
单精度:215.17
72rtxib 3 16 128 8.0 3.0 4 24 双精度:2.30
单精度:195.74

前人关于Gromacs-2021.3(全部相互作用用GPU计算)的测试报告中,尝试用GPU来模拟102808个原子体系(464 residues, 9nt DNA, 31709 SOL, 94 NA, 94 CL)50 ns内所有相互作用的运算,结果表明83a100ib(250 ns/day以上)>723090ib(220 ns/day以上)>722080tiib(170 ns/day以上)>72rtxib(180 ns/day以上),但83a100ib和723090ib队列常年存在80以上的NJOBS,因此作为成品模拟的前期准备,笔者通常不使用这两个队列。

文件位置:

/fs00/software/singularity-images/ngc\_gromacs\_2021.3.sif

提交代码:

能量最小化(em.lsf)

#BSUB -q 72rtxib
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx grompp -f minim.mdp -c 1aki_solv_ions.gro -p topol.top -o em.tpr
${SINGULARITY} gmx mdrun -nb gpu -ntmpi 2 -deffnm em

平衡模拟(nvt)

#BSUB -q 72rtxib
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx grompp -f nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr
${SINGULARITY} gmx mdrun -nb gpu -ntmpi 2 -deffnm nvt

平衡模拟(npt)

#BSUB -q 72rtxib
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx grompp -f npt.mdp -c nvt.gro -r nvt.gro -t nvt.cpt -p topol.top -o npt.tpr
${SINGULARITY} gmx mdrun -nb gpu -ntmpi 2 -deffnm npt

成品模拟(md)

#BSUB -q 723090ib
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md_0_1.tpr
${SINGULARITY} gmx mdrun -nb gpu -bonded gpu -update gpu -pme gpu -pmefft gpu -deffnm md_0_1

成品模拟(md)

也可以参照以下命令进行修改,以作业脚本形式进行提交:

#BSUB -q 723090ib
#BSUB -gpu "num=1"
export OMP_NUM_THREADS="$LSB_DJOB_NUMPROC"
SINGULARITY="singularity run --nv /fs00/software/singularity-images/ngc_gromacs_2021.3.sif"
${SINGULARITY} gmx pdb2gmx -f protein.pdb -o protein_processed.gro -water tip3p -ignh -merge all <<< 4
${SINGULARITY} gmx editconf -f protein_processed.gro -o pro_newbox.gro -c -d 1.0 -bt cubic
${SINGULARITY} gmx solvate -cp pro_newbox.gro -cs spc216.gro -o pro_solv.gro -p topol.top
${SINGULARITY} gmx grompp -f ../MDP/ions.mdp -c pro_solv.gro -p topol.top -o ions.tpr
${SINGULARITY} gmx genion -s ions.tpr -o pro_solv_ions.gro -p topol.top -pname NA -nname CL -neutral <<< 13
${SINGULARITY} gmx grompp -f ../MDP/minim.mdp -c pro_solv_ions.gro -p topol.top -o em.tpr
${SINGULARITY} gmx mdrun -v -deffnm em
${SINGULARITY} gmx energy -f em.edr -o potential.xvg <<< "10 0"
${SINGULARITY} gmx grompp -f ../MDP/nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr
${SINGULARITY} gmx mdrun -deffnm nvt
${SINGULARITY} gmx energy -f nvt.edr -o temperature.xvg <<< "16 0"
${SINGULARITY} gmx grompp -f ../MDP/npt.mdp -c nvt.gro -r nvt.gro -t nvt.cpt -p topol.top -o npt.tpr
${SINGULARITY} gmx mdrun -deffnm npt
${SINGULARITY} gmx energy -f npt.edr -o pressure.xvg <<< "18 0"
${SINGULARITY} gmx grompp -f ../MDP/md.mdp -c npt.gro -t npt.cpt -p topol.top -o md.tpr
${SINGULARITY} gmx mdrun -v -deffnm md
${SINGULARITY} gmx rms -f md.xtc -s md.tpr -o rmsd.xvg <<< "4 4"

软件信息:

GROMACS version:    2021.3-dev-20210818-11266ae-dirty-unknown
Precision:          mixed
Memory model:       64 bit
MPI library:        thread_mpi
OpenMP support:     enabled (GMX_OPENMP_MAX_THREADS = 64)
GPU support:        CUDA
SIMD instructions:  AVX2_256
FFT library:        fftw-3.3.9-sse2-avx-avx2-avx2_128-avx512
CUDA driver:        11.20
CUDA runtime:       11.40
测试算例:
ATOM 218234 (401 Protein residues, 68414 SOL, 9 Ion residues)

nsteps = 100000000 ; 200 ns

eScience中心GPU测试: 能量最小化(em)、平衡模拟(nvt、npt)使用1个GPU进行模拟,成品模拟(md)使用1个GPU进行模拟。

任务1 em nvt npt md
--- 72rtxib 722080tiib 722080tiib 723090ib
CPU time 1168.45 13960.33 42378.71
Run time 79 1648 5586 117.428 ns/day
0.204 hour/ns
Turnaround time 197 1732 5661
任务2 em nvt npt md
--- 72rtxib 722080tiib 72rtxib 722080tiib
CPU time 1399.30 15732.66 40568.04
Run time 93 1905 5236 106.862 ns/day
0.225 hour/ns
Turnaround time 181 1991 5479
任务3 em nvt npt md
--- 72rtxib 72rtxib 72rtxib 72rtxib
CPU time 1368.11 5422.49 5613.74
Run time 92 355 366 103.213 ns/day
0.233 hour/ns
Turnaround time 180 451 451
任务4 em nvt npt md
--- 72rtxib 72rtxib 72rtxib 722080tiib
CPU time 1321.15 5441.60 5618.87
Run time 89 356 369 111.807 ns/day
0.215 hour/ns
Turnaround time 266 440 435
任务5 em nvt npt md
--- 72rtxib 72rtxib 72rtxib 72rtxib
CPU time 1044.17 5422.94 5768.44
Run time 72 354 380 110.534 ns/day
0.217 hour/ns
Turnaround time 162 440 431
任务6 em nvt npt md
--- 723090ib 723090ib 723090ib 723090ib
CPU time 1569.17 7133.74 6677.25
Run time 81 326 325 114.362 ns/day
0.210 hour/ns
Turnaround time 75 320 300
任务7 em nvt npt md
--- 723090ib 723090ib 723090ib 722080tiib
CPU time 1970.56 5665.71 6841.73
Run time 91 253 327 111.409 ns/day
0.215 hour/ns
Turnaround time 123 251 328
任务8 em nvt npt md
--- 72rtxib 72rtxib 72rtxib 72rtxib
CPU time 1234.24 5540.59 5528.91
Run time 108 363 370 114.570 ns/day
0.209 hour/ns
Turnaround time 85 364 363
任务9 em nvt npt md
--- 723090ib 723090ib 723090ib 723090ib
CPU time 2016.10 7633.83 7983.58
Run time 93 342 361 115.695 ns/day
0.207 hour/ns
Turnaround time 130 377 356
任务10 em nvt npt md
--- 723090ib 723090ib 723090ib 72rtxib
CPU time 1483.84 7025.65 7034.90
Run time 68 317 333 102.324 ns/day
0.235 hour/ns
Turnaround time 70 319 316
结论:
  1. 能量最小化(em)在任务较少的722080tiib和72rtxib队列中,Run time分别为88.83 ± 12.45和83.25 ± 11.44s;

  2. 平衡模拟(nvt)任务在722080tiib、72rtxib和723090ib队列中,Run time分别为1776.50 ± 181.73、357.00 ± 4.08和309.50 ± 39.06 s;

  3. 平衡模拟(npt)任务在722080tiib、72rtxib和723090ib队列中,Run time分别为5411.00 ± 247.49、371.25 ± 6.08和336.50 ± 16.68 s;

  4. 原子数218234的 200 ns成品模拟(md)任务在722080tiib、72rtxib、和723090ib队列中,性能表现差别不大,分别为110.03 ± 2.75、115.83 ± 1.54和107.66 ± 5.90 ns/day。

  5. 综上,建议在能量最小化(em)、平衡模拟(nvt、npt)等阶段使用排队任务较少的72rtxib队列 ,建议在成品模拟(md)阶段按照任务数量(从笔者使用情况来看,排队任务数量72rtxib<722080tiib<723090ib<83a100ib)、GPU收费情况(校内及协同创新中心用户:72rtxib队列1.8 元/卡/小时=0.45元/核/小时、722080tiib队列1.2 元/卡/小时=0.3元/核/小时、723090ib队列1.8 元/卡/小时=0.3元/核/小时、83a100ib队列4.8 元/卡/小时=0.3元/核/小时)适当考虑队列

  6. 在以上提交代码中,未涉及到Gromacs的并行效率问题(直接“num=4”并不能在集群同时使用4块GPU),感兴趣的同学可以查看http://bbs.keinsci.com/thread-13861-1-1.html以及https://developer.nvidia.com/blog/creating-faster-molecular-dynamics-simulations-with-gromacs-2020/的相关解释。但根据前辈的经验,ATOM 500000以上才值得使用两张GPU加速卡,原因在于Gromacs的并行效率不明显。感兴趣的同学也可以使用Amber的GPU并行加速,但对显卡的要求为3090或者tesla A100。这里提供了GPU=4的gromacs命令:

gmx mdrun -deffnm $file.pdb.md -ntmpi 4 -ntomp 7 -npme 1 -nb gpu -pme gpu -bonded gpu -pmefft gpu -v
测试报告

Desmond_2022-4在HPC上的表现和批量化MD操作

拳打Amber脚踢Gromacs最终攀上Desmond高峰

一、说明:

笔者在长期受到Amber、Gromacs模拟系统构建的折磨后,痛定思痛决定下载带有GUI美观、完全自动化、一键分析的Desmond。上海科技大学Wang-Lin搭建了Schrödinger中文社区微信群(公众号:蛋白矿工),实现了使用者的互相交流和问答摘录整理,并就Schrödinger软件的使用编写了大量实用脚本。

基于命令行操作的Amber代码包非常适合生物分子体系的模拟,包括AmberTools、Amber两部分。前者免费,但提升生产力的多CPU并行和GPU加速功能需要通过Amber实现,但发展中国家(如中国)可以通过学术申请获得。

同样基于命令行操作的的Gromacs代码包由于上手快、中文教程详尽等优点收到初学者的一致好评,教程可以参考李继存老师博客(http://jerkwin.github.io/)、B站和计算化学公社(http://bbs.keinsci.com/forum.php)等。 初学者跟着教程做就可以(http://www.mdtutorials.com/),深入学习还是推荐大家去看官方的文档。

初识Desmond是使用世界上最贵的分子模拟软件之一的“学术版”Maestro时,它是由D.E.Shaw Research开发的MD代码,但在Schrödinger公司的帮助下实现了GUI图形界面操作。投资界科学家D.E.Shaw顺手还制造l一台用于分子动力学模拟的专业超级计算机Anton2,当然相对于宇宙最快的Gromacs还是差了点(懂得都懂)。学术和非营利机构用户更是可以在D.E.Shaw Research官方网站注册信息,免费获得拥有Maestro界面的Desmond软件

image.png

Figure 1: Molecular Dynamics run using default parameters in Schrödinger Suite 2023-1.

二、Desmonds的安装:

在D.E.Shaw Research注册后下载相应软件包,上传到HPC集群个人home下任意位置,随后创建软件文件夹(作为后续安装路径)复制pwd输出的路径内容(笔者为/fsa/home/ljx_zhangzw/software):

mkdir software
pwd

解压安装,进入安装引导界面并按Enter继续进行安装:

tar -xvf Desmond_Maestro_2022.4.tar
cd DESRES_Academic_2022-4_Linux-x86_64
./INSTALL

image.png

输出以下界面后粘贴复制pwd输出的路径内容,Enter确认为安装路径:

image.png

输出以下界面后粘贴复制pwd输出的路径内容,Enter确认为临时文件路径:

image.png

输出以下界面后输入y,Enter确认上述两个路径并进行安装:

image.png

安装完成后进入安装路径,并写入环境变量:

cd /fsa/home/ljx_zhangzw/software
echo "export Desmond=${PWD}/" >> ~/.bashrc

同时由于Desmond对集群计算中提交任务队列的要求,需要在安装路径修改schrodinger.host以定义GPU信息,示例给出的是83a100ib队列中m001节点信息:

#localhost
name:localhost
temdir:/fsa/home/ljx_zhangzw/software

#HPC
name: HPC
host: m001
queue: LSF
qargs: -q 83a100ib -gpu num=1
tmpdir: /fsa/home/ljx_zhangzw/software
schrodinger: /fsa/home/ljx_zhangzw/software
gpgpu: 0, NVIDIA A100
gpgpu: 1, NVIDIA A100
gpgpu: 2, NVIDIA A100
gpgpu: 3, NVIDIA A100
gpgpu: 4, NVIDIA A100
gpgpu: 5, NVIDIA A100
gpgpu: 6, NVIDIA A100
gpgpu: 7, NVIDIA A100

需要注意的是:

1、修改tmpdir和schrodinger对应路径为自己的安装路径;

2、节点host、队列83a100ib以及显卡信息gpgpu: 0-7, NVIDIA A100自行调整,可以查看HPC的计算资源

3、对于不同的任务调度系统,Schrödinger公司KNOWLEDGE BASE蛋白矿工知乎号Q2进行了介绍;

4、截止2023年6月16日,HPC集群可供Desmond使用的计算卡(而非3090、4090等)包括:

队列 GPU Hostname 加速卡机时收费

e5v3k40ib 2*Intel Xeon E5-2680v3
2*NVIDIA Tesla K40 12GB
128GB RAM
56Gb FDR InfiniBand

x001

gpgpu: 0, NVIDIA Tesla K40

gpgpu: 1, NVIDIA Tesla K40

校内及协同创新中心用户

1.2 元/卡/小时=0.1元/核/小时

1.2 =0.1
e5v4p100ib 2*Intel Xeon E5-2660v4
2*NVIDIA Tesla P100 PCIe 16GB
128GB RAM
56Gb FDR InfiniBand

x002

gpgpu: 0, NVIDIA Tesla P100

gpgpu: 1, NVIDIA Tesla P100

校内及协同创新中心用户

1.68 元/卡/小时=0.12元/核/小时



62v100ib 2*Intel Xeon Gold 6248
8*NVIDIA Tesla V100 SXM2 32GB
768GB RAM
100Gb EDR InfiniBand

n002

gpgpu: 0, NVIDIA Tesla V100
gpgpu: 1, NVIDIA Tesla V100
gpgpu: 2, NVIDIA Tesla V100
gpgpu: 3, NVIDIA Tesla V100
gpgpu: 4, NVIDIA Tesla V100
gpgpu: 5, NVIDIA Tesla V100
gpgpu: 6, NVIDIA Tesla V100
gpgpu: 7, NVIDIA Tesla V100

校内及协同创新中心用户

3 元/卡/小时=0.6元/核/小时



72rtxib AMD EPYC 7302
4*NVIDIA TITAN RTX 24GB
128GB RAM
100Gb HDR100 InfiniBand

g005 or g006 or g007

gpgpu: 0, NVIDIA TITAN RTX
gpgpu: 1, NVIDIA TITAN RTX
gpgpu: 2, NVIDIA TITAN RTX
gpgpu: 3, NVIDIA TITAN RTX

校内及协同创新中心用户

1.8 元/卡/小时=0.45元/核/小时



83a100ib 2*Intel Xeon Platinum 8358
8*NVIDIA Tesla A100 SXM4 40GB
512GB RAM
200Gb HDR InfiniBand

m001

gpgpu: 0, NVIDIA A100
gpgpu: 1, NVIDIA A100
gpgpu: 2, NVIDIA A100
gpgpu: 3, NVIDIA A100
gpgpu: 4, NVIDIA A100
gpgpu: 5, NVIDIA A100
gpgpu: 6, NVIDIA A100
gpgpu: 7, NVIDIA A100

校内及协同创新中心用户

4.8 元/卡/小时=0.6元/核/小时



原因在于Desmond对于GPGPU (General-purpose computing on graphics processing units)的要求。并提出了一系列注意事项:

image.png

1、不支持Tesla K20、Tesla K40和Tesla K80卡。虽然我们仍然希望我们的GPGPU代码能够运行,但NVIDIA已经拒绝了CUDA 11.2工具包中对这些卡的支持。
2、我们仅支持最低CUDA版本11.2的这些卡的NVIDIA“推荐/认证”Linux驱动程序。
3、标准支持不包括消费级GPU卡,如GeForce GTX卡。

三、运行MD模拟

单次MD:

在个人笔记本(Linux)上依照上述步骤安装,或使用Windows浏览器以图形界面Web登陆HPC集群进行点击操作。

教程可参考2022薛定谔中文网络培训知乎内容。需要注意的是:所有依赖Desmond的工作流在Windows或Mac平台上都不受支持,只能在Linux上运行。

批量MD:

1、plmd/DSMDrun: Desmond分子动力学模拟一键式运行脚本:

下载地址:Wang-Lin-boop/Schrodinger-Script: Some scripts to run Schrödinger jobs on HPC or localhost. (github.com)

脚本介绍:Wang-Lin-boop/Schrodinger-Script: Some scripts to run Schrödinger jobs on HPC or localhost. (github.com)

通过以上脚本实现当前路径下所有的mae文件(类似于PDB的结构文件,需通过Maestro转存)按照设置参数进行模拟,plmd -h中给出了示例和详细的输入命令介绍:

Usage: plmd [OPTION] <parameter>

An automatic Desmond MD pipline for protein-ligand complex MD simulation.

Example: 
1) plmd -i "*.mae" -S INC -P "chain.name A" -L "res.ptype UNK" -H HPC_CPU -G HPC_GPU
2) plmd -i "*.mae" -S OUC -P "chain.name A" -L "chain.name B" -t 200 -H HPC_CPU -G HPC_gpu01
3) plmd -i "*.mae" -S "TIP4P:Cl:0.15-Na-Cl+0.02-Fe2-Cl+0.02-Mg2-Cl" -L "res.num 999" -G HPC_gpu03
4) plmd -i "*.cms" -P "chain.name A" -L "res.ptype ADP" -H HPC_CPU -G HPC_gpu04

Input parameter:
  -i	Use a file name (Multiple files are wrapped in "", and split by ' ') *.mae or *.cms ;
            or regular expression to represent your input file, default is *.mae.

System Builder parameter:
  -S    System Build Mode: <INC>
            INC: System in cell, salt buffer is 0.15M KCl, water is TIP3P. Add K to neutralize system.
            OUC: System out of cell, salt buffer is 0.15M NaCl, water is TIP3P. Add Na to neutralize system.
            Custom Instruct: Such as: "TIP4P:Cl:0.15-Na-Cl+0.02-Fe2-Cl+0.02-Mg2-Cl"
                Interactive addition of salt. Add Cl to neutralize system.
                    for positive_ion: Na, Li, K, Rb, Cs, Fe2, Fe3, Mg2, Ca2, Zn2 are predefined.
                    for nagative_ion: F, Cl, Br, I are predefined.
                    for water: SPC, TIP3P, TIP4P, TIP5P, DMSO, METHANOL are predefined.

  -b	Define a boxshape for your systems. <cubic>
            box types: dodecahedron_hexagon, cubic, orthorhombic, triclinic
  -s	Define a boxsize for your systems.  <15.0>
		for dodecahedron_hexagon and cubic, defulat is 15.0;
		for orthorhombic or triclinic box, defulat is [15.0 15.0 15.0];
		If you want use Orthorhombic or Triclinic box, your parameter should be like "15.0 15.0 15.0"
  -R    Redistribute the mass of heavy atoms to bonded hydrogen atoms to slow-down high frequency motions.
  -F	Define a force field to build your systems. <OPLS_2005>
		OPLS_2005, S-OPLS, OPLS3e, OPLS3, OPLS2 are recommended to protein-ligand systems.

Simulation control parameter:
  -m	Enter the maximum simulation time for the Brownian motion simulation, in ps. <100>
  -t    Enter the Molecular dynamics simulation time for the product simulation, in ns. <100>
  -T    Specify the temperature to be used, in kelvin. <310>
  -N    Number of Repeat simulation with different random numbers. <1>
  -P    Define a ASL to protein, such as "protein".
  -L    Define a ASL to ligand, such as "res.ptype UNK".
  -q    Turn off protein-ligand analysis.
  -u    Turn off md simulation, only system build.
  -C    Set constraint to an ASL, such as "chain.name A AND backbone"
  -f    Set constraint force, default is 10.
  -o    Specify the approximate number of frames in the trajectory.  <1000>
        This value is coupled with the recording interval for the trajectory and the simulation time: the number of frames times the trajectory recording interval is the total simulation time.
        If you adjust the number of frames, the recording interval will be modified.

Job control:
  -G	HOST of GPU queue, default is HPC_GPU.
  -H    HOST of CPU queue, default is HPC_CPU.
  -D	Your Desmond path. <$Desmond>

2、AutoMD: Desmond分子动力学模拟一键式运行脚本:

下载地址:Wang-Lin-boop/AutoMD: Easy to get started with molecular dynamics simulation. (github.com)

脚本介绍:AutoMD:从初始结构到MD轨迹,只要一行Linux命令? - 知乎 (zhihu.com)

由于Desmond学术版本提供的力场有限,plmd无法有效引入其他力场参数,因此在plmd的迭代版本AutoMD上,通过配置D.E.Shaw Research开发的Viparr和Msys代码在Desmond中引入如Amber,Charmm等力场来帮助模拟系统的构建。

#在HPC上安装ViparrMsys

在个人笔记本(Linux)上下载以下代码文件,并上传至集群个人home的software中:

wget https://github.com/DEShawResearch/viparr/releases/download/4.7.35/viparr-4.7.35-cp38-cp38-manylinux2014_x86_64.whl
wget https://github.com/DEShawResearch/msys/releases/download/1.7.337/msys-1.7.337-cp38-cp38-manylinux2014_x86_64.whl
git clone git://github.com/DEShawResearch/viparr-ffpublic.git
git clone https://github.com/Wang-Lin-boop/AutoMD

随后进入desmond工作目录,启动虚拟环境以帮助安装Viparr和Msys:

cd /fsa/home/ljx_zhangzw/software
./run schrodinger_virtualenv.py schrodinger.ve
source schrodinger.ve/bin/activate
pip install --upgrade pip
pip install msys-1.7.337-cp38-cp38-manylinux2014_x86_64.whl
pip install viparr-4.7.35-cp38-cp38-manylinux2014_x86_64.whl
echo "export viparr=${PWD}/schrodinger.ve/bin" >> ~/.bashrc

同时,将viparr-ffpublic.git解压并添加到环境变量:

echo "export VIPARR_FFPATH=${PWD}/viparr-ffpublic/ff" >> ~/.bashrc

最后,将AutoMD.git解压并进行安装,同时指定可自动添加补充力场:

cd AutoMD
echo "alias AutoMD=${PWD}/AutoMD" >> ~/.bashrc
chmod +x AutoMD
source ~/.bashrc
cp -r ff/* ${VIPARR_FFPATH}/

#AutoMD -h

在输入命令介绍中,给出了四个示例:胞质蛋白-配体复合物、血浆蛋白-蛋白复合物、DNA/RNA-蛋白质复合物、以及需要Meastro预准备的膜蛋白。在这些示例中:

通过-i命令输入了当前路径所有的复合物结构.mae文件(也可以是Maestro构建好的模拟系统.cms文件);

通过-S指定了模拟系统的溶液环境,包括INC(0.15M KCl、SPC水、K+中和)、OUC(0.15M NaCl、SPC水、Na+中和),以及自定义溶液环境如"SPC:Cl:0.15-K-Cl+0.02-Mg2-Cl";

通过-b和-s定义了模拟系统的Box形状和大小;

通过-F定义力场参数,由于学术版Desmond的要求不被允许使用S-OPLS力场,仅可使用OPLS_2005或其他力场;OPLS适用于蛋白-配体体系,Amber适用于蛋白-核酸,Charmm适用于膜蛋白体系,DES-Amber适用于PPI复合体体系,但是这些搭配并不是绝对的,我们当然也可以尝试在膜蛋白体系上使用Amber力场,在核酸体系上使用Charmm力场,具体的情况需要用户在自己的体系上进行尝试;

-F Charmm ff aa.charmm.c36m, misc.charmm.all36, carb.charmm.c36, ethers.charmm.c35, ions.charmm36, lipid.charmm.c36 and na.charmm.c36
-F Amber ff aa.amber.19SBmisc, aa.amber.ffncaa, lipid.amber.lipid17, ions.amber1lm_iod.all, ions.amber2ff99.tip3p, na.amber.bsc1 and na.amber.tan2018
 -F DES-Amber aa.DES-Amber_pe3.2, dna.DES-Amber_pe3.2, rna.DES-Amber_pe3.2 and other force fields in -F Amber
Usage: AutoMD [OPTION] <parameter>

Example: 
1) MD for cytoplasmic protein-ligand complex:
AutoMD -i "*.mae" -S INC -P "chain.name A" -L "res.ptype UNK" -F "S-OPLS"
2) MD for plasma protein-protein complex:
AutoMD -i "*.mae" -S OUC -F "DES-Amber"
3) MD for DNA/RNA-protein complex:
AutoMD -i "*.mae" -S "SPC:Cl:0.15-K-Cl+0.02-Mg2-Cl" -F Amber
4) MD for membrane protein, need to prior place membrane in Meastro.
AutoMD -i "*.mae" -S OUC -l "POPC" -r "Membrane" -F "Charmm"

Input parameter:
  -i    Use a file name (Multiple files are wrapped in "", and split by ' ') *.mae or *.cms ;
            or regular expression to represent your input file, default is *.mae.

System Builder parameter:
  -S    System Build Mode: <INC>
        INC: System in cell, salt buffer is 0.15M KCl, water is SPC. Add K to neutralize system.
        OUC: System out of cell, salt buffer is 0.15M NaCl, water is SPC. Add Na to neutralize system.
        Custom Instruct: Such as: "TIP4P:Cl:0.15-Na-Cl+0.02-Fe2-Cl+0.02-Mg2-Cl"
            Interactive addition of salt. Add Cl to neutralize system.
                for positive_ion: Na, Li, K, Rb, Cs, Fe2, Fe3, Mg2, Ca2, Zn2 are predefined.
                for nagative_ion: F, Cl, Br, I are predefined.
                for water: SPC, TIP3P, TIP4P, TIP5P, DMSO, METHANOL are predefined.
  -l    Lipid type for membrane box. Use this option will build membrane box. <None>
            Lipid types: POPC, POPE, DPPC, DMPC. 
  -b    Define a boxshape for your systems. <cubic>
            box types: dodecahedron_hexagon, cubic, orthorhombic, triclinic
  -s    Define a boxsize for your systems.  <15.0>
            for dodecahedron_hexagon and cubic, defulat is 15.0;
            for orthorhombic or triclinic box, defulat is [15.0 15.0 15.0];
            If you want use Orthorhombic or Triclinic box, your parameter should be like "15.0 15.0 15.0"
  -R    Redistribute the mass of heavy atoms to bonded hydrogen atoms to slow-down high frequency motions.
  -F    Define a force field to build your systems. <OPLS_2005> 
            OPLS_2005, S-OPLS are recommended to receptor-ligand systems.
            Amber, Charmm, DES-Amber are recommended to other systems. Use -O to show more details.
            Use the "Custom" to load parameters from input .cms file.

Simulation control parameter:
  -m    Enter the maximum simulation time for the Brownian motion simulation, in ps. <100>
  -r    The relaxation protocol before MD, "Membrane" or "Solute". <Solute> 
  -e    The ensemble class in MD stage, "NPT", "NVT", "NPgT". <NPT> 
  -t    Enter the Molecular dynamics simulation time for the product simulation, in ns. <100>
  -T    Specify the temperature to be used, in kelvin. <310>
  -N    Number of Repeat simulation with different random numbers. <1>
  -P    Define a ASL to receptor, such as "protein".
  -L    Define a ASL to ligand and run interaction analysis, such as "res.ptype UNK".
  -u    Turn off md simulation, only system build.
  -C    Set constraint to an ASL, such as "chain.name A AND backbone"
  -f    Set constraint force, default is 10.
  -o    Specify the approximate number of frames in the trajectory.  <1000>
        This value is coupled with the recording interval for the trajectory and the simulation time: 
        the number of frames times the trajectory recording interval is the total simulation time.
        If you adjust the number of frames, the recording interval will be modified.

Job control:
  -G    HOST of GPU queue, default is GPU.
  -H    HOST of CPU queue, default is CPU.
  -D    Your Desmond path. </fsa/home/ljx_zhangzw/>
  -V    Your viparr path. </fsa/home/ljx_zhangzw/schrodinger.ve/bin>
  -v    Your viparr force fields path. </fsa/home/ljx_zhangzw/viparr-ffpublic/ff>

示例任务提交脚本及命令,需修改相应计算节点和软件路径信息:

#BSUB -L /bin/bash
#BSUB -q 83a100ib
#BSUB -m m001

module load cuda/12.0.0
export Desmond=/fsa/home/ljx_zhangzw/
export viparr=/fsa/home/ljx_zhangzw/schrodinger.ve/bin
export VIPARR_FFPATH=/fsa/home/ljx_zhangzw/viparr-ffpublic/ff
alias AutoMD=/fsa/home/ljx_zhangzw/AutoMD/AutoMD


echo $PATH
echo $LD_LIBRARY_PATH
nvidia-smi
env|grep CUDA

AutoMD -i "*.mae" -S OUC -P "chain.name A" -L "res.ptype UNK" -F "OPLS_2005" -T 298 -s 10 -H m001 -G m001

在模拟参数控制命令中,通过-P和-L分别定义了mae文件中的受体和配体,-m默认

-T定义体系温度为298 K,默认进行100 ns和1次重复模拟次数,通过-H和-G指定了host文件中的相应计算队列。

四、性能表现:

笔者通过上述的示例任务提交脚本及命令调用Desmond和AutoMD进行了包含12个阶段的工作流:

Summary of user stages:
  stage 1 - task
  stage 2 - build_geometry
  stage 3 - assign_forcefield
  stage 4 - simulate, Brownian Dynamics NVT, T = 10 K, small timesteps, and restraints on solute_heavy_atom, 100 ps
  stage 5 - simulate, Brownian Dynamics NVT, T = 10 K, small timesteps, and restraints on user defined sets, 100 ps
  stage 6 - simulate, Langevin small steps NVT, T = 10 K, and restraints on solute heavy atoms, 12 ps
  stage 7 - simulate, Langevin NPT, T = 10 K, and restraints on solute heavy atoms, 12 ps
  stage 8 - simulate, Langevin NPT, T = 10 K, and restraints on solute heavy atoms, 12 ps
  stage 9 - simulate, Langevin NPT and restraints on solute heavy atoms, 12ps
  stage 10 - simulate, Langevin NPT and no restraints, 24ps
  stage 11 - simulate, Final MD and analysis, 100000.0 ps
  stage 12 - pl_analysis
(12 stages in total)

分别在83a100ib和72rtxib进行了相应尝试:

System Atoms:21173
System Residues:6363
System MOls:6202
Protein Atoms:2584
Protein Residues:162
Ligand Atoms:73
Ligand Residues:1


MIN time: 100 ps
MD time: 100000.0 ps
temperature: 298 K
Repeat: 1
Rondom numbers list: 2007

#Desmond
Multisim summary :
Total duration: 3h 38' 7"
Total GPU time: 3h 24' 42" (used by 8 subjob(s))

#HPC-83a100ib
Resource usage summary:

    CPU time :                                   12745.00 sec.
    Max Memory :                                 965 MB
    Average Memory :                             893.78 MB
    Total Requested Memory :                     -
    Delta Memory :                               -
    Max Swap :                                   -
    Max Processes :                              15
    Max Threads :                                45
    Run time :                                   13262 sec.
    Turnaround time :                            13260 sec.
System Atoms:63284
System Residues:20178
System MOls:19955
Protein Atoms:2585
Protein Residues:224
Ligand Atoms:72
Ligand Residues:1

MIN time: 100 ps
MD time: 100000.0 ps
temperature: 298 K
Repeat: 1
Rondom numbers list: 2007

#Desmond
Multisim summary :
  Total duration: 7h 51' 5"
  Total GPU time: 7h 27' 48" (used by 8 subjob(s))

#HPC-72rtxib
Resource usage summary:

    CPU time :                                   31316.00 sec.
    Max Memory :                                 1634 MB
    Average Memory :                             400.16 MB
    Total Requested Memory :                     -
    Delta Memory :                               -
    Max Swap :                                   -
    Max Processes :                              15
    Max Threads :                                40
    Run time :                                   85601 sec.
    Turnaround time :                            85602 sec.

笔者在测试时恰逢72rtxib g007中有同学在运行gmx,desmond的GPU利用率得到了进一步的凸显,但目前存在一点问题,即desmond在计算完毕后无法及时退出对GPU的占用,


***我将在错误解决后更新,或者如果你知道如何排除这个出错误,请在QQ群探讨***

image.png

五、模拟分析:

模拟完成后,将在工作路径创建一个名为结构文件名_随机种子号-md的文件夹,其中包含了:

多个阶段的工作流文件 AutoMD.msj
多个阶段 launching日志文件 md_multisim.log
多个阶段 launching阶段文件 md_1-out.tgz ... md_12-out.tgz
模拟系统结构文件   -in.cms  and -out.cms 
模拟执行参数文件 md.cpt.cfg and md-out.cfg
模拟轨迹文件夹 md_trj
模拟执行日志文件 md.log
检查点文件 md.cpt
能量文件 md.ene
包含RMSF、RMSF、SSE等常规分析的结果文件 md.eaf

此外,还包含了部分的分析脚本文件,更多用于MD轨迹分析的脚本文件还可以通过访问官方脚本库获得Scripts | Schrödinger (schrodinger.com)

文件夹内分析脚本
Resume previous MD bash resume.sh 
Extend MD bash extend.sh # The total time will be extend to 2-fold of initial time
Cluster trajectory bash cluster.sh  "<rmsd selection>"  "<fit selection>"  "<number>"
Analysis Occupancy bash occupancy.sh  "<selection to analysis>"  "<fit selection>"
Analysis ppi contact bash ppi.sh  "<Component A>"  "<Component B>" 
官网部分MD脚本
Calculate the radius of gyration  calc_radgyr.py
Thermal MMGBSA
thermal_mmgbsa.py
Calculate Trajectory B-factors
trajectory_bfactors.py
Analyze a Desmond Simulation
analyze_simulation.py
Merge Trajectories
trj_merge.py

上述分析脚本的使用需预先设置环境变量,随后在terminal键入$SCHRODINGER/run *.py -h查看相应脚本的帮助文件即可,如在个人计算机 (LINUX)中进行轨迹80-100ns的mmgbsa计算分析:

vim ~/.bashrc
#添加schrodinger所在目录的环境变量:
export SCHRODINGER=/opt/schrodinger2018-1
source ~/.bashrc
#执行80-100 ns的mmgbsa计算,间隔4帧
$SCHRODINGER/run thermal_mmgbsa.py *-2007-md-out.cms -j casein80_100 -start_frame 800  -end_frame 1000  -HOST localhost:8 -NJOBS 4 -step_size 4

结合thermal_mmgbsa.py的计算结果,breakdown_MMGBSA_by_residue.py脚本进一步实现了mmgbsa结合能的残基分解:

$SCHRODINGER/run breakdown_MMGBSA_by_residue.py *-prime-out.maegz *-breakdown.csv -average

结合thermal_mmgbsa.py产生所有帧的结构文件:MD_0_100ns-complexes.maegz,使用calc_radgyr.py脚本计算复合物的回旋半径:

$SCHRODINGER/run calc_radgyr.py -h
#usage: calc_radgyr.py [-v] [-h] [-asl ASL] infile

Calculates the radius of gyration of structures in the input file.

Calculate the radius of gyration of each structure in the input file,
which can be Maestro, SD, PDB, or Mol2 format.

Copyright Schrodinger, LLC. All rights reserved.

positional arguments:
  infile        Input file.

optional arguments:
  -v, -version  Show the program's version and exit.
  -h, -help     Show this help message and exit.
  -asl ASL      ASL expression for atoms to be included in the calculation. By
                default, the radius of gyration includes all atoms.
#示例
$SCHRODINGER/run thermal_mmgbsa.py *-2007-md-out.cms -j * -start_frame 0  -end_frame 1001  -HOST localhost:8 -NJOBS 4 -step_size 1
$SCHRODINGER/run calc_radgyr.py *-2007-md-out.cms

结合binding_sasa.py脚本实现复合物的SASA分析:

$SCHRODINGER/run binding_sasa.py -h
#usage: binding_sasa.py [-v] [-h] [-r RESIDUES] [-d <angstrom distance> | -f] [-s] [-n]
                       [-o OUTPUT_FILE] [-l ASL] [-j JOBNAME]
                       [--trajectory <path to trj>] [--ligand_asl <ligand asl>]
                       [--framestep <frames in each step>]
                       [--water_asl <asl for waters to keep>]
                       input_file

Calculates SASA of ligand and receptor before and after receptor-ligand binding.

Computes the change in solvent accessible surface area (SASA) upon binding for
a ligand and receptor. The total SASA for the unbound system and the
difference upon binding is computed and decomposed into functional subsets,
such as per-residue terms, charged, polar, and hydrophobic

The script will operate on PV files, Desmond CMS files or a receptor-ligand
complex Maestro file.

Copyright Schrodinger, LLC. All rights reserved.

positional arguments:
  input_file            Input PV file, Desmond CMS file, or a receptor-ligand complex
                        Maestro file.

optional arguments:
  -v, -version          Show the program's version and exit.
  -h, -help             Show this help message and exit.
  -r RESIDUES, --residue RESIDUES
                        Add specific residue to SASA report. Can be done multiple times
                        to add multiple residues. (format: ChainID,ResNum)
  -d <angstrom distance>, --distance <angstrom distance>
                        Distance cutoff in angstroms. Receptor atoms further than
                        cutoff distance from ligand will not be included in protein-
                        ligand complex SASA calculation. Default is 5 angstroms.
  -f, --full            Calculates SASA for entire ligand and protein.
  -s, --structure       For each ligand and receptor, append additional output
                        reporting the surface area of backbone atoms, side chain atoms,
                        and atoms of each residue type.
  -n, --secondary       For each ligand and receptor, append additional output
                        reporting surface area for helix , strand and loop receptor
                        atoms.
  -o OUTPUT_FILE, --output OUTPUT_FILE
                        Where to write the output file. If not specified, for PV input,
                        output file will be called <jobname>_out_pv.mae; for complex
                        files, it will be named <jobname>-out.mae. For --trajectory
                        jobs, only CSV output file is written
  -l ASL, --selection ASL
                        ASL pattern to define specific residues to calculate SASA for.
  -j JOBNAME, --jobname JOBNAME
                        Sets the jobname - base name for output files. If not
                        specified, it will be derived from the input file name.
  --trajectory <path to trj>
                        Compute binding SASA over a trajectory. Use of this option
                        means the input file should be a Desmond .cms file. The path to
                        the Desmond trj directory must be supplied as the argument to
                        this flag. Output will be to a .csv file only. The ligand
                        structure will be determined automatically unless the
                        --ligand_asl flag is used.
  --ligand_asl <ligand asl>
                        The ASL used to determine the ligand structure. By default,
                        this is determined automatically. Only valid for --trajectory
                        jobs.
  --framestep <frames in each step>
                        --trajectory jobs calculate SASA every X frames. By default,
                        X=10. Use this flag to change the value of X.
  --water_asl <asl for waters to keep>
                        By default, --trajectory jobs remove all waters before
                        calculating SASA. Use this to specify waters to keep
                        (--water_asl=all keeps all waters, --water_asl="within 5
                        backbone" keeps all waters with 5 Angstroms of the protein
                        backbone).
#示例
$SCHRODINGER/run binding_sasa.py *-2007-md-out.cms -f -j sasa_complex --trajectory *-2007-md_trj  --framestep 1

还可以通过下载结构文件名_随机种子号-md的文件夹至个人笔记本,在TASKS中的Desmond找到Simulation Interaction Digram分析面板,并导入md.eaf文件进行常规分析。

image.png

image.png

借助AutoMD中的AutoTRJ脚本,可以使用常见的官方脚本来直接处理AutoMD的模拟结果:

(base) parallels@parallels:$ AutoTRJ -h
The trajectory analysis script for AutoMD. Refer to: https://github.com/Wang-Lin-boop/AutoMD
Usage: AutoTRJ [OPTION] <parameter>

Required Options:
  -i <string>	The path to trajectory or regular expression for trajectories(will be merged). such as "*-md".
  -J <string>   Specify a basic jobname for this task, the basename of -i is recommended.
  -M <string>   The running mode for this analysis task. the <..> means some options.
                APCluster_<n>: affinity propagation clustering, the <n> is the number of most populated clusters.
                CHCluster_<n>_<cutoff>: centroid hierarchical clustering, the <cutoff> is the RMSD thethreshold.
                LigandAPCluster_<n>: APCluster for ligand, require "-L" option.
                LigandCHCluster_<n>_<cutoff>: CHCluster for ligand, require "-L" option.
                Occupancy: calculates the occupancy of component 2 in trajectory, require "-L" option.
                PPIContact: identifies interactions occurring between the components, require "-L" option.
                FEL: analyze the free energy landscape (FEL) for CA atoms, and cluster the trajectories by FEL.
                CCM: plot the cross-correlation matrix of the trajectory. 
                SiteMap_<n>: running SiteMap on all frames of the trajectory, the <n> is the number of sites.
                PocketMonitor: monitor the ligand binding pocket on the trajectory, require "-L" option. 
                MMGBSA: running MM-GBSA on the trajectory, require "-L" option. 
                BFactor: calculate atom B-factors from trajectory (receptor and ligand).
                RMSF: calculate RMSF from trajectory (receptor).
                ConvertXTC: convert the trajectory to XTC format.
            You can parallel the analysis task by "+", such as, "APCluster_5+PPIContact+MMGBSA".

Analysis Range Options:
  -R <ASL>      The ASL of component 1 to be centered. <protein>
  -L <ASL>      The ASL of component 2 to be analyzed. <ligand>

Trajectories Processing Options:
  -T <string>   Slice trajectories when analyzed, if more than one trajectories given by -i, this slice will applied to all of them. The default is None. Such as "100:1000:1". <START:END:STEP>
  -t <string>   Slice trajectories when calculating MM/GBSA, such as "100:1000:1". <START:END:STEP>
  -c            During the clustering process, the frames of a trajectory are preserved for each cluster, while representative members are stored in the CMS files.
  -A <file>     Align the trajectory to a reference structure, given in ".mae" format. 
  -a            Align the trajectory to the frist frame. 
  -C <ASL>      Set a ASL to clean the subsystem from trajectory, such as -C "not solvent".
  -P            Parch waters far away from the component 2.
  -w <int>      Number of retained water molecules for parch (-P) stage. <200>
  -m            Treat the explicit membrane to implicit membrane during MM-GBSA calculation. 

Job Control Options:
  -H <string>   HOST of CPU queue, default is CPU.与Desmond配置schrondinger.host相同
  -N <int>      CPU number for per analysis task. <30>
  -G <path>     Path to the bin of Gromacs. <此处填写Gromacs的路径>
  -D <path>	    Path to the installation directory of Desmond. <此处填写Desmond或Schrodinger的路径>
#示例
AutoTRJ -i *-md_trj -J test_xpm -M FEL -G /usr/local/gromacs/bin/
#此处输入了md的轨迹文件,并指定分析人物名称为test_xpm,分析任务为FEL,额外指定了gmx的环境变量(由于在我自己的虚拟机上)

六、致谢:

需要强调的是,AutoMD是一个建立在Desmond软件包基础上的脚本,模拟的质量由Desmond本身决定,脚本没有对模拟程序本身做任何的改动,且所有的学术贡献归功于D. E. Shaw Research (无商业利益相关)

AutoMD作为一个使用脚本,仅仅是为了解决了一些实际MD应用中的问题,方便初学者通过这个脚本快速上手MD,但请勿认为AutoMD是一种MD模拟的程序,其内核仍然是Desmond程序

本文所有内容均来自上海科技大学Wang-Lin,笔者整理使用经验而已。
请大家多多引用作者关于 AutoMD脚本的文章:A new variant of the colistin resistance gene MCR-1 with co-resistance to β-lactam antibiotics reveals a potential novel antimicrobial peptide. Liang L, Zhong LL, Wang L, Zhou D, Li Y, et al. (2023) A new variant of the colistin resistance gene MCR-1 with co-resistance to β-lactam antibiotics reveals a potential novel antimicrobial peptide. PLOS Biology 21(12): e3002433. https://doi.org/10.1371/journal.pbio.3002433


测试报告

集群运行Numpy程序的测试实践与注意事项

你正确安装Numpy了吗?

本测试主要使用的是某Numpy为底层的计算包,任务的核心在于求解矩阵对角化,使用的是LAPACK。计算的大头在于500次尺寸约为60000×60000的稀疏矩阵对角化计算。

从不同渠道安装的Numpy,其所使用的LAPACK优化可能并不一样,在不同的硬件上性能表现也大不相同。常见的优化有MKL、OpenBLAS和ATLAS,其中通常说来Intel的CPU上跑MKL会更快一些

一般来说,不考虑指定渠道,默认情况下

conda install numpy

从Anaconda下载安装会根据你的CPU自动选择,若是Intel则用MKL,若是AMD则用OpenBLAS。当然,你可以切换到conda-forge之类的去指定版本。

如果使用pip安装,

pip install numpy

则一律是OpenBLAS。

MKL的插曲

测试最初采用MKL版Numpy计算,通过环境变量MKL_NUM_THREADS这个环境变量设定不同的核数控制多线程计算(这是使用Numpy等存在隐性并行的库都需要注意的,参考常见问题-作业运行时实际占用CPU核数过多),在同一队列提交多个独占节点的计算任务。

MKL大多数情况下都比OpenBLAS快,即便是在AMD平台上也有传说中的MKL_DEBUG_CPU_TYPE=5可以强开对MKL的支持。

但是,本次测试却出现了非常有趣的现象:

image-1694673755359.png

通过eScience中心的监控系统查看节点计算情况,发现大多数进程都陆陆续续计算完毕,平均在40分钟左右;而少数任务,例如最初申请了16核,突然在40分钟前后发现线程数急剧减少至单核或少量核,出现“一核有难,多核围观”的经典场面,内存也被释放掉了。但是主要的计算阶段仍然没有输出计算结果说明并不是核心计算完成陷入单线程无法结束的问题。

image-1694673844023.png

最终计算完成的时间统计也剧烈起伏。经过网上的一通搜索,并未发现很多案例。作为猜测,将其它的LAPACK优化库限制核数加入,都没有改善。更换AMD队列,仍然是同样的问题。也就是说,这个情况的出现与是Intel还是AMD的CPU没有关系。

然而最终,尝试性更换至OpenBLAS版本Numpy,发现问题神奇地解决了。

多核情况测试

由于MKL版本的神秘BUG,后来的测试通过OpenBLAS版本进行。多核计算单个任务的总耗时结果如下:

image-1694674371326.png

可以发现,OpenBLAS版Numpy的计算在7702ib队列和6140ib在48核以下的趋势类似,但高于48核不太一样。7702ib队列上核数越多相对而言加速的趋势一致;而6140ib队列上,核数越多反而可能会有加速效果的下降。但由于7702ib的核数更多,因此并不能排除核数大于72时也会有类似的情况。

image-1694674459286.png

从加速比(相对串行计算的时间比值)来看,对于本测试任务,OpenBLAS Numpy的加速比极限约为4~5倍。

并行效率(相对串行计算的时间比值再除以核数)则随核数增多衰减极快,16核往上效率极低,全靠数量取胜。

投放任务的策略

对单个任务来说,我们只关心这一次计算的时间,因此时间肯定是越短越好。但是往往时间和核数(准确来说是申请CPU乘以时间)影响计算费用,因此计算核时的指标额外决定了是否划算。根据收费办法我们可以画出实际的花费。显然有些队列上有时候申请过多的核并不一定是划算的,这也是做基准测试的意义所在。

Cost.png

更多时候,我们可能面对的是多个计算量相当的任务,只是计算参数不同。这种情况下,我们可以根据下列公式计算:

image-1694675167489.png

其中,N_task 指的是总任务数,N_max指的是考虑申请的总核数,N_cores指的是单个任务申请的核数,T_p是单个任务并行计算的耗时,与单个任务申请的核数有关系。N_cores与T_p相乘即为单个任务的计算核时。

可以看到,总的核时(T_total乘以N_max)也和上文的单个任务类似。

单从性价比而言,不同的核数下,我们对单个任务每加速一倍花了多少钱,也可以算出:

性价比.png

对于Numpy(OpenBLAS)计算本任务而言,性价比最高的莫过于4核。因此综合考虑时间、性价比,4核是个不错的选择。

总结

本次尝试使用集群对Numpy计算进行加速。在尝试过程中,发现需要注意几个问题:

  1. Numpy(并行版本)是隐性并行,所以也需要有特定的环境变量来控制与申请核数匹配,不然会被作业监控杀掉。
  2. 基于MKL版Numpy或者调用Numpy的计算包计算时,出现了突然任务变慢的情况,而且会长时间不结束。这与LAPACK优化库(MKL或OpenBLAS或者其他)同当前计算包的兼容性可能有关系,如果发现类似情况,可以尝试排除此类软件依赖的数值计算库是否存在这样的不同优化(甚至编译方式)的区别。
  3. Numpy的并行计算存在一个加速效果的上限,对本次测试的任务来说约为4~5倍。从时间、性价比的角度来说,并非核数越多越划算,例如本任务中,较为经济而且时间可接受的一个合理范围为4~16核,其中4核最具性价比;对单个任务,其花费可能尚可,但是日积月累也许是笔不小的数目。

收费办法

e-Science 中心提供增值的计算和存储服务,为合理资源使用收取一定费用,以下皆为校内价格,校外均按照两倍计算。

计算存储资源服务

集群计算资源和存储资源须要付费使用,收费标准如下:

CPU机时

按照用户作业占用的CPU核*时收费,独占作业按照占用节点的所有CPU核收费,排队时间不收费。

队列 元/核/小时
e52643tgb e52692v2ib e52680v3ib e5v3ib e52630v4 e52640v4 e52650v4 e52680v4ib e52682v4opa e74820v4 5218q 7702ib 5220r 7k83 9654 9754 cpu1 0.05
6140ib 9242opa 6226rib 6230r 5318h 6330ib 0.06
e7v4ib 6338 6458q 0.10

加速卡机时

按照用户作业占用的加速卡*时收费,CPU核按照占用节点加速卡的比例分配免费使用。为便于计算,加速卡费用平摊到CPU核统一计费,独占作业按照占用节点的所有GPU收费,排队时间不计算费用。

队列 元/卡/小时 元/核/小时
e5v3k40ib 1.2 =0.1
e5v4p100ib 1.68 =0.12
6148v100ib 3.6 =0.09
7552v100 3.6 =0.25
62v100ib 3 =0.6
722080tiib 1.2 =0.3
72rtxib 1.8 =0.45
83a100ib 4.8 =0.6
813080 1.2 =0.2
723080 1.2 =0.075
723090ib 1.8 =0.3
814080 1.2 =0.1
944090d 1.8 =0.05625
734090ib 75434090ib 734090d 1.8 =0.225

计算机时折扣

校内用户按照用户组计费年的计算机时费总额打折。

计费机时 折扣
大于5万 9折
大于10万 8折
大于50万 7折

并行存储

按照用户使用的空间收费,每个组免费提供1TiB空间。

路径 元/GiB/天 元/TiB/年
/fsa 0.00161 ≈600

归档存储

按照用户使用的空间收费。

路径 元/GiB/天 元/TiB/年
/archive 0.00080 ≈300
ftp://stor.nju.edu.cn 0.00080 ≈300

云盘存储

按照用户申请的容量配额收费。

网址 元/GB/天 元/TB/年
box.nju.edu.cn 0.00329 ≈1200

设备托管服务

用户自行负责软硬件维护,将设备放置在本中心机房须要付费,收费标准如下:

基本收费

根据用户托管设备占用的空间和功耗按较高者收费,以下为典型设备的参考价格。

类型 元/月
CPU计算节点(≤300W) 150/台
CPU计算节点(≤600W) 300/台
CPU计算节点(≤1200W) 600/台
GPGPU等加速卡(≤150W) 75/块
GPGPU等加速卡(≤300W) 150/块
GPGPU等加速卡(≤450W) 225/块
GPGPU等加速卡(≤600W) 300/块
设备占用空间(上述类型配置和占用空间按较高者收取) 250/U

超限系数

当机房内完整的空机柜不足20%时,以课题组为单位根据占用机柜数量按系数倍数收费;机房内空机柜大于20%时,本系数均按1计算。

机柜数量 系数
1 1
2 1.25
3 1.75
4 2.5

时间系数

从设备安装开始,按照使用年限系数倍数收费。

年限 系数
≤5年 1
6年 1.3
7年 1.6
≥8年 1.9

共享

托管用户根据不同共享类型,按系数倍数收费。共享资源给其他用户使用,可收取计算资源机时费用于冲抵托管费用,具体收费标准参考本中心计算资源机时费,可由本中心和托管用户协商决定。

类型 系数
独享使用 1
统一管理共享使用 0.8

云平台

虚拟机计算存储资源须要付费使用,收费标准如下:

CPU

按照虚拟机配置的CPU数量收费

类型 元/核/天
Intel Xeon Platinum 8358 逻辑核 1.2

内存

按照虚拟机配置的内存容量收费

类型 元/GB/天
DDR4 3200 ECC RDIMM 0.2

存储

按照虚拟机配置的硬盘容量收费

类型 元/GiB/天
Huawei OceanStor Dorado 5500 V6 All-Flash Storage (NVMe over RoCE) 0.02

归档存储

虚拟机通过NFS访问归档存储,按照前述归档存储(/archive)收费

备份

每天进行备份并按照统一的天/周/月/年策略保留,按照备份存储使用的空间收费

类型 元/GiB/天
虚拟机镜像 0.002

附注

人工微结构科学与技术协同创新中心 e-Science 中心

校内用户超算集群申请与基本使用简明指南(2024年以前,已过时)

本文将简述集群使用的基本过程,但是详细的操作和使用仍然需要仔细阅读超级计算使用说明。

关于scc.nju.edu.cn和access.nju.edu.cn的信息已经过时,请阅读最新版:校内用户超算集群申请与基本使用简明指南(2024年后新版)

一、账号获取

  1. 新用户在scc.nju.edu.cn首页点击注册账户

  1. 校内用户绑定统一身份认证:① “统一认证平台用户”选择“是”;②点击验证信息;③获取验证码,验证码通过邮箱发送。

  1. 填写表单,用户组输入导师账号名(不知道就去问课题组里),提交申请;
  2. 组长(即课题组里负责审批的人,如果不清楚也问组里)登录scc.nju.edu.cn自助审批新用户,通过后账号立刻生效,即可使用。
  3. 新用户再次登入scc.nju.edu.cn,即可进行一些账号信息的维护,包括重置密码、动态口令等。

如果组里之前没注册过相关账号,请联系姚老师:

二、登入资产

注册成功后,用注册成功的账号(不是统一身份认证)访问access.nju.edu.cn

2.1、首次登入

首次登入会要求设置两步认证:

两步认证请另行参阅:eScience服务双重认证简明指南

按照需求使用一个验证器即可。但注意,如果没有备份和导出功能,手机一旦更换,这个设置也会失效(当然,你可以直接去scc.nju.edu.cn重置,如上文所说)。 下面以Microsoft Authenticator(绑定微软账号云端备份,推荐,但可能安卓/鸿蒙手机需要谷歌框架,不同机型如何打开或安装谷歌框架请直接百度)为例:

扫描二维码即可添加成功。

2.2、绑定成功后登入

打开前面的两步认证软件,点开对应access.nju.edu.cn的账号:

获取其中的一次性密码代码,登入

进入后,可以看见你的账户下分配的资产:

按照本页顶端的提示,安装ShtermClient之后,点击资产,会显示四个按钮:

三、登录资产

3.1、SSH客户端登入:以Xshell为例

由于命令行一定是需要跨过去的坎,所以后面默认会主要使用ssh方式。 Windows下推荐使用Xshell(当然你有其他的客户端甚至是原生的Linux都可以): 家庭/学校免费 - NetSarang Website

安装完打开Xshell,点击左上角的新建来新建会话

设置自定义的名称之后,将主机设置为access.nju.edu.cn(这是教育网/校园网入口):

确定后保存。

双击刚刚新建的会话,然后第一次连接可能会出现“SSH安全警告”,询问是否“接受此主机密码?”,接受并保存即可。

下一个可能弹出的页面中,会询问你的用户名(注意!不是统一身份认证,是你的集群上的用户名!),为了方便可以勾选记住用户名

下一步中,需要输入密码。密码请遵循账户密码+两步认证的格式,但是中间用空格空开。例如,账户密码为:qwerty,此时两步认证软件软件内的代码为123456,那么你这里需要填写qwerty 123456。千万不要勾选记住密码,因为这个格式显然后半部分每次会变。

登入成功后,是登录节点。应当会这么显示:

友情提示——在这里改字体和大小:

在这里改配色方案:

对自己的眼睛好一点……

扩展阅读: 什么是SSH?SSH是如何工作的? - 华为

3.2、更易用的文件传输:Xftp

集群支持sftp方式的文件传输。比起使用rz、sz等命令的方式,sftp客户端具有易用、直观的特点,适合传输多个、大批量的文件。Windows下,这里和Xshell配套的软件便是Xftp。

XFTP - NetSarang Website

Xftp使用参数:

非Windows用户的SFTP方案见:SFTP登录(文件传输)

其他情况可以去远程登录文档内寻找答案。

四、Linux命令行使用

命令行五花八门,说到底,都是命令 参数(注意中间的空格)这种格式。

基本命令行参考:

命令 用途
ls <路径> 列出指定目录<路径>下的文件和文件夹
cd <路径> 切换到指定目录<路径>
mkdir <文件夹> 在当前目录创建一个叫<文件夹>的文件夹
vim <文件> 使用Vim编辑文本文件<文件>(脚本之类的),如果<文件>不存在,就创建它。Vim是一款非常强大的命令行编辑器,学习见:Linux vi/vim | 菜鸟教程GitHub - wsdjeg/Learn-Vim_zh_cn
rzsz <文件> 少量小文件传输和下载
tar 打包压缩与解压,可以用来打包或解压多个文件
cp 复制
mv 移动
rm 删除

上表只是告诉了你一个目录,具体各个命令如何使用你可以根据上述表来搜索学习。 在集群上为了提交作业,还需要知道bsubbjobs等集群使用的lsf作业系统命令。这部分需要仔细阅读:https://doc.nju.edu.cn/books/efe93/page/4f4ad

尽管有SFTP软件可以免去大量Linux命令文件操作,但是还是建议稍微了解一些Linux的基础命令。

五、一个提交作业的演示

基本的脚本提交

以提交一个DMI_pbc.mix的mumax计算脚本为例: ssh登入后,在登录节点上输入:

ls

查看当前目录(登录节点的用户主目录)有些什么。

mkdir mumax_20221014
cd mumax_20221014

第一行:创建一个mumax_20221014的文件夹(make directory)管理这一次的计算任务

第二行:切换进刚刚创建的那个目录(change directory)

rz

唤起传输界面:

选择要上传的mumax计算脚本DMI_pbc.mix文件。

vim job.lsf

创建一个job.lsf的作业提交脚本,并且参照https://doc.nju.edu.cn/books/efe93/page/mumax 的示例写入:

#BSUB -q 723090ib
#BSUB -gpu num=1

mx3in=DMI_pbc.mix

module load cuda/11.2.0
/fs00/software/mumax/3.10-cuda11.0/mumax3 $mx3in

第1行:作业参数,指定使用的计算队列

第2行:作业参数,指定使用的GPU数目

第4行:mx3in变量设定为DMI_pbc.mix,当然你可以不叫这个变量名

第6行:载入cuda-11.2.0的依赖(见:https://doc.nju.edu.cn/books/efe93/page/nvidia

第7行:使用mumax3软件输入mx3in变量的值所表示的计算脚本

当然,如果上述流程实在用不习惯,也可以:

  1. 直接用Xfce4从图形界面登入,用文本编辑器修改

  1. 使用SFTP方案直接在本地修改,然后上传回去

无论是如何上传脚本,从Windows上传回集群最好用dos2unix命令来转换换行符,或者干脆在Windows下通过编辑器如VS Code自己的换行符切换来处理这个问题。

作业提交脚本本质上其实是shell脚本,因此Shell 教程 | 菜鸟教程也通用。

bsub < job.lsf

job.lsf通过bsub命令按照作业提交脚本的设定提交至计算队列。提交完成后会显示:

[hfd_jitz@login1 mumax_test_2]$ bsub < mumax_job.lsf 
Job <40999791> is submitted to queue <723090ib>.

查看作业情况

bjobs

可以查看你当前在跑的任务情况:

[hfd_jitz@login1 mumax_test_2]$ bjobs
JOBID    USER        STAT  QUEUE       JOB_NAME   SUBMIT_TIME  EXEC_HOST
40999791 hfd_jitz    RUN   723090ib    *x3 $mx3in Oct 14 22:08 6*m002

任务ID:40999791

计算队列:723090ib

CPU核数:6(单GPU分配的默认值)

主机:m002

特别地,本例子是一个GPU任务,因此还可以这样查看GPU任务的运行情况:

ssh m002

登入到计算节点(注意看@前后的“host”已经从login1变为m002):

[hfd_jitz@login1 mumax_test_2]$ ssh m002
Last login: Fri Oct 14 11:37:26 2022 from m002
[hfd_jitz@m002 ~]$ 

在计算节点执行

nvidia-smi

可以查看GPU上的资源使用情况,对应的GPU编号即是你在使用的部分。

top

可以查看当前计算节点的任务。

此外,还有一个可视化查看的方法:https://mon.nju.edu.cn

进入grafana,在General/NVIDIA DCGM Exporter中,instance为m002:9400(也就是刚才那个m002)的GPU情况如下:

可以看出,上述任务15分钟不到就跑完了。

如果需要从计算节点m002返回到登录节点login1,则输入

exit

如果要下载文件,通过sz <文件路径>命令可以下载单个文件;或者通过Xftp传输管理;或者先通过图形界面(Xfce4)进行一些简单的数据结果查看,再把数据弄回来。

此外,亦可通过HPC账号集成的云盘来实现文件同步:集成云盘,其用法与Box云盘基本一致。