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

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

分子动力学知识库:实用指南

分子动力学存储库是一个版本控制的主机,用于模拟代码、输入数据集、力场参数和分析脚本,涵盖 GROMACS、LAMMPS 和 OpenMM 等引擎以及 DCD 和 XTC 等轨迹格式。存储选择在规模上很重要:一个 100,000 个原子的系统模拟 100 纳秒,每 10 皮秒写入一次坐标,产生大约 10,000 个帧,因此正确的结构决定了模拟在数年后是否保持可再现性。

要点

  • 分子动力学存储库不是一回事:它是一堆引擎代码、力场定义、拓扑和坐标文件、运行脚本和分析笔记本,每个都有不同的版本控制需求。
  • 二进制轨迹格式(XTC、DCD、TRR、NetCDF/AMBER)以精度与尺寸进行权衡;该选择会影响存储成本和长期可读性。
  • 再现性与其说取决于引擎,不如说取决于固定的四件事:引擎版本、力场版本、随机种子和确切的输入文件。
  • Git 是文本输入和脚本的正确工具,但大型二进制轨迹属于 Git LFS、DVC 或 Zenodo 等数据存储库,而不是主要的 Git 历史记录。
  • FAIR 数据原则(可查找、可访问、可互操作、可重用)清晰地映射到您在第一天做出的存储库布局决策。
  • 陌生人无法重新运行的存储库是文档,而不是可重复性。

“分子动力学存储库”实际上指的是什么

分子动力学存储库是一个重载的短语,当实验室小组试图标准化时,模糊性会导致真正的混乱。至少有四种不同的东西被称为这个名字,而且它们在技术上几乎没有任何共同点。

第一个是引擎存储库——模拟程序本身的源代码。 GROMACS、LAMMPS、NAMD、OpenMM 和 AMBER 各自位于自己的上游存储库中,您作为用户(而不是维护者)与它们进行交互。在这里,您关心的是发布标签和版本号,而不是代码。

第二个是力场和参数存储库。 CHARMM36、AMBER ff14SB、OPLS-AA 和粗粒度 Martini 系列等力场作为参数文件分发,通常具有自己的版本控制。 OpenKIM 项目维护着材料和分子系统原子间势的可互操作档案,这是一种与 Git 存储库完全不同的交付模型。

第三个是项目存储库:您自己的特定研究的工作目录。其中包含拓扑文件、坐标文件、“.mdp”或输入文件、运行脚本和分析代码。这是大多数再现性失败的根源。

第四个是数据存储库:轨迹、检查点和派生数据的长期存档。 Zenodo、Figshare 和机构存储库履行此角色并分配 DOI,以便可以引用特定数据集。

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

混淆这四者会导致可预见的错误:将 40 GB 的轨迹提交到 Git 中,或者将 Zenodo 存储视为活动工作目录。将它们分开是建立模拟项目时影响最大的单一决策。

长数据问题:为什么轨迹会破坏正常的版本控制

分子动力学模拟产生的长数据构成了存储库设计的决定性约束,在选择工具之前了解原因非常重要。一个由 100,000 个原子组成的单一系统模拟了 100 纳秒,每 10 皮秒写入一次坐标,产生了大约 10,000 个帧。存储为未压缩的双精度坐标,即大约 100,000 个原子 × 3 个坐标 × 8 字节 × 10,000 帧 — 在任何压缩之前为数百 GB。

轨迹格式的存在正是为了管理这一点。 XTC 使用具有可配置精度的有损压缩,通常为纳米级小数点后 3 位,并且是 GROMACS 的默认设置。 DCD 是经典的 CHARMM 格式,未压缩且具有广泛的可读性。 TRR 是 GROMACS 的无损全精度格式,当您需要精确的速度或力时非常有用。基于 NetCDF 的格式(包括 AMBER 轨迹约定)是自描述的并包含单元元数据。

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

存储库的实际后果是具体的:

  • Git 存储每个文件的每个版本。 每次运行时更改的轨迹都会使存储库永久膨胀,因为 Git 历史记录是仅追加的。即使删除文件也不会在不重写历史记录的情况下回收空间。
  • Git LFS(大文件存储) 用指针替换大文件并将内容存储在其他地方,这对于很少更改的高达几 GB 的文件非常有效。它不适合不断重新生成的轨迹。
  • DVC(数据版本控制) 通过哈希跟踪数据并将其存储在可配置的远程(本地磁盘、S3 或机构存储)中,同时在 Git 中保留小型“.dvc”指针文件。这适合数据较大且代码较小的模拟工作流程。
  • 具有 DOI 的数据存储库是轨迹的冻结、发布版本的正确存放位置。它们不是工作目录。

可行的分工:Git 用于脚本、输入文件和分析代码; DVC 或 Git LFS 用于中等二进制工件;最终发布的数据集的 DOI 发布存档。这使克隆时间保持理智并使已发布的记录可引用。

可再现模拟存储库剖析

可重复的分子动力学存储库具有可预测的布局,并且布局本身向打开它的任何人传达意图。以下结构是分子动力学项目的合理默认结构,适用于 LAMMPS、GROMACS 或 OpenMM 工作流程。

project/
├── README.md
├── environment.yml          # or requirements.txt / conda spec
├── systems/
│   ├── system-a/
│   │   ├── topology/
│   │   ├── coordinates/
│   │   └── parameters/
│   └── system-b/
├── simulations/
│   ├── equilibration/
│   │   ├── inputs/
│   │   └── run.sh
│   └── production/
│       ├── inputs/
│       └── run.sh
├── analysis/
│   ├── notebooks/
│   └── scripts/
├── data/                    # DVC-tracked or gitignored
└── docs/

每个目录都应有其位置。 “systems/”树将模拟内容的化学定义与模拟方式分开,这一点很重要,因为同一个系统通常在多个协议下运行。 “模拟/”树将平衡与生产分开,这种区别很容易丢失,而且重建成本高昂。

environment.yml 文件是最被低估的组件。将引擎版本、Python 分析堆栈和所有支持库固定到单个文件中意味着协作者可以使用单个命令重建环境。 Conda 环境文件、“pip”需求文件和容器定义(Docker 或 Apptainer/Singularity)都用于此目的;容器是最强大的,因为它们还捕获系统库。

“README.md”至少应指出:研究是什么、引擎和版本、力场和版本、如何运行从原始输入到最终数据的管道,以及大数据的位置。假设读者是作者的自述文件不是文档。

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

选择存储库主机:重要的标准

计算科学的存储库托管属于商业 Git 托管所不涵盖的范围。下表比较了大多数实验室小组在选择分子动力学存储库时实际考虑的选项。

主机/工具最适合处理大型二进制文件DOI / 引文笔记
GitHub / GitLab代码、脚本、小输入通过 Git LFS(配额限制)没有本地 DOI无处不在; LFS 配额会让你大吃一惊
Zenodo冻结已发布的数据集是的,慷慨的限制是的,每个版本 DOI与 GitHub 版本集成
Figshare数据集、图表、补充是的是的常见于期刊工作流程
机构存储库长期机构归档变化通常是的与机构挂钩的持久性
DVC+云远程主动大数据版本控制是的没有保持 Git 历史记录较小
开放科学框架项目级组织是的是的适合混合代码/数据项目

该决定通常归结为三个问题。数据是否可以通过 DOI 引用?应该在更改时对其进行版本控制,还是冻结一次?谁负责在十年内保持它可用?

一种常见且可防御的模式是 GitHub,用于启用 Zenodo 集成的代码,以便每个标记的版本自动创建一个 DOI,以及用于工作数据的 DVC。这提供了可引用的版本,而不会增加 Git 历史记录。

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

力场、参数和版本控制陷阱

力场版本控制是可重复性悄然失败的地方,它值得单独处理,因为失败模式是不可见的。相隔三年运行的两个名为“CHARMM36”的模拟可能使用不同的参数集,因为力场已修改。 AMBER 蛋白力场也是如此,其中 ff99SB、ff99SB-ILDN、ff14SB 和后续版本产生明显不同的行为。

问题是力场文件通常分布在引擎安装中或从项目网站下载,并且版本不会记录在模拟输出中的任何位置。固定引擎版本但不固定力场版本的分子动力学存储库只能实现一半的可重复性。

实际缓解措施:

  • 将参数文件直接存入存储库。 将使用的确切 .itp、.prm 或 .frcmod 文件复制到 systems/*/parameters/ 中并提交它们。这些是小文本文件,它们在存储库中的存在消除了任何歧义。
  • 将力场名称和修订保存在自述文件和机器可读的元数据文件中。 简短的 YAML 或 JSON 文件以及输入不需要任何成本,并且可以明确回答问题。
  • 记下所有本地修改。 如果您调整了部分电荷或绑定参数,则该更改应位于存储库中,而不是位于个人临时目录中。
  • 对于材料模拟中的原子间势,更喜欢版本化存档。 OpenKIM 的存在正是为了使势可引用和版本化,并且它的使用消除了一类歧义。

一般原则:任何影响数值结果且不是引擎二进制文件的内容都属于存储库中的已提交文件。

存储库之外的再现性:种子、硬件和浮点

分子动力学存储库可以完美组织,但仍然无法重现结果,因为分子动力学具有版本控制之外的非确定性来源。了解它们可以避免错误的信心。

随机种子控制初始速度分配,并在随机方法中控制恒温器和恒压器的行为。如果未保存种子,则即使使用相同的输入,运行也无法重现。许多引擎接受显式种子;使用它并保存它。

并行分解影响浮点求和的顺序。在 16 核和 64 核上运行相同的系统可能会产生由于累积的舍入差异而随着时间的推移而出现差异的轨迹。这不是一个 bug;这是不同阶次归约下浮点运算的本质。这就是不同阶次归约下浮点运算的本质。为了严格的再现性,记录域分解和核心数量,或者接受按位标识不可行并以统计再现性为目标。

硬件和编译器差异通过不同的数学库和指令集引入进一步的变化。容器减少但并没有消除这种情况。

恒温器和恒压器的选择会改变系综,从而改变物理学。存储库应明确记录系综 — NVT、NPT、NVE — 以及耦合常数。

诚实的框架是,在固定的硬件和软件配置中可以实现按位再现性,并且统计再现性是跨配置的现实目标。记录配置的存储库使得第一个可以实现,第二个可以验证。

FAIR 原则应用于模拟数据

FAIR 原则——可查找、可访问、可互操作、可重用——是为一般研究数据制定的,并转化为特定的分子动力学存储库实践。

可查找意味着数据集具有持久标识符和描述性元数据。来自 Zenodo 或机构存储库的 DOI 可以满足这一点;实验室服务器上的目录并非如此。

可访问意味着人或机器可以使用标准协议在明确的许可下检索数据。在存入时选择开放许可证可以避免数据已存档但在法律上无法使用的常见情况。

可互操作意味着格式是标准的且有记录的。使用 XTC、DCD 或 NetCDF 而不是自定义二进制格式并记录单位,使得多年后标准工具可以读取轨迹。

可重用意味着有足够的上下文可以将数据重用于新的目的。这需要上述元数据:引擎版本、力场版本、系综、温度和任何应用的处理。

FAIR 框架很有用,因为它将注意力从“我是否保存了文件”转移到了“其他人是否可以使用这些文件”。这些是不同的问题,只有第二个问题对于长期数据很重要。

实际设置:一个最小的工作示例

适用于其他引擎的 GROMACS 式分子动力学存储库工作流程的最小可重复设置在实践中看起来像这样。

初始化存储库并配置大文件处理:

git init md-项目
cd md-项目
git lfs install
git lfs track "*.xtc" "*.trr" "*.tpr"
git add .gitattributes

创建环境规范并将其与输入一起提交:

conda env export --no-builds > environment.yml
git add environment.yml systems/ simulations/ analysis/
git commit -m "Initial reproducible setup"

标记版本,以便可以创建 DOI 并将冻结数据集与工作存储库分开归档。标签标记了代码的确切状态;存档包含数据的确切状态。

上面的工作流程故意被最小化。重点不在于工具的复杂程度,而在于提交决定结果的元素以及归档太大而无法版本化的元素的纪律。

资料来源和进一步阅读

  • 分子动力学 — 维基百科:分子动力学(MD)是一种用于分析原子和分子物理运动的计算机模拟方法。原子和分子可以相互作用…

常见问题

什么是分子动力学存储库?

分子动力学存储库是一个版本控制的存储,用于定义和重现模拟的文件:引擎输入、拓扑和坐标文件、力场参数、运行脚本和分析代码。该术语还指 GROMACS 和 LAMMPS 等引擎的上游源存储库,以及保存轨迹的数据档案。区分这三种用途可以防止大多数存储库设计错误。

我应该在 Git 中存储 MD 轨迹吗?

轨迹通常不应该进入普通的 Git 历史记录,因为 Git 永久存储每个版本,而大型二进制文件会不可逆转地使存储库膨胀。 Git LFS 适用于很少更改的中等大小的文件,而 DVC 适用于频繁重新生成的大数据。轨迹的已发布、冻结版本属于 DOI 发布数据存储库,例如 Zenodo。

如何使分子动力学模拟具有可重复性?

再现性需要固定引擎版本、力场版本、随机种子、精确的输入文件以及硬件或容器配置。验证存储库中的力场参数文件可以消除最常见的静默发散源。按位再现性在固定配置中是现实的;在不同数量的内核或硬件上,旨在实现统计再现性并记录差异。

我应该使用什么轨迹格式?

XTC 是 GROMACS 工作流程的一个很好的默认设置,因为它可以很好地压缩并具有可配置的精度。 DCD 具有广泛的可读性和未压缩性,适合互操作性。 TRR 保持完整的精度,并且在速度或力很大时非常有用。基于 NetCDF 的格式是自描述的并包含单元元数据,这有利于长期重用。

我的模拟数据需要 DOI 吗?

如果您希望数据集独立于论文而被引用,那么 DOI 是必要的,期刊和资助者越来越期望这一点。 Zenodo 和 Figshare 都创建 DOI 并与 GitHub 版本集成,因此标记版本可以自动生成可引用的标识符。对于内部未发表的作品,DOI 是可选的,但相同的归档规则仍然有效。

力场版本应该如何记录?

力场参数文件必须保存在存储库的参数目录下并进行验证,因为它们是小文本文件,其确切内容决定结果。力场名称和修订版本还必须记录在自述文件和机器可读的元数据文件中。对参数或相关设置的任何本地更改都应经过验证,而不是保存在主目录中。

Frequently asked questions

什么是分子动力学存储库?

分子动力学存储库是一个版本控制的存储,用于定义和重现模拟的文件:引擎输入、拓扑和坐标文件、力场参数、运行脚本和分析代码。该术语还指 GROMACS 和 LAMMPS 等引擎的上游源存储库,以及保存轨迹的数据档案。区分这三种用途可以防止大多数存储库设计错误。

我应该将 MD 轨迹存储在 Git 中吗?

轨迹通常不应该进入普通的 Git 历史记录,因为 Git 永久存储每个版本,而大型二进制文件会不可逆转地使存储库膨胀。 Git LFS 适用于很少更改的中等大小的文件,而 DVC 适用于频繁重新生成的大数据。轨迹的已发布、冻结版本属于 DOI 发布数据存储库,例如 Zenodo。

如何使分子动力学模拟具有可重复性?

再现性需要固定引擎版本、力场版本、随机种子、精确的输入文件以及硬件或容器配置。验证存储库中的力场参数文件可以消除最常见的无声分歧源。按位再现性在固定配置中是现实的;在不同数量的内核或硬件上,旨在实现统计再现性并记录差异。

我应该使用什么轨迹格式?

XTC 是 GROMACS 工作流程的一个很好的默认设置,因为它可以很好地压缩并具有可配置的精度。 DCD 具有广泛的可读性和未压缩性,适合互操作性。 TRR 保持完整的精度,并且在速度或力很大时非常有用。基于 NetCDF 的格式是自描述的并包含单元元数据,这有利于长期重用。

我的模拟数据需要 DOI 吗?

如果您希望数据集独立于论文而被引用,那么 DOI 是必要的,期刊和资助者越来越期望这一点。 Zenodo 和 Figshare 都创建 DOI 并与 GitHub 版本集成,因此标记版本可以自动生成可引用的标识符。对于内部未发表的作品,DOI 是可选的,但相同的归档规则仍然有效。

力场版本应该如何记录?

力场参数文件必须在参数目录下的存储库中出售并进行验证,因为它们是小文本文件,其确切内容决定结果。力场名称和修订版本还必须记录在自述文件和机器可读的元数据文件中。对费用或相关设置的任何本地更改都应经过验证,而不是保存在主目录中。


Learn Python by coding in your browser

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