CentOS7安装GPU版本的faiss详细过程

1. 拉取源码

faiss最新版本应该是1.6.1,我们git clone的时候指定这个tag

git clone -b v1.6.1 https://github.com/facebookresearch/faiss.git

2. 编译CPU版本

接着

cd faiss

./configure --with-cuda=/usr/local/cuda

这里我的cuda安装在/usr/local/cuda 大家可以根据实际情况替换为自己的cuda安装路径,如果不指定这个会报错

Could't find cuda.h

configure完毕,因为faiss依赖blas,所以先测试一下系统是否已经正确安装了blas

执行

make misc/test_blas

然后

./misc/test_blas

如果过程中报错,你需要先安装一款blas 比如openblas,google或者百度一下,很简单;如果过程中提示Intentional Lapack error (appears only for 64-bit INTEGER) 还有什么 Lapack uses 32-bit integers 则不必担心 这个只是说blas使用32位int计算,除非你的索引vector里元素有int64否则不用管,id是int64是没影响的。

测试完blas没问题后,开始构建faiss,执行

make

然后

sudo make install

make的时候可能会报这个错

nvcc fatal   : Unsupported gpu architecture 'compute_75'

make: *** [gpu/GpuIndex.o] Error 1

解决方法是根据你的gpu卡找到对应的compute capability,常见的比如

Tesla K80   3.7

Tesla K40   3.5

Tesla K20   3.5

Tesla C2075 2.0

Tesla C2050/C2070   2.0

Tesla M40   5.2

Tesla K80   3.7

Tesla K40   3.52

NVIDIA TITAN X  6.1

GeForce GTX 1080    6.1

GeForce GTX 1070    6.1

GeForce GTX 1060    6.1

GeForce GTX TITAN X 5.2

GeForce GTX TITAN Z 3.5

GeForce GTX TITAN Black 3.5

GeForce GTX TITAN   3.5

GeForce GTX 980 Ti  5.2

GeForce GTX 980 5.2

GeForce GTX 970 5.2

然后修改makefile.inc,找到CUDA_ARCH开头这一行,修改成

CUDA_ARCH    = -gencode=arch=compute_52,code=sm_52

根据你自己卡的compute capability改

faiss构建完毕后,测试一下 执行 cd demos && make 然后

./demo_ivfpq_indexing

如果报错 error while loading shared libraries: libfaiss.so: cannot open shared object file: No such file or directory, 解决办法是

export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"

而且最好把这行加到你的~/.bashrc里,LD_LIBRARY_PATH加上之后,再运行,如果看到类似下面的截图,说面faiss构建成功了

lightgbm 安装gpu版_python

3. 安装python包装

接着还是需要安装faiss的python的包装,先回到主目录cd .. 然后

make py

,

可能会报错

../faiss/Index.h:72: Error: Syntax error in input(3).

make[1]: *** [swigfaiss.cpp] Error 1

因为用的swig是版本2,升级到swig3即可。升级方法

wget https://nchc.dl.sourceforge.net/project/swig/swig/swig-3.0.12/swig-3.0.12.tar.gz

tar -xzf swig-3.0.12.tar.gz

cd swig-3.0.12/

*./configure

make

sudo make install

升级完后,执行

swig -version

可以看到版本已经是3了,然后我们继续回到faiss目录执行

make py

,成功! 然后我们执行

python -c "import faiss"

测试一下,发现可以导入,只是会提示Failed to load GPU Faiss: No module named swigfaiss_gpu

Faiss falling back to CPU-only.这个正常,因为我们还没编译gpu支持。

4. 编译GPU支持

好,跟着我们编译gpu支持,

cd gpu

然后

make

,为了快一点可以多个线程make,比如

make -j 8

,但是会提示这里并没有Makefile,所以我们需要

cp ../Makefile .

把cpu的makefile拷到gpu这个目录,然后修改Makefile的第一行 -include makefile.inc 改成 -include ../makefile.inc 然后再make,如果还是报错ld连接找不到库或者include找不到头文件的话,就修改下../makefile.inc 把cuda还有之前编译好的cpu faiss的include和link路径加上就好了

成功后,在回到python目录里 执行make,最后

cp  -r faiss swigfaiss.py _swigfaiss.so 你的python site-package目录

ok完工,来验证下python中使用gpu版本faiss没问题,到demos目录

修改demo_auto_tune.py 104行左右的

keys_to_test = unlimited_mem_keys

use_gpu = False

改为

keys_to_test = keys_gpu

use_gpu = True

然后下载sift1M数据集,

wget ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz

tar -xzf sift.tar.gz

mv sift sift1M

python demo_auto_tune.py

开始运行后,执行

nvidia-smi

观察gpu的使用,你会发现faiss已经用上gpu了。