• 百度自研高性能ANN检索引擎,开源了


    在这里插入图片描述

    作者 | 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应用优化实践

    百度工程师浅析解码策略

    百度工程师浅析强化学

  • 相关阅读:
    大模型时代,如何找准AI发展新方向?TVP读书会与你共探
    11 个需要避免的 React 错误用法
    【教学类-11】20221103《扑克牌》(大班个别化活动-益智区》)
    【Android笔记41】使用Android实现一个简易版本的购物车小案例
    Python 内置函数详解 (4) 类型转换
    两表查询常用SQL
    数据结构:排序算法
    实战分析Java的异步编程,并通过CompletableFuture进行高效调优
    SAP CRM Fiori 应用的 Deep Create 行为和实现分析
    六个讨厌 Tailwind CSS 的理由
  • 原文地址:https://blog.csdn.net/lihui49/article/details/132686660