MACE模型的TorchScript导出实操
使用原生工具导出libtorch格式,比较实际能量、力和维里,并说明local与ghost原子的能量分工。
阅读本篇目录
mace_create_lammps_model可把MACE模型转换为面向对应LAMMPS接口的文件。本篇演示libtorch格式的实际导出与读取;得到文件不等于任意LAMMPS已具备ML-MACE接口,真正接入还需要匹配的LAMMPS构建。
1 先看导出后的实际数据#
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坐标。

蓝色与橙色表示本例的人为掩码,不是把晶体真实切成两个独立体系。一半local能量不是相同原子在真空中单独存在的物理能量,也不能把ghost受力直接删掉后当作完整体系受力。
4 导出前后数值如何#
本例将实际加载的TorchScript结果与已经保存的原模型结果逐项对照:全体系能量、全部原子力分量和3×3维里分别在10⁻⁸ eV、10⁻⁸ eV/Å、10⁻⁷ eV范围内一致;这些是接口一致性,不是相对DFT的模型精度。
对local掩码还检查了能量分配和力的中心差分。模型的训练分布与相对DFT误差仍应由独立测试集评价。

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使用说明。