安装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版本可能出现兼容性问题。
操作步骤
- 创建install_faiss_sh.sh脚本。
vi install_faiss_sh.sh
- 在install_faiss_sh.sh脚本中写入如下内容。
# faiss 1.7.4 # 步骤1 下载faiss源码包并解压 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 # modify source code # 步骤2 修改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 # 步骤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 cd ../.. && rm -f v1.7.4.tar.gz && rm -rf faiss-1.7.4
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 下载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}选项即可。
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}
- 配置系统库查找路径的环境变量。
动态链接依赖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 ..
- 验证是否安装成功。
cat /usr/local/share/faiss/faiss-config-version.cmake |grep 'PACKAGE_VERSION "'
如果正确显示软件的版本信息,则表示安装成功。
- 如果在openEuler系统中编译Faiss后报错,请参见在openEuler系统中编译Faiss后报错解决。
- 如果需要将Faiss版本从1.7.1升级到1.7.4,请参考从Faiss 1.7.1版本升级到Faiss 1.7.4。
父主题: 安装依赖