3D NAND中基于图的近似最近邻搜索的Proxima近存储加速(下)

D.动态名单和提前终止
我们提出了一种动态列表和提前终止策略,以在图遍历过程中利用这些信息,如算法1所示。我们观察到,大多数查询在较小的T(候选列表大小)处收敛(找到它们的真实k-NN)。进一步增加T不会提高这些查询的召回率,只会增加计算成本。图6-(a)显示了DiskANN的这一趋势。我们看到在小T处收敛比迅速增加。对于像GLOVE这样的数据集,即使在大T下也具有较低的召回率,我们预计在给定的T下收敛的查询会更少,但总体趋势是一样的。基于此,我们设计了一种新的提前终止技术,该技术在图遍历过程中使用动态列表迭代调整T(第16行)。
E.顶点索引的间隙编码
图ANNS算法存储NN索引和原始数据。这导致了两个问题:
1. 获取顶点索引(NN索引)会在搜索过程中产生显著的数据访问开销,如图6-(b)所示,占80%至90%。
2.神经网络指数的大小与原始数据相当。现有算法使用统一的32-b整数来表示顶点索引。但是,不同图尺度的统一位宽是多余的,因为log2 N⌉-b足以表示大小为N的数据集的顶点索引。Proxima使用间隙编码来节省NN索引所需的空间和数据移动。图5-(a)显示了由12个元素的邻接表表示的4个索引和3个NN的示例。未压缩的32-b邻接列表消耗384-b空间。相比之下,间隙编码包括两个步骤:
首先,按升序对每行中的NN索引进行排序,然后将排序后的索引转换为除第一个索引外的前一个索引的差值。在这种情况下,比特宽度由最大差值的比特决定。因此,所需的空间减少到168-b。我们的实验表明,1M到100M数据集的图形需要20-b到26-b的间隙编码,导致至少19%到37%的图形索引数据压缩。压缩的图索引也有助于实现更快的图遍历,因为索引获取的开销减少了。
 
图6 (a)GLOVE、DEEP1M、SIFT的搜索收敛趋势。(b)使用不同程度的R进行内存流量细分。
A.架构概述
图7展示了Proxima加速器的架构,由两个主要部分组成:3D NAND磁贴和搜索引擎。Proxima是一个独立的近存储加速器,可以实现数据存储和高效的ANNS功能。这是通过利用先进的异构集成技术实现的,该技术将3D NAND晶片和CMOS晶片连接起来,以获得更好的效率和存储容量。
 
图7 3D NAND闪存中的Proxima加速器。
B.Proxima执行流程
Proxima加速器的执行主要由两个步骤组成:
1.图形数据预加载和
2.查询图搜索。在图搜索之前,需要使用第IV-E节所示的拟议数据映射方案将原始数据、原始数据的PQ代码和NN索引预存储到相应的物理地址中。
在存储了所需的数据后,图8显示了图搜索过程中搜索引擎内部的数据。整个图搜索包括四个步骤:步骤1是新查询的初始阶段,PQ模块根据查询数据计算非对称距离表(ADT)。计算出的ADT被传输到调度器指定的目标队列中的ADT内存。在步骤2中,队列中的候选列表弹出未评估的顶点,仲裁器生成相应的地址以从3D NAND核中获取NN索引(算法1中的第4-6行)。
获取的NN索引首先通过布隆过滤器来更新新访问的顶点,并过滤掉之前计算的顶点。然后,这些未访问顶点的PQ码由距离计算模块提取和计算(算法1中的第6-8行)。
在步骤3中,在访问了所有邻居之后,需要进行排序以选择前L个候选者(算法1中的第10行)。所实现的Bitonic分拣机是所有搜索队列共享的分拣机,因为它可以提供足够的吞吐量。
在基于PQ距离的搜索完成后,候选列表内存中的顶部顶点将使用其原始数据重新排序(算法1中的第12行)。图8中的步骤4对此进行了说明。同时,候选列表还检查是否满足提前终止条件。
 
图8 搜索引擎的内部架构。
我们基于3D NAND模拟器开发了一个模拟器,以预测图9中96层3D NAND的密度、面积和读取延迟之间的权衡,作为Proxima内核的设计指南。较大的页面大小可能会导致超过10 4ns的读取延迟。之前的工作表明,预充电和放电过程约占页面读取延迟的90%。长的预充电和放电时间是由数百个块和广泛的页面大小产生的大电容负载造成的。我们定制了Proxima 3D NAND内核,以减少长时间的读取延迟并提高数据粒度。
 
图9  96层3D NAND ffash的密度、面积和读取延迟权衡。
图索引重新排序。从ANNS工具生成的图具有高度随机的索引分布。我们首先对索引进行重新排序以增加其局部性,而不是直接映射不规则图索引。如图10-(a)所示,图索引的重新排序是基于顶点的访问频率。
较热(更频繁)的顶点具有较小的索引,这意味着入口点从0开始。顶点访问频率的计算基于随机采样基础数据的图搜索轨迹。图索引的重新排序有助于提高索引的局部性。
数据分配和地址转换。大多数图形搜索操作都与PQ代码和图形索引有关,而在重新排序步骤中,需要访问原始数据以进行精确的距离计算。我们让Proxima将原始数据单独存储在一些3D NAND内核中,而PQ代码和图形索引则存储在一起。如图10-(b)所示,我们使用核心级轮转地址映射方案,将具有连续索引的数据分配给连续的核心。此方案有助于最大限度地提高内存利用率。每个页面使用相同的比特长度来存储节点向量和相关的NN索引(度数<R的节点被填充到R以对齐地址)。图10-(a)显示了3D NAND内核每页中PQ代码和图形索引的耦合存储格式。
 
图10 (a)图索引重新排序和热节点重复。(b)地址映射。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D NAND中基于图的近似最近邻搜索的Proxima近存储加速(上)

3D NAND中基于图的近似最近邻搜索的Proxima近存储加速 摘要——近似最近邻搜索(ANNS)在各种应用中起着不可或缺的作用,包括推荐系统、信息检索和语义搜索。在尖端的ANNS算法中,基于图的方法在海量数据集上提供了卓越的准确性和可扩展性。然而,性能最好的基于图的ANN搜索解…

软件工程中的经验方法笔记

第一讲中上:收集数据(比如挖掘数据,etc)。 右中:分析数据:收集了数据自然要分析。定量:计算 定性:理解人们在说什么。 中下:解释数据:从数据科学的分析结果到软件工程方面的信息,我们需要知道某个特定的变量对整个软件工程的影响。 左中:干预、推荐:通过软件工程方…

推荐4书《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

【CodeForces训练记录】Codeforces Round 999, Div. 1 + Div. 2

训练情况 赛后反思 幽默A题WA了两发,B题在努力回忆set里面怎么upper_bound,开完两道就在罚坐了 A题 简单的性质:偶数+偶数=偶数,奇数+奇数=偶数,奇数+偶数=奇数,每次除完保证是奇数,所以我们只需要把偶数扔到第一个,接下来全部是奇数,答案是奇数个数加一,如果没有奇数…

Hyper-V中如何调整Ubuntu22虚拟机的分辨率

转载:Hyper-V中如何调整Ubuntu22虚拟机的分辨率 - 知乎 使用win10中的hyper-v安装ubuntu22,发现分辨率过低并且在ubuntu内无法调整display settings。以下为此问题的解决方法: 步骤:修改ubuntu系统中的grub文件; 在win10中,设置Hyper-v修改ubuntu系统中的grub文件 在ubun…

【算法部署】工具下篇

一、算法部署简介算法部署任务是将已开发的算法模型应用到实际场景中去的过程。这个过程通常需要在计算机、服务器或其它硬件设备上面运行算法模型,并编写一些代码来调用模型。任何模型其实都会涉及到模型部署任务,其实你在调用现成的API接口做推理的过程也可以叫做模型部署。…

【算法部署】工具上篇

算法部署简介算法部署任务是将已开发的算法模型应用到实际场景中去的过程。这个过程通常需要在计算机、服务器或其它硬件设备上面运行算法模型,并编写一些代码来调用模型。任何模型其实都会涉及到模型部署任务,其实你在调用现成的API接口做推理的过程也可以叫做模型部署。模型…

行锁,如何减少锁对性能的影响

什么是行锁? MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB 是支持行锁的,…

WHUWC 2025 游记

WHUWC 2025 游记 WHU 今年不知道为啥搞了个冬令营,我随手报了一发结果过了,看来真的是没什么人去。 不过感觉非常好啊!逃课+面积+旅游, WC 本身好像没那么重要。 不过这营只有一天,有点不牛。 Day -1 周六上完课,回家搞了几把 CS,被家长要求复健,但是我已经 AFO 一个多…

std::function 与 std::bind

函数封装与绑定 std::function 与 std::bind 封装 std::function 一个通用的多态函数封装器,它将一个可调用的对象函数指针 函数对象 Lammbda函数等 进行封装,方便在后续的代码中调用,先看下 function 类模板的定义函数返回类型:R 函数参数类型:Args绑定 std::bind

手机连接WiFi无线路由器,休眠后再打开,IPv6不工作。但同样路由下电脑IPv4,IPv6没有任何问题, 两种解决办法

1. 问题: 我的老旧的极路由4 B70是WiFi5,WiFi安全支持WPA2,不支持WPA3。我以前刷的是老毛子Pandavan。 WiFi5设备配合WPA2,如果手机是更新的WiFi6, 此时设备连接就会存在问题,就是一些WiFi6手机刚接入时一切正常,手机休眠后再次打开时IPv6不工作【连不通】,Ipv4正常。 断…