软件案例|CALYPSO
本文介绍如何在 Bohrium上 运行 CALYPSO 任务。
简介
寻找势能面上的极小值点结构是长期以来结构预测的重要目标。基于群体智能的 CALYPSO 材料结构预测方法和软件(详见 http://www.calypso.cn ),是我国自主创新发展的方法和软件,仅依据材料的化学组分即可开展材料微观原子结构的预测,已经广泛应用于晶体、表面(含二维单/多层材料)、界面、团簇和过渡态的创新性设计,并能开展功能导向(如能隙、硬度和电子密度等)的逆向材料设计。
本案例将以进行一次 B-N 的变组分结构预测为例,介绍 CALYPSO_SaaS 的基本用法。
一、在 Bohrium 上运行 CALYPSO 任务
本案例任务完整运行约需 40min
镜像选择 calypso-bohrium:7.3.5
,节点配置任意。节点开机后连接该控制节点。
1、启动 calypso-bohrium 节点
2、准备输入数据
CALYPSO 的输入文件均已存储至 CALYPSO-Bohrium_example
文件夹内,(你可以在左侧点击数据集查看相应文件):
为了方便后续的可视化,需要将例子储存在 /data
目录下(该目录在项目之间共享):
当前路径为:/data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example
您可以随时通过该链接下载样例文件。
本案例结束之后您可以自行选择是否保留该目录
/data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/
。
该目录中包含
templates/input.dat.example/
,进行晶体预测、层状结构预测、变组分结构预测( VSC )等的样例input.dattemplates/abacus_example/
,使用 ABACUS 作为第一性原理计算软件进行 CALYPSO 结构预测的所有需要的输入templates/qe_example/
,使用 QE 作为第一性原理计算软件进行 CALYPSO 结构预测的所有需要的输入templates/vasp_example/
,使用 VASP 作为第一性原理计算软件进行CALYPSO结构预测的所有需要的输入
下文将以vasp_example
为例进行说明。
该目录中包含
- CALYPSO 及 VASP 的输入文件:
- 计算资源配置文件(详见下文:
machine.json
,dpdispatcher 的参数文件,控制镜像的使用resources.json
,dpdispatcher 的参数文件,控制每个机器运行任务的个数
- 辅助控制文件:
run.sh
,CALYPSO-SaaS 的任务提交脚本del.sh
,CALYPSO-Saas 的目录清理脚本,用于在同一目录重新计算时批量删除无用的文件
3、修改CALYPSO控制文件
根据您的结构预测需求修改CALYPSO的控制文件input.dat
,本案例进行 B-N 变组分结构预测演示,可直接复制templates/input.dat.example/pso/input.dat.vsc
替换本目录下的input.dat
:
'/data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/templates/vasp_example/input.dat'
4、修改Bohrium配置文件
修改计算资源配置machine.json:
CALYPSO-SaaS的任务提交和回收全部由 dpdispatcher 完成,因此需要修改 dpdispatcher 的配置文件 machine.json 。
文件夹内已经包含配置文件 machine.json
,您也可以通过以下 Python 代码创建或编辑 machine.json
:
已生成 /data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/templates/vasp_example/machine.json, 参数为: { "batch_type": "Lebesgue", "context_type": "LebesgueContext", "local_root": "./", "remote_profile": { "email": "******", "password": "******", "program_id": 123456, "_keep_backup": true, "input_data": { "job_name": "calypso.Bohrium.test.1", "image_name": "******", "job_type": "indicate", "log_file": "log", "grouped": true, "disk_size": 200, "max_run_time": 40, "machine_type": "c16_m64_cpu", "platform": "paratera", "on_demand": 0, "out_files": [ "OUTCAR", "CONTCAR", "OSZICAR", "fp.log", "log", "err" ] } } }
其中需要修改:
email
,您的登录邮箱,用于计算节点认证password
,您的账户密码,用于计算节点认证program_id
(数字),计算节点的计费项目 ID,前往 Bohrium 项目控制台查看job_name
,任务名称,将被显示在 Bohrium 任务控制台,应避免重名导致无法区分任务image_name
,第一性原理计算软件的镜像地址,(需您提供授权凭证到bohrium@dp.tech 邮箱获取地址)
部分其他参数:
platform
,执行计算任务的平台,可选paratera
(并行科技)、ali
(阿里云)等machine_type
,执行计算任务的机器规格max_run_time
,每个计算任务的最大运行时间(单位:分钟)
5、提交任务
执行任务提交脚本run.sh
,将 CALYPSO 任务提交到Bohrium云平台,日志重定向到out文件:
0
os.system() 函数会返回一个整数,这个整数表示命令执行的结果。返回值为 0 表示命令执行成功,而非零值表示命令执行失败。
或者手动通过
run_calypso
执行,重定向到out
:nohup run_calypso > out 2>&1 &
6、查看任务
提交成功后可通过showjob
命令查询任务运行情况:
name PID work_path run_calypso 1219 /data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/templates/vasp_example run_calypso 1727 /data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/templates/vasp_example calypso.x 1288 /data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/templates/vasp_example calypso.x 1289 /data/bohr/bohrium-calypso-kdjo/v1/CALYPSO-Bohrium-example/templates/vasp_example
0
showjob
# >>> name PID work_path
# >>> run_calypso *** /data/***
同时您也可以在监控任务文档中了解如何在 Bohrium 平台查看任务状态。
二、任务的结果分析
我们在镜像中准备了更新的结构预测结果分析脚本 cak3.py
,目前该脚本除基础功能外,还支持对结构预测演化的进程可视化分析,以及对变组分结构预测的 convex hull
进行可视化分析。
预测结构提取
CALYPSO 运行的结果均存放于运行目录中的results
文件夹中,进入该目录:
运行 cak3.py
,程序会自动分析您的预测结果,并将前五十个焓值最低的结构信息存于Analysis_Output.dat
中:
--vasp
选择输出 vasp
格式,-a
输出所有结构,-m
多组对称性容忍度:
当体系为变组分结构预测时,将根据组分分文件夹输出。
结构预测演化进程可视化
输出evo.png
,让我们来查看一下
变组分结构预测相图可视化
绘制convex hull
:
运行该命令需要在
input.dat
中提前给定每个单质元素每原子的能量
输出convexhull.csv
、convexhull.png
。
三、计算目录清理
重新计算时快速清理目录中不需要的文件:
执行该命令将删除所有匹配
POSCAR_*、caly.log、contcar.py、cp2k.py、get*、gpid.py、gulpt.py、mpi*、pos*、pwscf.py、read*、remoteparallel.py、results/、rvasp.py、surface_run.py、v2lammps.py、writekp.py、step*、step、pwscf_*、data、log_dir、backup、*.sub、 lbg-*.sh、*_finish
等的文件。 运行此命令前请仔细核对,以免删除您需要保留的文件!
四、续算
在 Bohrium 平台上通过 dpdispatcher
提交 CALYPSO
结构预测任务后,若任务意外中断,需要续算,分为两类:
1、CALYPSO某代结构演化完毕且任务已提交,与计算节点断联
CALYSPO 控制节点需要保持与计算节点的通讯才能向计算节点发送任务、获取计算节点结果。若在CALYPSO等待计算节点计算的过程中,发生控制节点关机或误杀后台 CALYPSO
任务脚本等情况,将导致控制节点与计算节点断联。
检查
CALYPSO
的日志判断当前运行代数 若通过bash run.sh
运行任务,则日志在out
文件中,若存在,可打开后通过查看已产生的结构的数目来判断当前代数或根据CALYPSO
图标下的step=n
来判断当前代数,确定好当前代数后,继续进行以下步骤修改
input.dat
中(若不存在这些行则添加)PickUp=T
PickStep=n
重新提交任务
或
只有完全相同的*.json才可以进行续算!dpdispatcher 会根据当前的参数文件(
machine.json
&resources.json
)哈希值,如果当前续算的哈希值与之前提交的哈希值相同,则触发续算。 若想要进行续算,一定不要更改\*.json
文件;相反,若对\*.json
文件进行任何修改(如增删一个空格等),则会不进行续算,而是进行从第一代开始的计算。
2、CALYPSO某代结构演化进程中断
计算节点计算完成,结果已经拉回 CALYPSO
控制节点,在产生下一代结构时出现异常,如CALYPSO报错中断、节点关机、或手动中止等。 ./data
中保存了此前计算的所有代的输出文件,以VASP
为例,假设我们想要从CALYPSO
第 n 代 DFT 计算后开始续算:
确定续算代数,同上可以通过日志文件判断,假设续算代数为 n
修改
input.dat
中:PickUp=T
PickStep=n
从
./data
中将第 n 代结构的 OUTCAR、CONTCAR 和 POSCAR 拷贝到当前目录并重命名为 *_n 。该步骤可以通过修改back.sh
中的代数为 n ,再执行bash back.sh
完成。在当前文件夹下创建一个名为restart的文件
touch restart
运行
bash run.sh
五、任务中止与删除
中止任务需要依次在运行 calypso 的控制节点和计算节点杀掉进程:
杀掉 calypso 控制节点的 calypso 进程: 为了区分在控制节点的不同任务,使用前述 showjob 命令即可方便快捷查看当前运行的 calypso 程序、PID以及运行的目录,根据 PID 杀掉即可。
杀掉计算节点进程: 杀掉控制节点的 calypso 不会中止当前正在计算节点计算的任务,因此需要手动杀掉计算节点的任务。 每一代结构的提交都会绑定在一个group_id下,Bohrium 主页任务面板可以看到各任务组 id。 在控制节点进程杀掉后,可以使用lbg任务管理命令在命令行删除,也可以登录到Bohrium界面进行删除
- 如果是想杀掉某任务组的任务,可以根据任务名称(machine.json中的job_name)或group_id确定要杀掉的任务,右边选择中止任务或删除
- 如果是想杀掉某个任务,需要确定该任务的job_id,进到任务组中找到对应的job_id进行中止或删除
注意:中止任务能够安全停止正在运行的任务并保存运行结果,删除会将所有的计算数据全部删除