🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI

什么是高级向量扩展?

  • Engineering
November 10, 2020
milvus

在科幻小说中,有意识的智能机器总是想接管世界,但在现实中,现代计算机却非常听话。如果没有人告诉它们,它们很少知道自己该做什么。计算机根据程序发送给处理器的指令或命令执行任务。在最底层,每条指令都是一个 1 和 0 的序列,描述了计算机要执行的操作。 通常,在计算机汇编语言中,每条机器语言语句对应一条处理器指令。中央处理器(CPU)依靠指令来执行计算和控制系统。此外,CPU 性能通常以指令执行能力(如执行时间)来衡量。

什么是高级向量扩展?

高级向量扩展(AVX)是一种用于依赖 x86 系列指令集架构的微处理器的指令集。AVX 由英特尔于 2008 年 3 月首次提出,三年后随着 Sandy Bridge(英特尔第二代酷睿处理器(如酷睿 i7、i5、i3)中使用的微体系结构)和 AMD 的竞争微体系结构 Bulldozer(也于 2011 年发布)的推出而得到广泛支持。

AVX 引入了新的编码方案、新功能和新指令。AVX2 将大多数整数操作扩展到 256 位,并引入了融合乘法累加(FMA)操作。AVX-512 使用新的增强向量扩展(EVEX)前缀编码,将 AVX 扩展到 512 位操作符。

Milvus是一个开源向量数据库,专为相似性搜索和人工智能(AI)应用而设计。该平台支持 AVX-512 指令集,这意味着它可用于所有包含 AVX-512 指令的 CPU。Milvus 应用广泛,涵盖推荐系统、计算机视觉、自然语言处理 (NLP) 等领域。本文介绍了在 AVX-512 和 AVX2 上运行 Milvus 向量数据库的性能结果和分析。

Milvus 在 AVX-512 和 AVX2 上的性能对比

系统配置

  • CPU:英特尔® 铂金 8163 CPU @ 2.50GHz24 内核 48 线程
  • CPU 数量2
  • 显卡: GeForce RTX 2080Ti 11GB 4显卡
  • 内存: 768GB
  • 磁盘:2 TB SSD

Milvus 参数

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

注:nlist 是要从客户端创建的索引参数;nprobe 是搜索参数。IVF_FLAT 和 IVF_SQ8 都使用聚类算法将大量向量分割成桶,nlist 是聚类过程中要分割的桶的总数。查询的第一步是找出最接近目标向量的桶数,第二步是通过比较向量的距离找出这些桶中的 top-k 向量。nprobe 指的是第一步中的桶数。

数据集SIFT10M 数据集

这些测试使用的是SIFT10M 数据集,该数据包含 100 万个 128 维向量,通常用于分析相应近邻搜索方法的性能。我们将比较两个指令集在 nq = [1, 10, 100, 500, 1000] 条件下的 top-1 搜索时间。

按向量索引类型划分的结果

向量索引是利用各种数学模型在 Collections 的向量场上建立的省时省力的数据结构。当试图识别与输入向量相似的向量时,向量索引可以高效地搜索大型数据集。由于精确检索非常耗时,Milvus 支持的大多数索引类型都使用近似近邻(ANN)搜索。

在这些测试中,AVX-512 和 AVX2 使用了三种索引:IVF_FLAT、IVF_SQ8 和 HNSW。

IVF_FLAT

反转文件(IVF_FLAT)是一种基于量化的索引类型。它是最基本的 IVF 索引,每个单元中存储的编码数据与原始数据一致。 该索引将向量数据划分为若干簇单元(nlist),然后比较目标输入向量与每个簇中心之间的距离。根据系统设置查询的簇数(nprobe),相似性搜索结果仅根据目标输入与最相似簇中向量的比较结果返回--大大缩短了查询时间。通过调整 nprobe,可以在特定情况下找到准确性和速度之间的理想平衡点。

性能结果 IVF_FLAT.pngIVF_FLAT.png

IVF_SQ8

IVF_FLAT 不进行任何压缩,因此其生成的索引文件大小与原始的非索引向量数据大致相同。当磁盘、CPU 或 GPU 内存资源有限时,IVF_SQ8 是比 IVF_FLAT 更好的选择。 这种索引类型可以通过执行标量量化,将原始向量的每个维度从四字节浮点数转换为一字节无符号整数。这可将磁盘、CPU 和 GPU 内存消耗减少 70-75%。

性能结果 IVF_SQ8.pngIVF_SQ8.png

HNSW

分层小世界图(HNSW)是一种基于图的索引算法。查询从最上层开始,先找到与目标最接近的节点,然后再到下一层进行新一轮搜索。经过多次迭代后,它可以快速接近目标位置。

性能结果 HNSW.pngHNSW.png

向量索引比较

在 AVX-512 指令集上,向量检索的速度始终快于 AVX2。这是因为 AVX-512 支持 512 位计算,而 AVX2 仅支持 256 位计算。从理论上讲,AVX-512 的速度应该是 AVX2 的两倍,但是,Milvus 除了进行向量相似性计算外,还执行其他耗时的任务。在实际应用中,AVX-512 的总体检索时间不可能是 AVX2 的两倍。 comparison.pngcomparison.png

在 HNSW 索引上,检索速度明显快于其他两种索引,而在两种指令集上,IVF_SQ8 检索速度略快于 IVF_FLAT。这可能是因为 IVF_SQ8 所需的内存仅为 IVF_FLAT 的 25%。IVF_SQ8 为每个向量维度加载 1 个字节,而 IVF_FLAT 为每个向量维度加载 4 个字节。计算所需时间很可能受到内存带宽的限制。因此,IVF_SQ8 不仅占用的空间更少,而且检索向量所需的时间也更短。

Milvus 是一个多功能、高性能的向量数据库

本文介绍的测试表明,在使用不同索引的 AVX-512 和 AVX2 指令集上,Milvus 都能提供出色的性能。无论索引类型如何,Milvus 在 AVX-512 上的性能都更好。

Milvus 与各种深度学习平台兼容,可用于各种人工智能应用。Milvus 2.0 是世界上最流行的向量数据库的重构版本,于 2021 年 7 月在开源许可下发布。有关该项目的更多信息,请查看以下资源:

  • GitHub 上查找或为 Milvus 投稿。
  • 通过Slack 与社区互动。
  • Twitter 上与我们联系。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

扩展阅读