环境准备:
双路CPU工作站
128G内存
英伟达1080Ti显卡两块
faiss源码包
centos7.2+python2.7+anaconda2(环境变量与openblas安装同GPU版)
centos7.2+python3.6+anaconda3(conda安装faiss环境)
1 显卡驱动安装
显卡安装有两种方式,一种是用yum从 ELRepo 源中安装,一种是从源码编译驱动。我们选用第一种方式来安装(简单)。
依赖环境安装
![5ebcf054eb9be8450aae695ce600631d.png](https://i-blog.csdnimg.cn/blog_migrate/cc0cfd55d419a85b7081a0c017a1674a.jpeg)
导入ELRepo公钥
![723450bf93c5ba77049171f14b31b20b.png](https://i-blog.csdnimg.cn/blog_migrate/66f7d55bcf311b1f454d4cc5edc30a74.jpeg)
安装ELRepo
![7940cb1ef7e2fa5a20ce5c0836b0f5c9.png](https://i-blog.csdnimg.cn/blog_migrate/4435640c219ea62dabc548208319209b.jpeg)
安装fastestmirror插件来加快下载速度
![2e320b5911adebb8d644ab6376269a0e.png](https://i-blog.csdnimg.cn/blog_migrate/15febddbd7be5d564a25ab4c8cd01001.jpeg)
屏蔽自带的显卡驱动
打开/lib/modprobe.d/dist-blacklist.conf,将nvidiafb注释掉。然后添加以下语句:blacklist nouveau
options nouveau modeset=0
![76886ba698178ce71a3eee416a88c56f.png](https://i-blog.csdnimg.cn/blog_migrate/6d8f37385104bda797a3cf5fed8fd39f.jpeg)
重建initramfs image
![e09660cbc8b59d0d19795b2cde958208.png](https://i-blog.csdnimg.cn/blog_migrate/831c1ed9adde5eb5d28092ec31264dad.jpeg)
重启电脑,ls mod | grep nouveau查看nouveau是否已经禁用,若没有任何输出表示禁用成功。
安装检查显卡程序
sudo yum install nvidia-detect
检查显卡情况
![8f1591c8c14a199fdcfa19b5e8cb1691.png](https://i-blog.csdnimg.cn/blog_migrate/70a223aa9eaf80e864283291e0f75ce1.jpeg)
根据 nvidia-detect 的输出信息,可以知道显卡的型号,以及要使用的驱动版本 390.67
自动匹配驱动安装
yum -y install kmod-nvidia
重启电脑安装就完成啦!
2 cuda-8.0安装
cuda安装比较简单,只需要从英伟达官网下载对应cuda安装包,并运行即可,对应安装包如下:
![43afd182750321988c00a8259a5eb0a9.png](https://i-blog.csdnimg.cn/blog_migrate/c8f18691f3143c6d8cf5ab4a42fcbcfd.jpeg)
运行安装
![381720644f88d2c32e622588f615c7ea.png](https://i-blog.csdnimg.cn/blog_migrate/f8e1a066a3e39e75804100539dddf928.jpeg)
配置环境变量
vim ~/.bashrc
![3dba35f2ffeaee7b4f746fe11a8343b0.png](https://i-blog.csdnimg.cn/blog_migrate/5f2ca5361db454e60746ec3b52cb089f.jpeg)
环境变量生效
source ~/.bashrc
查看安装结果
![ff2d2d2de058d72fbcf3316083a91f4c.png](https://i-blog.csdnimg.cn/blog_migrate/ce37aa9db0bab7b18a3554ef188d8265.jpeg)
3 faiss-gpu源码包编译
faiss-gpu源码包编译前必须保证openblas已经安装并且软链接已经创建。
GPU源码编译
进入faiss目录,并运行 cd gpu
make
编译完成后,进行示例代码测试:
make test/demo_ivfpq_indexing_gpu
./test/demo_ivfpq_indexing_gpu
![12a7e7861ba6c48adb2003414ffd0881.png](https://i-blog.csdnimg.cn/blog_migrate/6d9b2534beae3db63aa4f8e60a6cc596.jpeg)
faiss-gpu python接口编译
cd gpu
make py
测试
python –c “import faiss”
4 conda安装faiss
Anaconda安装faiss的cpu和gpu版本比较简单,但是值得注意的是,经小编实测,在anconda仓库中安装的最新代码只能在anconda3上正常运行,在anconda2上面经测试不能正常运行。也就是说,最新的anconda上的faiss包对python2支持的并不好,所以这里我们安装anconda3并配置如下anconda环境变量。
![fed88dfb433ea4984e8e13e50e5fb1fd.png](https://i-blog.csdnimg.cn/blog_migrate/ea1a250fe459bae7c70852d5820cbb14.jpeg)
Openblas的安装和软链接创建同CPU版本,这里不再赘述。
faiss-cpu版本安装
conda install faiss-cpu -c pytorch
faiss-gpu版本安装(默认cuda-8.0版本)
conda install faiss-gpu -c pytorch
测试
![8911a9b0bacea9e91e4d77db3c5205e5.png](https://i-blog.csdnimg.cn/blog_migrate/017069ccd3394dc0afa964f7fbd91973.jpeg)
经anconda安装后faiss可直接在python中像其他库一样使用,而不必像源码包编译完成后一样只能在faiss的编译文件目录下运行。
5 faiss-gpu入门实例
小编用如下代码测试faiss-gpu代码。
![a2e67dbff6d2e85bbba5f68ea49cf324.png](https://i-blog.csdnimg.cn/blog_migrate/b81400cdb939777753b97ce9ecb4a450.jpeg)
在小编双显卡环境下,用IVFFlat检索图中所示数据,相似最近邻单次检索的平均时长仅为0.197ms,小编不得不感慨GPU强大的计算能力。
本篇内容在本人个人公众号上也已发布,欢迎关注本人微信公众号“勤菜鸟”。
Reference
- https://blog.csdn.net/u010641294/article/details/72820772
- https://github.com/facebookresearch/faiss/blob/master/INSTALL.md
- https://blog.csdn.net/u013378306/article/details/69229919
- https://github.com/facebookresearch/faiss/wiki/Running-on-GPUs