MACE专题

MACE模型与cuEquivariance双向转换

用两个原生命令转换自有Si模型,逐结构比较完整能量、力、应力和virial。

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

把模型从e3nn算子转换到cuEquivariance算子,目的是切换执行实现。它不会重新训练、增加元素,也不会自动提高模型的物理精度。本例使用前面Si训练教程的自有模型和8个独立测试结构,实际演示CPU浮点64位路径。

下载自有模型、完整标签、HDF5、转换脚本和四张数据图。本例环境为MACE0.3.16、Python3.11、PyTorch2.8.0+cu126、e3nn0.4.4、ASE3.29;新增依赖只安装到解压目录的.deps,不修改公共模块。

python3 -m zipfile -e mace-optional-practical-wave319-*.zip .
cd mace-optional-practical
bash run.sh

这一步只读取参考数值绘图。需要重新执行固定模型推断或原生转换时,在已分配的计算资源中先准备一次可选依赖:

bash setup.sh

脚本按固定URL下载并校验SHA256。需要可访问上游下载地址;也可先将DEPENDENCIES.json列出的原文件放进.dependency-downloads/,再运行同一脚本。目录中已有.deps时保留已有环境,不覆盖安装。

1 先运行完整的往返转换#

bash convert.sh
ls new-conversion

依次得到si.cueq.pt和si.cueq.back.pt,原始模型另留在inputs/si.model。脚本只在新的new-conversion/目录工作,已有同名目录时停止,避免覆盖结果。

展开后的两个原生命令如下;与上面的脚本选一种执行即可:

mace_e3nn_cueq new-conversion/si.model --device cpu --output_model cueq.pt --return_model
mace_cueq_to_e3nn new-conversion/si.cueq.pt --device cpu --output_model back.pt --return_model

这版接口有三点要注意:第一个输入文件是位置参数;--output_model是追加到输入文件名后的后缀;命令行使用--return_model才会把转换模型写到文件。反向命令的名称是mace_cueq_to_e3nn。

2 比较完整物理量#

bash run.sh verify
cat results/conversion/VALIDATION.json
ls plots

读取每个结构的完整能量、每个原子的三个力分量、完整3×3应力和virial。三种实现使用同一个固定模型,不拿DFT标签当预测输入。8个Si₂/Si₈测试结构在原始、转换、往返三种实现之间的上述分量都在1E-8的比较尺度内一致;同时检查virial = -体积 × 应力、平移旋转及能量对坐标的有限差分力。

完整能量、力和应力的往返转换对照

FULL-PREDICTIONS.npz保存全量数组,图上的对角线不是只比较一个总能量的替代。应力单位eV/ų,力为eV/Å;不能将应力直接当作压力GPa。

3 CPU回退与GPU加速的区别#

本例另外准备cuequivariance和cuequivariance-torch0.6.1;没有安装专用CUDA算子包,实际使用CPU的naive回退实现。因此这里说明的是模型转换和数值对应关系,不提供GPU加速比,也不将文件名中的CuEq当成已经使用加速CUDA内核的证据。

要改为GPU实现,需另核对CUDA算子包、PyTorch/CUDA版本、设备支持和相同结构上的数值,再单独测性能。不要直接把CPU耗时与另一组GPU结构的耗时相除。已有模型的元素、cutoff和多头语义在转换后仍然受原模型限制;本例Si模型不能用于O/H体系。

4 与其他转换工具怎么分工#

普通CPU/GPU设备转换看设备与精度,多头拆分看多头模型,LAMMPS接口看本专题的实际版本入口表。这些工具解决的问题不同,不能互相替代。

参考:NVIDIA cuEquivariance文档。

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

查看配图

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

100%查看原图 ↗