面向大规模向量搜索引擎的内存-硬盘优化的近似最近邻搜索算法(GRIP)

GRIP是一种在DRAM-SSD混合存储环境下优化的高性能近似最近邻搜索方法。该方法通过结合内存中的导航图索引与SSD上的原始向量,实现了低延迟和高召回率的同时,降低了内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

论文题目:GRIP: Multi-Store Capacity-Optimized High-Performance Nearest Neighbor Search for Vector Search Engine,2019年发表在CIKM上,论文作者:Minjia Zha, Yuxiong He,单位:Microsoft AI and Research

GRIPGRI表示Graph Routing Index,P表示本文对PQ优化时采用的PDV, 即Partial distance value。

主要内容

这篇论文首次研究内存(DRAM)-硬盘(SSD)混合存储下ANNS方案,提出的GRIP在系统效率上(包括搜索延迟和内存消耗两方面)提升了一个数量级,同时实现相当或更高的精度。

背景和动机

当前在ANNS上的研究大多假设整个数据集放在内存中,在这个假设下,如果数据超过一个单机的内存容量,一方面我们可以继续增大单机内存,另一方面我们可以扩展机器采用分布式部署,这两种堆硬件方式都不是内存有效的,会有非常高的成本。

本文考虑利用快速持久存储设备解决容量问题,当前,NVMe-based SSD在延迟和峰值带宽上取得显著提升,且成本接近传统Hard Disk Drive (HDD)。在容量上,SSD是TB级,而DRAM是GB级。在这样的背景下,研究DRAM-SSD混合存储下ANNS是非常有意义的。比如对于内存场景下当前最优导航图算法而言,它们普遍获得低延迟和高召回,然而他们的内存消耗过高,如果将这类方法直接放到SSD上,搜索延迟就会显著增加,因为在导航图上的搜索过程存在大量随机数据访问,这个过程在SSD上会更慢。

本文方法概述

索引

GRIP在DRAM中存向量压缩编码及聚类中心的导航图索引,在SSD上存原始向量。具体地,GRIP将原始向量通过基于PQ的方法压缩,大概是IVFPQ的一个变体,即先对向量聚类,IVFPQ扫描类中心是采用IVF的方式(即线性扫描),本文对类中心建一个HNSW索引,避免暴力线性扫描。本文在IVFPQ的PQ编码基础上有一个小优化,即预先计算一些与查询无关的距离分量,加速搜索时的计算。

搜索

对于给定的查询,GRIP先通过内存中的HNSW索引定位距离较近的一些类中心,然后在定位出的类中通过PQ距离获取距查询较近的一些候选结果,最后从SSD中读取这些候选结果的原始向量以重排候选结果,获取距查询最近的Top-K个结果。在从SSD上读原始向量过程,本文还根据SSD的异步和并行机制进行了优化。

一些细节

1. Challenges

(1) 内存-硬盘的性能差异;

从延迟角度。在DRAM上读几字节的数据需要约60ns,而HDD需要10ms。由于这一巨大的延迟差距,当前ANNS算法的关键假设是数据都放在内存中。最近,基于NVM(Non-Volatile Memory)的SSD实现了60 μ \mu μs的读延迟,这比HDD快1000倍。

从容量角度。DRAM的容量是GB级的,而SSD是TB级的。

从成本角度。DRAM成本是SSD的8倍。

如何利用SSD这一新的存储设备处理ANNS问题值得考虑。

(2) 导航图方法取得最佳延迟和精度权衡,但其非常耗内存,这要求机器有更大的内存容量或有更多的机器数量。直接将导航图算法配置在SSD上导致极高的查询延迟,因为在导航图上搜索存在大量随机数据读取;

(3) 压缩方法(比如PQ)在有限内存下能处理更多数据,但有精度“天花板”;

2. Opportunities

(1) 尽管压缩方法Top-K召回率较低,但如果我们提升召回的数量从K到R(R > K, 但不会比K过大),Top-K召回率将显著提升,下图的Figure 1(a)证实了这一点(采用的是IVFPQ算法)。

在这里插入图片描述

(2) 量化压缩方法(主要是IVFPQ)在优化查询延迟上面临一个窘境,查询延迟主要受第一层聚类个数的限制,而聚类个数过多和过少都会带来问题,过多会使 T S T_S TS过大,过少会使 T C T_C TC过大。Figure 1(b)是这两个时间随不同选中类数量个数变化。

在这里插入图片描述

(3) Figure 2表明,更大的聚类个数( N C NC NC)减少了在达到相同召回率下需要扫描的向量数。

3. Design Overview

抽象来说,GRIP包含两个阶段:

  1. preview stage: 一个适配内存的索引,使查询能快速定位候选结果;
  2. validation stage: 一个轻量级SSD访问机制,用原始向量验证选中的候选获取Top-K结果。

下图是GRIP的概览,DRAM中包含GRI导航图索引和优化的PQ编码(PQ基础上加了PDV),SSD上包含原始向量。

在这里插入图片描述

4. Algorithms and Optimizations

  1. 优化了HNSW索引弱连通性,比如在Deep10M数据集上对200K个质心构建的HNSW(出度为20)约900个顶点入度为0,这些入度为0的顶点是无法从其它顶点到达的。针对这个问题,本文通过对HNSW额外两轮遍历以挑战边,确保所有顶点都是可达的。

  2. 分析了通过PQ编码近似计算的各距离分量,预计算与查询无关的分量并保存为PDV。(好像FAISS库里面也做了这个事情)

  3. 因为验证候选并不需要顺序执行,这给利用SSD的并行机制提供可能。本文将候选列表划分为多个batch,然后从SSD中异步载入batch,一旦全精度向量载入DRAM,就会立即验证该候选。这样做有两个优点:(1) 并行载入数据更好利用带宽;(2) 高延迟的操作可以一定程度隐藏。

实验分析

ANNS Performance Comparison

与IVFPQ相比,内存消耗上略高于IVFPQ,原因应该是内存里面增加了导航图索引,且PQ上也附加了PDV;召回和延迟都碾压IVFPQ,应该主要是导航图和原始向量重排的功劳。

与HNSW相比,召回差不多情况下延迟普遍要高于HNSW,内存消耗要远低于HNSW。HNSW有一个值得关注的现象是,召回较高的情况下,继续增加efSearch并能带来明显性能提升,这可能主要由于上面提到的一些入度为0的顶点导致的。

与L&C相比,在低召回下L&C比GRIP好,在高召回下GRIP显著优于L&C,且L&C内存消耗更大。

Effect of Different Components

GRI和PQ*部分的独立性能和联合性能如下图:

在这里插入图片描述

HNSW召回最近的 N s c a n N_{scan} Nscan个类的精度(与真实最近的 N s c a n N_{scan} Nscan个类对比)随着efS的增大而增加; N s c a n N_{scan} Nscan越大,精度越低。

在这里插入图片描述

下表表面一个较小的候选尺寸(R)就足够获取高的召回率。

在这里插入图片描述

与没有优化从SSD载入数据相比,异步并行优化后效率得到显著提升。

在这里插入图片描述

总结

内存导航一下还是挺有用的。

个人主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值