当前位置: 首页 > news >正文

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者:来自 Elastic Chris Hegarty 及 Hemant Malik

由 NVIDIA cuVS 提供支持,此次合作旨在为开发者在 Elasticsearch 中的向量搜索提供 GPU 加速。

在 Elastic Engineering 组织内,我们一直致力于优化向量数据库的性能。我们的使命是让 Lucene 和 Elasticsearch 成为最优秀的向量数据库。通过硬件加速的 CPU SIMD 指令、引入新的向量数据压缩创新(Better Binary Quantization,简称 BBQ),以及进一步优化 BBQ 的算法以带来更大收益,同时加速 Filtered HNSW —— 总之,我们正在为开发者构建一个更快、更优、更高效的向量数据库,以帮助他们解决 RAG 相关问题!

在追求极致效率的过程中,我们也在探索这些有趣的计算芯片——NVIDIA GPU!(说真的,你不会没听说过吧?)。

当我们专注于性能优化时,需要解决多个问题:如何索引指数级增长的数据、如何高效检索数据、以及如何在涉及机器学习模型时优化整个流程。有了 GPU,你应该能够充分利用所有可能的优势。

在本文中,我们将深入探讨与 NVIDIA 向量搜索团队的合作,探索在 Elasticsearch 中实现 GPU 加速的向量搜索。这项工作为开发者在实际应用中结合 GPU 和 CPU 运行 Elasticsearch 提供了新的可能性。令人振奋的时代已经到来!

Elasticsearch:你好,GPU!

我们很高兴与大家分享,Elasticsearch 工程团队正在帮助构建开源 cuVS Java API,为开发者提供向量搜索算法的绑定接口。这项工作利用了我们在 Panama FFI 方面的经验。Elasticsearch 和 Apache Lucene 通过 NVIDIA cuVS API 在索引过程中构建图结构。好吧,我们说得有点快了,让我们稍微回顾一下。

NVIDIA cuVS 是一个开源 C++ 库,是此次合作的核心。它旨在通过 GPU 加速向量搜索,提高吞吐量、降低延迟,并加快索引构建时间。但 Elasticsearch 和 Apache Lucene 是用 Java 编写的,这如何实现呢?

这就是 lucene-cuvs 以及 Elastic-NVIDIA-SearchScale 合作的意义所在,我们正在将 GPU 加速的向量搜索引入 Lucene 生态系统,并探索其在 Elasticsearch 中的应用。在最近发布的 NVIDIA cuVS 25.02 版本中,我们新增了 cuVS 的 Java API。该 API 目前仍处于实验阶段,并将持续优化,但已经可供使用。也许你会问:Java 调用本地函数不是很慢吗?现在不再是问题!我们使用了新的 Panama FFI(外部函数接口)来绑定 cuVS,它能使 Java 到本地代码的调用开销降到最低。

我们已经在 Elasticsearch 和 Lucene 中使用 Panama FFI 一段时间了,它真的很棒!但是……总有个 “但是”,对吧?FFI 在不同 Java 版本上的可用性存在一定挑战。为了解决这个问题,我们将 cuVS API 编译到 Java 21,并将实现封装在一个面向 Java 22 的多版本 JAR 包中。这使得 cuVS Java 可以直接用于 Lucene 和 Elasticsearch。

好了,现在我们已经有了 cuVS Java API,接下来还需要什么?

两个算法的故事

Elasticsearch 目前支持 HNSW 算法来实现可扩展的近似 KNN 搜索。然而,为了充分利用 GPU 的性能,我们采用了另一种专为 GPU 高度并行计算设计的算法 —— CAGRA(CUDA ANN GRAph)。

在探讨如何为 CAGRA 添加支持之前,先来看一下 Elasticsearch 和 Lucene 如何通过 “编解码格式”(codec format)访问索引数据。它包括以下部分:

  • 磁盘上的数据表示
  • 读写数据的接口
  • 处理 Lucene 段式架构的机制

我们正在实现一种新的 KNN(k 近邻)向量格式,该格式在内部使用 cuVS Java API 在 GPU 上进行索引和搜索。然后,我们将此编解码类型与 Elasticsearch 的映射机制集成,使其成为索引中的一种字段类型。因此,无论底层索引使用的是 CAGRA 还是 HNSW 图,你的现有 KNN 查询都能继续正常工作。当然,这里省略了许多细节,我们计划在后续博客中详细介绍。以下是 GPU 加速 Elasticsearch 的高层架构图。

这种新的编解码格式默认使用 CAGRA,但同时支持将 CAGRA 图转换为 HNSW 图,以便在 CPU 上进行搜索。

索引与搜索:做出 “核心” 决策

Elasticsearch Serverless 的 stateless 架构下,索引与搜索被明确分离,各自承担独立的职责,使我们能够选择最优的硬件配置来满足不同需求。

我们预计用户会考虑两种主要的部署策略:

  1. 在 GPU 上索引和搜索:在索引过程中构建 CAGRA 图,并在搜索时直接使用它 —— 适用于需要极低延迟搜索的场景。
  2. 在 GPU 上索引,在 CPU 上搜索:在索引过程中构建 CAGRA 图,并将其转换为 HNSW 图。转换后的 HNSW 图存储在索引中,供后续 CPU 搜索使用。

这种灵活性支持不同的部署模式,在成本与性能之间提供平衡。例如,索引服务可以利用 GPU 高效地构建和合并图结构,而搜索服务则可在低功耗 CPU 上运行,以降低成本。

计划如下,Stan!

我们期待通过优化部署策略,为用户带来性能提升和更大的灵活性,并提供多种调节方式,以在成本和性能之间取得最佳平衡。以下是 NVIDIA GTC 2025 会议的相关内容,在会上,我们详细介绍了这一工作。

我们要感谢 NVIDIASearchScale 工程团队的出色合作!在即将发布的博客中,我们将深入探讨实现细节和性能分析。请保持好奇心 🎩!

Elasticsearch 还原生集成了行业领先的 生成式 AI 工具和提供商。欢迎查看我们的网络研讨会,了解如何超越 RAG 基础,或如何使用 Elastic Vector Database 构建生产级应用。

要为你的业务场景打造最佳搜索解决方案,现在就开始 免费云试用 或在本地运行 Elastic 吧!

原文:Exploring GPU-accelerated Vector Search in Elasticsearch with NVIDIA - Elasticsearch Labs

相关文章:

  • Ubuntu20.04安装并配置Pycharm2020.2.5
  • 再学:delegateCall使用及合约升级
  • TypeScript模块 vs JavaScript模块:现代化开发的模块化之道
  • 绿盟科技春招面试
  • 游戏开发全流程及其工具详解
  • 【QA】策略模式在QT有哪些应用
  • JavaScript进阶篇:六、JavaScript 作用域与闭包
  • Linux | 环境变量PATH+编写第一个自己的命令
  • axios和fetch的对比
  • 【在校课堂笔记】Python 第6节课 总结
  • 计算机毕业设计:小型图书管理系统设计与实现
  • Nginx
  • ‌C# I/O 核心用法
  • 【408计算机网络-自顶向下-应用层】-简单描述概念PPT-中国科学技术大学-郑老师-计算机网络课程的深度复习资料
  • PostgreSQL 存储过程
  • manacher 算法详解
  • Vulnhub靶机:Web Machine(N7)
  • 外贸网络专线推荐——SD-WAN灵活且高效!
  • 蓝桥杯练习day3:反转字符串II
  • 从“制造”到“智造”,看中集“灯塔”生产线与永洪“数据技术”的紧密融合
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案
  • 美联储宣布维持基准利率不变
  • AI聊天机器人涉多起骚扰行为,专家呼吁加强伦理设计与监管
  • 解读|降准叠加政策利率、公积金贷款利率、结构性政策工具利率全线下调,影响有多大?
  • 两次蹚入同一条河,巴萨这一晚被命运抛弃
  • 甘怀真:天下是神域,不是全世界