共计 2667 个字符,预计需要花费 7 分钟才能阅读完成。
作者 | 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 利用优化实际
百度工程师浅析解码策略
百度工程师浅析强化学