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

news2025/3/22 22:11:24

作者:来自 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明

JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…

asp.net 4.5在医院自助系统中使用DeepSeek帮助医生分析患者报告

环境: asp.net 4.5Visual Studio 2015本地已经部署deepseek-r1:1.5b 涉及技术 ASP.NET MVC框架用于构建Web应用程序。使用HttpWebRequest和HttpWebResponse进行HTTP请求和响应处理。JSON序列化和反序列化用于构造和解析数据。SSE(服务器发送事件&#xf…

HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代

在人工智能技术飞速演进的时代,数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode,以全球首个全离线数字人生成引擎的颠覆性技术,重新定义人工智能生成内容(AIGC)的…

密码协议与网络安全——引言

三个基本概念 计算机安全(Computer Security):对于一个自动化的信息系统,采取保护措施确保信息系统资源(包括硬件、软件、固件、信息、数据和通信)的保密性、完整性和可用性。 网络安全(Netwo…

springboot实现调用百度ocr实现身份识别+二要素校验

一、技术选型 OCR服务&#xff1a;推荐使用百度AI 二、实现 1.注册一个服务 百度智能云控制台https://console.bce.baidu.com/ai-engine/ocr/overview/index?_1742309417611 填写完之后可以获取到app-id、apiKey、SecretKey这三个后面文件配置会用到 2、导入依赖 <!-- …

MATLAB 控制系统设计与仿真 - 28

MATLAB状态空间控制系统分析 - 极点配置 就受控系统的控制律的设计而言,由状态反馈极点配置和输出反馈极点配置。 状态反馈极点配置问题就是:通过状态反馈矩阵K的选取,使闭环系统的极点,即(A-BK)的特征值恰好处于所希望的一组给定闭环极点的位置。 另外,线性定常系统可…

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…

【深度学习新浪潮】AI ISP技术与手机厂商演进历史

本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法

基于Arm GNU Toolchain编译生成的.elf转hex/bin文件格式方法 已经弃用的版本&#xff08;Version 10.3-2021.10&#xff09;&#xff1a;gcc-arm-none-eabi&#xff1a;https://developer.arm.com/downloads/-/gnu-rmArm GNU Toolchain当前版本&#xff1a;https://developer.a…

音频进阶学习二十——DFT离散傅里叶变换

文章目录 前言一、FT、FS、DTFT、DFS1.FT和FS2.DTFT和DFS 二、DFT定义1.对于DFT的理解1&#xff09;DTFT和DFT2&#xff09;DFS和DFT3&#xff09;有限长序列和周期序列 2.圆周卷积1&#xff09;线性卷积2&#xff09;圆周卷积 三、频率采样和插值恢复1.频率采样的影响2.频率采…

centos 7 部署ftp 基于匿名用户

在 CentOS 7 上搭建基于匿名用户的 FTP 服务&#xff0c;可按以下步骤进行&#xff1a; 1. 安装 vsftpd 服务 vsftpd 是一款常用的 FTP 服务器软件&#xff0c;可使用以下命令进行安装&#xff1a; bash sudo yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash …

Apache SeaTunnel脚本升级及参数调优实战

最近作者针对实时数仓的Apache SeaTunnel同步链路&#xff0c;完成了双引擎架构升级与全链路参数深度调优&#xff0c;希望本文能够给大家有所启发&#xff0c;欢迎批评指正&#xff01; Apache SeaTunnel 版本 &#xff1a;2.3.9 Doris版本&#xff1a;2.0.6 MySQL JDBC Conne…

学习记录-cssjs-综合复习案例(二)

目录 商城复合案例功能实现&#xff08;二&#xff09;商城首页实现步骤1.准备工作2. 搭建html框架3. 编写js代码 完整实例代码完整项目心得 商城复合案例功能实现&#xff08;二&#xff09; 使用html&#xff0c;css&#xff0c;基于bootstrap框架以及媒体查询搭建响应式布局…

图解AUTOSAR_CP_EEPROM_Abstraction

AUTOSAR EEPROM抽象模块详细说明 基于AUTOSAR标准的EEPROM抽象层技术解析 目录 1. 概述 1.1 核心功能1.2 模块地位2. 架构概览 2.1 架构层次2.2 模块交互3. 配置结构 3.1 主要配置容器3.2 关键配置参数4. 状态管理 4.1 基本状态4.2 状态转换5. 接口设计 5.1 主要接口分类5.2 接…

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,不需要任何操作,但是有一些需要知道的东西。具体如下: 1、汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站…

QT 图表(拆线图,栏状图,饼状图 ,动态图表)

效果 折线图 // 创建折线数据系列// 创建折线系列QLineSeries *series new QLineSeries;// series->append(0, 6);// series->append(2, 4);// series->append(3, 8);// 创建图表并添加系列QChart *chart new QChart;chart->addSeries(series);chart->setTit…

基于vue框架的在线影院系统a079l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,电影,电影类别,电影库 开题报告内容 基于Vue框架的在线影院系统开题报告 一、研究背景与意义 随着文化娱乐产业的蓬勃发展&#xff0c;电影院作为人们休闲消遣的重要场所&#xff0c;其管理效率和服务质量直接影响着顾客的观影体…

OpenCV图像拼接(1)概述

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此图说明了在Stitcher类中实现的拼接模块流程。使用该类&#xff0c;可以配置/移除某些步骤&#xff0c;即根据特定需求调整拼接流程。流程中的所…

基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息时代的来临&#xff0c;过去的学科竞赛管理方式的缺点逐渐暴露&#xff0c;本次对过去的学科竞赛管理方式的缺点进行分析&#xff0c;采取计算机方式构建学科竞赛小程序。本文通过阅读相关文献&#xff0c;研究国内外相关技术&#xff0c;提出了一种关于竞赛信息…

[特殊字符][特殊字符][特殊字符][特殊字符][特殊字符][特殊字符]壁紙 流光染墨,碎影入梦

#Cosplay #&#x1f9da;‍♀️Bangni邦尼&#x1f430;. #&#x1f4f7; 穹妹 Set.01 #后期圈小程序 琼枝低垂&#xff0c;霜花浸透夜色&#xff0c;风起时&#xff0c;微光轻拂檐角&#xff0c;洒落一地星辉。远山隐于烟岚&#xff0c;唯余一抹青黛&#xff0c;勾勒出天光水…