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版本可能出现兼容性问题。
- 执行以下命令下载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
- 进入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; }
- 在“faiss/Index.h”文件中的第118行(“search”接口声明之后)插入以下内容。
- 执行以下命令完成Faiss的编译配置。
cmake -B build -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=OFF -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
- 编译安装。
cd build make -j && make install
- 配置系统库查找路径,返回上层目录。
动态链接依赖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后报错解决。
父主题: 安装依赖