Uni-Dock 实战测评:源码编译、四体系基准与批量吞吐验证

本文收录于专栏 gnina系列 ------ 专栏系统覆盖分子对接引擎选型、GPU 加速虚拟筛选与打分函数评估,点击订阅可跟踪后续更新。

你看过 Uni-Dock 论文里"超千倍加速、100 块 V100 十二小时筛完 3820 万分子"的说法,想知道拿到自己这张消费级 GPU 上到底能兑现多少?

这篇在 12 GB 显存(sm_86)的机器上从源码编译 Uni-Dock v1.2.0,跑四个真实体系的单配体基准(1.7--16.5 秒)和 100 配体批量吞吐(1.04 秒/个),给出对 Vina 1.2.7 CPU 单核 4--7 倍、批量摊销后 11.9 倍的实测加速比------以及论文千倍口径与单机实测之间差距的三个来源。金属酶体系的配体拒收链坑(CA→ZN→MASTER)也一并给修法。

读完你能判断手里的库规模值不值得上 Uni-Dock。同时给出 v1.0 到 v1.2.0 的版本沿革、LGPL 到 Apache 2.0 的许可证切换时间点,以及 conda 与源码两条安装路线的取舍(conda 解算超时的实测记录也一并奉上)。

关键字:Uni-Dock、分子对接、GPU加速、虚拟筛选、批量对接、CUDA编译、AutoDock Vina、分层筛选
#mermaid-svg-xTAdcLquLtYvuNG8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xTAdcLquLtYvuNG8 .error-icon{fill:#552222;}#mermaid-svg-xTAdcLquLtYvuNG8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xTAdcLquLtYvuNG8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xTAdcLquLtYvuNG8 .marker.cross{stroke:#333333;}#mermaid-svg-xTAdcLquLtYvuNG8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xTAdcLquLtYvuNG8 p{margin:0;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge{stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 text{fill:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth--1{stroke-width:17;}#mermaid-svg-xTAdcLquLtYvuNG8 .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-0{stroke-width:14;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-1{stroke-width:11;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 text{fill:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-2{stroke-width:8;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-3{stroke-width:5;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-4{stroke-width:2;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-5{stroke-width:-1;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-6{stroke-width:-4;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-7{stroke-width:-7;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-8{stroke-width:-10;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-9{stroke-width:-13;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 polygon,#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 text{fill:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .edge-depth-10{stroke-width:-16;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled circle,#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:lightgray;}#mermaid-svg-xTAdcLquLtYvuNG8 .disabled text{fill:#efefef;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-root rect,#mermaid-svg-xTAdcLquLtYvuNG8 .section-root path,#mermaid-svg-xTAdcLquLtYvuNG8 .section-root circle,#mermaid-svg-xTAdcLquLtYvuNG8 .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-xTAdcLquLtYvuNG8 .section-root text{fill:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-root span{color:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .section-2 span{color:#ffffff;}#mermaid-svg-xTAdcLquLtYvuNG8 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-xTAdcLquLtYvuNG8 .edge{fill:none;}#mermaid-svg-xTAdcLquLtYvuNG8 .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-xTAdcLquLtYvuNG8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Uni-Dock 实战
它是什么
Vina 1.2 的 CUDA 重写
深势科技出品
怎么装
conda 与源码两条路
三分钟编译
跑得如何
四体系单配体
百配体批量摊销
口径差在哪
千倍是集群批量
单任务只有几倍
坑在哪
金属原子拒收
gpu_batch 语法

目录 :[§0. 相关教程与核心文献](#§0. 相关教程与核心文献) | [§1. 软件介绍与版本沿革](#§1. 软件介绍与版本沿革) | [§2. 原理:蒙特卡洛线程化与动态批量](#§2. 原理:蒙特卡洛线程化与动态批量) | [§3. 特点与边界](#§3. 特点与边界) | [§4. 文献测评口径](#§4. 文献测评口径) | [§5. 本地安装实测](#§5. 本地安装实测) | [§6. 基准与加速比](#§6. 基准与加速比) | [§7. 结论与选型建议](#§7. 结论与选型建议)

§0. 相关教程与核心文献

资源 链接 与本文关系
Uni-Dock 官方仓库 --- 源码、CHANGELOG 与安装文档
Yu 等, JCTC 2023, 10.1021/acs.jctc.2c01145 --- 方法论文(千倍加速与 3820 万分子实测)
conda-forge unidock --- 官方推荐的预编译安装路径

§1. 软件介绍与版本沿革

Uni-Dock 由深势科技(DP Technology)开发、在 DeepModeling 社区孵化,是对 AutoDock Vina 1.2 计算内核的 CUDA 重写:保留 vina/vinardo/ad4 三种打分函数与 Vina 风格的盒子参数,把蒙特卡洛构象搜索搬进 GPU 线程束。版本沿革:v1.0(2023 年,随 JCTC 论文发布)→ v1.1(2024 年 2 月,加入单配体模式等,LGPL 协议)→ 2025 年 3 月许可证统一为 Apache 2.0 → v1.2.0(2026 年 6 月,本文实测版本);另有一个定位增强版的新仓库 Uni-Dock2(Apache 2.0)。对商用集成来说,现在的 Apache 2.0 与 Vina-GPU 系一致,比早期 LGPL 宽松。

§2. 原理:蒙特卡洛线程化与动态批量

Vina 的搜索是"多条蒙特卡洛链、每条链串行迭代",天然适合把链间并行 交给 GPU:每条链一个线程,同时跑成千上万条链,再砍短每条链的搜索深度------总评估数不变,墙钟时间被压到单链水平。第二个关键是动态批量显存管理:一批配体同时驻留显存,按显存占用预测自动调整批量,让 GPU 利用率始终打满。这两点合起来决定了它的性能形态------单配体任务吃不满卡,批量任务才能把优势兑现(§6 的实测会反复印证这一点)。

§3. 特点与边界

特点 :--gpu_batch 批量模式(配体列表一次提交);--search_mode 三档预设(fast/balance/detail 对应分层筛选的初筛/复筛/精筛);支持 SDF 直读与配对批量(paired_batch);输出与 Vina 生态同口径(打分、mode 表格式一致,本文 §6 与 Vina CPU 的能量逐体系对齐印证了这点)。

边界:只支持 Linux + CUDA(README 明说 ROCm 支持已停止维护);单口袋少于 10 个配体时开销占比大、反而慢,官方给出的最优场景是"单口袋上千配体";PDBQT 解析器对金属原子类型(CA 钙、ZN 锌)与非标准记录严格拒收------见 §5 坑 4。

§4. 文献测评口径

JCTC 2023 论文口径:对比 AutoDock Vina 单核 CPU 超过 1000 倍加速 且精度可比;head-to-head 实验中比 AutoDock-GPU 与 Vina-GPU 快 10 倍以上;单分子耗时在 V100 上 vina/vinardo 打分 0.1 秒、ad4 打分 0.5 秒;规模化演示为 3820 万分子(Enamine Diverse REAL 对接 KRAS G12D)在 100 块 V100 上不到 12 小时。官方 README 现行版本已更新为"V100 上超过 2000 倍"。

注意三个口径前提:数据中心卡、批量摊销、大 exhaustiveness------这三条在消费级 GPU 单任务场景都不成立,这正是 §6 实测只有个位数倍数的原因。

§5. 本地安装实测

实测环境(specs):

项 值
操作系统 Ubuntu 22.04 LTS
GPU 消费级 GPU,12 GB 显存,sm_86 架构
驱动 / CUDA Toolkit 580.178.04 / 12.4(装在 /usr/local/cuda,nvcc 需在 PATH)
编译器与构建 gcc/g++ 11.4 + cmake ≥ 3.16
C++ 库 系统 boost ≥ 1.72 dev 套件(Ubuntu 22.04 的 1.74 即满足)

第 0 步:系统依赖(一次装齐,全部来自 Ubuntu 官方仓库):

bash 复制代码
sudo apt-get install -y build-essential cmake \
  libboost-system-dev libboost-thread-dev libboost-serialization-dev \
  libboost-filesystem-dev libboost-program-options-dev libboost-timer-dev

第 1 步:获取源码(两条路线二选一):

bash 复制代码
# 路线一(官方推荐):conda 预编译包,免编译
conda create -n unidock_env unidock -c conda-forge
conda activate unidock_env && unidock --help

# 路线二(本文实测):源码编译,全程约 5 分钟
git clone https://github.com/dptech-corp/Uni-Dock.git
cd Uni-Dock/unidock

第 2 步:编译(sm_86 卡用 86,其他卡换算力号):

bash 复制代码
export PATH=/usr/local/cuda/bin:$PATH
cmake -B build -D CMAKE_CUDA_ARCHITECTURES=86 -D CMAKE_BUILD_TYPE=Release
cmake --build build -j8

第 3 步:冒烟验证:

bash 复制代码
./build/unidock --help
# 首行应显示 "Uni-Dock v1.2.0" 与参数列表
./build/unidock --receptor <受体.pdbqt> --ligand <配体.pdbqt> \
  --center_x 0 --center_y 0 --center_z 0 --size_x 20 --size_y 20 --size_z 20 \
  --scoring vina --exhaustiveness 8 --num_modes 9 --dir <已存在的输出目录>
# 预期: 每配体秒级完成, 输出目录出现 *_out.pdbqt

坑 1:conda 路线可能超时。 本机 conda create 解算加下载超过 8 分钟未完成,遂改走源码;源码路线依赖只有 CUDA、CMake、Boost(≥1.72)与 g++,Ubuntu 22.04 全部现成。

坑 2:--job_name 不是参数。 部分教程把它写进命令行,v1.2.0 直接 unrecognised option 退出------那是上层工具 unidock_tools 的概念。

坑 3:--dir 目录必须先建。 输出目录不存在时报 Directory does not exist,进程 0.01 秒静默退出,容易被脚本误判为"跑完"。

坑 4(金属酶必踩):配体解析链式拒收。 热解蛋白锌酶体系 3tmn 先后报 Atom type CA is not a valid AutoDock type(钙)、ZN(锌)、Unknown or inappropriate tag(MASTER 记录)------修法是受体清洗后另存:

bash 复制代码
awk '$NF!="CA" && $NF!="ZN" && $1!="MASTER" && $1!="END"' rec.pdbqt > rec_clean.pdbqt

要注意的是 vina 打分本来就不为金属参数化,剥离是基准测试的合理操作,但真实金属酶项目应改用带金属处理的引擎并在报告中注明。

坑 5:--gpu_batch 要文件列表不是目录。 传目录会静默秒退并抛出"构象不在搜索空间内"的误导性警告;正确写法是 --gpu_batch dir/*.pdbqt。

§6. 基准与加速比

四个体系(同机、scoring=vina、exhaustiveness=8、num_modes=9;3tmn 用清洗受体),wall 时间含格点计算:

体系 Uni-Dock Vina 1.2.7 单核 Vina 1.2.7 十二核 加速比(对单核) mode1 (kcal/mol)
1stp 2.44 s 12.35 s 2.40 s 5.1× -7.35
3ce3 7.10 s 29.86 s 7.45 s 4.2× -11.9
3tmn 1.71 s 8.06 s 1.62 s 4.7× -8.30
7cpa 16.47 s 110.87 s 20.21 s 6.7× -8.09

单配体场景的结论直白:对单核 4--7 倍,对十二核基本打平 ------卡没有喂饱。批量场景立刻改观:100 个 1stp 配体一次提交(--gpu_batch),总耗时 103.7 秒、1.04 秒/配体 (内核时间 102.9 秒),对 Vina 单核的 12.35 秒/配体即 11.9 倍------批量摊销把格点计算与启动开销一次性摊掉。与论文千倍的差距可以拆成三块:V100 对消费级卡的算力差、论文基准的 exhaustiveness 与批量规模更大、以及单任务场景 GPU 根本吃不饱。另外,Uni-Dock 与 Vina CPU 的 mode1 能量逐体系一致(-7.35 对 -7.38、-11.9 对 -11.42),移植正确性的直接证据。

§7. 结论与选型建议

Uni-Dock 的正确打开方式是"单口袋大批量 ":百万级以上库的分层筛选(fast 初筛全库、balance 复筛前 10%、detail 精筛再前 10%),批量越大摊销越好,许可证 Apache 2.0 对商业友好。反过来,十几个配体的零星任务、或者需要金属/特殊原子类型的体系,它在消费级卡上并不占优------后者建议 AutoDock-GPU(配体容忍度高)或专门的金属处理流程。

下一篇进入 Vina 打分家族的 OpenCL 主线:Vina-GPU 系列的版本谱系与移植实录。


系列导航 :专栏全集 gnina系列 ------ 上一篇:AutoDock-GPU 实战测评;下一篇:Vina-GPU 系列实战测评。

更多专栏:

我的专栏

蛋白 / 抗体 / 多肽 / 核酸 分子模拟 / 动力学 / 对接 药物 / 设计 / 案例 AI / Agent / 大模型
开源蛋白结构预测 分子模拟基础 小分子药物设计案例 AI Agent系列
开源蛋白生成方法实践 分子动力学模拟-Amber 蛋白药物设计案例 化学大模型
开源多肽设计模型 分子动力学模拟-Gromacs 多肽药物设计案例 《AI Agent原理与实战》
开源多肽性质预测 分子动力学模拟-OpenMM 开源小分子生成设计 CADD中的机器学习模型
DNA/RNA药物设计 結合自由能 高效计算配置 《MCP 入门实战》
siRNA药物设计模型 UCSF DOCK系列 我胡师兄说药 《AI入门实战2026》
ASO药物设计模型 rDock系列 LeDock系列 gnina系列 《经典机器学习实战》
相关推荐
Blockbuater_drug1 天前
AutoDock-GPU 实战测评:CUDA 编译、四体系基准与版本沿革
分子对接·虚拟筛选·gpu加速·autodock-gpu·cuda编译·numwi·格点对接
Blockbuater_drug7 天前
GPU加速分子对接软件横评:把加速比逐源核对后,再谈选型
分子对接·gpu加速·gnina·autodock-gpu·uni-dock·vina-gpu·diffdock
追风少年ii8 天前
内容补充--辅酶 / 配体分子的 Gaussian RESP 电荷与 GAFF2 参数化
数据分析·空间·分子动力学·单细胞·分子对接
Blockbuater_drug2 个月前
UCSF DOCK 分子对接详细案例(06)- 共价分子对接
分子对接·dock·共价对接·脚本化·covalent
追风少年ii2 个月前
课前准备--3D-QSAR与药物结构优化
数据分析·分子动力学·分子对接·结构生物学
追风少年ii2 个月前
课前准备--分子动力学Gromacs参数的详细介绍与选择(一)
数据分析·分子动力学·分子对接·结构生物学
追风少年ii2 个月前
课前准备--蛋白建模AlphaFold 2与AlphaFold 3
数据分析·分子动力学·分子对接·结构生物学
追风少年ii2 个月前
课前准备--蛋白质PDB文件与PDBQT文件的格式与区别
数据库·数据分析·分子动力学·分子对接
KJ_BioMed4 个月前
深度长文:AlphaFold3+AutoDock Vina高通量虚拟筛选自动化流水线实践
生物医学·虚拟筛选·科研干货·科研神器