利用英伟达™(NVIDIA®)探索 Elasticsearch 中的 GPU 加速矢量搜索:第一章

这项合作由英伟达™(NVIDIA®)cuVS 提供支持,旨在为开发人员在 Elasticsearch 中进行矢量搜索提供 GPU 加速。

从向量搜索到强大的 REST API,Elasticsearch 为开发人员提供了最全面的搜索工具包。探索 GitHub 上的示例笔记本,尝试新事物。您也可以立即开始免费试用在本地运行 Elasticsearch

我们 Elastic Engineering 组织一直在忙于优化矢量数据库的性能。我们的使命:让 Lucene 和 Elasticsearch 成为最好的矢量数据库。通过硬件加速CPU SIMD 指令,引入新的矢量数据压缩创新技术(更好的二进制量化,又称 BBQ),然后通过更新 BBQ 算法方法以获得更多优势,并使过滤 HNSW 更快,从而超越了预期。我们正在打造一个更快、更好、更高效(呃?)在开发人员解决这些 RAG-gedy 问题时,为他们提供矢量数据库!

作为 "不遗余力地提高效率 "这一使命的一部分,我们正在利用这些奇特的计算机芯片探索加速机会,你可能听说过英伟达™(NVIDIA®)GPU!(说真的,你没听说过吗?)

在执着于性能时,我们有几个问题空间需要探索--如何索引指数级增长的数据,如何从中获取洞察力,以及如何在涉及 ML 模型时做到这一点。有了 GPU,你就能把所有的优势都发挥出来。

在本篇文章中,我们将深入探讨与英伟达™(NVIDIA®)矢量搜索团队的合作,探索 Elasticsearch 中的 GPU 加速矢量搜索。这项工作为开发人员在实际的 Elasticsearch 应用程序中混合使用 GPU 和 CPU 的用例铺平了道路。激动人心的时刻

Elasticsearch GPU

我们很高兴地与大家分享,Elasticsearch 工程团队正在帮助开发人员构建开源的 cuVS Java API 体验,该体验为矢量搜索算法提供了绑定。这项工作利用了我们以前在巴拿马 FFI 方面的经验。Elasticsearch 和 Apache Lucene 在索引过程中使用英伟达 cuVS API 构建图形。好吧,我们跳到前面,让我们倒退一下。

NVIDIA cuVS 是一个开源 C++ 库,是此次合作的核心。它旨在通过提供更高的吞吐量、更低的延迟和更快的索引构建时间,为矢量搜索提供 GPU 加速。但 Elasticsearch 和 Apache Lucene 都是用 Java 编写的,这怎么行呢?

进入lucene-cuvs和 Elastic-NVIDIA-SearchScale 合作,将其引入 Lucene 生态系统,在 Elasticsearch 中探索 GPU 加速的矢量搜索。在最近发布的英伟达 cuVS 25.02 中,我们为 cuVS 添加了 Java API。新的应用程序接口是试验性的,将继续发展,但目前已经可以使用。也许有人会问:Java 对本地函数的调用不是很慢吗?现在不一样了!我们正在使用新的巴拿马 FFI(外来函数接口)进行绑定,它将 Java 与本地向下调用的开销降至最低。

我们 在 Elasticsearch 和 Lucene 中 使用 巴拿马 FFI 已经有一段时间了。太棒了但是......总是有 "但是 "的,不是吗?FFI 在跨 Java 版本的可用性方面存在挑战。我们将 cuVS 应用程序接口编译到 Java 21,并将实现封装在一个针对 Java 22 的多版本 jar 中,从而克服了这一问题。这样就可以直接在 Lucene 和 Elasticsearch 中使用 cuVS Java。

好了,既然我们已经有了 cuVS Java API,还需要什么呢?

两种 CPU 算法的故事

Elasticsearch 支持用于可扩展近似 KNN 搜索的HNSW 算法。不过,为了最大限度地利用 GPU,我们使用了另一种算法 CAGRA [ CUDA ANN GRAph] ,它是专门为 GPU 提供的高并行性而设计的。

在了解如何添加对 CAGRA 的支持之前,我们先来看看 Elasticsearch 和 Lucene 是如何通过 "编解码器格式 "访问索引数据的。这包括

  1. 磁盘表示法、
  2. 读写数据的接口、
  3. 以及处理 Lucene 基于段的架构的机制。

我们正在实施一种新的 KNN(k-近邻)向量格式,该格式内部使用 cuVS Java API 在 GPU 上进行索引和搜索。从这里开始,我们通过 Elasticsearch 的映射将此编解码器类型 "剽窃 "到索引中的字段类型。因此,无论后备索引使用的是 CAGRA 还是 HNSW 图形,现有的 KNN 查询都能继续工作。当然,这忽略了许多细节,我们计划在今后的博客中加以介绍。以下是 GPU 加速 Elasticsearch 的高级架构。

这种新的编解码器格式默认为 CAGRA。不过,它也支持将 CAGRA 图形转换为 HNSW 图形,以便在 CPU 上进行搜索。

在 GPU 上进行索引和搜索:做出一些 "核心 "决定

Elasticsearch Serverless 的无状态架构将索引和搜索分离开来,因此现在有了明确的职责划分。我们选择最佳的硬件配置文件来履行这些独立的职责。

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

  1. 在 GPU 上进行索引和搜索:在索引过程中,建立一个 CAGRA 图,并在搜索过程中使用它--这在需要极低延迟的搜索时非常理想。
  2. 在 GPU 上索引,在 CPU 上搜索:在索引过程中,构建 CAGRA 图并将其转换为 HNSW 图。HNSW 图形存储在索引中,随后可用于 CPU 的搜索。

这种灵活性提供了不同的部署模式,在成本和性能之间进行了权衡。例如,索引服务可以使用 GPU 及时高效地构建和合并图形,同时使用性能较低的 CPU 进行搜索。

以下是在 Elasticsearch 中使用 GPU 加速矢量搜索的计划

我们期待为用户带来性能提升和部署策略的灵活性,提供各种旋钮来平衡成本和性能。下面是 NVIDIA GTC 2025 会议对这项工作的详细介绍。

我们要感谢 NVIDIA 和 SearchScale 工程团队的出色合作。在下一篇博客中,我们将更深入地探讨实施细节和性能分析。戴上好奇帽🎩 !

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用