🔁 主动学习工作流
workflow_active_learning_dev.sh 用于组织一轮 NEP 主动学习流程:运行 GPUMD 分子动力学、筛选结构、抽样、提交第一性原理计算,并进行 NEP 预测检查。
脚本位置: Scripts/workflow/
概览
该脚本自动化了 NEP 主动学习的一轮迭代。典型流程包括:
| 步骤 | 操作 | 目的 |
|---|---|---|
| 1 | 运行 MD 模拟 | 使用当前 NEP 模型生成候选结构 |
| 2 | 过滤结构 | 移除不合理的构型(短距离、大盒子) |
| 3 | 采样结构 | 选择多样性高或偏差大的结构进行 DFT 计算 |
| 4 | 运行 SCF 计算 | 计算 DFT 参考能量/力 |
| 5 | NEP 预测 | 检查模型在新结构上的精度 |
与菜单驱动的模块不同,这个工作流是一个需要按体系修改后直接运行的 shell 脚本:
下面按脚本中的主要代码块说明每一步的作用。
1. SLURM 设置
脚本开头包含集群提交参数,例如:
#!/bin/bash -l
#SBATCH -p intel-sc3,intel-sc3-32c
#SBATCH -q huge
#SBATCH -N 1
#SBATCH -J workflow
#SBATCH -o workflow.log
#SBATCH --ntasks-per-node=1
这些参数需要根据自己的集群环境修改。如果没有 SLURM 环境,也可以直接后台运行:
2. 基本设置
脚本会进入提交目录,并加载提交模板:
cd $SLURM_SUBMIT_DIR
source ${GPUMDkit_path}/Scripts/workflow/submit_template.sh
python_pynep=python
GPUMDkit_path是安装脚本写入的 GPUMDkit 路径。python_pynep仅用于旧的 PyNEP 兼容分支。
3. 主要变量
这个工作流适合已经有初始 nep.txt、nep.in、train.xyz 和 GPUMD/DFT 输入文件,并希望在集群上自动扩展训练集的情况。
脚本开头通常需要根据体系修改:
work_dir=${PWD}
prefix_name=LiF_iter01
min_dist=1.4
box_limit=13
max_fp_num=50
sample_method=pynep
pynep_sample_dist=0.01
prefix_name用于命名本轮计算。min_dist和box_limit用于过滤明显不合理的结构。max_fp_num控制最多提交多少个单点计算。sample_method可选uniform、random或pynep。
4. 检查输入文件
常见输入包括:
nep.txtnep.intrain.xyzrun_*.in(如run_1.in、run_2.in等)INCARPOTCARKPOINTS- 初始采样结构文件,例如
sample_struct.xyz
脚本会把公共输入移动到 common/,并创建 00.md/、01.select/ 等工作目录。
5. 文件组织
脚本会创建公共输入目录和 MD 目录:
mkdir 00.md common
mv ${work_dir}/{nep.txt,nep.in,*.xyz,run_*.in,INCAR,KPOINTS,POTCAR} ./common
cp ${work_dir}/common/$sample_xyz_file ${work_dir}/00.md
00.md:用于运行 GPUMD MD 采样。common:保存nep.txt、run_*.in文件、结构文件和 DFT 输入文件等公共资源。
6. 提交 MD 任务
脚本会通过提交模板创建数组任务。不同集群上的提交命令和模板可能需要自己修改。
7. 检查任务完成
脚本会持续检查 00.md/ 下各个 sample_*/log 文件,确认是否出现:
如果发现 Error,脚本会停止。
8. 分析和过滤结构
MD 完成后,脚本会进入 01.select,对 dump.xyz 中的结构进行筛选。常见检查包括:
- 最小原子距离;
- 模拟盒子边长;
- 结构数量是否超过
max_fp_num。
这些步骤会调用 analyzer 和 sample_structures 中的脚本。
9. 抽样方法
脚本根据 sample_method 选择抽样方式:
uniform:均匀抽帧;random:随机抽帧;pynep:旧的 PyNEP 兼容分支。
10. 提交 SCF 计算
抽样完成后,脚本会提交 VASP 单点计算:
这里的 prefix_name 会用于计算目录命名,也方便后续追踪结构来源。
11. Prediction 步骤
最后脚本会提交 NEP prediction,用于检查当前模型在新增结构上的误差。
这个脚本和计算环境强相关,正式使用前建议先用小体系或少量结构测试一轮,并检查提交模板、路径和输入文件是否符合自己的集群环境。