第三章 基础工具安装与环境配置
做AI药物发现,第一步不是写模型,是把工具链搭稳。相信我,这一步省事,后面全是坑。
我们这个管线涉及四个核心工具:RDKit(化学信息学)、OpenBabel(格式转换)、PyTorch/TensorFlow(深度学习框架)、DGL(图神经网络库)。你想想看,每个工具都有自己的依赖、版本号、甚至奇葩的隐形冲突。我见过不少团队在安装上耗一周,最后发现是conda和pip混用导致的。
3.1 环境管理:Conda还是Docker?
我先说结论:个人开发用Conda,团队部署用Docker。我自己习惯用Miniconda,不装Anaconda全家桶,省空间、省心。
先装Conda环境:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
3.2 RDKit:化学信息学的心脏
RDKit在药物发现圈的地位,相当于PyTorch在深度学习圈。分子读取、指纹计算、子结构匹配、化学反应处理……几乎啥都能干。
我个人建议用conda安装RDKit,因为pip版本经常缺编译好的二进制包。我第一次用pip装RDKit,结果等了半小时编译,最后报了个g++版本不兼容的错误——嗯,从那以后我再也不敢用pip装了。
conda create -n drugai python=3.9
conda activate drugai
conda install -c conda-forge rdkit
验证安装:
python -c "from rdkit import Chem; print(Chem.MolFromSmiles('CCO').GetNumAtoms())"
输出3,说明RDKit能正常读取乙醇分子。这个测试虽然简单,但我每次在新环境都会跑一遍,省得后面调半天发现是环境问题。
3.3 OpenBabel:格式转换的瑞士军刀
OpenBabel主要干两件事:一是格式转换(SDF转SMILES、PDB转MOL2等),二是力场分配和构象生成。说实话,它的化学处理能力不如RDKit,但格式兼容性是真广——300多种化学文件格式,你想想看。
我习惯用conda装OpenBabel。注意,OpenBabel的conda包有时候和PyTorch的numpy版本冲突,所以装完立刻检查下numpy版本。
conda install -c conda-forge openbabel
obabel --version
简单测试格式转换:
obabel -:"CCO" -O ethanol.sdf --gen3d
这条命令会从SMILES生成一个SDF文件。我经常用这个功能做小分子的初始构象。
3.4 PyTorch vs TensorFlow:怎么选?
这个问题我经常被问到。我的答案是:做药化、分子生成、图神经网络,优先PyTorch。原因有三:
- PyTorch的动态图机制更灵活,适合做分子图这种不规则结构
- DGL(图神经网络库)对PyTorch的生态支持最好
- 学术界80%的分子生成模型都用PyTorch实现,复现方便
如果你团队有现成的TensorFlow代码,或者正在做超大规模分子筛选(需要TensorFlow Serving),那就继续用TF。我个人在管线里只推荐PyTorch。
安装PyTorch(以CUDA 11.8为例):
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
如果你用的是老显卡(比如GTX 1080 Ti),可能需要回退到CUDA 11.3。说实话,多卡并行的时候CUDA版本兼容性问题最让人头疼,我建议用Docker镜像来固定CUDA版本。
3.5 DGL:图神经网络的基石
DGL(Deep Graph Library)是药物分子图建模的利器。它能将分子转化成图结构——原子是节点,化学键是边,然后直接扔进GCN、GAT、MPNN这些模型里。
安装DGL要注意CPU/GPU版本选择。我建议直接用conda安装,它会自动匹配你当前的CUDA版本:
conda install -c dglteam dgl-cuda11.8
# 如果你用的是CPU版本
conda install -c dglteam dgl
验证安装:
python -c "import dgl; print(dgl.__version__);
from dgl.data import GINDataset;
dataset = GINDataset(name='MUTAG', self_loop=True);
print('Number of graphs:', len(dataset))"
3.6 工具链版本兼容性速查表
| 工具 | 推荐版本 | Python兼容 | CUDA兼容 | 安装方式 |
|---|---|---|---|---|
| RDKit | 2024.03 | 3.8 – 3.12 | N/A | conda-forge |
| OpenBabel | 3.1.1 | 3.6 – 3.11 | N/A | conda-forge |
| PyTorch | 2.2.x | 3.8 – 3.11 | 11.8 / 12.1 | pytorch channel |
| DGL | 2.3 + | 3.8 – 3.11 | 11.8 / 12.1 | dglteam channel |
这张表我每次重新搭环境都会看一眼。尤其是DGL和CUDA的对应关系,漏了就等于返工。
3.7 完整环境的安装脚本
为了让你少走弯路,我贴一份我项目常用的安装脚本,直接从零搭到可用:
conda create -n drugai python=3.9 -y
conda activate drugai
# RDKit & OpenBabel
conda install -c conda-forge rdkit openbabel -y
# PyTorch 2.2 + CUDA 11.8
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia -y
# DGL
conda install -c dglteam dgl-cuda11.8 -y
# 辅助工具
pip install matplotlib seaborn pandas numpy scikit-learn
# 验证
python -c "
import rdkit, openbabel, torch, dgl
print('RDKit:', rdkit.__version__)
print('PyTorch:', torch.__version__)
print('DGL:', dgl.__version__)
print('CUDA可用:', torch.cuda.is_available())
"
这张图我特意把安装顺序和验证环节都列出来。你照着走,基本不会出大问题。