专栏全集《开源蛋白结构推理》
你遇到的情况是:想看一个蛋白的平衡态构象集合——局部展开、隐式口袋、domain 运动这些功能相关变化——但传统 MD 要跑几天到几个月,等不起。这篇文章给你 Microsoft Research AI4Science 2024-12 开源(MIT)的 BioEmu 完整本地部署路径:DiG 生成式模型两阶段训练(AFDB 16.1 万结构预训练 + 216 ms MD 微调),从单条氨基酸序列直接采样出服从玻尔兹曼分布的构象系综,100 残基采 1000 个样本在 A100 上只要约 4 分钟,相对自由能误差约 0.9 kcal/mol。你能直接拿去做的事:在 Linux + NVIDIA GPU 上pip install bioemu[cuda],用 Chignolin 十残基例子跑通 samples.xtc 输出,按需开 physical_steering 减少断链和 clash 样本,再用 sidechain_relax 补侧链加短 MD 平衡;没有 GPU 时走 Azure AI Foundry 在线推理。
文献
| 资源 | 链接 | 与本文关系 | 为什么值得先读 |
|---|---|---|---|
| BioEmu 官方仓库 README | GitHub - microsoft/bioemu: Inference code for scalable emulation of protein equilibrium ensembles with generative deep learning · GitHub | 本文第三节全部安装与采样命令的信源 | "Linux-only pip-installable" 的硬件前提、三个 checkpoint 版本差异都写在第一屏 |
| Azure AI Foundry 部署指南 | bioemu/AZURE_AI_FOUNDRY.md at main · microsoft/bioemu · GitHub | 对应本文第五节"无 GPU 走在线推理" | 没有 16 GB 以上显存时的替代路径,部署约 30 分钟 |
| bioemu-benchmarks 评测仓库 | GitHub - microsoft/bioemu-benchmarks: Benchmarking code accompanying the release of `bioemu` · GitHub | 对应本文第五节"跑论文里的 benchmark" | 想复现 ~0.9 kcal/mol 自由能精度和覆盖度数字时从这里起步 |
| BioEmu 原始论文(Science) | https://www.science.org/doi/10.1126/science.adv9817 | 本文全部性能与精度结论的来源 | domain motion 83%、cryptic pockets 88% 等覆盖度数字和两阶段训练细节的出处 |
一、原理
BioEmu 是什么:一个能从氨基酸序列出发,采样出蛋白平衡态构象集合(Boltzmann 分布)的生成式深度学习模型,由 Microsoft Research AI4Science 团队 2024-12 开源(MIT),2026-07 时 839 stars、144 forks,论文已发Science(DOI: 10.1126/science.adv9817)。
怎么做到的:模型主体是DiG(Denoising Graph-based,可参考Nat Mach Intell2024-08-12 s42256-024-00837-3),训练分两阶段:
- 预训练:在 AFDB(AlphaFold Database)的 16.1 万条结构上做 denoising score matching,学习蛋白结构流形。
- 微调:在 216 ms MD 模拟数据上继续 denoising,同时用 Property Prediction Fine-Tuning(PPFT)对齐实验测得的折叠自由能(19k dG 数据)。
核心四点:
- 采样 = 模拟平衡态分布:不是给一个"最可能"的结构,而是给一组服从玻尔兹曼分布的构象,能看到局部展开、隐式口袋形成、域运动等功能相关变化。
- 配 steering 系统:在扩散过程中引入物理势能(Cα–Cα 距离避免断链、PairwiseClash 避免重叠),用 SMC(Sequential Monte Carlo)或 FKC(Feynman–Kac Corrector)算法纠偏。
- 输出 backbone 坐标:侧链靠后处理(HPacker)+ 短 MD 平衡重建。
- 3 个版本权重:v1.0(论文 preprint 版)、v1.1(Science 发表版,默认)、v1.2(额外 1.3M dG 数据)。
输入是单条氨基酸序列,输出是一堆 PDB / XTC 构象 + 拓扑。仅 Linux + NVIDIA GPU(v1.0+ 内置 ColabFold 做 MSA,所以首次运行要联网下 MSA;模型权重从 HuggingFace 自动下)。
二、特点(跟现有方案比有什么不一样)
| 维度 | BioEmu | AlphaFold 2/3 | 传统 MD(GROMACS / AMBER) | AlphaFlow |
|---|---|---|---|---|
| 目标 | 采样平衡态构象集合 | 预测一个最可能结构 | 真实物理模拟 | 采样构象集合(更小规模) |
| 速度 | 1000 样本/100 残基 ≈ 4 分钟(A100) | 秒级 | 几天到几个月 | 几分钟 |
| 自由能误差 | ~0.9 kcal/mol(vs MD 实验) | — | ground truth | ~2 kcal/mol |
| 是否给隐式口袋 / 局部展开 | ✅ 能采到 | ❌ 单点结构 | ✅(理论上能) | 部分 |
| License | MIT | Apache-2.0 | 开源 | MIT |
| 硬件 | NVIDIA GPU | GPU | CPU+GPU | GPU |
| 多链 | ❌(单体限定) | ✅ | ✅ | ✅ |
最值得关注的四点:
- 首个"对标 MD 自由能精度"的深度学习采样器:相对自由能误差 ~0.9 kcal/mol(vs 实验)、~0.9 kcal/mol(vs MD 模拟),Spearman 相关系数 0.6。
- 比传统 MD 快几个数量级:100 残基采 1000 个样本只要 4 分钟(A100 80GB),传统 MD 同样的工作要几天。
- 覆盖功能相关构象变化:domain motion 覆盖 83%、cryptic pockets holo 状态 88%、local unfolding 70-82%。
- 配套 steering 物理纠偏:3-10 个 steering 粒子能显著减少不物理样本(clash、断链),可作为自定义 CV 的靶向工具。
三、零基础手把手教程
3.1 在动手之前,先确认你能满足这些条件
| 条件 | 怎么检查 | 不满足怎么办 |
|---|---|---|
| Linux 系统(仅 Linux,pip 包明确写) | uname -a | Windows 走 WSL2;macOS 不支持 |
| Python ≥3.10 | python3 --version | — |
| NVIDIA GPU(≥16 GB 显存推荐 ≥24 GB) | nvidia-smi | 无 CPU 路径;走 Azure AI Foundry 在线推理 |
| CUDA 12.x 兼容驱动 | nvidia-smi | 装 NVIDIA 驱动 + CUDA 12 |
能访问huggingface.co(下模型权重 ~3.5 GB) | curl -I https://huggingface.co | 用hf-mirror.com镜像 |
能访问api.colabfold.com(首次跑自动下 MSA) | curl -I https://api.colabfold.com | 提前用 ColabFold 本地 MSA 或手动备 A3M |
| ≥10 GB 磁盘 | df -h ~ | — |
⚠️最重要的两条:Linux + NVIDIA GPU。README 第一行明写 "Linux-only pip-installable"。
3.2 安装 bioemu
# CPU 版(仅采样,不含 GPU 加速) pip install bioemu # CUDA 版(推荐) pip install bioemu[cuda]💡
bioemu[cuda]会自动装jax[cuda12]==0.4.35+nvidia-cuda-nvcc-cu12==12.8.93。第一次跑会下载 AlphaFold2 权重 ~3.5 GB 到~/.cache/colabfold/。
3.3 第一次采样:Chignolin(10 残基超快蛋白)
最小可工作例子:
python -m bioemu.sample \ --sequence GYDPETGTWG \ --num_samples 10 \ --output_dir ~/test-chignolin预期输出:
samples.xtc # 10 帧构象轨迹 sequence.fasta # 输入序列 topology.pdb # 蛋白拓扑第一次跑会出现:
- 下载 AF2 权重到
~/.cache/colabfold/(~3.5 GB) - 通过 ColabFold 服务器查 MSA(要联网)
- 下载 BioEmu 权重到
~/.cache/huggingface/(从microsoft/bioemu)
3.4 Python API 同样简洁
from bioemu.sample import main as sample sample( sequence='GYDPETGTWG', num_samples=10, output_dir='~/test_chignolin' )3.5 用 FASTA 文件做输入(多序列批量)
sample( sequence='path/to/protein.fasta', # 单序列 FASTA num_samples=100, output_dir='~/batch_samples' )3.6 用 steering 提升物理真实性
默认采样会有不物理样本(clash、断链),开 steering:
python -m bioemu.sample \ --sequence GYDPETGTWG \ --num_samples 100 \ --output_dir ~/steered-samples \ --denoiser_config src/bioemu/config/steering/physical_steering.yaml⚠️实测坑(2026-09-12):上面这条命令抄自官方 README,但
src/bioemu/...是仓库相对路径,pip 安装的用户没有这个路径,会直接报错。pip 装完后 yaml 实际在 site-packages 里,用下面这条:# pip 安装用户的正确写法(把 <conda-env> 换成你的环境路径) python -m bioemu.sample \ --sequence GYDPETGTWG \ --num_samples 100 \ --output_dir ~/steered-samples \ --denoiser_config <conda-env>/lib/python3.11/site-packages/bioemu/config/steering/physical_steering.yaml找路径一行命令:
python -c "import bioemu,os;print(os.path.dirname(bioemu.__file__))"。
物理 steering YAML 启用了两个势能:
| 势能 | 作用 |
|---|---|
CaCaDistance+UmbrellaPotential | 防止 backbone 断链(限制相邻 Cα–Cα 距离) |
PairwiseClash+UmbrellaPotential | 防止非相邻残基 clash(避免空间重叠) |
Steering 关键参数(在 YAML 文件中):
| 参数 | 含义 | 推荐值 |
|---|---|---|
num_particles | 每个输出样本对应的粒子数(越大越准、越慢) | 3-10 |
ess_threshold | 重采样阈值(有效样本量占名义样本量比例) | 0.0-1.0 |
start | 启动 steering 的扩散时间(1→0 反向) | 0.1(默认) |
end | 停止 steering 的扩散时间 | 0.0(默认) |
fk_potentials | 势能列表 | 默认physical_steering.yaml已配好 |
3.7 用自己的 MSA(不走 ColabFold 服务器)
如果你已经通过本地 MMseqs2 / ColabFold 跑好了 MSA,直接传 A3M:
sample( sequence='path/to/query.a3m', # query 必须在第一行 num_samples=100, output_dir='~/local_msa_samples' )或者覆盖 MSA 查询服务器:
sample( sequence='GYDPETGTWG', num_samples=100, output_dir='~/samples', msa_host_url='http://your-local-mmseqs-server:8000' )3.8 用特定 checkpoint 版本
默认用bioemu-v1.1(Science 发表版)。其他版本:
sample( sequence='GYDPETGTWG', num_samples=10, output_dir='~/v1_0_samples', model_name='bioemu-v1.0' # preprint 版 )可用版本:
| Checkpoint | 用途 | 参数量 | 训练数据 |
|---|---|---|---|
bioemu-v1.0 | preprint 版 | 31.4M | AFDB 161k 结构 + MD 216ms + dG 19k |
bioemu-v1.1 | 默认,Science 版 | 31.4M | 同 v1.0,dG 升级到 502k |
bioemu-v1.2 | 增强版 | 35.7M | AFDB 同 + MD 145.4ms + dG 1.3M(额外残基类型/对嵌入) |
3.9 看输出 & 后处理
输出文件:
| 文件 | 内容 |
|---|---|
samples.xtc | 构象轨迹(MDTraj 可读) |
sequence.fasta | 输入序列 |
topology.pdb | 拓扑结构 |
默认行为:会自动过滤不物理样本(clash / 断链),所以实际输出样本数可能少于--num_samples请求数。如果想保留全部原始样本:
python -m bioemu.sample \ --sequence GYDPETGTWG \ --num_samples 100 \ --output_dir ~/all_samples \ --filter_samples=False3.10 侧链重建 + 短 MD 平衡(可选)
BioEmu 只输出 backbone,侧链要后处理:
# 1. 装可选依赖(要 conda) pip install bioemu[md] # 2. 跑侧链重建 + MD 平衡 python -m bioemu.sidechain_relax \ --pdb-path path/to/topology.pdb \ --xtc-path path/to/samples.xtc输出文件:
| 文件 | 内容 |
|---|---|
samples_sidechain_rec.{pdb,xtc} | 侧链重建后结构 |
samples_md_equil.{pdb,xtc} | 侧链 + MD 平衡后结构 |
其他选项:
| 参数 | 作用 |
|---|---|
--no-md-equil | 只重建侧链,不做 MD |
--md-protocol local_minimization | 只做局部能量最小化(默认) |
--md-protocol md_equil | 做 0.1 ns NVT 平衡(短) |
--outname other_name | 改输出文件名前缀 |
⚠️实测坑(2026-09-12):早期文档写的
--md-protocol nvt_equil已失效,bioemu 1.4.1实际只接受local_minimization/md_equil两个值,写错直接报参数错误退出。实测 10 残基 9 帧跑默认流程(侧链重建 + 最小化)334 s、峰值内存 0.9 GB;输出samples_sidechain_rec.{pdb,xtc}(77 原子/帧,含侧链)与samples_md_equil.{pdb,xtc}。
⚠️ 首次跑
sidechain_relax会自动建独立 venv 装hpacker,需要conda在 PATH。如果自动装失败,手动装 hpacker 并设HPACKER_PYTHONBIN环境变量。
3.11 把所有命令串起来(复制即用版)
# === 一键脚本(Ubuntu 22.04 + CUDA 12 + 普通用户)=== # 1. 装 bioemu(CUDA 版) pip install bioemu[cuda] # 2. 跑最简例子(Chignolin) python -m bioemu.sample \ --sequence GYDPETGTWG \ --num_samples 10 \ --output_dir ~/test-chignolin # 3. 看输出 ls ~/test-chignolin/ # samples.xtc sequence.fasta topology.pdb # 4. 跑带 steering 的版本(物理更合理) python -m bioemu.sample \ --sequence GYDPETGTWG \ --num_samples 100 \ --output_dir ~/steered-samples \ --denoiser_config src/bioemu/config/steering/physical_steering.yaml # 5. (可选)侧链重建 pip install bioemu[md] python -m bioemu.sidechain_relax \ --pdb-path ~/test-chignolin/topology.pdb \ --xtc-path ~/test-chignolin/samples.xtc四、性能参考(A100 80GB 测得)
| 序列长度 | 1000 样本耗时 |
|---|---|
| 100 残基 | 4 分钟 |
| 300 残基 | 40 分钟 |
| 600 残基 | 150 分钟 |
💡 用
batch_size_100=20配置(src/bioemu/sample.py)。BioEmu 显存占用正比于 batch size × 序列长度,300 残基以上建议 batch 调到 5-10。
五、上手后想进阶?这些是常见下一步
1. 走 Azure AI Foundry 在线推理(无 GPU 也能用):
# 详见 AZURE_AI_FOUNDRY.md # 1. 登录 https://ai.azure.com 注册 # 2. 部署 BioEmu(默认 Standard_NC24ads_A100_v4,约 30 分钟) # 3. 用 endpoint + API key 调用2. 跑论文里的 benchmark:
git clone https://github.com/microsoft/bioemu-benchmarks # 详细见 bioemu-benchmarks 仓库3. 自定义 steering CV:
参考src/bioemu/config/steering/cv_steer.yaml(FKC 模式下 RMSD 靶向 steering)写自己的 YAML。
4. 训练数据下载:
训练用的 MD 数据已在 Zenodo 公开:
| 数据集 | 大小 | 链接 |
|---|---|---|
| CATH | — | https://doi.org/10.5281/zenodo.15629740 |
| Octapeptides | — | https://doi.org/10.5281/zenodo.15641199 |
| MegaSim | — | https://doi.org/10.5281/zenodo.15641184 |
5. Web 工具 / 衍生项目:
- AI Foundry Labs BioEmu-Protein3D(Web UI 包装):GitHub - LazaUK/AIFoundryLabs-BioEmu-Protein3D: Web-UI wrapper for the Microsoft Research's Biomolecular Emulator (BioEmu) AI model to predict 3D protein structures. · GitHub
- GPCR 动力学分析:https://github.com/adi1bioinfo/bioEmu_GPCR
- ChimeraX + VAMPnet + BioEmu 多源系综分析:https://github.com/m9h/chimerax-vampnet
六、踩坑速查
| 现象 | 原因 | 解决 |
|---|---|---|
pip install bioemu在 macOS 失败 | Linux-only 包 | 走 Linux / WSL2 |
| 第一次跑卡住不动 | 在下 AF2 权重 ~3.5 GB | 耐心等,进度条可能没显示 |
MSA retrieval failed | ColabFold 服务器连不上 | 改msa_host_url指向本地 MMseqs2;或提前跑好 A3M 直接喂 |
| 显存爆(OOM) | batch_size × 序列长度太大 | 减小 batch(batch_size_100=5);或换 mini 模型 |
输出样本数远少于--num_samples | 默认过滤了 clash/断链 | 加--filter_samples=False;或开 steering |
hpacker装不上 | conda不在 PATH 或驱动问题 | 手动装 hpacker,设HPACKER_PYTHONBIN;或跳过 sidechain 重建 |
| 多链蛋白输出不对 | BioEmu 不支持多链 | 单链分开采样;或试 linker trick(README 提到效果有限) |
| 模型权重下不下来 | HuggingFace 不可达 | 用HF_ENDPOINT=https://hf-mirror.com环境变量(2026-09-12 实测有效) |
JAX version conflict | 系统有别的 jax | 用 venv 隔离:python -m venv bioemu_env && source bioemu_env/bin/activate |
| Steering 跑得巨慢 | num_particles设太大 | 减到 3-5 |
RuntimeError: CUDA not available | PyTorch 没识别 GPU | 重装pip install bioemu[cuda];确认nvidia-smi正常 |
--denoiser_config src/bioemu/...报找不到文件 | README 命令是仓库相对路径,pip 用户没有 | 改用 site-packages 绝对路径(见 3.6 节实测坑) |
--md-protocol nvt_equil报 Invalid value | 1.4.1 只接受local_minimization/md_equil | 见 3.10 节实测坑 |
| 驱动 CUDA 版本高于 jax wheel 的 cu12 | 无需担心 | cu12 wheel 自带运行时,驱动向下兼容(本机 CUDA 13.0 驱动 + cu12 插件实测正常) |
关键字
BioEmu;构象系综采样;生成式模型;玻尔兹曼分布;隐式口袋;steering;自由能预测;Chignolin
相关专栏链接
| 蛋白 / 多肽 | 分子模拟 / 动力学 | 分子对接 / CADD / 工具 | agent / 核酸 / 药物 |
|---|---|---|---|
| 开源蛋白结构推理 | 分子模拟基础 | UCSF DOCK系列 | agent智能体系列 |
| 开源蛋白生成实践 | 分子动力学模拟-Amber | rDock系列教程 | 化学大模型介绍 |
| 蛋白设计原理案例 | 分子动力学模拟-Gromacs | LeDock系列教程 | 我胡师兄说药 |
| 多肽设计模型实践 | 开源結合自由能计算 | CADD中的机器学习模型 | siRNA药物设计模型 |
| 开源多肽性质预测 | 高效计算基本配置 | 小分子药物设计案例 | ASO药物设计模型 |
| 多肽设计原理案例 | 靶向DNA/RNA药物设计 | 开源小分子生成和设计实践 | 开源药代动力学软件教程 |