ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ADMET 预测从图神经网络到 DeepSeek RAG 解释:CPU 全流程实测跑通

ADMET 预测从图神经网络到 DeepSeek RAG 解释:CPU 全流程实测跑通 摘要本文完整实测开源仓库 pritampanda15/ADMET-Prediction-System-Graph-Neural-Networks-with-RAG在 Windows CPU 与 Linux GPU 双平台跑通基于图神经网络与 RAG 的 ADMET 预测全链路。系统覆盖 Caco-2、hERG、PPBR 等 8 项核心性质实测 Caco2_Wang 回归测试集 MAE 0.39-0.46并验证了 GCN/GAT/MPNN 三架构切换、DeepSeek 直连 RAG 解释、hERG 分类与 Streamlit UI。文章给出双平台安装命令、13 条踩坑修复并剖析了该 RAG 方案相对预测值直接丢给 LLM的 4 个设计优势以及按 P0/P1/P2 排序的 9 条待改进方向适合作为教学原型或二次开发起点。关键字ADMET 预测图神经网络RAG 解释TDC 数据集PyTorch GeometricDeepSeek适用域不确定性量化目录§0. 相关教程与核心文献§1. 为什么这个仓库值得一看8 项性质一站搞定但有 3 个隐藏门槛§2. 环境准备conda GPU 双轨§3. 跑通从下载到推理双平台实测§4. 代码层最值得关注的两件事§5. 13 条实测踩坑双平台验证§6. 和成熟方案比它处于什么位置§0. 相关教程与核心文献资源链接与本文关系项目仓库本文主角github.com/pritampanda15/ADMET-Prediction-System-Graph-Neural-Networks-with-RAG本文逐文件实读 实跑TDC 数据集平台tdcommons.ai全部训练数据的官方源PyTorch Geometric 官方文档pytorch-geometric.readthedocs.ioGNN 层 API 参考TDC 论文数据基座Huang K et al.Therapeutics Data Commons. NeurIPS 2021. arXiv:2102.0954822 个 ADMET 基准的官方出处ChromaDB向量库docs.trychroma.comRAG 知识库持久化RDKit SMILES 处理rdkit.org/docs分子→图的核心依赖§1. 为什么这个仓库值得一看8 项性质一站搞定但有 3 个隐藏门槛ADMET 早期筛选需要至少 8 个性质同时给出判断Caco-2、HIA、BBB、PPBR、CYP 抑制2D6/3A4/2C9、半衰期、hERG、AMES。这套系统把这 8 项 几个延伸VDss、CYP 全部 3 种、清除率、DILI、LD50一起打包并自带 PyG 图神经网络 ChromaDB RAG Streamlit UI是个人开发者一站式模板。实测仓库代码commitmain2025-12-07 创建 Windows CPU 全流程跑通后3 个隐藏门槛你必须知道必须自备 LLM Key。src/rag/llm_explainer.py默认接 OpenAI没有 Key 则raise ValueErrorRAG 解释直接挂。本文实测把它改成 DeepSeek 直连https://api.deepseek.com/v1OpenAI 兼容接口改 3 处即可见 §4。预训练模型 checkpoint 的真实情况双平台实测修正。仓库里models/best_model.pt1.19 MB是作者 2025-12-08 提交的真实 checkpointgit clone 后即可直接推理无需先训练——Linux 复测直接加载它对阿司匹林给出 -4.4342 的预测。想复现自己的模型再跑训练CPU 约 25 分钟 / GPU 1 分钟内。Windows 上 PyG 和 PyTDC 各有一个安装坑。conda 的pygchannel 没有 win-64 包必须 pip 装PyTDC 的tiledbsoma依赖要 C 编译必须--no-deps绕开。详见 §5 踩坑表。Linux 上 PyG 可直接 pip 装无需 conda channel但有自己的坑~/.local用户级包污染同样见 §5。绕开门槛的折中只看分子描述符MW/LogP/TPSA/氢键供受体等和 GNN 架构本身——这两块不依赖 LLM Key 也不依赖 checkpoint。§2. 环境准备conda GPU 双轨这套系统依赖 PyTorch GeometricPyG它的二进制 wheel 在国内下载源常常不全。强烈建议 conda 装 PyTorch自带 CUDA再 pip 装 PyG——全部走 pip 会触发 PyG 源码编译要gccnvccpybind11一整套。2.1 GPU 版消费级 GPUCUDA 11.8/12.x 都行conda create -n admet-gnn python3.10 -y conda activate admet-gnn conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia -y pip install torch-geometric # 注意pyg conda channel 无 win-64 包必须 pip conda install rdkit -c conda-forge -y pip install PyTDC --no-deps pip install setuptools\81 scikit-learn huggingface_hub fuzzywuzzy python-Levenshtein pip install chromadb sentence-transformers openai langchain langchain-openai \ mlflow streamlit pypdf python-dotenv pyyaml tqdm git clone https://github.com/pritampanda15/ADMET-Prediction-System-Graph-Neural-Networks-with-RAG.git cd ADMET-Prediction-System-Graph-Neural-Networks-with-RAGWindows 实测注意本文全程 Windows 11 CPU 实跑PyG 用 pip 不用 condapygchannel 的pytorch-geometric无 win-64 包PackagesNotFoundInChannelsError。pip 装的 2.8.0 纯 Python 核心够跑 GCN/GAT/MPNNtorch-scatter等加速扩展可不装。PyTDC 必须--no-deps它的gget依赖链里tiledbsoma要 C 编译在 Windows 必失败。--no-deps后手动补scikit-learn huggingface_hub fuzzywuzzy python-Levenshtein即可——TDC 的ADME/Tox数据加载不碰 gget。setuptools81新版 setuptools 84 移除了pkg_resourcesPyTDC 的metadata.py直接ModuleNotFoundError。CPU 版把第 2 步换成conda install pytorch torchvision torchaudio cpuonly -c pytorch -y。实测 Caco2_Wang910 样本× GCN × 100 epoch 在 CPU 上约 25 分钟。§3. 跑通从下载到推理双平台实测第 1 步 下载数据python scripts/train_model.py --download-only拉 TDC 的 Caco2_Wang。实测 910 条分子TDC 当前版本早期文档写 9062026-09 复核为 910log Papp 单位 cm/s。数据划分是随机 splitdata_loader.py用sklearn.train_test_split分类任务才 stratify——注意 Linux 复测读源码后确认不是 scaffold split测试集与训练集可能共享骨架指标天然偏乐观与 TDC leaderboardscaffold split不可直接对比。第 2 步 看分子特征不跑训练5 秒验证from src.data import MolecularFeaturizer featurizer MolecularFeaturizer() # 原子 167 维 one-hot原子序数 1-118 手性 度 形式电荷 H 数 杂化 芳香 环内实测 atom_dim167 # 键 14 维 one-hot键型 立体 共轭 环内 graph featurizer.smiles_to_graph(CC(O)OC1CCCCC1C(O)O) print(graph) # Data(x[13, 167], edge_index[2, 26], edge_attr[26, 14]) print(featurizer.get_molecular_descriptors(CC(O)OC1CCCCC1C(O)O)) # {molecular_weight: 180.16, logp: 1.31, tpsa: 63.60, # num_h_donors: 1, num_h_acceptors: 3, num_rotatable_bonds: 2, ...} ← 双平台实测一致特征设计参考了 DeepChem 的 ConvMolFeaturizer——RDKit PyG 标准的原子 one-hot 键 one-hot 全局池化组合。第 3 步 训练本文实测数字python scripts/train_model.py --config config/config.yaml默认 GCN × 3 层 × 128 隐藏维 × dropout 0.2 × lr 0.001 × epoch 100 early stopping 15。双平台实测结果Caco2_WangGCN指标Windows CPU2026-09-29Linux GPU 复测2026-09-30消费级 GPU / torch 2.14cu130数据划分637 / 91 / 182637 / 91 / 182一致seed 42模型参数96,64196,641一致最优 checkpointepoch 92epoch 22early stop 38验证集 RMSE / MAE / R²0.5265 / 0.4033 / 0.6560.6054 / 0.4683 / 0.5454测试集 RMSE / MAE / R²0.5176 / 0.3911 / 0.57820.5896 / 0.4554 / 0.4528训练耗时~25 分钟~1 分钟两平台指标同量级但不可逐位复现随机 split torch/PyG 版本不同 GPU/CPU 浮点序不同属正常。再提醒一次因为代码是随机 split 而非 scaffold split这里的 MAE 与 TDC leaderboard 上 D-MPNN 的 0.234scaffold split没有直接可比性——方向性结论GCN baseline 弱于 SOTA成立倍数关系仅供粗略参考。跑完models/best_model.pt就有了再跑推理python scripts/predict.py --smiles CC(O)OC1CCCCC1C(O)O --property Caco2_Wang --explain实测推理输出阿司匹林Property: Caco2_Wang Prediction: -4.0946 Molecular Descriptors: MW: 180.2 Da / LogP: 1.31 / TPSA: 63.6 A^2 H-Donors: 1 / H-Acceptors: 3 / Rotatable Bonds: 2 Explanation: ← DeepSeek RAG 生成 # Caco-2 Permeability Prediction: -4.0946 log Papp (cm/s) ## Interpretation The predicted Caco-2 permeability of -4.0946 log Papp (cm/s) is **above the good-permeability threshold of -5.15**, indicating good intestinal epithelial permeability... ## Molecular Feature Analysis | Feature | Value | Relevance | | Molecular Weight | 180.2 Da | Well below the 500 Da threshold... | ## Caveats and Limitations 1. Passive vs. active transport (P-gp efflux not captured)... 2. Ionization state at intestinal pH...RAG 解释引用了知识库阈值-5.15并给出分子特征对照表 4 条 Caveats——不是空话是有证据链的解读。批量 CSV 推理实测2 分子python scripts/predict.py --input mols.csv --output preds.csv --property Caco2_Wang分子Windows 预测Linux GPU 复测自训模型Linux仓库自带 checkpoint判读阿司匹林-4.0946-4.5987-4.4342均 -5.15渗透好与单分子推理一致普萘洛尔-4.6166-5.0249—均 -5.15渗透好与临床口服吸收良好一致三个模型对同一分子的预测在 0.5 log 单位内浮动判读方向完全一致——这正是 §4.4 第 5 条无不确定性量化要解决的问题。分类任务实测hERG 数据集Tox 类双平台一致655 样本阳性 451 / 阴性 204划分 458/66/131featurize 20/20 全部成功——ADMETDataLoader的Tox()分类链路与 ADME 回归共用同一套图特征流程无需改代码。Streamlit UI 启动实测streamlit run app/main.py --server.headless true --server.port 8611→HTTP 200 /_stcore/health 返回 ok双平台一致UI 正常服务--server.headless true适合无桌面环境/远程机器。Streamlit UIstreamlit run app/main.py浏览器localhost:8501。没训练 没知识库文档时UI 会报 “checkpoint not found” 和 “knowledge base empty”——这是预期行为不算 bug。§4. 代码层最值得关注的两件事4.1 GNN 三架构切换src/models/gnn_model.py的GNNPredictor用工厂函数create_model(config)切换 GCN/GAT/MPNN架构消息传递何时用GCN加权邻接平均Kipf Welling 2017基准线速度最快GAT多头注意力加权Veličković et al. 2018想看注意力权重做可解释性MPNN边特征通过 MLP 映射到消息函数键信息重要时如立体化学切换改config.yaml一行architecture: GAT。GCN/GAT 已实测能跑通MPNN 在 1000 样本的小数据集易过拟合Caco2_Wang 建议先用 GCN 跑 baseline。4.2 RAG 链路 LLM 换 DeepSeek 直连实测改法RAG 不是开箱即用——scripts/build_knowledge_base.py建 ChromaDB 有两种方式--seed-defaults一键导入 7 篇内置 ADMET 种子文档Caco2/HIA/BBB/PPBR/CYP/hERG/AMES含阈值和参考文献或--docs-path data/knowledge_base/导入真实文档支持 .pdf/.txt/.md。两种本文双平台都跑seed 7 篇 5 篇真实文档DailyMed FDA 标签 2 篇——aspirin / metoprololPubChem 化合物摘要 3 篇——aspirin / propranolol / terfenadine。入库 chunk 数两平台不同Windows 轮 42 chunksLinux 复测轮82 chunksseed 7 真实文档 75——差异来自 DailyMed 的 metoprolol SPL 标签随版本更新变厚15KB → 43KBchunk 从 ~15 涨到 62FDA 标签是活文档复测拿到更全的版本属正常现象。RAG 解释实测引用了知识库原句“High lipophilicity (LogP) and low polar surface area (TPSA 140 Ų) favor absorption”并给出分子特征对照表。真实文档抓取源官方 API 直连无需 Keydailymed.nlm.nih.gov/dailymed/services/v2/spls.json?drug_namename拿 FDA 标签 SPL XMLpubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/name/description/JSON拿化合物摘要。把 OpenAI 换成 DeepSeek 直连只需改 3 处OpenAI 兼容接口代码结构不变# src/rag/llm_explainer.py —— 改 __init__ 里的 client 构造 api_key os.getenv(DEEPSEEK_API_KEY) self.client OpenAI( api_keyapi_key, base_urlos.getenv(DEEPSEEK_BASE_URL, https://api.deepseek.com/v1), http_clienthttp_client ) # 同文件默认参数: llm_model: str deepseek-chat # config/config.yaml: llm_model: deepseek-chatembedding 默认all-MiniLM-L6-v2HF 直连下载正常。LLM 也可以换成deepseek-v4-proreasoning 模型解释更深入但更慢或本地 qwen3.5 走 Ollama全离线。4.3 这套 RAG 做法真在哪对比预测值直接丢给 LLM很多所谓AI 解释就是把预测数字丢给 LLM 说为什么——那是无证据链的编造。这套的做法有 4 个实打实的设计优势设计这套的做法naive 做法的毛病预测与解释解耦GNN 只出数字RAG 只讲证据换模型不动解释层换 LLM 不重训解释和模型纠缠换一个全重来解释可溯源阈值判断-5.15 / TPSA140 / MW500来自检索的文档 chunkLLM 凭参数记忆编数字看着像模像样实则幻觉描述符注入 prompt预测值 MW/LogP/TPSA 等 10 个分子描述符一起给LLM 能做特征归因只给预测值解释只能复述数字硬阈值 软检索双层PROPERTY_DESCRIPTIONS硬编码兜底基础判读检索补充机制细节全靠检索——检索空了就瞎说外加 system prompt 明确context 不支持就明说不知道——防幻觉约束写在源头。实测效果见 §3 推理输出解释引用了知识库原句High lipophilicity (LogP) and low polar surface area (TPSA 140 Ų) favor absorption并对照分子特征表不是空话。4.4 待改进6 个方向按影响排序站在药化/CADD 实战视角这套系统离能进决策还有明确差距P0 — 影响解释可信度低成本可修检索没有按 property 过滤问 Caco-2 时 top-5 可能把 hERG/AMES 的 chunk 召回来解释串台。vector_store.search()本来就有filter_metadata参数调用时传{property: property_name}即可一行代码的修复。引用无出处解释引用了知识库原句但不标来源文档。应该在检索结果里带sourcemetadata 注入 prompt要求 LLM 输出[source: dailymed_aspirin_label]这类标注——没有出处的引用在内部评审里过不了。无 applicability domain 警告训练集化学空间外的分子预测不可信。应该在推理时算 Tanimoto 相似度 vs 训练集最大值 0.3 时解释里强制加该分子超出模型适用域预测仅供参考——实测 T4 的 Caveats 里 LLM 自己提了一句但这应该系统化不能指望模型自觉。P1 — 影响预测质量GCN baseline 偏弱 split 不可比本仓库测试 MAE 0.39-0.46随机 splitTDC 榜 D-MPNN 的 0.234 是 scaffold split——不能直接比倍数但方向明确随机 split 已经偏乐观还落后 SOTA真实 scaffold split 下差距只会更大。换 GAT代码已支持或上 D-MPNN 是最直接的提升同时建议把data_loader.split()换成 TDC 自带的get_split(methodscaffold)。无不确定性量化预测值没有误差棒。5-seed ensemble 或 MC dropout 给出-4.09 ± 0.35解释里才有多可信的判读依据——PCC 决策里误差棒比点估计重要。多性质无联合判读8 个性质独立预测独立解释矛盾信号Caco-2 吸收好 hERG 风险高没人汇总。应该一次推理出全性质面板 一个综合判读 prompt。P2 — 工程与维护seed 文档硬编码在build_knowledge_base.py的 Python 字面量里更新知识库要改代码——挪到 YAML/JSON 数据文件。chunk 固定 1000 字符 / 200 overlap阈值表格容易被切断——按标题/表格边界切分。解释不可复现temperature 0.3——正式报告输出要 temperature0。这些改完它就从教学模板进化成内部筛选工具——但要进 PCC 决策还是得配上 FEP/实验验证。§5. 13 条实测踩坑双平台验证#平台现象根因修法1WinPackagesNotFoundInChannelsError: pytorch-geometriccondapygchannel 无 win-64 包pip install torch-geometric2.8.0 纯 Python 核心GCN/GAT 够用2WinFailed to build wheel for tiledbsomaPyTDC 装失败PyTDC→gget 依赖链要 C 编译 tiledbsomapip install PyTDC --no-deps 手动补scikit-learn huggingface_hub fuzzywuzzy python-Levenshtein3双ModuleNotFoundError: No module named pkg_resourcessetuptools 84 移除了 pkg_resourcespip install setuptools814双RDKit: SMILES Parse Error静默跳过featurize_dataset()失败 SMILES 只failed 1不抛异常训练完后failed 0要查输入 SMILES 是否有非典型字符带电离子、多聚体5双RAG 解释每次返回空字符串ChromaDB 集合里没文档python scripts/build_knowledge_base.py --seed-defaults内置 7 篇种子文档6Win建库/推理卡住几分钟无输出模型明明已缓存HuggingFace hub 在线检查被 SSL 掐断每文件重试 5×8s 拖死流程export HF_HUB_OFFLINE1模型已缓存时直接离线模式Linux 国内网络则用HF_ENDPOINThttps://hf-mirror.com7WinFileNotFoundError: /tmp/test_mols.csvbash 明明写了文件MSYS 的/tmp与 Windows Python 的/tmp不是同一目录给 Python 的路径一律用D:/...原生 Windows 路径8双MLflow UI 找不到 runtracking_uri默认相对路径./mlrunscd 目录不对就找不到mlflow ui --backend-store-uri 绝对路径/mlruns --port 50009双Streamlit 启动报Port 8599 is not available端口被占/系统保留换端口--server.port 8611无桌面环境加--server.headless true10双Streamlit DuplicateElementKey同一 property 在 UI 里被多选临时删 PROPERTY_INFO 里多余项11LinuxCUDA error: invalid device ordinal训练一启动就崩train_model.py的--gpu参数默认 1单卡机器上cuda:1越界python scripts/train_model.py --config config/config.yaml --gpu 012LinuxPyG / sentence-transformers 导入时AttributeError: _ARRAY_API not found~/.local/lib/python3.10/site-packages里装过用户级 numpy-1.x 编译包pyarrow/datasets优先于 env 内的 numpy 2.x 被加载运行时加env PYTHONNOUSERSITE1屏蔽用户级 site-packages根治是pip install --ignore-installed把缺的包补装进 env13Linux明明装过 xxhash/sympy/tqdm/fsspec 却ModuleNotFoundErrorpip 见~/.local已有同名包就跳过但PYTHONNOUSERSITE1又屏蔽了它们pip install --ignore-installed xxhash sympy networkx flask tqdm requests fsspec regex强制装进 env§6. 和成熟方案比它处于什么位置维度本仓库ADMETLab 3.0TDC ChempropSwissADME性质数8 项21 项22 项ADMET_Group7 项模型架构GCN/GAT/MPNN自选多任务 DNN任意D-MPNN 等多元线性 / RF解释能力RAG DeepSeek实测通SHAP 注意力热图无无部署难度单仓 git clone在线 Web需自配在线 Web上手成本中要装 20 依赖低中极低离线运行部分支持换本地 LLM不支持完全支持不支持定位差异本仓库不是工业级 ADMET 平台——它是教学原型一体化模板适合学 GNN 想拿真实数据练手 / 给客户演示AI 辅助早期筛选的可行性 / 想魔改 GNN 架构但不想从零写 dataloader。不适合生产环境的成药性评估决策——那种场景请用 ADMETLab 3.0 或 Schrodinger ADMET Predictor。参考来源仓库pritampanda15/ADMET-Prediction-System-Graph-Neural-Networks-with-RAGcommitmain2025-12-07 创建17⭐ 3 fork许可证 MIT实测gh api查询本文实测环境双平台① Windows 11 CPU无独立 GPU conda 26.7.2 PyTorch 2.5.1 cpuonly torch-geometric 2.8.0 PyTDC 1.1.15 DeepSeekdeepseek-chat直连2026-09-29 全流程跑通日志存档② 复测 Ubuntu 22.04 消费级 GPURTX 3060 conda PyTorch 2.14.0cu130 torch-geometric 2.8.0.post1 PyTDC 1.1.15 DeepSeekdeepseek-chat直连2026-09-30 全链路复跑训练 GPU ~1 分钟 / 单分子 RAG 解释 / 批量 CSV / hERG 分类 / Streamlit UI HTTP 200TDC 论文Huang K, Fu T, Gao W, Zhao Y, Roohani Y, Leskovec J, Coley C W, Xiao C, Sun J, Zitnik M.Therapeutics Data Commons: Machine Learning Datasets and Tasks for Drug Discovery and Development. NeurIPS 2021. arXiv:2102.09548v2TDC ADMET 基准22 个数据集Caco2_Wang 实测 910 条回归 / hERG 实测 655 条分类阳性 451 / 阴性 204/ PPBR_AZ 1797 条回归tdcommons.ai/benchmark/admet_group 实测GCN / GAT / MPNN 三篇原始论文Kipf Welling 2017 (ICLR) / Veličković et al. 2018 (ICLR) / Gilmer et al. 2017 (ICML)更多专栏蛋白 / 多肽分子模拟 / 动力学分子对接 / CADD / 工具其他开源蛋白结构推理预测分子模拟基础UCSF DOCK系列agent智能体系列开源蛋白生成方法实践分子动力学模拟-AmberrDock系列化学大模型介绍2025蛋白药物设计-原理与案例剖析分子动力学模拟-GromacsLeDock系列我胡师兄说药开源多肽设计模型和方法实践結合自由能CADD中的机器学习模型siRNA药物设计模型开源多肽性质预测高效计算基本配置小分子药物设计-原理与案例剖析ASO药物设计模型多肽药物设计-原理与案例剖析作用于DNA/RNA的药物设计实践开源小分子生成和设计实践开源药代动力学模拟软件
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进