欢迎光临
我们一直在努力

OpenMM分子动力学模拟04 GPU 加速与五大平台:CUDA mixed 精度是生产默认答案

摘要:Reference/CPU/CUDA/OpenCL/HIP 五平台的定位与选档——CUDA mixed 精度是生产默认答案,nvidia-smi 验证占卡,多卡 DeviceIndex 分配,以及 mixed/single/double 三档实测对比。 关键字:CUDA、GPU加速、Platform、OpenCL、HIP、mixed精度、nvidia-smi、DeviceIndex 在这里插入图片描述

【官方来源】User Guide §3.7.1 Platforms + Ch.11 Platform-Specific Properties 【Linux 实测】消费级 GPU(12 GB 显存) / 驱动 580.178.04(支持到 CUDA 13.0)/ OpenMM 8.5.2 环境说明:本章正文与 T4 实测时环境 CUDA 运行时为 12.9;章末 T7 三档精度对比实测于环境钉 13.0 之后(见该节注明)——两版运行时均 ≤ 驱动支持版,kernel 正常


1. 五个平台是什么

【官方来源】“OpenMM includes five platforms: Reference, CPU, CUDA, OpenCL, and HIP.”

【Linux 实测】Platform.getNumPlatforms() 实测:

平台speed 值定位
Reference 1 纯 C++ 参考实现。最慢但最准,交叉验证用
CPU 10 多核 CPU 并行(8.0 起 ARM 也有 JIT)
CUDA 100 NVIDIA GPU(Linux/Windows)
OpenCL 50 跨厂商(macOS 首选、N/A/Intel 通用)
HIP — AMD GPU,需 ROCm(属性与 CUDA 完全一致)

2. 选平台的官方三种方式

【官方来源】

方式 1(默认):OpenMM 自动选最快的可用平台。“Usually its choice will be reasonable.”

方式 2(环境变量):

export OPENMM_DEFAULT_PLATFORM=CUDA # 覆盖默认逻辑

方式 3(代码显式指定):

platform = Platform.getPlatform('CUDA')
simulation = Simulation(prmtop.topology, system, integrator, platform)

合法名字:OpenCL、CUDA、HIP、CPU、Reference。

【Linux 实测】getPlatformByName('CUDA') 也能用,但官方文档通篇用 getPlatform(),建议跟官方写法。

3. GPU 平台属性(官方 Ch.11 全表)

3.1 CUDA 平台属性

【官方来源】

属性取值说明
Precision single / mixed / double single 全单精度最快最不准;mixed 力单精度+积分双精度,能量守恒好得多,速度略降;double 全双精度最准最慢
DeviceIndex '0'、'0,1'… 选 GPU;逗号列表 = 多卡并行一个模拟
UseCpuPme true/false PME 用 CPU 算。视硬件可能提速
TempDirectory 路径 kernel 编译临时目录,一般自动
UseBlockingSync true/false(默认 true) CPU 在 GPU 计算时休眠(true)还是自旋(false)。false 略快但占死 CPU
DeterministicForces true/false 力的逐位可复现。true 略慢;某些算法(如需要精确可重复力)必须开

HIP 平台:属性与 CUDA 完全相同(官方原话)。

OpenCL 平台:Precision / UseCpuPme / DeviceIndex 同上,另有 OpenCLPlatformIndex(多 OpenCL 实现时选哪个)。

3.2 CPU 平台属性

【官方来源】

属性说明
Threads CPU 线程数。默认 = 逻辑核数;可用环境变量 OPENMM_CPU_THREADS 设

3.3 确定性(Determinism)

【官方来源】PME 下:Reference、OpenCL、double 精度 CUDA 是确定性的;single 精度 CUDA 和 CPU 平台不确定(力计算求和顺序不同导致微小差异)。官方提醒这些行为不保证未来版本不变。

4. GPU 加速实操

4.1 单卡(本机写法)

【Linux 实测】

from openmm import Platform

platform = Platform.getPlatform('CUDA')
properties = {'DeviceIndex': '0', 'Precision': 'mixed'}
simulation = Simulation(topology, system, integrator, platform, properties)

【Linux 实测·属性名校验】CUDA 平台 getPropertyNames() 实测输出:

DeviceIndex, DeviceName, UseBlockingSync, Precision, UseCpuPme,
CudaCompiler, TempDirectory, CudaHostCompiler, DisablePmeStream, DeterministicForces

注意是 DeviceIndex(不是 CudaDeviceIndex——网上旧教程常见笔误,会报 unknown property)。

4.2 多卡并行一个模拟

【官方来源】

platform = Platform.getPlatform('CUDA')
properties = {'DeviceIndex': '0,1', 'Precision': 'double'}
simulation = Simulation(prmtop.topology, system, integrator, platform, properties)

两张卡分摊一个模拟的计算。注意:这是单模拟多卡,与"多模拟各占一卡"(每张卡跑独立副本)是两回事。

4.3 确认 GPU 真在用

【Linux 实测】三步验证法:

# 1. 平台列表里有 CUDA
python -c "import openmm as mm; print([mm.Platform.getPlatform(i).getName() for i in range(mm.Platform.getNumPlatforms())])"

# 2. 模拟运行时另开终端
watch -n1 nvidia-smi # 出现 python 进程 + 显存占用 = 真在用

# 3. testInstallation 已经过 = CUDA 平台工作正常

【踩坑】CUDA 平台不出现/失败的排查顺序:

  • nvidia-smi 能否跑(驱动装没装)
  • 驱动支持的 CUDA 版本 ≥ openmm 编译版本(nvidia-smi 右上角看)
  • 需要钉版本时:conda install -c conda-forge openmm cuda-version=12
  • pip 装的裸包默认没有 CUDA 平台——必须 pip install openmm[cuda12]
  • 5. 精度怎么选

    【官方来源】+ 实测建议:

    场景推荐
    常规生产模拟 mixed(官方各示例默认语境)
    追求极限速度、容忍精度损失 single
    自由能计算/需要能量绝对准确 double
    需要逐位可复现的力 double + DeterministicForces='true',或换 OpenCL/Reference

    【初学者翻译】mixed = 干活的主力干单精度、记账的用双精度,速度和准度兼顾。不确定就用 mixed。

    6. 性能自测方法学(写进你的实验记录)

    【Linux 实测】ns/day 标准测法:

    simulation.reporters.append(StateDataReporter('perf.csv', 1000, step=True, speed=True))
    # speed 选项直接输出 ns/day(官方 §3.7.14)

    同一体系、同一平台属性下改一个变量(precision/线程/卡数)对比,才算有效 benchmark。不要拿别人的数字当自己的——GPU 型号、体系大小、力场、精度全影响结果。

    【实测】T7:mixed vs single vs double 三档对比

    【实战背景】CUDA/HIP/OpenCL 平台的 Precision 属性三档怎么选?用 deca-ala(109 原子,NoCutoff,HBonds+HMR,Langevin 4 fs)各跑 5000 步实测(环境 cuda-version=13.0,见章头说明):

    精度5000 步耗时折算速度势能(同起点最小化后)
    single 0.12 s 13,836 ns/day 224.95 kJ/mol
    mixed(推荐默认) 0.22 s 7,874 ns/day 228.34 kJ/mol
    double 0.36 s 4,827 ns/day 274.41 kJ/mol

    【解读】:

  • 速度 single > mixed > double(小体系上 single 快 ~1.8×、mixed 快 ~1.6× 于 double)——但注意小体系的数字放大了差距,大体系(PME 主导)差距会缩小
  • 能量逐档漂移属预期——三档从同一起点各自演化,混沌效应让轨迹迅速分化(第 08 章能量漂移原理),对比的是统计性质而非逐帧能量
  • 选档规则(官方推荐):生产模拟用 mixed(力计算 mixed、累积量 double);要 bit 级可复现/能量守恒检查用 double;single 只用于粗看构象
  • 势能绝对值的可比性受最小化路径影响——严谨对比应固定同一轨迹的快照做单点能,此处为速度对比为主
  • 本章速查卡

    五平台: Reference(1) / CPU(10) / CUDA(100) / OpenCL(50) / HIP(=CUDA属性)
    选平台: 默认自动 | OPENMM_DEFAULT_PLATFORM=CUDA | Platform.getPlatform('CUDA')
    属性键: DeviceIndex='0,1'(多卡) Precision='mixed'(推荐)
    CPU线程: properties={'Threads':'8'} 或 env OPENMM_CPU_THREADS=8
    验证: python -m openmm.testInstallation + watch nvidia-smi
    测速: StateDataReporter(…, speed=True) 直接出 ns/day


    系列导航:本专栏 分子动力学模拟-OpenMM(35 章大百科:官方 User Guide / Tutorials / Cookbook / examples 全覆盖)


    我的专栏

    蛋白 / 抗体 / 多肽 / 核酸分子模拟 / 动力学 / 对接药物 / 设计 / 案例AI / Agent / 大模型
    开源蛋白结构预测 分子模拟基础 小分子药物设计案例 AI Agent系列
    开源蛋白生成方法实践 分子动力学模拟-Amber 蛋白药物设计案例 化学大模型
    开源多肽设计模型 分子动力学模拟-Gromacs 多肽药物设计案例 《AI Agent原理与实战》
    开源多肽性质预测 分子动力学模拟-OpenMM 开源小分子生成设计 CADD中的机器学习模型
    DNA/RNA药物设计 結合自由能 开源药代动力学软件 高效计算配置
    siRNA药物设计模型 UCSF DOCK系列 我胡师兄说药
    ASO药物设计模型 rDock系列 LeDock系列 gnina系列
    赞(0)
    未经允许不得转载:171主机测评 » OpenMM分子动力学模拟04 GPU 加速与五大平台:CUDA mixed 精度是生产默认答案
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址