DiffDock:基于扩散模型的分子对接
概述
DiffDock 是一种基于扩散模型的深度学习分子对接工具,用于预测小分子配体与蛋白质靶标的 3D 结合构象。它代表了当前计算对接领域的最新水平,在基于结构的药物发现和化学生物学中至关重要。
核心能力:
- 利用深度学习高精度预测配体结合构象
- 支持蛋白质结构(PDB 文件)或序列(通过 ESMFold)
- 处理单个复合物或批量虚拟筛选
- 生成置信度分数以评估预测可靠性
- 处理多种配体输入(SMILES、SDF、MOL2)
关键区别: DiffDock 预测的是结合构象(3D 结构)和置信度(预测确定性),而不是结合亲和力(ΔG、Kd)。务必结合评分函数(如 GNINA、MM/GBSA)进行亲和力评估。
何时使用该技能
该技能适用于以下情况:
- “将该配体对接至蛋白质”或“预测结合构象”
- “运行分子对接”或“执行蛋白质-配体对接”
- “虚拟筛选”或“筛选化合物库”
- “该分子结合在何处?”或“预测结合位点”
- 基于结构的药物设计或先导化合物优化任务
- 涉及 PDB 文件 + SMILES 字符串或配体结构的任务
- 多个蛋白质-配体对的批量对接
安装与环境设置
检查环境状态
在执行 DiffDock 任务之前,请验证环境设置:
# 使用提供的设置检查脚本
python scripts/setup_check.py
该脚本验证 Python 版本、PyTorch 及 CUDA、PyTorch Geometric、RDKit、ESM 及其他依赖项。
安装选项
选项 1:Conda(推荐)
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock
conda env create --file environment.yml
conda activate diffdock
选项 2:Docker
docker pull rbgcsail/diffdock
docker run -it --gpus all --entrypoint /bin/bash rbgcsail/diffdock
micromamba activate diffdock
重要提示:
- 强烈建议使用 GPU(比 CPU 快 10–100 倍)
- 首次运行会预计算 SO(2)/SO(3) 查找表(约 2–5 分钟)
- 模型检查点(约 500MB)会自动下载(如果不存在)
- 当前上游版本为 DiffDock v1.1.3;
default_inference_args.yaml中默认使用 DiffDock-L 模型
核心工作流
工作流 1:单个蛋白质-配体对接
应用场景: 将一个配体对接至一个蛋白质靶标
输入要求:
- 蛋白质:PDB 文件或氨基酸序列
- 配体:SMILES 字符串或结构文件(SDF/MOL2)
命令:
python -m inference \
--config default_inference_args.yaml \
--protein_path protein.pdb \
--ligand_description "CC(=O)Oc1ccccc1C(=O)O" \
--out_dir results/single_docking/
替代方案(蛋白质序列):
python -m inference \
--config default_inference_args.yaml \
--protein_sequence "MSKGEELFTGVVPILVELDGDVNGHKF..." \
--ligand_description ligand.sdf \
--out_dir results/sequence_docking/
输出结构:
results/single_docking/
└── complex_0/
├── rank1.sdf # 排名第一的构象的便捷副本
├── rank1_confidence0.87.sdf # 排名第一的构象,文件名包含置信度
├── rank2_confidence0.42.sdf # 排名第二的构象
├── ...
└── rank10_confidence-1.23.sdf # 第 10 个构象(默认:10 个样本)
当前 inference.py 注册了 --ligand_description 用于单复合物运行。部分上游 README 文本仍显示 --ligand;请使用 --ligand_description,除非您的本地代码明确支持 --ligand 别名。
工作流 2:批量处理多个复合物
应用场景: 对接多个配体至蛋白质,虚拟筛选活动
第一步:准备批处理 CSV
使用提供的脚本创建或验证批处理输入:
# 创建模板
python scripts/prepare_batch_csv.py --create --output batch_input.csv
# 验证现有 CSV
python scripts/prepare_batch_csv.py my_input.csv --validate
CSV 格式:
complex_name,protein_path,ligand_description,protein_sequence
complex1,protein1.pdb,CC(=O)Oc1ccccc1C(=O)O,
complex2,,COc1ccc(C#N)cc1,MSKGEELFT...
complex3,protein3.pdb,ligand3.sdf,
必需列:
complex_name:唯一标识符protein_path:PDB 文件路径(如果使用序列,则留空)ligand_description:SMILES 字符串或配体文件路径protein_sequence:氨基酸序列(如果使用 PDB,则留空)
第二步:运行批量对接
python -m inference \
--config default_inference_args.yaml \
--protein_ligand_csv batch_input.csv \
--out_dir results/batch/ \
--batch_size 10
对于大型虚拟筛选(>100 个化合物):
预先计算蛋白质嵌入以加快处理速度:
# 预先计算嵌入
python datasets/esm_embedding_preparation.py \
--protein_ligand_csv screening_input.csv \
--out_file protein_embeddings.pt
# 使用预先计算的嵌入运行
python -m inference \
--config default_inference_args.yaml \
--protein_ligand_csv screening_input.csv \
--esm_embeddings_path protein_embeddings.pt \
--out_dir results/screening/
工作流 3:分析结果
对接完成后,分析置信度分数并排序预测结果:
# 分析所有结果
python scripts/analyze_results.py results/batch/
# 每个复合物显示前 5 个
python scripts/analyze_results.py results/batch/ --top 5
# 根据置信度阈值筛选
python scripts/analyze_results.py results/batch/ --threshold 0.0
# 导出至 CSV
python scripts/analyze_results.py results/batch/ --export summary.csv
# 显示所有复合物中前 20 个最佳预测
python scripts/analyze_results.py results/batch/ --best 20
分析脚本将:
- 解析所有预测的置信度分数
- 分类为高(>0)、中等(-1.5 至 0)或低(<-1.5)
- 在复合物内部和跨复合物之间对预测进行排序
- 生成统计摘要
- 将结果导出至 CSV 供下游分析
置信度分数解读
理解分数:
| 分数范围 | 置信度等级 | 解读 |
|---|---|---|
| > 0 | 高 | 强预测,很可能准确 |
| -1.5 至 0 | 中等 | 合理预测,需仔细验证 |
| < -1.5 | 低 | 不确定预测,需要验证 |
关键说明:
- 置信度 ≠ 亲和力:高置信度仅表示模型对结构的确定性,而非强结合
- 背景很重要:根据以下情况调整期望:
- 大配体(>500 Da):置信度预期较低
- 多个蛋白质链:可能降低置信度
- 新型蛋白质家族:可能表现不佳
- 多个样本:查看前 3–5 个预测,寻找一致性
详细指导: 使用 Read 工具阅读 references/confidence_and_limitations.md
参数定制
使用自定义配置
为特定用例创建自定义配置:
# 复制模板
cp assets/custom_inference_config.yaml my_config.yaml
# 编辑参数(参见模板中的预设)
# 然后使用自定义配置运行
python -m inference \
--config my_config.yaml \
--protein_ligand_csv input.csv \
--out_dir results/
要调整的关键参数
采样密度:
samples_per_complex: 10→ 对于困难情况增加至 20–40- 更多样本 = 更好的覆盖范围,但运行时间更长
推理步骤:
inference_steps: 20→ 增加至 25–30 以提高精度- 更多步骤 = 可能更好的质量,但速度更慢
温度参数(控制多样性):
temp_sampling_tor: 7.04→ 对于柔性配体增加(8–10)temp_sampling_tor: 7.04→ 对于刚性配体减少(5–6)- 更高的温度 = 更多样的构象
模板中可用的预设:
- 高精度:更多样本 + 步骤,较低温度
- 快速筛选:更少样本,更快
- 柔性配体:增加扭转温度
- 刚性配体:降低扭转温度
完整的参数说明: 使用 Read 工具阅读 references/parameters_reference.md
高级技术
集成对接(蛋白质柔性)
对于已知柔性的蛋白质,对接至多个构象:
# 创建集成 CSV
import pandas as pd
conformations = ["conf1.pdb", "conf2.pdb", "conf3.pdb"]
ligand = "CC(=O)Oc1ccccc1C(=O)O"
data = {
"complex_name": [f"ensemble_{i}" for i in range(len(conformations))],
"protein_path": conformations,
"ligand_description": [ligand] * len(conformations),
"protein_sequence": [""] * len(conformations)
}
pd.DataFrame(data).to_csv("ensemble_input.csv", index=False)
增加采样量后运行对接:
python -m inference \
--config default_inference_args.yaml \
--protein_ligand_csv ensemble_input.csv \
--samples_per_complex 20 \
--out_dir results/ensemble/
与评分函数集成
DiffDock 生成构象;与其他工具结合评估亲和力:
GNINA(快速神经网络评分):
for pose in results/single_docking/complex_0/*confidence*.sdf; do
gnina -r protein.pdb -l "$pose" --score_only
done
MM/GBSA(更准确,更慢): 在能量最小化后使用 AmberTools MMPBSA.py 或 gmx_MMPBSA
自由能计算(最准确): 使用 OpenMM + OpenFE 或 GROMACS 进行 FEP/TI 计算
推荐工作流:
- DiffDock → 生成带有置信度分数的构象
- 视觉检查 → 检查结构合理性
- GNINA 或 MM/GBSA → 根据亲和力重新评分和排序
- 实验验证 → 生化检测
局限性与范围
DiffDock 设计用于:
- 小分子配体(通常 100–1000 Da)
- 药物样有机化合物
- 小肽(<20 个残基)
- 单链或多链蛋白质
DiffDock 不适用于:
- 大生物分子(蛋白质-蛋白质对接)→ 使用 DiffDock-PP 或 AlphaFold-Multimer
- 大肽(>20 个残基)→ 使用其他方法
- 共价对接 → 使用专用共价对接工具
- 结合亲和力预测 → 与评分函数结合使用
- 膜蛋白 → 未经专门训练,谨慎使用
完整局限性: 使用 Read 工具阅读 references/confidence_and_limitations.md
故障排除
常见问题
问题:所有预测的置信度分数均较低
- 原因:大/异常配体、结合位点不明确、蛋白质柔性
- 解决方案:增加
samples_per_complex(20–40),尝试集成对接,验证蛋白质结构
问题:内存不足错误
- 原因:GPU 内存不足以处理批次大小
- 解决方案:减少
--batch_size 2或一次处理更少的复合物
问题:性能缓慢
- 原因:在 CPU 而非 GPU 上运行
- 解决方案:使用
python -c "import torch; print(torch.cuda.is_available())"验证 CUDA,使用 GPU
问题:不切实际的结合构象
- 原因:蛋白质准备不良、配体过大、结合位点错误
- 解决方案:检查蛋白质是否有缺失残基,移除远处的水分子,考虑指定结合位点
问题:“模块未找到”错误
- 原因:缺少依赖项或环境错误
- 解决方案:运行
python scripts/setup_check.py进行诊断
性能优化
为获得最佳结果:
- 使用 GPU(对实际使用至关重要)
- 对重复使用的蛋白质预先计算 ESM 嵌入
- 批量处理多个复合物
- 从默认参数开始,然后根据需要调整
- 验证蛋白质结构(解析缺失残基)
- 使用配体的规范 SMILES
图形用户界面
如需交互式使用,启动 Web 界面:
python app/main.py
# 导航至 http://localhost:7860
或无需安装即可使用在线演示:
资源
辅助脚本(scripts/)
prepare_batch_csv.py:创建和验证批处理输入 CSV 文件
- 使用示例条目创建模板
- 验证文件路径和 SMILES 字符串
- 检查必需列和格式问题
analyze_results.py:分析置信度分数并排序预测结果
- 解析单次或批量运行的结果
- 生成统计摘要
- 导出至 CSV 供下游分析
- 识别跨复合物的最佳预测
setup_check.py:验证 DiffDock 环境设置
- 检查 Python 版本和依赖项
- 验证 PyTorch 和 CUDA 的可用性
- 测试 RDKit 和 PyTorch Geometric 安装
- 在需要时提供安装说明
参考文档(references/)
parameters_reference.md:完整的参数文档
- 所有命令行选项和配置参数
- 默认值和可接受范围
- 控制多样性的温度参数
- 模型检查点位置和版本标志
当用户需要时阅读此文件:
- 详细的参数说明
- 针对特定系统的微调指导
- 替代采样策略
confidence_and_limitations.md:置信度分数解读和工具局限性
- 详细的置信度分数解读
- 何时信任预测
- DiffDock 的范围和局限性
- 与互补工具的集成
- 预测质量故障排除
当用户需要时阅读此文件:
- 帮助解读置信度分数
- 了解何时不使用 DiffDock
- 与其他工具结合的指导
- 验证策略
workflows_examples.md:全面的工作流示例
- 详细的安装说明
- 所有工作流的分步示例
- 高级集成模式
- 常见问题故障排除
- 最佳实践和优化技巧
当用户需要时阅读此文件:
- 包含代码的完整工作流示例
- 与 GNINA、OpenMM 或其他工具的集成
- 虚拟筛选工作流
- 集成对接流程
资产(assets/)
batch_template.csv:模板
……(为翻译而截断)