GPUMD:训练与使用温度依赖NEP
从电子自由能标签到model_type 3、无温度对照、独立几何与5000 K插值,附完整终端流程。
阅读本篇目录
同一个几何在不同电子温度下可以有不同的自由能。普通NEP只读几何,无法区分这些输入;model_type 3为当前部署版提供的温度依赖自由能模型。本篇使用前一篇87次实际VASP计算的数据,训练温度模型,并与同预算、不含温度输入的模型对照。
1. 先查看已有实算结果#
下载电子温度、完整输入、实际标签、训练模型与绘图脚本,保存为gpumd-electronic-temperature-wave216.zip。
unzip gpumd-electronic-temperature-wave216.zip -d al-temperature
cd al-temperature
bash view.sh
ls figures
这一步读取随包真实参考结果、重新输出CSV和图片,不重新做DFT或训练。生成过analysis/figures后,请在另一个新解压目录重复操作,避免混用数据。
采用GPUMD5.9.1(GCC13.3/CUDA12.9.86),分析环境ASE3.29.0;P100与V10016G分别有精确模块和单卡脚本。标签来自VASP6.5.1的NVHPC25.3 GPU构建。资料包包含完整模型输入、已提取真实标签和原生NEP/GPUMD输出,不分发VASP程序或POTCAR。
2. 准备训练并看完整输入#
python3 prepare_models.py
cd cases/temperature-p100-s13579
cat base-nep.in
version 4
model_type 3
type 1 Al
cutoff 5.0 4.0
n_max 4 4
basis_size 4 4
l_max 4 2 1
neuron 20
population 30
batch 45
lambda_1 0.0
lambda_2 0.0
lambda_e 1.0
lambda_f 1.0
lambda_v 0.0
seed 13579
generation 20000
output_interval 100
model_type 3增加温度输入。temperature以K写在XYZ帧头,本部署版本内部以0.001缩放进入网络;不要自己先把输入除以1000。lambda_e与lambda_f同时使用真实电子自由能和力,lambda_v=0表示本例没有拟合应力/维里。
训练集是9个几何×5个温度,验证与独立几何测试各3×5;5000 K数据训练时不提供。所有温度跟随父几何分组,不能把同一结构的不同温度随机打散到训练与测试。
3. 提交、等结束、提取#
sbatch job.slurm
squeue -u "$USER"
必须在这个算例目录提交。脚本先按固定20,000代训练,再分别预测训练、验证、独立几何与5000 K数据,最后做固定坐标的GPUMD接口及力差分。
head training/nep.txt
tail training/loss.out
head prediction-heldout/energy_train.out
生成模型头应为nep4_temperature 1 Al。能量文件前列为预测、后列为目标,按原子归一化;力文件为预测xyz和目标xyz,仍为eV/Å。
所有4个算例结束后,回到包根目录:
cd ../..
module load ase/3.29.0
python3 analyze_models.py --new
head analysis-new/metrics.csv
ls figures-new
只运行当前一个模型时,把分析命令换为:
python3 analyze_models.py --new --case temperature-p100-s13579
--new读取自己的cases,写到analysis-new和figures-new;不加它只处理随包参考结果。不要向同一个分析目录重复执行不同范围的提取。
4. 为什么还训练无温度对照#
control-p100-s13579与control-v100-s24680使用相同标签、几何分组、20个神经元、代数及损失权重,仅选择model_type 0而不增加温度特征。它们对同一几何的预测不会随Te变化,而DFT自由能确实变化,因此无法同时拟合这些能量标签。增加几何模型的训练代数不能补上缺失的温度输入。

独立几何测试包含3个父几何,在5个训练温度网格上共15帧,所有样本与分量均纳入:
| 模型 | 种子 | F的RMSE,meV/atom | 力分量RMSE,eV/Å |
|---|---|---|---|
| 温度NEP | 13579 | 0.9180 | 0.001543 |
| 温度NEP | 24680 | 0.7389 | 0.001045 |
| 不含温度的对照 | 13579 | 56.5085 | 0.004948 |
| 不含温度的对照 | 24680 | 56.5033 | 0.005280 |
种子13579在P100、24680在V10016G运行,二者都保留;因为种子与平台同时变化,不能把误差差异解释为某型号GPU更准确。本例没有按测试集挑选一个种子或训练代数。
5. 5000 K插值要单独看#

5000 K未参与训练,但位于4000–6000 K之间。在3个独立几何上的温度模型能量RMSE分别为11.3655与6.4859 meV/atom,明显大于表中已采样温度上的几何测试误差。图中每个标记都是实际评估点,连线用于看趋势。
这说明“未见几何上的误差小”和“未见温度上的插值准确”是两件需要分别检查的事。实际扩充模型时,应增加目标温区的数据并保留独立温度测试;不能只展示误差更小的一组。此处不为改善已看到的测试值而挑种子或重新选择代数。
6. 在GPUMD中温度怎样传给模型#
以当前5.9.1的静态接口为例,完整run.in为:
potential nep.txt
velocity 1 seed 13579
ensemble nvt_ber 3000 3000 100
time_step 0
dump_xyz 1 dump.xyz force precision double
dump_thermo 1
run 1
这里通过系综目标温度向温度势传入3000 K,time_step 0使离子坐标保持不变。程序与模型使用的是同一套已训练参数,GPUMD热力学输出中的该模型能量为整胞F,本例除以4后与NEP每原子预测比较。
这段脚本只用于静态接口核对,不是独立电子温度Te与离子温度Ti的双温动力学。不能把改变这里的目标T理解为已经实现了独立Te/Ti控制。相关行为按本例所用冻结源码及实际运行核对,而不是套用后续开发版的其他接口。
7. 自由能力是否配套#

在两个温度模型上,选一个独立几何、三个电子温度,沿原子0的xyz各位移±0.01 Å。所有分量使用同一位移步长,不从多个步长挑最有利结果。最大差分误差约3.49×10⁻⁴ eV/Å;同一温度模型的GPUMD与NEP接口最大差为4.59×10⁻⁶ eV/atom和3.91×10⁻⁶ eV/Å。
这些结果说明本例的温度、能量单位和力接口相互配套,不能据此宣称模型已覆盖熔化、液态、缺陷、其他元素或任意温区。DFT的6与8网格差仍有4.1–17.8 meV/atom;模型是这组有限精度、有限几何标签的教学拟合,不是通用铝势或完整材料有限温度自由能模型。