Skip to content

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")

常见问题与解决方案

  1. 训练过程中断

    • 检查GPU内存使用情况,尝试减小batch_size
    • 检查数据集格式是否正确
    • 查看日志文件确认具体错误
  2. 结构优化不收敛

    • 增加MAX_STEPS值(默认可能太小)
    • 调整FMAX_TARGET值(可能太严格)
    • 检查初始结构是否合理