LAMMPS pair_style pace 全解析:Atomic Cluster Expansion(ACE)势能的高效实现与使用指南

📅 发布时间:2026/10/17 2:11:57
LAMMPS pair_style pace 全解析:Atomic Cluster Expansion(ACE)势能的高效实现与使用指南
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载本文以 LAMMPS 官方文档 doc/src/pair_pace.rst 为骨架结合 ML-PACE 包源码与示例深入剖析pair_style pace/pair_style pace/extrapolation的完整用法从 ACE 势能的物理背景、参数解析、元素映射到外推等级extrapolation grade与核排斥core repulsion的实战配置。读完本文你将掌握如何在 LAMMPS 中加载 ACE 系数文件、选择基函数计算算法、在 GPUKOKKOS上规避显存溢出并利用外推等级自动筛选训练集外的外推构型。一、什么是 PACEACE 势能的高效 LAMMPS 实现pair_style pace计算基于Atomic Cluster ExpansionACE的相互作用。ACE 是一种将原子能量在多变体基函数multi-body basis functions上进行一般性展开的方法其理论基础见 Drautz, Phys Rev B, 99, 014104 (2019)。而pace风格在 LAMMPS 中的高效实现细节见 Lysogorskiy 等人, npj Comp Mat, 7, 97 (2021)。从物理模型上看ACE 将体系总能量分解为各原子能量之和原子i的能量被表达为一个或多个密度函数density functions的线性或非线性函数。通过把密度投影到局部原子基组local atomic base上能量的最低阶贡献可以表示为基函数贡献对邻居原子求和的一组标量多项式。在 LAMMPS 源码中该 pair style 位于 src/ML-PACE/pair_pace.cpp其类声明为PairPACE : public Pair通过宏PairStyle(pace,PairPACE)注册见 src/ML-PACE/pair_pace.hpair_style pace/extrapolation则由 src/ML-PACE/pair_pace_extrapolation.cpp 实现注册名为PairStyle(pace/extrapolation,PairPACEExtrapolation)。二、语法与关键字详解pair_style pace的基本语法为pair_style pace ... keyword values ...可选的 keyword/value 组合包括keyword取值含义product无使用 product 算法计算基函数recursive无使用 recursive 算法计算基函数默认chunksize整数每次 pass 处理的原子数仅 KOKKOS GPU 生效neighauto/shared/global选择构建短邻居列表所用的 Kokkos team scratch 内存级别默认auto其中auto自动选择 scratch 内存级别shared强制使用 level 0片上共享内存global强制使用 level 1全局内存scratch。pair_style pace/extrapolation的语法更简单pair_style pace/extrapolation它在 KOKKOS GPU 后端同样支持chunksize与neigh关键字。1.product与recursive两种基函数求值算法product和recursive二选一决定基函数及其导数的计算算法默认是recursive。从源码 src/ML-PACE/pair_pace.cpp 可以看到settings()中初始化recursive true遇到product关键字则置为false并将选择传给ACERecursiveEvaluator::set_recursive()recursive true; // default evaluator style: RECURSIVE ... if (strcmp(arg[iarg], recursive) 0) { recursive true; } else if (strcmp(arg[iarg], product) 0) { recursive false; }两种算法在计算基函数与导数上的数值路径不同对同一势能应给出等价结果但性能特征有差异。settings()还会在日志中打印当前使用的求值器类型Recursive evaluator is used或Product evaluator is used。2.chunksizeGPU 上的分块计算chunksize仅在使用 KOKKOS 包且后端为 GPU 时生效其他情况下被忽略。它控制每次 pass 中用于计算原子簇展开的原子数量目的是避免显存耗尽。例如模拟共有 8192 个原子若chunksize设为 4096则 ACE 计算会在单个 GPU 上分成两次 pass 完成。源码中默认值chunksize 4096见 src/ML-PACE/pair_pace.cpp可通过关键字覆盖pair_style pace product chunksize 20483.neighKOKKOS team scratch 内存级别控制neigh关键字versionadded:: 2Sep2026仅在使用 KOKKOS 包的pace和pace/extrapolationGPU 后端时生效其他情况下被忽略——这样同一个输入脚本可以在有无 KOKKOS 包时通用。它控制构建短邻居列表所用的 Kokkos team scratch 内存级别Level 0片上共享内存访问快但容量有限。当原子邻居数很多或原子种类很多时可能超限导致类似Requested too much scratch memory on level 0的报错中止运行Level 1全局内存容量远更大可避免上限问题但访问较慢。默认值auto的行为pair style 会查询设备上实际的共享内存大小而非假定固定值如 48 KiB因此能自动利用较新版本 Kokkos 库提供的更大限制当请求放不进 level 0 时自动回退到 level 1并在首次回退时打印警告。shared强制使用 level 0片上scratchglobal强制使用 level 1全局scratch可用于消除回退警告或在自动启发式过于保守时强制使用全局内存。在源码中该关键字由settings()解析为NEIGH_SCRATCH_AUTO / NEIGH_SCRATCH_SHARED / NEIGH_SCRATCH_GLOBAL枚举见 src/ML-PACE/pair_pace.cpp并注明由非 KOKKOS 风格解析但忽略以便同一输入在非 KOKKOS 构建下也能运行。4.versionchanged:: 2Sep2026CPU 后端的 KOKKOS 行为变化当pace/kk在 CPU 后端KOKKOS 以 OpenMP 或 Serial 后端构建配合product关键字使用时现在计算会在 KOKKOS kernel 中运行并使用所有可用线程此前pace/kk在 CPU 上使用超过一个线程时会直接报错。而当使用recursive关键字、或势能的关联阶correlation order超出 CPU kernel 支持范围时pace/kk会打印警告并回退到未加速的求值器单线程此时改用product关键字即可获得多线程计算。三、pair_coeffACE 势文件与元素映射pace风格只使用一条 pair_coeff 命令其参数格式为pair_coeff * * ACE系数文件 元素1 元素2 ... 元素N其中ACE 系数文件.yaml或.yace/.ace格式N 个元素名将 ACE 元素映射到 LAMMPS 原子类型N 等于 LAMMPS 原子类型数。与多数势能不同截断半径cutoff不在 pair_style 或 pair_coeff 中设置而是定义在 ACE 文件内部。源码 src/ML-PACE/pair_pace.cpp 的coeff()流程清晰地体现了这一点通过map_element2type(narg - 3, arg 3)解析元素映射参数用utils::get_potential_file_path(arg[2])定位势文件支持-L路径搜索详见 pair_coeff 文档 中关于路径的说明若文件后缀为.yaml则先用ACEBBasisSet读取再自动转换为ACECTildeBasisSet否则直接以ACECTildeBasisSet读取打印每种元素的总基函数数量区分 rank1 与 rank1逐类型映射NULL表示跳过该类型元素名必须是 ACE 文件中支持的元素内部维护一张从 H、He…Lr 的元素周期表见elements_pace[]数组否则报错{} is not a valid element或Element {} is not supported by ACE-potential from file {}初始化 scale 因子为 1.0 并set_basis()。从仓库自带的势文件 potentials/Cu-PBE-core-rep.ace 可以看到 .ace 格式的内容结构文件头声明UNITS: metal、nelements1、elements: Cu、lmax6、嵌入函数类型与参数、径向基函数名ChebPow、nradbase16、cutoffmax7.4以及核心排斥参数core repulsion parameters: 400.0 7.0——所有截断信息都内嵌于势文件。基础用法示例最简用法recursive 算法、默认 chunksizepair_style pace pair_coeff * * Cu-PBE-core-rep.ace Cu指定 product 算法与分块pair_style pace product chunksize 2048 pair_coeff * * Cu-PBE-core-rep.ace CuYAML 格式的系数文件pair_style pace pair_coeff * * Cu.yaml Cu外推等级模式pair_style pace/extrapolation pair_coeff * * Cu.yaml Cu.asi Cu仓库 examples/PACKAGES/pace 目录下有可直接运行的最小示例 in.pace.recursive 与 in.pace.product两者都使用 fcc Cu 单晶、units metal、pair_coeff * * Cu-PBE-core-rep.ace Cu并对比了thermo_style custom输出中能量/压力相对参考值的偏差适合作为自检脚本。四、单元制与邻居列表要求源码级约束使用pair_style pace前必须了解以下硬性约束均在源码中强制检查必须使用units metal。settings()中if (strcmp(metal, update-unit_style) ! 0) error-all(FLERR, ACE potentials require metal units);ACE 势能系数以 metal 单位参数化其他单位制直接报错。必须开启原子 ID 与 newton pair oninit_style()Pair style pace requires atom IDsatom-tag_enable 0时报错Pair style pace requires newton pair onforce-newton_pair 0时报错需要完整邻居列表Neighbor::REQ_FULL。cutoff 来自势文件init_one()返回basis_set-radial_functions-cut(map[i], map[j])即截断半径完全由 ACE 势文件的径向函数设置决定。scale 因子机制计算能量与力时乘以scale[itype][itype]同类型或scale[itype][jtype]异类型默认全为 1.0extract()方法支持外部通过pair_modify scale之类的机制访问scale二维数组。五、extrapolation grade外推等级主动学习与构型筛选1. 原理pair_style pace/extrapolation实现了 PACE 中**外推等级extrapolation grade**的计算。它基于与 Moment Tensor PotentialMTPShapeev 等人类似的MaxVol 算法理论描述见 Lysogorskiy 等人, Phys Rev Mater, 7, 043801 (2023)。要计算外推等级需要提供两个文件B-basis 形式的 ACE 势能.yaml格式对应势能的Active Set InvertedASI文件.asi格式。从源码 src/ML-PACE/pair_pace_extrapolation.cpp 看coeff()中同时加载了ACEBBasisSetYAML与 ASI 文件并打印LINEAR ASI is loaded或FULL ASI is loaded以标识 ASI 类型。内部同时维护两个求值器ACEBEvaluator用于外推等级计算和ACERecursiveEvaluator用于常规力/能量计算。2. 为什么默认不计算计算外推等级需要对每个原子做矩阵-向量乘法比常规的pair_style pace recursive慢得多因此默认不计算。它由fix pair命令按需触发——fix pair会请求计算gamma。3. 完整工作流示例以下是文档给出的外推构型检测脚本pair_style pace/extrapolation pair_coeff * * Cu.yaml Cu.asi Cu fix pace_gamma all pair 10 pace/extrapolation gamma 1 compute max_pace_gamma all reduce max f_pace_gamma variable dump_skip equal c_max_pace_gamma 5 dump pace_dump all custom 20 extrapolative_structures.dump id type x y z f_pace_gamma dump_modify pace_dump skip v_dump_skip variable max_pace_gamma equal c_max_pace_gamma fix extreme_extrapolation all halt 10 v_max_pace_gamma 25其语义为fix pace_gamma all pair 10 pace/extrapolation gamma 1每 10 步触发一次外推等级计算结果存入每原子变量f_pace_gammacompute max_pace_gamma all reduce max f_pace_gamma将结构内所有原子的最大外推等级归约为c_max_pace_gamma只有当c_max_pace_gamma 5时才将结构写入extrapolative_structures.dump且不早于每 20 步一次fix extreme_extrapolation all halt 10 v_max_pace_gamma 25若最大外推等级超过 25则在后续第 10 步强制终止模拟——这是主动学习active learning中遇到训练集外构型立即停止的标准做法。关键设计其余所有时间步计算仍由快速的pair_style pace recursive完成——即外推等级检测的开销被隔离在每 N 步的触发点上不影响常规分子动力学的吞吐。4. KOKKOS GPU 限制当pace/extrapolation与 KOKKOS 包在 GPU 上使用时总是使用 product B-basis 求值器且只支持 linear ASIFULL ASI 不支持 GPU 后端。5.fix pair机制源码佐证fix pair命令文档见 doc/src/fix_pair.rst从 pair style 中提取每原子量并存储供 dump、compute、variable、fix 使用。其flag参数决定是否触发 pair style 计算该量gamma 1表示外推等级开销大、需要按需触发。对应地PairPACEExtrapolation::extract()提供gamma_flag开关返回flag_compute_extrapolation_gradeextract_peratom()提供gamma数据每原子extrapolation_grade_gamma[i] aceimpl-ace-max_gamma_grade见 src/ML-PACE/pair_pace_extrapolation.cpp。同一机制也支持以pace/extrapolation作为pair_style hybrid的子风格pstyle可写为pace/extrapolation或带实例编号的形式。六、Core repulsion核排斥ACE 到 ZBL 的无缝过渡ACE 势能可以配置为从内截断inner cutoff起启动核心排斥实现 ACE 到 ZBL 势的平滑过渡。核排斥因子可以作为每原子量访问pair_style pace pair_coeff * * CuNi.yaml Cu Ni fix pace_corerep all pair 1 pace corerep 1此时每原子量f_pace_corerep表示每个原子 ZBL 核心排斥的占比fraction。源码实现上该因子由corerep_factor[i] 1 - aceimpl-ace-ace_fcut计算见 src/ML-PACE/pair_pace.cpp并通过extract(corerep_flag)与extract_peratom(corerep)暴露src/ML-PACE/pair_pace.h 注释明确corerep_factor即1 - fcut。pace/extrapolation风格同样支持corerep提取。七、Mixing、shift、table、tail、restart、rRESPA 相关信息Mixing对于原子类型对 I, JI ! J且 I、J 对应两种不同元素时LAMMPS 使用用户可指定的参数进行混合。该风格无需也不接受I ! J 的 pair_coeff 命令。不支持的 pair_modify 选项pace风格不支持pair_modify的shift、table、tail选项。二进制重启文件pace风格不把势能信息写入二进制重启文件势能信息全部存储在势文件中。因此读取重启文件继续运行的输入脚本中必须重新指定 pair_style 与 pair_coeff 命令。这对应源码中restartinfo 0src/ML-PACE/pair_pace.cpp。rRESPA多重时间步长pace风格只能通过run_style respa命令的pair关键字使用不支持inner、middle、outer关键字。八、构建要求ML-PACE 包与 CMakepair_style pace属于ML-PACE 包只有当 LAMMPS 以该包构建时才可用构建方法参见 Build package 文档在 CMake 中该包名列于 cmake/CMakeLists.txt 的包列表。ML-PACE 是 ACE 势能的高效实现由 ICAMS德国波鸿鲁尔大学跨学科先进材料模拟中心的 Yury Lysogorskiy 等人编写见 src/ML-PACE/README。注意ML-PACE 包不再支持传统 Make 构建系统。其安装脚本 src/ML-PACE/Install.sh 在安装/更新模式下直接输出The ML-PACE package no longer supports the legacy build system. Please build LAMMPS with CMake instead.并退出因此请使用 CMake 构建 LAMMPS 并启用 ML-PACE 包以及按需启用 KOKKOS 以使用pace/kk与pace/extrapolation/kk。九、相关命令与默认值相关命令pair_style snap同样基于原子团簇/描述符拟合的机器学习势SNAPfix pair按需提取 pair style 的每原子量本文外推等级与核排斥均依赖它。默认值参数默认值基函数算法recursivechunksize4096neighauto十、从源码看完整调用链一次 ACE 计算如何完成综合 src/ML-PACE/pair_pace.cpp 的compute()一次完整的 ACE 能量/力计算流程为遍历邻居列表先统计最大邻居数max_jnum据此resize_neighbours_cache(max_jnum)为 ACE 求值器预留缓存对每个中心原子 i以坐标数组、类型数组、邻居数、邻居列表调用aceimpl-ace-compute_atom(i, x, type, jnum, jlist)——注意类型到 ACE 物种的映射在compute_atom内部通过element_type_mapping数组完成截断检查也在内部完成若启用核排斥则写入corerep_factor[i]compute_atom更新e_atom与neighbours_forces(jj, alpha)随后逐邻居累加力f[i] fij; f[j] - fij并统计每原子 virial能量项通过ev_tally_full(i, 2.0 * evdwl, ...)计入ACE 为多体势能量计 2 倍以配合 LAMMPS 的 half 列表约定。这条链路揭示了 PACE 的工程特性邻居缓存复用、类型映射内建、完整邻居列表需求以及势文件驱动的 cutoff——理解这些约束有助于诊断邻居截断不足导致能量跳变或GPU 显存溢出等常见问题。结语pair_style pace为 LAMMPS 提供了生产级的 ACE 机器学习势能支持recursive/product双算法、KOKKOS GPU 加速含chunksize分块与neighscratch 内存控制、pace/extrapolation外推等级主动学习工作流以及 ACE→ZBL 核排斥过渡。配合 ML-PACE 包的 CMake 构建与 examples/PACKAGES/pace 下的自检脚本你可以在 metal 单位制下快速验证势能并部署大规模分子动力学计算。使用要点可归纳为metal 单位、原子 ID、newton pair on、势文件内嵌 cutoff、重启后重写 pair_coeff、rRESPA 仅限 pair 关键字——牢记这五点即可避开绝大多数配置陷阱。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐react-spring 测试体系迁移 Vitest Browser 模式从 Jest Cypress 到 Playwright 驱动浏览器的快速上手指南react spring 测试体系迁移 Vitest Browser 模式从 Jest Cypress 到 Playwright 驱动浏览器的快速上手指南科研科学计算高性能计算LAMMPS compute pace 命令详解在 ML-PACE 包中计算 ACE 描述符与梯度LAMMPS compute pace 命令详解在 ML PACE 包中计算 ACE 描述符与梯度 本指南系统讲解 LAMMPS 中 compute pace科研科学计算高性能计算LAMMPS pair_style beck 完全指南Beck 势的语法、系数、加速变体与源码实现解析LAMMPS pair_style beck 完全指南Beck 势的语法、系数、加速变体与源码实现解析 导读 pair_style beck 是 LAMMPS科研科学计算高性能计算上一篇茉莉花插件5分钟打造Zotero中文文献管理终极方案下一篇TranslucentTB 技术架构解析Windows 任务栏透明化的开源实现方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考