简介

指令是计算机程序给计算机处理器的命令。在最低级别上,每条指令是一个 0 和 1 的序列,描述了计算机要执行的物理操作。在计算机的汇编器语言中,每条语言语句一般对应一条处理器指令。CPU 依靠指令来计算和控制系统,指令执行能力是衡量 CPU 性能的重要指标。指令集也与 CPU 效率有密切关系。

Advanced Vector Extensions(AVX)是 x86 架构微处理器中的指令集,由英特尔在 2008 年 3 月提出,并在 2011 年发布的 Sandy Bridge 系列处理器中首次支持。AVX 指令集提供了新的特性、指令和编码方案。AVX2 指令集将大多数整数命令操作扩展到 256 位,并引入了熔合乘法累积(FMA)运算。AVX-512 则使用新的 EVEX 前缀编码将 AVX 指令进一步扩展到 512 位。

Milvus 是一款开源的向量相似度搜索引擎,支持使用多种 AI 模型将非结构化数据向量化,并为向量数据提供搜索服务,可广泛应用于图像处理、机器视觉、自然语言处理、语音识别以及推荐系统。 从 0.7.0 版本开始,Milvus 新增了对 AVX-512 指令集的支持。Milvus 理论上可支持所有包含 AVX-512 指令集的 CPU。本文将介绍和分析 Milvus 不同索引类型在 AVX-512 和 AVX2 两种指令上的性能表现。

性能对比

配置

  • CPU: Intel(R) Platinum 8163 CPU @ 2.50GHz24 核 48 线程

  • Number of CPU: 2

  • Graphics card, GeForce RTX 2080Ti 11GB 4卡

  • Mem: 768GB

  • Disk: 2TB SSD

Milvus 参数 

  • cahce.cahe_size: 25, CPU 内存大小,用于缓存数据以加快查询速度。

  • nlist: 4096

  • nprobe: 128

Note: nlist 是使用客户端创建索引设置的参数,nprobe 则是进行搜索设置的参数。IVFLAT 和 SQ8 索引都是通过聚类算法把大量的向量划分成很多‘桶’,nlist 指的就是聚类时划分桶的总数。通过索引查询时,第一步先找到和目标向量最接近的若干个桶,第二步在这若干个桶里通过比较向量距离查找出最相似的 k 条向量。nprobe 指的就是第一步若干个桶的数量。

数据集 

本次我们所使用的是 SIFT10M 数据集,其包含了 1000 万条 128 维的向量,常被用于分析相应的近似最近邻搜索方法的性能。本次我们通过对比两种指令集在 nq = [1, 10, 100, 500, 1000] 时的 top-1 检索时间,对两种指令集进行性能比对。

向量索引 

向量索引是通过一定的数学模型建立在向量上的一种省时、省空间的数据结构。通过向量索引,我们可以高效地查询多个与目标向量相似的向量。由于精确检索通常非常耗时,因此Milvus的向量索引类型大多采用 ANNS(近似最近邻搜索)。

本次我们共测试了三种索引:IVF_FLAT,IVF_SQ8 和 HNSW。下面我们对其结果逐一进行分析。

IVF_FLAT 

IVF(Inverted File)是一种基于量化的索引类型。IVF_FLAT 是最基本的 IVF 索引,每个单元中存储的编码数据与原始数据一致。

IVF_SQ8 

IVF_SQ8 根据 IVF 对放入单元的每个向量进行标量量化。标量量化将原始向量的每个维度从一个 4 字节的浮点数转换为一个 1 字节的无符号整数,所以 IVF_SQ8 索引文件比 IVF_FLAT 索引文件占用的空间小得多。

HNSW 

HNSW(Hierarchical Small World Graph)是一种基于图的索引算法。从最上层开始搜索,在这一层找到最接近目标的节点,然后进入下一层开始再次搜索。经过多次迭代,可以快速接近目标位置。

小结 

通过分析上面三种索引在两种指令集上的性能表现,我们可以发现不同索引使用 AVX-512 指令集时的检索速度均稍快于其在 AVX2 上的速度。这是因为相比于 AVX2 支持  256  位的计算,AVX-512 支持 512 位,在这个层面上  AVX-512  应该比  AVX2 快一倍。但是,Milvus 在搜索时除去计算还有其它的耗时,所以 AVX-512 的整体检索时间并没有高于 AVX2 一倍。

索引对比 

通过观察可得,HNSW 的检索速度明显快于另外两种索引,而在两种指令集上 IVF_SQ8 的检索速度均稍快于 IVF_FLAT。这一现象可能是因为 SQ8 的所需内存带宽只有 IVF_FLAT 的1/4。IVF_FLAT 每个向量维度要加载 4 个字节,而 SQ8 只加载 1 个字节。计算所需的时间很可能是受到内存带宽的约束。因此 SQ8 不仅占用较少的空间,而且检索速度更快。

结语

本文测试并分析了 Milvus 不同索引在 AVX-512 和 AVX2 两种指令集上的性能表现。Milvus 在使用各类索引时均表现出了极优的性能,并且在 AVX-512 指令集上得到了进一步的提升。

目前,Milvus 可以对接各种深度学习平台,并运用于众多 AI 领域。在最新的 0.11.0 版本中,Milvus 新增了标量字段过滤和在查询时指定距离计算方式两种功能。未来 Milvus 会持续增加更多功能,助力用户高效完成非结构化数据检索。关于 Milvus 的更多应用场景请参考:https://milvus.io/cn/scenarios

欢迎加入 Milvus 社区

github.com/milvus-io/milvus | 源码

milvus.io | 官网

milvusio.slack.com | Slack 社区

zhihu.com/org/zilliz-11/columns | 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/478166626 | Bilibili

Milvus 在 AVX-512 与 AVX2 的性能对比相关推荐

  1. 英特尔全部cpu列表_程序员大神Linus转投AMD:我希望英特尔的AVX 512指令集「去死」...

    机器之心报道 参与:泽南 「去死吧,AVX 512 指令集.」Linux 提出者林纳斯 · 托瓦兹(Linus Torvalds)说道. Linux 首席架构师,当今全球最著名程序员之一 Linus ...

  2. arm服务器计算性能,【干货分享】ARM/x86服务器的ceph性能对比报告

    第 1 则 -文档简介- ceph对象存储集群是一个高可用.智能化的分布式对象存储系统,支持自修复,自管理等底层数据管理功能,目前已广泛应用于各个领域中. 本文旨在部署ceph集群且配置相同参数条件下 ...

  3. linux、FreeBSD网桥转发性能对比

    linux.FreeBSD网桥转发性能对比 linux 2.6.9(redhat enterprise linux 4 update1) Nk'Zhykk[I   包长   带宽     包速(pps ...

  4. Java文件读取方式和效率性能对比

    场景描述 文件大小 8.67G的json文件,一共670万行. 服务器内存:2g.(只能读取一定缓冲数据,然后处理后继续读取,不能一次性加载到内存) 读取文件的内容出来,并未做业务处理. 读取方式和性 ...

  5. Zlib和Zstd 性能对比评测

    Zstandard 是facebook厂商提供的一种高压缩率的实时压缩算法,他在压缩比和压缩速度上做了很好的平衡,同时还提供高速的解码器,针对小数据,也提供了一种叫做字典压缩算法,从样本中可以创建出字 ...

  6. Java常用消息队列原理介绍及性能对比

    消息队列使用场景 为什么会需要消息队列(MQ)? 解耦  在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一 ...

  7. golang连接postgresql too many client_MySQL和PostgreSQL压测性能对比

    阅读使人充实,讨论使人敏捷,写作使人精确. >>> 压测业务场景文章属于互联网社区动态类场景核心功能压测案例.至于题目涉及的MySQL和PostgreSQL之间的关系,主要为业务选型 ...

  8. php下curl与file_get_contents性能对比

    为什么80%的码农都做不了架构师?>>>    上一篇讲了 <php使用curl替代file_get_contents>, 后续贴出了curl和file_get_cont ...

  9. p40与p100训练性能对比

    深度学习训练,选择P100就对了 原文:https://yq.aliyun.com/articles/238764 摘要: 本文使用NVCaffe.MXNet.TensorFlow三个主流开源深度学习 ...

  10. php vs lua,解析LUA与PHP在WEB应用的性能对比

    解析LUA与PHP在WEB应用的性能对比是本文要介绍的内容,这几天用在WEB开发的LUA框架已经完成,框架中已包括数据库操作和模板操作的功能,能够很简单方便的应用在WEB开发上.在此时我对这个LUA框 ...

最新文章

  1. 每天5分钟玩转容器技术 ---- 系列文章
  2. activity切换动画特效
  3. 美国数学月刊问题18-10-31
  4. mysql 事务 视图 存储过程 触发器
  5. 03.结构化机器学习项目 W1.机器学习策略(1)
  6. linux下共享库的制作及常见的问题
  7. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_8_常用的函数式接口_Supplier接口...
  8. 修改fstab导致UBUNTU无法启动的解决办法
  9. Pycharm community配置Django
  10. 怎么把flac转换成ogg格式
  11. 微信小程序+.NET(五) 音频格式转换-从.mp3到.wav
  12. Android Camera2 实现连拍
  13. jQuery02(达)
  14. async/await 记录
  15. oracle weituxinxi,Oracle 语句记录
  16. 读书笔记 ——《系统程序员成长计划》篇4:拥抱变化
  17. 数学史思维导图_8张思维导图揭示:数学应该如何学,才能逆袭为学霸?
  18. php mysql 性能_php插入mysql方式性能分析
  19. linux xxd命令
  20. php 限制微信登陆,thinkphp 微信用户登录 设置问题

热门文章

  1. 安全测试之sql注入
  2. IOS fiddler抓包配置
  3. 小度杀入《最强大脑》总决赛,除了阴谋论还有什么值得关注的?
  4. 搞清楚p问题、NP问题、NP完全问题和NP难问题
  5. Python读写LMDB文件
  6. 高精度乘法+刘汝佳BigNumber高精度结构体
  7. MEGA视频目标检测
  8. 【NOIP2016提高组】蚯蚓
  9. C#读取windows注册表键值的代码
  10. 软件质量模型的六大特性和27个子特性