用途
RFdiffusion 是一个基于扩散的生成模型,用于从头生成蛋白质骨架结构。该技能适用于以下场景:
- 针对蛋白质靶点设计 binder
- 从头设计单体
- 基序支架设计
- 对称组装体生成
主要能力
- 支持 binder 设计、单体从头生成、基序支架和对称寡聚体
- 通过 contigmap 语法控制链的固定与可变区域
- 支持热点残基指定以引导界面形成
- 支持部分扩散(从指定时间步开始扩散)用于结构精修
- 支持对称性参数(C2、C3、C4、C5、C6、D2、D3、D4、四面体、八面体)
- 支持 scaffold-guided 生成和序列 inpaint
- 提供多种模型检查点,适用于不同用例
环境要求
| 项目 | 最低 | 推荐 |
|---|---|---|
| Python | 3.9+ | 3.10 |
| CUDA | 11.7+ | 12.0+ |
| GPU 显存 | 16GB | 24GB (A10G) |
| RAM | 16GB | 32GB |
使用方式
RFdiffusion 不在 biomodals 中,需从官方 RosettaCommons 仓库或其 Docker 镜像运行,而非通过 Modal。
本地安装
git clone https://github.com/RosettaCommons/RFdiffusion.git
cd RFdiffusion
# 包含 NVIDIA SE(3)-Transformer 的 Conda 环境
conda env create -f env/SE3nv.yml
conda activate SE3nv
cd env/SE3Transformer && pip install . && cd ../..
pip install -e .
# 下载权重
mkdir -p models
wget -P models http://files.ipd.uw.edu/pub/RFdiffusion/e29311f6f1bf1af907f9ef9f44b8328b/Complex_base_ckpt.pt
Binder 设计运行示例
./scripts/run_inference.py \
inference.input_pdb=target.pdb \
'contigmap.contigs=[A1-150/0 70-100]' \
'ppi.hotspot_res=[A45,A67,A89]' \
inference.num_designs=100
骨架生成后,使用 proteinmpnn 进行序列设计。
Contig 映射语法
# 从头单链(50-100 残基)
contigmap.contigs=[50-100]
# Binder + 靶点(A = 靶链,用 /0 固定)
contigmap.contigs=[A1-150/0 70-100]
# 基序支架(保留残基,/0 = 固定)
contigmap.contigs=[20-40/0 A10-30/0 20-40]
# 多链 binder
contigmap.contigs=[A1-100/0 B1-100/0 60-80]
# 可变长度范围
contigmap.contigs=[A1-150/0 50-100]
热点残基指定
ppi.hotspot_res=[A45,A67,A89]
核心参数
| 参数 | 默认值 | 范围 | 说明 |
|---|---|---|---|
| inference.num_designs | 10 | 1-10000 | 生成设计数量 |
| inference.input_pdb | - | path | 靶点结构文件 |
| inference.output_prefix | output | string | 输出文件名前缀 |
| diffuser.T | 50 | 20-200 | 扩散时间步 |
| denoiser.noise_scale_ca | 1.0 | 0.0-2.0 | CA 原子噪声 |
| denoiser.noise_scale_frame | 1.0 | 0.0-2.0 | Frame 噪声 |
| inference.ckpt_override_path | - | path | 模型检查点 |
| potentials.guide_scale | 1.0 | 0.1-10 | 引导强度 |
| potentials.guide_decay | constant | string | 衰减类型 |
高级参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| diffuser.partial_T | None | 从时间步 T 开始部分扩散 |
| contigmap.inpaint_str | None | 需要 inpaint 的序列位置 |
| scaffoldguided.scaffoldguided | false | 启用 scaffold-guided 生成 |
| scaffoldguided.target_pdb | None | 支架模板 PDB |
| ppi.binderlen | None | 指定 binder 精确长度 |
对称参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| symmetry.symmetry | None | 对称类型(C2、C3、C4、D2 等) |
| symmetry.recenter | true | 重新居中对称组装体 |
| symmetry.radius | None | 对称组装体半径约束 |
模型检查点
| 检查点 | 使用场景 |
|---|---|
| Complex_base_ckpt.pt | Binder 设计(默认) |
| Base_ckpt.pt | 从头单体 |
| ActiveSite_ckpt.pt | 活性位点支架 |
| InpaintSeq_ckpt.pt | 序列 inpaint |
常见工作流
Binder 设计
- 准备靶点 PDB(裁剪至结合区域 + 10A 缓冲)
- 确定 3-6 个热点残基(暴露、保守)
- 生成 100-500 个骨架
- 传递给 proteinmpnn 进行序列设计
基序支架
- 提取基序坐标
- 在 contigmap 中使用 /0 固定基序
- 生成周围支架
- 验证基序保留(RMSD < 1.5A)
对称寡聚体
# C3 对称三聚体
python run_inference.py \
symmetry.symmetry=C3 \
contigmap.contigs=[100-150] \
inference.num_designs=50
# D2 对称四聚体
python run_inference.py \
symmetry.symmetry=D2 \
contigmap.contigs=[80-120] \
symmetry.radius=25
部分扩散(精修)
python run_inference.py \
inference.input_pdb=initial.pdb \
diffuser.partial_T=10 \
contigmap.contigs=[A1-100]
输出格式
output/
├── output_0.pdb # 生成的骨架
├── output_1.pdb
├── ...
└── output_99.pdb
每个 PDB 包含多聚丙氨酸骨架,需使用 proteinmpnn 进行序列设计。
常见错误
- contig 语法中缺少 /0 会导致靶点移动
- 未加单引号会导致 shell 在空格处分割参数
- 热点残基缺少链字母或包含空格会破坏解析
- CUDA out of memory:显存不足,使用 A100 或减少每批设计数量
- KeyError: 'A':PDB 中未找到该链
- ValueError: invalid contig:contigs 语法错误
- FileNotFoundError: ckpt:缺少模型权重
适用场景与限制
- 需要生成蛋白质骨架时使用 RFdiffusion
- 已有骨架时直接使用 ProteinMPNN
- 若需要最高成功率可考虑 BindCraft
- 若需要多样性/探索使用 RFdiffusion
- 若需要全原子精度可考虑 BoltzGen
- 典型性能:100 个骨架约 20-30 分钟(A10G),500 个约 1.5-2 小时,1000 个约 3-4 小时
- 预期下游产出:约 10-15% 的骨架在序列设计 + 验证后通过完整 QC
验证
ls output/*.pdb | wc -l # 应与 num_designs 匹配
故障排除
- 设计缺乏二级结构:将 noise_scale 降至 0.5-0.8
- Binder 未接触热点:检查残基编号,增加 num_designs
- OOM 错误:减小批大小或使用 A100 GPU
- 生成缓慢:将 diffuser.T 降至 25-35
后续步骤
proteinmpnn 进行序列设计 → 结构预测进行验证 → protein-qc 进行过滤。