从安装到批量预测:手把手带你用Uni-Mol Docking V2完成一次虚拟筛选(附ABL1案例代码)

张开发
2026/4/7 13:15:47 15 分钟阅读

分享文章

从安装到批量预测:手把手带你用Uni-Mol Docking V2完成一次虚拟筛选(附ABL1案例代码)
从零开始掌握Uni-Mol Docking V2ABL1靶点的虚拟筛选实战指南1. 环境配置与工具准备在开始使用Uni-Mol Docking V2之前我们需要搭建一个稳定可靠的工作环境。这个步骤看似基础却直接影响后续所有操作的顺利进行。对于刚接触计算生物学的研究者来说合理配置环境可以避免90%的后续报错问题。首先确保你的系统满足以下基本要求Linux操作系统推荐Ubuntu 20.04或更高版本NVIDIA显卡显存≥4GB推荐≥8GBConda包管理器Miniconda或Anaconda关键组件安装步骤# 创建专用conda环境 conda create -n unimol_dock python3.9 -y conda activate unimol_dock # 安装PyTorch基础框架 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 克隆Uni-Mol和Uni-Core代码库 git clone https://github.com/deepmodeling/Uni-Mol.git git clone https://github.com/dptech-corp/Uni-Core.git # 安装Uni-Core依赖 cd Uni-Core pip install . # 安装其他必要依赖 pip install biopandas tqdm scikit-learn conda install -c conda-forge rdkit2022.9.3注意RDKit的版本必须严格匹配2022.9.3其他版本可能导致化学结构处理异常。环境验证环节不容忽视。运行以下命令检查关键组件是否正常工作python -c import torch; print(torch.__version__, torch.cuda.is_available()) python -c from rdkit import Chem; print(Chem.__version__)如果输出显示CUDA可用且RDKit版本正确说明基础环境已就绪。接下来下载预训练模型权重mkdir -p Uni-Mol/unimol_docking_v2/weights wget -O Uni-Mol/unimol_docking_v2/weights/unimol_docking_v2_240517.pt https://www.dropbox.com/scl/fi/sfhrtx1tjprce18wbvmdr/unimol_docking_v2_240517.pt?rlkey5zg7bh150kcinalrqdhzmyyoodl02. 数据准备与预处理2.1 蛋白结构准备以ABL1激酶PDB ID: 6HD6为例我们需要从RCSB PDB数据库获取晶体结构from biopandas.pdb import PandasPdb import os # 创建项目目录结构 os.makedirs(ABL1_case/protein, exist_okTrue) os.makedirs(ABL1_case/ligands, exist_okTrue) # 下载并清理蛋白结构 ppdb PandasPdb().fetch_pdb(6HD6) ppdb.to_pdb(pathABL1_case/protein/6HD6_clean.pdb)原始PDB文件通常需要以下处理步骤移除水分子和无关配体补全缺失残基可用Modeller等工具添加氢原子可用PDBFixer或H服务器提示对于虚拟筛选建议保留结晶水分子特别是与配体有相互作用的这些水分子可能参与重要的氢键网络。2.2 配体库构建准备待筛选的小分子化合物库时需要注意格式统一转换为SDF或MOL2确保每个分子具有正确的电荷状态去除重复结构和盐形式使用Open Babel进行格式转换示例obabel input.smi -O ABL1_case/ligands/library.sdf --gen3D对于ABL1案例我们准备以下测试分子化合物类型活性(nM)来源5变构调节剂10000文献报道6变构调节剂2000晶体结构配体7变构调节剂2.3优化化合物N阴性对照无活性其他靶点配体2.3 对接网格定义对接网格的中心坐标和尺寸对结果质量至关重要。使用PyMOL确定结合位点空间参数from pymol import cmd cmd.load(ABL1_case/protein/6HD6_clean.pdb) cmd.load(ABL1_case/ligands/compound_6.sdf) # 参考配体 cmd.alter(resn UNK, resnLIG) # 统一重命名配体 # 获取配体空间范围 extent cmd.get_extent(LIG) center [(extent[0][i]extent[1][i])/2 for i in range(3)] size [extent[1][i]-extent[0][i]10 for i in range(3)] # 各方向增加10Å缓冲 # 生成对接网格配置文件 import json with open(ABL1_case/docking_grid.json, w) as f: json.dump({ center_x: center[0], center_y: center[1], center_z: center[2], size_x: size[0], size_y: size[1], size_z: size[2] }, f)3. 分子对接实战操作3.1 单分子对接模式先以compound_6为例测试单分子对接流程cd Uni-Mol/unimol_docking_v2 python interface/demo.py \ --model-dir weights/unimol_docking_v2_240517.pt \ --input-protein ../../ABL1_case/protein/6HD6_clean.pdb \ --input-ligand ../../ABL1_case/ligands/compound_6.sdf \ --input-docking-grid ../../ABL1_case/docking_grid.json \ --output-ligand-name compound_6_pred \ --output-ligand-dir ../../ABL1_case/results \ --mode single \ --steric-clash-fix关键参数说明--steric-clash-fix: 自动修复空间冲突推荐开启--conf-size: 生成构象数默认10个--cluster: 对生成构象进行聚类成功运行后在结果目录会生成包含预测构象的SDF文件。使用PyMOL可视化对接结果cmd.load(ABL1_case/results/compound_6_pred.sdf) cmd.align(compound_6_pred, LIG) # 与参考配体对齐 print(RMSD:, cmd.rms_cur(compound_6_pred and name C*, LIG and name C*))3.2 批量对接模式对于虚拟筛选场景更高效的方式是使用batch_one2many模式# 准备批量输入CSV文件 echo input_ligand,input_docking_grid,output_ligand_name ../../ABL1_case/batch_input.csv for f in ../../ABL1_case/ligands/*.sdf; do echo $f,../../ABL1_case/docking_grid.json,$(basename $f .sdf)_pred ../../ABL1_case/batch_input.csv done # 运行批量对接 python interface/demo.py \ --model-dir weights/unimol_docking_v2_240517.pt \ --input-protein ../../ABL1_case/protein/6HD6_clean.pdb \ --input-batch-file ../../ABL1_case/batch_input.csv \ --output-ligand-dir ../../ABL1_case/results \ --mode batch_one2many \ --batch-size 4 \ --nthreads 8性能优化建议根据GPU显存调整--batch-size通常4-8使用--nthreads设置多线程预处理推荐CPU核心数的50-70%显存不足时可尝试--fp16启用混合精度4. 结果分析与验证4.1 构象质量评估使用PoseBusters进行全面的构象检查conda create -n posebusters python3.9 -y conda activate posebusters pip install posebusters python -m posebusters \ -i ABL1_case/results/compound_*_pred.sdf \ -r ABL1_case/protein/6HD6_clean.pdb \ -o ABL1_case/posebusters_report.html评估指标解读RMSD预测构象与实验结构的偏差2Å为良好立体冲突分子内或与蛋白间的原子重叠键长/键角是否符合化学规则芳香环平面性偏离理想平面的程度4.2 结果可视化技巧使用PyMOL创建专业级展示图# 设置可视化样式 cmd.set(cartoon_fancy_helices, 1) cmd.set(cartoon_highlight_color, grey80) cmd.set(surface_color, white) # 加载蛋白和预测构象 cmd.load(ABL1_case/protein/6HD6_clean.pdb) cmd.load(ABL1_case/results/compound_6_pred.sdf) # 自定义着色 cmd.color(blue, LIG) # 参考配体 cmd.color(magenta, compound_6_pred) # 预测构象 cmd.show(sticks, LIG or compound_6_pred) cmd.show(surface, protein and not solvent) # 添加距离测量 cmd.distance(H-bond1, compound_6_pred and name O1, protein and resn ASP and name OD1) cmd.set(dash_gap, 0.2) cmd.set(dash_radius, 0.1) # 保存图像 cmd.png(ABL1_case/docking_results.png, width3000, height2000, dpi300, ray1)4.3 对接结果统计ABL1案例的对接结果汇总化合物RMSD(Å)PoseBusters通过率预测结合能(kcal/mol)关键相互作用50.54100%-8.22氢键60.42100%-9.53氢键70.53100%-11.84氢键1疏水N-0%-5.3无特异性从结果可以看出活性化合物5-7均获得合理的对接构象高活性化合物7预测结合能最低阴性对照N未能通过化学合理性检查RMSD与实验活性呈现良好相关性5. 高级技巧与问题排查5.1 常见错误解决方案问题1RDKit的Kekulize报错RDKit ERROR: Cant kekulize mol. Unkekulized atoms: 0 1 2 18 19解决方案检查配体结构是否存在异常键序尝试用Open Babel预处理obabel problem.sdf -O fixed.sdf --canonical问题2显存不足CUDA out of memory. Tried to allocate...调整策略减小--batch-size可低至1启用--fp16减少显存占用使用--conf-size 5减少生成构象数5.2 性能优化建议预处理并行化python demo.py ... --nthreads $(($(nproc)*3/4))结果缓存# 在Python脚本中复用预处理结果 from unimol.inference import load_data protein_data load_data(protein.pdb, protein) ligand_data load_data(ligand.sdf, ligand)混合精度训练python demo.py ... --fp16 --fp16-init-scale 45.3 与Uni-Dock联用对于重要靶点建议结合Uni-Mol Docking与Uni-Dock进行多阶段筛选Uni-Mol Docking快速初筛千分子级Uni-Dock精细对接百分子级分子动力学模拟验证十分子级联用示例# 第一阶段Uni-Mol粗筛 python demo.py ... --mode batch_one2many --conf-size 5 # 第二阶段Uni-Dock精修 unidock --receptor protein.pdb \ --ligands top100.sdf \ --center_x 22.16 --center_y 43.11 --center_z 54.52 \ --size_x 20 --size_y 21 --size_z 20 \ --num_modes 20 --exhaustiveness 32

更多文章