name: diffdock description: “基于扩散模型的分子对接。从PDB/SMILES预测蛋白质-配体结合姿态,生成置信分数,用于虚拟筛选和结构基础药物设计。不用于亲和力预测。”
DiffDock:基于扩散模型的分子对接
概述
DiffDock 是一个基于扩散模型的深度学习工具,用于分子对接,预测小分子配体与蛋白质目标的3D结合姿态。它代表了计算对接领域的先进水平,对于结构基础药物发现和化学生物学至关重要。
核心功能:
- 使用深度学习高精度预测配体结合姿态
- 支持蛋白质结构(PDB文件)或序列(通过ESMFold)
- 处理单个复合物或批量虚拟筛选任务
- 生成置信分数以评估预测可靠性
- 处理多种配体输入(SMILES、SDF、MOL2)
关键区别: DiffDock 预测 结合姿态(3D结构)和 置信度(预测确定性),而非结合亲和力(ΔG、Kd)。始终结合评分函数(如GNINA、MM/GBSA)进行亲和力评估。
使用场景
此技能应在以下情况使用:
- “将这个配体对接到蛋白质” 或 “预测结合姿态”
- “运行分子对接” 或 “执行蛋白质-配体对接”
- “虚拟筛选” 或 “筛选化合物库”
- “这个分子在哪里结合?” 或 “预测结合位点”
- 结构基础药物设计或先导优化任务
- 涉及PDB文件+SMILES字符串或配体结构的任务
- 多个蛋白质-配体对的批量对接
安装与环境设置
检查环境状态
在执行DiffDock任务前,验证环境设置:
# 使用提供的设置检查器
python scripts/setup_check.py
此脚本验证Python版本、带CUDA的PyTorch、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)若不存在会自动下载
核心工作流
工作流1:单个蛋白质-配体对接
使用案例: 将一个配体对一个蛋白质目标进行对接
输入要求:
- 蛋白质:PDB文件或氨基酸序列
- 配体:SMILES字符串或结构文件(SDF/MOL2)
命令:
python -m inference \
--config default_inference_args.yaml \
--protein_path protein.pdb \
--ligand "CC(=O)Oc1ccccc1C(=O)O" \
--out_dir results/single_docking/
替代(蛋白质序列):
python -m inference \
--config default_inference_args.yaml \
--protein_sequence "MSKGEELFTGVVPILVELDGDVNGHKF..." \
--ligand ligand.sdf \
--out_dir results/sequence_docking/
输出结构:
results/single_docking/
├── rank_1.sdf # 最高排名姿态
├── rank_2.sdf # 第二排名姿态
├── ...
├── rank_10.sdf # 第10个姿态(默认:10个样本)
└── confidence_scores.txt
工作流2:批量处理多个复合物
使用案例: 对多个配体与蛋白质进行对接,虚拟筛选活动
步骤1:准备批量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则留空)
步骤2:运行批量对接
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-10temp_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/*.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:批量处理模板
- 预格式化CSV带必需列
- 示例条目显示不同输入类型
- 准备用实际数据定制
custom_inference_config.yaml:配置模板
- 带所有参数的注释YAML
- 四个预设配置适用于常见用例
- 详细注释解释每个参数
- 准备定制和使用
最佳实践
- 始终使用
setup_check.py验证环境 在开始大型作业前 - 使用
prepare_batch_csv.py验证批量CSV 早期捕获错误 - 从默认开始 然后基于系统特定需求调整参数
- 生成多样本(10-40)以进行稳健预测
- 可视化检查 顶级姿态后下游分析
- 结合评分 函数进行亲和力评估
- 使用置信分数 用于初始排名,非最终决策
- 预计算嵌入 用于虚拟筛选活动
- 记录使用参数 以便再现性
- 验证结果 实验可能时
引用
使用DiffDock时,引用适当论文:
DiffDock-L(当前默认模型):
Stärk et al. (2024) "DiffDock-L: Improving Molecular Docking with Diffusion Models"
arXiv:2402.18396
原始DiffDock:
Corso et al. (2023) "DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking"
ICLR 2023, arXiv:2210.01776