对标 FAISS,百度开源自研高性能检索引擎 Puck
近日,百度宣布在 Apache 2.0 协议下开源自研检索引擎 Puck,这也是国内首个适用于超大规模数据集的开源向量检索引擎。向量检索算法在个性化推荐系统、多模态检索、自然语言处理等应用场景中都发挥着重要作用,特别是在处理大规模数据和高维特征数据时。
名称“Puck”取自经典 MOBA 游戏 DOTA 中的智力英雄 Puck,象征着飘逸和灵动。这个项目经过多年在百度内部的精心打磨,而且在 2021 年底 Nerulps 举办的全球首届向量检索大赛 BIGANN 比赛中,Puck 参与的四个项目均获得第一名。InfoQ 采访了百度搜索内容技术部主任架构师 Ben,以了解该项目的发展历程和核心优势。
开源地址:
https://github.com/baidu/puck
Ben:我从毕业即加入百度,最初在移动搜索部门,负责基础检索和相关性方面工作,经历了移动高速发展的过程。之后作为创始成员协助组建了多模搜索部负责视觉搜索,属于百度最早一批进入 AI 领域的员工。目前在搜索内容技术部,负责内容相关技术,包括内容获取、内容理解、内容计算、内容加工与生成等。
Ben:我们很早就在思考开源,看到 FAISS(由 Facebook AI Research 开发的大规模向量检索库)开源之后获得了广泛的业界关注和应用,我们也希望开源 Puck 后,可以促进社区的发展,并借助社区的力量提高代码质量,加速技术创新,更好的适应市场需求。自研开源市场变得越来越成熟和规范,可能会带来更多的商业模式和合作机会。
对外开源,我们其实筹备了很久,做了大量的准备工作。大模型的爆火,导致向量检索技术获得广泛关注,我们认为,这是一个合适的开源契机。
Ben:Puck 的想法最早来自视觉搜索业务,我们需要一个能支撑数百亿相似图片检索的 ANN 引擎,同时要能支持高吞吐、低延时、高准确、低内存、高灵活性等要求,当时业内没有能满足我们需要的引擎,于是启动了自研的过程。
2017 年 Puck 完成首次上线,在百亿图片库上成本和效果都取得了极其显著的提升;之后随着 Transformer 模型在 nlp 领域的大放异彩,基于 embedding 的语义检索越来越凸现价值,Puck 的应用也越来越广,2019 年 Puck 在百度内部开源,支撑的业务数快速增长,目前已广泛应用于百度搜索、推荐、网盘、知识图谱等内部多条产品线,支持规模突破万亿。目前 ANN 已经成为互联网底层基础技术之一,是 AI 时代的基石,搜索最重要的支撑技术之一。
Ben:到今天 Puck 已经是一个打磨多年的产品,中间的优化数不胜数,大体来说可以分成以下几个阶段:
2016 年到 2019 年,打磨核心算法和实现,重点在基础性能优化上,不断调整细节,在自有场景上做极致优化,Puck 的核心框架在这一时期建立并沿用至今。
2019 年到 2021 年,以公司内开源为标志,随着业务接入的增多,Puck 需要适配各种各样的应用场景和诉求,易用性、扩展性、功能多样性成为主要目标,像高性能的实时插入、多条件检索、分布式建库等等功能都是在这一时期完成。
2021 年到 2022 年,以大规模内容关系计算应用为契机,Puck 重点优化在单实例超大规模数据下的性能,通过大尺度量化和索引结构的优化在十亿规模数据集上大幅提升性能降低成本。以参加全球首届向量检索大赛 BIGANN 并获得四项第一为标志,证明了 Puck 在这部分的竞争优势。
2022 年至今,核心算法创新,提出了新的算法来适配不同数据场景,新增更多的 feature,同时完善配套设施,做外部开源准备。
这只是一个粗略的划分。实际上,Puck 的优化更多地由许多微小的优化点组成。我们在讨论中提出了大量有趣的想法,进行了大量的实验和尝试。总的来说,十个想法中最终只有一到两个能成为正式的功能。这些优化最终汇聚在一起,形成了我们今天看到的 Puck。
Ben:Puck 开源项目包含了两种百度自研的检索算法和一系列的附加功能,核心优势首先就是性能,经过多年的打磨和调优,在 benchmark 的千万、亿、十亿等多个数据集上,Puck 性能优势明显,均显著超过竞品,在 2021 年底 Nerulps 举办的全球首届向量检索大赛 BIGANN 比赛中,Puck 参加的四个项目均获得第一。
其次,易用性上,Puck 提供了一系列的适用于各种场景的功能,比如,同时提供简单易用的 API 接入,尽量少的暴露参数,大部分参数使用默认设置即可达到良好性能。
最后,Puck 是一个久经考验的引擎,经过多年在实际大规模场景下的验证打磨,广泛应用于百度内部包括搜索、推荐等三十余条产品线,支撑万亿级索引数据和海量检索请求,可靠性上有非常高的保障。
Puck 引擎这次开源了两种检索算法 Puck 和 Tinker,分别更适用于超大规模数据集和中小规模数据集,几乎可以覆盖绝大部分的检索应用场景。目前已广泛应用于百度内部搜索、推荐等多条产品线,覆盖数据规模从百万至万亿。
Ben:AI 大模型的出现确实使得业内竞争更加激烈,但这并不是坏事。首先,大模型的发展推动了 AI 技术的进步,提高了 AI 的性能和效率。其次,大模型为业内带来了更多的创新空间和可能性,推动了开源市场的发展。
以后业内在自研开源市场的竞争会更加激烈,但这并不意味着会更卷,相反是带来了无限的可能。因为开源市场的特性是开放和共享,企业和个人可以通过开源市场获取最新的 AI 技术和模型,而无需自己从零开始开发。这有助于整个行业降低研发成本和提高研发效率。
此外,开源市场也是技术交流和创新的平台,业内人士可以在这里分享自己的研究成果,吸收他人的经验和知识,共同推动 AI 技术的发展。所以,虽然竞争会更激烈,但只要我们能适应这种趋势,积极参与交流和创新,就可以从中获益。
Ben:
深度专业化:随着技术的细分,开源项目可能会更加专业化和深度化,解决更具体、更深入的问题,会更多永远专注于某一特定问题的开源项目,Puck 就是其中之一。
多元化:互联网公司自研的开源项目可能会涉及更多的行业和领域,实现技术的跨界整合,形成各种行业解决方案的开源项目,这种跨界融合将有助于推动技术在各行业的广泛应用。
更强的实用性:未来的开源项目可能会更注重实战和应用,而不仅仅是理论研究。开源项目会提供更多实用的工具和框架,帮助开发者更好地将理论应用到实际工作中。
注重数据和算法的开源:随着数据和算法的重要性日益凸显,未来可能会有更多的数据和算法开源,以加速 AI 等领域的发展。
这些变化都将为推动科技发展和解决实际问题提供更强大的动力。
Ben:大家熟悉的百度搜索和手机百度内的信息流推荐都有使用 Puck 技术。
Ben:自从 Puck 开源以来,我们已经收到了不少来自社区的反馈和建议。这些反馈和建议对我们来说是非常宝贵的,它们不仅帮助我们发现了 Puck 的一些问题和不足,也为我们提供了改进和优化的方向。
对我个人来说,这些反馈启发我认识到,虽然我们在内部使用 Puck 有着丰富的经验,但在面对更广泛的用户群体时,我们还需要不断学习和提高。每个用户的需求都可能不同,我们需要更加深入地理解用户的需求,才能更好地优化 Puck,使其更加适应不同的使用场景。
同时,这些反馈也让我深切地感受到了开源社区的活力和创新精神。许多社区成员不仅提出了问题,还积极地提供了解决方案,这种积极参与和贡献的精神让我深感鼓舞。我希望在未来,我们能够更紧密地与社区合作,共同推动 Puck 的发展。
Ben:Puck 是团队长时间研究和努力的成果,作为 Puck 的负责人,我对这个项目有着深深的热爱和执着,对我个人来说,它不仅仅是一个检索引擎,而是代表团队付出的心血和智慧的结晶,它是我们对技术的追求,对创新的执着,也是我们对未来的期待和憧憬,Puck 的每一次升级和优化都记录着我们的成长和进步。
对于 Puck 的未来,我有着很高的期待。首先,我希望 Puck 能在开发者社区中得到广泛的使用,同时也能得到社区的反馈,不断优化和改进。我期待看到更多的人参与到 Puck 的开发和使用中来,通过大家的共同努力,让 Puck 成为 AI 领域有影响力的一款工具。其次,我希望 Puck 能够持续创新,不断优化,保持其技术领先地位,不仅能适应现有的技术需求,还能预见并引领未来的技术趋势。最后,我希望 Puck 能在更多实际应用中发挥出它的价值,为人工智能在各个行业的应用提供强大支撑,推动科技的发展。
Ben,百度搜索内容技术部主任架构师,负责多模态内容理解、超大规模内容关系计算、内容加工与生成、模型优化等方向。
微信扫码关注该文公众号作者