4. Vina-GPU 安装与环境配置(Ubuntu / CentOS)
说实话,我刚接触 Vina-GPU 那会儿,光装环境就折腾了一整天。后来发现,很多问题其实都是基础依赖没对齐造成的。这一章我把踩过的坑全抖出来,你照着做基本一次过。
4.1 硬件与软件前置检查
先别急着敲命令。我建议你先用下面这条命令确认显卡是否被系统识别:
lspci | grep -i nvidia
如果啥都没输出,说明要么没装 NVIDIA 显卡,要么 PCI 驱动没加载。我记得有一次在一台 CentOS 服务器上,显卡明明是 T4,却死活认不出来——最后发现是 BIOS 里把 PCIe 插槽关掉了……
软件方面的最低要求,我整理了个表:
| 组件 | Ubuntu 20.04 / 22.04 | CentOS 7 / 8 |
|---|---|---|
| GCC | ≥ 8.0 | ≥ 8.0(需 devtoolset) |
| CMake | ≥ 3.18 | ≥ 3.18(官方源码编译) |
| CUDA Toolkit | 11.x / 12.x | 11.x / 12.x |
| cuDNN | ≥ 8.6 | ≥ 8.6 |
| OpenMP | 默认支持 | 需 libgomp 包 |
个人习惯:我偏爱 Ubuntu 22.04 + CUDA 12.1 + cuDNN 8.9 的组合,编译 Vina-GPU 基本零报错。CentOS 用户最好升到 devtoolset-11 以上,否则 GCC 太老会卡死一堆模板推导。
4.2 CUDA Toolkit 与 cuDNN 安装
CUDA 的安装我推荐用 runfile 方式,别用 apt 或 yum 的仓库版。为什么呢?因为仓库版经常把 nvidia-driver 一起升级,容易搞花已有驱动。我曾经在 Ubuntu 上手快敲了 apt install cuda,结果重启后 X Server 起不来了……
正确的做法:
- 去 NVIDIA 官网下载指定的 CUDA runfile
比如 CUDA 12.1:cuda_12.1.0_530.30.02_linux.run - 执行时不装驱动和显卡驱动
chmod +x cuda_12.1.0_530.30.02_linux.run
sudo ./cuda_12.1.0_530.30.02_linux.run --toolkit --silent --override
装完以后,记得把路径加到 .bashrc 或 .zshrc:
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
然后 source ~/.bashrc,用 nvcc --version 验证。看到版本号就对了。
cuDNN 更简单——下载 deb 包(Ubuntu)或 tar 包(CentOS),解压后把头文件和库拷贝到 CUDA 目录下:
# Ubuntu
sudo dpkg -i libcudnn8_8.9.0.131-1+cuda12.1_amd64.deb
sudo dpkg -i libcudnn8-dev_8.9.0.131-1+cuda12.1_amd64.deb
# CentOS 用 tar 包
tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda12-archive.tar.xz
sudo cp cuda/include/* /usr/local/cuda-12.1/include/
sudo cp cuda/lib64/* /usr/local/cuda-12.1/lib64/
避坑提醒:cuDNN 的版本必须与 CUDA 主版本完全匹配。比如 CUDA 12.1 就要用 cuDNN 8.9 for CUDA 12.x。我曾经试过跨大版本拷贝符号链接,结果运行时报 libcudnn.so.8: cannot open shared object file,排查了俩小时。
4.3 系统依赖与 CMake 准备
无论 Ubuntu 还是 CentOS,基础开发包必须齐全。我一般先跑这几行:
Ubuntu:
sudo apt update
sudo apt install build-essential cmake git libboost-dev libboost-system-dev libboost-filesystem-dev libboost-thread-dev
CentOS:
sudo yum groupinstall "Development Tools"
sudo yum install cmake3 git boost-devel
sudo ln -s /usr/bin/cmake3 /usr/bin/cmake # 让 cmake 命令生效
小技巧:CentOS 7 自带的 CMake 只有 2.8,太老了。我建议从 https://cmake.org/download/ 下载 cmake-3.27.x-linux-x86_64.sh,用 --prefix=/usr/local 安装,一步到位。
4.4 获取 Vina-GPU 源码并编译
从 GitHub 把代码拉下来:
git clone https://github.com/DeltaGroupNJUPT/Vina-GPU.git
cd Vina-GPU
注意,这个项目目前只有 OpenCL 分支支持 CUDA(其实背后用了 OpenCL 转 CUDA 的 shim)。我个人建议直接用 opencl 分支:
git checkout opencl
然后创建 build 目录,配置 CMake:
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DOPENCL_LIBRARY=/usr/local/cuda-12.1/lib64/libOpenCL.so
我遇到过一个坑:libOpenCL.so 路径不对的话,CMake 会报 Could NOT find OpenCL。后来我用 find /usr/local -name "libOpenCL*" 找到真实路径才解决的。
配置成功后,编译:
make -j$(nproc)
不出意外会在 bin/ 目录下生成 vina_gpu 可执行文件。
经验之谈:我第一次编译花了 15 分钟,是因为忘了加 -j 参数。后来养成习惯,先 nproc 看一眼核数再决定 -j 数,别一把梭拉满 64 核导致内存爆炸。
4.5 验证安装
运行自带的测试配体:
cd ..
./build/bin/vina_gpu --receptor examples/receptor.pdbqt --ligand examples/ligand.pdbqt --out output.pdbqt
如果看到类似这样的日志,就说明安装成功:
[INFO] OpenCL device: NVIDIA GeForce RTX 3090
[INFO] Kernel compiled successfully
[INFO] Running docking with 20 poses...
[INFO] Best affinity: -9.3 kcal/mol
[INFO] Output written to output.pdbqt
注意:如果日志里出现 CL_DEVICE_NOT_AVAILABLE,多半是 CUDA 驱动版本与 OpenCL 运行时不兼容。检查 nvidia-smi 输出的驱动版本,必要时回退或升级 CUDA Toolkit。
4.6 环境配置全景图
下面这张 SVG 把整个安装流程串起来了,方便你对照:
4.7 常见问题与避坑清单
- “OpenCL 库找不到”
检查ls /usr/local/cuda/lib64/libOpenCL*,如果没有,安装nvidia-opencl-icd(Ubuntu)或nvidia-persistenced(CentOS)。 - “Kernel 编译缓慢”
第一次运行 Vina-GPU 时 OpenCL JIT 编译可能要等 1-2 分钟,这是正常的。我建议你提前用clinfo确认设备支持。 - “段错误 / Segmentation fault”
多半是 PDBQT 文件格式不对。用--receptor和--ligand参数前,先用 AutoDock Tools 预处理一下。 - “显存不足”
默认网格尺寸太大时,可以加--size_x 20 --size_y 20 --size_z 20缩小搜索空间。
我的压箱底招数:如果编译遇到奇怪的模板错误,试试把 CMAKE_BUILD_TYPE 改成 RelWithDebInfo,有些优化开关会跳过导致死循环的模板实例化。
配置完环境后,我建议你跑一轮官方 example,确认输出无误。之后再拿自己的蛋白-配体对测试,性能数据就能对标 GPU 加速的预期了。安装这一步走稳,后面几章的 GPU 优化技巧才能施展得开。