安装 Faiss
标准安装方式
我们支持通过 CMake 从源码编译 Faiss,以及在有限平台通过 Conda 安装:仅支持 Linux(x86 和 ARM 架构)、Mac(x86 和 ARM 架构)、Windows(仅 x86)。 详情可参见 INSTALL.md。
为什么不支持通过 XXX 方式安装?
由于要保证 Faiss 在支持的配置下可以稳定运行,支持更多平台的维护成本非常高。每当我们为 Faiss 发布新版本并构建 Conda 包时,经常会遇到兼容性问题。Anaconda 能提供足够可控的环境,让我们确信它能在用户机器上正确运行(而 pip 通常无法做到这样)。 此外,硬件和操作系统平台必须得到我们的持续集成(CI)工具(如 CircleCI)的支持。
因此,在正式支持新的平台(包括硬件和软件)之前,我们会非常谨慎。
我们非常欢迎大家分享将 Faiss 移植到其他平台的经验,无论成功还是失败!相关的 Pull Request(PR)也非常欢迎。
特殊配置
在 Anaconda 环境下编译 Python 接口
使用 Anaconda 安装和配置所有依赖项,并让 Faiss 直接链接 Anaconda 环境中的库。这可以确保使用英特尔 MKL(数学核心库)达到最佳性能。
以下是详细步骤:
source ~/anaconda3/etc/profile.d/conda.sh
conda activate host_env_for_faiss # 激活包含 python 和 numpy 的环境
git clone https://github.com/facebookresearch/faiss.git faiss_xx
cd faiss_xx
LD_LIBRARY_PATH= MKLROOT=/private/home/matthijs/anaconda3/envs/host_env_for_faiss/lib CXX=$(which g++) \
$cmake -B build -DBUILD_TESTING=ON -DFAISS_ENABLE_GPU=OFF \
-DFAISS_OPT_LEVEL=axv2 \
-DFAISS_ENABLE_C_API=ON \
-DCMAKE_BUILD_TYPE=Release \
-DBLA_VENDOR=Intel10_64_dyn .
make -C build -j10 swigfaiss && (cd build/faiss/python ; python3 setup.py build)
(cd tests ; PYTHONPATH=../build/faiss/python/build/lib/ OMP_NUM_THREADS=1 python -m unittest -v discover )
建议提前创建并激活包含 python 和 numpy 的 Anaconda 虚拟环境,以避免依赖冲突问题。
在 ARM 架构上编译 Faiss
以下以在 Amazon EC2 c6g.8xlarge(Ubuntu 18 系统,ARM 架构)为例给出步骤:
set -e
sudo apt-get install libatlas-base-dev libatlas3-base
sudo apt-get install clang-8
sudo apt-get install swig
# 系统自带的 cmake 版本过旧,需手动安装新版
wget https://github.com/Kitware/CMake/releases/download/v3.19.3/cmake-3.19.3.tar.gz
tar xvzf cmake-3.19.3.tar.gz
cd cmake-3.19.3/
./configure --prefix=/home/matthijs/cmake && make -j
cd $HOME
alias cmake=$HOME/cmake/bin/cmake
# 克隆 Faiss 源码
git clone https://github.com/facebookresearch/faiss.git
cd faiss
cmake -B build -DCMAKE_CXX_COMPILER=clang++-8 -DFAISS_ENABLE_GPU=OFF -DPython_EXECUTABLE=$(which python3) -DFAISS_OPT_LEVEL=generic -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON
(cd build/faiss/python/ ; python3 setup.py build)
# 执行测试
export PYTHONPATH=$PWD/build/faiss/python/build/lib/
python3 -m unittest discover
对于 ARM 环境,部分依赖项(如 cmake)需手动编译安装。请提前确保网络顺畅,并预留充足的磁盘空间。
常见问题与注意事项
在部分平台或者定制化环境下,可能出现依赖项不兼容、库未找到等问题。请参考 INSTALL.md 或向社区寻求支持。
推荐优先使用 Conda 管理环境和安装依赖,这样可以简化大多数兼容性问题。
适用场景
- 大规模向量相似度检索与聚类
- 机器学习、深度学习模型的特征索引与召回
- 自然语言处理中的向量化检索
- 个性化推荐、图像检索等高性能场景
若需在非官方支持的平台上部署,可参考上述特殊配置小节,根据自身环境灵活调整编译参数。