第二章:环境搭建 —— 把工具箱先摆好
做计算化学与机器学习交叉的管线,第一件事不是写代码,而是搭环境。我在这个领域折腾了几年,踩过的坑有一半都出在环境不一致上。明明自己本地跑得好好的,换台机器就崩,这感觉你想想看,多憋屈。
这一章咱们就把 Python、RDKit、PyTorch、DLPack 这几样核心工具装好,并且验证它们能正常协作。我会把一些常见的坑提前指出来,帮你省掉半夜 debug 的时间。
2.1 为什么我先推荐 Miniconda
Python 版本混乱,包依赖经常打架。我个人习惯用 Miniconda 来管理环境,因为它既能隔离 Python 版本,又能控制 CUDA 驱动级别的兼容性。你可能会问:“直接用 pip 不行吗?” 行,但 conda 在处理 RDKit 这种带 C++ 后端的库时省心很多。
安装好 Miniconda 后,创建一个干净的环境:
conda create -n drug_pipeline python=3.10
conda activate drug_pipeline
Python 3.10 是目前 RDKit 和 PyTorch 兼容性最好的版本。我试过 3.11,个别包还在适配,没必要冒风险。
2.2 安装 RDKit —— 化学家的瑞士军刀
RDKit 是处理分子结构的基础库。我们在管线里要用它读 SDF、画分子、计算指纹。你不装 RDKit,后面的配体处理全都白搭。
安装 RDKit 最靠谱的方式是用 conda:
conda install -c conda-forge rdkit
不要用 pip 直接装,除非你特别清楚自己在做什么。我曾经图省事用 pip 装了一个版本,结果到 Mac 上 segfault,查了两天才发现是编译时的 OpenSSL 版本不符。conda 会帮你处理这些底层链接。
装完验证一下:
python -c "from rdkit import Chem; print(Chem.MolFromSmiles('CCO'))"
如果能输出一个分子对象信息(不是 None),就对了。如果报错,大概率是 GCC 版本或 libcxx 问题,换 conda 源重装试试。
2.3 安装 PyTorch —— 选 CPU 还是 GPU?
PyTorch 是整个管线里负责深度学习的引擎。这里有个关键选择:你要用 GPU 吗?
如果你手头有 NVIDIA 显卡,且安装了 CUDA 驱动,那我强烈建议装 GPU 版本。蛋白配体预测的模型往往要训练几百个 epoch,哪怕只用 CPU 推断,一个 batch 也可能慢到怀疑人生。
GPU 版本的安装命令(以 CUDA 11.8 为例):
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
如果你没有 GPU,或者想先在笔记本上跑跑原型,那就装 CPU 版:
conda install pytorch torchvision torchaudio cpuonly -c pytorch
装完一定要验证一下:
python -c "import torch; print(torch.__version__); print('CUDA available:', torch.cuda.is_available())"
| 场景 | 推荐命令 | 备注 |
|---|---|---|
| 有 GPU(CUDA 11.8) | conda install ... pytorch-cuda=11.8 |
记得先查 nvidia-smi 确认驱动版本 |
| 有 GPU(CUDA 12.x) | conda install ... pytorch-cuda=12.1 |
PyTorch 2.x 已支持 |
| 无 GPU / 仅 CPU | conda install ... cpuonly |
训练会很慢,但能跑 |
2.4 DLPack —— 打通张量传输的桥梁
DLPack 不是给所有人用的,但在我们的管线里它很重要。为什么?因为我们要在 PyTorch、RDKit(通过其他工具)甚至未来可能用到的 TensorFlow 之间共享张量。DLPack 提供了一个标准的内存布局,让不同框架之间零拷贝交换数据。
安装很简单:
conda install -c conda-forge dlpack
或者用 pip:
pip install dlpack
装完后做个基本测试:
python -c "import dlpack; print(dlpack.__version__)"
在实际管线中,我们会把 PyTorch 模型输出的特征张量通过 DLPack 转化成其他框架能理解的格式,从而调用不同的评分函数。这个用法后面章节会展开,现在先确保它能被 import 就行。
2.5 其他辅助工具
除了上面三个主角,还有几个小工具会让开发更顺手:
- numpy —— 数值计算基础,conda 会自动装,但显式装一下没坏处。
- scipy —— 后面做聚类、距离矩阵时用。
- matplotlib / seaborn —— 画损失曲线、ROC 图。
- pandas —— 处理 CSV/TSV 数据,尤其是 binding 数据表。
- tqdm —— 进度条,跑批量训练时你会感谢它。
一行命令全装:
conda install numpy scipy matplotlib seaborn pandas tqdm
2.6 整体验证 —— 跑一个小例子
环境搭没搭好,跑个简单的端到端测试最放心。我们来读一个分子,用 PyTorch 算个随机特征,再验证 DLPack 能把它转一下。
from rdkit import Chem
from rdkit.Chem import AllChem
import torch
import dlpack
# 读一个分子(咖啡因)
mol = Chem.MolFromSmiles('CN1C=NC2=C1C(=O)N(C(=O)N2C)C')
fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=2048)
# 转成 numpy,再转成 PyTorch 张量
import numpy as np
fp_np = np.array(fp, dtype=np.float32)
fp_tensor = torch.from_numpy(fp_np)
# 通过 DLPack 交换(演示用)
# 实际 dlpack 的 API 依赖具体版本,这里只验证 import 成功
print("RDKit:", Chem.MolToSmiles(mol))
print("Torch tensor shape:", fp_tensor.shape)
print("DLPack imported:", hasattr(dlpack, '__version__'))
如果这段代码没报错,恭喜你,核心管线环境已经跑通了。
2.7 环境搭建总体流程
我把整个环境搭建的逻辑画成了一张图,方便你对照检查哪个环节漏了。