1. 高通量分子对接全景
分子对接(Molecular Docking)是计算辅助药物发现中最常用的方法之一:给定一个受体(靶点蛋白)的三维结构和一批候选小分子,对接程序会搜索小分子在结合口袋中的可能姿态,并用打分函数估计其结合亲和力。单靶点对接解决的是"一个分子放进一个口袋,摆成什么样、打多少分"的问题;而高通量分子对接(High-Throughput Docking, HTD)解决的是"几十万到上亿个分子,如何在一个或少数几个靶点上被系统地筛完,并给出可信的排序"的问题。两者在算法内核上并无本质区别,但在工程组织方式上差异巨大——这正是本课程要处理的核心。
从单靶点对接到大规摸虚拟筛选
先看一个典型的单靶点对接流程。以 AutoDock Vina 为例,输入是受体文件(receptor.pdbqt)、配体文件(ligand.pdbqt)和一个配置文件:
receptor = receptor.pdbqt
ligand = ligand.pdbqt
center_x = 12.5
center_y = -3.2
center_z = 24.8
size_x = 22
size_y = 22
size_z = 22
exhaustiveness = 8
num_modes = 9
seed = 42
运行 vina --config config.txt 后,程序输出若干结合模式及其打分(单位 kcal/mol),例如最优模式 -9.4、次优 -8.7。单次运行通常耗时数秒到数分钟,取决于口袋大小、配体可旋转键数目和 exhaustiveness。这个流程在"一个分子"尺度上是完备的:有明确的输入、确定的搜索空间、可复现的随机种子和可解释的输出。
当候选分子从 1 个变成 105~108 个时,问题性质发生变化。假设单个分子平均耗时 30 秒,10 万个分子串行需要约 833 小时(约 35 天);100 万个分子则需要近一年。这就是通量瓶颈:算力总量、单任务耗时、任务数量三者共同决定了整个筛选能否在可接受的时间内完成。通量瓶颈不是靠"换一个更快的打分函数"就能完全解决的,它同时涉及并行化、任务切分、资源分配和失败重试等调度层面的问题。
通量瓶颈的三个来源
第一是单任务计算量。对接的搜索空间随配体可旋转键数呈指数增长,exhaustiveness 提高会线性增加采样次数。第二是任务数量。虚拟筛选库常来自 ZINC、Enamine REAL、ChEMBL 等,规模从十万到数十亿不等,即使每个分子只花 1 秒,总量仍然惊人。第三是资源异构性。实际集群中 CPU 核数、内存、GPU 可用性、节点健康状态各不相同,任务不能简单地平均分配。
因此,高通量对接的工程目标可以概括为:在给定算力预算下,最大化单位时间完成的有效对接数,同时保证结果可追溯、失败可恢复、打分可比较。这里的"有效"很关键——一个因为配体准备失败而返回空结果的任务,虽然"完成"了,但不产生任何筛选价值。
任务调度为什么成为必需
上图的中间层是任务调度器,它不是可有可无的"加速器",而是把"一堆对接任务"变成"一条可管理的流水线"的关键。调度器至少要处理四件事:任务切分(把百万级配体分成可独立执行的小批次)、资源匹配(把任务分配到合适的 CPU/GPU 节点)、状态管理(记录每个任务是等待、运行、成功还是失败)、容错恢复(节点掉线或任务超时后能重新入队)。
一个常见的误区是:只要把任务丢进 Slurm 或 PBS 队列,调度问题就解决了。实际上,通用作业调度器并不理解对接任务的语义。例如,某些配体因为价态异常或立体化学冲突,在准备阶段就会失败;某些分子因为可旋转键过多,单任务耗时是平均值的 10 倍以上,会拖慢整个批次。调度层需要识别这些"长尾任务"并单独处理,否则整体吞吐量会被少数慢任务拉低。
本课程的实战目标
本课程不满足于"跑通一次对接",而是围绕一条可复现的高通量流水线展开。具体目标包括:
- 能够独立完成受体与配体库的标准化准备,理解 pdbqt 转换中质子化、电荷和可旋转键处理对结果的影响;
- 能够把十万级配体库切分为可并行任务,并用调度脚本或工作流引擎(如 Snakemake、Nextflow 或自研 Python 调度器)组织执行;
- 能够监控吞吐量、失败率和单任务耗时分布,定位瓶颈是算力不足、任务粒度过粗还是配体准备异常;
- 能够对输出打分做基本质量控制,包括重复运行一致性、打分分布检查和已知活性分子的富集评估。