欢迎光临
我们一直在努力

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

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

1. 拉取源码

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

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

2. 编译CPU版本

接着

1
cd faiss
1
./configure --with-cuda=/usr/local/cuda

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

1
Could't find cuda.h

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

1
make misc/test_blas

然后

1
./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,执行

1
make

然后

1
sudo make install

make的时候可能会报这个错

1
nvcc fatal   : Unsupported gpu architecture 'compute_75'
1
make: *** [gpu/GpuIndex.o] Error 1

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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开头这一行,修改成

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

根据你自己卡的compute capability改

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

1
./demo_ivfpq_indexing

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

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

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

3. 安装python包装

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

1
make py

,
可能会报错


1
2
../faiss/Index.h:72: Error: Syntax error in input(3).
make[1]: *** [swigfaiss.cpp] Error 1

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


1
2
3
4
5
6
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

升级完后,执行

1
swig -version

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

1
make py

,成功! 然后我们执行

1
python -c "import faiss"

测试一下,发现可以导入,只是会提示Failed to load GPU Faiss: No module named swigfaiss_gpu
Faiss falling back to CPU-only.这个正常,因为我们还没编译gpu支持。

4. 编译GPU支持

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

1
cd gpu

然后

1
make

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

1
make -j 8

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

1
cp ../Makefile .

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

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

ok完工,来验证下python中使用gpu版本faiss没问题,到demos目录
修改demo_auto_tune.py 104行左右的


1
2
keys_to_test = unlimited_mem_keys
use_gpu = False

改为


1
2
keys_to_test = keys_gpu
use_gpu = True

然后下载sift1M数据集,

1
wget ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz
1
tar -xzf sift.tar.gz
1
mv sift sift1M
1
python demo_auto_tune.py

开始运行后,执行

1
nvidia-smi

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

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » CentOS7安装GPU版本的faiss详细过程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址