美文网首页
手把手教你安装Faiss(Linux)

手把手教你安装Faiss(Linux)

作者: woaww | 来源:发表于2018-11-18 21:22 被阅读733次

    前言

    由于最近项目组引用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;"> image

    <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 字

    相关文章

      网友评论

          本文标题:手把手教你安装Faiss(Linux)

          本文链接:https://www.haomeiwen.com/subject/axhnfqtx.html