2018-03-29 | Vector Search | UNLOCK

Fun with Faiss

Introduction

Faiss(Fast AI similarity search) 是Facebook开源的一款基于dense vector快速search 和clustering的工具。底层基于C++实现,用python做封装,而且部分算法为GPU实现。本文主要记录Faiss的安装过程,Faiss随提供了python包,但是要基于conda,而conda在实际中用的较少,所以采用源码编译安装,并编译python接口。

Install

Faiss提供了INSTALL 说明,它依赖于OpenBLAS/LAPACK,因此需实现安装。编译过程分为三个步骤

  • 编译C++ core 和examples
  • 编译python 接口
  • 编译GPU部分

需要注意的是后面两步依赖于第一步的成功编译。

Install OpenBLAS/LAPACK

  • OpenBLAS 安装
1
2
3
4
5
6
7
8
9
10
11
wget http://www.netlib.org/blas/blas.tgz
tar zxf blas.tgz
cd blas.tgz
// 32位系统
gfortran -O2 -std=legacy -fno-second-underscore -c *.f
// 64 为系统
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f
ar r libfblas.a *.o
ranlib libfblas.a
rm -rf *.o // 清理文件
export BLAS=~/src/BLAS-3.5.0/libfblas.a //导出BLAS环境变量
  • LAPACK
1
2
3
4
5
6
7
8
9
10
11
12
13
wget http://www.netlib.org/lapack/lapack.tgz
tar zxf lapack.tgz
cd lapack-3.8.0/
cp INSTALL/make.inc.gfortran make.inc # On Linux with lapack-3.2.1 or newer
make lapacklib
// 注意:在执行make lapacklib之前,编辑make.inc文件,给OPTS和NOOPT这两个设置都加上-fPIC选项。如果是64位系统,还需要加上-m64选项。修改后,看起来像这样:
FORTRAN = gfortran
OPTS = -O2 -frecursive -fPIC -m64
DRVOPTS = $(OPTS)
NOOPT = -O0 -frecursive -fPIC -m64
LOADER = gfortran
make clean # 清理文件
export LAPACK=~/src/lapack-3.8.0/ # 导出LAPACK环境变量
  • 测试BLAS/Lapack
1
2
3
make tests/test_blas

./tests/test_blas

至此前期的依赖已经完成,下面可以按照文档的安装进行,注意python接口编译完成之后需要将路径加载到系统路径,否则只能在编译所在目录使用,gpu版本编译的时候需要注意cuda的版本,避免和现有版本起冲突。

评论加载中