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. 适用于AbpBoilerplate的阿里云腾讯云Sms短信服务

    Sms 适用于AbpBoilerplate的短信服务(Short Message Service,SMS)模块,通过简单配置即可使用,仅更改一处代码即可切换短信服务提供商. Aliyun.Sms由阿里 ...

  2. import.meta.globEager('./src/components/**/*.vue'); 遍历文件

    main.js const importAll = (modules) => { Object.keys(modules).forEach((key) => { const compone ...

  3. Rust GUI库 egui 的简单应用

    目录 简介 简单示例 创建项目 界面设计 切换主题 自定义字体 自定义图标 经典布局 定义导航变量 实现导航界面 实现导航逻辑 实现主框架布局 调试运行 参考资料 简介 egui(发音为"e ...

  4. 基于BES2300芯片的开源DSP开发平台简述

    一 什么是开源DSP平台 所谓的开源DSP平台,就是软硬件全部开发接口,开发者可以在上面做DSP算法验证和算法开发.基于目前科研机构缺少开源的微型数字信号处理的情况,我们把bes2300的代码做了优化 ...

  5. idea的安装和无限期试用

    十年前在笔者开发的时候一直使用的是eclipse软件,但后来所有的发现公司基本用的是idea,还得重新学习idea用法,所以准备在去新公司前,来学习使用idea吧 第一步:安装idea https:/ ...

  6. EL表达式 参考手册

    一.EL简介 1.语法结构     ${expression} 2.[]与.运算符     EL 提供.和[]两种运算符来存取数据.     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或 ...

  7. Linux高级IO

    readv.writev API: #include <sys/uio.h> ssize_t readv(int fd, const struct iovec* vector, int c ...

  8. 24_用Qt和FFmpeg实现简单的YUV播放器

    前面文章FFmpeg像素格式转换中我们使用FFmpeg实现了一个像素格式转换工具类,现在我们就可以在Qt中利用QImage很容易的实现一个简单的YUV播放器了. 播放器功能很简单,只有播放.暂停和停止 ...

  9. verilog勘误系列之-->设计行为仿真和时序仿真不一致分析

    描述 最近在vivado中设计一个计算器: 28bit有符号加减法,结果出现行为仿真和时序仿真不一致情况 原因 本篇是由于组合逻辑部分敏感信号使用错误导致 代码 r_a, r_b : 对计算数据a, ...

  10. Adapter分组封装

    YCGroupAdapter 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 使用建议 03.常用a ...