ESM2蛋白质语言模型Skill esm

ESM2蛋白质语言模型是一种基于深度学习的生物信息学工具,专门用于蛋白质序列分析和设计。它能够计算蛋白质序列的伪对数似然分数来评估序列合理性,生成高维嵌入表示用于聚类和多样性分析,并支持零样本变体效应预测。该工具适用于蛋白质工程、药物研发和生物信息学研究,帮助研究人员筛选天然样序列、分析序列-功能关系以及优化蛋白质设计。关键词:蛋白质语言模型,ESM2,序列评分,嵌入表示,变体效应预测,蛋白质设计,生物信息学,深度学习,AI生物技术。

合成生物学 0 次安装 4 次浏览 更新于 2/27/2026

name: esm description: > ESM2蛋白质语言模型,用于嵌入表示和序列评分。 在以下场景使用此技能:(1) 计算伪对数似然(PLL)分数, (2) 获取蛋白质嵌入用于聚类分析, (3) 通过序列合理性筛选设计, (4) 零样本变体效应预测, (5) 分析序列-功能关系。

如需结构预测,请使用chai或boltz。 如需质量控制阈值,请使用protein-qc。 license: MIT category: design-tools tags: [sequence-design, embeddings, scoring] proteinbase_slug: esm2-optimization proteinbase_url: https://proteinbase.com/design-methods/esm2-optimization biomodals_script: modal_esm2_predict_masked.py

ESM2 蛋白质语言模型

先决条件

要求 最低 推荐
Python 3.8+ 3.10
PyTorch 1.10+ 2.0+
CUDA 11.0+ 11.7+
GPU 显存 8GB 24GB (A10G)
内存 16GB 32GB

如何运行

第一次使用? 请参阅安装指南来设置Modal和biomodals。

选项1:Modal

cd biomodals
modal run modal_esm2_predict_masked.py \
  --input-faa sequences.fasta \
  --out-dir embeddings/

GPU: A10G (24GB) | 超时: 默认300秒

选项2:Python API(推荐)

import torch
import esm

# 加载模型
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D()
batch_converter = alphabet.get_batch_converter()
model = model.eval().cuda()

# 处理序列
data = [("seq1", "MKTAYIAKQRQISFVK...")]
batch_labels, batch_strs, batch_tokens = batch_converter(data)

with torch.no_grad():
    results = model(batch_tokens.cuda(), repr_layers=[33])

# 获取嵌入表示
embeddings = results["representations"][33]

关键参数

ESM2 模型

模型 参数量 速度 质量
esm2_t6_8M 8M 最快 快速筛选
esm2_t12_35M 35M 良好
esm2_t33_650M 650M 中等 更好
esm2_t36_3B 3B 最佳

输出格式

embeddings/
├── embeddings.npy       # (N, 1280) 数组
├── pll_scores.csv       # 每个序列的PLL分数
└── metadata.json        # 序列信息

示例输出

成功运行

$ modal run modal_esm2_predict_masked.py --input-faa designs.fasta
[INFO] 正在加载ESM2-650M模型...
[INFO] 正在处理100条序列...
[INFO] 正在计算伪对数似然...

embeddings/pll_scores.csv:
sequence_id,pll,pll_normalized,length
design_0,-0.82,0.15,78
design_1,-0.95,0.08,85
design_2,-1.23,-0.12,72
...

摘要:
  平均PLL: -0.91
  PLL > 0的序列: 42/100 (42%)

良好输出的特征:

  • PLL_normalized: > 0.0(更接近天然序列)
  • 嵌入表示形状: (N, 1280) 对应650M模型
  • 更高的PLL = 更自然的序列

决策树

我应该使用ESM2吗?
│
├─ 你需要什么?
│  ├─ 序列合理性评分 → ESM2 PLL ✓
│  ├─ 用于聚类的嵌入表示 → ESM2 ✓
│  ├─ 变体效应预测 → ESM2 ✓
│  └─ 结构预测 → 使用ESMFold
│
├─ 选择什么模型大小?
│  ├─ 快速筛选 → esm2_t12_35M
│  ├─ 标准使用 → esm2_t33_650M ✓
│  └─ 最佳质量 → esm2_t36_3B
│
└─ 使用场景?
   ├─ 质量控制筛选 → PLL > 0.0 阈值
   ├─ 多样性分析 → 平均池化嵌入
   └─ 突变扫描 → 每个位置的对数几率

PLL 解释

标准化PLL 解释
> 0.2 非常自然的序列
0.0 - 0.2 良好,接近天然
-0.5 - 0.0 可接受
< -0.5 可能不自然

典型性能

任务规模 时间 (A10G) 成本 (Modal) 备注
100条序列 5-10分钟 ~$1 快速筛选
1000条序列 30-60分钟 ~$5 标准
5000条序列 2-3小时 ~$20 大批量

吞吐量: 使用650M模型约100-200条序列/分钟。


验证

wc -l embeddings/pll_scores.csv  # 应与输入序列数+1(表头)匹配

故障排除

内存不足错误: 使用更小的模型或分批处理序列 处理速度慢: 使用esm2_t12_35M以提高速度 PLL分数低: 可能表明序列不寻常/经过设计

错误解释

错误 原因 解决方法
RuntimeError: CUDA out of memory 序列过长或批次过大 减小批次大小
KeyError: representation 请求了错误的层 对650M模型使用第33层
ValueError: sequence 无效氨基酸 检查是否存在非标准氨基酸

下一步: 使用chaiboltz进行结构预测 → 使用protein-qc进行筛选。