ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

AI力场二次开发教程(10):对接 GROMACS——Interchange 一键导出 + gmxapi

2026/9/4 5:09:54 拓冰建站 浏览量
AI力场二次开发教程(10):对接 GROMACS——Interchange 一键导出 + gmxapi 对接GROMACSInterchange一键导出 gmxapi驱动版本声明本教程基于 GROMACS 2024.6source GMXRC后使用openff-interchange 0.5.1openff-toolkit 0.19.0。interchange.to_gromacs(prefixligand)输出ligand.groligand.topgmx grompp -f min.mdp -c ligand.gro -p ligand.top -o tpr与gmx mdrun是 GROMACS 标准命令链路gmxapi的高层 Python 封装用法以官方 gmxapi 使用指南为准。min.mdp为最小化参数文件其integrator steep、define -DFLEXIBLE等为能量最小化常规设置具体取值以官方 mdp 文档为准。一句话结论承接第 9 篇的interchange.to_gromacs(prefixligand)把ligand.gro与ligand.top交给gmx grompp -f min.mdp -c ligand.gro -p ligand.top -o tpr获得tpr再gmx mdrun -s tpr -deffnm em即可用 GROMACS 跑能量最小化也可用 gmxapi 的import gmx高层接口在同一 Python 上下文里驱动这条流水线。〇、认知问题GROMACS 为什么把编译输入grompp和跑mdrun分成两步tpr文件承担什么职责interchange.to_gromacs产出的ligand.top/ligand.gro如何被grompp消费min.mdp 里integratorsteep的意义gmxapi 与命令行gmx grompp/mdrun的关系是什么用 Python 驱动能带来什么工程收益能量最小化在 GROMACS 里看什么输出判断成功Epot收敛的标准是什么一、机制解析GROMACSGROMACS 2024.6source GMXRC 后调用gmx是严格的C→B→T→R→MD流水线.gro坐标、.top拓扑、*.mdp参数、grompp生成.tpr编译好的运行输入、mdrun执行。这套拆分让准备与执行解耦tpr是自包含的二进制运行定义可提交 GPU 或集群而无需再解析拓扑。1.1 一键导出的价值第 9 篇的Interchange.to_gromacs(prefixligand)一次给出ligand.gro与ligand.top后者把 AI 力场此处以 SMIRNOFF/Interchange 为例Espaloma 体系亦可经 Interchange 导出编译成 GROMACS 能读的[ atomtypes ]、[ bonds ]、[ angles ]、[ dihedrals ]、[ pairs ]、[ nonbond_params ]等节。这样AI 力场不再被锁死在 OpenMM而是无缝接入 GROMACS 庞大的生态gmx工具链、trajectory 分析、GPU 并行、集群调度。为什么这件事值得单独一篇因为在很多工业与学术环境里GROMACS 才是生产主力它有成熟的自由能扰动FEP、伞形采样、适应性采样脚本以及遍布超算中心的成熟端口。如果 AI 力场只能跑 OpenMM等于把前面三篇攒下的参数化能力圈在单一引擎里。to_gromacs把中间表示映射成 GROMACS 文本拓扑等于给了 AI 力场一张通往生产生态的通行证——代价很小收益是整条传统 MD 工具链都能复用。Interchange.to_gromacs(prefixligand) ├── ligand.gro 坐标 盒向量 └── ligand.top GROMACS 拓扑含力常量/几何/非键 │ gmx grompp -f min.mdp -c ligand.gro -p ligand.top -o tpr │ gmx mdrun -deffnm em → 能量最小化收敛 → em.gro / em.edr / em.log1.2 grompp 与 mdrun 的分工grompppreprocessor读.mdp .gro .top做拓扑检查、生成.tpr遇到缺失参数会报错是把文本转成可执行输入的一步。mdrun只读.tpr负责实际积分/最小化并写.log/.gro/.edr/.xtc/.trr。分离的关键收益tpr自包含、跨机器可移植、GPU/并行线程在mdrun一侧指定。需要特别说明ligand.gro里每一行是resname resid atomname atomno x y z格式第一行写原子总数第二行写盒子向量若to_gromacs输出单分子真空体积项常写为零或很小最小化本身不受盒影响但做周期边界模拟前必须补齐合理盒与-DPOSRES等预处理器定义。认清 gro/top 的格式差异是排查grompp 报错但看不出原因时的重要起点。1.3 min.mdp 的最小化设置能量最小化通常用integrator steep最陡下降稳或cg共轭梯度快。define -DFLEXIBLE常配合约束冻结使用最小化可不开温度耦合tcoupl no。emtol能量梯度的收敛阈值决定停判emstep控制步长。最小化后读em.log/em.edr里的Potential (kJ/mol)Epot看它是否下降至平台不再显著变小的稳定值且无 NaN。1.4 gmxapiPython 高层接口gmxapiimport gmx把grompp/mdrun封装成 Python 可操作的对象用于构建可脚本化、可组合的模拟工作流如热浴/拉伸手表、多副本、参数扫描。它面向在 Python 里声明并驱动 GROMACS 任务而不是逐行打 shell 命令适合二次开发包装层与 CI 自动化。以下骨架演示用 Python 上下文先to_gromacs再用gmx命令完成最小化再贴 gmxapi 高层分支。二、完整代码与逐行剖析2.1 导出配体拓扑锚点 C# filename: 10_export.py# 锚点 C/D导出配体的 GROMACS gro/topfromopenff.toolkitimportForceField,Molecule,Topologyfromopenff.interchangeimportInterchange moleculeMolecule.from_smiles(CN1CNC2C1C(O)N(C(O)N2C)C)# 咖啡因配体ffForceField(openff-2.0.0.offxml)topologyTopology.from_molecules([molecule])interchangeInterchange.from_smirnoff(force_fieldff,topologytopology,charge_from_molecules[molecule],)# 一次性输出 ligand.gro ligand.topinterchange.to_gromacs(prefixligand)print(已导出: ligand.gro, ligand.top)2.2 最小化用 min.mdp写文件# filename: min.mdpintegratorsteep;最陡下降能量最小化 nsteps5000;最大迭代步若早收敛由 emtol 提前停 emtol10.0;能量梯度收敛阈值kJ/mol/nm示意值 emstep0.01;初始步长(nm)nstxout100;周期输出坐标供观察 define;无特殊定义如需冻结可-DFLEXIBLE说明emtol/emstep/nsteps为示意值精确推荐值以 GROMACS 官方 mdp 文档为准。2.3 命令行链路source GMXRC 后执行# filename: 10_run_min.sh# #!/usr/bin/env bash —— source GMXRC 使 gmx 可用source/opt/gromacs/bin/GMXRC# 路径以你本地 GROMACS 2024.6 安装为准gmx grompp-fmin.mdp-cligand.gro-pligand.top-oem.tpr gmx mdrun-sem.tpr-deffnmem# 成功标志生成 em.gro / em.edr / em.logem.log 末尾出现最小化收敛信息-deffnm em使所有输出统一前缀em.*。最小化成功后em.log里的Potential会收敛到一个稳定负值示意体系约-123.4 kJ/mol量级具体依分子/电荷/非键策略而异并打印Steepest Descents converged to machine precision或类似提示。2.4 gmxapi 高层骨架教学示意以官方 gmxapi 指南为准# filename: 10_gmxapi.py# 教学示意gmxapi Python 高层封装骨架。确切 API 以 gmxapi 官方 Python reference 为准importgmx# gmxapiimportgmxapi.md# 教学示意raises ImportError 时以官方文档为准# 官方模式往往形如# w gmx.workflow.Workflow.from_tpr(em.tpr, append_outputFalse)# md gmx.md.run(w, tmpdir.)# md.tpr 读取运行完成句柄md.steps 等句柄可查# 因 gmxapi 版本差异较大本文仅给骨架占位真实调用请参考# https://manual.gromacs.org/2024-beta/gmxapi/userguide/pythonreference.htmlprint(gmxapi 高层接口调用骨架请以官方 gmxapi Python reference 为准)真实性强调gmxapi 各版本 API 多次演进gmx.workflow.Workflow.from_tpr、gmx.md.run、句柄语义等为不污染内容本文不编造具体签名只做骨架占位并明确指向官方 reference 链接。命令行gmx grompp/mdrun链路是 100% 可运行、可核验的。补充说明 gmxapi 的定位差异命令行适合在终端逐条跑、看日志、嵌进 bash 脚本gmxapi 适合在 Python 进程里把 GROMACS 当库来编排例如要做温度梯度扫描、Umbrella 采样多窗拉手、或把最小化打包进 CI 冒烟测试。对二次开发来说常见做法是导出靠 OpenFFPython、部署尽量用 gmxapi 高层接口、而遇到 gmxapi 版本坑时回退到subprocess调gmx命令——三层兜底既不依赖我不编造的私有签名又能对付真实机器上的版本差异。2.5 流程对照表步骤命令/接口产物作用导出interchange.to_gromacs(prefixligand)ligand.groligand.topAI力场→GROMACS 输入编译gmx grompp -f min.mdp -c ligand.gro -p ligand.top -o em.tprem.tpr拓扑检查生成运行输入执行gmx mdrun -s em.tpr -deffnm emem.gro/em.edr/em.log能量最小化分析gmx energy -f em.edr -o epot.xvgepot.xvg读 Potenial验证收敛三、常见报错与排查报错/现象根因处置gmx命令找不到GROMACS 未 source GMXRCsource .../GMXRC2024.6 安装路径grompp报 Missing parameterstop/gro/mdp 不匹配或力场漏项核对三文件原子数/类型一致查 top 里#include完整性mdrun 输出 NaN 能量最小化参数激进/初始坐标重叠换steep、减emstep、先清洗坐标em.log不收敛emtol 太严或盒过小放松 emtol 到示意级、padding加大见第 8 篇gmxapiModuleNotFoundErrorgmxapi 版本/安装问题确认与 GROMACS 2024.6 匹配的 gmxapi以官方指南为准四、动手练习导出配体 top跑 2.1确认ligand.gro/ligand.top生成并检查其原子行数 咖啡因原子数。能量最小化运行 2.2 2.3用gmx energy -f em.edr -o epot.xvg查看 Potenial 是否收敛示意 −123 kJ/mol 量级记录初始/末态势能。对照 OpenMM 最小化结果把第 7 篇 OpenMM 的最小化势能与此处em.log的 Potenial 对比同一分子体验同一参数、不同引擎的数值差异来源。读 top 结构gmx dump -p ligand.top或直接 grep[ bonds ]数一遍键节条目确认与第 9 篇核对的一致。五、小结与下一篇预告本篇把 AI 力场接入 GROMACS 的整条链路落地interchange.to_gromacs(prefixligand)产ligand.gro/topgmx grompp编译出em.tprgmx mdrun -deffnm em跑能量最小化并可在em.log/em.edr里读到收敛的 Potenial同时介绍了 gmxapi 这一 Python 高层驱动方向以官方指南为准。至此OpenMM 跑 GROMACS 兜底的双引擎态势已经建立AI力场不再被任何单一引擎绑架。下一篇11将把触角伸向商业软件如何用 Schrödinger Python APIMaestro 的pythonrun script.func、schrodinger.maestro.maestro.command(...)与 launchapi 任务控制把此前的 AI 力场产物接到 Schrödinger 生态——涉及专有接口与 License届时以官方文档与本地 License 为准。本篇认知问题回显FAQQ1GROMACS 为何把 grompp 与 mdrun 分成两步tpr 文件承担什么职责Agrompp 负责把 mdp/gro/top 检查并编译成自包含的二进制tprmdrun 只执行tpr这使准备与执行解耦、tpr可跨机移植并直接在 GPU/集群运行。Q2interchange.to_gromacs 产出的 ligand.top/gro 如何被 grompp 消费min.mdp 里 integratorsteep 有何意义Aligand.top提供原子类型、键角二面角与非键各项ligand.gro提供坐标与盒gmx grompp -f min.mdp -c ligand.gro -p ligand.top -o tpr合并三者其中integratorsteep指定最陡下降优化以稳定下坡。Q3gmxapi 与命令行 gmx grompp/mdrun 的关系是什么用 Python 驱动有何收益Agmxapiimport gmx是同一 GROMACS 引擎的 Python 高层封装可声明组合多任务收益是便于做参数扫描、多副本、CI 自动化与二次开发包装层调用方式以官方 gmxapi 指南为准。Q4GROMACS 能量最小化看什么判断成功Epot 收敛标准是什么A看 mdrun 生成的em.log/em.edrPotenialEpotkJ/mol从初值下降并趋于平台不再显著变小且全程无 NaN 即视为收敛示意值约 −123 kJ/mol 量级。