在多个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测试

 
1.jpg

如图所示数据为1M个,中心点为1K个。

在不同数据维度以及GPU数目下迭代20次所需要的时间。

三、暴力搜索测试

数据集为sift1M, 该数据集共1M个,128维。(运行在两个K40M GPU上)

 
2.jpg
 
3.jpg

可以看到在每次查询10K个数据的1024个最近邻居时平均每个查询只需360ns。当需要查询的邻居数下降时,查询时间能够降至100ns。

四、IVFPQ搜索测试

数据集同上,运行环境同上。

基本参数:

numCentroids=4096
numQuantizers=64

首先我们测试nprob对性能的影响

 
4.jpg

当nprob上升时, 每次查询时间会增加, 同时查询的准确度也会上升。但上升到一定程度上升幅度便会迅速变小。我们取准确度的拐点值nprob=32进行下一步测试。

接下来我们测试查询的邻居数即k值对性能的影响。

 
5.jpg

可以看到查询时间不再是线性增长了。也就意味着对于IVFPQ邻居数不宜太多。

选定k=32进行下一步测试。

 
6.jpg

如图所示,随着每次查询的数量上升,平均查询时间先变小在变大,这可能是由于数据量小时开销比较大导致平均查询时间较大。可以看到随着查询的数量上升, 平均查询时间上升但上升幅度放缓,估计会在250ns左右稳定。

 

作者:momo猪
链接:https://www.jianshu.com/p/4fb45b9070d1
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Faiss学习:一的更多相关文章

  1. faiss学习

    faiss 学习 github wiki 介绍 Faiss:Facebook开源的相似性搜索类库 安装 在Mac系统编译安装Faiss faiss教程跟进--Makefile 编译 faiss安装 m ...

  2. Faiss的学习和入门文章

    可以看这里的文章: https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html https://waltyou.github.io/Faiss ...

  3. faiss索引基于数量级和内存限制的选择

    它是一个能使开发者快速搜索相似多媒体文件的算法库.而该领域一直是传统的搜索引擎的短板.借助Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search ...

  4. Searching with Deep Learning 深度学习的搜索应用

    本文首发于 vivo 互联网技术微信公众号 https://mp.weixin.qq.com/s/wLMvJPXXaND9xq-XMwY2Mg作者:Eike Dehling翻译:杨振涛 本文由来自 T ...

  5. Faiss教程:索引(1)

    索引是faiss的关键知识,我们重点介绍下. 索引方法汇总 有些索引名,我就不翻译了,根据英文名去学习更准确. 索引名 类名 index_factory 主要参数 字节数/向量 精准检索 备注 精准的 ...

  6. 揭开Faiss的面纱 探究Facebook相似性搜索工具的原理

    https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html 本月初雷锋网报道,Facebook 开源了 AI 相似性搜索工具 Faiss.而在 ...

  7. 阿里Tree-based Deep Match(TDM) 学习笔记

    阅读文献:https://zhuanlan.zhihu.com/p/35030348 参考文献:https://www.leiphone.com/news/201803/nlG3d4sZnRvgAqg ...

  8. Youtube深度学习推荐系统论文

    https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf https://zh ...

  9. Faiss流程与原理分析

    1.Faiss简介 Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索库.它包含多种搜索任意大 ...

随机推荐

  1. 课下测试ch17&ch18

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

  2. 【洛谷】4310: 绝世好题【二进制DP】

    P4310 绝世好题 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入输出格式 输入格式: 输入文件共2行 ...

  3. 216. 组合总和 III

    216. 组合总和 III 题意 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的 ...

  4. Windows下C语言调用dll动态链接库

    dll是windows下的动态链接库文件,下面记录一下在windows下如何调用C语言开发的dll动态链接库. 1.dll动态链接库的源代码 hello_dll.c #include "st ...

  5. Codeforces Round #355 (Div. 2) A. Vanya and Fence 水题

    A. Vanya and Fence 题目连接: http://www.codeforces.com/contest/677/problem/A Description Vanya and his f ...

  6. hihocoder #1015 KMP

    #include<stdio.h> #include<iostream> #include<math.h> #include<string.h> usi ...

  7. empireCMS 帝国cms功能总结

    上1 系统 对应左菜单为 系统设置 系统参数设置 基本属性 站点名称,网站地址,关键字,简介,首页模式,php时间, 前台功能,操作时间,来源地址,验证码 用户属性 后台验证码开启,次数限制,时间限制 ...

  8. 解析本内置Linux目录结构

    使用声明:1.此版本采用官方原版ISO+俄罗斯HunterTik 的Debian包制作而成2.此IMG包未进行Crack,资源来源于网络,如果你下载的是Crack版,与原作者无关,请自行分辨.“就看人 ...

  9. android手机安全:被攻陷的一个场景

     到处找WIFI,对于我们的手机控来说是相当普遍的了.假设你发现了有可用的wifi,并选择了浏览器连接,当浏览器出现一个web 页面的时候,你可能已经中招了. 相同,当你的手机使用一些免费应用的时候, ...

  10. jQuery碎语(4) 实用函数

    6.实用函数 ● 修剪字符串 $('#id').val($.trim($('#someid').val())) ● 遍历集合 可能这样写: var anArray = ['one','two']; f ...