写点什么

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

作者:百度Geek说
  • 2023-09-05
    上海
  • 本文字数:2281 字

    阅读完需:约 7 分钟

百度自研高性能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应用优化实践


百度工程师浅析解码策略


百度工程师浅析强化学

发布于: 2023-09-05阅读数: 3
用户头像

百度Geek说

关注

百度官方技术账号 2021-01-22 加入

关注我们,带你了解更多百度技术干货。

评论

发布
暂无评论
百度自研高性能ANN检索引擎,开源了_开源_百度Geek说_InfoQ写作社区