SuperAPI AI 工具集

esm

智能体与模型

查看项目

更新于 10-15 10:04

技能介绍

用途

ESM 是一系列蛋白质语言模型,当前由 Chan Zuckerberg Biohub 维护(MIT 许可,旧 evolutionaryscale/esm 地址会重定向至此)。当前一代包含三个产物:ESM C(语言模型)、ESMFold2(结构预测)和 ESM Atlas(预测结构图谱)。权重托管在 huggingface.co/biohub,托管 API 位于 biohub.ai。

本技能覆盖 ESM C、ESMFold2 和旧版 ESM2。ESM3 未被覆盖,因为其开放权重为非商业许可。

模型选择

  • 嵌入、PLL、突变打分:ESM C(ESMC-6B),或更轻量的 ESM2
  • 复合物结构预测:ESMFold2
  • 高通量单序列折叠:ESMFold2 fast 模式
  • 结合体设计:ESMFold2 inversion(见下文),或 mosaic / bindcraft 技能
  • 变异效应 / 零样本打分:ESM C 或 ESM2

前置条件

  • Python:最低 3.10+,推荐 3.11
  • PyTorch:最低 2.0+,推荐最新版
  • CUDA:最低 12.0+,推荐 12.1+
  • GPU 显存:最低 24GB(ESM2 / 小型 ESMC),推荐 80GB(ESMC-6B、ESMFold2)

ESM C:嵌入与打分

ESM C 是 ESM2 的后继者,随模型规模增长改善长程结构理解,是嵌入、伪对数似然和突变效应打分的默认选择。

Python(Hugging Face)示例:

from transformers import AutoModelForMaskedLM, AutoTokenizer
import torch

model_id = "biohub/ESMC-6B"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForMaskedLM.from_pretrained(
    model_id, output_hidden_states=True, torch_dtype=torch.bfloat16
).eval().cuda()

batch = tok(["MKTAYIAKQRQISFVK..."], return_tensors="pt").to("cuda")
with torch.no_grad():
    out = model(**batch)

logits = out.logits                      # for PLL / mutation scoring
embeddings = out.hidden_states[-1]       # per-residue representations

安装命令:pip install esm@git+https://github.com/Biohub/esm.git@main

托管 API 示例:

from esm.sdk import esmc_client
from esm.sdk.api import ESMProtein, LogitsConfig

model = esmc_client(model="esmc-600m-2024-12", url="https://biohub.ai", token="<API token>")
tensor = model.encode(ESMProtein(sequence="MKTAYIAKQRQISFVK..."))
out = model.logits(tensor, LogitsConfig(sequence=True, return_embeddings=True))

ESMC-6B 有开放权重;esmc-600m 是较小的 API 模型。突变打分和微调可参考 cookbook/tutorials 下的 esmc_mutation_scoring 和 esmc_finetune notebook。

ESMFold2:复合物结构预测

ESMFold2 基于 ESMC-6B 并带有扩散结构头。与原版 ESMFold 不同,它能预测复合物(蛋白质、DNA、配体及修饰残基),接受可选 MSA,并具有用于高通量筛选的单序列 fast 模式。它已针对蛋白质-蛋白质相互作用设计进行验证,在 Foldbench 蛋白质-蛋白质和抗体-抗原复合物上领先 DockQ 通过率。

Modal(biomodals)示例:

printf '>protein|A\nMKTAYIAKQRQISFVK...\n' > target.faa
uv run --with modal modal run modal_esmfold2.py --input-faa target.faa

FASTA 头部标签 protein|、dna|、rna| 和 ligand|(SMILES)可用于折叠复合物。GPU 默认 A100-40GB(通过 MODAL_GPU 设置)。

Python(本地权重)示例:

from transformers.models.esmfold2.modeling_esmfold2 import ESMFold2Model
from esm.models.esmfold2 import ProteinInput, StructurePredictionInput, ESMFold2InputBuilder

model = ESMFold2Model.from_pretrained("biohub/ESMFold2").cuda().eval()
spi = StructurePredictionInput(sequences=[ProteinInput(id="A", sequence="BINDER_SEQ")])
result = ESMFold2InputBuilder().fold(model, spi, num_loops=20, num_sampling_steps=100)
# result.plddt, result.ptm, result.iptm, result.complex.to_mmcif()

单序列高通量折叠使用 fast 变体,SDK 模型字符串为 esmfold2-fast-2026-05(HF 仓库 biohub/ESMFold2-Fast)。ESMFold2 是复合物验证的选项之一,可与 boltz 和 chai 并列;在多个预测器上对候选短名单排序比信任单一模型更可靠。

通过反转 ESMFold2 进行结合体设计

binder_design cookbook 通过 ESMFold2 运行梯度优化(BindCraft 风格循环),并加入 ESMC 语言模型项以保证序列合理性。已发表的协议在实验室中对五个靶点验证达到纳摩尔亲和力,支持 minibinder 和带框架支架的抗体衍生 scFv。

biomodals 将其封装为 modal_esmfold2_binder_design.py:

uv run --with modal modal run modal_esmfold2_binder_design.py \
  --target-name pd-l1 --binder-name minibinder

靶点:预设 cd45、ctla4、egfr、pd-l1、pdgfr,或通过 --target-sequence 传入。

结合体:预设 minibinder 和抗体框架(例如 trastuzumab_framework_vhvl),或通过 --binder-sequence 传入并用 # 标记可设计位置。使用 --is-antibody 进行 scFv 设计。

按 ipTM 对候选排序,将 minibinder 过滤到 pI 低于 6,然后用 boltz 或 chai 验证排名靠前的短名单,并用 ipsae 排序。

Adaptyv 对这些模型的自测显示,ESMFold2 反转结合体设计在 7 个靶点平均每个被接受设计的成本约为 0.85 美元。

若需在一个目标函数中组合 ESMFold2 与其他预测器的框架,可使用 mosaic 技能。

ESM2(旧版)

当 ESMC-6B 对可用 GPU 过大时,ESM2 仍适用于快速嵌入和 PLL。

import torch, esm
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
bc = alphabet.get_batch_converter()
model = model.eval().cuda()
_, _, toks = bc([("seq1", "MKTAYIAKQRQISFVK...")])
with torch.no_grad():
    rep = model(toks.cuda(), repr_layers=[33])["representations"][33]

模型对照:

  • esm2_t12_35M:35M 参数,用于快速筛选
  • esm2_t33_650M:650M 参数,用于标准嵌入/PLL
  • esm2_t36_3B:3B 参数,最高质量的 ESM2

PLL 解读

PLL(伪对数似然)衡量序列对模型而言的自然程度,越高越自然。设计序列通常比天然序列得分低,因此应将 PLL 视为软过滤条件,而非硬性阈值。

归一化 PLL 解读:

  • 0.2:非常自然

  • 0.0 至 0.2:类自然
  • -0.5 至 0.0:可接受
  • < -0.5:可能不自然

故障排查

  • CUDA 显存不足:ESMC-6B / ESMFold2 过大。改用 ESMC-600m API、ESM2,或 80GB GPU。
  • 嵌入层错误:层索引不匹配。使用最后隐藏状态(ESM2-650M 为第 33 层)。
  • 无效氨基酸:非标准残基。检查是否存在非规范字符。
  • 大量设计时 ESMFold2 缓慢:使用完整 MSA 模式。改用 esmfold2-fast-2026-05 单序列模式。

后续步骤

用 boltz 或 chai 验证结构,用 ipsae 排序,然后用 protein-qc 过滤。