名称: proteinmpnn 描述: > 使用ProteinMPNN逆折叠进行蛋白质序列设计。在以下情况使用此技能: (1) 为RFdiffusion骨架设计序列, (2) 重新设计现有蛋白质序列, (3) 固定特定残基同时设计其他残基, (4) 优化序列以提高表达或稳定性, (5) 多状态或负向设计。
对于骨架生成,请使用rfdiffusion或bindcraft。 对于配体感知设计,请使用ligandmpnn。 对于溶解度优化,请使用solublempnn。 许可证: MIT 类别: 设计工具 标签: [序列设计, 逆折叠] biomodals脚本: modal_ligandmpnn.py
ProteinMPNN序列设计
先决条件
| 要求 | 最低 | 推荐 |
|---|---|---|
| Python | 3.8+ | 3.10 |
| CUDA | 11.0+ | 11.7+ |
| GPU显存 | 8GB | 16GB (T4) |
| 内存 | 8GB | 16GB |
如何运行
第一次使用? 请参阅安装指南来设置Modal和biomodals。
选项1:本地安装(推荐)
git clone https://github.com/dauparas/ProteinMPNN.git
cd ProteinMPNN
python protein_mpnn_run.py \
--pdb_path backbone.pdb \
--out_folder output/ \
--num_seq_per_target 16 \
--sampling_temp "0.1"
GPU: T4 (16GB) 足够 | 时间: ~50-100 序列/分钟
选项2:Modal(通过LigandMPNN包装器)
cd biomodals
modal run modal_ligandmpnn.py \
--pdb-path backbone.pdb \
--num-seq-per-target 16
注意:LigandMPNN包含ProteinMPNN功能。
配置模式
核心参数
| 参数 | 默认值 | 范围 | 描述 |
|---|---|---|---|
--pdb_path |
必需 | 路径 | 单个PDB输入 |
--pdb_path_chains |
全部 | A,B | 要设计的链(逗号分隔) |
--out_folder |
必需 | 路径 | 输出目录 |
--num_seq_per_target |
1 | 1-1000 | 每个结构的序列数 |
--sampling_temp |
“0.1” | “0.0001-1.0” | 温度(字符串!) |
--seed |
0 | 整数 | 随机种子 |
--batch_size |
1 | 1-32 | 批次大小 |
温度指南
0.1 -> 低多样性,高恢复率(生产)
0.2 -> 中等多样性(默认)
0.3 -> 更高多样性(探索)
0.5+ -> 非常多样,质量较低
重要提示:温度必须作为字符串传递,而不是浮点数。
常见错误
温度参数
✅ 正确:
--sampling_temp "0.1" # 带引号的字符串
❌ 错误:
--sampling_temp 0.1 # 不带引号的浮点数 - 可能导致错误
--sampling_temp 0.1,0.2 # 多个温度需要正确格式
固定位置JSONL
✅ 正确:
{"A": [1, 2, 3, 10, 11], "B": [5, 6]}
❌ 错误:
{"A": "1,2,3,10,11"} # 字符串而不是列表
{A: [1, 2, 3]} # 键缺少引号
{"A": [1,2,3,]} # 尾随逗号
链选择
✅ 正确:
--pdb_path_chains A,B # 逗号后无空格
❌ 错误:
--pdb_path_chains A, B # 逗号后有空格
--pdb_path_chains "A,B" # 引号可能导致问题
氨基酸偏好
# 偏向某些氨基酸(正数 = 偏好)
--bias_AA_jsonl '{"A": {"A": 1.5, "W": -2.0}}'
# 全局省略特定氨基酸
--omit_AAs "CM" # 无半胱氨酸或甲硫氨酸
# 每个位置省略
--omit_AA_jsonl '{"A": {"1": "C", "2": "CM"}}'
多链设计
# 一起设计链A和B
--pdb_path_chains A,B
# 绑定链(相同序列)
--tied_positions_jsonl tied.jsonl
变体比较
| 变体 | 使用场景 | 关键区别 |
|---|---|---|
| ProteinMPNN | 通用 | 原始模型 |
| SolubleMPNN | 表达 | 在可溶性蛋白质上训练 |
| LigandMPNN | 小分子 | 配体感知上下文 |
输出格式
output/
├── seqs/
│ └── backbone.fa # FASTA序列
└── backbone_pdb/
└── backbone_0001.pdb # 带有设计序列的PDB文件
FASTA标题格式
>backbone_0001, score=1.234, global_score=1.234, seq_recovery=0.85
MKTAYIAKQRQISFVKSHFSRQLE...
常见工作流程
结合剂序列设计
python protein_mpnn_run.py \
--pdb_path binder_backbone.pdb \
--out_folder output/ \
--num_seq_per_target 16 \
--sampling_temp "0.1" \
--pdb_path_chains B # 仅设计结合剂链
界面重新设计
# 固定核心,设计界面
python protein_mpnn_run.py \
--pdb_path complex.pdb \
--fixed_positions_jsonl core_positions.jsonl \
--num_seq_per_target 32
多状态设计
# 为多个构象设计
python protein_mpnn_run.py \
--pdb_path_multi state1.pdb,state2.pdb \
--num_seq_per_target 16
示例输出
成功运行
$ python protein_mpnn_run.py --pdb_path backbone.pdb --out_folder output/ --num_seq_per_target 8
加载模型权重...
为backbone.pdb设计序列
在2.3秒内生成8个序列
output/seqs/backbone.fa:
>backbone_0001, score=1.234, global_score=1.189, seq_recovery=0.82
MKTAYIAKQRQISFVKSHFSRQLEERGLTKE...
>backbone_0002, score=1.198, global_score=1.156, seq_recovery=0.79
MKTAYIAKQRQISFVKSQFSRQLDERGLTKE...
良好输出的特征:
- 分数: 1.0-2.0(越低表示越自信)
- 序列恢复率: 从头设计为0.3-0.6,重新设计为0.7-0.9
- 当温度 > 0.1时,序列多样化(不完全相同)
决策树
我应该使用ProteinMPNN吗?
│
├─ 有骨架结构吗?
│ ├─ 有 → 继续下面
│ └─ 没有 → 先使用RFdiffusion
│
├─ 结合位点有什么?
│ ├─ 无/仅蛋白质 → ProteinMPNN ✓
│ ├─ 小分子/配体 → 使用LigandMPNN
│ └─ 金属/辅因子 → 使用LigandMPNN
│
├─ 优先级是什么?
│ ├─ 溶解度/表达 → 考虑SolubleMPNN
│ ├─ 速度 → ProteinMPNN ✓
│ └─ AF2优化 → 考虑ColabDesign
│
└─ 需要固定位置吗?
├─ 需要 → 使用--fixed_positions_jsonl
└─ 不需要 → ProteinMPNN ✓(设计全部)
典型性能
| 任务规模 | 时间 (T4) | 成本 (Modal) | 备注 |
|---|---|---|---|
| 100个骨架 × 8个序列 | 15-20分钟 | ~$2 | 标准 |
| 500个骨架 × 8个序列 | 1-1.5小时 | ~$8 | 大型任务 |
| 1000个骨架 × 16个序列 | 3-4小时 | ~$18 | 全面任务 |
吞吐量: 在T4 GPU上约50-100个序列/分钟。
验证
grep -c "^>" output/seqs/*.fa # 应匹配backbone_count × num_seq_per_target
故障排除
序列多样性低: 将sampling_temp增加到0.2-0.3 恢复率差: 将sampling_temp降低到0.1 内存不足错误: 减少batch_size 不需要的半胱氨酸: 使用–omit_AAs “C”
错误解释
| 错误 | 原因 | 修复方法 |
|---|---|---|
RuntimeError: CUDA内存不足 |
蛋白质过长或批次过大 | 减少batch_size或使用更大的GPU |
KeyError: 'A' |
PDB文件中没有该链 | 检查PDB文件中的链ID |
JSONDecodeError |
无效的JSONL格式 | 验证JSON语法(参见常见错误) |
IndexError: 列表索引 |
空链或残基列表 | 检查PDB有原子,不仅仅是HEADER |
下一步: 用于验证的结构预测 → 使用protein-qc进行过滤。