作者 | Puck项目组

导读 

Puck是百度自研的开源ANN检索引擎。Puck开源我的项目蕴含两种百度自研的检索算法,以高召回、高精确、高吞吐为指标,实用于多种数据规模和场景。随着业务倒退一直的优化和迭代,进行充沛的技术开发和测试,确保了技术的可靠性和成熟度。该我的项目于2019年厂内开源,广泛应用于外部多条产品线,撑持万亿级数据和海量申请。在benchmark上显示,Puck在千万、亿、十亿等多个数据集上,性能劣势显著。

全文2682字,预计浏览工夫7分钟。

ANN全称近似最近邻检索(Approximate Nearest Neighbor),指标是从全量向量数据中寻找间隔最近的TopK个向量,同时须要均衡检索成果和检索老本。自2012年AlexNet呈现之后,深度学习在图像畛域大放异彩,2017年 transformer的推出重构了NLP畛域,基于语义的检索颠覆了传统检索畛域,使得ANN技术广泛应用于搜寻、举荐等多个场景,成为互联网的根底技术之一。

做为钻研热点,无论学术界还是工业界,近些年都呈现了许多ANN算法的翻新钻研和利用,包含基于分区和基于图形的索引策略、混合RAM和SSD存储以高效存储和解决超过RAM大小的大型数据集、应用加速器硬件、利用机器学习来升高原始矢量的维度,以及Spotify的ANNOY、Google的ScaNN、Facebook的Faiss和HNSW等。

01 Puck 是什么?

Puck是百度自研的高性能ANN检索引擎,名称取自经典MOBA游戏DOTA中的智力英雄-Puck,是飘逸、灵动的代表。

咱们很早即投入自研近似最近邻检索算法(ANN)的钻研,2017年Puck实现首次上线,2019年底外部开源,目前已广泛应用于百度外部多条产品线,随着业务倒退一直的优化和迭代,进行了充沛的技术研发和测试,确保了技术的当先性和成熟度。

Puck开源我的项目蕴含两种百度自研的检索算法Puck&Tinker,以高召回、高精确、高吞吐为指标,在大中小数据集上都有优异体现。在benchmark的千万、亿、十亿等多个数据集上,Puck性能劣势显著,均显著超过竞品。在2021年底Nerulps举办的寰球首届向量检索大赛BIGANN较量中,Puck加入的四个我的项目均取得第一。

02 Puck 劣势有哪些?

1、易用性:提供简略易用的API接入,尽量少的裸露参数,大部分参数应用默认即可达到良好性能。

2、扩展性:采纳齐全自研的索引构造,反对多种性能扩大,适应多种场景,我的项目模块划分正当,便于革新优化,可不便用户接口自行添加。

3、高性能:在benchmark的千万、亿、十亿等多个数据集上,Puck性能劣势显著,均显著超过竞品。

4、可靠性:通过多年在理论大规模场景下的验证打磨,广泛应用于百度外部包含搜寻、举荐等三十余条产品线,撑持万亿级索引数据和海量检索申请。

03 Puck 性能劣势

Puck 在开源前,曾加入过首届国内向量检索大赛BigANN。首届国内向量检索大赛BigANN是由人工智能畛域寰球顶级学术会议NeurIPS发动,由微软、facebook等公司协办的寰球最高程度的赛事,旨在晋升大规模ANN的钻研翻新和生产环境中的落地利用。

虽是首届大赛,但因NeurIPS的极高知名度和权威性,吸引了泛滥知名企业和顶尖大学的同台竞技。本届较量已于2021年12月NeurlPS’21会议期间颁布后果,Puck在参赛的四个数据集中均排名第一 。

除此之外,Puck继续地优化和迭代,以放弃其在变动的业务环境中提供高效的检索性能。除了十亿数据集以外,咱们构建了亿级&千万级benchmark,创立了更合乎实在工业生产环境的benchmark机制和环境,Puck&Tinker在多个数据集上性能劣势显著。

BIGANN-10M

△deep-10M和BIGANN-10M数据集上,召回率 VS QPS的性能图

更具体benchmark见:

https://github.com/baidu/puck/tree/main/ann-benchmarks

04 Puck 性能拓展

为了让 Puck 更加亲民,咱们还做了多个性能的拓展,目前能够实现:

1、实时插入:反对无锁构造的实时插入,做到数据的实时更新。

2、条件查问:反对检索过程中的条件查问,从底层索引检索过程中就过滤掉不符合要求的后果,解决多路召回归并常常遇到的截断问题,更好满足组合检索的要求。

3、分布式建库:索引的构建过程反对分布式扩大,全量索引能够通过map-reduce一起建库,无需按分片build,大大放慢和简化建库流程。

4、自适应参数:ANN办法检索参数泛滥,利用起来有不小门槛,不理解技术细节的用户并不容易找到最优参数,Puck提供参数自适应性能,在大部分状况下应用默认参数即可失去很好成果 。

05 Puck 在业务中的应用

在开源前,Puck在多个业务中曾经进行了大规模的无效验证。

Puck于2017年初启动研发,2017年底首次上线,2019年百度外部开源,继续打磨至今,目前广泛应用于百度外部包含搜寻、举荐等三十余条产品线,撑持万亿级索引数据和海量检索申请。

△ANN检索在业务利用中的地位

Puck 开源后, 激励开发者之间的单干和共享,同时反对大家进行常识的分享和流传,打造沉闷而宽泛的生态,促成我的项目的高速、可继续倒退,从而推动技术的翻新。

Puck遵循 Apache 2.0 开源协定,尊重和爱护原作者的创作权,凋谢应用包含商业化及二次开源。

心愿大家将好的应用教训反馈给咱们,如有问题能够退出【QQ群:913964818】随时征询。

同时,欢送大家成为社区贡献者,积极参与开源奉献,解决本身诉求、晋升个人成长的同时失去正向激励。

在你因为参加开源而失去回报的时候,你也在影响着开源畛域的倒退,促成开源畛域向更加广大的方向奔涌而去。

BigANN较量详情:

https://big-ann-benchmarks.com/neurips21.html

BigANN比赛结果:

https://github.com/harsha-simhadri/big-ann-benchmarks/blob/main/neurips21/t1_t2/README.md#results-for-t1

Puck开源地址:

https://github.com/baidu/puck

——END——

举荐浏览

存储计划作为产品——Midgard摸索

百度垂类离线计算零碎倒退历程

度加剪辑App的MMKV利用优化实际

百度工程师浅析解码策略

百度工程师浅析强化学