CP2K专题

CP2K GPU准确性:相同输入的能量与力对照

用正式重复结果核对P100/V100和不同卡数的能量、96原子全部力,解释后端一致性与科学收敛的区别。

更新于 2026-11-13约 3 分钟阅读按任务与环境选择适用配置
阅读本篇目录

GPU后端比较应固定物理输入与收敛条件,再逐项读取能量和力。本篇使用GPU专题的同输入数据,比较P100、V100 16GB及卡数变化;这组数据不包含新的CPU参考。

1. 复算读取与图表#

下载CP2K GPU输入、实际输出、CSV与绘图资料包,保存为example.zip:

python3 -m zipfile -e example.zip .
cd cp2k-gpu-practical-data
bash results.sh
bash read.sh
bash plot.sh

资料来自2026年10月22日实际Slurm计算;本次复用结果,不重新跑性能任务。data/是逐次数据,reference-results/保存原生输出,figures/为可重画图片。

同输入GPU能量和力的一致性

每个模型以P100单卡第1次正式运行为参考。36行比较包含两个参考自身,因此是34个非自身比较,不能称为36个独立算例。图中为零的差值不画在对数轴上,数据表保留原值。

2. 实际比较到什么#

模型 比较范围 本次最大差
96原子PBE32 同输入总能量按原子数归一 约1.874×10⁻¹² Ha/原子
96原子PBE32 每次全部96×3力分量 约1.0×10⁻¹⁰ Ha/Bohr
9原子HF3 同输入能量 数据见CSV;未做本批杂化力/应力比较

这些差值表示同一个有限基组、网格和算法输入在不同GPU配置下的一致性,不能据此宣称真实材料性质具有相同数量级的绝对精度。

3. 检查操作#

python3 read-one.py reference-results/p100/pbe32-1g-r1
head data/CP2K-GPU-energy-force-comparisons.csv
head data/CP2K-GPU-PBE32-force-components.csv

read-one.py检查单个输出的正常结束、SCF与有限能量;完整read.sh再对照输入哈希和逐分量数值。原比较要求每原子能量差小于1E-7 Ha、最大力分量差小于1E-6 Ha/Bohr,本次数据都在这个预设范围内。

4. 复现并比较自己的结果#

先在新解压目录选择与账号资源相符的提交脚本,例如P100单卡或V100 16GB单卡:

sbatch p100-pbe32-1g.slurm

或:

sbatch v100-pbe32-1g.slurm

这是核时GPU分区的示例脚本。套餐账号应使用yskit中对应账号、平台的CP2K模板,并保持本例MPI/OMP与GPU申请匹配。每个作业只跑一个配置,先预热一次,再正式运行三次;不会自动提交全部配置。新结果可以这样读取:

python3 read-one.py work/p100-pbe32-1g/r1

完整历史比较仍用bash read.sh。不要把Slurm脚本直接改成在登录节点执行,也不要把P100模块用于V100任务。

先保证相同输入、相同物理方法和足够SCF收敛,保存所有原子力,而不仅比较最后一个总能量。若是自己的结构、泛函、磁性、电荷或HF截断势,还应检查相应网格、基组、筛选与目标性质。

本例HF3使用SCF 1E-9与Schwarz 1E-10,只比较9原子模型能量;没有把它扩展成杂化力、应力、几何优化或长MD的全面精度结论。ADMM改变辅助基组与近似定义,不能把不同设置的绝对能量差直接解释成GPU数值误差。

5. 下一步做什么检查#

实际生产任务先做小规模单点或短流程:确认SCF、E/F、GPU后端和资源,再测试目标相对能、几何、频率或短NVE等。重复运行只能观察数值与计时稳定性,不能代替科学参数收敛。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗