前言
由于最近项目组引用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
可以在项目根目录下看见编译好的静态库和动态库
<figure style="box-sizing: border-box; display: block; margin: 2em auto; text-align: center;"><figcaption style="box-sizing: border-box; display: block; text-align: center; font-size: 0.8em; line-height: 2em; color: rgb(144, 144, 144);"></figcaption>
</figure>
步骤四:测试Faiss,参考INSTALL.md上的测试用例,这里就不赘述了
A bit longer example runs and evaluates Faiss on the SIFT1M dataset. To run it, please download the ANN_SIFT1M dataset fromhttp://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 开源软件的编译流程,按照这种逻辑一定能编译出来的。
之后会开始阅读源码以及一些基本的使用技巧,不定期更新,毕竟我也是个萌新哈哈哈。
致谢
部分内容参考一下链接,没有和作者取得联系就直接使用了,这里表示感谢一下https://blog.csdn.net/baiyang3/article/details/52790793 作者:baiyang3https://blog.csdn.net/u013017173/article/details/81748168#2-安装openblas的步骤 作者:枫依流水
预览
1694 字