GPTFF模型训练与结构优化操作手册
本文档提供GPTFF工具包的完整操作流程,包括数据处理、模型训练和结构优化应用。
一、数据处理
1. 创建训练数据集
从VASP计算结果中提取训练数据:
bash
# 在仓库根目录执行
python scripts/create_training_dataset.py脚本位置:scripts/create_training_dataset.py
功能:
- 从VASP输出文件(vasprun.xml)中提取原子坐标、能量、力和应力
- 自动处理可能被截断的vasprun.xml文件
- 生成训练数据集CSV文件和审计文件
配置参数(在脚本开头修改):
ROOT_DIRECTORY:VASP计算结果目录OUTPUT_CSV:输出数据集文件名OUTPUT_AUDIT_CSV:输出审计文件名
2. 合并多个数据集
将多个数据集合并为一个完整训练集:
bash
# 在仓库根目录执行
python scripts/merge_datasets.py脚本位置:scripts/merge_datasets.py
功能:
- 合并多个CSV格式的训练数据集
- 自动去重并分配交叉验证折数
- 生成统一格式的完整数据集
配置参数(在脚本开头修改):
ROOT_DATA_DIR:数据集所在目录INPUT_CSV_PATTERN:输入文件匹配模式OUTPUT_BASENAME:输出文件名前缀NUM_FOLDS:交叉验证折数
二、模型训练
1. 准备训练配置文件
创建或修改config.json文件:
json
{
"training": {
"workers": 20,
"epochs": 100,
"batch_size": 16,
"learning_rate": 1e-3,
"weight_decay": 1e-4,
"node_feature_len": 64,
"edge_feature_len": 64,
"n_layers": 3,
"n_readout_layers": 3,
"device": "cuda",
"val_fold": 0,
"resume": false,
"weight_energy": 1.0,
"weight_force": 1.0,
"weight_stress": 1.0
},
"data": {
"data_path": "./",
"data_file": "merged_training_dataset.csv"
}
}关键参数说明:
batch_size:批处理大小,影响内存使用和训练速度learning_rate:学习率,影响训练收敛速度和稳定性n_layers:模型层数,影响模型复杂度和表达能力device:计算设备,可选"cuda"或"cpu"data_file:训练数据集文件名
2. 启动训练
bash
# 使用conda环境
conda activate gptff
# 启动训练(后台运行)
nohup python -m gptff.trainer config.json > training.log &
# 监控训练进度
tail -f training.log训练脚本:gptff/trainer.py
训练过程:
- 自动加载数据集并划分训练/验证集
- 构建和训练图神经网络模型
- 定期保存检查点和最佳模型
- 输出训练和验证损失
三、结构优化应用
使用训练好的模型进行结构优化
bash
# 在仓库根目录执行
python scripts/结构优化v3.py initial_structure.vasp脚本位置:scripts/结构优化v3.py
功能:
- 使用训练好的GPTFF模型进行结构优化
- 自动识别并固定底层原子(适用于表面吸附体系)
- 定期保存优化过程中的中间结构
- 输出优化后的最终结构和能量
配置参数(在脚本开头修改):
MODEL_PATH:训练好的模型路径MAX_STEPS:最大优化步数FMAX_TARGET:力收敛阈值(eV/Å)SAVE_INTERVAL:保存中间结构的间隔步数
编程方式调用结构优化
python
import torch
from gptff.model.mpredict import ASECalculator
from pymatgen.core import Structure
from pymatgen.io.ase import AseAtomsAdaptor
from ase.optimize.fire import FIRE
# 加载模型和结构
model_path = "gptff/9_15best_checkpoint.pth"
device = 'cuda' if torch.cuda.is_available() else 'cpu'
calculator = ASECalculator(model_path, device)
structure = Structure.from_file("initial_structure.vasp")
atoms = AseAtomsAdaptor.get_atoms(structure)
atoms.calc = calculator
# 执行结构优化
dyn = FIRE(atoms)
dyn.run(fmax=0.01, steps=300)
# 保存优化结果
atoms.write("optimized_structure.vasp", format='vasp')
print(f"优化后能量: {atoms.get_potential_energy()} eV")常见问题与解决方案
训练过程中断
- 检查GPU内存使用情况,尝试减小
batch_size - 检查数据集格式是否正确
- 查看日志文件确认具体错误
- 检查GPU内存使用情况,尝试减小
结构优化不收敛
- 增加
MAX_STEPS值(默认可能太小) - 调整
FMAX_TARGET值(可能太严格) - 检查初始结构是否合理
- 增加