5.1.1 分层看生态:一座四层建筑
这些工具的职责既有分工,也有重叠。RDKit 提供分子解析与化学信息学操作;PyG 和 DGL 提供图数据结构与计算接口;DeepChem、Graphium 和 TorchDrug 进一步组织特定任务的模型与训练流程。下图按主要职责分层,便于理解依赖关系,但并不表示每个应用库都必须依次调用所有下层项目。
RDKit 是化学信息学领域广泛使用的开源工具,可用于 SMILES 与 MolBlock 解析、价态检查、分子标准化、描述符计算、SMARTS 匹配和骨架提取。许多分子机器学习流程通过它构建输入图,但具体清洗规则仍由任务决定。第 2 章介绍这些操作;5.1.5 节再说明 datamol 提供的便捷封装。
PyG 与 DGL 主要提供图数据结构和图上的张量计算。对图神经网络(graph neural network, GNN)而言,常用功能包括消息传递(message passing)、变长图批处理,以及图级读出函数(readout)。现成算子可以减少实现工作;需要新运算时,也可以扩展库接口或直接编写张量代码。底层接口影响实现成本,但不构成上层算法表达能力的绝对边界。
DeepChem、Graphium 和 TorchDrug 都提供面向分子任务的应用接口,但支持的任务与抽象范围不同。它们可能封装数据加载、特征化、训练、评估或预训练权重中的若干环节。蛋白质工程、反应预测和材料筛选还有专门工具,选择时应逐项检查任务支持与依赖,不能仅凭所处层级判断。
5.1.2 PyG 与 DGL:薄抽象与厚抽象
薄抽象(thin abstraction)在本节中指较直接地暴露数学运算和张量接口,较少预设完整任务流程。这是比较接口设计的描述,不是某个库所有功能的固定分类。
厚抽象(thick abstraction)在本节中指将图对象、常用计算或任务流程组织为更完整的接口。它可能减少重复代码,也会增加需要理解的约定。两种倾向可以同时出现在同一库中。
PyG 的 MessagePassing 基类允许分别定义消息、聚合和节点更新,再由 propagate 调用沿边传播(Fey & Lenssen, 2019)。它与 3.5 节的消息传递框架相对应。Data 用于存储节点、边和图级属性,Batch 组织多图批次;PyG 也提供数据集、采样和分布式相关工具。因此,可以说其核心消息传递接口便于直接实现公式,但不能把整个库等同于不管理容器或运行流程。
DGL 采用图中心(graph-centric)接口:DGLGraph 存储连接关系,ndata 与 edata 关联节点和边特征,update_all 组合消息函数与归约函数(Wang et al., 2019)。它也提供面向大图的分布式训练(distributed training)工具。后端、分布式组件和平台支持应以选定版本文档为准;这些功能不能仅由“厚抽象”一词推断。
两种库的多图批处理都把输入图组织成一张不连通的大图,并保留各图的归属信息。PyG 的 Batch继承 Data 或 HeteroData,提供 batch 向量,也支持通过 to_data_list 等接口还原单图。dgl.batch返回合并后的图,通过 batch_num_nodes 和 batch_num_edges 记录边界,并可用 dgl.unbatch 拆分。图 5.1-2 比较其接口表示,不能据此把一方描述为“只有张量、没有容器”。
两种批处理都需要正确偏移节点编号、拼接特征并保存图边界。实际选择应结合已有代码、所需算子、数据规模和团队熟悉程度;不能从“拼接”或“簿记”推导哪个库必然适合研究或生产。以下列出可用于比较的需求。
倾向 PyG 的情形
- 已有 PyG 参考实现,或需要在 MessagePassing 接口中定制算子
- 所需算子和数据接口在选定版本中已有实现
- 需要 MoleculeNet 等数据集加载器及相关示例
倾向 DGL 的情形
- 项目已使用 DGLGraph 容器与消息传递接口
- 大图任务可使用 DGL 提供的采样或分布式组件
- 已有 DGL 代码资产,且目标版本支持所需平台
5.1.3 应用层分工:DeepChem 操场,Graphium 工业线
DeepChem 与 Graphium 都封装分子机器学习流程,但常用入口和任务重点不同。以下比较其公开功能,具体适用性仍需通过目标数据上的试运行判断。
DeepChem 提供较多教程、MoleculeNet 数据集入口和模型接口,适合学习从数据到评估的完整流程。本书按 2.8.0 接口展开;运行时应固定版本,并查阅官方发布记录。如果需要定制内部行为,应为数据处理与关键模型输出建立检查,升级后重新验证,而不应假定教程代码能直接跨版本运行。
Graphium由 datamol-io 组织发布,其公开接口包括分子特征化、GNN 结构、预训练模型和基于 PyTorch Lightning 的训练循环。它支持通过配置组织多项化学任务,可结合 3.7 节的多任务学习(multi-task learning)理解。Graphium 与 TorchDrug 的功能存在交集,但这不表示两者有官方继承关系。
3.7 节的 Tox21 示例用 12 个任务头共享表示,是一种多任务结构。更大规模的训练可以增加任务、分子和标签来源,但这些扩展需要分别评估。多保真学习(multi-fidelity learning)通常涉及精度或计算成本不同、且相互关联的信息源;把任意不同性质的量子标签和实验标签放在同一数据集中,并不自动构成有效的多保真模型。
预训练还可以形成供下游任务迁移的基础模型(foundation model)。Sypetkowski 等(2024)研究模型规模、数据量和预训练任务对分子 GNN 的影响,并报告 MolGPS 在所评估的 38 项下游任务中有 26 项超过论文所比较的既有最好结果,见原论文。这一结果支持在相应协议下研究规模效应,不能直接推广为所有任务都应优先采用大模型;从头训练与迁移学习仍应使用相同划分和预算进行比较。
5.1.4 TorchDrug 的历史定位与迁移
本书用 TorchDrug 0.2.1 展示性质预测与分子生成的任务接口。2026 年 9 月核对的官方安装文档声明 Python 3.7–3.10、PyTorch ≥ 1.8.0,没有给出 PyTorch 2.0 上限。文档范围、发行版本与仓库维护状态是不同信息,不能用版本号推断项目已永久停止维护。环境选择见 5.2 节。第 4 章所用算法也有原作者代码,但应逐个核对实现框架与训练设置。
跨库迁移可以复用分子图、消息传递、读出、损失和评估等概念,但实现需要逐项核对。原子编码、边方向、自环、归一化、批处理和默认训练参数的差异都可能改变结果。表 5.1-1 给出功能对应关系,作为迁移检查清单,而非接口可以直接替换的保证。
| TorchDrug(v0.2.1) | PyG 生态 | 迁移要点 |
|---|---|---|
| Molecule / PackedMolecule | Data / Batch | 一分子一张 Data;PackedMolecule 的打包语义对应 Batch 的大图拼接(图 5.1-2) |
| tasks.GCPNGeneration、tasks.AutoregressiveGeneration | GCPN 原作者实现与 GraphAF 原作者实现 | 核对动作空间、特征化、监督目标与微调设置;原作者实现不应统称为 PyG 接口 |
| models.RGCN 等编码器 | torch_geometric.nn 的 RGCNConv 等卷积层 | 核对关系编码、归一化、自环和参数化,不能只对照名称 |
| data.MoleculeDataset 等数据集类 | 自建 Dataset(如 InMemoryDataset) | SMILES 到图的流水线不变,沿用第 3 章的清洗与特征化 |
| metrics 与内置训练循环 | PyTorch 原生循环 / Lightning | 训练骨架显式化,环境与复现见 5.2 节 |
以批处理为例,TorchDrug 的 Molecule.pack 返回 PackedMolecule,PyG 的 DataLoader 可以返回 Batch。两者都提供合并图和归属信息;以下片段展示接口形态,假定 smiles 和相应模型已经定义,完整训练流程还需补充标签、损失与优化器。
# TorchDrug 0.2.1:分子打包与图编码器接口示例 from torchdrug import data, models mols = [data.Molecule.from_smiles(text) for text in smiles] batch = data.Molecule.pack(mols) # 返回 PackedMolecule encoder = models.GIN(batch.node_feature.shape[-1], hidden_dims=[64, 64]) output = encoder(batch, batch.node_feature.float()) graph_feature = output["graph_feature"] # 任务预测还需读出后的预测头
# PyG:同一概念的形态——Data 单图,Batch 拼接 graphs = [smiles_to_data(s) for s in smiles] # 每个分子一张 Data loader = DataLoader(graphs, batch_size=32, shuffle=True) batch = next(iter(loader)) # collate 时拼成大图 pred = model(batch.x, batch.edge_index, batch.batch) # batch 向量标记归属
TorchDrug与 PyG 都保留批次中的图边界。其模型调用约定不同:TorchDrug 的许多编码器接收图对象及节点输入,PyG 的自定义模型则可以接收节点张量、边索引和图归属。迁移除分子转换函数外,还可能涉及边特征、模型结构、池化、损失及评估,不能只改一个函数便假定数值等价。
5.1.5 数据周边:datamol 与 MoleculeNet 数据集
datamol 对 RDKit 的常用操作提供便捷封装,可用于分子标准化、片段处理和描述符计算。选择这类高层函数时仍需检查默认参数,因为去盐、互变异构体处理和立体化学保留方式会改变输入。Graphium 与 datamol 同在 datamol-io 组织,但是否采用相同预处理流程应由任务和复现要求决定。
数据集方面,MoleculeNet 家族(Wu et al., 2018)——ESOL、FreeSolv、Lipophilicity、BBBP、Tox21、SIDER、HIV、BACE——是分子性质预测的通用货币。在 PyG 生态,torch_geometric.datasets.MoleculeNet 直接提供加载接口,数据文件历史上经 DeepChem 渠道分发。换言之,三个库在同一批数据上汇合,第 3 层的应用库与第 2 层的算子库在数据通道上本就互通。
一句提醒:同一数据集在不同库里的默认划分、特征化与单位口径可能不同,跨库比较数字时要回到原始文献核对协议。第 3 章反复强调的评估纪律——划分方式先于模型——在生态问题上原样成立。
5.1.6 选库原则:问题定义先于工具
选库决策,自上而下过一遍:
- 先固定问题定义:数据、指标、划分协议。它们跨库不变,先于任何工具存在。
- 学概念、复现论文:可考虑 RDKit 构建数据、PyG 实现图算子,并核对公式与默认行为。
- 学流程、要现成教程与数据:可从 DeepChem 的教程和数据接口开始,预先验证所需环境。
- 做工业、看长期:比较任务支持、维护记录、许可、测试与迁移成本,并用原型评估候选工具。
- 同时记录维护状态与替代方案,明确迁移时可复用的数据、模型定义和验证用例。
维护状态影响持续使用的成本。评估一个库时,可检查发布与提交记录、问题响应、维护主体以及依赖兼容范围,并记录核对日期。对需要复现的实验,应保存具体代码版本与环境;对持续开发的项目,还应估计更新、测试和迁移的工作量。
熟悉一个框架有助于提高实现效率,但也可能形成框架忠诚度(framework loyalty),使工具约定被误认为方法要求。本书以 RDKit、DeepChem 和 TorchDrug 的实例解释原理,最后讨论生态与迁移,是为了将概念、数据协议和实现细节区分开来。5.3 节将这些原则整理为可执行的学习与复现检查。
习题 5.1-1
为下列三个场景各选一条技术栈(从 RDKit、datamol、PyG、DGL、DeepChem、Graphium 中取舍),指出每条栈的主要成本(学习成本、维护成本、风险),并判断哪一环最容易在两年后失效。
(a)研究生复现一篇 2025 年发表的 GNN 溶解度论文,并改进其读出层;(b)药企团队建多任务 ADMET 预测服务,维护期五年;(c)本科公选课的两周分子机器学习单元,学生无化学背景。
参考解答(a)可考虑 RDKit + PyG,在复用论文代码与自建模型之间比较工作量。需要核对特征化、划分、读出和结果是否可复现;论文被新方法超过并不使复现失去价值。(b)可比较 Graphium + datamol 与 PyG + Lightning 等方案,通过原型测量任务支持、吞吐、维护成本与升级风险。预训练资产是否有益要由独立验证决定,不能预言哪一层必然先失效。(c)可从 DeepChem 教程和 MoleculeNet 子集入手,预先固定环境,按学生基础缩小任务范围。这些都是候选方案;相同问题的工具比较应先固定数据、指标和评估协议。
习题 5.1-2
把第 3 章的预测流水线逐站映射到 PyG 生态的组件,并回答:哪一站最容易引入口径不一致?
参考解答| 流水线步骤(第 3 章) | PyG 侧组件 |
|---|---|
| SMILES 列表读入 | 自写函数:读 CSV / SDF(RDKit 或 pandas) |
| 解析与清洗(去盐、规范化) | RDKit(或 datamol 流水线) |
| 分子图构造 | 自写 smiles_to_data:Data 携带 x、edge_index、y |
| GNN 主干(消息传递 + 读出) | torch_geometric.nn 卷积层堆叠 + 全局读出(如 pooling) |
| 多任务头与损失 | 线性层 × 任务数 + 掩码 BCE(3.7 节) |
| AUC 评估 | roc_auc_score(按任务逐个报告) |
最容易出口径问题的是“解析与清洗”一站:原子特征的编码表、隐式氢的处理、是否规范化互变异构体,不同实现各有默认值,悄悄改变图的节点数与特征维度。对策与第 3 章相同:把编码规则写死在数据集文档里,跨库比较时先对齐图的构造协议,再谈模型。
习题 5.1-3
论述题(400 字左右):框架忠诚度有何利弊?请至少结合本书范围内的一个实例(如复现 TorchDrug 0.2.1 示例时的版本选择),并给出你自己的一条应对原则。
参考解答(要点)熟悉框架的益处包括减少实现时间、复用调试经验和获得社区支持;局限包括依赖特定接口、忽略其他实现选择,以及升级或迁移时的额外工作。以 TorchDrug 0.2.1 为例,可同时记录概念定义与对应接口,并保存能够重建的环境。尝试另一种实现时,应对齐数据和算子语义,再比较输出,以判断哪些经验可以迁移。
关键术语
- 薄抽象 (thin abstraction)
- 较直接暴露数学运算与张量接口的设计取向;不代表一个库完全不组织流程。
- 厚抽象 (thick abstraction)
- 在接口中组织较完整的图对象、运算或任务流程的设计取向。
- 消息传递 (message passing)
- 图上的一次计算:沿边构造消息、按节点聚合、再更新表示。
- 大图拼接 (flat batching)
- PyG 的批处理路线:N 张图连成一张不连通大图,通过 Batch 的 batch 向量等信息保存归属。
- 分块图 (bookkept batching)
- DGL 的批处理路线:容器保存每张子图的节点数与边数簿记,图身份可查可还原。
- 多任务学习 (multi-task learning)
- 多个标签任务共享同一主干、任务头分立的训练形态(3.7 节)。
- 多保真学习 (multi-fidelity learning)
- 联合利用精度或成本不同且相互关联的信息源,收益需通过验证评估。
- 图基础模型 (graph foundation model)
- 在大规模多任务分子数据上预训练、可迁移到众多下游任务的图网络,如 MolGPS。
- 分布式训练 (distributed training)
- 通过多个计算设备协同完成训练,需要处理数据划分与参数通信。
- 框架忠诚度 (framework loyalty)
- 因熟悉某一工具而过度依赖其约定的倾向,可能影响方法选择。
参考文献与延伸阅读
- Fey M, Lenssen JE. 2019. Fast graph representation learning with PyTorch Geometric. arXiv:1903.02428.
- Wang M, Zheng D, Ye Z, et al. 2019. Deep graph library: a graph-centric, highly-performant package for graph neural networks. arXiv:1909.01315.
- Zhu Z, Shi C, Zhang Z, et al. 2022. TorchDrug: a powerful and flexible machine learning platform for drug discovery. arXiv:2202.08320.
- Sypetkowski M, Wenkel F, Poursafaei F, et al. 2024. On the scalability of GNNs for molecular graphs. Advances in Neural Information Processing Systems 37 (NeurIPS 2024; arXiv:2404.11568).
- Wu Z, Ramsundar B, Feinberg EN, et al. 2018. MoleculeNet: a benchmark for molecular machine learning. Chemical Science 9:513–530.
- Landrum G, et al. 2006–. RDKit: open-source cheminformatics. 开源软件(2026.03 系列,2026 年 8 月核实).
- PyTorch Geometric 官方文档. pytorch-geometric.readthedocs.io(2026 年 8 月核实).
- Valence Labs / datamol-io. Graphium 与 datamol 官方文档. graphium-docs.datamol.io、datamol.io(2026 年 8 月核实).