CN112835627A - 用于单指令多线程或单指令多数据类型处理器的近似最近邻域搜索 - Google Patents

用于单指令多线程或单指令多数据类型处理器的近似最近邻域搜索 Download PDF

Info

Publication number
CN112835627A
CN112835627A CN202011336853.4A CN202011336853A CN112835627A CN 112835627 A CN112835627 A CN 112835627A CN 202011336853 A CN202011336853 A CN 202011336853A CN 112835627 A CN112835627 A CN 112835627A
Authority
CN
China
Prior art keywords
vertex
priority queue
distance
query
query point
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011336853.4A
Other languages
English (en)
Other versions
CN112835627B (zh
Inventor
赵炜捷
谭树龙
李平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Baidu USA LLC
Original Assignee
Baidu USA LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Baidu USA LLC filed Critical Baidu USA LLC
Publication of CN112835627A publication Critical patent/CN112835627A/zh
Application granted granted Critical
Publication of CN112835627B publication Critical patent/CN112835627B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/23Clustering techniques
    • G06F18/232Non-hierarchical techniques
    • G06F18/2323Non-hierarchical techniques based on graph theory, e.g. minimum spanning trees [MST] or graph cuts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2413Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
    • G06F18/24147Distances to closest patterns, e.g. nearest neighbour classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Discrete Mathematics (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

近似最近邻域(ANN)搜索是计算机科学中的基本问题,在诸如机器学习和数据挖掘的领域具有大量应用。对于典型的基于图的ANN方法,搜索方法是迭代执行的,并且执行相关性禁止图形处理器单元(GPU)/GPU类型的处理器的适配。这里提出的是新颖的框架实施方式,新颖的框架将对于图方法的搜索分解成阶段,以使性能关键距离的计算并行化。另外,在一个或多个实施方式中,为了在GPU类型的组件上获得更好的并行性,还公开了新颖的特定ANN优化方法,该方法消除了动态内存分配并用较少的内存消耗进行计算。实施方式与其它方法进行了经验性比较,并且结果证实了有效性。

Description

用于单指令多线程或单指令多数据类型处理器的近似最近邻 域搜索
相关申请的交叉引用
本专利申请涉及于2019年11月25日提交的、题为“APPROXIMATE NEARESTNEIGHBOR SEARCH FOR PARALLEL PROCESSING HARDWARE COMPONENTS(用于并行处理硬件组件的近似最近邻域搜索)”的共同待定和共有的第62/940,043号美国专利申请(案卷号:28888-2373P),并要求其优先权权益,该申请将Weijie Zhao、Shulong Tan、和Ping Li列为发明人,并且上述专利申请文件通过引用以其整体并入本文且用于所有目的。
技术领域
本公开总体涉及用于计算机学习的系统和方法,该系统和方法可提供改进的计算机性能、特征和使用。更具体地,本公开涉及当意图在处理器的特定时间进行处理时用于改进的搜索处理的实施方式。
背景技术
自计算机科学的早期以来,最近邻域(NN)搜索是个基本问题,在诸如机器学习、计算机视觉、数据挖掘、信息检索等的许多领域具有大量实际应用。NN任务的挑战是在不扫描数据存储库中的所有数据点的情况下找到最近邻域。
近年来,由于很多应用仅需找到“足够近”的邻域而非精确的最近解,因而兴起了用于近似最近邻域(ANN)搜索的方法。
在ANN搜索范式中,将每个查询与数据点的子集而非整个数据集进行比较。ANN搜索范式的问题之一是从整个数据集中获得数据的子集。为了获得子集,已经提出了各种索引结构,包括概率哈希、量化、球树或KD树变型以及基于图的搜索等。
尽管这些ANN方法(诸如基于图的ANN方法)的使用已经取得了一些成功,但这些ANN方法的确存在缺点,特别是在处理现代处理器时。对于典型的基于图的方法,搜索算法是迭代执行的,并且执行相关性禁止图形处理器单元(GPU)的适配。重大障碍在于无法有效利用功能强大的硬件工具(如GPU)。
因而,需要的是可实现的以更好地利用单指令多线程或单指令多数据类型处理器(诸如GPU)的处理能力的用于搜索的系统和方法。
发明内容
第一方面,本公开提供了一种计算机实施的方法,该方法用于在给定包括表示点的顶点和表示邻域顶点的边缘的近似图的情况下,使用一个或多个单指令多线程(SIMT)或单指令多数据(SIMD)类型处理器对查询点执行近似最近邻域搜索,该方法包括:
用来自近似图的默认起始顶点初始化二进制最小堆作为第一优先队列并初始化哈希表,第一优先队列按照距离对顶点进行升序排序;
构造空的二进制最大堆作为第二优先队列;
响应于第一优先队列不为空:
从第一优先队列中提取顶点及顶点到查询点的距离;
当第二优先队列已满时,响应于所提取的顶点到查询点的距离差于第二优先队列中的顶点候选项,不将所提取的顶点添加到第二优先队列;
响应于所提取的顶点到查询点的距离不差于第二优先队列中的至少一个顶点候选项,或者响应于第二优先队列未满,基于所提取的顶点到查询点的距离,将所提取的顶点添加到第二优先队列;
对于近似图中的、作为所提取的尚未访问的顶点的邻域的每个顶点:
计算该顶点到查询点的距离;
经历一个或多个优化过程,将该顶点添加到哈希表;
以及
经历一个或多个优化过程,将该顶点按其到查询点的距离的顺序添加到第一优先队列中;以及
响应于第一优先队列为空,输出包括作为近似图中对于查询点的最近邻域或近似最近邻域的一个或多个顶点的第二优先队列。
第二方面,本公开提供了一种计算机实施的方法,该方法用于在给定包括表示点的顶点和表示邻域顶点的边缘的近似图的情况下,使用一个或多个SIMT或SIMD类型处理器对批量查询点执行近似最近邻域搜索,该方法包括:
对于批量查询点中的每个查询点:
用来自近似图的默认起始顶点初始化二进制最小堆作为第一优先队列并初始化哈希表,第一优先队列按照距离对顶点进行升序排序;以及
构造空的二进制最大堆作为第二优先队列;
响应于批量查询点中非所有查询点都已完成处理:
对于来自批量查询点的尚未完成处理的查询点:
从与查询点相对应的第一优先队列中提取顶点及顶点到查询点的距离;
当第二优先队列已满时,响应于所提取的顶点到查询点的距离差于第二优先队列中的所有顶点候选项,不将所提取的顶点添加到第二优先队列,并标记查询点已完成;
响应于所提取的顶点到查询点的距离不差于第二优先队列中的至少一个顶点候选项,或者响应于第二优先队列未满,基于所提取的顶点到查询点的距离,将所提取的顶点添加到第二优先队列;
对于来自批量查询点的、尚未完成处理的查询点:
初始化与查询点相对应的候选项集;以及
对于近似图中的、作为所提取的尚未访问的顶点的邻域的每个顶点:将该顶点添加到候选项集;以及
对于作为候选项集的成员的每个顶点:
计算该顶点到查询点的距离;
经历一个或多个优化过程,将该顶点添加到哈希表;以及
经历一个或多个优化过程,将该顶点按其到查询点的距离的顺序添加到第一优先队列中;以及
响应于批量查询点中的所有查询点都已完成处理,针对批量查询点中的每个查询点,输出包括作为近似图中对于查询点的最近邻域或近似最近邻域的一个或多个顶点的第二优先队列。
第三方面,本公开提供了一种包括一个或多个指令序列的非暂时性计算机可读介质或媒介,该一个或多个指令序列在由至少一个处理器执行时致使以下步骤:在给定包括表示点的顶点和表示邻域顶点的边缘的近似图的情况下,使用一个或多个SIMT或SIMD类型处理器对查询点执行近似最近邻域搜索,该步骤包括:
用来自近似图的默认起始顶点初始化二进制最小堆作为第一优先队列并初始化哈希表,第一优先队列按照距离对顶点进行升序排序;
构造空的二进制最大堆作为第二优先队列;
响应于第一优先队列不为空:
从第一优先队列中提取顶点及顶点到查询点的距离;
当第二优先队列已满时,响应于所提取的顶点到查询点的距离差于第二优先队列中的顶点候选项,不将所提取的顶点添加到第二优先队列;
响应于所提取的顶点到查询点的距离不差于第二优先队列中的至少一个顶点候选项,或者响应于第二优先队列未满,基于所提取的顶点到查询点的距离,将所提取的顶点添加到第二优先队列;
对于近似图中的、作为所提取的尚未访问的顶点的邻域的每个顶点:
计算该顶点到查询点的距离;
经历一个或多个优化过程,将该顶点添加到哈希表;
以及
经历一个或多个优化过程,将该顶点按其到查询点的距离的顺序添加到第一优先队列中;以及
响应于第一优先队列为空,输出包括作为近似图中对于查询点的最近邻域或近似最近邻域的一个或多个顶点的第二优先队列。
附图说明
将参考本公开的实施方式,它们的示例可示于附图中。这些附图旨在是说明性的而非限制性的。虽然本公开大体上在这些实施方式的上下文中描述,但应理解,本公开的范围并不旨在限于这些特定实施方式。附图中的项目可能未按比例绘制。
图1描述根据本公开的实施方式的示出在近似图上的搜索方法的示例。
图2示出根据本公开的实施方式的处理器单元硬件架构和内存层级。
图3示出根据本公开的实施方式的分解工作流。
图4描述根据本公开的实施方式的优化的示例。这些示例中参考的近似图在图1中。
图5描述根据本公开的实施方式的搜索方法。
图6描述根据本公开的实施方式的替代搜索方法。
图7A和图7B描述根据本公开的实施方式的SONG实施方式、Faiss和HNSW在测试数据集上的性能比较。
图8描述根据本公开的实施方式的对平均top-10调用率(805)和平均top-100调用率(810)的HNSW上的SONG加速。
图9描述根据本公开的实施方式的在数据集A(915和920)和数据集B(905和910)上的top-100处的多个哈希表的替代实施方式的性能比较。右列(910和920)是第一列(905和915)的放大视图。
图10描述根据本公开的实施方式的在两个数据集(数据集B 1005和数据集C1010)上的warp中的多查询(multi-query)的效果。
图11描述根据本公开的实施方式的多步骤探测的效果。
图12描述根据本公开的实施方式的用于GPU内存传输/内核运行和用于内核内部的每个阶段的时间分布。
图13描述根据本公开的实施方式的批量大小的影响结果。
图14描述根据本公开的实施方式的使用SONG实施方式在提取的导航展开图(NSG)索引上应答查询的结果。
图15示出根据本公开的实施方式的SONG实施方式在各种GPU上的性能。
图16描述根据本公开的实施方式的哈希维度减少的效果。
图17描述根据本公开的实施方式的在CPU上实施的SONG实施方式和在CPU上的HNSW实施例的性能。
图18描述根据本公开的实施方式的计算设备/信息处理系统的简化框图。
具体实施方式
在以下描述中,出于解释目的,阐明具体细节以便提供对本公开的理解。然而,将对本领域的技术人员显而易见的是,可在没有这些细节的情况下实践本公开。另外,本领域的技术人员将认识到,下文描述的本公开的实施方式可以以各种方式(例如过程、装置、系统、设备或方法)在有形的计算机可读介质上实施。
附图中示出的组件或模块是本公开实施方式的示例性说明,并且意图避免使本公开不清楚。还应理解,在本论述的全文中,组件可描述为单独的功能单元(可包括子单元),但是本领域的技术人员将认识到,各种组件或其部分可划分成单独组件,或者可整合在一起(包括例如位于单个的系统或组件内)。应注意,本文论述的功能或操作可实施为组件。组件可以以软件、硬件、或它们的组合实施。
另外,附图内的组件或系统之间的连接并不旨在限于直接连接。相反,在这些组件之间的数据可由中间组件修改、重格式化、或以其它方式改变。另外,可使用另外或更少的连接。还应注意,术语“联接”、“连接”、“通信地联接”、“接合”、“接口”或其派生词中的任一个,应理解为包括直接连接、通过一个或多个中间设备来进行的间接连接、和无线连接。还应注意,任何通信(诸如信号、响应、答复、确认、消息、查询等)可包括一个或多个信息交换。
在本说明书中对“一个或多个实施方式”、“优选实施方式”、“实施方式”、“多个实施方式”等的提及表示结合实施方式所描述的具体特征、结构、特性或功能包括在本公开的至少一个实施方式中,以及可包括在多于一个的实施方式中。另外,在本说明书的各个地方出现以上所提到的短语并不一定全都是指相同的实施方式或多个相同实施方式。
在本说明书的各个地方使用某些术语目的在于说明,并且不应被理解为限制。服务、功能或资源并不限于单个服务、单个功能或单个资源;这些术语的使用可指代相关服务、功能或资源的可分布或组合的分组。术语“包括”、“包括有”、“包含”和“包含有”应理解为开放性的术语,并且其后任何列出内容都是实例,而不旨在限于所列项目。“层”可包括一个或多个操作。词“最佳”、“优化”、“最优化”等是指对结果或过程的改进,并非要求指定的结果或过程已达到“最佳”或峰值状态。内存、数据库、信息库、数据存储、表、硬件、缓存等在本文中的使用,可用来指代可输入信息或以其它方式记录信息的一个或多个系统组件。
在一个或多个实施方式中,停止条件可包括:(1)已执行了设定次数的迭代;(2)已达到一定量的处理时间;(3)收敛(例如,连续迭代之间的差小于第一阈值);(4)发散(例如,性能劣化);(5)已达到可接受的结果。
本领域技术人员应认识到:(1)某些步骤可选择地执行;(2)步骤可不限于本文中阐述的特定顺序;(3)某些步骤可以以不同的顺序执行;以及(4)某些步骤可同时完成。
本文所使用的任何标题仅是为了组织目的,并且不应被用于限制说明书或权利要求的范围。本专利文献中提到的每个参考文献/文件以其整体通过引用并入本文。
应注意,对图形处理单元(GPU)的提及应解释为涵盖任何单指令多线程类型的处理器或单指令多数据类型的处理器。
还应注意,本文提供的任何实验和结果均以说明性的方式提供,并且是在特定条件下使用特定实施方式进行的;因而,这些实验及其结果均不得用于限制当前专利文件的公开范围。
A.总体介绍
如上所述,最近邻域(NN)搜索是已影响了很多领域中的大量应用的基本问题。由于其重要性和普遍性,已开发出用于近似最近邻域搜索的各种方法。
ANN搜索方法。在ANN搜索范式中,将每个查询与数据点的子集而非整个数据集进行比较。为了获得子集,已经提出了各种索引结构,包括概率哈希、量化、球树或KD树变型以及基于图的搜索等。
基于图的ANN方法。近来,基于图的方法引起了人们的注意。在文献中,大量实验显示,基于图的方法在通用指标中可胜过其它类型的ANN方法。通常,这些方法构建被称为“近似图”的图索引。近似图的顶点表示数据集中的点。图中的边缘示出连接节点之间的邻域关系。邻域关系是在各种约束条件下限定的,以使图适用于ANN问题。例如,一些图约束(如Delaunay图和单调搜索网络)确保存在从任何起始顶点到查询点的距离单调递减的路径。诸如图最近邻域搜索算法(GNNS)、迭代扩展哈希(IEH)、极快近似k-最近邻域图构造算法和基于kNN图的极快近似最近邻域搜索算法(EFANNA)、导航展开图(NSG)、分层导航小世界(HNSW)图的大量不同方法,尝试近似Delaunay图或相对邻域图,以将近似图的构造复杂度降低至二次时间。这些近似使基于图的ANN方法适用于海量数据,并变成为行业实践中的流行工具。
图上搜索。尽管这些方法在构建图索引方面具有不同的约束,但是大多数基于图的方法共享相似的启发式搜索方法(见以下的方法1),可视为启发式搜索的变型。其工作流可视为类似于广度优先搜索(BFS),但具有一些偏差,例如,BFS中的队列用优先队列q取代。优先队列对顶点按照到查询点p的距离进行升序排序。搜索过程从默认起始点开始。然后,从优先队列q中提取一顶点(第3行),更新top-K个候选项(第4至8行),并将该顶点的邻域插入q中以用于将来探测(第13行)。当从优先队列中提取的顶点差于搜索的top-K个结果候选项(第4至5行)时,主搜索循环(第2至16行)停止。抽象地,该方法贪婪地遵循到达查询点的最近邻域的路径。
方法1--近似图上的搜索方法的实施方式
Figure BDA0002797484950000091
图1示出根据本公开的实施方式的方法1的示例。具体地,图1描述根据本公开的实施方式的示出近似图上的搜索方法的示例。星号135表示查询点p。在该示例中,目标是找到p的前K=3个最近邻域。在该示例中,顶点1是默认起始点。搜索路径1→2→8→7用虚箭头突出显示。右边部分示出从初始化110到第四次迭代130的每次迭代中的两个优先队列q和topk以及哈希表visited的状态。
并行性。搜索过程通常是迭代执行的——每次迭代依赖于前一个的进度。执行相关性禁止使用此方法的任何尴尬地并行的方案。用于基于图的ANN的常规并行方案是在多核CPU上同时执行不同的查询。几乎没有研究讨论GPU对基于图的方法的适配。然而,在不考虑GPU的架构的情况下,查询并行方案无法扩展到GPU平台上。同时,越来越多的研究人员正在探讨关于GPU的ANN系统。例如,Faiss(J.Johnson、M.Douze和H.Jégou,“Billion-scalesimilarity search with GPUs(利用GPU进行十亿量级的相似度搜索)”,arXiv preprintarXiv:1702.08734,2017年)是流行的基于GPU加速量化的ANN系统。由于量化方法具有较低的指令相关性,因而与其它基于CPU的方法相比,Faiss可完全并行执行并显示优于密集数据的性能。另一方面,尽管基于图的方法在CPU上提供了更好的结果,但是复杂的图结构和图搜索的高执行相关性使GPU适配成为具挑战性的任务。
在本专利文件中,探讨了并行处理单元(诸如GPU)的适配问题,并提出了大量针对基于图的ANN方法的优化。尽管本文中可能涉及GPU,但应注意,本专利文件中公开的发明构思不限于仅仅GPU,而是可应用于诸如现场可编程门矩阵(FPGA)、专用集成电路(ASIC)等的其它硬件组件,这些组件促进了诸如单指令多线程类型的处理器或单指令多数据类型的处理器的并行处理。
本专利文件中公开的贡献中的一些包括但不限于以下内容:
本文介绍了SONG(“图上搜索”的缩写)的实施方式——在单指令多线程类型的处理器或单指令多数据类型的处理器(诸如GPU)上执行基于图的ANN搜索的ANN搜索实施方式。据作者所知,SONG是为这种处理器设计的第一个基于图的ANN系统。
本文公开了新颖的框架实施方式,该框架实施方式将对图的搜索方法分解成三个阶段:候选项定位、批量距离计算和数据结构维护,以并行地进行性能关键距离计算。与GPU广度优先搜索方法不同,本文的框架实施方式可通过解决ANN问题的繁重高维距离计算,而专门对基于图的ANN搜索进行优化。
本文提出了用于GPU ANN图搜索的数据结构和优化的组合。在一个或多个实施方式中,可采用开放式寻址哈希表、Bloom过滤器、Cuckoo过滤器或其组合作为高性能哈希表。在一个或多个实施方式中,可利用一系列优化,包括有界优先队列、选择插入、已访问项删除或其组合,以消除动态内存分配并以较少的内存消耗来进行计算。
可在能够对性能进行微调的候选项定位阶段中,引入参数化图搜索算法方法(多查询和多步骤探测)的实施方式。
通过实验评估了实施方式,并在六个数据集上与HNSW(在Y.A.Malkov和D.A.Yashunin的下文中讨论的CPU平台上的最新ANN方法,“Efficient and RobustApproximate Nearest Neighbor Search Using Hierarchical Navigable Small WorldGraphs(使用分层可导航小世界图进行有效且鲁棒的近似最近邻域搜索)”,IEEETransactions on Pattern Analysis and Machine Intelligence(IEEE关于模式分析和机器智能的汇编),2018年)和Faiss(流行的GPU ANN系统,以上已提及)进行了比较。结果证实,与单线程HNSW相比,SONG的速度提高了约50-180倍,同时其性能明显优于GPU版本的Faiss。
B.硬件架构实施方式
在本节中,提出了典型的GPU架构,其为SONG的专用硬件优化的基础。如上所述,尽管在本文中提及了GPU,但应注意,本专利文件中公开的发明构思可应用于促进并行处理的其它实施例,例如,单指令多线程类型的处理器或单指令多数据类型的处理器。
1.硬件架构和内存层级
图2示出根据本公开的实施方式的GPU硬件架构和内存层级。GPU 200包括多个流式多处理器(SM)205。每个SM 205均具有数十个核心210、两个分派单元220、warp调度器225、寄存器文件215、以及可配置的L1缓存和共享内存235。在所描述的实施方式中,所有SM共享L2缓存240和全局内存245。SM中的核心210通常针对计算指令的有限子集。在一个或多个实施方式中,SM中的分派单元和warp调度器发出指令并调度核心的执行。在一个或多个实施方式中,寄存器文件215是可由核心直接访问的处理器寄存器的阵列。加利福尼亚州的圣克拉拉市的NVIDIA公司最近在NVIDIA Volta架构中介绍了L0指令缓存230。可采用L0指令缓存230以提供比现有GPU中使用的指令缓冲器更高的效率。与CPU平台不同,GPU L1缓存是可配置的(例如,程序员可分配L1缓存的一部分为共享内存)。共享内存可被显式地操控,并且可被同一SM内的所有核心访问。所有SM都可访问全局内存,并且L2缓存充当全局内存I/O的缓存。
可从遍历SM的所有核心访问全局内存245。尽管全局内存在尺寸上最大,但全局内存具有最低的带宽和最高的访问延迟。共享内存是高带宽和低延迟的内存。共享内存还由SM内的核心共享。缓存L1和缓存L2的两个级别可用于改进全局内存访问延迟。当请求全局内存地址时,可将对齐的连续地址合并到单个内存交易中。核心通常访问连续的全局内存地址,以从全局内存有效率地访问数据。
2.编程模型
在CUDA(计算统一设备架构)编程模型中,工作负荷以函数的形式发给GPU(该函数被称为内核)。类似于CPU平台中的定义,内核的逻辑实例称为线程。线程可分组成块。物理上地,块内的所有线程都位于同一SM上。线程可以以CUDA代码显式地访问深度内存层级的各种单元。为了管理在数据的不同部分上运行的数千个并发线程,SM通过将块的连续线程分组成warp,来利用SIMT(单指令多线程)或SIMD(单指令多数据)的并行性。Warp中的所有线程必须一次执行相同的指令。代码块中的If-else分支会阻止同一warp中的一些线程的执行。在不同代码分支上工作的线程顺序地执行。
C.SONG系统实施方式的概述
在本节中,提出了搜索的一些性能瓶颈,并且还提出了从高级角度优化方法的SONG实施方式的主要模块。
1.距离计算
在CPU平台上的搜索算法的分析结果显示,对于最通用的ANN基准数据集,95%以上的时间花费在距离计算(例如,方法1的第11行)上——性能由距离计算支配。与费时的高维距离计算相比,其它操作(如优先队列维护和内存访问)花费少于5%的执行时间。相反,GPU能够用其大量的内核有效率地并行地进行高维距离计算。CPU上的95%的主要成本可在GPU上得到显著改进。尽管大大降低了主要成本,但GPU上出现了在CPU上其它不明显的问题。与CPU相反,GPU内存访问可能变成支配因素。
2.内存访问
CPU图搜索方法介绍了动态内存分配,并且在搜索中占据了大的工作内存。由于GPU上每个线程的可用内存预算少得多,因而其往往无法扩展到GPU上。为了有效率地进行并行搜索,可能必须限制方法1中的优先队列和哈希表的内存消耗。
3.高级方法
在本节中,提出了用于解决GPU图搜索算法中的一个查询的高级方法。由于在高维数据集上进行非并行近似最近邻域搜索的主要时间都花费在计算距离上,因而以硬件为中心的图搜索方法的实施方式着重于利用硬件单元(例如,GPU)来加速距离计算。在一个或多个实施方式中,为了充分利用GPU的计算带宽,以批量而非大量独立的成对距离计算函数调用来计算距离。因而,在一个或多个实施方式中,通过将图搜索方法分解成三个阶段:候选项定位、批量距离计算和数据结构维护,而从搜索工作流中提取距离计算部分。
图3示出根据本公开的实施方式的分解工作流。图3描述根据本公开的实施方式的示例,以演示GPU warp近似图搜索工作流的实施方式。左边的图(邻接表)305继承自图1的示例。阴影单元格表示图1中第一次迭代的内存访问模式。在所描述的示例中,第i行存储顶点i的相邻顶点。例如,图中的第一行显示1连接到2、4、5和7。如方法1,在每次迭代中,首先从优先队列q中提取顶点以开始搜索。在此示例中,考虑在顶点1上进行搜索。候选项定位阶段从图中获取连接到1的顶点(2、4、5、7)。然后,批量距离计算阶段从数据矩阵中读取这些顶点的向量值,并采用GPU warp缩减310计算到查询点p的距离。图1中的玩具示例仅用于说明搜索算法的思想。在真实ANN应用中,维度从几百到一千,人们在批量距离计算阶段可充分利用GPU线程。之后,在一个或多个实施方式中,数据结构维护阶段使用距离来更新优先队列和哈希表以用于下一次迭代。
该三阶段工作流将距离计算和队列维护相关性(例如,方法1,第9-15行)分解到批量处理管道中。因而,可通过GPU加速距离计算。在一个或多个实施方式中,这三个阶段顺序地执行。在一个或多个实施方式中,可针对GPU架构来优化每个阶段以实现更好的性能。
D.数据结构维护的实施方式
1.GPU/类GPU处理器上的数据结构
在一个或多个实施方式中,专门设计用于GPU上的图搜索任务的数据结构。本文提出了用于图存储和哈希表替代方式的固定程度图的实施方式。
a)固定程度图存储实施方式
在基于图的ANN搜索中使用的近似图通常具有以下属性:每个顶点的度数由固定常数K限定。在一个或多个实施方式中,将图存储为邻接表,涉及在GPU内存中保留追踪每个顶点的偏移的索引。索引查找的效率很低,因为其需要额外的内存操作以加载索引。将图存储为固定程度的邻接表,消除了邻接表中的额外索引查找。由于每个顶点占用相同的固定内存量,因而可用顶点的固定大小乘以其索引来定位顶点。固定程度图305可存储在GPU全局内存中(例如,参见图3的315)。
b)查询
尽管在查询到来之前可将近似图和数据集保留在GPU全局内存上,但在运行时应将查询点从主机CPU主内存转移到GPU全局内存。在查询的搜索过程期间,频繁访问查询点以计算到图中其它顶点的距离。在一个或多个实施方式中,查询点被显式地复制到快速片上共享内存(例如,L1缓存)中,以减少GPU全局内存读取。
c)并行控制
尽管有一些研究介绍了无锁并行优先队列和哈希表,但是那些数据结构设计为替代主机端的CPU数据结构,而非替代CUDA内核中的线程。另外,在迭代中仅需数十个插入。顺序操作的性能优于复杂的并行数据结构。因而,在一个或多个实施方式中,优先队列和哈希表由一个单线程维护。
d)内存访问模式
GPU共享内存可由同一块中的所有线程低延迟地访问。如上所述,在一个或多个实施方式中,由于在距离计算中频繁访问p,因而将p复制到共享内存。另外,在一个或多个实施方式中,“候选项(candidate)”和“距离(dist)”可分配为共享内存中的固定长度的数组。在一个或多个实施方式中,“候选项”和“距离”的长度最多为图索引的固定程度。将它们分配为固定长度的数组往往比动态分配更有效率。将它们放入共享内存中可消除warp缩减中的额外通信成本。因为在一个或多个实施方式中,优先队列和哈希表仅由一个线程维护,q、topk和visited分配为其主机线程的局部内存——其它线程则无法访问这些数据结构。在一个或多个实施方式中,图索引和数据保存在全局内存中。
2.哈希表的实施方式
在本节中,讨论了搜索方法中的哈希表(visited)的设计的实施方式及其替代方式。
a)开放式寻址哈希表的实施方式
最流行的哈希表实施例之一是单独的链接,例如,GNU的哈希表(unordered_set)实施例。GNU编译器集合(GCC)使用单独的链接来解决哈希冲突。然而,链接方案需要诸如链接表的动态内存分配,这往往会破坏GPU的计算性能。在一个或多个实施方式中,在GPU图搜索的实施方式中采用了另一种哈希冲突方法——开放式寻址。通过数组中的替代位置打开寻址探测,直至找到目标记录或找到未使用的数组槽。在一个或多个实施方式中,为每个线程块分配共享内存中的固定长度的数组。在一个或多个实施方式中,长度与搜索参数K成比例,并且可预先计算。线性探测步骤可在warp级别上并行地进行,warp中的所有线程都探测内存并由warp缩减来定位插入/删除位置。在一个或多个实施方式中,由于线性探测不需要探测很多位置,因而在warp级别上的并行探测是有限的。通常为warp中的每个线程(例如,32个线程)探测一个内存位置,就足以找到有效的插入/删除位置。
b)Bloom过滤器实施方式
已观察到,访问测试不必精确地回答——误肯定是可容忍的,虽然误否定可能会引发繁重的计算开销。误肯定(visited表示元素已被访问但其实际上尚未被访问)阻止对一些未访问的顶点示进行搜索——当跳过的顶点是到查询的最近邻域的唯一路径时,可能会丢失一些搜索准确度。另一方面,误否定(visited表示顶点尚未被访问,但实际上之前已搜索该顶点)可能导致再次搜索已访问的顶点——当多次搜索再访问的顶点并将其插入优先队列时,会引入巨大的开销。数据完整性也会受到影响,因为需要进行额外的检查以避免在优先队列中多次插入一个顶点。为了占用更少的内存,可采用概率数据结构(诸如Bloom过滤器)来取代哈希表。Bloom过滤器占用固定的小内存,其可在GPU设置中有效率地实现。另外,Bloom过滤器确保没有误否定,并且误否定在理论上受到约束。Bloom过滤器通过稍微权衡误肯定引入的准确度来作为哈希表的相应项。在一个或多个实施方式中,误肯定率与插入到Bloom过滤器中的元素的数量有关。实际上,当插入1,000个顶点时,具有约300个32位整数的Bloom过滤器的误肯定率小于1%——由Bloom过滤器引入的准确度损失是可忽略的。假设数据点的密钥也是32位整数,则Bloom过滤方法所占用的内存比哈希表至少少3倍。
3.优化实施方式
图4描述根据本公开的实施方式的用于(a)有界优先队列、(b)选择插入和(c)已访问项删除的示例。在一个或多个实施方式中,每个步骤可构建在先前的优化之上。为了说明,在此示例中参考的近似图在图1中。
a)有界优先队列优化实施方式
在一个或多个实施方式中,搜索算法(例如,方法1)维持优先队列,该优先队列存储当前找到的用于查询的top-k个候选项。尽管将优先队列实施为CPU上的二进制堆可以是有效率的,然而将二进制堆直接移植到GPU还是有问题的。二进制堆的实施会消耗无限的内存(在搜索期间一直将顶点添加到队列中),q的大小可能增长到远大于K。无限的内存分配可能会对GPU性能造成灾难性的影响。为了有效利用GPU来存储q,可进行以下观察:
观察1:图上搜索方法(例如,方法1)仅利用q中的第一K个元素。
证据。在q的大小增长到K+1之后,将q中的第(K+1)个元素表示为x。如果将来的迭代中将不从q中提取x,则x将不会包括在top-K的结果中。否则,稍后x将从q中提取。那时,topk已经被K个元素填充。同时,由于有至少K个处理的元素优于x,因而满足方法1第4行的条件——该方法退出且x不包括在top-K的结果中。
因而,在一个或多个实施方式中,当q的大小增长到K+1时,可从q中弹出较差的候选项。图4中的示例(a)描述根据本公开的实施方式的该优化的迭代。与原始方法实施方式(例如,图1)相比,有界优先队列优化消除了插入5、13、14以及3个元素内的边界q。
在一个或多个实施方式中,可实施对称最小-最大堆的GPU版本以充当有界优先队列。插入和弹出最小/最大元素都需要对数时间。
b)选择插入优化实施方式
由于数据结构的维护受内存带宽和延迟支配,因而当数据结构占用的内存较小时,可改进该阶段。哈希表和Bloom过滤器的内存消耗都与插入次数成正比。在一个或多个实施方式中,可采用选择插入优化来减少对visited的插入,因此减少了内存消耗。
在原始方法实施方式中(例如,方法1,第12行),在计算顶点到查询点的距离之后,将顶点标记为已访问。在一个或多个实施方式中,可使用插入之前的选择:将具有大于topk中的所有K个元素的距离的顶点过滤出——仅当顶点在当前最靠近查询点的top-K个顶点之中时,顶点才被标记为已访问并推入q中。
图4中的示例(b)示出根据本公开的实施方式的当图4的示例(a)中将选择插入应用于有界优先队列优化之上时的示例。在第3次迭代中,如果应用了选择插入优化,则顶点13和14不会标记为已访问,也不会被推入q中,因为topk完全用K个候选项填充,而13和14具有比topk中的所有顶点都大的距离。在第4次迭代中,不会将顶点6插入q中,也不会插入visited中,因为6比topk中的所有候选项都差。由于过滤后的顶点未标记为已访问,因而在将来的迭代中处理其邻域时,可再次计算其距离。应注意,在迭代期间,确保top-K个候选项(在topk优先队列中)变得越来越靠近查询点。因而,确保在将来的迭代中过滤出的顶点再次被过滤出。通过这种选择插入优化,仍保留了搜索方法的正确性和完整性——不会在哈希表或优先队列中多次插入顶点。选择插入方法以多次计算一些距离为代价,减少了插入和GPU内存使用。在该示例中,最终的visited大小为7——比图4的示例(a)中少存储3个元素。在一个或多个实施方式中,距离计算可已是完全并行的,而哈希表和优先队列维护可以是顺序的。因而,这种计算空间的权衡能够改善查询性能。
c)已访问项删除优化实施方式
在一个或多个实施方式中,遵循选择插入的思想,采取一个进一步的步骤以积极地节省更多的GPU内存——为了确保搜索算法的正确性,仅需要将visited保持为哈希表,该哈希表显示顶点是否在优先队列q和topk中。具体地,在从优先队列q提取顶点并进行处理之后,如果顶点不更新topk,则可将其从visited中删除。另外,当更新topk时,弹出的顶点也可从visited哈希表中删除。直觉类似于选择插入优化:删除的顶点(逻辑上重标记为未访问)具有比当前的top-K个候选项更大的距离,在将来的迭代中它们将不更新top-K个候选项,也不插入到优先队列q中。图4的示例(c)示出了根据本公开的实施方式的示例。在一个或多个实施方式中,当应用已访问项删除优化时,哈希表visited恰好是q(大小最大为K)和topk(大小最大为K)的并集。因而,visited的大小以2K为界。
已访问项删除优化要求对visited进行删除操作。哈希表的删除操作可以以恒定时间执行。而哈希表替代方案——Bloom筛选器不支持删除。在一个或多个实施方式中,可选择诸如Cuckoo过滤器的不同过滤器作为哈希表概率数据结构替代方案,以验证已访问项删除优化。
将图1中的原始方法实施方式与图4中的运行示例(c)进行比较,可观察到,通过应用3个优化的实施方式,利用的内存几乎少了50%。在真实应用中,搜索需要数百次迭代——可节省比该示例更多的内存。
E.候选项定位实施方式
1.基本候选项定位实施方式
在候选项定位阶段,warp中的一个线程(例如,线程0)负责提取最接近查询点的顶点id,并且该线程将当前未访问的邻域顶点添加到列表candidate中。在图3中,将节点2、4、5和7定位并存储在candidate中以用于距离计算阶段。由于该阶段很简单且不涉及复杂的计算,因而一个线程既可有效率地处理任务。
2.Warp实施方式中的多查询
在基本候选项定位方法实施方式中,当线程0从优先队列中提取顶点时,其它线程是空闲的。可在warp中处理多个查询,以提高线程利用率。例如,考虑系统正在warp中处理4个查询。可为每个查询构造优先队列和哈希表。4个活动线程(例如说,线程0、1、2和3)从其相应的q中提取顶点id。尽管有更多活动线程,但缺点是为warp中处理的每个查询创建单独的数据结构(优先队列和哈希表)集。尚不清楚warp中的选择最佳查询数量。在实验评估中讨论了这个问题(参见第I.3节)。
3.多步骤探测实施方式
最近的GPU广度优先搜索(BFS)研究提出了一种并行扩展相邻邻域的策略。在本文的图搜索问题的一个或多个实施方式中,其相应于从q中提取多个顶点而非仅提取第一顶点。多步骤探测将更多顶点填充到候选项列表中。与一般的BFS问题不同,近似图上的搜索通常以少量步骤沿着指向查询点的方向行进。因而,当前处理顶点的邻域更有可能成为优先队列的头。多步骤探测可能浪费探测内存访问和对次优候选项的距离计算。其有效性在I.3节中进行了评估。
F.批量距离计算实施方式
接下来要解决的是基于图的ANN方法中的有效距离计算的问题。在一个或多个实施方式中,批量距离计算阶段将candidate列表中的顶点作为输入,从数据集中获取相应的数据,计算它们与查询点的距离,并将结果输出到共享内存中的数组中(例如,参见图3)。在一个或多个实施方式中,该阶段涉及该块中的所有线程,每个线程均负责维度子集以计算局部距离。在一个或多个实施方式中,然后线程0通过shfl_down warp缩减将所有warp的局部距离聚合为一个值。candidate中的第i个元素的聚合距离可存储在disti中。
上述并行策略实施方式并非简单地对每个候选项同时计算距离,其对缓存更友好。在提出的并行缩减中,组织了32个线程以访问连续的内存地址。如果同时处理这些候选项,则每个线程的内存访问模式都是独立的,生成更多的缓存漏失。
该并行缩减距离计算方法实施方式可应用于诸如p-范数距离、余弦相似度和内积的通常流行的ANN距离测量。
G.GPU内存不足的数据集实施方式
在本节中,讨论了解决GPU内存不足的数据集的解决方案。对于存储高维数据,这个问题尤其明显。通常,图索引的大小要小得多,其与“degree×#data”成正比,其中“degree”是图索引的程度极限,而“#data”是数据集中的数据点的数量。根据经验,对于“degree”可能使用16就足够(对于数百万个数据点,图索引小于1GB)。例如,8百万个784维数据点的16-度图索引的大小为988MB,而数据集的大小为24GB。为了使用GPU加速图搜索,优选地,应减少数据集的大小,以将其存储在GPU中。因而,在一个或多个实施方式中,可采用将高维数据编码成位向量的一种或多种随机哈希技术。然后,哈希数据集可容纳于GPU内存,并在低维位上计算距离。
1-位随机投影。在大量的概率哈希方法之中,在一个或多个实施方式中,引入了一种被称为“1-位随机投影”的流行方法。形式上,对于两个数据向量
Figure BDA0002797484950000211
生成具有iid(独立且分布相同)标准正态项中的条目的随机向量
Figure BDA0002797484950000212
然后,
Figure BDA0002797484950000213
Figure BDA0002797484950000214
其中θ(u,v)是u和v之间的角度。如果从iid柯西而非正态中采样r的条目,则该碰撞概率与χ2相似度密切相关。通过h个独立的随机向量,每个数据点都映射到h-位向量。位向量之间的汉明距离变成原始数据中的相似度的良好估计(如果h不太小)。在一个或多个实施方式中,h可设置为32的倍数,使得位向量可存储为几个32-位的无符号整数。这样,位向量的内存占用量等于h/32单精度浮点值的空间。第I.8节探讨了GPU内存不足的数据集场景的哈希性能。
应注意,诸如分片的其它技术也适用于可扩展性的挑战。例如,当考虑多个GPU时,可对每个GPU进行数据分片,为每个分片构建图索引,在每个GPU上执行图搜索,然后合并结果。
H.替代实施方式
以下提出的是根据本公开的实施方式的用于使用批量查询点在近似图上进行搜索的替代方法。
图5描述了根据本公开的实施方式的用于使用一个或多个SIMT类型的处理器或SIMD类型的处理器执行近似最近邻域搜索的方法。在一个或多个实施方式中,给定查询点和包括表示点的顶点和表示邻域顶点的边缘的近似图,该方法包括:用来自近似图的默认起始顶点初始化(505)二进制最小堆作为第一优先队列(例如,q)并初始化哈希表(例如,visited),第一优先队列按照距离将顶点以升序排序。另外,在一个或多个实施方式中,形成(510)空的二进制最大堆作为第二优先队列。
在一个或多个实施方式中,响应于第一优先队列不为空(515),可执行以下步骤。可从第一优先队列中提取(520)顶点及顶点到查询点的距离。在一个或多个实施方式中,如果当第二优先队列已满时,提取的顶点到查询点的距离差于第二优先队列(例如,top-K)中的顶点候选项,则不将提取的顶点添加(525)到第二优先队列。然而,在一个或多个实施方式中,如果提取的顶点到查询点的距离不差于第二优先队列中的至少一个顶点候选项,或者如果第二优先队列未满,则基于提取的顶点到查询点的距离,将其添加(525)到第二优先队列。
在一个或多个实施方式中,对于近似图中的作为提取的顶点的邻域且该邻域顶点尚未被访问的每个顶点,可执行以下步骤。在一个或多个实施方式中,计算(530)顶点到查询点的距离。如上所述,在一个或多个实施方式中,顶点到查询点的距离可与其它距离计算一起使用批量距离计算和warp缩减进行批量计算,以有效率地利用处理器。在一个或多个实施方式中,批量距离计算包括:使用处理器的多个线程来计算多个顶点中的每个顶点到查询点的距离,其中,每个线程使用顶点的维度子集来计算局部距离,并且处理器的线程经由warp缩减将局部距离聚合为多个顶点中的每个顶点到查询点的距离值。
在一个或多个实施方式中,经历一个或多个优化过程,将顶点添加(530)到哈希表,以及经历一个或多个优化过程,将顶点按其到查询点的距离的顺序添加到第一优先队列。优化过程的示例包括:有界存储过程、选择插入过程和已访问项删除过程(以上已讨论了这些方法中的每个)。
在一个或多个实施方式中,如果第一优先队列为空,则整个过程停止,并且可输出(535)包括作为近似图中对于查询点的最近邻域或近似最近邻域的一个或多个顶点的第二优先队列。
如上所述,可采取附加步骤来提高处理器的计算效率。例如,在一个或多个实施方式中,可将近似图的至少一部分存储为固定程度的邻接关系,以消除对额外索引查找的使用,并且可通过用顶点的固定大小乘以顶点的索引来定位顶点。另外,在一个或多个实施方式中,查询点可复制到片上共享内存中,以减少处理器的全局内存读取。另外,在一个或多个实施方式中,第一优先队列和第二优先队列以及哈希表可由单个线程维护。
如前所述,查询处理可以以批量执行。以下用方法2描述示例性批量处理实施方式。
方法2实施方式
Figure BDA0002797484950000231
Figure BDA0002797484950000241
应注意,对于方法2中描述的批量版本实施方式,第12行至第19行涉及候选项定位实施方式,第20行至第24行涉及批量距离计算实施方式,以及第2行至第31行之间的其余行涉及数据结构维护实施方式。
图6描述了根据本公开的实施方式的用于使用一个或多个SIMT类型的处理器或SIMD类型的处理器执行近似最近邻域搜索的替代方法。
在一个或多个实施方式中,给定批量查询点和包括表示点的顶点和表示邻域顶点的边缘的近似图,对于批量中的每个查询,该方法包括以下步骤。在一个或多个实施方式中,用默认起始顶点初始化(605)二进制最小堆作为第一优先队列,该第一优先队列按照距离将顶点以升序排序;并且还用来自近似图的默认起始顶点初始化哈希表。另外,在一个或多个实施方式中,形成(605)空的二进制最大堆作为第二优先队列。
当批量中的所有查询尚未完成处理时(610),可执行以下步骤。
在一个或多个实施方式中,对于来自批量查询点中的尚未完成处理的查询点,从与查询点相对应的第一优先队列中提取(615)顶点及顶点到查询点的距离。如果当第二优先队列已满时,提取的顶点到查询点的距离差于第二优先队列中的所有顶点候选项,则在一个或多个实施方式中,不将提取的顶点添加(620)到第二优先队列,并将查询点标记为已完成。然而,在一个或多个实施方式中,如果提取的顶点到查询点的距离不差于第二优先队列中的至少一个顶点候选项,或者如果第二优先队列未满,则基于提取的顶点到查询点的距离,将其添加(620)到第二优先队列。
在一个或多个实施方式中,对于来自批量查询点中的尚未完成处理的查询点,用空集初始化(625)与查询点相对应的候选项集。在一个或多个实施方式中,对于近似图中的作为提取的尚未访问的顶点的邻域的每个顶点,将未访问的邻域顶点添加(630)到候选项集。对于作为候选项集的成员的每个顶点,在一个或多个实施方式中,计算(635)顶点到查询点的距离。在一个或多个实施方式中,使用批量距离计算来执行计算顶点到查询点的距离,其中,使用处理器的多个线程来计算来自候选项集的多个顶点中的每个顶点到查询点的距离,其中,每个线程均使用顶点的维度子集来计算局部距离,并且处理器的线程经由warp缩减将局部距离聚合为对于多个顶点中的每个顶点到查询点的距离值。
在一个或多个实施方式中,对于每个未完成的查询向量,针对作为候选项集的成员的每个顶点,在一个或多个实施方式中,经历一个或多个优化过程将顶点添加(640)到哈希表,以及经历一个或多个优化过程将顶点按其到查询点的距离的顺序添加到第一优先队列。优化过程的示例包括:有界存储过程、选择插入过程和已访问项删除过程(以上已讨论了这些方法中的每个)。
在一个或多个实施方式中,如果批量查询点中的所有查询点都已完成处理,则对于批量查询点中的每个查询点,输出(645)包括作为近似图中对查询点的最近邻域或近似最近邻域的一个或多个顶点的第二优先队列。
如以上讨论的实施方式,可采用一种或多种附加的优化和/或技术以增强一个或多个处理器上的计算效率。
I.实验
在本节中,提供了对六个数据集的详细探讨以分析实施方式的有效性。应注意,这些实验和结果是以举例的方式提供的,并且是在使用一个或多个特定实施方式的特定条件下进行的;因而,这些实验及其结果均不应用于限制当前专利文件的公开范围。
实施例。SONG实施方式已实施为C++11原型。代码用g++-6.4.0编译而启用“O3”优化。GPU CUDA代码符合CUDA 10.0中的启用“-Xptxas-O3”优化的nvcc。SONG实施方式加载由NSW(Y.Malkov,A.Ponomarenko,A.Logvinov和V.Krylov,“Approximate Nearest NeighborAlgorithm Based on Navigable Small World Graphs(基于可导航小世界图的近似最近邻域算法)”,信息系统,45:第61-68页,2014年)生成的预构建图。选择NSW是由于它是一种通用且灵活的近似图构造算法。其它替代图构造算法也适用于本文中公开的加速框架的实施方式。
硬件系统。实验在单节点服务器上执行。服务器具有一个Intel Xeon处理器E5-2660(64位)(8个核心、16个线程)以及128GB的内存。操作系统是64位的Ubuntu16.04.4LTS。服务器上使用的GPU是NVIDIA TESLA V100。
GPU内存层级。GPU L1缓存是可配置的:可将L1缓存的一部分分配为共享内存。与GPU全局内存相比,L1缓存具有更低的延迟和更高的带宽。同时,L1缓存的容量有限:96KB/每SM。我们从L1缓存中分配了共享内存,用于存储搜索候选项和top-k个结果、工作的查询点以及批量计算出的距离的堆。在图搜索算法期间,频繁地访问这些数据结构。另外,其大小是有界限的,可容纳于L1缓存。当我们不应用任何提出的优化时,visited哈希表是无界的。由于其大小可能会超出L1缓存的容量,因而将其放入全局内存中。通过我们提出的选择插入和已访问项删除优化,哈希表的大小受搜索参数K的限制,因而可将其存储在共享内存中,以加速哈希表的探测和更新。数据集和图索引不可容纳于L1缓存中,因而它们存储在全局内存中。
比较方法。比较方法是HNSW(关于CPU最先进的ANN方法)和Faiss(用于大规模数据的顶级GPU ANN系统)。其它研究已显示出,其它类型的方法(诸如基于树的方法、基于哈希的方法)具有较差的性能。从而没有作为比较对象而包括在本文中。使用了其GitHub存储库中的Faiss和HNSW的代码。尤其是,HNSW有多种实施例,使用了NMSLIB中的实施例(ANNBenchmark中性能最好的实施例)。为了进行公平的比较,HNSW和Faiss的参数在细网格上变化。然后考虑其最佳结果。
方法。每种算法的索引都是预构建的。索引构造时间不包括在实验中。尤其是,SONG实施方式不生成自身索引。相反,SONG使用了与NSW相同的图索引(类似于HNSW,但无分层结构)。HNSW是用一个单线程运行的:由于HNSW支持查询间并行,因而可假设HNSW的性能可线性扩展到多个线程。对于Faiss实施方式和SONG实施方式,查询是在一个单GPU上以一个批量执行的。类似于HNSW,Faiss实施方式和SONG实施方式还可用多个GPU卡线性扩展。与单线程HNSW的比较给出了显示一个GPU可取代多少CPU线程的因数。通过搜索时间(每秒查询量)和检索质量(调用)来评估性能。
搜索时间。测量每种算法的挂钟时间,并将每秒应答的查询量(吞吐量)表示为运行时间度量。选择“每秒查询量”而非查询批量的运行时间作为指标,因为“每秒查询量”可比较而无需将查询批量归一化为相同的大小。所有实验执行至少3次。将平均值作为结果报告。
检索质量。调用是针对ANN算法广泛使用的检索质量度量。假设由方法返回的候选点集为A,并且正确查询的K个最近邻域集为B,则调用率限定为:
Figure BDA0002797484950000281
较高的调用率与对正确的最近邻域结果的更好的近似相对应。
数据。六个ANN数据集用于实验。数据集的规格如表1中所示。测试数据集的维度在128至960之间变化,而数据点的数量处于290,000至8,000,000的范围内。数据集F是最大的数据集(24GB),数据集A是最小的(301MB)。数据集的分布也有所不同,数据集A和数据集C严重偏斜,而数据集B、数据集D、数据集E和数据集F偏斜度较小。数据集F用于研究GPU内存不足的情形。原始数据集E中的查询数量为1,000;为了消除查询批量大小与其它数据集的差异,数据集E查询多重复了9次,以将查询量扩展到10,000。
表1:数据集的规格
Figure BDA0002797484950000282
1.ANN搜索性能比较
SONG实施方式、Faiss和HNSW的ANN性能比较结果在图7A和图7B中示出。对于数据集A,示出了top-1(705)、top-10(710)、top-50(715)和top-100(720)的结果。对于数据集B,示出了top-10(725)和top-100(730)的结果。对于数据集C,示出了top-10(735)和top-100(740)。对于数据集D,示出了top-10(745)和top-100(750)。以及对于数据集E,示出了top-10(755)和top-100(760)。Y轴(每秒查询量或QPS)为对数刻度。在每个图中,越靠近右上角的曲线越好。表2表示Faiss上加速的详细结果。
表2:针对top-10从中等调用率(0.5)到高调用率(0.95)的Faiss上加速。N/A意味着Faiss无法达到给定的调用率。这与先前的研究一致。省略了top-1加速。其具有类似的趋势,且总体上加速效果略好。
Figure BDA0002797484950000291
如表2中所示,在相同的调用率下,SONG实施方式比Faiss快4.8至20.2倍。另外,Faiss对数据集C、数据集A和数据集E无法实现高调用率。与单线程HNSW相比,SONG实施方式的速度快约50至180倍,这意味着在16线程CPU服务器上由1-GPU加速的SONG实施方式可获得比HNSW上约3至11倍的加速。
在数据集A和数据集C上进行ANN搜索是很困难的——数据点是偏斜和聚集的。Faiss在低调用率范围(调用率<60%)中具有可与SONG实施方式相竞争的性能。作为基于量化的方法,Faiss受其生成的量化代码的质量的限制。对于数据集A和数据集C,在高调用率下,每秒查询量量会急剧下降。随着搜索优先队列的大小的增加,SONG实施方式可实现超过95%的调用率。同时,当调用率约为80%时,SONG实施方式的表现优于HNSW约100倍。数据集B和数据集D对ANN搜索是“友好的”——因为数据集的非聚集分布,ANN方法可快速定位查询点的邻域点。在数据集B上,SONG实施方式用约100的优先队列大小实现了99%的调用率。在这5个数据集中,数据集E具有最大数量的维度(即960)。由于Faiss的量化方法将高维数据编码为长度短得多的代码,因此Faiss与SONG实施方式具有更接近的差距。因而,Faiss需要执行较少的计算。尽管如此,由于SONG实施方式的大量并行的距离计算,其仍然优于Faiss。在大多数的调用率范围内,SONG实施方式比HNSW快约180倍。
Top-K最近邻域。当K增加时,比较方法的趋势是一致的——图中的线向左移动。直观地,找到99%的top-1比获得99%的所有top-10个数据点的正确候选项要容易。通过探索相同的搜索空间,当问题变得更难时调用率会下降。
索引内存大小。表3给出了索引内存大小的比较。由于图的复杂结构,与Faiss的倒置索引相比,SONG实施方式的图索引消耗更多的内存。对于GPU的内存容量,这个(相对较小的)差异是可接受的。
表3:索引内存大小
Figure BDA0002797484950000301
HNSW上的加速。在图6中对于top-10和top-100的结果中描述了相对于HNSW的SONG加速率。对于数据集B和数据集C,用于大多数调用率值的加速范围为50至100。数据集A是个有趣的情况:在使SONG实施方式使用较少内存的优化实施方式中,在数据集A中,SONG实施方式的“每秒查询量”比HNSW下降得慢,因而在具有更大的调用率时SONG实施方式的加速保持增长。由于数据集E具有更大的维数,因而数据集E的加速比数据集B和数据集C更为显著——SONG实施方式具有更多并行距离计算的机会。
2.选择插入和已访问项删除优化
图9描述了根据本公开的实施方式提出的在哈希表及其替代方案上的选择插入和已访问项删除优化的行为。比较了以下实施方式之间的性能:基本哈希表(SONG-hashtable)、具有选择插入的哈希表(SONG-hashtable-sel)、具有选择插入和已访问项删除的哈希表(SONG-hashtable-sel-del))以及两个概率数据结构替代方案(SONG-bloomfilter和SONG-cuckoofilter)。
对于数据集B,启用选择插入和已访问项删除优化的哈希表具有最佳性能。由于仅需要很小的优先队列大小就可在数据集B中实现较高的调用率,因而选择插入与基本哈希表方案没有显著差异。已访问项删除优化在数据集B中的表现很好。Bloom过滤器和Cuckoo过滤器方案位于基本哈希表与hashtable-sel-del之间。尽管它们劣于hashtable-sel-del,但它们消耗的GPU内存更少(当GPU内存短缺时,它们都可作为替代方案)。
当数据集A中的数据分布“不友好”时,优先队列大小扩大到几千以获得高调用率。观察到类似的趋势。另外,由于哈希表删除操作的开销,因而hashtable-sel在开始时优于其它的表。然而,在调用率达到约81%之后其内存耗尽,从而其性能急剧下降。同时,hashtable-sel-del使用的内存更少。因而,hashtable-sel-del成为其它方法中最快的方案。由于两个概率数据结构消耗的内存更少,其在高调用率区域中有具竞争性的性能。
3.搜索参数
本节探讨了候选项定位阶段的多个搜索参数的有效性。改变一个搜索参数,设置其它参数为1,并将哈希表替代方案固定为hashtable-sel-del。由于省略的实验具有相似的趋势,因而本文仅包括实验结果的子集。
Warp中的多查询。如图10中所示,warp中的查询数量在1、2和4之间变化。尽管在warp中处理更多查询时活动线程的数量增加,但查询性能却下降了。在候选项定位阶段中花费的主要时间是从全局内存加载图数据——这受内存而非计算的限制。因而,拥有更多活动线程可能不会提高性能。访问图的多个部分会使内存访问模式更加不可预测。同时,在warp中处理多个查询还会构造优先队列和哈希表的多个副本——消耗更多的GPU内存。因而,在解决warp中的多查询时,观察到了较差的性能。
多步骤探测。图11中表示了两个数据集(1105和1110)的多步骤探测的效果。作为GPU BFS中通用的并行方案,多步骤探测不会提高ANN图搜索的性能。原因在于当前处理的顶点的邻域可能是优先队列的队头。多步骤探测浪费了对无关的候选项的探测内存访问和距离计算。在高调用率范围内,由于必须探查很多步骤才能找到非常准确的最近邻域候选项(在这种情况下,多步骤探测不会浪费操作)性能差距要小得多。
4.时间分配
分析了由数据集C和数据集E上的每个组件消耗的时间百分比,且在图12中示出了结果。应注意,条形图的堆积顺序与相应的图例相反。
数据传输开销。为了使用GPU处理查询,查询数据从CPU内存(主机)传输到GPU卡(设备)。在GPU上完成查询后,将存储在GPU上的结果复制回CPU内存。这两个内存传输分别称为HtoD和DtoH。图12的左边部分(1205和1215)示出了数据传输和内核执行的时间分布。可观察到,内核执行花费了主要的执行时间(数据集C上超过96%,数据集E上超过89%)。由于HtoD内存传输花费固定的时间,因而当内核执行变得更加耗时时(使用更大的优先队列大小),HtoD所占的百分比就会减少。另一方面,当设置较大的K时,会返回更多的候选项。因而,DtoH的时间百分比略有增加。
3个阶段的时间分配。图12的右边部分(1210和1220)描述了候选项定位、批量距离计算和数据结构维护的时间分布。对于数据集C和数据集E,数据结构维护都花费主要的执行时间。由于数据集C的维度为200,数据集E的维度为960,因而数据集E上的距离计算比数据集C上的距离计算多花费8%至20%的时间。然而,维护时间在数据集E上所占比重较大。选择插入在数据集C上过滤更多的顶点,需要更多的距离计算以节省GPU内存和数据结构维护成本。
5.查询批量大小
图13示出了根据本公开的实施方式的在不同批量大小上的搜索性能。从数据集B查询中抽样了100个查询和1k个查询以构造小查询批量。另一方面,为了探讨对于大的批量大小的搜索性能,将数据集B查询数据集复制到100k和1m查询中。如所预期的,当批量更大时,每秒查询量会增加。当为小批量时,CPU内存和GPU内的数据传输开销是不可忽略的。另外,用少量查询不能充分使用GPU上的数千个核心。由于大批量将开销摊销到批量中的大量查询,且有充足的查询用于GPU上的大规模并行性,因而用较大的批量性能会更好。在批量为100k后,每秒查询量达到最高。即使更大的批量(1m)都无法再提高性能。在先前的实验中查询批量处理大小为10k,在使用更大的查询批量时,HNSW的加速可更大。
6.泛化到其它的图方法
SONG实施方式涉及用于加速图搜索算法的基于图的方法的通用GPU框架。除了HNSW、SONG实施方式还可应用于其它基于图的方法。这里示出了以导航展开图(NSG)(C.Fu等人,“Fast approximate nearest neighbor search with the navigating spreading-out graph(用导航扩展图的快速近似最近邻域搜索)”,VLDB,2019年)的泛化作为示例。提取由NSG构建的图索引,并采用SONG实施方式来应答对所提取的NSG索引的查询。结果在图14中描述。对于高调用率(>0.8),SONG实施方式相对于NSG具有30至37倍的加速。
7.各种GPU上的性能
图15示出了根据本公开的实施方式的使用两个不同的数据集(数据集B 1505和数据集C 1510)在各种GPU上的SONG实施方式的性能。比较中包括了三个GPU:NVIDIA TESLAV100(5,120核,32GB内存)、NVIDIATESLA P40(3,840核,24GB内存)和NVIDIA TITAN X(3,584核,12GB内存)。在不同的GPU上,SONG的性能遵循相同的趋势——图中示出了相同的趋势。这些线的差距与GPU的计算能力一致。
8.GPU内存不足的数据集
探讨了哈希维数减少的效果,且结果在图16中示出。在TITAN X上执行了实验,以示出GPU内存不足的情形(TITAN X在三个测试的GPU中具有最小的内存(12GB))。数据集F(24GB)不能容纳在TITAN X的GPU内存中,因而从数据集F采样了100万个数据点(以创建数据集F*),以验证哈希方法实施方式的性能。如图16的左边部分1605中所示,可观察到,在128位哈希数据集上的搜索性能与原始完整的784维的数据相当。对于调用率范围小于0.9的情况,由于哈希数据集的距离计算速度更快(该距离的计算维度远小于原始的784维),因此哈希数据集的性能优于原始数据集。
表4示出了哈希数据集的大小。通过哈希,数据集的大小会减少数百倍,并可容纳于GPU内存。例如,128位哈希使原始数据集减少了190倍以上,同时具有与原始数据集相当的查询性能。在将哈希技术应用于数据集F之后,其可容纳在GPU内存中。哈希数据集F的性能与数据集F*具有一致的趋势,如图16中所示。
表4:数据集F的哈希数据集大小
Figure BDA0002797484950000341
9.SONG实施方式的CPU实施例
除了GPU优化,还实施了SONG实施方式的CPU版本,该版本经过精心设计以提高性能。如图17中所示,在数据集A 1705和数据集D 1710上,CPU实施例优于HNSW。
J.一些相关工作
ANN方法。Flann(M.Muja和D.G.Lowe,“Scalable nearest neighbor algorithmsfor high dimensional data(用于高维数据的可扩展的最近邻域算法)”,IEEE关于模式分析和机器智能的汇编,第36卷,第11期,第2227-2240页,2014年)是基于复合树算法的ANN库。Annoy是基于二进制搜索森林。FALCONN(A.Andoni、P Indyk、T.Laarhoven、I.Razenshteyn和L.Schmidt,“Practical and Optimal LSH for angular distance(针对角距离的实用且最佳的LSH)”,NIPS,2015年)是多探测哈希ANN方法。作为基于树的算法和基于哈希算法中的代表性实施例,其性能劣于基于图的方法。对于基于图的方法,HNSW是基于分层图,以及DPG(W.Li等人,“Approximate nearest neighbor search on highdimensional data:Experiments,analyses,and improvement(对高维数据的近似最近邻域搜索:实验,分析和改进),”arXiv:1610.02455,2016年)是基于从kNN图中选择的无向图。NSG仅包含一个具有导航节点的图,搜索始终从该图开始。它们共享相同的ANN图搜索。SONG实施方式可加速基于图的ANN系列中的大多数(即使并非所有)算法。Faiss是最快的基于GPU量化的ANN库。
GPU图搜索。已经探讨了GPU图搜索中的数据布局。探讨对图进行分区或流式处理以可容纳于GPU内存。在本文的ANN搜索应用中,考虑了具有充足GPU内存的情况。iBFS(H.Liu等人,“iBFS:Concurrent Breadth-First Search on GPU(GPU上的并行广度优先搜索)”,SIGMOD,2016年)、GunRock(Y.Wang等人,“GunRock:A high-performance graphprocessing library on the GPU(GPU上的高性能图处理库)”,SIGPLAN,2016年)、Enterprise(H.Liu和H.H.Huang,“Enterprise:Breadth-first graph traversal on GPUs(GPU上的广度优先图遍历)”,SC,2015年)、In-cache query(J.He等人,“In-cache queryco-processing on coupled CPU-GPU architectures(在联接的CPU-GPU架构上进行缓存中查询的共同处理)”,VLDB,2014年)、以及GTS(M.-S.Kim等人,“GTS:A fast and scalablegraph processing method based on streaming topology to GPUs(一种基于GPU的流式拓扑的快速且可扩展的图处理方法)”,SIGMOD,2016年)构造多个边界并同时搜索它们。本文中ANN图搜索的实施方式与正常BFS不同(从优先队列中提取顶点以进行下次迭代)。Virtual Warp(S.Hong等人,“Accelerating CUDA graph algorithms at maximum warp(在最大warp处加速CUDA图算法)”,SIGPLAN,2011年)、CuSha(F.Khorasani等人,“CuSha:Vertex-centric graph processing on GPUs(GPU上以顶点为中心的图处理)”,HPDC,2014年)、FinePar(F.Zhang等人,“FinePar:Irregularity-aware fine-grained workloadpartitioning on integrated architectures(集成架构上的不规则性意识的细粒度工作负载分区)”,CGO,2017年)和MapGraph(Z.Fu等人,“MapGraph:A High Level API for FastDevelopment of High Performance Graph Analytics on GPUs(用于在GPU上快速开发高性能图形分析的高级API)”,GRADES,2014年)提出了调度任务并减少warp偏差的方法。在本文的ANN应用实施方式中,重新设计了搜索架构以计算高维距离。
最大内积搜索(MIPS)。由于研究人员和从业人员已经确定了广泛的相关应用,因而MIPS问题近来引起了很多关注,例如,通过考虑对每个向量的权重(诸如对广告的出价),使用ANN在赞助商搜索中将用户与广告匹配。最近的MIPS方法实施方式选用SONG实施方式作为基础方法,参见于2019年11月1日提交的、题为“
Figure BDA0002797484950000361
TRANSFORMATION FOR FASTINNER PRODUCT SEARCH ON GRAPH(图上内积搜索的
Figure BDA0002797484950000362
变换)”的共有的第62/929,751号美国专利申请(案卷号:28888-2367P),该申请将Shulong Tan、ZhixinZhou、ZhaozhuoXu和Ping Li列为发明人。
K.一些结论
在本专利文件中,通过示例的方式提出了在具有并行处理能力的硬件(诸如GPU)上执行基于图的ANN搜索的ANN搜索系统和方法的实施方式(为了方便起见,这些实施方式通常被称为SONG)。本文中公开了新颖的框架的实施方式,该实施方式将在图上搜索方法分解为三个阶段,以并行地进行高维距离计算。还公开了用于GPU ANN图搜索的数据结构和优化的组合。还介绍了用于减少GPU内存消耗的选择插入和已访问项删除优化。对SONG的实施方式进行了测试,并在数据集上与HNSW和Faiss进行了比较。结果证实了SONG实施方式的有效性,例如,与单线程HNSW相比,SONG实施方式的速度提高了50至180倍,同时性能大大优于Faiss。
L.系统实施方式
在一个或多个实施方式中,本专利文献的方面可涉及、可包括一个或多个信息处理系统/计算系统,或者可在一个或多个信息处理系统(或计算系统)上实现。信息处理系统/计算系统可包括可操作来计算、运算、确定、分类、处理、传输、接收、检索、发起、路由、交换、存储、显示、通信、显现、检测、记录、再现、处理或利用任何形式信息、智能或数据的任何手段或手段的组合。例如,计算系统可以是或可包括个人计算机(例如,膝上型计算机)、平板电脑、移动设备(例如,个人数字助理(PDA)、智能手机、平板手机、平板等)、智能手表、服务器(例如,刀片式服务器或机架式服务器)、网络存储设备、摄像机或任何其它合适设备,并且可在大小、形状、性能、功能和价格方面改变。计算系统可包括随机存取存储器(RAM)、一个或多个处理资源(诸如中央处理单元(CPU)或硬件或软件控制逻辑)、只读存储器(ROM)和/或其它类型的存储器。计算系统的另外组件可包括一个或多个盘驱动器、用于与外部设备通信的一个或多个网络端口、以及各种输入和输出(I/O)设备(例如键盘、鼠标、手写笔、触摸屏和/或视频显示器)。计算系统还可包括可操作为在各种硬件组件之间传输通信的一个或多个总线。
图18描述根据本公开的实施方式的信息处理系统(或计算系统)的简化框图。将理解,计算系统可不同地配置并且包括不同组件,包括如图18中所示的更少或更多的部件,但应理解,针对系统1800所示出的功能可操作为支持计算系统的各种实施方式。
如图18所示,计算系统1800包括一个或多个中央处理单元(CPU)1801,CPU 1801提供计算资源并控制计算机。CPU 1801可用微处理器等实现,并且还可包括一个或多个图形处理单元(GPU)1802(或SIMT型/SIMD型处理器)和/或用于数学计算的浮点协处理器。在一个或多个实施方式中,一个或多个GPU 1802可并入显示控制器1809内,诸如一个或多个图卡的一部分。系统1800还可包括系统存储器1819,系统存储器1819可包括随机存取存储器(RAM)、只读存储器(ROM)或两者。
如图18中所示,还可提供多个控制器和外围设备。输入控制器1803表示至各种输入设备1804的接口,例如键盘、鼠标、触摸屏和/或触笔。计算系统1800还可包括存储控制器1807,存储控制器1807用于与一个或多个存储设备1808对接,存储设备中的每个包括存储介质(诸如磁带或盘)或光学介质(其可用于记录用于操作系统、实用工具和应用程序的指令的程序,它们可包括实施本公开的各方面的程序的实施方式)。存储设备1808还可用于存储经处理的数据或是将要根据本公开处理的数据。系统1800还可包括显示控制器1809,显示控制器1809用于为显示设备1811提供接口,显示设备1811可为阴极射线管(CRT)显示器、薄膜晶体管(TFT)显示器、有机发光二极管、电致发光面板、等离子面板或任何其它类型的显示器。计算系统1800还可包括用于一个或多个外围设备1806的一个或多个外围设备控制器或接口1805。外围设备的示例可包括一个或多个打印机、扫描仪、输入设备、输出设备、传感器等。通信控制器1814可与一个或多个通信设备1815对接,这使系统1800能够通过各种网络(包括互联网、云资源(例如以太云、经以太网的光纤通道(FCoE)/数据中心桥接(DCB)云等)、局域网(LAN)、广域网(WAN)、存储区域网络(SAN))中的任一网络,或通过任何合适电磁载波信号(包括红外信号)来连接至远程设备。如描述的实施方式中所示,计算系统1800包括一个或多个风扇或风扇托盘1818以及一个或多个冷却系统控制器1817,其监视系统1800(或其组件)的热温度并操作风扇/风扇托盘1818以助于调节温度。
在示出的系统中,所有主要系统组件可连接至总线1816,总线1816可表示多于一个的物理总线。然而,各种系统组件可在物理上彼此近似或可不在物理上彼此近似。例如,输入数据和/或输出数据可远程地从一个物理位置传输到另一物理位置。另外,实现本公开的各方面的程序可经由网络从远程位置(例如,服务器)访问。此类数据和/或程序可通过各种机器可读介质中的任一机器可读介质来传送,机器可读介质包括例如:诸如硬盘、软盘和磁带的磁性介质;诸如光盘(CD)和全息设备的光学介质;磁光介质;以及专门配置成存储或存储并执行程序代码的硬件设备,诸如专用集合成电路(ASIC)、可编程逻辑器件(PLD)、闪存设备、其它非易失性存储器(NVM)设备(诸如基于XPoint的3D设备)、以及ROM和RAM设备。
本公开的方面可利用用于一个或多个处理器或处理单元以使步骤执行的指令在一个或多个非暂态计算机可读介质上编码。应注意,一个或多个非暂态计算机可读介质应包括易失性存储器和/或非易失性存储器。应注意,替代实现方式是可能的,其包括硬件实现方式或软件/硬件实现方式。硬件实施的功能可使用ASIC、可编程的矩阵、数字信号处理电路等来实现。因而,任何权利要求中的术语“手段”旨在涵盖软件实现方式和硬件实现方式两者。类似地,如本文使用的术语“计算机可读媒介或介质”包括具有实施在其上的指令程序的软件和/或硬件或它们的组合。利用所构想的这些替代实现方式,应理解,附图以及随附描述提供本领域的技术人员编写程序代码(即,软件)和/或制造电路(即,硬件)以执行所需处理所要求的功能信息。
应注意,本公开的实施方式还可涉及具有其上具有用于执行各种计算机实施的操作的计算机代码的非暂态有形计算机可读介质的计算机产品。介质和计算机代码可为出于本公开的目的而专门设计和构造的介质和计算机代码,或者它们可为相关领域中的技术人员已知或可用的。有形计算机可读介质的示例包括例如:诸如硬盘、软盘和磁带的磁性介质;诸如CD和全息设备的光学介质;磁光介质;以及专门配置成存储或存储并执行程序代码的硬件设备,诸如ASIC、可编程逻辑器件(PLD)、闪存设备、其它非易失性存储器(NVM)设备(诸如基于XPoint的3D设备)、以及ROM和RAM设备。计算机代码的示例包括机器代码(例如,编译器产生的代码)以及包含可由计算机使用解释器来执行的更高级代码的文件。本公开的实施方式可整体地或部分地实施为可在由处理设备执行的程序模块中的机器可执行指令。程序模块的示例包括库、程序、例程、对象、组件和数据结构。在分布的计算环境中,程序模块可物理上定位在本地、远程或两者的设定中。
本领域的技术人员将认识到,计算系统或编程语言对本公开的实践来说均不重要。本领域的技术人员将还将认识到,多个上述元素可物理地和/或在功能上划分成模块和/或子模块或组合在一起。
本领域技术人员将理解,前文的示例和实施方式是示例性的,并且不限制本公开的范围。旨在说明的是,在本领域的技术人员阅读本说明书并研究附图后将对本领域的技术人员显而易见的本公开的所有、置换、增强、等同、组合或改进包括在本公开的真实精神和范围内。还应注意,任何权利要求书的元素可不同地布置,包括具有多个从属、配置和组合。

Claims (20)

1.一种计算机实施的方法,所述方法用于在给定包括表示点的顶点和表示邻域顶点的边缘的近似图的情况下,使用一个或多个单指令多线程或单指令多数据类型处理器对查询点执行近似最近邻域搜索,所述方法包括:
用来自所述近似图的默认起始顶点初始化二进制最小堆作为第一优先队列并初始化哈希表,所述第一优先队列按照距离对顶点进行升序排序;
构造空的二进制最大堆作为第二优先队列;
响应于所述第一优先队列不为空:
从所述第一优先队列中提取顶点及所述顶点到所述查询点的距离;
当所述第二优先队列已满时,响应于所提取的顶点到所述查询点的距离差于所述第二优先队列中的顶点候选项,不将所提取的顶点添加到所述第二优先队列;
响应于所提取的顶点到所述查询点的距离不差于所述第二优先队列中的至少一个顶点候选项,或者响应于所述第二优先队列未满,基于所提取的顶点到所述查询点的距离,将所提取的顶点添加到所述第二优先队列;
对于所述近似图中的、作为所提取的尚未访问的顶点的邻域的每个顶点:
计算该顶点到所述查询点的距离;
经历一个或多个优化过程,将该顶点添加到所述哈希表;以及
经历一个或多个优化过程,将该顶点按其到所述查询点的距离的顺序添加到所述第一优先队列中;以及
响应于所述第一优先队列为空,输出包括作为所述近似图中对于所述查询点的最近邻域或近似最近邻域的一个或多个顶点的所述第二优先队列。
2.根据权利要求1所述的计算机实施的方法,其中,使用批量距离计算来执行计算所述顶点到所述查询点的距离,在所述批量距离计算中,使用所述处理器的多个线程来计算来自所述第一优先队列的多个顶点中的每个顶点到所述查询点的距离,其中,每个线程使用顶点的维度子集来计算局部距离,并且所述处理器的线程将所述局部距离聚合为所述多个顶点中的每个顶点到所述查询点的距离值。
3.根据权利要求1所述的计算机实施的方法,还包括:
将所述近似图的至少一部分存储为固定程度的邻接关系,以消除对额外索引查找的使用。
4.根据权利要求3所述的计算机实施的方法,其中,通过将顶点的索引乘以顶点的固定大小来定位顶点。
5.根据权利要求1所述的计算机实施的方法,还包括:
将所述查询点显式复制到片上共享内存中,以减少处理器的全局内存读取。
6.根据权利要求1所述的计算机实施的方法,其中,所述第一优先队列和所述第二优先队列以及所述哈希表由单个线程维护。
7.根据权利要求1所述的计算机实施的方法,其中,所述一个或多个优化过程包括以下中的一个或多个:
有界存储过程;
选择插入过程;以及
已访问项删除过程。
8.一种计算机实施的方法,所述方法用于在给定包括表示点的顶点和表示邻域顶点的边缘的近似图的情况下,使用一个或多个单指令多线程或单指令多数据类型处理器对批量查询点执行近似最近邻域搜索,所述方法包括:
对于所述批量查询点中的每个查询点:
用来自所述近似图的默认起始顶点初始化二进制最小堆作为第一优先队列并初始化哈希表,所述第一优先队列按照距离对顶点进行升序排序;以及
构造空的二进制最大堆作为第二优先队列;
响应于所述批量查询点中非所有查询点都已完成处理:
对于来自所述批量查询点的尚未完成处理的查询点:
从与所述查询点相对应的所述第一优先队列中提取顶点及所述顶点到所述查询点的距离;
当所述第二优先队列已满时,响应于所提取的顶点到所述查询点的距离差于所述第二优先队列中的所有顶点候选项,不将所提取的顶点添加到所述第二优先队列,并标记查询点已完成;
响应于所提取的顶点到所述查询点的距离不差于所述第二优先队列中的至少一个顶点候选项,或者响应于所述第二优先队列未满,基于所提取的顶点到所述查询点的距离,将所提取的顶点添加到所述第二优先队列;对于来自所述批量查询点的、尚未完成处理的查询点:
初始化与所述查询点相对应的候选项集;以及
对于所述近似图中的、作为所提取的尚未访问的顶点的邻域的每个顶点:将该顶点添加到所述候选项集;以及
对于作为所述候选项集的成员的每个顶点:
计算该顶点到所述查询点的距离;
经历一个或多个优化过程,将该顶点添加到所述哈希表;以及
经历一个或多个优化过程,将该顶点按其到所述查询点的距离的顺序添加到所述第一优先队列中;以及
响应于所述批量查询点中的所有所述查询点都已完成处理,针对所述批量查询点中的每个查询点,输出包括作为所述近似图中对于所述查询点的最近邻域或近似最近邻域的一个或多个顶点的第二优先队列。
9.根据权利要求8所述的计算机实施的方法,其中,使用批量距离计算来执行计算所述顶点到所述查询点的距离,在所述批量距离计算中,使用所述处理器的多个线程来计算来自所述候选项集的多个顶点中的每个顶点到所述查询点的距离,其中,每个线程使用顶点的维度子集来计算局部距离,并且所述处理器的线程将所述局部距离聚合为所述多个顶点中的每个顶点到所述查询点的距离值。
10.根据权利要求8所述的计算机实施的方法,还包括:
将所述近似图的至少一部分存储为固定程度的邻接关系,以消除对额外索引查找的使用。
11.根据权利要求10所述的计算机实施的方法,其中,通过将顶点的索引乘以顶点的固定大小来定位顶点。
12.根据权利要求8所述的计算机实施的方法,还包括:
将所述查询点显式复制到片上共享内存中,以减少处理器的全局内存读取。
13.根据权利要求8所述的计算机实施的方法,其中,所述第一优先队列和所述第二优先队列以及所述哈希表由单个线程维护。
14.根据权利要求8所述的计算机实施的方法,其中,所述一个或多个优化过程包括以下中的一个或多个:
有界存储过程;
选择插入过程;以及
已访问项删除过程。
15.根据权利要求8所述的计算机实施的方法,其中,所述候选项集中的每个顶点分配为共享内存中的固定长度数组。
16.一种包括一个或多个指令序列的非暂时性计算机可读介质或媒介,所述一个或多个指令序列在由至少一个处理器执行时致使以下步骤:在给定包括表示点的顶点和表示邻域顶点的边缘的近似图的情况下,使用一个或多个单指令多线程或单指令多数据类型处理器对查询点执行近似最近邻域搜索,所述步骤包括:
用来自所述近似图的默认起始顶点初始化二进制最小堆作为第一优先队列并初始化哈希表,所述第一优先队列按照距离对顶点进行升序排序;
构造空的二进制最大堆作为第二优先队列;
响应于所述第一优先队列不为空:
从所述第一优先队列中提取顶点及所述顶点到所述查询点的距离;
当所述第二优先队列已满时,响应于所提取的顶点到所述查询点的距离差于所述第二优先队列中的顶点候选项,不将所提取的顶点添加到所述第二优先队列;
响应于所提取的顶点到所述查询点的距离不差于所述第二优先队列中的至少一个顶点候选项,或者响应于所述第二优先队列未满,基于所提取的顶点到所述查询点的距离,将所提取的顶点添加到所述第二优先队列;
对于所述近似图中的、作为所提取的尚未访问的顶点的邻域的每个顶点:
计算该顶点到所述查询点的距离;
经历一个或多个优化过程,将该顶点添加到所述哈希表;以及
经历一个或多个优化过程,将该顶点按其到所述查询点的距离的顺序添加到所述第一优先队列中;以及
响应于所述第一优先队列为空,输出包括作为所述近似图中对于所述查询点的最近邻域或近似最近邻域的一个或多个顶点的所述第二优先队列。
17.根据权利要求16所述的非暂时性计算机可读介质或媒介,其中,使用批量距离计算来执行计算所述顶点到所述查询点的距离,在所述批量距离计算中,使用所述处理器的多个线程来计算来自所述第一优先队列的多个顶点中的每个顶点到所述查询点的距离,其中,每个线程使用顶点的维度子集来计算局部距离,并且所述处理器的线程将所述局部距离聚合为所述多个顶点中的每个顶点到所述查询点的距离值。
18.根据权利要求16所述的非暂时性计算机可读介质或媒介,其中,所述步骤还包括:
将所述近似图的至少一部分存储为固定程度的邻接关系,以消除对额外索引查找的使用。
19.根据权利要求16所述的非暂时性计算机可读介质或媒介,其中,所述第一优先队列和所述第二优先队列以及所述哈希表由单个线程维护。
20.根据权利要求16所述的非暂时性计算机可读介质或媒介,所述一个或多个优化过程包括以下中的一个或多个:
有界存储过程;
选择插入过程;以及
已访问项删除过程。
CN202011336853.4A 2019-11-25 2020-11-25 用于单指令多线程或单指令多数据类型处理器的近似最近邻域搜索 Active CN112835627B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962940043P 2019-11-25 2019-11-25
US62/940,043 2019-11-25
US17/095,548 US20210157606A1 (en) 2019-11-25 2020-11-11 Approximate nearest neighbor search for single instruction, multiple thread (simt) or single instruction, multiple data (simd) type processors
US17/095,548 2020-11-11

Publications (2)

Publication Number Publication Date
CN112835627A true CN112835627A (zh) 2021-05-25
CN112835627B CN112835627B (zh) 2023-10-03

Family

ID=73597818

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011336853.4A Active CN112835627B (zh) 2019-11-25 2020-11-25 用于单指令多线程或单指令多数据类型处理器的近似最近邻域搜索

Country Status (3)

Country Link
US (1) US20210157606A1 (zh)
EP (1) EP3828736B1 (zh)
CN (1) CN112835627B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115455061A (zh) * 2022-11-14 2022-12-09 广东电网有限责任公司佛山供电局 一种基于异构计算的用户特征快速检索方法
TWI822162B (zh) * 2021-12-10 2023-11-11 日商鎧俠股份有限公司 資訊處理裝置以及控制資訊處理裝置的方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210107531A (ko) * 2018-12-24 2021-09-01 인텔 코포레이션 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치
CN113468293B (zh) * 2021-07-13 2023-06-13 沈阳航空航天大学 基于多关键字覆盖的路网Top-k路径查询方法
JP7353330B2 (ja) * 2021-07-16 2023-09-29 ヤフー株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
US20230109463A1 (en) * 2021-09-20 2023-04-06 Oracle International Corporation Practical method for fast graph traversal iterators on delta-logged graphs
CN113779333B (zh) * 2021-09-29 2024-04-12 京东城市(北京)数字科技有限公司 目标对象查询方法及装置、存储介质、电子设备
US12056133B2 (en) * 2021-12-17 2024-08-06 Baidu Usa Llc Fast neural ranking on bipartite graph indices

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060190465A1 (en) * 2005-02-24 2006-08-24 Nahava Inc. Method and apparatus for efficient indexed storage for unstructured content
US20160103715A1 (en) * 2014-10-09 2016-04-14 The Regents Of The University Of Michigan Issue control for multithreaded processing
US20160162406A1 (en) * 2008-11-24 2016-06-09 Fernando Latorre Systems, Methods, and Apparatuses to Decompose a Sequential Program Into Multiple Threads, Execute Said Threads, and Reconstruct the Sequential Execution
WO2017027007A1 (en) * 2015-08-10 2017-02-16 Hewlett Packard Enterprise Development Lp Using a shared priority queue for multi-threaded searching
US20170161271A1 (en) * 2015-12-04 2017-06-08 Intel Corporation Hybrid nearest neighbor search tree with hashing table
EP3355207A1 (en) * 2017-01-31 2018-08-01 Facebook, Inc. K-selection using parallel processing
CN108710626A (zh) * 2018-03-20 2018-10-26 浙江大学 一种基于卫星系图的高维数据的近似最近邻检索方法及检索系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6977659B2 (ja) * 2018-05-10 2021-12-08 日本電信電話株式会社 グラフ更新装置、グラフ更新方法、及びプログラム
US10585988B2 (en) * 2018-06-08 2020-03-10 Microsoft Technology Licensing, Llc Graph representations for identifying a next word

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060190465A1 (en) * 2005-02-24 2006-08-24 Nahava Inc. Method and apparatus for efficient indexed storage for unstructured content
US20160162406A1 (en) * 2008-11-24 2016-06-09 Fernando Latorre Systems, Methods, and Apparatuses to Decompose a Sequential Program Into Multiple Threads, Execute Said Threads, and Reconstruct the Sequential Execution
US20160103715A1 (en) * 2014-10-09 2016-04-14 The Regents Of The University Of Michigan Issue control for multithreaded processing
WO2017027007A1 (en) * 2015-08-10 2017-02-16 Hewlett Packard Enterprise Development Lp Using a shared priority queue for multi-threaded searching
US20170161271A1 (en) * 2015-12-04 2017-06-08 Intel Corporation Hybrid nearest neighbor search tree with hashing table
EP3355207A1 (en) * 2017-01-31 2018-08-01 Facebook, Inc. K-selection using parallel processing
CN108710626A (zh) * 2018-03-20 2018-10-26 浙江大学 一种基于卫星系图的高维数据的近似最近邻检索方法及检索系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JEFF JOHNSON ET AL: "Billionscale similarity search with GPUs", 《ARXIV》, pages 1 - 12 *
JEFFREY ICHNOWSKI ET AL: "Scalable Multicore Motion Planning Using Lock-Free Concurrency", 《IEEE》, vol. 30, no. 5, pages 1123 - 1136, XP011560307, DOI: 10.1109/TRO.2014.2331091 *
李凯 等: "含释放时间的同类机问题的可变邻域搜索算法", 《系统工程学报》, vol. 25, no. 2, pages 258 - 263 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI822162B (zh) * 2021-12-10 2023-11-11 日商鎧俠股份有限公司 資訊處理裝置以及控制資訊處理裝置的方法
CN115455061A (zh) * 2022-11-14 2022-12-09 广东电网有限责任公司佛山供电局 一种基于异构计算的用户特征快速检索方法

Also Published As

Publication number Publication date
US20210157606A1 (en) 2021-05-27
CN112835627B (zh) 2023-10-03
EP3828736B1 (en) 2022-12-21
EP3828736A1 (en) 2021-06-02

Similar Documents

Publication Publication Date Title
CN112835627B (zh) 用于单指令多线程或单指令多数据类型处理器的近似最近邻域搜索
Zhao et al. Song: Approximate nearest neighbor search on gpu
Sinha et al. corrfunc–a suite of blazing fast correlation functions on the CPU
Hegde et al. Extensor: An accelerator for sparse tensor algebra
Mittal et al. A survey of deep learning on cpus: opportunities and co-optimizations
Groh et al. Ggnn: Graph-based gpu nearest neighbor search
JP6639420B2 (ja) フラッシュ最適化データ・レイアウトのための方法、フラッシュ最適化記憶のための装置、およびコンピュータ・プログラム
Muja et al. Scalable nearest neighbor algorithms for high dimensional data
US8380643B2 (en) Searching multi-dimensional data using a parallelization framework comprising data partitioning and short-cutting via early out
Pan et al. Fast GPU-based locality sensitive hashing for k-nearest neighbor computation
EP4020209A1 (en) Hardware offload circuitry
Lee et al. Application codesign of near-data processing for similarity search
TW201602813A (zh) 用於特徵搜尋之系統,裝置及方法
Gutiérrez et al. GPU-SME-kNN: Scalable and memory efficient kNN and lazy learning using GPUs
Yang et al. Pase: Postgresql ultra-high-dimensional approximate nearest neighbor search extension
Zhang et al. Grip: Multi-store capacity-optimized high-performance nearest neighbor search for vector search engine
Kim et al. Accelerating large-scale graph-based nearest neighbor search on a computational storage platform
Xie et al. MD-HM: memoization-based molecular dynamics simulations on big memory system
Barrientos et al. GPU-based exhaustive algorithms processing kNN queries
Yang et al. FASTHash: F PG A-Ba s ed High T hroughput Parallel Hash Table
Ootomo et al. Cagra: Highly parallel graph construction and approximate nearest neighbor search for gpus
Jakob et al. Optimizing LBVH‐Construction and Hierarchy‐Traversal to accelerate kNN Queries on Point Clouds using the GPU
Chen et al. fgSpMSpV: A fine-grained parallel SpMSpV framework on HPC platforms
Danopoulos et al. Approximate similarity search with faiss framework using fpgas on the cloud
Lee et al. Anna: Specialized architecture for approximate nearest neighbor search

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant