本帖最后由 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 目录下执行: 如果报错,请参考官方 Amber 手册(AMBER Manual)排查依赖或环境设置问题。常见需要确认的包括编译器版本、MPI 可用性、系统库路径等。仅在配置成功(无错误输出)的情况下执行: 这里的 -j 可以根据你的 CPU 核数指定,例如 make install -j8 以加速编译。
二、Libtorch与MKL 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 克隆到临时目录: - git clone https://github.com/ClickFF/MLMM4AMBER.git
复制代码然后找到/AmberTools/src/sander/CMakeLists.txt这个文件,在文件第七行(或靠近开头、CMake 前置配置区域)添加 / 修改为你本地解压的 Libtorch 路径: - list(APPEND CMAKE_PREFIX_PATH "/your/libtorch/path")
复制代码
四、安装,MLIP模型下载与环境配置 1.重新配置并编译(生成 ML/MM 版 SANDER) 前提:你已经完成了第 3 节中“用魔改版 SANDER 覆盖”与 Libtorch 路径注入的修改。
入原先的 build 目录。绝对不要执行 clean_cmake,因为 CMake 配置文件发生了变更,直接重跑配置即可让改动生效。 如果这一步自动探测到修改,会重新生成配置(相当于“隐式”跑了一次);如果正常返回(无致命错误),继续:
2.部署 MLIP 模型 在任意位置新建一个模型存放目录,将我们预打包好的模型文件(例如经过 Libtorch 序列化的 .pt / TorchScript 格式)复制到该目录: - cp /path/to/your/prebuilt_model.pt ~/mlip_models/
复制代码在你的 shell 配置文件(如 ~/.bashrc 或 ~/.zshrc)中设置模型路径变量: - export MODEL_PATH=~/mlip_models
复制代码
3.加载魔改版环境(AMBER + Libtorch 连接) 编译过程会在 amber22_src 目录外生成一个 amber22 运行时结构(假设你的源和构建路径是按照标准布局)。在 shell 配置中添加对该 AMBER 运行环境的加载: - 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 新特性的设计灵感或开发方向。欢迎在评论/反馈中留下具体场景、痛点或大胆设想——有些看似天马行空的点子,正是下一代突破的起点。
对于有合作意向的课题组可以联系我们:
|