手把手教你安装Faiss(Linux)

前言

由于最近项目组引用Faiss库(Faiss是由Facebook AI Research研发的为稠密向量提供高效相似度搜索和聚类的框架),百度上一搜一大波安装教程,大部分其实都是通过Faiss项目中的INSTALL.md来进行安装的,不过教程确实时间久远,又很多东西和INSTALL.md对不上,尝试了很多版本都没法成功安装,最后还是根据官方的INSTALL.md文档才把Faiss安装好的。(这个故事告诉我们编译源码最好是看官方文档,不要畏惧英文,毕竟谷歌翻译很强大哈哈)。

Linux软件编译基本知识

PS:这一部分自己也是一知半解,大家可以自行了解,仅对不太熟悉编译知识的同学进行普及。

正式安装之前先补充一些关于Linux上的开源软件安装流程知识,一般分为三步(./configure && make && make install):

  • ./configure 是用来检测你的安装平台的目标特性,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,在安装之前需要先运行configure命令设置一些参数来对安装进行控制,比如:./configure -prefix = /usr 意思是把该软件安装在/usr 下,有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。
  • make 就比较简单了,就是通过MAKEFILE 执行编译
  • make install 安装软件,一般是将编译好的库或者头文件放置到/usr/lib 或者/usr/local/lib、/usr/include、/usr/local/include中供其他使用

编译 Faiss(CentOS 7.4)

如果你只是想在python中使用Faiss库,只用看下文的第一点(利用Anaconda3构建开发环境即可),编译C++直接参考第二点)。

(1)利用Anaconda3直接安装Python环境

步骤一:安装anaconda3


# 下载
wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh

# 权限
chmod +x Anaconda3-5.3.0-Linux-x86_64.sh

# 安装
bash Anaconda3-5.3.0-Linux-x86_64.sh

复制代码

安装过程中需不需要加入环境变量选的是No就手工添加


# 编辑
vi $HOME/.bashrc

# 添加
export PATH="$HOME/anaconda3/bin:$PATH"

# 启用
source $HOME/.bashrc

复制代码

检查一下是否安装成功


conda list

复制代码

步骤二:安装Faiss-cpu /Faiss-gpu


# CPU version only
conda install faiss-cpu -c pytorch

# Make sure you have CUDA installed before installing faiss-gpu, otherwise it falls back to CPU version

conda install faiss-gpu -c pytorch # [DEFAULT]For CUDA8.0
conda install faiss-gpu cuda90 -c pytorch # For CUDA9.0
conda install faiss-gpu cuda91 -c pytorch # For CUDA9.1

# cuda90/cuda91 shown above is a feature, it does not install CUDA for you.

复制代码

(2)编译源码(C++环境)

步骤一:环境安装,安装gcc及g++


# 安装gcc:
yum install gcc 

# 安装g++:
yum install gcc-c++ (权限不够,用在root权限下安装)

# 查看gcc版本,如果是gcc4.8以下建议升级到gcc4.8
gcc -v

复制代码

步骤二:安装Faiss依赖的数学库(openblas 和 lapack,库的功能请自行百度)

  • 安装OpenBLAS

#没有安装git,先安装git,CentOS安装git
#yum install git

git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS

#如果没有安装gfortran
#yum install gcc-gfortran (unbuntu版 执行 sudo apt-get install gfortran)
make FC=gfortran

#将OpenBLAS安装在/opt下
make install

#之后将编译好的动态库链接至/usr/lib目录下
ln -s /opt/OpenBLAS/lib/libopenblas.so  /usr/lib/libopenblas.so

复制代码

在 /etc/profile中加入


LD_LIBRARY_PATH=/opt/OpenBLAS/lib
export LD_LIBRARY_PATH

复制代码
  • 安装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 

复制代码

这里的头文件包括: lapacke.h, lapacke_config.h, lapacke_mangling.h,lapacke_mangling_with_flags.h lapacke_utils.h

生成的库文件包括: liblapack.a, liblapacke.a, librefblas.a,libtmglib.a

步骤三:编译安装Faiss


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

# 进入FAISS源码目录.
cd faiss

# 根据系统配置编译环境. [Linux 为例]
cp example_makefiles/makefile.inc.Linux ./makefile.inc

复制代码

接着需要验证步骤二中两个数学库安装是否成功,需要执行BLAS测试用例


# 首先先执行./configure,看看环境是否符合编译条件,其中有一些不是必选项,一般管制输出日志的最后一句话有无错误即可
./configure

# 之后进行编译用例测试,若无报错即代表数学库安装成功
make misc/test_blas
./misc/test_blas

复制代码

接下来终于到了最终的编译安装Faiss的环节了,真的是不容易呀


# 执行最重要的make & make install
make
make install

复制代码

可以在项目根目录下看见编译好的静态库和动态库

步骤四:测试Faiss,参考INSTALL.md上的测试用例,这里就不赘述了

A bit longer example runs and evaluates Faiss on the SIFT1M dataset. To run it, please download the ANN_SIFT1M dataset from corpus-texmex.irisa.fr/ and unzip it to the subdirectory sift1M at the root of the source directory for this repository. Then compile and run the following (after ensuring you have installed faiss):

make demos

./demos/demo_sift1M

This is a demonstration of the high-level auto-tuning API. You can try setting a different index_key to find the indexing structure that gives the best performance.

结束语

至此,Faiss-CPU版本编译工作就完成了,自己之前也没真正接触过开源项目的源码编译,对linux makefile也不熟悉,其实这次实践花了不少时间,最重要还是要理解Linux 开源软件的编译流程,按照这种逻辑一定能编译出来的。

之后会开始阅读源码以及一些基本的使用技巧,不定期更新,毕竟我也是个萌新哈哈哈。

致谢

部分内容参考一下链接,没有和作者取得联系就直接使用了,这里表示感谢一下 blog.csdn.net/baiyang3/ar… 作者:baiyang3 blog.csdn.net/u013017173/… 作者:枫依流水

转载于:https://juejin.im/post/5bed7cebe51d454e5b5f2c23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值