跳转到主要内容
ActivePapers 将您的数据存储为可重新计算的文档,确保任何发布的结果均可重新运行、验证并永久保存。

本站部分链接为联盟营销链接:如果您通过这些链接购买,我们可能会获得佣金,且不会增加您的成本。这绝不会影响我们的推荐建议。详情请参阅我们的联盟披露声明。 联盟营销披露.

Python 分子模拟:实用指南

Python 分子模拟结合了三层:模拟引擎(用于分析的 OpenMM、ASE、LAMMPS、GROMACS 或 MDAnalysis)、驱动它的 Python 接口以及用于存储和分析轨迹的数据堆栈(NumPy、HDF5、pandas)。本指南解释了这些层如何组合在一起、每个引擎何时是正确的选择以及潜在的坑在哪里。

  • 将引擎与物理相匹配,而不是炒作。 OpenMM 在 GPU 上主导生物分子 MD; ASE 是电子结构和原子工作流程的标准 Python 粘合剂; LAMMPS 和 GROMACS 仍然是大规模经典 MD 的主力。
  • Python 层通常是驱动程序,而不是集成器。 大多数 Python 分子模拟生产运行通过 Python API 调用编译引擎,然后使用 NumPy 和 MDAnalysis 进行后处理。
  • 单位和文件格式比物理引起更多错误。 ASE 的单位系统、OpenMM 的纳米/千焦耳约定以及 HDF5 分块决策都值得特别关注。
  • 再现性是一种设计选择。 固定引擎版本,记录随机种子,并沿着轨迹存储完整的输入文件。
  • 您很少需要编写自己的积分器。 仅当您测试新算法时才使用自定义循环,而不是当您想要结果时。

“Python 分子模拟”的实际含义

Python 分子模拟涵盖了广泛的活动,这些活动具有一个共同的特征:Python 协调计算。一方面,研究人员使用 ASE 构建了一块铜板,连接了 EMT 计算器,并用几行对几何结构进行弛豫。在另一端,实验室在 GPU 集群上运行膜蛋白的微秒级显式溶剂分子动力学,由 OpenMM 处理集成,Python 脚本管理数百个副本。

在这两个极端之间有数十个工作流程:聚合物构象的蒙特卡洛采样、与 Python 封装的 AutoDock Vina 对接、通过 alchemlyb 进行自由能计算,以及从 SchNetPack 或 MACE 等库中机器学习的原子间势。统一的想法是 Python 提供控制平面,而编译代码提供计算平面。

这种分工很重要,因为它决定了下游的一切。 Python 驱动的引擎为您提供可读的设置脚本、简单的参数扫描以及对轨迹数据的直接访问。这也意味着你的性能上限是由引擎决定的,而不是由 Python 本身决定的——这种区别会让那些认为“Python 很慢”适用于整个管道的新手感到困惑。

核心引擎及其用途

选择 Python 分子模拟引擎是第一个真正的决定。下表总结了实践中最重要的权衡。

引擎主域Python 接口GPU 支持最佳时间
OpenMM生物分子医学博士原生 Python API强大(CUDA、OpenCL、HIP)您需要具有自定义力的快速显式溶剂 MD
ASE原子/电子结构原生Python通过计算器您想要一个跨多种 DFT 和经典代码的 API
LAMMPS材料,粗粒 MDPython 模块lammps是(KOKKOS、GPU 封装)您需要大规模并行性和自定义势
GROMACS生物分子医学博士gmxapi,或子进程是的您想要一个成熟的、经过广泛验证的 MD 包
MDAnalysis轨迹分析原生Python不适用(分析)您需要读取和分析多种格式的轨迹
RDKit化学信息学原生Python不适用您需要构建、清理或指纹分子

OpenMM 值得特别提及,因为它的 Python API 不是包装器——它是主要接口。您定义一个“系统”,添加力,创建一个“模拟”,然后运行。自定义力可以用 Python 编写并进行 JIT 编译,这使得它对于方法开发异常友好。

Related: — Project-based data-science paths with a guided terminal and real datasets.

ASE 采用相反的理念:它是许多计算器之上的薄而均匀的层。使用 EMT 松弛分子的相同脚本可以通过改变管道中的一行来使用 GPAW、VASP 或机器学习势执行相同的松弛。这种一致性就是 ASE 出现在如此多已发布的工作流程中的原因。

LAMMPS 和 GROMACS 是举重者。他们的 Python 绑定是真实的,但对其设计来说不太重要,因此期望以其本机格式编写输入文件,并主要使用 Python 进行编排和分析。

设置可重现的环境

可重现的 Python 分子模拟环境从显式版本固定开始。 Conda 和 Mamba 仍然是最实用的工具,因为许多引擎附带编译的二进制文件,这些二进制文件具有特定的 BLAS、CUDA 和 MPI 要求,而 pip wheel 并不总是满足这些要求。

Worth a look: — One subscription for university-backed Python and data-science certificates.

一个最小的、诚实的食谱看起来像这样:

1.为每个项目创建一个专用环境:conda create -n md-project python=3.11。 2. 从推荐的渠道安装引擎(OpenMM 和 ASE 都发布 conda 软件包;LAMMPS 可通过 conda-forge 获得)。 3. 安装分析堆栈:NumPy、SciPy、pandas、MDAnalysis、h5py。 4. 使用 conda env export --no-builds >environment.yml 冻结环境并提交。 5. 在输出文件元数据中记录引擎版本,而不仅仅是在环境文件中。

第五步是人们跳过的一步。环境文件漂移;将版本嵌入轨迹或日志意味着结果始终可以追溯到生成它的代码。

对于基于容器的工作流程,Apptainer(以前称为 Singularity)在 HPC 集群上很常见,因为它不需要 root。 Docker 在工作站和云实例上运行良好。无论哪种方式,容器映像标签都是来源记录的一部分。

构建模拟:具体演练

Python 中的分子模拟通常遵循五个阶段。了解每个阶段可以明确错误隐藏的位置。

第 1 阶段 — 系统构建。 您需要坐标和拓扑。对于小分子,RDKit 从 SMILES 字符串生成 3D 坐标。对于蛋白质,PDBFixer(OpenMM 生态系统的一部分)添加缺失的原子和氢。对于材料,ASE 的“bulk”和“表面”构建器直接创建晶体和板。

Related: — A deep technical library of scientific-computing books, videos and live training.

第 2 阶段 — 力场分配。 生物分子系统通常通过 OpenMM 的“ForceField”类使用 AMBER、CHARMM 或 OPLS 力场。材料系统使用 EAM、Tersoff 或机器学习模型等潜力。这个阶段是大多数无声错误发生的地方:不匹配的原子类型会产生看似合理但错误的轨迹。

第 3 阶段 — 平衡。 能量最小化,然后逐渐加热,然后密度平衡。跳过或匆忙这个阶段会产生伪影,这些伪影稍后会显示为“有趣”但虚假的行为。

第 4 阶段 — 生产。 实际采样运行。您可以在此处决定时间步长、恒温器、恒压器和输出频率。 2 fs 时间步长是刚性键合生物分子系统的标准;灵活或反应式系统需要更小的步骤。

If you are shopping: — Interactive Python and data-science courses you code directly in the browser.

第 5 阶段 — 分析。 MDAnalysis 从数十种格式读取轨迹并将其作为 NumPy 数组公开。典型的分析包括 RMSD、回转半径、氢键计数和径向分布函数。

每个阶段都可以编写脚本,每个阶段都应该编写自己的日志。当结果看起来错误时,日志会告诉您要检查哪个阶段。

性能:时间实际上都去哪儿了

Python 分子模拟中的性能直觉不同于一般的 Python 直觉。集成循环在编译代码中运行,因此 Python 开销通常可以忽略不计。瓶颈在其他地方:

  • 力评估在大型系统中占主导地位。当系统超过大约数万个原子并且力场对 GPU 友好时,GPU 加速会发挥最大作用。
  • 当您过于频繁地写入轨迹时,I/O 会成为瓶颈。为一百万步运行编写每一步都会产生巨大的文件并导致 GPU 停止运行。
  • 从挂钟角度来看,分析通常是项目中最慢的部分,因为它在模拟完成后在 CPU 上运行。使用 NumPy 进行矢量化并使用 MDAnalysis 的并行分析类有很大帮助。

实用规则:选择输出频率,以便轨迹捕获您关心的最快运动,仅此而已。对于大多数生物分子问题,即使时间步长为 2 fs,每 1-10 ps 保存一次就足够了。

数据格式和 HDF5 问题

轨迹存储是 python 分子模拟中反复出现的决策。常见的选项有:

  • DCD 和 XTC:紧凑的二进制格式,广泛支持,无元数据。
  • NetCDF:自描述,适用于较小的轨迹。
  • HDF5:灵活,支持任意元数据,但需要经过深思熟虑的分块和压缩选择。
  • PDB:人类可读,不适合大轨迹。

HDF5 很有吸引力,因为它将坐标、拓扑和元数据存储在一个文件中,并且 h5py 与 NumPy 干净地集成。问题是 HDF5 性能在很大程度上取决于块大小和压缩设置。沿着帧轴进行分块,块长度为几百帧,gzip 压缩为 4 级,这是一个合理的起点,但正确的值取决于您的访问模式 - 顺序读取有利于大块,随机帧访问有利于较小的块。

一个常见的错误是在 HDF5 中存储轨迹而不记录单位。 ASE 在内部以 eV 和 Ångström 存储所有内容; OpenMM 的工作单位为纳米和每摩尔千焦耳。默默地混合两者会产生十倍的坐标偏差。

分析和可视化

分析是 Python 分子模拟为每行代码提供最大价值的地方。 MDAnalysis 及其同级 MDTraj 都将轨迹读取到 NumPy 数组中,并且都处理在项目生命周期中积累的格式动物园。

可视化分为两类。静态出版物数据来自 Matplotlib,通常采用 seaborn 样式。交互式探索来自 NGLView(Jupyter 集成)、PyMOL 的 Python API 或 VMD 的 Tcl 桥。对于笔记本内部的快速检查,NGLView 是无与伦比的;对于精美的图形,Matplotlib 加上渲染的结构图像是标准组合。

一种未充分利用的技术:计算接触图或氢键占据矩阵并将其渲染为热图。这些总结通常揭示 RMSD 图隐藏的构象变化。

常见陷阱以及如何避免它们

单位不匹配。 如上所述,但值得重复,因为它是 python 分子模拟中最常见的无声错误。将单位写入变量名或使用单位库。

平衡不足。 未平衡的系统会在生产过程中发生漂移,并且这种漂移看起来像是真正的构象变化。

周期性边界伪影。 如果盒子太小,分子可以与它们自己的图像相互作用。至少两倍截止值的最小图像距离是一个合理的指导方针。

不可重复的运行。 Langevin 恒温器和随机初始速度都消耗随机数。记录种子。

忽略收敛。 一条轨迹就是一个样本。误差线需要多次独立运行或块平均。

版本漂移。 引擎更新可以更改默认参数。固定版本并在升级时重新验证。

何时编写自己的代码

有时需要编写自定义积分器或力计算 - 例如,在实现新的增强采样方法或用于 Python 分子模拟的定制潜力时。在这些情况下,Python 加上 NumPy 是一个合理的原型环境,而 Numba 或 JAX 等工具可以使编译代码的性能达到可达到的水平。

诚实的指导是这样的:用 Python 构建原型,根据已知结果进行验证,然后才决定是否优化。一旦算法正确,许多“慢”Python 实现结果证明足够快,而过早的优化会浪费本可以用于验证的时间。

对于生产方法开发,请考虑为现有引擎做出贡献,而不是维护分叉。 OpenMM 的自定义力接口和 ASE 的计算器协议的存在正是为了吸收新方法而不分叉核心。

资料来源和进一步阅读

  • 分子建模 — 维基百科:分子建模涵盖用于建模或模拟分子行为的所有理论和计算方法。这些方法用于以下领域…

常见问题

用于分子模拟的最佳 Python 库是什么?

没有最好的库,因为答案取决于物理学。 OpenMM 是 GPU 上的生物分子动力学最强大的选择,ASE 对于原子和电子结构工作流程来说是最灵活的,而 LAMMPS 或 GROMACS 对于非常大的经典系统来说是首选。许多项目使用多个项目,并通过 ASE 或自定义脚本来协调它们。

Python 运行分子动力学的速度足以进行真正的研究吗?

是的,因为积分循环在编译代码中运行。 OpenMM、LAMMPS 和 GROMACS 都在 C++ 或 CUDA 中执行其内部循环,而 Python 则处理设置、控制和分析。 Python 开销通常只占总运行时间的一小部分,因此实际性能上限是由引擎和硬件决定的,而不是由语言决定的。

在 Python 中进行分子模拟需要 GPU 吗?

GPU 对显式溶剂生物分子 MD 和大型系统有很大帮助,通常可以达到一个数量级或更多。隐式溶剂模拟、小型系统和大多数分析任务都可以在 CPU 上顺利运行。当您开始时,使用 OpenMM 或 ASE 的仅 CPU 工作流程是完全可行的,您可以稍后添加 GPU 加速。

如何有效存储分子动力学轨迹?

使用二进制格式而不是文本。 DCD和XTC结构紧凑,支持广泛; HDF5 更灵活,可以存储元数据,但需要仔细的分块和压缩设置。避免每个时间步都写入——每 1-10 ps 保存一次通常可以捕获感兴趣的运动,同时保持文件大小易于管理。

OpenMM 和 ASE 有什么区别?

OpenMM 是一个分子动力学引擎,拥有自己的 Python API,针对生物分子力场和 GPU 执行进行了优化。 ASE 是一个与计算器无关的框架,为许多模拟代码提供统一的接口,包括 DFT 包和经典势。 OpenMM 运行动力学模拟; ASE 会编排您指向的任何代码。

如何使我的 Python 分子模拟具有可重复性?

将引擎和库版本固定在环境文件或容器映像中,记录恒温器和初始速度的随机种子,将完整的输入文件与轨迹一起存储,并将引擎版本嵌入输出元数据中。这四个步骤涵盖了实践中报告的大多数可重复性失败的情况。

进一步阅读

OpenMM、ASE 和 MDAnalysis 的官方文档是 python 分子模拟最可靠的起点,每个项目都维护着活跃的讨论论坛。有关基本方法的背景,关于分子动力学的维基百科文章 提供了可靠的概念概述,并且 LAMMPS 文档 对力场和积分器的详细信息异常详尽。

Frequently asked questions

用于分子模拟的最佳 Python 库是什么?

没有最好的库,因为答案取决于物理学。 OpenMM 是 GPU 上的生物分子动力学最强大的选择,ASE 对于原子和电子结构工作流程来说是最灵活的,而 LAMMPS 或 GROMACS 对于非常大的经典系统来说是首选。许多项目使用多个项目,并通过 ASE 或自定义脚本来协调它们。

Python 运行分子动力学的速度足以满足实际研究的需要吗?

是的,因为集成循环在编译代码中运行。 OpenMM、LAMMPS 和 GROMACS 都在 C++ 或 CUDA 中执行其内部循环,而 Python 则处理设置、控制和分析。 Python 开销通常只占总运行时间的一小部分,因此实际性能上限是由引擎和硬件决定的,而不是由语言决定的。

在 Python 中进行分子模拟需要 GPU 吗?

GPU 对显式溶剂生物分子 MD 和大型系统有很大帮助,通常可以达到一个数量级或更多。隐式溶剂模拟、小型系统和大多数分析任务都可以在 CPU 上顺利运行。当您开始时,使用 OpenMM 或 ASE 的仅 CPU 工作流程是完全可行的,您可以稍后添加 GPU 加速。

如何有效存储分子动力学轨迹?

使用二进制格式而不是文本。 DCD和XTC结构紧凑,支持广泛; HDF5 更灵活,可以存储元数据,但需要仔细的分块和压缩设置。避免每个时间步都写入——每 1-10 ps 保存一次通常可以捕获感兴趣的运动,同时保持文件大小易于管理。

OpenMM 和 ASE 有什么区别?

OpenMM 是一个分子动力学引擎,拥有自己的 Python API,针对生物分子力场和 GPU 执行进行了优化。 ASE 是一个与计算器无关的框架,为许多模拟代码提供统一的接口,包括 DFT 包和经典势。 OpenMM运行动态; ASE 会编排您指向的任何代码。

如何使我的 Python 分子模拟具有可重复性?

将引擎和库版本固定在环境文件或容器映像中,记录恒温器和初始速度的随机种子,将完整的输入面板与轨迹一起存储,并将引擎版本嵌入输出元数据中。这四个步骤涵盖了实践中报告的大多数再现性失败的情况。进一步阅读 [OpenMM](https://openmm.org)、[ASE](https://wiki.fysik.dtu.dk/ase/)和[MDAnalysis](https://www.mdanalysis.org)的官方文档是python分子模拟最可靠的起点,每个项目都保持着活跃的讨论


Learn Python by coding in your browser

Interactive Python and data-science courses you code directly in the browser