RecSSD:基于推荐推理的固态硬盘近距离数据处理
摘要
神经个性化推荐模型被广泛应用于各种数据中心应用,包括搜索、社交媒体和娱乐。最先进的模型由大型嵌入表组成,这些表具有数十亿个参数,需要较大的内存容量。不幸的是,大而快速的基于dram的内存消耗了很高的基础设施成本。传统的基于ssd的存储解决方案的容量要大一个数量级,但读延迟和带宽更差,从而降低了推理性能。RecSSD是一个基于近数据处理的SSD内存系统,为神经推荐推理定制,通过2×compared在8个行业代表性模型中使用COTS SSD,减少端到端模型推理延迟。
CCS的概念
硬件→外部存储;·计算机系统组织→神经网络。
关键词
near data processing(近数据处理),神经网络,固态驱动器
1 介绍
推荐算法被用于各种互联网服务,如社交媒体、娱乐、电子商务和搜索[20,37,435]。为了有效地向用户提供准确、个性化和可扩展的推荐,最先进的算法使用基于深度学习的解决方案。这些算法消耗了工业数据中心大量的基础设施容量和周期。例如,与其他人工智能驱动的应用程序相比,推荐占脸书数据中心基础设施容量的10倍[20,28,30]。谷歌、阿里巴巴和亚马逊也有类似的产能需求。
神经推荐模型的关键区别特征之一是使用大的嵌入表来处理分类输入特征。虽然大型嵌入表支持更高的个性化,但它们消耗的存储空间高达数百千兆字节[20,32]。事实上,在许多情况下,推荐模型的大小是由服务器上可用的内存量来设置的[20]。一个有前途的替代方法是在固态硬盘中存储嵌入表。虽然固态硬盘的存储容量比主存储系统高几个数量级,但它们的读写性能较慢。为了隐藏更长的固态硬盘读写延迟,以前基于固态硬盘的系统与推荐模型中的其他层重叠计算,并在基于动态随机存取存储器的主存储器中缓存频繁访问的嵌入向量[17,41,42]。
我们提出了一个近似数据处理(NDP)解决方案,它是为推荐推理定制的,提高了用于嵌入表操作的底层固态硬盘存储的性能。为了充分利用内部固态硬盘带宽,减少主机中央处理器和固态硬盘内存之间的往返数据通信开销,回收固态硬盘将整个嵌入表操作(包括收集和聚合计算)转移到固态硬盘。与基线SSD相比,我们证明了RecSSD在真实的OpenSSD系统上提供了4倍的嵌入操作延迟改进和2倍的端到端模型延迟改进。除了提供嵌入操作,RecSSD还利用了推荐推理查询的局部模式。RecSSD表明,主机端和SSD端缓存的结合补充了NDP,并减少了端到端模型推断延迟。为了证明所提出的设计在服务器级数据中心系统中的可行性和实用性,我们在一个真实的开源Cosmos+OpenSSD系统上实现了RecSSD。
本文的主要贡献是:
- 我们设计了RecSSD,这是第一个基于NDP的SSD系统,用于推荐推理。改进传统固态硬盘系统的性能,建议的设计针对使用固态硬盘执行数据中心规模建议的主要性能瓶颈。此外,延迟改进进一步实现了具有更高存储容量的推荐模型,同时降低了基础架构成本。
- 我们在Cosmos+OpenSSD硬件之上的真实系统中实现RecSSD。该实施展示了基于闪存的固态硬盘在行业规模推荐中的可行性。为了给数据中心规模部署提供可行的解决方案,我们在FTL固件中实施了RecSSD该接口与现有的NVMe协议兼容,不需要改变硬件。
- 我们评估了八个行业代表性模型的建议设计,这些模型跨越不同的用例(例如,社交媒体、电子商务、娱乐)。在这八个模型中,我们的真实系统评估显示,五个模型(其运行时由计算密集型光纤通道层主导)使用固态硬盘实现了与动态随机存取存储器相当的性能。其余三个模型由内存限制的嵌入表操作主导。除了高度优化的混合动态随机存取存储器-固态硬盘系统之外,我们还证明,对于单个嵌入操作,RecSSD将性能提高了4倍,转化为高达2倍的端到端推荐推理延迟降低。
2 背景
2.1 推荐系统
通常在商业应用中,推荐系统通过在用户偏好的背景下预测所述项目的价值来推荐用户。事实上,精心调整的个性化推荐系统构成了许多需要实时响应的互联网服务的支柱,包括社交媒体、电子商务和在线娱乐。现代推荐系统实现了基于深度学习的解决方案,支持更复杂的用户建模。最近的工作表明,基于深度学习的推荐系统不仅推动了产品的成功[13,37,40],而且还主导了数据中心的人工智能培训和推理能力[20,21,29]。因此,需要使数据中心规模的推荐解决方案更加高效和可扩展。
模型架构概述 如图1所示,基于深度学习的推荐模型包括两个完全连接的层。如图1所示,基于深度学习的推荐模型包括两个完全连接的层和不同大小的嵌入表。光纤通道层通过引入常规的媒体访问控制操作来强调计算能力,而嵌入表引用通过引入不规则的内存查找来强调内存带宽。基于特定的操作符组成和维度,推荐模型跨越了不同的架构范围。例如,组合底部FC输出和嵌入表操作的运算符取决于应用程序用例。此外,推荐模型实现了各种大小的FC层和嵌入表。
处理分类输入对于建议而言,模型使用嵌入表操作来处理分类输入特征。嵌入表被组织成使得每行是唯一的嵌入向量,通常包括16、32或64个学习特征(即,表的列数)。对于每个推理,一组嵌入向量,由一系列标识(例如,多热编码分类输入)指定,被聚合在一起。将嵌入向量聚合在一起的常见操作包括求和、平均、连接和矩阵乘法[30,445];图1显示了一个使用求和的例子。推理请求通常被成批处理,以分摊控制开销并更好地利用计算资源。此外,模型通常包含许多嵌入表。目前,生产规模的数据中心在动态随机存取存储器中存储嵌入表,而中央处理器执行嵌入表操作,优化,如矢量化指令和软件预取[2]。
嵌入表操作带来了独特的挑战:
- 容量:行业规模的嵌入表有多达数亿行,导致嵌入表通常需要高达10GBs的存储空间[20]。事实上,来自行业的出版物表明,神经推荐模型中所有嵌入表的总容量可能需要TBs的存储空间[41,42]
- 不规则访问:分类输入特征是稀疏的多热编码向量。高稀疏性导致每个请求只能访问一小部分嵌入向量。此外,来自不同用户的后续请求之间的访问模式可能非常不同,导致嵌入表操作导致不规则的访问。
-
低计算强度:嵌入表的整体计算强度比其他深度学习工作负载低几个数量级,排除了使用最近提出的SIMD、脉动阵列和数据流硬件加速器的高效执行[20]。
这三个特点——大容量需求、不规则的内存访问和低计算强度——使闪存技术成为嵌入表格的一个有趣目标。
2.2 闪存系统
闪存的架构 NAND闪存是市场上使用最广泛的SSD构造块。与传统的基于磁盘的存储系统相比,NAND闪存在读写延迟和带宽方面具有更高的性能[12]。图2展示了NAND闪存存储系统的整体架构。为了执行读取操作,主机使用NVMe协议通过PCIe与固态硬盘上的主机控制器通信。主机请求逻辑块,这些逻辑块由运行在固态硬盘微处理器上的闪存转换层(FTL)提供服务。FTL调度和控制一系列闪存控制器,这些控制器按通道组织,向一个通道上的所有闪存芯片提供特定命令,并提供跨多个通道的DMA功能。为了在闪存控制器的直接存储器存取引擎和主机NVMe直接存储器存取引擎之间传输数据,控制器使用了一个板载动态随机存取存储器缓冲器。
闪存转换层(FTL) 为了保持与现有驱动程序和文件系统的兼容性,闪存固态硬盘系统实施了FTL。FTL向主机系统公开逻辑块设备接口,同时管理底层NAND闪存系统。这包括执行关键功能,例如(1)维护逻辑和物理页面之间的间接映射,(2)维护类似日志的写机制,以顺序添加擦除块中的数据并使陈旧数据[33]无效,(3)垃圾收集,以及(4)损耗均衡。如图2所示,为了执行这一组不同的任务,FTL在通用微处理器上运行。
固态硬盘存储的性能特征 与基于动态随机存取存储器的主存储器系统相比,基于闪存的存储系统具有高数量级的存储密度[12],能够以更低的基础设施成本实现更高的容量,每比特比动态随机存取存储器便宜约4-8倍[16]。尽管有这些优势,闪存带来了许多性能挑战。单个闪存封装提供32-40MB/秒的有限带宽[11]。此外,写入闪存的速度通常要慢得多,会导致O(ms)的延迟。为了帮助解决这些限制,固态硬盘通过将闪存封装组织为由单个内存控制器处理的连接通道阵列(例如2-10个通道)来暴露大量内部带宽。由于逻辑块可以在多个闪存包中进行分条,因此数据访问可以并行进行,以提供更高的聚合带宽,并通过并发工作隐藏高延迟操作。
3 面向神经推荐的固态硬盘存储
为了更好地理解固态硬盘存储在神经推荐推理中的作用,我们从初始表征开始。首先,我们展示了在云规模生产环境中运行的推荐模型的内存访问模式特征,并描述了在固态硬盘上执行嵌入执行的局部性优化机会。然后,我们进一步研究了在固态硬盘中存储嵌入表和执行相关计算对动态随机存取存储器的影响[26]。表征研究的重点是嵌入表操作,然后是对端到端模型性能的评估。
3.1 在生产模型中嵌入访问模式
固态硬盘系统的一个重要特性是,固态硬盘作为块设备运行,数据以粗略的块传输。当考虑固态硬盘的有效带宽使用时,这是一个重要因素。该硬件是为顺序磁盘访问设计的,数据以任意大的块流传输。然而,较大的访问粒度会影响需要随机、稀疏访问的工作负载的性能,从而在神经推荐模型中嵌入表访问和操作。因此,了解嵌入表的独特内存访问模式非常重要。此外,缓存技术对于利用时间重用和最大化块访问的空间局部性变得更加重要。
图3分别以256B、1KB和4KB的粒度描述了嵌入表的重用分布。x轴表示在执行实时推荐推理服务时访问的页面(按相应的命中计数以升序排序),而y轴通过分析云规模生产环境中运行的推荐模型记录的嵌入表访问来显示累积命中计数。嵌入表的访问模式遵循幂律分布。根据页面大小的不同,尾部的倾斜度也会发生变化。大多数重用仍然集中在几个热内存区域,几百个页面可以捕获30%的重用,而缓存几千个页面可以将重用扩展到50%以上。
热门页面的集中程度因各个嵌入表而异。图4描述了不同的独立嵌入表的内存局部性模式。使用不同缓存容量的16路LRU 4KB页面缓存,在云规模生产环境中运行的推荐模型的不同嵌入表中,命中率相差很大,从10%以下到90%以上。随着页面缓存容量的增加,可以在页面缓存中捕获更多的嵌入向量,从而导致更高的重用。利用每个嵌入表16MB的页面缓存,可以在本研究分析的所有嵌入表中实现超过50%的重用。可以进一步优化每个嵌入表的特定页面缓存容量,以获得更好的效率。
嵌入表访问的局部性在许多方面影响固态硬盘系统的设计和性能。首先,由于有限的动态随机存取存储器容量和潜在的大重用距离,板载固态硬盘缓存很难实现。尽管如此,重用的分布和相对较小的热页集合表明静态分区策略是合理有效的,其中热页可以存储在主机端的动态随机存取存储器中。但是,最重要的是,不同的页面重用模式(图4)表明,虽然在某些情况下,缓存可以用来有效地处理块访问,但也需要更有效地处理稀疏访问的策略。先前的工作[17]已经彻底研究了高级缓存技术,同时我们提出了正交解决方案,其具体目标是提高稀疏访问的效率。我们通过使用稍微简单一些的缓存策略(标准LRU软件缓存和静态分区)以及在各种输入局部性分布中扫描设计空间来评估我们提出的技术。
3.2 单个嵌入操作的性能
考虑到它们独特的内存访问模式,在固态硬盘和动态随机存取存储器中存储嵌入表对底层内存系统的性能有很大影响。图5展示了使用动态随机存取存储器和固态硬盘的单个嵌入表操作在一系列批处理大小上的性能。嵌入表有一百万行,嵌入向量维数为32,每个表有80次查找,这对于行业规模的模型是典型的,例如脸书的嵌入主导的推荐网络[19,20]。对于一个优化的基于动态随机存取存储器的嵌入表操作,我们分析了Caffe2 [1]中稀疏存储操作的性能。如图5所示,与动态随机存取存储器基线相比,访问存储在固态硬盘中的嵌入表会导致三个数量级的延迟。这是由于通过PCIe访问嵌入表的软件开销以及底层固态硬盘系统中低几个数量级的读取带宽造成的——10K·IOPS或固态硬盘上的10MB/s随机读取带宽与动态随机存取存储器上的1GB/s相比。因此,尽管固态硬盘存储对不断增长的行业神经推荐模型具有吸引力,但仍有很大的空间来提高嵌入表操作的性能。
3.3 端到端推荐模型的性能
虽然嵌入表使推荐系统能够更准确地建模用户兴趣,如图1所示,但是在考虑端到端推荐推理时,嵌入只是一个组件。因此,为了了解在固态硬盘内存中嵌入表对端到端性能的影响,我们描述了各种典型网络模型架构对推荐推理的性能影响。
我们的评估使用了八个开源推荐模型[19],代表了来自脸书、谷歌和阿里巴巴的行业级推理用例[20,22,30,435]。在本研究中,模型根据各自的性能特征分为两类:嵌入主导型和MLP主导型。以MLP为主导的模型,如宽和深(WD)、多任务宽和深(MTWND)、深兴趣(DIN)、深兴趣进化(迪恩)和神经协同过滤(NCF),将绝大部分执行时间花在矩阵运算上。另一方面,嵌入占主导地位的模型,如DLRM-RMC1、DLRM-RMC2和DLRM-RMC3,将大部分时间用于处理嵌入表操作。关于详细的操作员故障和基准模型特征,我们请读者参考[19]。
图6显示了当嵌入表分别存储在动态随机存取存储器和固态硬盘中时,八个推荐模型的执行时间,批处理大小为64。MLP主导的模型的执行时间在两个存储系统之间基本上没有差别。与动态随机存取存储器相比,在固态硬盘中存储WND、MTWND、迪恩和NCF的表格会使模型延迟分别增加1.01×、1.01×、1.09和1.01×。另一方面,在固态硬盘而不是动态随机存取存储器中存储嵌入表会显著影响嵌入主导模型的执行时间。例如,嵌入主导模型的执行时间,如DLR-MRMC1、DLRM-RMC2、DLRM-RMC3,降低了几个数量级。
3.4 加速和优化的机会
当嵌入存储在固态硬盘中时,考虑到单个嵌入操作和端到端模型的性能特征,我们发现了许多推理加速和优化的机会。首先,在MLP主导的模型中,绝大多数的执行时间用于矩阵运算;因此,固态硬盘系统成为在高密度存储基底中存储嵌入表的现有解决方案,降低了数据中心规模推荐推理的基础设施成本
虽然固态硬盘是MLP主导的模型的一个有吸引力的目标,但性能仍有很大的提升空间,尤其是当嵌入式表操作被嵌入主导的推荐模型的固态硬盘所取代时。为了弥补性能差距,本文建议利用商用固态硬盘的现有计算能力,使用近数据处理(NDP)。先前的工作表明,基于NDP的固态硬盘系统可以提高各种不同应用领域的性能,例如数据库和图形分析[31,34]。当使用轻量级计算处理大量输入数据的聚集-减少操作时,NDP解决方案特别有效。嵌入表操作也遵循这种计算范式。通过将计算与基于闪存的存储系统放在同一位置,NDP可以帮助减少PCIe通信中的往返次数和延迟开销,并提高固态硬盘的带宽利用率(详见第4节)。
总之,这项工作的重点是展示基于固态硬盘的存储在MLP主导的推荐模型中的可行性,并为神经推荐定制基于NDP的固态硬盘系统,以释放固态硬盘存储容量在嵌入式主导模型中的优势。
4 RECSSD设计
我们提出了一个快速数据处理(NDP)解决方案,用于在固态硬盘内存上高效地嵌入表操作。与传统固态硬盘存储系统相比,RecSSD通过利用内部固态硬盘带宽而不是外部PCIe来增加闪存的带宽,通过将有用数据打包到返回的逻辑块中来大大减少通过PCIe传输的未使用数据,并通过减少相同数据量所需的输入/输出命令数量来减少主机驱动程序堆栈中的命令和控制开销。为了保持与现有NVMe协议和驱动程序的兼容性,RecSSD在SSD的FTL内实施,不需要修改硬件基底,为数据中心规模部署铺平了道路。本节描述了RecSSD的总体设计和实施。首先,我们概述了在固态硬盘系统中嵌入操作是如何映射到FTL的;接下来,我们详细介绍了RecSSD如何在嵌入表操作中利用时间局部性来提高性能;最后,我们描述了在真实系统中实现RecSSD的可行性。
4.1 将嵌入操作映射到FTL
RecSSD旨在加速推荐推理的嵌入表操作。在大多数高级机器学习框架中,这些嵌入操作被实现为特定的定制操作符。这些操作器可以使用各种支持硬件/软件技术来实现,通常是用于传统嵌入操作的基于动态随机存取存储器的数据结构。RecSSD通过将计算移动到SSD FTL来实现使用SSD存储的嵌入操作,并在主机上使用更高级别框架运营商实施中基于NDP的定制驱动程序。
考虑到巨大的存储需求,嵌入表操作(例如,Caffe2中的SparseLengthSum)会跨越固态硬盘系统中的多个页面。一个标准的FTL提供高度优化的软件,支持单独的页面调度和维护;RecSSD在为单个闪存页面请求和操作设计的请求队列和数据缓冲区之上运行。为了支持多页sparselengthum(SLS)操作,我们在现有的页面调度层之上添加了一个调度层——附带缓冲空间和请求队列。所提出的SLS调度层将来自一组即时SLS请求的单个页面请求馈送到现有的页面级调度器中,以保证SLS请求的高吞吐量。现有的页面级调度正常进行,以确保页面操作最大化可用的内部内存并行度。
图7详细介绍了建议的RecSSD设计,该设计利用NDP增强了SSD系统,以提高内部闪存带宽和嵌入表操作的整体性能。
数据结构特别是,为了支持NDP SLS,RecSSD增加了两个主要的系统组件:一个挂起的SLS请求缓冲区和一个专门的嵌入缓存。这些组件在图7中被涂成红色。
每个SLS操作在挂起的SLS请求缓冲区中分配一个条目。每个条目包含五个主要元素:(输入配置)缓冲区空间,用于存储从主机传递的SLS配置数据,(状态)各种数据结构,用于存储重新格式化的输入配置和跟踪完成状态的计数器,(挂起的闪存页面请求)要提交给低级页面请求队列的挂起的闪存页面读取请求队列,(挂起的主机页面请求)完成后要提供给主机的挂起的结果逻辑块请求队列,以及(结果暂存区)这些结果页面的缓冲区空间。
启动嵌入请求当FTL收到类似NVMe写命令形式的SLS请求时,FTL会分配一个SLS请求条目。然后,FTL使用NVMe主机控制器触发来自主机的配置数据的DMA(步骤1a)。收到配置数据后,FTL需要处理数据,初始化完成状态计数器,并填充包含重新格式化的输入数据的自定义数据结构(填充元素2 -状态)。该处理步骤计算哪些fmash Page必须被访问,并通过fmash Page分离输入嵌入,使得每页处理计算可以容易地访问其自己的输入嵌入。在输入数据的扫描过程中,快速路径还可以检查嵌入缓存中输入嵌入的可用性(本节稍后讨论),避免fmash页面读取请求(步骤2a),否则将这些闪存页面请求放入挂起队列(步骤2b)。配置处理完成后,请求条目被标记为已配置,未决的闪存页面请求可以被拉进并馈送到低级页面请求队列(步骤3a)。如果页面已经存在于页面高速缓存中,则可以直接处理该页面(步骤3b)。当FTL收到类似SLS读取的NVMe命令时(与步骤2-5异步),它会搜索相关的SLS请求条目,并填充挂起的主机页面请求队列(步骤1b)。
发出单独的闪存请求在FTL调度程序轮询循环的高级别上,调度程序将维护指向SLS请求缓冲区中条目的指针。在处理低级请求队列之前,调度程序将从当前SLS条目的挂起闪存页面请求队列中清除队列。然后,调度器将执行处理低级页面请求队列的迭代,并且不管完成与否都递增SLS请求缓冲指针,从而以循环方式公平地处理请求。
返回单个闪存请求完成与SLS请求相关联的闪存页面读取请求后(步骤4),将为该页面触发提取和缩减计算。驻留在该页面中的请求所需的嵌入将从页面缓冲区条目中读取,并累积到该SLS请求的结果缓冲区空间中的适当结果嵌入中(步骤5)。重新格式化的输入配置允许页面处理功能快速索引需要处理的嵌入,并适当更新完成计数器。
返回嵌入请求在FTL调度程序轮询循环的高级别,调度程序将检查SLS请求中已完成的主机页面请求。如果已完成的页面准备就绪,并且NVMe主机控制器可用,调度程序将触发控制器将结果页面DMA回主机(步骤6)。在完成SLS请求中的所有结果页面后,SLS请求条目将被解除分配。NVMe主机控制器将自动跟踪已完成的页面并完成NVMe主机命令。
4.2 在嵌入操作中利用时间局部性
多线程和流水线除了基本的NDP实现之外,还有许多常规优化可以应用于NDP闪存操作之上。多线程和软件流水线可用于将NDP单反输入/输出操作与神经网络计算的其余部分重叠。为此,我们使用一个SLS工作者线程池来获取嵌入,并将后置SLS嵌入馈送给神经网络工作者。我们将SLS工作线程数与固态硬盘驱动程序堆栈中独立可用的输入/输出队列数进行匹配。然后,我们将我们的神经网络工作人员与可用的CPU资源进行匹配。
动态随机存取存储器缓存是另一种技术,以前在推荐推理服务的上下文中已经研究过[17]。在我们的NDP实施中,可以选择主机动态随机存取存储器缓存和固态硬盘内部动态随机存取存储器缓存。
主机端DRAM缓存因为我们的NDP SLS操作员将累积的结果嵌入返回给主机,所以我们不能使用工作负载的现有NDP SLS请求来填充主机DRAM嵌入缓存。为了仍然利用可用的主机动态随机存取存储器,我们实现了一种利用输入数据格式的静态分区技术,该技术可以对嵌入表进行分区,使得频繁访问的嵌入存储在主机动态随机存取存储器中,而不常用的嵌入存储在固态硬盘上。这个解决方案的动机是第3.1节中的描述,展示了页面访问的幂律分布。因为存在相对较少的高访问嵌入,静态分区成为一个可行的解决方案。有了这个特性,我们的系统使用我们的NDP函数请求固态硬盘嵌入,并对返回的部分和进行后处理,以包括主机上动态随机存取存储器缓存中包含的嵌入。
固态硬盘端动态随机存取存储器缓存对于主机DRAM缓存,使用大型全关联LRU软件缓存是完全可行的。然而,对于固态硬盘内部的动态随机存取存储器缓存,我们必须更仔细地考虑我们的软件缓存技术的实现开销。FTL运行在相对简单的中央处理器上,动态随机存取存储器空间有限。可用的代码和库是为嵌入式系统专门设计的,因此代码紧凑,计算开销低,并且具有更一致的性能。固态硬盘FTL的设计没有动态内存分配和垃圾收集。当实现任何级别的关联性时,在每次访问中维护LRU或伪LRU信息的成本必须与缓存命中率收益相平衡。对于当前的评估,我们实现了一个直接映射的固态硬盘端动态随机存取存储器缓存。
4.3 可行性与实现:NDP SLS接口
我们的定制接口与现有的NVMe协议保持完全兼容,利用一个未使用的命令位来指示嵌入命令。除了这个位,我们的接口简单地使用了传统读/写命令的现有命令结构。嵌入处理参数通过一个特殊的类似写的命令传递给固态硬盘系统,该命令启动嵌入处理。随后的类似读取的命令收集结果页面。传递的参数包括嵌入向量维度,如属性大小和向量长度、要收集的输入嵌入总数、要返回的结果嵌入总数,以及指定输入嵌入及其累积目的地的(输入标识、结果标识)对列表。添加一个限制,即该列表按输入标识排序,可以在固态硬盘系统上实现更高效的处理,固态硬盘系统包含的中央处理器远不如主机系统强大。配置写命令和结果读命令通过在请求的起始逻辑块地址(SLBA)中嵌入请求标识而在固态硬盘内部相互关联。SLBA被设置为添加了唯一请求标识的目标嵌入表的起始地址。通过假设最小的表大小和对齐约束,可以使用模数运算符在固态硬盘系统中分离两个输入。
我们还注意到,除了保持与现有NVMe协议的兼容性之外,通过在固态硬盘FTL中纯粹通过软件实现对嵌入表操作的支持,我们确保了RecSSD与现有商品固态硬盘硬件完全兼容。这种实现方法依赖于所需计算的轻量级特性,使得固态硬盘微处理器不会因执行额外的缩减计算而在其调度功能中过度延迟。
5 方法和实施
本节描述了用于评估建议的RecSSD设计的方法和实验设置。这里我们总结了OpenSSD平台、Micron UNVMe、推荐模型和使用的输入跟踪。其他详细信息可在附录中找到。
OpenSSD为了评估将SLS操作器安装到FTL固态硬盘上的效果,我们在开源的Cosmos+OpenSSD系统中实现了一个功能齐全的NDP SLS操作器[4]。开发平台Cosmos+ OpenSSD拥有2TB容量、功能齐全的NVMe闪存SSD,以及可定制的闪存控制器和FTL固件。为了给数据中心规模部署提供一个可行的解决方案,我们在FTL固件上实现了资源回收;该接口与现有的NVMe协议兼容,不需要硬件改变。
Micron UNVMe除了与NVMe兼容的OpenSSD系统之外,RecSSD接口也在Micron UNVMe驱动程序库中实现[10]。我们修改了UNVMe驱动程序堆栈,以包括两个额外的命令,建立在NVMe读/写命令的现有命令结构之上,并通过设置一个额外的未使用的命令位来区分,如第4节所述。命令接口支持灵活的输入数据和命令配置,同时保持与现有NVMe主机控制器的兼容性。UNVMe驱动程序使用低延迟用户空间库,该库轮询NVMe读命令的完成情况,并使用最大数量的线程/命令队列。
神经推荐模型为了评估RecSSD,我们使用了deeprecinfora[19]中提供的八个具有行业代表性的推荐模型的不同集合,这些模型是使用Caffe2 [1]在Python中实现的。为了评估端到端推荐模型在真实系统上的性能,我们将SparseLengthsSum操作(在Caffe2中嵌入表操作)与定制的NDP解决方案相结合。我们将嵌入操作提供给了RecSSD,我们使用CTypes设计了一个低开销的Python级接口,它允许我们将修改后的UNVMe作为共享库加载,并调用NVMe和NDP的SLS I/O命令。将来,这些操作可以移植到自定义的Caffe2运算符函数中,并与其他Caffe2 C++二进制文件一起编译。
输入跟踪和性能指标除了推荐模型本身之外,我们还使用合成生成的输入轨迹来测试网络。我们从脸书开放搜索的DLRM [30]用图4所示的工业规模推荐系统的位置分析来测试开源合成跟踪生成器。合成轨迹生成器装备有输入嵌入的似然分布,该输入嵌入跨越先前请求的嵌入向量的堆栈距离。我们基于参数值k生成指数分布,扫描k生成具有不同程度局部性的输入轨迹;例如,将k设置为0、1和2会生成分别具有13%、54%和72%唯一访问的轨迹[17,20]。考虑到高缓存未命中率和我们的局部性分析,我们假设每个固态硬盘页面有一个16KB的嵌入向量。对于评估结果,我们假设嵌入表有100万个向量,并且主机端DRAM缓存为每个嵌入表存储多达2K个条目。
因为我们的原型将我们限制在单模型单固态硬盘系统中,所以我们不会将结果集中在延迟受限的吞吐量上,而是直接请求延迟,这是确定基于固态硬盘的建议的性能可行性的一个关键指标。我们对许多批次的延迟结果进行平均,确保稳态行为。
物理计算基础设施所有实验都在四核英特尔Skylake台式机上运行。我们的机器使用G.SKILL TridentZ系列64GB (4 x 16GB) 288针DDR4 SDRAM DDR4 3200 (PC4 25600)台式内存型号F4-3200C14Q64GTZ DRAM。动态随机存取存储器具有纳秒级的延迟和10gb/s的吞吐量。我们的原型固态硬盘系统支持每个通道8个通道的10K IOPs和16KB的页面大小,从而实现最大吞吐量,顺序读取略低于1.4GB/s。较新的固态硬盘系统将具有更高的吞吐量。单页访问延迟在10到100微秒的范围内。
6 评估ReCSSD
在这里,我们提出了评价RecSSD性能的实证结果。总的来说,结果表明,RecSSD提供了2×speedup以上的基线SSD推荐推理。本节首先分析RecSSDusing基于嵌入表操作的微基准的基本权衡。在微观基准分析之后,本节将比较基线SSD系统和RecSSD之间的端到端推荐模型的性能。在此分析的基础上,我们提出了使用主机端和SSD端DRAM缓存的基准SSD系统和RecSSD之间的性能权衡,以便在嵌入表访问时利用时间局域性。最后,本节对个体推荐网络架构参数对RecSSD性能的影响进行了敏感性研究。敏感性分析有助于了解RecSSD在未来推荐模型中的性能
6.1 加速嵌入表操作
图8展示了嵌入表操作的性能(即Caffe2 [2]中的稀疏性)。对于RecSSD,执行时间分为五个部分(即,配置写入、配置处理、转换和闪存读取),各批次大小不等。配置写入和配置处理分别表示将配置数据传输到固态硬盘所花费的时间和处理配置所花费的时间;传输后,内部数据结构被填充,闪存页面请求开始发出。Translation表示处理返回的Flash页面、提取必要的输入嵌入向量以及将向量累积到相应的结果缓冲空间所花费的时间。闪存就绪表示FTL管理和等待闪存操作的时间。
很难单独比较Translation的计算吞吐量和flash的IO带宽,因为计算与FTL内部的IO调度机制同步紧密耦合。通过硬件修改,这种计算可以解耦并并行进行。然而,我们可以通过观察在FTL花费的主要时间来间接观察瓶颈,无论是翻译计算还是闪存读取操作。
根据第3.1节的描述,我们研究了两种不同的内存访问模式:SEQ和STR。顺序(SEQ)内存访问模式代表嵌入表标识连续的用例。这在数据中心规模的推荐推理应用程序中不太可能发生,如图4所示,但是代表了具有极高页面局部性的用例。随机(STR)内存访问模式是使用分级嵌入表查找标识生成的,代表访问模式,其中每个访问的向量位于唯一的闪存页面上。鉴于推荐用例的巨大多样性,正如推荐模型架构的多样性所证明的那样[19],这两种内存访问模式允许我们在各种各样的用例中研究RecSSD的性能特征。此外,虽然当前的推荐用例表现出稀疏的访问模式,但是未来在细化和重构嵌入表方面的优化可能会增加局部性。
低局部嵌入访问的性能在随机内存查找访问模式下,RecSSD比基准SSD实现了高达4倍的性能提升。这种性能提升来自于内存级并行性的提高。RecSSD通过为每个嵌入操作并发执行闪存请求来提高内存级别的并行性,从而提高内部SSD带宽的利用率。如图8所示,RecSSD的FTL中大约有一半的时间花在翻译上。考虑到宇宙+开放固态硬盘系统[4]的1千兆赫双核ARM A9处理器的有限硬件能力,我们预计通过更快的固态硬盘微处理器或定制逻辑,翻译时间可以显著缩短。
高局部嵌入访问的性能与使用传统NVMe请求的基线固态硬盘系统相比,具有高空间局部性的顺序存取模式导致NDP性能较差。与随机或低局部性访问模式相比,顺序或高局部性嵌入访问访问较少的闪存页面,但需要相应的计算资源来聚合嵌入向量。在基线系统中,固态硬盘页面缓存将保存页面,而嵌入向量请求则通过系统顺序流式传输,并由中央处理器累积。同时,RecSSD也可以访问更少的闪存页面,嵌入向量是Cosmos+OpenSSD系统上的双核ARM A9处理器聚合的;这占了一半以上的执行时间(翻译),如图8所示。对于顺序访问,聚合更快的服务器级、主机英特尔CPU的优势超过了多个NVMe命令的开销不足。我们预计,NDP系统上更复杂的处理器将使用RecSSD消除轻微的性能下降。
6.2 加速端到端推荐模型
除了单个嵌入表操作之外,这里我们还评估了一系列具有行业代表性的推荐模型。首先,我们通过展示最简单朴素的实验配置来展示NDP的原始潜力。图9显示了RecSSD相对于传统SSD基线的加速比,没有操作流水线和缓存技术,并且使用随机生成的输入索引。我们观察到,许多型号存在NDP无法提供明显优势的情况,对于性能受到嵌入式操作和固态硬盘延迟限制的型号,NDP可以提供高达7倍的加速。由于底层模型参数(如第6.4节中讨论的每次查找的特征大小和索引)的差异,此处显示的跨模型的最大加速比高于单个嵌入操作的加速比(图8)
6.3 利用端到端模型中的局部性
除了端到端模型结果之外,我们还评估了带有操作符流水线和缓存的RecSSD的性能。这些优化技术,如第4节所述,应用于RecSSD和传统SSD系统之上。
图10(a-c)显示了仅采用固态硬盘端缓存的RecSSD和采用主机端缓存的传统固态硬盘基准的相对加速结果。回收固态硬盘利用固态硬盘动态随机存取存储器中的大型但直接映射的高速缓存,而基线利用主机动态随机存取存储器中的全关联LRU高速缓存。Batchsizes在1到32之间进行扫描,以及三个输入跟踪局部性条件k = 0,1,2。RecSSD的固态硬盘动态随机存取存储器缓存的命中率标记在每个加速栏的上方。基线LRU缓存命中率遵循位置分布的倒数,缓存中84%、44%和28%的命中率分别对应于等于0、1和2的k。注意,LRU缓存命中率跨越了来自图4所示的生产规模推荐模型的初始特征的不同嵌入访问模式集。
凭借高局部性(即低k),传统固态硬盘系统比RecSSD实现了更高的性能。另一方面,低局部性的RecSSD优于传统基线。这是因为直接映射的缓存命中率无法与主机系统上更复杂的全关联LRU缓存的命中率相匹配,例如RM1的高批量运行。此外,与RM1/3相比,RM2具有更低的固态硬盘缓存命中率,这是由于每个请求需要更大数量的嵌入查找,并且时间局部性跨请求而不是查找。即便如此,在没有主机DRAM缓存的情况下,对于较低的局部性跟踪,RecSSD的性能也比基准高出1.5倍,在这种情况下,必须访问许多SSD页面,并且内部带宽增加的好处也很明显。
图10(d-f)显示了使用静态表分区和固态硬盘缓存的RecSSD的相对加速结果。使用静态表分区,我们通过静态地将最常用的嵌入放置在主机动态随机存取存储器缓存中来利用可用的主机动态随机存取存储器,详见第4节。每个条形上方标记的命中率代表静态分区主机动态随机存取存储器缓存中的可回收固态硬盘的命中率,而不是固态硬盘缓存的命中率
遵循传统的固态硬盘基准,静态分区有助于利用可用的主机动态随机存取存储器。然而,对于高时间局部性,它不能匹配全关联LRU缓存的命中率。随着更高的批处理大小以及每个请求更高的标记(如RM2所示),命中率逐渐接近25%,即静态分区相对于已用标识空间的大小。总的来说,图10显示了在静态分区的情况下,RecSSD比传统SSD基线实现了2倍的性能提升。当基准主机LRU缓存的命中率相对较低,以致必须访问许多固态硬盘页面时,就会出现这种情况,而RecSSD能够通过静态分区实现相当的主机动态随机存取存储器命中率。
总的来说,上述结果表明,当必须从固态硬盘中拉出页面时,以及当可用于固态硬盘的主机级缓存策略(静态分区)与基准LRU软件缓存具有相当的效率时,可回收固态硬盘的优势就会显现出来。尽管RecSSD随着缓存和局部性的改进而显示出收益递减,但我们注意到,由于RecSSD与现有的NVMe接口完全兼容,因此它可以与传统策略结合使用,并根据嵌入表的局部性进行切换。
6.4 敏感性研究:模型架构的影响
在本节中,我们将更仔细地研究模型参数对基准模型性能的影响。表1详细说明了RM1/2/3的参数空间。我们特别注意到绝对表大小不会影响我们的结果。不断增长的表大小确实为从容量受限的动态随机存取存储器转移到闪存固态硬盘提供了动力,但是嵌入查找性能取决于访问模式,而不是绝对的表大小
在图11中,我们看到特征大小和量化(影响嵌入向量相对于页面大小的大小)如何随着该比率的增长而显示出相对性能的下降。这是因为当最低内存访问单位接近内存块大小时,基线能够更有效地利用块访问,而从闪存访问的每个页面,RecSSD必须在SSD微处理器上执行更多的计算。在图11中,我们可以看到,虽然增加表数会降低性能,但这很快会被每次查找增加的索引带来的性能提升所超越。增加表数造成的性能损失是由于我们的NDP接口的实现。因为单个NDP调用处理单个表,所以命令开销的摊销是基于每个表的。另一方面,增加每次查找的索引数量会增加这种控制开销的摊销以及在固态硬盘上累积这些嵌入的价值,其中对于单次查找中累积的所有索引,只有一个向量被发送到主机。
7 相关工作
固态硬盘系统闪存技术的最新进展使其成为越来越引人注目的大规模部署存储系统。与基于磁盘的解决方案相比,固态硬盘的每瓦带宽和每美元带宽分别为2.6倍和3.2倍[12]。此外,考虑到高密度和高能效,固态硬盘也被用作数据中心动态随机存取存储器的替代品[12]。事实上,谷歌和百度之前的工作突出了现代固态硬盘系统是如何被用于数据中心的网络规模应用的[31,34]。此外,考虑到英特尔Optane技术的最新进展,平衡了类似DRAM的延迟和字节寻址能力与类似固态硬盘的密度,我们预计利用基于固态硬盘的存储系统的应用类型将会扩大[24]。事实上,针对万亿字节规模个性化推荐模型的培训平台在很大程度上依赖固态硬盘存储能力来实现高效且可扩展的执行[41]。
为了实现高效的固态硬盘执行,现代存储解决方案依赖于可编程内存系统[15]。利用这一计算能力,已经为其他数据中心应用的固态硬盘近数据处理的软件和硬件解决方案做了大量工作[14,18,25,31,35,36,38,39]。以前针对更通用的固态硬盘NDP解决方案的工作依赖于硬件修改、复杂的编程框架和大量修改的驱动子系统,以支持更复杂和通用计算任务的性能要求。我们的系统用这种通用性来换取简单性和应用特定性、性能和成本效益。
加速推荐推理鉴于人工智能和机器学习工作负载无处不在,已经有许多加速深度学习工作负载的建议。特别是,最近的工作表明,推荐工作负载在数据中心的人工智能容量中占主导地位[20]。因此,最近的工作提出了加速神经推荐。例如,作者在[23,27]中提出了一种用于人工智能加速器(即图形处理器)的定制内存管理单元,以加速跨多节点硬件平台的地址转换操作。鉴于嵌入表操作的低计算强度,最近的工作还探索了脸书推荐模型的近记忆处理的作用[26]。类似地,研究人员提出了闪存系统的应用,以存储脸书推荐模型[17]中的大型嵌入表,探索先进的缓存技术来缓解大型fmash页面的挑战。这些技术可以与RecSSD配合使用。在本文中,我们探讨了将近数据处理和NAND闪存系统相结合的角色,以进行大规模推荐,从而降低整体基础架构成本。此外,我们还针对大量推荐工作负载提供了真实的系统评估[19]。
8 结论
在本文中,我们提出了RecSSD,一个为神经推荐推理定制的近似数据处理解决方案。通过省略密钥嵌入表操作的计算,RecSSD减少了数据通信的往返时间,并提高了内部SSD的带宽利用率。此外,通过智能主机端和固态硬盘端缓存,RecSSD支持高性能嵌入表操作。我们通过在一个使用服务器级CPU的真实系统和一个与Micron UNVMe的驱动程序库兼容的OpenSSD系统中实现RecSSD来证明它的可行性。与普通固态硬盘系统相比,RecSSD将端到端神经推荐推理延迟降低了4倍,性能与基于DRAM的存储器相当。因此,RecSSD支持高效且可扩展的数据中心神经推荐推理。