下载
中文
注册

Faiss安装参考

  • 请在安装Faiss之前,完成OpenBLAS的安装,具体安装步骤请参见OpenBLAS安装参考
  • 当前发布的特征检索依赖于Faiss v1.7.1执行构建和发布,推荐用户使用对应版本的Faiss,在此处仅提供Faiss v1.7.1的安装参考,具体安装步骤请以实际Faiss版本和环境为准,在执行步骤2之后请按照如下的方式对Faiss进行修改。
    • 如果是Arm平台,编译安装Faiss前请根据gcc版本适配Faiss源码。
    • Arm平台上,部分旧版本的gcc(如4.8.5等)不支持直接编译faiss-1.7.1,部分旧版本的编译器不支持“simdlib_neon.h”的相关实现,需要改用默认CPU上的simd实现,使用该方法时功能可以正常运行,但是部分Index算法(IVF类、SQ类等)会出现较大性能退化。推荐使用gcc7.5.0进行编译和安装,高于gcc9.5.0版本可能出现兼容性问题。
  1. 执行以下命令下载Faiss源码压缩包并解压。(编译该Faiss需要CMake的版本不低于CMake 3.17。)
    wget https://github.com/facebookresearch/faiss/archive/refs/tags/v1.7.1.tar.gz
    tar -xf v1.7.1.tar.gz
  2. 进入Faiss目录。
    cd faiss-1.7.1
    • “faiss/Index.h”文件中的第118行(“search”接口声明之后)插入以下内容。
      virtual void search_with_filter (
         idx_t n,
         const float *x,
         idx_t k,
         float *distances,
         idx_t *lables,
         const void *mask = nullptr) const {}
      
    • “faiss/MetaIndexes.h”文件中的第33行(“IndexIdMapTemplate”接口的声明之后)插入以下内容。
      explicit IndexIDMapTemplate (IndexT *index, std::vector<idx_t> &ids);
    • “faiss/MetaIndexes.cpp”文件中的第39行(“IndexIDMapTemplate”接口的定义之后)插入以下内容。
      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;
      }
  3. 执行以下命令完成Faiss的编译配置。
    cmake -B build  -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
  4. 编译安装。
    cd build
    make -j && make install
  5. 配置系统库查找路径,返回上层目录。

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

    # 配置/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 ..

如果在openEuler系统中编译Faiss后报错,请参见在openEuler系统中编译Faiss后报错解决。