Skip to content

🔁 主动学习工作流

workflow_active_learning_dev.sh 用于组织一轮 NEP 主动学习流程:运行 GPUMD 分子动力学、筛选结构、抽样、提交第一性原理计算,并进行 NEP 预测检查。

脚本位置: Scripts/workflow/

概览

该脚本自动化了 NEP 主动学习的一轮迭代。典型流程包括:

步骤 操作 目的
1 运行 MD 模拟 使用当前 NEP 模型生成候选结构
2 过滤结构 移除不合理的构型(短距离、大盒子)
3 采样结构 选择多样性高或偏差大的结构进行 DFT 计算
4 运行 SCF 计算 计算 DFT 参考能量/力
5 NEP 预测 检查模型在新结构上的精度

与菜单驱动的模块不同,这个工作流是一个需要按体系修改后直接运行的 shell 脚本:

bash Scripts/workflow/workflow_active_learning_dev.sh

下面按脚本中的主要代码块说明每一步的作用。

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 环境,也可以直接后台运行:

nohup bash workflow_active_learning_dev.sh > workflow.log 2>&1 &

2. 基本设置

脚本会进入提交目录,并加载提交模板:

cd $SLURM_SUBMIT_DIR
source ${GPUMDkit_path}/Scripts/workflow/submit_template.sh
python_pynep=python
  • GPUMDkit_path 是安装脚本写入的 GPUMDkit 路径。
  • python_pynep 仅用于旧的 PyNEP 兼容分支。

3. 主要变量

这个工作流适合已经有初始 nep.txtnep.intrain.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_distbox_limit 用于过滤明显不合理的结构。
  • max_fp_num 控制最多提交多少个单点计算。
  • sample_method 可选 uniformrandompynep

4. 检查输入文件

常见输入包括:

  • nep.txt
  • nep.in
  • train.xyz
  • run_*.in(如 run_1.inrun_2.in 等)
  • INCAR
  • POTCAR
  • KPOINTS
  • 初始采样结构文件,例如 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.txtrun_*.in 文件、结构文件和 DFT 输入文件等公共资源。

6. 提交 MD 任务

submit_gpumd_array md ${sample_struct_num}
sbatch submit.slurm

脚本会通过提交模板创建数组任务。不同集群上的提交命令和模板可能需要自己修改。

7. 检查任务完成

脚本会持续检查 00.md/ 下各个 sample_*/log 文件,确认是否出现:

Finished running GPUMD.

如果发现 Error,脚本会停止。

8. 分析和过滤结构

MD 完成后,脚本会进入 01.select,对 dump.xyz 中的结构进行筛选。常见检查包括:

  • 最小原子距离;
  • 模拟盒子边长;
  • 结构数量是否超过 max_fp_num

这些步骤会调用 analyzer 和 sample_structures 中的脚本。

9. 抽样方法

脚本根据 sample_method 选择抽样方式:

case $sample_method in
    "uniform")
    "random")
    "pynep")
  • uniform:均匀抽帧;
  • random:随机抽帧;
  • pynep:旧的 PyNEP 兼容分支。

10. 提交 SCF 计算

抽样完成后,脚本会提交 VASP 单点计算:

submit_vasp_array scf ${selected_struct_num} ${prefix_name}

这里的 prefix_name 会用于计算目录命名,也方便后续追踪结构来源。

11. Prediction 步骤

最后脚本会提交 NEP prediction,用于检查当前模型在新增结构上的误差。


这个脚本和计算环境强相关,正式使用前建议先用小体系或少量结构测试一轮,并检查提交模板、路径和输入文件是否符合自己的集群环境。