Zhen Peng,Minjia Zhang,Kai Li,Ruoming Jin,and
Bin Ren
公制。在实践中,找到确切的前向搜索可能非常耗时。
结果,搜索过程仅检查相似性图中的向量的子集,从而
导致
准确性对延迟
的权衡。准确率通常
由
召回
率来衡
量,召回率是检索到的前K个候选者( K
′
)中的真实最近
邻(K ′)的分数,定义
如下[18]:
随着线程数量的增加,同步开销占总搜索时间的50%以
上,成为整个搜索延迟的主要因素
原则上,可以
通过在插
入期间采用并发优先级队列或无锁算法来减轻这种同步开
销。然而,我们发现,
还有其他挑战严重限制了平行
(
′
)=
|
′
∩
|
-
-
|
′
∩
|
|
20
80
|
20 80
高
召回
率是期望的,因为低准确度的结果降低了用户
满意
度。 另一方面,延迟度量的是
寻找最接近的 邻居所花费
的时间. 低延迟是至关重要的,特别是使人工神经网络搜
索在线交互
式应用程序.
在给定的前提下,我们现在定义
我们在本文中处理的确
切问题:
15
10
5
0
1 2 4 8 16 32 64
的线程
图1. EP在Deep100M上的
延迟。
60
40
20
0
1 2 4 8 16 32 64
的线程
图2. EP增加了高同步。
头顶
问题定义。 考虑到相似性图和多核架构与 处理器,我们
的目标是设计一个并行搜索算法,使搜索延迟
达到一个给
定的召回目标是最小化。
4 基于图的ANN搜索中的挑战
我们首先讨论一
个简单的并行实现
,并分析其在多核CPU上的成本分析
稍后将在设计部分中指导设计
边缘并行(Edge-wise parallelism,EP)。假设成对
距离
计算(算法1中的第8 - 12行)在迭代中彼此不
相关,则通过将
距离计算拆分到多个线程来并行化邻居扩展步骤是一个自
然的想法。 我们将此
方案表示为
边并行
。边缘并行允许
邻
居扩展并行运行,同时
对每个邻居执行与顺序算法相同的计
算。边并行的另一个好处是,无论使用多少个线程,每次
执行都返回相同的结果 尽管它在简单性方面有好处,但这
种
自然的想法并不能带来良好的加速。事实上,由于
良好
调优的顺序基线,边缘并行
通常会达到次优性能。图图1显
示,为了在DEEP 100M数据集上达到0.999的召回目标(
详细
设置可以在第6节中找到),具有边缘并行性的多线程
搜索表
现不佳,即,
从1到64个线程没有加速。是什么原因导致
基于图的搜索在多核架构上的可扩展性差?
原因1:边缘并
行导致高同步成本。 扩展
边并行性的一个主要挑战是需要
执行大量的节点扩展
以在大型图上实现高精度
,从而导致
数百甚至有时数千次扩展轮。 由于每一轮都需要至少一个
全局同步,以根据所有候选者到队列点的距离来维持所
有候选者的顺序,因此这种
频繁的全局同步给搜索过程增
加了显著的同步
开销。图2显示
原因2:边并行导致计算强度低,使得搜索过程难以充
分利用内存带宽。 我们使用英特尔处理器
计数器监视器
[15]来测量各种数据集和图形下的内存带宽
利用率。 数据移
动主要来自节点扩展时的加载向量
。 表1显示,单线程执行
仅使用
英特尔至强融核处理器上峰值硬件内存带宽
消耗(80
GB/s)的3.4%以下,
表明多线程利用更多带宽
应能带来更
高性能。然而,使用32路边缘并行,内存带宽利用
率仅适
度增加至4.2%。 一些例外情况
(例如,SIFT 1M)甚至观
察到带宽消耗降低,这意味着边缘并行具有低
计算强度,这
使得使用所有可用的原始带宽具有挑战性。边并行计算强度
低的原因在于两个方面:(1)与矩阵乘法不同,逐点欧氏
距离计算是一个计算强度低的运算符
;(2)考虑到相似图自
然具有低
出度以避免
出度爆炸问题,一步中要扩展的邻居
数量有限
[19]。
表1.内存带宽(GB/s)测量。
原因3:边缘并行仍然需要许多迭代来收敛,导致步骤
之间的长顺序依赖
性。 在算法1中,搜索执行
一系列顺序
迭代(第5 - 13行),其中每个
迭代执行节点扩展。扩展
哪个节点
取决于前面步骤更新的优先级队列。此外,迭代次数
取决于召回
目标和图的大小。例如图图3显示,随着
召回目
标的增加,
在一亿规模数据集DEEP 100 M上找到前100个最
近邻居
的迭代次数随着召回目标的增加而急剧增加。