Ubuntu16.04 Faiss安装及注意事项(所踩的坑)

由于项目需求,需要引用Faiss库。网上中文资料不仅少而且不完整,特做笔记。
注意:我是在Ubuntu16.04的服务器上安装,使用conda安装的支持GPU版本的Faiss。

一、Faiss是什么?

Faiss是由Facebook AI Research研发的为稠密向量提供高效相似度搜索和聚类的框架,具有以下特性:

  • 提供多种检索方法;
  • 检索速度快;
  • 可存在内存和磁盘中;
  • C++实现,提供Python封装调用;
  • 大部分算法支持GPU实现。

二、常规安装教程

先给出官方安装文档和官方问题答疑,有能力的小伙伴可以直接啃官方:
官方安装文档
官方问题答疑

(一)安装前最基础环境准备

1.Anaconda安装

Anaconda安装不需要多讲,我在这里给大家推荐一篇非常详细的博文(Python入门:Anaconda和Pycharm的安装和配置),保证大家没有任何疑问。

2.NVIDIA和CUDA安装

需要用到CUDA,安装CUDA就要安装Nvidia驱动程序,选择合适的驱动版本很重要,又是一个大坑。还好我之前已经经历过了,把“CUDA安装武林秘籍”(Ubuntu16.04 安装NVIDIA和CUDA注意事项)分享给大家。

(二)安装前附加包准备

因为Faiss安装要用到好多其他工具或者包,所以提前安装好,防止后面报错。

1.创建虚拟环境(可省略)

因为是在服务器上跑代码,为防止不同项目之间包调用混乱特单独创建虚拟环境。如果无以上情况可忽略。

conda create -n search_eng python=3.7	#创建虚拟环境
source activate search_eng				#激活虚拟环境

2.安装SWIG

wget https://downloads.sourceforge.net/swig/swig-3.0.12.tar.gz
tar zxvf swig-3.0.12.tar.gz && cd swig-3.0.12
./configure --without-pcre && make && sudo make install

3.安装其他库

sudo apt-get install libopenblas-dev python-numpy python-dev

4.安装mkl、gcc、g++

conda install mkl
sudo apt install gcc
sudo apt-get install g++

5.安装OpenBLAS

git clone https://github.com/xianyi/OpenBLAS.git
sudo apt-get install gfortran				#已安装的请忽略
make FC=gfortran
sudo make install
#将编译好的动态库链接至/usr/lib目录下
sudo ln -s /opt/OpenBLAS/lib/libopenblas.so /usr/lib/libblas.so.3 
sudo ln -s /opt/OpenBLAS/lib/liblapa.3 /usr/lib/liblapack.so.3

还有差一步:

#在/etc/profile中加入下面代码
#用sudo vim i :wq!基本操作不细说
    LD_LIBRARY_PATH=/opt/OpenBLAS/lib
    export LD_LIBRARY_PATH

6.安装lapack

# 下载lapack源码
wget http://www.netlib.org/lapack/lapack-3.4.2.tgz
tar -zxf lapack-3.4.2.tgz
# 进入lapack-3.4.2文件夹,然后根据服务器环境,将INSTALL目录下对应的make.inc.XXX复制一份到 lapack-3.4.2目录下,并命名为make.inc。
# 这里复制的是INSTALL/make.inc.gfortran,因为用的是gfortran编译器
cd lapack-3.4.2
cp ./INSTALL/make.inc.gfortran ./
mv make.inc.gfortran make.inc

修改lapack-3.4.2/Makefile,因为lapack来自于blas库,所以需要做如下修改(注释第一句话,去掉注释第二句话)

#lib: lapacklib tmglib
lib: blaslib variants lapacklig tmglib

继续编译:

# 编译所有的lapack文件
make
# 进入lapacke 文件夹,这个文件夹包含lapack的C语言接口文件 
cd lapacke
# 编译lapacke
make  

由于lapack的makefile文件中没有make isntall 命令,需要手工进行安装:

# 将lapacke的头文件复制到系统头文件目录
cp include/*.h /usr/include  

# 返回到 lapack-3.4.2 目录 
cd .. 

# 将生成的所有库文件复制到系统库目录 
cp *.a /usr/lib 

7.安装指定版本cmake

编译安装Faiss需要指定Cmake=3.17,这里我给出两种方法(一种方法不行要学会随机应变(#.#)):
(1)直接使用conda安装

conda install CMake=3.17

(2)使用最原始方法

wget https://cmake.org/files/v3.17/cmake-3.17.0-Linux-x86_64.tar.gz

tar xf cmake-3.17.0-Linux-x86_64.tar.gz &&cd cmake-3.17.0-Linux-x86_64 

./configure && make && sudo make install

8.安装faiss-gpu

这里根据自己实际版本选择适合自己的版本:

conda install faiss-gpu cudatoolkit=8.0 -c pytorch # For CUDA8
conda install faiss-gpu cudatoolkit=9.0 -c pytorch # For CUDA9
conda install faiss-gpu cudatoolkit=10.0 -c pytorch # For CUDA10

(三)编译安装Faiss

终于来到最后一步,加油ヾ(◍°∇°◍)ノ゙,坚持就是胜利!!!

# 下载FAISS源码.
git clone https://github.com/facebookresearch/faiss.git

# 进入FAISS源码目录.
cd faiss

cmake . #里面有CmakeList文件,直接Cmake就好了
make
sudo make install

如果没有任何报错,那恭喜你,成功了(〃‘▽’〃)!!!

(四)测试Faiss

当然为以防万一,你也可以测试一下(参照官方安装文件):

make demos

./demos/demo_sift1M

三、安装出现问题及解决方案

一般情况下的问题都是版本不匹配造成的,可通过以下命令查看版本:

nvidia-smi #查看nvidia驱动版本和Cuda版本
nvcc --version 查看CUDA Toolkit

1.需要添加路径进去

(1) 出现问题

这个也不算什么大问题,是在安装完cuda(因为已有驱动所以没安装)以后:

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.2/
Samples:  Installed in /home/your_path/, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-10.2/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 440.00 is required for CUDA 10.2 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log

(2)解决方案

#在/etc/profile中加入下面代码
#用sudo vim i :wq!基本操作不细说
export  PATH=/usr/local/cuda-10.2/bin:$PATH   
export  LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64$LD_LIBRARY_PATH  

2.The CUDA compiler “/usr/bin/nvcc” is not able to compile a simple test program.

(1)出现问题

在最后编译Faiss文件的时候报错:

CMake Error at /home/your_path/.conda/envs/search_eng/lib/python3.6/site-packages/cmake/data/share/cmake-3.17/Modules/CMakeTestCUDACompiler.cmake:46 (message):
  The CUDA compiler

    "/usr/bin/nvcc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/your_path/faiss/CMakeFiles/CMakeTmp
    
    Run Build Command(s):/usr/bin/make cmTC_9d3b2/fast && /usr/bin/make -f CMakeFiles/cmTC_9d3b2.dir/build.make CMakeFiles/cmTC_9d3b2.dir/build
    make[1]: Entering directory '/home/your_path/faiss/CMakeFiles/CMakeTmp'
    Building CUDA object CMakeFiles/cmTC_9d3b2.dir/main.cu.o
    /usr/bin/nvcc  -ccbin=/usr/bin/c++    -x cu -c /home/your_path/faiss/CMakeFiles/CMakeTmp/main.cu -o CMakeFiles/cmTC_9d3b2.dir/main.cu.o
    ptxas fatal   : Value 'sm_20' is not defined for option 'gpu-name'
    CMakeFiles/cmTC_9d3b2.dir/build.make:82: recipe for target 'CMakeFiles/cmTC_9d3b2.dir/main.cu.o' failed
    make[1]: *** [CMakeFiles/cmTC_9d3b2.dir/main.cu.o] Error 255
    make[1]: Leaving directory '/home/your_path/faiss/CMakeFiles/CMakeTmp'
    Makefile:138: recipe for target 'cmTC_9d3b2/fast' failed
    make: *** [cmTC_9d3b2/fast] Error 2
    
      

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:26 (enable_language)

(2)解决方案

重装cuda或者重配环境
注意:重装cuda的话一定要先卸载干净,怎么安装怎么对应卸载方式卸载:

sudo apt purge --remove cuda toolkit #只是一个示范栗子

总结

当初也是觉得很简单,奈何我也是个萌新,搭环境搭的怀疑人生,没想到也是花了整整两天时间才配好。希望后来的小伙伴们可以更轻松一点吧!

感谢及参考博文

部分内容参考以下链接,这里表示感谢 Thanks♪(・ω・)ノ
参考博文1 官方安装文档镇楼
https://github.com/facebookresearch/faiss/blob/master/INSTALL.md
参考博文2 官方安装答疑文档(Troubleshooting)镇楼
https://github.com/facebookresearch/faiss/wiki/Troubleshooting
参考博文3 手把手教你安装Faiss(Linux)(老哥写的确实不错,涨姿势)
https://juejin.im/post/6844903714671558670
参考博文4 CentOS7安装OpenBLAS的简单步骤
https://blog.csdn.net/u013017173/article/details/81748168

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值