Milvus的向量索引(内存索引)

版本: v2.3.x
官网: https://milvus.io/docs/index.md

一、简介

Milvus 支持的各种类型的内存索引、每种索引最适合的场景以及用户可以配置以获得更好搜索性能的参数。
索引是有效组织数据的过程,它通过显着加速大型数据集上耗时的查询,在使相似性搜索变得有用方面发挥着重要作用。
为了提高查询性能,您可以为每个向量字段指定索引类型。
注意:目前,向量字段仅支持一种索引类型。 Milvus 在切换索引类型时会自动删除旧索引。

二、ANNS向量索引

Milvus 支持的向量索引类型大部分使用近似最近邻搜索 (ANNS) 算法。与通常非常耗时的准确检索相比,ANNS 的核心思想不再局限于返回最准确的结果,而是仅搜索目标的邻居。 ANNS 通过在可接受的范围内牺牲准确性来提高检索效率。
根据实现方法,ANNS向量索引可以分为四类:

  • Tree-based index 基于树的索引
  • Graph-based index 基于图的索引
  • Hash-based index 基于哈希的索引
  • Quantization-based index 基于量化的索引

三、Milvus 支持的索引

根据适合的数据类型,Milvus 支持的索引可以分为两类:

  • 浮点嵌入的索引:
    • 对于 128 维浮点嵌入,它们占用的存储为 128 * float 的大小 = 512 字节。
    • 用于浮点嵌入的距离度量是欧几里德距离(L2)和内积。
    • 这些类型的索引包括用于基于 CPU 的 ANN 搜索的 FLAT、IVF_FLAT、IVF_PQ、IVF_SQ8、HNSW 和 SCANN(beta),以及用于基于 GPU 的 ANN 搜索的 GPU_IVF_FLAT 和 GPU_IVF_PQ。
索引类型适合场景
FLATN/A数据集相对较小,需要 100% 的召回率
IVF_FLAT/GPU_IVF_FLAT量化高速查询,要求召回率尽可能高
IVF_SQ8量化高速查询,有限的内存资源,接受召回率的微小妥协
IVF_PQ/GPU_IVF_PQ量化非常高速的查询,有限的内存资源,接受召回率的大幅妥协
HNSW哈希非常高速的查询,要求尽可能高的召回率,大内存资源
SCANN量化非常高速的查询,要求尽可能高的召回率,大内存资源

3.1 FLAT

对于需要完美精度并依赖于相对较小(百万级)数据集的矢量相似性搜索应用程序,FLAT 索引是一个不错的选择。 FLAT不压缩向量,是唯一能保证精确搜索结果的索引。 FLAT 的结果还可用作召回率低于 100% 的其他索引产生的结果的比较点。
FLAT 是准确的,因为它采用详尽的搜索方法,这意味着对于每个查询,目标输入都会与数据集中的每组向量进行比较。这使得 FLAT 成为我们列表中最慢的索引,并且不太适合查询大量矢量数据。
Milvus 中 FLAT 索引不需要任何参数,使用它不需要数据训练。

3.2 IVF_FLAT/GPU_IVF_FLAT

IVF_FLAT将向量数据划分为 nlist 簇单元(聚类),然后比较目标输入向量与每个簇中心之间的距离。根据系统设置要查询的簇数 (nprobe),仅根据目标输入与最相似簇中向量之间的比较返回相似性搜索结果,从而大大减少查询时间。
通过调整nprobe,可以在给定场景下找到精度和速度之间的理想平衡。 IVF_FLAT 性能测试的结果表明,随着目标输入向量 (nq) 数量和要搜索的簇数量 (nprobe) 的增加,查询时间急剧增加。 IVF_FLAT是最基本的IVF索引,每个单元存储的编码数据与原始数据一致。
构建索引参数:

  • nlist,聚类簇的数量,范围1~65536,默认128

搜索索引参数:

  • nprobe,检索簇的数量,范围1~nlist,默认8
  • top-K,检索的向量数,<256

3.3 IVF_SQ8

IVF_FLAT 不执行任何压缩,因此它生成的索引文件与原始的原始非索引矢量数据的大小大致相同。
例如,如果原始 1B SIFT 数据集为 476 GB,则其 IVF_FLAT 索引文件会稍小(约 470 GB)。将所有索引文件加载到内存中将消耗 470 GB 的存储空间。当磁盘、CPU 或 GPU 内存资源有限时,IVF_SQ8 是比 IVF_FLAT 更好的选择。
该索引类型可以通过执行标量量化(SQ)将每个 FLOAT(4 字节)转换为 UINT8(1 字节)。这可将磁盘、CPU 和 GPU 内存消耗减少 70-75%。
对于 1B SIFT 数据集,IVF_SQ8 索引文件仅需要 140 GB 存储空间。
参数:nlist、nprobe

3.4 IVF_PQ/GPU_IVF_PQ

PQ(Product Quantization)将原始高维向量空间统一分解为m个低维向量空间的笛卡尔积,然后对分解后的低维向量空间进行量化。
乘积量化不再计算目标向量与所有单元中心的距离,而是计算目标向量与各个低维空间的聚类中心的距离,大大降低了算法的时间复杂度和空间复杂度。
IVF_PQ 在量化向量的乘积之前执行 IVF 索引聚类。它的索引文件甚至比IVF_SQ8还要小,但也会导致搜索向量时精度的损失。

注意:索引构建参数和搜索参数随 Milvus 发布的不同而变化。首先选择您的 Milvus 发行版。
构建索引参数:

  • nlist
  • m,乘积量化因子数,dim mod m == 0
  • nbits,可选,存储每个低维向量的位数。[1, 16] (8 by default)

搜索参数:

  • nprobe

3.4 SCANN

SCANN(分数感知量化损失)在向量聚类和乘积量化方面与 IVF_PQ 类似。它们的不同之处在于乘积量化的实现细节以及使用SIMD(单指令/多数据)进行高效计算。
构建索引参数:

  • nlist
  • with_raw_data,是否将原始数据包含在索引中,默认True.

检索参数:

  • nprobe
  • **reorder_k, **待查询候选单位数量,范围 [top_k, ∞]
  • radius,要查询的单位数,范围[1, nlist]
  • range_filter,要查询的候选单元数,范围[top_k, ∞]

3.5 HNSW

HNSW(Hierarchical Navigable Small World Graph)是一种基于图的索引算法。它根据一定的规则为图像构建了一个多层导航结构。在这种结构中,上层更稀疏,节点之间的距离更远;越低的层越密集,节点之间的距离越近。搜索从最上层开始,找到该层中最靠近目标的节点,然后进入下一层开始另一次搜索。经过多次迭代,它可以快速接近目标位置。
为了提高性能,HNSW将图形每层上节点的最大次数限制为M。此外,您可以使用efConstruction(构建索引时)或ef(搜索目标时)来指定搜索范围。
构建所以参数:

  • m, 节点的最大值,范围(2, 2048)
  • efConstruction,搜索范围,范围(1, int_max)

检索参数:

  • ef,搜索范围,范围(1, int_max)

如果有用,请点个三连呗 `点赞、关注、收藏`。
***你的鼓励是我最大的动力***
  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Azure Open AI Embedding是一种嵌入模型,通过使用Azure平台上的开放AI服务,可以将文本转换为高维向量表示。这种嵌入模型可以用于自然语言处理、推荐系统等领域,帮助我们更好地理解和处理文本数据。在使用Azure Open AI Embedding时,我们可以利用Azure的强大计算资源和高效的API接口,快速获取到所需的文本嵌入表示。 Milvus本地向量数据库是一种针对大规模向量数据的高性能数据库。它提供了快速的向量相似度搜索和存储功能,可以高效地应用于图像识别、人脸识别、文本检索等领域。在搭建Milvus本地向量数据库的单例安装和使用时,我们可以通过简单的配置和管理,快速部署本地向量检索系统,并且能够自由定制化自己的向量索引。 对于私有模型的应用,可以将Azure Open AI Embedding模型和Milvus本地向量数据库结合起来。首先,可以使用Azure Open AI Embedding模型将文本数据转换为向量表示,然后将这些向量存储到Milvus本地向量数据库中进行索引和检索。这样可以实现自己的定制化文本嵌入表示和快速的向量相似度搜索。同时,我们也可以通过对Milvus本地向量数据库进行单例安装和私有化部署,更好地保护自己的数据和模型隐私。这样的集成和应用可以帮助我们更好地理解和处理大规模文本数据,并且能够高效地进行相似度搜索和检索。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值