news 2026/4/25 2:14:35

在Ubuntu 22.04上从源码编译安装gnina 1.1:一个生物信息学新手的踩坑与填坑全记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在Ubuntu 22.04上从源码编译安装gnina 1.1:一个生物信息学新手的踩坑与填坑全记录

在Ubuntu 22.04上从源码编译安装gnina 1.1:一个生物信息学新手的踩坑与填坑全记录

作为一个刚踏入计算化学领域的科研民工,第一次听说gnina这个结合了传统分子对接算法与卷积神经网络打分函数的工具时,内心既兴奋又忐忑。兴奋的是它能将深度学习技术引入分子对接领域,忐忑的是作为一个Linux命令行操作还不熟练的新手,要完成从源码编译安装这个复杂过程,简直像在迷宫中摸索。经过三天两夜的折腾,终于成功在Ubuntu 22.04上完成了gnina 1.1的安装,期间踩过的坑、流过的泪,现在都化作了这篇详实的记录,希望能为同样挣扎在安装路上的同行们点亮一盏小灯。

1. 环境准备:那些容易被忽视的细节

1.1 系统基础环境检查

在开始之前,我犯的第一个错误就是没有全面检查系统环境。gnina的编译依赖特定版本的gcc、CUDA和Python,而Ubuntu 22.04默认安装的gcc版本是11.3.0,这与gnina的要求并不完全匹配。以下是我最终确认可用的环境配置:

# 检查gcc版本 gcc --version # gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 # 检查Python版本 python3 --version # Python 3.10.6 # 检查CUDA版本 nvcc --version # nvcc: NVIDIA (R) Cuda compiler version 11.8.89

注意:如果你的CUDA版本低于11.0,建议先升级CUDA,否则后续编译会遇到无法解决的错误。

1.2 依赖库安装的陷阱

按照官方文档,我首先安装了基础依赖库:

sudo apt-get install build-essential libboost-all-dev libeigen3-dev \ libgoogle-glog-dev libprotobuf-dev protobuf-compiler libhdf5-dev \ libatlas-base-dev

看似简单的命令,却隐藏着一个大坑:libboost的版本问题。Ubuntu 22.04默认安装的是libboost 1.74,而gnina需要至少1.75版本。我不得不手动编译安装更高版本的boost:

wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz tar -xzvf boost_1_81_0.tar.gz cd boost_1_81_0 ./bootstrap.sh --prefix=$HOME/app/boost ./b2 install

2. OpenBabel安装:Python绑定的噩梦

2.1 编译选项的抉择

OpenBabel是gnina的重要依赖,但它的安装过程堪称新手杀手。官方文档建议的编译选项并不完全适用于所有环境。经过多次尝试,我发现以下配置组合最为可靠:

git clone https://github.com/openbabel/openbabel.git cd openbabel mkdir build cd build cmake .. \ -DCMAKE_INSTALL_PREFIX=$HOME/app/openbabel3 \ -DWITH_MAEPARSER=OFF \ -DWITH_COORDGEN=OFF \ -DPYTHON_BINDINGS=ON \ -DRUN_SWIG=ON \ -DPYTHON_EXECUTABLE=$(which python3)

关键点在于明确指定PYTHON_EXECUTABLE路径,否则cmake可能会找到错误的Python解释器。

2.2 Python环境变量的正确设置

即使编译成功,Python导入OpenBabel时仍可能报错。这是因为环境变量设置不当。正确的.bashrc配置应该是:

# OpenBabel3 export PATH=$HOME/app/openbabel3/bin:$PATH export LD_LIBRARY_PATH=$HOME/app/openbabel3/lib:$LD_LIBRARY_PATH export PYTHONPATH=$HOME/app/openbabel3/lib/python3.10/site-packages:$PYTHONPATH

特别注意PYTHONPATH中的python3.10需要与你的Python版本号一致。我最初忽略了这一点,导致即使安装成功也无法在Python中导入OpenBabel。

3. libmolgrid编译:内存不足的挑战

3.1 并行编译导致的内存溢出

libmolgrid的编译过程对内存要求极高。使用make -j8(8线程并行编译)时,我的16GB内存机器频繁出现OOM(内存不足)错误。解决方案是:

  1. 减少并行线程数:make -j4或更低
  2. 增加swap空间:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

3.2 头文件路径的精确指定

libmolgrid需要知道OpenBabel的头文件位置,但自动检测经常失败。必须明确指定:

cmake .. \ -DCMAKE_INSTALL_PREFIX=$HOME/app/libmolgrid \ -DOPENBABEL3_INCLUDE_DIR=$HOME/app/openbabel3/include/openbabel3 \ -DOPENBABEL3_LIBRARIES=$HOME/app/openbabel3/lib/libopenbabel.so

注意路径中的openbabel3子目录,这是新手容易忽略的细节。

4. gnina最终编译:胜利前的最后障碍

4.1 CMake参数的精简与优化

经过前几个组件的安装,gnina本体的编译相对顺利,但仍有几个关键点需要注意:

cmake .. \ -DCMAKE_INSTALL_PREFIX=$HOME/app/gnina \ -DLIBMOLGRID_INCLUDE_DIR=$HOME/app/libmolgrid/include \ -DLIBMOLGRID_LIBRARY=$HOME/app/libmolgrid/lib/libmolgrid.so \ -DOPENBABEL3_INCLUDE_DIR=$HOME/app/openbabel3/include/openbabel3 \ -DOPENBABEL3_LIBRARIES=$HOME/app/openbabel3/lib/libopenbabel.so \ -DBoost_INCLUDE_DIR=$HOME/app/boost/include

特别提醒:如果你手动安装了boost,必须通过-DBoost_INCLUDE_DIR指定其路径,否则会使用系统自带的旧版本。

4.2 测试安装是否成功

编译完成后,不要急于庆祝,先运行一个简单测试:

$HOME/app/gnina/bin/gnina --help

如果能看到帮助信息,恭喜你,最艰难的部分已经过去。但为了确保所有功能正常,特别是CNN评分部分,建议下载测试用例:

wget https://github.com/gnina/gnina/raw/master/test/data/1iep_ligand.sdf wget https://github.com/gnina/gnina/raw/master/test/data/1iep_receptor.pdb $HOME/app/gnina/bin/gnina -r 1iep_receptor.pdb -l 1iep_ligand.sdf --autobox_ligand 1iep_ligand.sdf

如果程序能正常运行并生成输出文件1iep_ligand_out.sdf,说明安装完全成功。

5. 环境变量与日常使用技巧

5.1 持久化环境配置

为了方便日常使用,将以下内容添加到~/.bashrc

# gnina环境 export PATH=$HOME/app/gnina/bin:$PATH export LD_LIBRARY_PATH=$HOME/app/gnina/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$HOME/app/libmolgrid/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$HOME/app/openbabel3/lib:$LD_LIBRARY_PATH

然后执行source ~/.bashrc使配置生效。

5.2 常见问题速查表

问题现象可能原因解决方案
导入OpenBabel时报错PYTHONPATH设置错误检查Python版本与路径是否匹配
make过程中断内存不足减少并行线程数或增加swap空间
cmake找不到依赖路径指定不完整确保包含子目录路径(如openbabel3/)
CNN评分不工作CUDA/cuDNN版本不匹配确认CUDA>=11.0, cuDNN>=8.9.0

6. 性能优化与进阶配置

6.1 多GPU支持

如果你的工作站配备多块GPU,可以通过以下参数充分利用硬件资源:

gnina -r receptor.pdb -l ligand.sdf --gpu 0,1

这将同时使用第一和第二块GPU进行计算。

6.2 自定义CNN模型

gnina允许使用自定义训练的CNN模型。只需在运行时指定模型路径:

gnina -r receptor.pdb -l ligand.sdf --cnn_model custom_model.model

自定义模型需要按照gnina的格式要求进行训练,这为特定研究方向的优化提供了可能。

经过这一番折腾,我深刻体会到在Linux环境下从源码编译复杂科学软件的艰辛,但也收获了宝贵的系统调试经验。现在回想起来,那些报错信息不再可怕,而是解决问题的线索。最重要的是,当看到gnina成功运行并输出第一个对接结果时,所有的努力都变得值得。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 2:07:37

CT8233LG电容式单按键触摸检测 IC

一、 概述 CT8233LG 是一款电容式单按键触摸检测及接近感应控制芯片。采用 CMOS 工艺制造,内建稳压和去抖动电路,高可靠性,专为取代传统按键开关而设计。超低功耗与宽工作电压特性,广泛应用于 TWS及 DC 应用的触摸产品中&#xff…

作者头像 李华
网站建设 2026/4/25 2:03:59

隔音涂料多少钱一平

在当今这个充满噪音的世界里,隔音成为了很多人关注的问题。隔音涂料作为一种有效的隔音解决方案,受到了越来越多人的青睐。然而,很多人在选择隔音涂料时,都会关心一个问题:隔音涂料多少钱一平?今天&#xf…

作者头像 李华
网站建设 2026/4/25 2:03:51

寄快递被多收钱?90%的人不知道,钱花在哪里了

最近天热了,我寄了一床不用的厚被子回家,自己称重还不到3公斤,想着最多20块,结果寄出去之后运费50多,网上一查才发现是按照体积计费的,最后显示的是8公斤。后来我才知道,原来快递不仅看重量&…

作者头像 李华
网站建设 2026/4/25 2:00:21

概率分布基础:从概念到机器学习应用

1. 概率分布基础概念解析 概率论作为数学的重要分支,其核心研究对象是随机现象的数量规律。当我们谈论概率分布时,实际上是在探讨随机变量所有可能取值与其对应概率的系统性描述框架。这种描述不仅限于单一事件的概率计算,更重要的是揭示了整…

作者头像 李华
网站建设 2026/4/25 1:58:29

AI编程助手实战评测:Claude3(Opus)在复杂功能实现上如何领先通义灵码

1. 复杂编程任务下的AI助手对决 最近在开发者圈子里有个热门话题:当遇到稍微复杂的编程需求时,到底该选择哪款AI编程助手?我恰好有个实际需求——用Python整合Azure语音服务开发带图形界面的应用,于是拿通义灵码和Claude3(Opus)做…

作者头像 李华