faiss技术分享

Faiss 介绍

•Faiss由Facebook AI Research开发;

•用于高效相似性搜索和密集矢量聚类的库;

•包含可搜索任意大小的向量集的多种算法;

•Faiss用C ++编写,带有完整的Python包装;

•通过CUDA提供单GPU和多GPU支持;

相似性搜索

•基于十亿级别的高维向量数据集,构建最近邻搜索算法实现;

•不仅返回最近的,还返回第2个,第3个,...,第k个最近的邻居;

•支持一次搜索多个向量(批量搜索),而不仅一次搜索一个向量;

•允许一定错误的基础上,提供时间换空间,或空间换时间搜索;

组件安装
•gfortran:yum install gcc-gfortran,下载并安装;gfortran --version查看版本;
•OpenBLAS(基础线性代数子程序库),https://github.com/xianyi/OpenBLAS,so库复制到系统路径下;
•faiss,git clone https://github.com/facebookresearch/faiss.git,执行./configure --without-cuda,make,复制so及h文件;

IndexFlatL2(精确索引)
精确索引通过遍历计算来查询向量与被查询向量的L2精确距离,在构建索引时需提供向量维数作为参数(不需要训练操作),构建完成后可以通过add添加数据和search查询数据;

IndexIVFFlat(倒排索引)
•倒排索引需要对数据做预处理来提高索引效率,将数据库向量通过聚类方法分割成若干类,查询时选择距离最近的类中心,在类中采用精确方法查询,通过增加相邻类查询来提高精确度;
•nlist参数控制将数据集向量聚类的总数,nprobe参数控制在多少个类范围内进行查询,伴随nprobe参数值增加,精度值增加,同时时间开销增加,当nprobe=nlist时,与IndexFlatL2索引等效;

IndexIVFPQ(乘积量化索引)
•当数据量非常大超出内存限制时,采用乘积量化方法保存原始向量的有损压缩形式,创建索引的时候需要指定量化器的个数与每个量化器编码字节长度;
•在查询阶段返回的结果是近似值,实验显示,乘积量化后查询返回的距离值与真实值相比偏小,此外,索引的初始化过程的耗时也比较久一些;

faiss/tutorial/python/1-Flat.py

索引创建

索引查询

官方性能


•Deep1B 数据集上测试,30%的1-recall@1,在每向量0.5ms左右的时间,40%的1-recall@1,少于每向量2ms的检索时间,以2ms的检索时间计算,单核可达到500 QPS;
•与业内最先进的研究相比,Babenko 和 Lempitsky 在 CVPR 2016 上发表的论文:“Efficient Indexing of Billion-Scale Datasets of Deep Deors”显示需要 20 ms 来获取 45% 的 1-recall@1
•单个 GPU 的速度一般比 CPU 快五到十倍,新的帕斯卡架构 GPU 硬件,比如英伟达 P100,快 20 倍有余;

Faiss serving<Faiss扩展>
•服务端采用C++语言开发,采用libevent构建基础服务,支持tcp和http两种请求方式;
•向量模型文件保存在conf路径下,文章id加类型作为主键,200维浮点型坐标作为值;
•log4cpp日志配置保存在conf路径下,定义了过程详情和流程耗时两类日志,按天滚动;
•向量模型在服务启动的时候初始化加载,暂不支持动态更新热加载(2020年1月);
•支持三种模型类型:精确索引、倒排索引和乘积量化索引,在服务启动时由参数指定;
•数据传输采用protobuf组件序列化和反序列化,在MyFaiss.proto文件中定义;

请求协议<Faiss扩展>

应答协议<Faiss扩展>

启动参数<Faiss扩展>
•-l or --log:日志配置文件路径;
•-m or --model:模型文件存储路径
•-f or --faiss:索引类型设置
•-p or --port:主服务监听端口
•-s or --server:主服务协议类型
•-v or --version:当前服务版本
•-h or --help:打印帮助信息

流程日志<Faiss扩展>

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值