Milvus的内存索引

news2024/10/7 2:20:43

简介:

这篇文章主要介绍milvus支持的各种内存索引,以及它们最适用的场景,还有用户为了获得更好的搜索性能可以配置的参数。

索引是有效组织数据的过程,它的主要角色是在大的数据集中显著的加速耗时的查询从而有效的进行相似搜索。

当前,一个向量字段只支持一种索引类型,milvus会在选择了新的索引类型之后自动删除老的索引。

ANNS向量索引

milvus支持的大部分向量索引类型都使用近似临近搜索算法(ANNS)。相比于精确检索,它非常的耗时,ANNS的核心思想不再局限于返回最准确的结果,而是搜索目标的邻居。ANNS以牺牲可接受范围内的准确率来提高检索速度。

根据实现方式的不同,ANNS向量索引可以分成四种类型:

  • 基于树的索引
  • 基于图的索引
  • 基于哈希的索引
  • 基于量化的索引

milvus支持的索引类型

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

  • embedding为浮点数的索引
    • 维度等于128的浮点数embedding,存储它们需要占用 128 * 浮点数大小 = 512 字节。浮点数embedding的距离度量方法有:欧几里得距离(L2)和内积
    • 这些类型的索引包括:FLAT,IVF,IVF_FLAT,IVF_PQ,IVF_SQ8,和SCANN(基于CPU的ANN搜索)
  • embedding为二进制的索引
    • 维度等于128的二进制embedding,存储它们需要占用128/8 = 16字节。二进制embedding的距离度量方法有:Jaccard 和 Hamming
    • 这些类型的索引包括:BIN_FLAT 和 BIN_IVF_FLAT
  • embedding为稀疏的索引
    • 稀疏embedding支持的距离度量方法只有IP(内积 Inner product)
    • 这些类型的索引包括:SPARSE_INVERTED_INDEX和SPARSE_WAND

下面的表格列举了milvus支持的索引分类:

floating-point embeddings

binary embeddings

sparse embeddings

FLAT

针对要求最佳的准确率和相对比较小的数据集(百万级)的向量相似搜索应用,FLAT索引是比较好的选择。FLAT没有压缩向量,并且是唯一可以担保精确搜索结果的索引。FLAT索引返回的结果可以用来与那些召回率小于100%的索引类型进行对比。

FLAT如此精确是因为它做了全匹配,也就是它会将每个查询的输入值与数据集里面的每条数据做比较。这也就导致了FLAT是我们支持的最慢的索引,同时也不适合查询海量的向量数据。milvus里面对于FLAT没有必填的参数,并且使用它也不需要做数据训练。

查询参数

ParameterDescriptionRange
metric_type[Optional] The chosen distance metric.Euclidean distance (L2)
Inner product (IP)
Cosine similarity (COSINE)

IVF_FLAT

IVF_FLAT将向量数据分成 nlist 个聚类单元,然后比较目标输入向量与每个聚类中心的距离。依赖系统设置为查询(nprobe)的聚类大小,相似搜索结果的返回只基于比较目标输入与最相似的聚类的向量,从而显著的降低查询时间。

通过适配nprobe,对于特定的场景可以找到准确率与速度之间的完美平衡。根据IVF_FLAT性能测试报告,随着目标输入向量(nq)和要搜索的聚类数量(nprobe)的增加,查询时间急剧增加。

IVF_FLAT是最基本的IVF索引,存储在每个单元的编码数据与原始数据一致。

索引构建参数

查询参数

IVF_SQ8

IVF_FLAT没有进行任何的压缩,所以它产生的索引文件和原始没有索引的向量数据大小差不多。例如 1B的SIFT原始数据集的大小是476GB,它的IVF_FLAT索引文件稍微小一点点(470GB)。加载所有的索引文件到内存将会占用470GB的存储。

当磁盘、CPU或者GPU内存大小受限的时候,IVF_SQ8是比IVF_FLAT更好的选择。此索引类型通过执行标量量化(Scalar Quantization)将会把每个浮点数(4字节)转换为无符号的整数(1字节) 。这就会降低70~75%的磁盘、CPU和GPU内存占用。对于1B的SIFT数据集,IVF_SQ8索引文件只需要140GB的存储。

索引构建参数:

ParameterDescriptionRange
nlistNumber of cluster units[1, 65536]

查询参数:

IVF_PQ

PQ(Product Quantization) 将原始高维度的向量空间分解为 m 个低维度向量空间的笛卡尔乘积,然后再量化这些分解之后的低维度向量空间。不再计算目标向量和所有单元中心的距离,PQ计算目标向量和每个低维度空间的聚类中心的距离,这样将会极大的降低算法的时间复杂度和空间复杂度。

IVF_PQ在量化向量的积之前执行IVF索引聚类,它的索引文件比IVF_SQ8还要小,但是同时也在搜索向量的时候降低了准确率。

索引构建参数:

ParameterDescriptionRange
nlistNumber of cluster units[1, 65536]
mNumber of factors of product quantizationdim mod m == 0
nbits[Optional] Number of bits in which each low-dimensional vector is stored.[1, 16] (8 by default)

查询参数:

SCANN

SCANN (Score-aware quantization loss)在向量聚类和乘积量化方面和IVF_PQ很像。它们不同的地方在于乘积量化的实现细节和使用SIMD (Single-Instruction / Multi-data)进行有效计算方面。

索引构建参数:

ParameterDescriptionRange
nlistNumber of cluster units[1, 65536]
with_raw_dataWhether to include the raw data in the indexTrue or False. Defaults to True.

查询参数:

HNSW

HNSW (Hierarchical Navigable Small World Graph) 是一个基于图的索引算法。它根据某种规则来为图片构建多层导航结构。在这种结构中,最上层更加稀疏且节点之间的距离更远,最下层更加稠密且节点间距离更近。搜索从最上层开始,在该层找到与目标最近的节点,然后进入下一层开始再一次查找。经过多轮迭代,它可以快速找到目标位置。

为了提高性能,HNSW限制每层节点的最大连接数为M,另外我们可以使用 efConstruction(当构建索引)或者 ef(当搜索目标)来声明搜索范围。

索引构建参数:

ParameterDescriptionRange
M

M定义图中节点最大对外连接的数量,当ef/efConstruction固定时,M越大则精度和执行时间越大

(2, 2048)
efConstruction

ef_construction控制索引搜索速度和构建速度。增加efConstruction会提高索引质量,同时也增加了索引构建时间

(1, int_max)

查询参数

ParameterDescriptionRange
ef

控制查询时间和准确率。大的ef会导致更精确但是更慢。

[1, int_max]

BIN_FLAT

它和FLAT实现原理一模一样,这里就不再介绍了,仅仅是它只能用于二进制embedding。

查询参数:

BIN_IVF_FLAT

它和IVF_FLAT实现原理一模一样,这里就不再介绍了,仅仅是它只能用于二进制embedding。

 索引构建参数

查询参数

SPARSE_INVERTED_INDEX

每个维度都维护一个向量列表,这些向量在该维度上具有非零值。在搜索过程中,Milvus遍历查询向量的每个维度,并计算在这些维度中具有非零值的向量的分数。

索引构建参数:

ParameterDescriptionRange
drop_ratio_build

在索引过程中排除小向量值的比例,该选项允许我们调整索引处理,通过在构建索引的过程中丢弃小的值来权衡效率和准确率

[0, 1]

查询参数:

ParameterDescriptionRange
drop_ratio_search

在搜索过程中丢弃小向量值的比率,此选项允许通过指定要忽略的查询向量中最小值的比率来微调搜索过程。它能平衡搜索精度和性能。设置比较小的drop_ratio_search,减少小值对最终分数的贡献。通过忽略一些小值,在稍微影响到准确率的情况下可以提高搜索性能

[0, 1]

SPARSE_WAND

此索引与SPARSE_INVERTED_INDEX有相似之处。它利用 Weak-AND算法在搜索过程中来进一步降低 全IP距离评估的数量。

基于我们的测试,SPARSE_WAND在速度方面通常优于其他方法。其性能会随着向量密度的增加而迅速恶化。为了解决这个问题,引入 非零 drop_ratio_search来显著提升性能同时只产生最小的精度损失。

索引构建参数:

ParameterDescriptionRange
drop_ratio_build

在索引过程中排除小向量值的比例,该选项允许我们调整索引处理,通过在构建索引的过程中丢弃小的值来权衡效率和准确率

[0, 1]

查询参数:

ParameterDescriptionRange
drop_ratio_search

在搜索过程中丢弃小向量值的比率,此选项允许通过指定要忽略的查询向量中最小值的比率来微调搜索过程。它能平衡搜索精度和性能。设置比较小的drop_ratio_search,减少小值对最终分数的贡献。通过忽略一些小值,在稍微影响到准确率的情况下可以提高搜索性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1686961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)

最终效果 文章目录 最终效果前言素材模拟绳子钩子来回摆动发射回收钩子方法发射钩子回收钩子勾取物品随机生成物品其他源码完结 前言 在游戏发展史上,有些游戏以其简单而耐玩的特性,深深地烙印在了玩家的记忆中。《黄金矿工》就是其中之一,它…

SpringBootWeb 篇-深入了解 Mybatis 删除、新增、更新、查询的基础操作与 SQL 预编译解决 SQL 注入问题

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Mybatis 的基础操作 2.0 基础操作 - 环境准备 3.0 基础操作 - 删除操作 3.1 SQL 预编译 3.2 SQL 预编译的优势 3.3 参数占位符 4.0 基础操作 - 新增 4.1 主键返回…

每周节省7800万工时!ChatGPT等成美国降本增效利器

5月23日,全球最大教育、商业出版社之一的Pearson plc在官网发布了,ChatGPT等生成式AI如何帮助人们提升工作效率节省时间的深度研究报告。 该报告一共分析了美国、英国、澳大利亚、巴西和印度5个国家。到2026年,美国节省的时间最多&#xff0…

面试准备-项目【面试准备】

面试准备-项目【面试准备】 面试准备自我介绍:项目介绍: 论坛项目功能总结简介数据库表设计注册功能登录功能显示登录信息功能发布帖子评论私信点赞功能关注功能通知搜索网站数据统计热帖排行缓存 论坛项目技术总结Http的无状态cookie和session的区别为什…

GIS竞赛指南

全国大学生GIS应用技能大赛 全国大学生GIS应用技能大赛 主办单位:中国地理信息产业协会、中国地理学会 协办单位:广州大学(2023年) 参赛要求:每个学校一支队伍,限在读本科生组队不超过4人,指导老师不超过2人,一般学…

三磷酸肌醇(IP3)为细胞内信号转导分子 在医药、科研领域应用前景广阔

三磷酸肌醇(IP3)为细胞内信号转导分子 在医药、科研领域应用前景广阔 三磷酸肌醇又称为肌醇三磷酸,简称InsP3或IP3,是一种小信号分子,由磷脂酶C催化磷脂酰肌醇-4,5-二磷酸水解产生的,水解后剩下的甘油二酯停…

异众比率(variation ratio)

异众比率(variation ratio)是指非众数组的频数占总频数的比率,其计算公式为: 其中,为众数组的频数。 异众比率主要用于衡量众数对一组数据的代表程度。异众比率越大,说明非众数组的频数占总频数的比重越大&#xff0…

甭管几岁退休,都要做纵横驰骋的疯狂老太太

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / (新)声湃轩北京录音间 对许多年轻人来说,退休是此生最大的“延迟满足”。 手握不用干活…

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象,实则不然,就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等,不知道请看这篇文章(Touch事件传递流…

html+css绘制自定义样式输入框

效果&#xff1a; 代码&#xff1a; html部分&#xff1a; <div class"box"> <div class"newbox"><input type"text" required><div class"name">Username</div></div> </div>css部分 …

aardio - godking.vlistEx虚表点击表头全选、排序

新版虚表内置了名称为 DefaultCheckedImg 和 DefaultUnCheckedImg 的两张图片&#xff0c;分别为 【选择框勾选状态默认图片】 和 【选择框未勾选状态默认图片】 以下代码调用了这两张图片&#xff0c;所以请将虚表库升级为最新版。 如果使用旧版库&#xff0c;可以自行添加这…

数据结构面试例题:括号匹配、栈实现队列、队列实现栈,循坏队列(C语言解决)

hello,这次我来用C语言和栈和队列相关问题&#xff0c;希望大家多多支持 括号匹配题目&#xff1a; OJ题目 首先我们不能用数量匹配来进行解答&#xff0c;因为你顺序不一定匹配 解析&#xff1a; 1、左括号入栈 2、右括号出栈顶左括号匹配 1.我们只需要找到右括号&#xff0c…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示&#xff0c;PHP 的流行度降至了历史最低&#xff0c;排在第 17 名&#xff0c;同时&#xff0c;在年度 Stack Overflow 开发者调查报告中&#xff0c;PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

每日5题Day9 - LeetCode 41 - 45

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 今天这道题没有ac&#xff0c;写不动了&#xff0c;下次再通过吧&#xff0c;先给个半成品下次回…

装备制造项目管理软件:奥博思PowerProject项目管理系统

数字化正逐步改变着制造方式和企业组织模式。某制造企业领导层透露&#xff0c;在采用数字化项目管理模式后&#xff0c;企业的发展韧性更加强劲&#xff0c;构筑起了竞争新优势&#xff0c;企业产品研制周期缩短25%&#xff0c;生产效率提升18%。 随着全球经济的发展&#xf…

【Linux001】centos常用命令总结总结(已更新)

1.熟悉、梳理、总结下centos知识体系。 2.Linux相关知识&#xff0c;在日常开发中必不可少&#xff0c;如一些必知必会的常用命令&#xff0c;如环境搭建、应用部署等。同时&#xff0c;也要谨慎使用一些命令&#xff0c;如rm -rf&#xff0c;防止一些生产事故的发生。 3.欢迎点…

521源码-区块链交易所-二开版多语言秒合约交易所系统/区块链交易所系统/完整脚本任务/附带搭建教程

交易只保留秒合约交易&#xff0c;完整的计划执行脚本&#xff0c;秒合约订单完美结算&#xff0c;效果看图片 搭建非常简单&#xff0c;功能不多叙述&#xff0c;自行测试吧 本源码下载地址&#xff1a;二开版多语言秒合约交易所系统/区块链交易所系统/完整脚本任务/附带搭建…

抖音小店没有流量不出单?归根到底,就是转化率不行!

哈喽~我是电商月月 新手做抖音小店&#xff0c;最忧愁的就是&#xff1a;店铺不出单怎么办&#xff1f; 商家通常会把没有销量的原因&#xff0c;都推向于“店铺没有流量” 但在抖音&#xff0c;这个日活量高达9亿的平台来说&#xff0c;任何商铺最不缺的应该就是流量了 但…

如何异地组网添加摄像机?

本文将介绍如何使用天联技术实现异地组网添加摄像机&#xff0c;并保障数据的安全性。 安防摄像机的应用愈发广泛&#xff0c;无论是家庭安防还是企业监控&#xff0c;摄像机都扮演着重要角色。在一些特殊场合或者特殊需求下&#xff0c;我们需要将摄像机添加到异地网络中进行监…