CP2K批量计算:FARMING管理多个输入
用一个FARMING主输入启动两个真实He原子子任务,说明目录、MPI分组与各自输出位置。
阅读本篇目录
有多个彼此独立的CP2K小输入时,可以用FARMING统一启动。本例给两个He任务使用不同Gaussian指数,让主程序分组执行并分别写出能量。FARMING不等同于Slurm调度器,仍需要先向集群申请计算资源。
1. 查看结果与目录#
下载CP2K原子、批量与力匹配资料包,保存为example.zip:
python3 -m zipfile -e example.zip .
cd cp2k-atom-farming-forcefit
bash results.sh
bash read.sh
bash plot.sh
这几条命令先读取随包保存的真实计算结果。CSV在data/,图片在figures/,完整输入和原生输出分别在inputs/与reference-results/。
find inputs/analytic-Gaussian/farming -name '*.inp'
cat data/CP2K-He-analytic-energy.csv
目录中input.inp是主输入,job1/input.inp与job2/input.inp是两个完整的ATOM子输入。子目录名称要与主输入一致。
2. 主输入#
&GLOBAL
PROGRAM_NAME FARMING
PROJECT farming-he
RUN_TYPE NONE
&END GLOBAL
&FARMING
NGROUP 2
&JOB
DIRECTORY job1
INPUT_FILE_NAME input.inp
&END JOB
&JOB
DIRECTORY job2
INPUT_FILE_NAME input.inp
&END JOB
&END FARMING
NGROUP 2把本例2个MPI进程分成两组,每组执行一个原子任务;不是每个子任务都获得2个MPI进程。更改任务数量或每个任务的并行需求时,要同步考虑总进程数和分组。
两个子输入只有Gaussian指数不同,可直接查看:
grep -n 'S_EXPONENTS' inputs/analytic-Gaussian/farming/job1/input.inp
grep -n 'S_EXPONENTS' inputs/analytic-Gaussian/farming/job2/input.inp
它们分别是0.5和1.0;完整原子输入说明见ATOM教程。
3. 提交与底层命令#
本例采用集群cp2k/2026.2-8173m,Intel oneAPI 2024.2和Intel MPI构建,CPU路径,不使用GPU。新解压目录中运行:
sbatch run.slurm
脚本依次执行原子、两个FARMING子任务、Ar参考MD和参数拟合。按整节点规则申请56核,最多2个MPI进程、每进程1线程;这是功能教学,不是性能测试。完成后:
bash read.sh work analysis-new
bash plot.sh analysis-new figures-new work
已有结果可直接读取,不必等待CPU队列,也不要把新模拟直接放在登录节点。
本例FARMING步骤在已分配计算资源中执行:
cd work/analytic-Gaussian/farming
mpirun -np 2 cp2k.psmp -i input.inp > farming.out
上面的整包脚本已经执行这一阶段,无需再重复运行。
4. 到子目录查输出#
grep 'Total Energy ::' reference-results/analytic-Gaussian/farming/job1/PROJECT.out
grep 'Total Energy ::' reference-results/analytic-Gaussian/farming/job2/PROJECT.out
| 子任务 | Gaussian指数 | 实际能量/Eh |
|---|---|---|
| job1 | 0.5 | −2.215632107579 |
| job2 | 1.0 | −2.254697319327 |
两个子任务都完成了原生计算,能量与各自单Gaussian解析模型一致。排查自己的批量输入时,既要检查FARMING主输出,也要进入每个子目录看对应程序是否正常结束,不能只看到主任务退出就认为每个科学计算都已收敛。