4. 软件依赖:CUDA Toolkit、cuDNN、Python 环境配置
说实话,InterProScan 本身跑得挺慢的,尤其数据量上来后。我最初在项目里试过一次,跑全库扫描等了整整两天——那感觉,真的崩溃。后来才发现,GPU 加速是唯一的出路。但要让 InterProScan 用上 GPU,你得先把这几样东西伺候好:CUDA Toolkit、cuDNN,还有 Python 环境。
别急,这三样看起来多,其实顺序捋顺了,半小时就能搭好。我按自己的习惯,把它拆成三步走。
4.1 CUDA Toolkit——不管你怎么想,都得先装它
CUDA Toolkit 是 GPU 加速的基石。InterProScan 后端调用的很多数据库算法(比如 HMMER3 的 GPU 版)都依赖 CUDA。我个人习惯用 CUDA 11.7,因为目前主流深度学习框架对它的支持最稳定。你要是急着用,也可以上 12.x,但记得检查后续 cuDNN 和 PyTorch 的兼容性。
安装方式我推荐用 .run 文件,而不是系统包管理器。为什么?因为你可以把多个 CUDA 版本装在同一台机器上,随时切换。我在项目里经常需要同时跑 CUDA 10.2(老项目)和 11.7(新项目),用 .run 安装后,改个环境变量就行。
# 下载 CUDA 11.7.0(官网:developer.nvidia.com/cuda-toolkit-archive)
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
sudo sh cuda_11.7.0_515.43.04_linux.run --toolkit --silent --override
重点:安装时 不要勾选驱动!驱动请提前装好(用 nvidia-smi 确认版本 ≥ 450.80.02)。安装完成后,把 CUDA 加入 PATH 和 LD_LIBRARY_PATH:
echo 'export PATH=/usr/local/cuda-11.7/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证
nvcc --version
我遇到过最坑的情况:装完 CUDA 12.1 后用 nvcc -V 显示正常,但 InterProScan 编译时总报找不到 cuda_runtime.h。后来发现是 LD_LIBRARY_PATH 没加上 lib64 路径。你想想看,这不就浪费了半天排查。
4.2 cuDNN——深度学习加速的钥匙
cuDNN 是 NVIDIA 的深度神经网络加速库,InterProScan 的 GPU 模式(尤其是用深度学习模型做蛋白质结构域预测时)会用到它。cuDNN 不是开源的,需要从 NVIDIA 官网注册下载。不过别慌,注册免费。
安装 cuDNN 其实就是解压然后把文件复制到 CUDA 目录下。确保版本匹配——cuDNN 8.6.0 是针对 CUDA 11.x 的。
# 假设下载了 cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.6.0.163_cuda11-archive
sudo cp include/cudnn*.h /usr/local/cuda-11.7/include/
sudo cp lib/libcudnn* /usr/local/cuda-11.7/lib64/
sudo chmod a+r /usr/local/cuda-11.7/include/cudnn*.h /usr/local/cuda-11.7/lib64/libcudnn*
验证一下:
cat /usr/local/cuda-11.7/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 应该输出类似
# #define CUDNN_MAJOR 8
# #define CUDNN_MINOR 6
# #define CUDNN_PATCHLEVEL 0
4.3 Python 环境——用 conda 隔离最省心
InterProScan 的 Python 接口(比如 pyinterpro)以及一些辅助脚本都需要 Python 3.8+。我建议用 conda 管理环境,而不是系统 Python。原因很简单:InterProScan 依赖了一堆 C 扩展库(如 numpy、biopython),用 conda 安装二进制包,不用自己编译,省了很多麻烦。
安装 miniconda,然后创建专属环境:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda3
~/miniconda3/bin/conda init
# 重启终端后
conda create -n interpro-gpu python=3.10 -y
conda activate interpro-gpu
激活环境后,安装必需的基础库:
conda install -c conda-forge numpy scipy biopython pandas -y
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
注意这里 PyTorch 的 CUDA 版本必须与前面装的 CUDA Toolkit 一致。我自己习惯同时装 cudatoolkit conda 包(用于编译),但怕冲突的话,直接用 pip 安装 PyTorch 预编译的 CUDA 版更保险。
conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ 换国内镜像。但要小心 PyTorch 的 CUDA 版本可能与镜像源不对应,这时候用 pip + 官方index-url 更靠谱。
4.4 环境验证:一条命令检查所有
装完了总觉得心里没底?我每次装完都会跑一个“三合一”验证脚本:
python -c "
import torch
import numpy as np
import sys
# 检查 CUDA
print('CUDA 可用:', torch.cuda.is_available())
print('CUDA 版本:', torch.version.cuda)
print('cuDNN 版本:', torch.backends.cudnn.version())
# 简单张量测试
x = torch.randn(3,3).cuda()
y = torch.randn(3,3).cuda()
z = x @ y
print('GPU 矩阵乘法成功,结果 shape:', z.shape)
# 检查 Python 版本
print('Python 版本:', sys.version)
"
如果输出像下面这样,那就是绿灯:
CUDA 可用: True
CUDA 版本: 11.7
cuDNN 版本: 8600
GPU 矩阵乘法成功,结果 shape: torch.Size([3, 3])
Python 版本: 3.10.12 (main, Jul 25 2023, 10:50:34) [GCC 11.4.0]
要是 torch.cuda.is_available() 返回 False,嗯,我建议先查驱动。跑 nvidia-smi 看看有没有显示 GPU,再确认 nvcc --version 与 PyTorch 报告的 CUDA 版本是否一致。我遇到最搞笑的一次:电脑插了两张显卡,一张是 NVIDIA,一张是 AMD 的……PyTorch 只能找 NVIDIA 的,结果我忘了禁掉 AMD 卡,驱动冲突导致认不出。后来把 AMD 卡拔了,一切正常。
4.5 避坑清单(我踩过的雷,你别再踩)
| 坑点 | 现象 | 解决方案 |
|---|---|---|
| CUDA 和 PyTorch 版本不匹配 | torch.cuda.is_available() 返回 False | 重新安装匹配版本的 PyTorch(用 pip 指定 cu117 等后缀) |
缺少 libcudnn.so |
InterProScan 启动时报动态链接错误 | 复制 cuDNN 库到 /usr/local/cuda/lib64 并更新 ldconfig |
| conda 环境中安装了不同 CUDA 版本的 PyTorch | 运行时段错误(Segmentation fault) | 用 conda remove pytorch torchvision 清除,再用 pip 重装 |
| 系统 Python 和 conda 环境混淆 | pip 装包后提示 “not found” | 始终 conda activate 后再操作,用 which python 确认路径 |
我个人经历中最头疼的一次,是装好环境后 InterProScan 一直在 CPU 上跑,GPU 利用率始终是 0%。折腾了半天才发现,是 InterProScan 的配置文件中 gpu_mode 没设为 true。嗯,这种低级错误,希望你们不会犯。
4.6 小结
到这一步,你的机器已经具备了 GPU 加速的全部土壤。CUDA Toolkit 提供了底层驱动和编译器,cuDNN 提供了深度学习加速原语,Python 环境(conda + PyTorch)是上层应用的容器。这三者配合好,InterProScan 的 GPU 加速才能跑起来。
顺便说一句,我习惯把这套环境写在 environment.yml 文件里,方便下次在新机器一键重建:
name: interpro-gpu
channels:
- conda-forge
- defaults
dependencies:
- python=3.10
- numpy
- scipy
- biopython
- pandas
- pip
- pip:
- torch==1.13.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
- torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
用 conda env create -f environment.yml 就能重建,省心。