昇腾社区首页
EN
注册

安装Faiss

安装须知

  • 请在安装Faiss之前,完成OpenBLAS的安装,具体安装步骤请参见安装OpenBLAS
  • 当前发布的特征检索依赖于Faiss v1.7.4执行构建和发布,推荐用户使用对应版本的Faiss,在此处仅提供Faiss v1.7.4的安装参考,具体安装步骤请以实际Faiss版本和环境为准。
  • 如果是Arm平台,编译安装Faiss前请根据gcc版本适配Faiss源码。
  • Arm平台上,部分旧版本的gcc(如4.8.5等)不支持直接编译faiss-1.7.4,部分旧版本的编译器不支持“simdlib_neon.h”的相关实现,需要改用默认CPU上的simd实现,使用该方法时功能可以正常运行,但是部分Index算法(IVF类、SQ类等)会出现较大性能退化。推荐使用gcc7.5.0进行编译和安装,高于gcc9.5.0版本可能出现兼容性问题。

操作步骤

  1. 下载faiss源码包并解压。
    1
    2
    3
    # faiss 1.7.4
    wget https://github.com/facebookresearch/faiss/archive/v1.7.4.tar.gz
    tar -xf v1.7.4.tar.gz && cd faiss-1.7.4/faiss
    
  2. 创建install_faiss_sh.sh脚本。
    vi install_faiss_sh.sh
  3. 在install_faiss_sh.sh脚本中写入如下内容。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    # modify source code
    # 步骤1 修改faiss源码
    arch="$(uname -m)"
    if [ "${arch}" = "aarch64" ]; then
      gcc_version="$(gcc -dumpversion)"
      if [ "${gcc_version}" = "4.8.5" ];then
        sed -i '20i /*' utils/simdlib.h
        sed -i '24i */' utils/simdlib.h
      fi
    fi
    sed -i "131 i\\
        \\
        virtual void search_with_filter (idx_t n, const float *x, idx_t k,\\
                                         float *distances, idx_t *lables, const void *mask = nullptr) const {}\\
    " Index.h
    sed -i "38 i\\
        \\
    template <typename IndexT>\\
    IndexIDMapTemplate<IndexT>::IndexIDMapTemplate (IndexT *index, std::vector<idx_t> &ids):\\
        index (index),\\
        own_fields (false)\\
    {\\
        this->is_trained = index->is_trained;\\
        this->metric_type = index->metric_type;\\
        this->verbose = index->verbose;\\
        this->d = index->d;\\
        id_map = ids;\\
    }\\
    " IndexIDMap.cpp
    sed -i "29 i\\
        \\
        explicit IndexIDMapTemplate (IndexT *index, std::vector<idx_t> &ids);\\
    " IndexIDMap.h
    sed -i "199 i\\
      utils/sorting.h
    " CMakeLists.txt
    # modify source code end
    cd ..
    ls
    # 步骤2 faiss编译配置
    cmake -B build . -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
    # 步骤3 编译安装
    cd build && make -j && make install
    cd ../.. && rm -f v1.7.4.tar.gz && rm -rf faiss-1.7.4
    
  4. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  5. 下载Faiss源码压缩包并解压安装。
    bash install_faiss_sh.sh
    • 编译该Faiss 1.7.4需要CMake的版本不低于CMake 3.23.1,如果编译Faiss时提示CMake版本过低,请参考编译Faiss 1.7.4时提示CMake的版本过低解决。
    • Faiss默认安装目录为“/usr/local/lib”,如需指定安装目录,例如“install_path=/usr/local/faiss/faiss1.7.4”,,则在cmake编译配置加-DCMAKE_INSTALL_PREFIX=${install_path}选项即可。
      1
      2
      install_path=/usr/local/faiss/faiss1.7.4
      cmake -B build . -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${install_path}
      
  6. 配置系统库查找路径的环境变量。

    动态链接依赖Faiss的程序在运行时需要知道Faiss动态库所在路径,需要在Faiss的库目录加入“LD_LIBRARY_PATH”环境变量。

    1
    2
    3
    4
    5
    6
    # 配置/etc/profile
    vim /etc/profile
    # 在/etc/profile中添加: export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    # /usr/local/lib是Faiss的安装目录,如果安装在其他目录下,将/usr/local/lib替换为Faiss实际安装路径,部分操作系统和环境中,faiss可能会安装在其他目录下。
    source /etc/profile
    cd ..
    
  7. 验证是否安装成功。
    1
    cat /usr/local/share/faiss/faiss-config-version.cmake |grep 'PACKAGE_VERSION "'
    

    如果正确显示软件的版本信息,则表示安装成功。