Faiss 是 Facebook 开源的一套高效相似性搜索以及向量聚类的开发库,支持各类相似性搜索的算法,Faiss 项目本身是使用 C++ 编写的,但是提供 Python 的绑定,可以直接使用 numpy 类型操作,同时也支持使用 GPU 加速计算,下面介绍下 Faiss 的源码编译过程。

如果想仅使用 Python 进行开发,那么可以直接使用 pip 工具安装:

# 例如使用 pip3 安装
# 安装纯 CPU 版本, 不包含 GPU
pip3 install faiss-cpu
# 安装 GPU 版本 需要由 CUDA toolkit
pip3 install faiss-gpu

这样就可以无需编译,直接使用了。

下面主要来看下使用源码编译的情况,当前的编译环境如下:

  1. x86 CPU (如果是 ARM 可以参考 Wiki
  2. 操作系统:Ubuntu 20.04
  3. cmake 版本: 3.25.2 当前要求必须 3.17 以上
  4. gcc 版本 9.4.0
  5. Python 版本 3.8.10

    另外说明下,默认 APT 源中的 cmake 版本是 3.16.2 不符合要求,因此可以选择手动下载二进制版本的 cmake 安装或者使用第三方源,这个不再详细说明,gcc 版本直接使用系统自带的,同时 Python 也是系统自带的环境,本次编译没有开启 GPU 支持。

除了上面的基础环境外,还要有一些依赖保证,首先是要有 BLAS 库存在,可以使用下面的命令来安装:

apt install libblas-dev liblapack-dev
# 另外如果是 CentOS 则需要使用下面的命令安装 yum/dnf 都可以
yum --enablerepo=powertools install blas-devel lapack-devel

安装完成后,如果我们开启 Python 绑定则还需要安装必要的依赖: numpy 和 swig ,直接使用 pip 安装如下:

pip3 install numpy
pip3 install swig

如果不需要编译 Python 绑定则不需要安装。

这里我们没有启动 GPU 如果启用的话还必须要保证: nvcc 命令可用以及 CUDA toolkit 的正常安装。

准备完毕之后,接下来我们就可以开始编译了,首先要克隆下仓库的源码:

# faiss 仓库:https://github.com/facebookresearch/faiss
git clone https://github.com/facebookresearch/faiss.git
cd faiss

然后开始编译:

cmake -B build -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_PYTHON=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF .

上面 -DFAISS_ENABLE_GPU=OFF 表示关闭 GPU 支持,-DFAISS_ENABLE_PYTHON=ON 是开启了 Python 绑定,如果不需要可以设置为 OFF-DBUILD_SHARED_LIBS=ON 表示开启动态库,这样编译完成会生成 libfaiss.so 如果关闭会生成静态库 libfaiss.a-DCMAKE_BUILD_TYPE=Release 表示编译 Release 版本,会自动开启优化参数,最后 -DBUILD_TESTING=OFF 表示关闭测试,如果开启会自动下载 googletest 相关的包,需要保持网络通才可以。

执行完成开始编译:

# 开启 Python 依赖时执行
make -C build -j swigfaiss
# 正常不需要 Python 依赖可以执行
make -C build -j faiss

编译完成后可以进入目录:cd build/faiss ,然后可以看到存在动态库 libfaiss.so 如果没有开启动态库应该是 libfaiss.a ,如果开启 Python 后应该还有个 Python 目录,可以手动安装 Python 的依赖:

cd python
python3 setup.py install

然后就可以试一下是否可以导入依赖。

如果要使用 C++ 开发,要把头文件和动态库等安装到系统目录,这样可以直接引入:

make -C build install

默认头文件的安装位置是:/usr/local/include 下,动态库是:/usr/local/lib 下面,这样开发的时候就可以方便使用,如果是发布可执行文件,那么头文件就不需要了,只需要打包时带着动态库即可,如果是静态库可以直接编译到单个二进制文件中,目标环境只需要有上面说的基础依赖即可。

Reference:

  1. 官方安装文档
  2. 其他平台安装

Faiss 向量库编译安装的更多相关文章

  1. dpdk-18.11开发库编译安装

    简介 dpdk官网 安装 下载 点击下载地址,选择合适的版本下载.这里下载DPDK 18.11.0 (LTS)版本. 编译 将下载的dpdk-18.11.tar.xz上传服务器,解压,这里放在了/op ...

  2. Boost库编译安装

    一.Boost库介绍         Boost库是一个经过千锤百炼.可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一.Boost库由C++标准委员会库工作组成员发起,其 ...

  3. Ubuntu下dlib库编译安装

    安装libboost 按照dlib的说明安装始终不成功,参考machine learning is fun作者的指导installing_dlib_on_macos_for_python.md,需要首 ...

  4. 矩池云上编译安装dlib库

    方法一(简单) 矩池云上的k80因为内存问题,请用其他版本的GPU去进行编译,保存环境后再在k80上用. 准备工作 下载dlib的源文件 进入python的官网,点击PyPi选项,搜索dilb,再点击 ...

  5. php5.5编译安装

    系统环境:centos6.5PHP包:5.5.15https://wiki.swoole.com/wiki/page/177.html下载 PHP 源码包wget http://cn2.php.net ...

  6. FastDFS源码学习(一)FastDFS介绍及源码编译安装

    FastDFS是淘宝的余庆主导开发的一个分布式文件系统,采用C语言开发,性能较优.在淘宝网.京东商城.支付宝和某些网盘等系统均有使用,使用场景十分广泛. 下图来源:https://blog.csdn. ...

  7. 已安装php 编译安装 gd库拓展模块

    参考资料:http://wenku.baidu.com/link?url=EgXFShYxeJOZSYNQ_7RCBC-6X8OcRRCqVm4qCv49uBk57d6vLBoUpfYdQ-KqJRs ...

  8. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  9. centos7.2下编译安装&&使用-git代码库

    centos7.2下编译安装git Git简介 Git是一个分布式版本控制系统 Git vs SVN SVN是典型的集中式版本控制起,版本库集中存放在服务器,当我们用自己的电脑干活儿的时候,需要先从中 ...

  10. 烂泥:centos单独编译安装gd库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...

随机推荐

  1. IDEA使用与多线程

    IDEA缩写和快捷键 psvm全称public static void main sout 全称public static void main alt+enter 处理异常 s.out 自动打印s c ...

  2. Springboot中-全局异常处理类用法示例

    使用springboot搭建web项目的时候,一般都会添加一个全局异常类,用来统一处理各种自定义异常信息, 和其他非自定义的异常信息,以便于统一返回错误信息.下面就是简单的示例代码, 自定义异常信息. ...

  3. IIS web.config 跨域设置 不包含 options的设置 thinkphp tp3 跨域

    web.config <?xml version="1.0" encoding="UTF-8"?> <configuration> &l ...

  4. 【数据结构】哈夫曼树与哈夫曼编码(Huffman Encoding)

    一.背景 编码是信息处理的基础(重新表示信息). 普通的编码是等长编码,例如7位的ASCIL编码,对出现频率不同的字符都使用相同的编码长度.但其在传输和存储等情况下编码效率不高. 可使用不等长编码,来 ...

  5. 求正整数 n 的所有正因数的个数,qq 次询问。

    https://ac.nowcoder.com/acm/contest/22769/A 链接:https://ac.nowcoder.com/acm/contest/22769/A来源:牛客网 时间限 ...

  6. Tableau 绘制圆环图

    一.对应数据如下所示 二.打开tableau连接对应Excel数据源,将记录数字段连续拖动两次到行,显示设置按整个视图显示,标记里面设置按饼图显示 三.设置两个值按度量值平均值显示,并调整第一个图稍微 ...

  7. C# OpenCvSharp-HoughCircles(霍夫圆检测) 简单计数

    效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  8. 在ubuntu安装QT

    在ubuntu安装 安装motrix motrix下载 下载对应版本的QT QT下载 授权run文件 sudo chmod +x xxx.run 运行run文件 ./ xxx.run 运行界面 安装完 ...

  9. Windows线程API —CreateTimerQueueTimer/DeleteTimerQueueTimer的使用

    问题代码: 1 #include<windows.h> 2 #include<iostream> 3 #include<thread> 4 HANDLE h1; 5 ...

  10. 从0开始学杂项 第四期:隐写分析(3) GIF 图片隐写

    Misc 学习(四) - 隐写分析:GIF 图片隐写 在上一期,我主要讲了讲自己对于隐写分析中的 PNG 图片隐写的一些浅薄理解,这一期我们继续对隐写分析的学习,学习的是图片隐写中的 GIF 图片隐写 ...