“银河护卫队总部”放大招!Milvus 核心组件再升级,主打就是一个低延迟、高准确度

news2024/11/26 8:37:31

熟悉我们的朋友都知道,在 Milvus 和 Zilliz Cloud 中,有一个至关重要的组件——Knowhere。

Knowhere 是什么?如果把向量数据库整体看作漫威银河护卫队宇宙,那么 Knowhere 就是名副其实的总部,它的主要功能是对向量精确搜索其最近邻或通过构建索引进行低延迟、近似的最近邻搜索(ANNS)。

Knowhere 2.x 版本自 2022 年 7 月开始重构,经过多次方案讨论、设计、开发和测试的迭代,终于随着 Milvus 2.3 和各位见面了。对于用户而言,相较于 1.x 版本,Knowhere 2.x 版本提供了更规范的接口以及更丰富的功能,例如支持 GPU 索引、Cosine 相似性类型、ScaNN 索引和 ARM 架构等。对于开发者来说,升级后的 Knowhere 可以更方便地增加新的索引算法,利于后期维护。

接下来我将详细为大家介绍 Knowhere 2.x 的新功能、优化及设计理念。

支持 GPU 索引

Zilliz 一直都非常欢迎外部开发者提出想法和贡献代码,此前,英伟达(Nvidia)公司在 Knowhere 2.x 版本贡献了其向量搜索库 RAFT 中的 GPU_FLAT 和 GPU_IVFPQ 索引。GPU 强劲的算力在一些场景下可以显著地加速索引搜索的过程。相较于 CPU 版本,Milvus 端到端性能在 Nvidia A100 上的吞吐量有了显著提升(SIFT1M 近 70 倍)。GPU 索引详细内容请访问 https://milvus.io/docs/install_standalone-gpu-docker.md。

alt

支持 Cosine 相似性类型

在 Knowhere 1.x 版本上,如果想使用 Cosine 相似性类型,用户需要使用 Inner Product 相似性类型并在插入向量前进行归一化操作,使得其在数学上是等价的。这不仅对于用户有更高理论知识的要求,也增加了使用的成本和接入的难度。

Knowhere 2.x 版本原生支持 Cosine 距离并在库内部自动归一化传入向量并适配对应的索引类型,大大减少了理解成本,提升了用户体验。

支持 ScaNN 索引

Faiss 实现的 ScaNN,又名 FastScan,使用更小的 PQ 编码和相应的指令集可以更为友好地访问 CPU 寄存器,从而使其拥有优秀的索引性能。该索引在 Cohere 数据集,Recall 约 95% 的时候,Milvus 使用 Knowhere 2.x 版本端到端的 QPS 是 IVF_FLAT 的 7 倍,HNSW 的 1.2 倍。

支持 ARM 架构

ARM 架构对比 x86 架构,虽然其性能弱于后者,但因为更简单的设计和指令集,ARM 架构的能效和功耗更低,所以价格更为便宜。在 AWS 云平台相同 CPU 规格,如 1 vCPU,16GB 内存的情况下,ARM 实例比 x86 实例的价格低 15% 左右。Knowhere 2.x 版本支持了 ARM 架构,使得用户可以在此架构上运行和搭建上层服务。

支持 Range Search

最近邻问题包括 K 近邻问题 (KNN) 和范围搜索 (Range Search)。前者解决的问题是给定一个向量集合 X,参数 k 和查询向量 q,索引返回在向量集合 X 中由相似性类型定义的离查询向量 q 最“近”的 k 个向量。范围搜索则不给定参数 k,它需要给定一个范围 (radius),索引返回在向量集合 X 中与查询向量 q 的距离在范围内的所有向量。

Knowhere 2.x 为库中的多个索引提供了范围搜索的功能,例如 HNSW,DiskANN 还有 IVF 系列等。不同于 K 近邻问题,范围搜索返回向量的数目是预先不可知的。这对于结果的返回也提出了更高的要求,试考虑查询范围取查询向量 q 与向量集合 X 中最远向量的距离,结果将尝试返回整个向量集合。对此,Milvus 提供了对查询结果分页的功能,具体可参考 https://milvus.io/docs/within_range.md。

优化过滤查询

在向量查询中,可能存在有部分向量已经被删除的情况。或者在标量与向量的混合查询中,有一部分向量已经被标量查询先行过滤,例如数据库中有日期的标量列,并且用户只希望在满足特定日期的向量中进行查询。在大部分向量被过滤的场景下,Knowhere 2.x 针对 HNSW 的过滤向量查询进行了优化,使其相较于之前版本有至多 6 到 80 倍的性能提升。

优化代码结构和编译

Knowhere 2.x 版本简化了 C++ 类之间的继承关系,减少了函数调用;使用代理模式来规范新索引的接入,使得错误使用的风险更低;重构了 Config 模块,使用起来更为方便快捷;使用 conan 作为包管理工具,简化和加速了编译流程;使用 Folly 中的线程池来获得对于线程更为精准的把控。

支持 MMAP

MMAP (Memory Mapping) 将文件或设备映射到内存,即进程的地址空间。一些用户可能数据量较大但苦于没有足够的内存空间放置索引。用户之前可以尝试使用磁盘索引 DiskANN,现在也可以尝试使用 MMAP。用户选择开启后,Milvus 和 Knowhere 2.x 会自动将大文件进行内存映射,从而可以在内存不足的情况下使用大索引数据。

支持从索引获得原始向量

用户在搜索完成后,可能需要通过返回的 ID 取得原始向量,进一步进行定制化的计算或筛选。在之前版本的 Milvus 中,需要通过从例如 S3 或其他远程存储中获得。Knowhere 2.x 版本支持从索引中直接获得原始向量。因为索引本身已经被加载到内存(除 DiskANN 以外),该操作的延时会远低于从 S3 获取。值得注意的是并不是所有索引都支持,例如 IVFPQ 对原始向量进行了量化处理,从而丢失了这一信息。具体索引支持的表格详见 https://github.com/zilliztech/knowhere/releases/tag/v2.2.0。

至此,我们罗列了部分 Knowhere 2.x 重要的新功能和优化。希望本文能帮助大家对此有更为清晰的认识,也欢迎大家在 Knowhere 仓库的 issue https://github.com/zilliztech/knowhere/issues 中提出宝贵的意见和建议。同时,Milvus 2.3 系列解读会持续更新,下一篇的主题是 Milvus 最新的消息队列 NATS,敬请期待!

🌟「寻找 AIGC 时代的 CVP 实践之星」 专题活动即将启动!

Zilliz 将联合国内头部大模型厂商一同甄选应用场景, 由双方提供向量数据库与大模型顶级技术专家为用户赋能,一同打磨应用,提升落地效果,赋能业务本身。

如果你的应用也适合 CVP 框架,且正为应用落地和实际效果发愁,可直接申请参与活动,获得最专业的帮助和指导!联系邮箱为 business@zilliz.com。


  • 如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。 ​
  • 欢迎关注微信公众号“Zilliz”,了解最新资讯。

本文由 mdnice 多平台发布

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

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

相关文章

linux 进程管理命令

进程管理命令 查看进程命令 ps命令 显示系统上运行的进程列表 # 查看系统中所有正在运行的系统ps aux# 获取占用内存资源最多的10个进程,可以使用如下命令组合:ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head# 获取占用CPU资源最多的10个进程&am…

成本控制与电子元器件采购:实现效益的关键因素

成本控制在电子元器件采购中至关重要,它直接影响了组织的盈利能力和竞争力。以下是实现成本效益的关键因素: 供应商谈判: 成本控制的第一步是与供应商进行有效的谈判。这包括谈判价格、交货条件、质量标准和其他合同条款。有时长期合同可以帮…

【数学建模竞赛】优化类赛题常用算法解析

优化类建模 问题理解和建模:首先,需要深入理解问题,并将问题抽象为数学模型。这包括确定问题的目标函数、约束条件和决策变量。 模型分析和求解方法选择:对建立的数学模型进行分析,可以使用数学工具和方法,…

绘制钻头芯厚变化图

import numpy as np import matplotlib.pyplot as plt posnp.array([0.05,0.5,0.97,3]) data_m1np.array([0.088,0.093,0.098,0.116]) data_m2data_m1-0.01 data_m3data_m1-0.02 fig plt.figure(figsize(5, 4)) plt.rcParams[xtick.direction] in # 将x周的刻度线方向设置向…

miners lamp

矿灯、头灯,夜间作业

嵌入式软件有限状态机的 C 语言实现

状态机模式是一种行为模式,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑。 近日在看…

Arduino驱动ML8511紫外线传感器(光照传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 ML8511传感器,可以用来检测室内或室外的紫外线密度。通过将光电流转化成电压的原理来检测UV强度,同时非常适合被被外部电路所采用。该模块还具备省电模式可达0.1uA,适合在智能可穿戴和手机等设备上使用。

横版武侠手游推荐,有什么武侠游戏好玩的手游?

武侠游戏是游戏市场上不可或缺的游戏类型,许多武侠手游沿用了经典武侠小说中的各种设置,为玩家创造了一个身临其境的世界。有什么武侠游戏好玩的手游?今天小编就为大家带来了横版武侠手游推荐,这些游戏的游戏性和操作感是同类游戏…

vue使用wangEditor

vue版本2.0&#xff1b;editor5.1.23版本&#xff1b;editor-for-vue&#xff1a;1.0.2版本 api文档入口 效果图 安装步骤入口 npm install wangeditor/editor --savenpm install wangeditor/editor-for-vue --save代码 <template><div><div style"bor…

字体排版小白也能Get!4个超简单技巧让你的文字焕然一新

文字排版设计不仅是指为Web或APP的界面选择正确的字体&#xff0c;排版中的文本层次结构、字体比例、空白、颜色对比和其他视觉效果也有助于传递品牌的特定信息。优秀的文字排版设计需要传达清晰有效的信息&#xff0c;始终把内容的可读性放在首位去考虑和权衡。今天就带大家梳…

自动化测试系列 —— UI自动化测试

UI 测试是一种测试类型&#xff0c;也称为用户界面测试&#xff0c;通过该测试&#xff0c;我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要&#xff0c;通过执行 UI 测试…

装饰器模式:让你的对象变得更强大

在日常开发中&#xff0c;当需要给一个现有类添加附加职责&#xff0c;而又不能采用生成子类的方法进行扩充时。例如&#xff0c;该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。这时候&#xff0c;我们该怎么办呢&#xff1f;我们可以使用装饰器器模式来解决这…

Xilinx ZYNQ 7000学习笔记三(小结)

1 启动模式&#xff1a; ZYNQ 7000的启动模式由外部引脚决定的&#xff0c;5个模式引脚MIO[6:2]用于配置NAND flash、并行NOR flash、Serial NOR (Quad-SPI)、SD flash以及JTAG 一共5种启动模式。具体而言就是复位时&#xff0c;zynq-7000 SOC对下述引脚进行连续3个时钟周期采…

从Overleaf提交到arxiv

1.文件结构注意避坑&#xff01;&#xff01;&#xff01; 前期在overleaf写论文时&#xff0c;为了使文件结构目录清晰&#xff0c;分别建了section, image等子文件夹&#xff0c;即 >project>image-XXx.pdf-xxx.pdf>sections-abstract.tex-method.tex>main.tex…

ProcessWindowFunction 结合自定义触发器的陷阱

背景&#xff1a; flink中常见的需求如下&#xff1a;统计某个页面一天内的点击率,每10秒输出一次&#xff0c;我们如果采用ProcessWindowFunction 结合自定义触发器如何实现呢&#xff1f;如果这样实现问题是什么呢&#xff1f; ProcessWindowFunction 结合自定义触发器实现…

基于YOLOv8模型的安全背心目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的安全背心目标检测系统可用于日常生活中检测与定位安全背心目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训…

Zabbix 利用 Grafana 进行图形展示

安装插件 配置数据源 导入模版 查看 1.安装 wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/Packages/grafana-10.0.0-1.x86_64.rpm [rootrocky8 apps]# yum install grafana-10.0.0-1.x86_64.rpm [rootrocky8 apps]# systemctl start grafana-server.service …

Mac 手动安装 sshpass

1. 下载安装包 https://sourceforge.net/projects/sshpass/ 解压并进入到安装包目录 tar -zxvf sshpass-xx.xx.tar.gz cd sshpass-xx.xx2. 检验环境&#xff0c;编译源码安装 ./configuremake&&make install3. 检测安装是否成功 ▶ sshpass Usage: sshpass [-f|-…

freertos之资源管理

中断屏蔽 屏蔽中断函数 在任务中使用 taskENTER_CRITICA()/taskEXIT_CRITICAL() 在中断中使用 taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR() 功能介绍 使用上述函数&#xff0c;进入临界中断&#xff0c;任务不会切换&#xff0c;且中断优先级处于con…

邮件钓鱼的防守策略

一、攻击背景 在历年的实战攻防演练中&#xff0c;人的漏洞是网络安全最大的脆弱点&#xff0c;而钓鱼攻击就是从内部攻破堡垒至关重要的手段。攻击者通过伪装成可信来源发送虚假邮件&#xff0c;诱导接收者点击恶意链接、提供敏感信息或执行恶意附件&#xff0c;从而获取机密…