MACE专题

MACE模型的TorchScript导出实操

使用原生工具导出libtorch格式,比较实际能量、力和维里,并说明local与ghost原子的能量分工。

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

mace_create_lammps_model可把MACE模型转换为面向对应LAMMPS接口的文件。本篇演示libtorch格式的实际导出与读取;得到文件不等于任意LAMMPS已具备ML-MACE接口,真正接入还需要匹配的LAMMPS构建。

1 先看导出后的实际数据#

下载原模型、导出文件、结构、CSV和绘图脚本:

python3 -m zipfile -e mace-torchscript-export-wave963-*.zip .
cd mace-torchscript-export
bash read.sh
bash plot.sh

这些命令读取已有数值,不重复导出或模型计算。原模型是此前实际训练的Si小模型,float64、单一Default头,测试包含4个Si₂和4个Si₈结构。

环境为MACE0.3.16、PyTorch2.8.0/CUDA12.6、e3nn0.4.4;本例的导出与TorchScript读取使用CPU。

2 需要新文件时执行哪个命令#

核心命令如下:

module load mace/0.3.16
mace_create_lammps_model base.model --format libtorch --head Default --dtype float64

它输出base.model-lammps.pt。--head指定需要的输出头,--dtype指定数值精度。不要仅根据文件扩展名把普通Python模型、TorchScript模型和ML-IAP模型当成同一种格式。

资料包封装了目录准备;在根目录提交:

sbatch submit.sh

CPU分区按56核整节点申请和计费,导出工具实际单线程;新文件位于work-new/。脚本先检查目录不存在,保留已有结果。

如需进一步执行所附的完整TorchScript数值示例,可在同一份已申请资源的计算脚本中追加:

cd work-new
python ../example_forward.py

该脚本读取8个附带结构,计算所有原子为local与一半原子为local两种掩码,并检查能量、力、维里及差分。它直接调用已导出的模型,不启动LAMMPS。

3 local与ghost是什么意思#

并行分区计算中,每个分区负责部分local原子,同时需要邻近ghost原子的坐标来构造完整局部环境。接口按local掩码累加应由该分区计入的原子能量;力的求导仍可能涉及ghost坐标。

Si8结构中的local与ghost掩码示意

蓝色与橙色表示本例的人为掩码,不是把晶体真实切成两个独立体系。一半local能量不是相同原子在真空中单独存在的物理能量,也不能把ghost受力直接删掉后当作完整体系受力。

4 导出前后数值如何#

本例将实际加载的TorchScript结果与已经保存的原模型结果逐项对照:全体系能量、全部原子力分量和3×3维里分别在10⁻⁸ eV、10⁻⁸ eV/Å、10⁻⁷ eV范围内一致;这些是接口一致性,不是相对DFT的模型精度。

对local掩码还检查了能量分配和力的中心差分。模型的训练分布与相对DFT误差仍应由独立测试集评价。

全local及部分local的能量与完整原子力比较

head -n 9 analysis-read/MACE-TorchScript-energy-partition.csv
head -n 9 analysis-read/MACE-TorchScript-native-forces.csv

力表保留各原子、各方向的导出模型结果、原模型已有结果和local掩码结果,可直接用于外部绘图。

5 接入其他程序前的选择#

libtorch导出与mliap导出面向不同的接入方式,不能只改扩展名转换。ML-IAP的模型导出还可能牵涉cuEquivariance及GPU架构条件;本篇没有把它写成已完成的ML-IAP运行实例。

本例只证明所列版本的原生libtorch导出与TorchScript接口数值,没有新增LAMMPS插件安装,也不声称完成多节点分区计算。真正用于LAMMPS时,应按其编译接口选择模型格式,并先对小结构比较能量和力。

具体接口准备见MACE官方LAMMPS使用说明。

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

查看配图

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

100%查看原图 ↗