计算化学公社

 找回密码 Forget password
 注册 Register
Views: 410|回复 Reply: 7
打印 Print 上一主题 Last thread 下一主题 Next thread

[Amber] 在AMBER中使用机器学习势(MLIP)做ML/MM模拟的方法

[复制链接 Copy URL]

151

帖子

4

威望

1083

eV
积分
1314

Level 4 (黑子)

本帖最后由 Huschein 于 2025-8-1 14:12 编辑

在AMBER中使用机器学习势(MLIP)做ML/MM模拟的方法

这两年来,越来越多的分子动力学(MD)软件开始整合机器学习势(MLIP),并由此催生出新一轮的 ML/MM 模拟潮流。代表性的开源平台包括 GROMACS、OpenMM、LAMMPS、Tinker 以及 AMBER。根据我目前掌握的情况,主流的 MD 软件中,尚未公开发布 ML/MM 相关开发工作的仅剩CHARMM(欢迎指正与补充)。

在 AMBER 的开发社区里,目前有两个课题组在推进 ML/MM 方向的工作:一是佛罗里达大学的 Adrian Roitberg 教授团队(ANI 系列的主要开发者之一),另一是我的指导老师、匹兹堡大学的 Junmei Wang 教授团队。Roitberg 教授的工作集中在 ANI 系列的实现上,并在 AMBER 中引入了电荷嵌入(electrostatic embedding)以提升其精度;而我们团队的目标则更具普适性,致力于实现多种 MLIP 的接入、构建通用的 ML/MM 接口,并拓展出与 QM/MM 类似的功能模块。

详情可参考双方已发表与在研的相关工作:

目前我们的工作重点仍在推进各项功能的开发,尚未有精力对所有细节做全面打磨,也还没正式集成到官方 AMBER 代码库中。因而当前版本的自动化程度较低,存在多个需要手工调整的环节,一些 API 之间的兼容性也未完全解决。尽管如此,使用常规分子动力学(MD)、增强采样以及 ML/MM 混合模拟在本系统中是可行的。

本教程相对冗长、步骤较多,是一个“尝鲜版”——适合愿意动手、容忍一定手工操作的早期用户。我们计划在后续功能趋于完整之后,回头优化兼容性并提升安装/配置的自动化水平。


一、AmberTools (SANDER)安装教程
强制先安装一次原生 AmberTools(仅需 AmberTools,不需要 PMEMD)
这是必要的:由于兼容性与构建流程的细节,我们需要让官方 AMBER 先生成一套编译中间产物(例如配置缓存、依赖检测结果等),这些文件会辅助后续 “魔改” 版 AMBER 的安装和集成。
建议:为避免污染已有的 AMBER 运行环境,专门为本项目单独安装一套 AmberTools,并在环境变量/路径上做隔离。例如用不同的前缀安装、借助 conda 环境或 shell wrapper 把原生 AMBER 和改造版区分开。

下载 2023 版 AmberTools(不需要包含 PMEMD 模块),解压到你打算安装的位置。进入解压后的 AmberTools 的 build 目录,找到 run_cmake 脚本,修改其 CMake 控制参数。最小必需的三个选项如下(其他可以按需调整):

-DMPI=TRUE \
-DBUILD_SANDER_LES=FALSE \
-DBUILD_SANDER_API=FALSE

例如,你可以把完整的示例配置写成(非必须,按需扩展):
-DCOMPILER=GNU  \
-DMPI=TRUE -DCUDA=FALSE -DINSTALL_TESTS=FALSE  \
-DDOWNLOAD_MINICONDA=FALSE  \
-DBUILD_SANDER_LES=FALSE -DBUILD_SANDER_API=FALSE \
-Dlapack_ENABLED=FALSE \

只有 -DMPI=TRUE、-DBUILD_SANDER_LES=FALSE、-DBUILD_SANDER_API=FALSE 这三项是必需的;其余参数可以根据你的系统和需求自由取舍。

在 build 目录下执行:
  1. ./run_cmake
复制代码
如果报错,请参考官方 Amber 手册(AMBER Manual)排查依赖或环境设置问题。常见需要确认的包括编译器版本、MPI 可用性、系统库路径等。仅在配置成功(无错误输出)的情况下执行:
  1. make install -j
复制代码
这里的 -j 可以根据你的 CPU 核数指定,例如 make install -j8 以加速编译。


二、LibtorchMKL
1.前置依赖:Intel MKL
首先,必须确认系统已经安装了 Intel MKL(或等效的 Math Kernel Library 实现)。这是基础依赖,后续编译与性能相关组件都严重依赖它。若尚未安装,请先从 Intel 官方渠道安装对应平台的 MKL,并确保环境变量(如 MKLROOT)设置正确,能够被 CMake 识别。

2.Libtorch(PyTorch 的 C++ 接口)简介与选型
Libtorch 是 PyTorch 的 C++ 发行版,在我们的工作中用于部署机器学习势(MLIP)模型,是提升 ML/MM 整体性能的关键组件之一。当前性能优化是长期重点,因此模型推理用的基础框架选型也倾向于高效、原生的 C++ 形式。

关于 Libtorch 版本选择的要点:
仅支持 NVIDIA GPU。
要求 CUDA 工具链(NVCC)和 GPU 驱动版本至少为 11.8 及以上。
例如 CUDA 12.6、12.8 等更高版本兼容 11.8;因此首选与之匹配的 Libtorch 11.8 构建,以兼顾稳定性与兼容性。
你可以到官方 PyTorch 网站(pytorch.org)下载对应你系统、CUDA 版本和编译需求的 Libtorch 预编译包。

3.配置 MKL 给 CMake 识别
在 Libtorch 包含的 CMake 脚本文件(libtorch/share/cmake/Caffe2/public/mkl.cmake)中,找到文件第二行,添加:

set(MKL_INCLUDE_DIR "/your/mkl/installation/path/include")
set(MKL_LIBRARIES "/your/mkl/installation/path/lib")


三、用“魔改版” SANDER 覆盖原生源并修改 CMake 配置
删除原本的/AmberTools/src/sander文件夹(如果担心失败可以额外进行备份),克隆(或下载)我们提供的 ML/MM 版本的 SANDER 源码,然后将其放回原位置。例如,如果用 git 克隆到临时目录:
  1. git clone https://github.com/ClickFF/MLMM4AMBER.git
复制代码
然后找到/AmberTools/src/sander/CMakeLists.txt这个文件,在文件第七行(或靠近开头、CMake 前置配置区域)添加 / 修改为你本地解压的 Libtorch 路径:
  1. list(APPEND CMAKE_PREFIX_PATH "/your/libtorch/path")
复制代码


四、安装,MLIP模型下载与环境配置
1.重新配置并编译(生成 ML/MM 版 SANDER)
前提:你已经完成了第 3 节中“用魔改版 SANDER 覆盖”与 Libtorch 路径注入的修改。

入原先的 build 目录。绝对不要执行 clean_cmake,因为 CMake 配置文件发生了变更,直接重跑配置即可让改动生效。
  1. ./run_cmake
复制代码
如果这一步自动探测到修改,会重新生成配置(相当于“隐式”跑了一次);如果正常返回(无致命错误),继续:
  1. make install -j<N>
复制代码

2.部署 MLIP 模型
在任意位置新建一个模型存放目录,将我们预打包好的模型文件(例如经过 Libtorch 序列化的 .pt / TorchScript 格式)复制到该目录:
  1. cp /path/to/your/prebuilt_model.pt ~/mlip_models/
复制代码
在你的 shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)中设置模型路径变量:
  1. export MODEL_PATH=~/mlip_models
复制代码

3.加载魔改版环境(AMBER + Libtorch 连接)
编译过程会在 amber22_src 目录外生成一个 amber22 运行时结构(假设你的源和构建路径是按照标准布局)。在 shell 配置中添加对该 AMBER 运行环境的加载:
  1. source /path/to/your/amber22/amber.sh
复制代码
配置共享库查找路径,使得 Libtorch 和 SANDER 的动态依赖都能被系统发现:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/libtorch/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/amber22_src/build/AmberTools/src/sander

如果到这里一切正常,那么恭喜你:你已经启动并运行起了我们魔改版的 AMBER + ML/MM 工作流。接下来可以基于已有的输入文件尝试常规 MD、增强采样或混合 ML/MM 计算。

五、使用说明(开启与控制 ML/MM 模型)
1.开启 MLIP 支持
在输入文件的 &cntrl namelist 中启用 MLIP 支持:
  ifmlp = 1
开启后,可以在专门的 mlp namelist 中配置更细粒度的控制选项。最核心的三个控制项如下(这三个已经覆盖了大多数常规应用):

2.关键控制参数(示例用法)
&cntrl
ifmlp = 1
/
&mlp
  mlp_model = "your_model_name"   ! 指定要加载的 MLIP 模型
  mlp_shake = 1              ! 是否对 ML 区域的原子启用 SHAKE 约束
  ani_mask = "@1-10,:20-25,30"    ! 用 AMBER 选择语法指定属于 ML 描述区的原子
/

mlp_model指定要使用的机器学习势模型(0:ANI-2x, 1:MACE-OFF23(S), 2: ANI-1xnr, 3:MACE-OFF23(M), 4:MACE-OFF23(L))
mlp_shake是否对 ML 区域内的原子启用 SHAKE 约束。强烈建议在常规模拟中对氢原子施加约束,因为当前的 MLIP 在高温或复杂环境下尚不完全稳定,未经约束的轻原子(尤其是 H)可能出现“乱跑”导致结构崩溃。启用 SHAKE 后这类不稳定性在实践中显著减少。(0:不SHAKE, 1:仅SHAKE含H原子对,2:SHAKE所有原子)
ani_mask用 AMBER 内置的原子/残基选择语法定义哪些原子由 MLIP 描述。例子解释:
              "@1-10 "表示原子编号 1 到 10;
              ":20-25,30 "表示残基 20 到 25 和 30 中的全部原子。

3.默认配置与扩展
我们已经为许多常见场景设定了合理默认值,使得只设置上面三项就能启动绝大多数的 ML/MM 模拟。其他高级控制项正在持续开发中,后续版本会在文档中补充详解。



最后,我们也想听听你的声音:你认为 ML/MM 未来应该朝哪些方向发展?你最希望在 ML/MM 中新增哪些功能?你们的想法可能会被采纳,成为未来 AMBER 新特性的设计灵感或开发方向。欢迎在评论/反馈中留下具体场景、痛点或大胆设想——有些看似天马行空的点子,正是下一代突破的起点。

对于有合作意向的课题组可以联系我们:


评分 Rate

参与人数
Participants 4
威望 +1 eV +9 收起 理由
Reason
dodobird1 + 2 233333
zjxitcc + 2 GJ!
student0618 + 5 好物!
sobereva + 1

查看全部评分 View all ratings

881

帖子

3

威望

1665

eV
积分
2606

Level 5 (御坂)

傻傻的木瓜

2#
发表于 Post on 2025-8-1 11:09:17 | 只看该作者 Only view this author
看看MLP(虽然只用过一点DeePMD-kit的NNP……)

我看上面第二篇文章提到专门训练的ANI-MBIS-q模型,需要ANI-2x数据集wB97X/def2-TZVPP密度下计算的MBIS电荷。一般来说在ML/MM计算ML区与MM区静电相互作用时,ML区的原子电荷有哪些处理方法,是不是都需要让机器学习从局部构型出发、同原子的能量和受力一并预测呢?
√546=23.36664289109

1149

帖子

6

威望

6627

eV
积分
7896

Level 6 (一方通行)

3#
发表于 Post on 2025-8-1 11:34:25 | 只看该作者 Only view this author
NAMD至少在2020年就有ML/MM的工作了(https://doi.org/10.1039/c9sc06017k)。NAMD本身的QM/MM interface很灵活,你只要写个脚本,将QM区域的受力和电荷输出到一个文件,NAMD就都可以读进去跑MD,所以连接任何类型的软件都不难。

151

帖子

4

威望

1083

eV
积分
1314

Level 4 (黑子)

4#
 楼主 Author| 发表于 Post on 2025-8-1 14:13:48 | 只看该作者 Only view this author
fhh2626 发表于 2025-8-1 11:34
NAMD至少在2020年就有ML/MM的工作了(https://doi.org/10.1039/c9sc06017k)。NAMD本身的QM/MM interface很 ...

已经更正,我没有细看NAMD的开发,但是这种通过外部读入的方式是不是在运行速度上会大打折扣?因为QM/MM是很慢的,所以无所谓,但是ML/MM是可以达到10ns/day的级别的,这种外部读入应该会大大限制ML/MM的速度

151

帖子

4

威望

1083

eV
积分
1314

Level 4 (黑子)

5#
 楼主 Author| 发表于 Post on 2025-8-1 14:15:20 | 只看该作者 Only view this author
Uus/pMeC6H4-/キ 发表于 2025-8-1 11:09
看看MLP(虽然只用过一点DeePMD-kit的NNP……)

我看上面第二篇文章提到专门训练的ANI-MBIS-q模型,需要 ...

当前几乎所有的主流开发者都是不变更ML区域的原子电荷的,一个是无法很好的预测,另一个是无法合理的考虑MM区域对ML区域电荷极化效应,再者是这种波动电荷会直接影响系统的能量守恒

129

帖子

0

威望

1495

eV
积分
1624

Level 5 (御坂)

6#
发表于 Post on 2025-8-1 23:42:03 | 只看该作者 Only view this author
目前可以添加link atoms吗

151

帖子

4

威望

1083

eV
积分
1314

Level 4 (黑子)

7#
 楼主 Author| 发表于 Post on 2025-8-2 11:26:49 | 只看该作者 Only view this author
beyond 发表于 2025-8-1 23:42
目前可以添加link atoms吗

已开发 尚未发表

1149

帖子

6

威望

6627

eV
积分
7896

Level 6 (一方通行)

8#
发表于 Post on 2025-8-4 17:42:28 | 只看该作者 Only view this author
Huschein 发表于 2025-8-1 14:13
已经更正,我没有细看NAMD的开发,但是这种通过外部读入的方式是不是在运行速度上会大打折扣?因为QM/MM ...

10ns/day的话应该还好,写到ramdisk里面的话读写应该不会是决速步

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-12 23:05 , Processed in 0.151122 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list