减少 95% 资源的向量搜索 | 使用云搜索的 DiskANN

当前尖端的向量近邻搜索算法,主要以图搜索算法为主,此类算法为了能够最大化搜索的速度与准确度,需要将对应的索引结构和原始数据存放在内存中,显然这不仅大大提高了成本,还限制了数据集的大小。例如在当前主流的内存型 HNSW 算法下,业界常用的内存估算方式是:向量个数 * 4 * (向量维度 + 12)。那么在 DEEP 10M(96维)的 1 千万数据就需要内存达到 4GB 以上,但是通过 DiskANN 优化后,仅需要 70MB 的内存就可以对海量数据高效的进行检索;在 MS-MARCO(1024 维)的 1.38 亿条记录里,需要内存更是高达 534GB,这样检索 1.38 亿的数据需要 12 个 64GB 的节点。

按照上面的估算公式,到了 10 亿级别就需要大约 100 个节点,到 100 亿级别需要的节点数为 1000 个左右,这个规模的服务在资源成本和稳定性上都面临了极大的挑战。我们在服务客户的过程中,发现相比于低延迟检索需求,大部分客户更关注成本和稳定性,因此,火山引擎云搜索团队在原先已经支持的 HNSW、IVF 等低延迟的算法引擎的基础上,引入了内存和磁盘更好平衡的 DiskANN 算法,目前已经在 200 亿单一向量库得到落地验证并取得预期效果

DiskANN 算法的关键在于,仅将轻量级的索引结构置于内存中,而海量的原始数据以及构建好的图结构存放于磁盘,同时借助磁盘的多路读取能力,缓解内存压力的同时,高效完成近邻检索任务的三大目标:海量数据、高召回率、低时延。DiskANN 论文提到可以节约 95% 的资源,从我们落地的多个用户案例来看,非常接近这个收益值,客户仅需几十台机器就稳定高效地支撑百亿级业务需求。除了资源成本的收益之外,大规模数据应用场景下也极大提高了系统的稳定性。这是因为 DiskANN 极大减少了对内存资源的依赖,因此也具备了非常高的可扩展性,在我们的实践经验中也得到验证,从千万数据规模到十亿再到百亿,查询性能的波动非常小,具备非常高的系统可预测性。

什么是近邻检索

近邻检索问题,顾名思义便是给定一个数据集 P 与一个查询向量 Q,我们需要从中找出最近的 K 个结果。随着数据集规模和数据维度的增加(curse of dimensionality),穷举遍历比较的方式便不再适用,更好地方式是取出近似的 K 个,然后引入召回率的概念,来表征近似结果集的好坏。针对此问题,应运而生了不同的算法,这些算法对应的索引结构也都基本受限于这些权衡:召回率、读写时延、成本等。

比如,基于图结构的算法,选择将数据作为图中的数据点,而相近的点之间连接为边;查询向量从入口点出发,不断缩短距离,最终收敛得到结果。该类算法需要将构建的图结构全部存放于内存中,召回率高,读写时延低,但内存成本高,主流代表算法为 HNSW、NSG。而为了解决海量数据的存储成本问题,另一类基于聚类压缩的算法,将数据按簇进行聚类,选择不保存原始向量数据,而是通过乘积量化的方法(product quantization),将原始数据压缩后再执行后续的流程。此类算法的特点在于内存成本大幅降低,但对应的缺陷就是召回率明显降低,主流算法为 IVF_PQ。

上述介绍算法,要么受限于海量数据存储带来的内存成本压力,要么为了减轻内存成本压力而选择牺牲召回率,那么是不是可以考虑跳出内存的限制,直接将数据存放到磁盘中。显然,磁盘中数据的读写速度要远低于内存,因此我们需要考虑的问题是:1. 如何能够减少访问磁盘的频率,先访问内存,只有真正需要原始向量时再去访问磁盘;2. 如何组织数据结构,保证一次读盘操作便可以取出相关的节点边图信息

DiskANN 实现

为了解决上述问题,DiskANN 算法首先提出了新的图结构 Vamana,Vamana 图与 HNSW、NSG 图类似,区别在于初始图的选择、以及构图剪枝过程中引入宽松参数,在图直径和节点连通度上达到平衡,图的质量相对有所提升。其次,为了规避多次随机读写磁盘数据,DiskANN 算法结合两类算法:聚类压缩算法和图结构算法,一是通过压缩原始数据,仅将压缩后的码表信息和中心点映射信息放到内存中,而原始数据和构建好的图结构数据存放到磁盘中,只需在查询匹配到特定节点时到磁盘中读取;二是修改向量数据和图结构的排列方式,将数据点与其邻居节点并排存放,这种方式使得一次磁盘操作即可完成节点的向量数据、邻接节点等信息的读取,通过对以上两种算法的结合可以大幅提升向量召回的读取效率,降低图算法的内存,提升召回率

构图流程

1.均匀采样数据,构建 pq 中心点信息以及压缩数据信息:

2.构建 Vamana 图,从随机图开始不断执行建边和剪枝操作,保证图的稠密度:

3.创建磁盘图结构,向量数据和邻接节点紧凑排列:

查询流程

1.给定查询向量 q,从入口点 p 出发,开始搜索 k 近邻:

2.当前遍历到的数据点,读取磁盘,以原始向量计算与查询节点的精确距离,进入结果集队列(Return Set,队列内以距离进行排序)。

3.当前节点的所有邻接节点,以 pq 数据计算与查询节点的近似距离,进入候选集队列(Candidate Set,队列内以距离进行排序)。

4.从候选集队列的头部取出 pq 距离最近的数据点。

5.重复执行2-4步骤,直至候选集中的数据点均被访问过,最终返回结果集。

实现效果

我们能够通过标注数据集验证可以看到使用 DiskANN 可以带来 10 倍以上的内存资源的提升,并且在召回率、性能上依旧能保持高效的检索能力。

*数据来源见文末参考论文

总结

DiskANN 通过构建低时延、高召回率的 Vamana 图,同时辅以内存与 SSD 磁盘之间的高效协同作业,召回率和主流的 HNSW 图算法基本保持一致,内存资源占用相比于基于图的算法要大幅减少,在召回率要求高、时延查询可接受的场景下,无疑是最具性价比的海量数据向量搜索算法。

参考

《DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node》

《HM-ANN: Efficient Billion-Point Nearest Neighbor Search on Heterogeneous Memory》

《GRIP: Multi-Store Capacity-Optimized High-Performance Nearest Neighbor Search for Vector Search Engine》

《AiSAQ: All-in-Storage ANNS with Product Quantization for DRAM-free Information Retrieval》

《A Comprehensive Survey and Experimental Comparison of Graph-Based Approximate Nearest Neighbor Search》

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

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

相关文章

快递员工告诉你,寄快递如何薅羊毛(知道这个方法,立省好几百)

谁能想象自从去了快递公司上班后,知道了一个惊人的内幕!!现在发快递和大件的,全国不管寄到哪都才只要5块钱呢!! 上门取件不说,不管寄多少快递,寄到哪里,仅是原价的5折。 …

MongoDB教程(二十):MongoDB正则表达式

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、正则表…

csa笔记6-网络管理命令

nmcli命令 字符终端,可以立即生效且重启系统后配置也不会丢失 nmtui命令 可视终端,立即生效,重启有效 network.service 管理网络 RHEL 7 以前:使用network.service管理网络 RHEL 7:使用network.service和Netwo…

springboot高等职业院校实验室信息管理-计算机毕业设计源码24015

摘 要 本文旨在设计并实现一个基于Spring Boot框架的高等职业院校实验室信息管理系统。该系统采用B/S体系结构,以MySQL作为数据库管理平台,结合前端技术如HTML、CSS和JQuery,为用户提供一个功能全面、操作便捷的实验室信息管理平台。 在系统设…

短视频矩阵管理系统源码可靠吗?

1. 了解短视频矩阵管理系统 短视频矩阵管理系统是一个用于管理和优化短视频内容创作、发布和推广的软件平台。它可以帮助用户分析市场趋势、选择热门话题、智能剪辑视频、发布到多个短视频平台,以及监控和优化视频表现。这种系统对于短视频制作团队、自媒体运营者以…

记录|服务器资源申请评估(CPU,内存,宽带等)

目录 前言一、CPU二、内存三、磁盘四、带宽更新时间 前言 参考内容: CPU、内存、存储、带宽,一次性搞清楚服务器资源评估 在申请服务器时需要评估资源需求。少了不够用,多了也浪费。以下内容是对参考内容的提取和理解。 一、CPU 性能指标&am…

Jsoup爬虫——自学习梳理

——项目已完结(源码在文末) 一个较大的项目,通过后台进行网站爬虫,选择的是一个招聘类型的网站,爬取数据后会选择一部分放入到我们的数据库中,前台通过后台返回的Json数据进行展示;大概就是这样…

SSRF过滤攻击

SSRF绕过: 靶场地址:重庆橙子科技SSRF靶场 这个是毫无过滤的直接读取,但是一般网站会设置有对SSRF的过滤,比如将IP地址过滤。 下面是常用的绕过方式: 1.环回地址绕过 http://127.0.0.1/flag.php http://017700…

Qt基础 | 自定义界面组件 | 提升法 | 为UI设计器设计自定义界面组件的Widget插件 | MSVC2019编译器中文乱码问题

文章目录 一、自定义 Widget 组件1.自定义 Widget 子类2.自定义 Widget 组件的使用 二、自定义 Qt Designer 插件1.创建 Qt Designer Widget 插件项目2.插件项目各文件的功能实现3.插件的编译与安装4.使用自定义插件5.使用 MSVC 编译器输出中文的问题 一、自定义 Widget 组件 当…

primetime如何合并不同modes的libs到一个lib文件

首先,用primetime 抽 timing model 的指令如下。 代码如下(示例): #抽lib时留一些margin, setup -max/hold -min set_extract_model_margin -port [get_ports -filter "!defined(clocks)"] -max 0.1 #抽lib extract_mod…

Adobe正通过数字体验改变世界

在当今这个数字化飞速发展的时代,Adobe公司正以其创新的技术和卓越的产品引领着创意设计领域的变革。从Adobe发布的生成式AI工具(Adobe Firefly),到Illustrator和Photoshop的新AI功能,再到广受认可的Adobe国际认证&…

视频去水印免费电脑版 pdf压缩在线免费网页版 pdf压缩在线免费 简单工具软件详细方法步骤分享

消除视频中的恼人水印,是许多视频编辑爱好者的常见需求。在这篇文章中,我们将探讨几种视频去水印的技巧,在数字化时代,视频和图片的传播越来越方便,但随之而来的水印问题也让人头疼。本文将为您详细介绍视频剪辑去水印…

moviepy:将MP4视频数据每隔10秒裁剪成一个新的视频,并保存在同一个文件夹下

将MP4视频数据每隔10秒裁剪成一个新的视频,并保存在同一个文件夹下。 输入数据, 裁剪结果: import os from moviepy.video.io.VideoFileClip import VideoFileClipdef split_video_into_segments(video_path, segment_duration10):# 获取视…

提示找不到 msvcp120.dll 文件要怎么处理?探讨msvcp120.dll 的修复方法

当你的电脑提示找不到 msvcp120.dll 文件时,这意味着系统存在问题,导致部分应用程序无法正常启动。这是因为 msvcp120.dll 是一个重要的系统文件,通常与运行使用 Microsoft Visual C 2013 开发的程序相关。下面我们将探讨 msvcp120.dll 文件的…

js将 毫秒数转为刚刚,,几分钟,几小时,几天,几周,几月,几年

复制即用 百度有一个毫秒换算器,可以用它来验证代码换算的正确与否。 console.log(Tools(9252206000)) //三月// 毫秒数转为天,小时分钟秒 function Tools (time) {let daysRound Math.floor(time / 1000 / 60 / 60 / 24);let minutesRound Math.flo…

Python文献调研(一)环境搭建

一、安装Python版本 1.点击进入Python官网 Download Python | Python.org 2.根据自己的需求选择python的版本,点击【Download】 3.自定义安装路径,记得勾选Add Python xxx to PATH 这步是自动配置环境变量的,如果忘记勾选,建议…

LeetCode24 两两交换链表中的节点

前言 题目: 24. 两两交换链表中的节点 文档: 代码随想录——两两交换链表中的节点 编程语言: C 解题状态: 没画图,被绕进去了… 思路 思路还是挺清晰的,就是简单的模拟,但是一定要搞清楚交换的…

UE5+OpenCV配置(Windows11系统)

一、概述 因为需要在UE5中使用OpenCV这些工具进行配置,所以在网络上参考借鉴一些资料进行配置。查询到不少的资料,最后将其配置成功。在这里顺便记录一下自己的配置成功的过程。 二、具体过程 (一)版本 使用Windows11系统、UE5.…

【运维笔记】数据库无法启动,数据库炸后备份恢复数据

事情起因 在做docker作业的时候,把卷映射到了宿主机原来的mysql数据库目录上,宿主机原来的mysql版本为8.0,docker容器版本为5.6,导致翻车。 具体操作 备份目录 将/var/lib/mysql备份到~/mysql_backup:cp /var/lib/…

【Unity】 HTFramework框架(五十三)使用 Addressables 可寻址系统

更新日期:2024年7月25日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Addressables 可寻址系统使用 Addressables 可寻址系统一、导入 Addressables二、切换到 Addressables 加载模式三、切换资源加载助手四、加载资源五、注…