Faiss学习:一
在多个GPU上运行Faiss以及性能测试
一、Faiss的基本使用
1.1在CPU上运行
Faiss的所有算法都是围绕index展开的。不管运行搜索还是聚类,首先都要建立一个index。
import faiss
# make faiss available
index = faiss.IndexFlatL2(d)
# build the index
# d is the dimension of data
在运行上述代码后,就可以添加数据并运行搜索了。
index.add(xb)
# xb is the base data
D, I = index.search(xq, k)
# xq is the query data
# k is the num of neigbors you want to search
# D is the distance matrix between xq and k neigbors
# I is the index matrix of k neigbors
1.2在单个GPU上运行
在单个GPU上运行的语法基本与在GPU上运行类似。但是需要申明一个GPU资源的标识.
res = faiss.StandardGpuResources()
# we need only a StandardGpuResources per GPU
flat_config = 0
# flat_config is an ID. if you have 3 GPUs, flat_configs maybe 0, 1, 2
index = faiss.GpuIndexFlatL2(res, d, flat_config)
# build the index
index.add(xb)
D, I = index.search(xq, k)
1.3在多个GPU上运行
在多个GPU上运行时便有所不同, 我们需要将数据集分割给多个GPU以完成并行搜索。
在Faiss中提供了两种方法实现:IndexProxy和IndexShards。
下面着重介绍IndexProxy。
res = [faiss.StandardGpuResources() for i in range(ngpu)]
# first we get StandardGpuResources of each GPU
# ngpu is the num of GPUs
indexes = [faiss.GpuIndexFlatL2(res[i], i, d, useFloat16)
for i in range(ngpu)]
# then we make an Index array
# useFloat16 is a boolean value
index = faiss.IndexProxy()
for sub_index in indexes:
index.addIndex(sub_index)
# build the index by IndexProxy
二、kmeans测试

如图所示数据为1M个,中心点为1K个。
在不同数据维度以及GPU数目下迭代20次所需要的时间。
三、暴力搜索测试
数据集为sift1M, 该数据集共1M个,128维。(运行在两个K40M GPU上)


可以看到在每次查询10K个数据的1024个最近邻居时平均每个查询只需360ns。当需要查询的邻居数下降时,查询时间能够降至100ns。
四、IVFPQ搜索测试
数据集同上,运行环境同上。
基本参数:
numCentroids=4096
numQuantizers=64
首先我们测试nprob对性能的影响

当nprob上升时, 每次查询时间会增加, 同时查询的准确度也会上升。但上升到一定程度上升幅度便会迅速变小。我们取准确度的拐点值nprob=32进行下一步测试。
接下来我们测试查询的邻居数即k值对性能的影响。

可以看到查询时间不再是线性增长了。也就意味着对于IVFPQ邻居数不宜太多。
选定k=32进行下一步测试。

如图所示,随着每次查询的数量上升,平均查询时间先变小在变大,这可能是由于数据量小时开销比较大导致平均查询时间较大。可以看到随着查询的数量上升, 平均查询时间上升但上升幅度放缓,估计会在250ns左右稳定。
作者:momo猪
链接:https://www.jianshu.com/p/4fb45b9070d1
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Faiss学习:一的更多相关文章
- faiss学习
faiss 学习 github wiki 介绍 Faiss:Facebook开源的相似性搜索类库 安装 在Mac系统编译安装Faiss faiss教程跟进--Makefile 编译 faiss安装 m ...
- Faiss的学习和入门文章
可以看这里的文章: https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html https://waltyou.github.io/Faiss ...
- faiss索引基于数量级和内存限制的选择
它是一个能使开发者快速搜索相似多媒体文件的算法库.而该领域一直是传统的搜索引擎的短板.借助Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search ...
- Searching with Deep Learning 深度学习的搜索应用
本文首发于 vivo 互联网技术微信公众号 https://mp.weixin.qq.com/s/wLMvJPXXaND9xq-XMwY2Mg作者:Eike Dehling翻译:杨振涛 本文由来自 T ...
- Faiss教程:索引(1)
索引是faiss的关键知识,我们重点介绍下. 索引方法汇总 有些索引名,我就不翻译了,根据英文名去学习更准确. 索引名 类名 index_factory 主要参数 字节数/向量 精准检索 备注 精准的 ...
- 揭开Faiss的面纱 探究Facebook相似性搜索工具的原理
https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html 本月初雷锋网报道,Facebook 开源了 AI 相似性搜索工具 Faiss.而在 ...
- 阿里Tree-based Deep Match(TDM) 学习笔记
阅读文献:https://zhuanlan.zhihu.com/p/35030348 参考文献:https://www.leiphone.com/news/201803/nlG3d4sZnRvgAqg ...
- Youtube深度学习推荐系统论文
https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf https://zh ...
- Faiss流程与原理分析
1.Faiss简介 Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索库.它包含多种搜索任意大 ...
随机推荐
- LCT维护子树信息
有些题目,在要求支持link-cut之外,还会在线询问某个子树的信息.LCT可以通过维护虚边信息完成这个操作. 对于LCT上每个节点,维护两个两sz和si,后者维护该点所有虚儿子的信息,前者维护该点的 ...
- hash课堂测试补分博客
题目要求: 开放地址法: 概念: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入. 它的公式为: 解题过程(在下图中): 拉链法: ...
- MySQL: 查看一次SQL的执行时间都花在哪些环节上
select @@profiling -- 看看当前的session的profiling打开没有 set profiling = 1 -- 如果没打开,打开一下 -- 执行一些sql select c ...
- [Database] Redis 随笔
Redis 随笔 1. 特点 非关系数据库 non-relational database 内存数据库 高性能 主从复制 可持久化存储 发布与订阅 支持脚本 2. 数据类型5种 STRING 可以是字 ...
- 吐槽Windows 8,就没见过这么烂的平板操作系统
本文带有严重个人情感色彩,反感者慎入. CSDN 博文大赛得了个奖品,联想的平板电脑, MIIX2 8 .系统是 Windows 8 . 今天媳妇再次使用它,惹得我再次吐槽. 一句话.Windows ...
- MFC绘制直方图和饼图
转载原文: Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNorma ...
- Nginx 作为反向Proxy 的优化要点
原文地址:http://my.oschina.net/hyperichq/blog/405421 常用优化要点 当nginx用于反向代理时,每个客户端将使用两个连接: 一个用于响应客户端的请求,另一个 ...
- 常用VPS测试工具整理
来源: http://www.vpser.net/manage/vps-test-tool.html 购买VPS前主要是使用一些网络测试工具如ping.tracert.WinMTR之类的工具进行测试, ...
- FitLayout
<HTML> <HEAD> <TITLE>布局</TITLE> <link rel="stylesheet" type=&qu ...
- C#中使用NLua z
直接下载NLua编译好的版本在c#项目中使用,运行的时候会提示无法加载lua52.dll,但lua52.dll这个文件又是在运行目录下的. 其实NLua不是无法加载lua52.dll本身,而是找不到l ...