在 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74019.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 13深度定制:SystemUI狀態欄時間居中顯示終極實戰指南

一、架構設計與技術解析 1. SystemUI狀態欄核心布局機制 層級結構 mermaid 復制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…

ArcGIS10.X影像智能下載!遷移ArcGIS Pro批量智能高清影像下載工具至ArcGIS!

上周我們分享了 我寫的一個ArcGIS Pro版批量下載高清影像(谷歌、天地圖、ESRI等)工具給大家,Deepseek我!寫一個ArcGIS Pro批量下載高清影像(谷歌、天地圖、ESRI等)工具給大家-CSDN博客文章瀏覽閱讀130次。深…

前端面經分享(25/03/19)

北京一家做協同辦公軟件出海的公司,技術一面,20k-40k,要求3-5年 詳細聊了一下上家公司的項目上家公司的項目是不做了嗎,離職原因是什么,你覺得公司的這個產品怎么樣在做AI類的業務時,作為前端感覺跟常規業務…

7 款可視化爬蟲工具全解析:案例示范與操作指南

目錄 1. ParseHub 2.WebHarvy 3.DataMiner 4.Dexi.io 5.ContentGrabber 6.Portia 7.UiPath 文檔聚焦 7 款熱門可視化爬蟲工具,突出簡便的可視化操作,簡單拖拽、設置,無需編程知識,人人皆可上手。 1. ParseHub ParseHub 是一…

使用 `pytest` 框架時,可以通過極限封裝將 YAML 文件的讀取、解析

在使用 pytest 框架時,可以通過極限封裝將 YAML 文件的讀取、解析和測試用例的通用邏輯封裝成共享的方法或 fixture,從而減少重復代碼。以下是詳細的實現步驟和示例。 1. 封裝 YAML 文件讀取和解析 將 YAML 文件的讀取和解析邏輯封裝到一個工具函數中,供所有測試用例調用。…

HarmonyOS next性能優化:多維度策略與實戰案例

HarmonyOS next性能優化:多維度策略與實戰案例 在HarmonyOS next開發中,性能優化是提升用戶體驗、確保應用流暢運行的關鍵。本文將從多個角度探討HarmonyOS next的性能優化策略,并通過示例代碼展示優化前后的效果對比,幫助開發者…

springboot項目,mapper.xml里面,jdbcType報錯 已解決

找了很多資料,最后發現原來是依賴版本不兼容的問題。改了版本號即可 報錯原因: springboot版本為2.16.3 但是我導入的依賴版本是3.0.1,不兼容,報錯 解決:修改版本號,2.3.1兼容springboot2.6.x。依賴下載完…

rust學習筆記16-206.反轉鏈表(遞歸)

rust函數遞歸在14中已經提到,接下來我們把206.反轉鏈表,用遞歸法實現 遞歸函數通常包含兩個主要部分: 基準條件(Base Case):遞歸終止的條件,避免無限遞歸。 遞歸步驟(Recursive Ste…

QT-LINUX-Bluetooth藍牙開發

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的藍牙API不支持linux。 D-Bus的API實現藍牙 確保系統中安裝了 BlueZ(版本需≥5.56),并且 Qt 已正確安裝并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目錄是 D-Bus…

鴻蒙Next開發與未來發展的變革:全場景操作系統的全新紀元

文章目錄 引言:從兼容到自主的跨越式進化一、鴻蒙Next技術架構解析1.1 系統架構全景圖1.1.1 微內核架構優勢 1.2 與OpenHarmony的關系 二、開發范式革命2.1 應用開發模式對比2.1.1 元服務(Meta Service)定義 2.2 開發工具鏈升級(D…

【docker】--- 詳解 WSL2 中的 Ubuntu 和 Docker Desktop 的區別和關系!

在編程的藝術世界里,代碼和靈感需要尋找到最佳的交融點,才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里,我們將共同追尋這種完美結合,為未來的世界留下屬于我們的獨特印記。【WSL 】--- Windows11 遷移 WSL 超詳細指南 —— 給室友換一個宿舍! 開發環境一、引…

利用Python爬蟲獲取Shopee(蝦皮)商品詳情:實戰指南

在跨境電商領域,Shopee(蝦皮)作為東南亞及臺灣地區領先的電商平臺,擁有海量的商品信息。無論是進行市場調研、數據分析,還是尋找熱門商品,獲取Shopee商品詳情都是一項極具價值的任務。然而,手動…

【OCR】總結github上開源 OCR 工具:讓文字識別更簡單

前言 在數字化的時代,光學字符識別(OCR)技術成為了我們處理文檔、圖像文字信息的得力助手。它能夠將圖像中的文字信息轉換為可編輯和可處理的文本數據,極大地提高了信息處理的效率。今天,我要給大家介紹一些優秀的開源…

GenICam標準

GenICam的目標是為所有類型的相機提供一個統一的編程接口。無論相機使用的是哪種傳輸協議或實現了哪些功能,編程接口(API)都是一樣的。 GenICam(Generic Interface for Cameras)是一個為工業相機和圖像采集設備設計的…

Docker學習筆記(十)搭建Docker私有倉庫

一、環境配置 1、宿主機系統:macOS Sequoia(版本15.2) 2、虛擬機VMware Fusion版本:專業版 13.6.2 (24409261) 3、虛擬機系統:AlmaLinux-9-latest-x86_64-boot.iso 二、安裝Harbor開源企業級Docker鏡像 Harbor 是一個開源的企業級 Docker…

關于微信小程序端base64解碼問題

由于atob是瀏覽器端的,對于微信小程序不支持,導致模擬器【開發工具】顯示正常,但真機異常解析失敗問題,微信小程序原有的api,官方文檔中也廢棄了 解決方案: 調用: const decodedString ba…

鴻蒙NEXT項目實戰-百得知識庫03

代碼倉地址,大家記得點個star IbestKnowTeach: 百得知識庫基于鴻蒙NEXT穩定版實現的一款企業級開發項目案例。 本案例涉及到多個鴻蒙相關技術知識點: 1、布局 2、配置文件 3、組件的封裝和使用 4、路由的使用 5、請求響應攔截器的封裝 6、位置服務 7、三…

Adobe PR和AE2025到啟動頁面一會自動退出

Adobe PR和AE2025到啟動頁面一會自動退出 1查找程序啟動錯誤日志2解決方法3思考共勉 1查找程序啟動錯誤日志 查找程序啟動錯誤日志:事件查看器>Windows日志>應用程序 錯誤應用程序名稱: Adobe Premiere Pro.exe,版本: 25.1.0.73,時間…

Python Pyecharts面試題及參考答案

目錄 使用隨機數據繪制對比某品牌各季度銷量與庫存的柱狀圖,添加副標題和自定義顏色 繪制雙 Y 軸柱狀圖,展示城市人均收入和支出數據,并設置軸標簽旋轉 45 度 實現水平柱狀圖,展示不同編程語言的受歡迎指數,添加數據標簽 繪制動態溫度變化折線圖,包含平滑曲線和標記點…

【css酷炫效果】純CSS實現進度條加載動畫

【css酷炫效果】純CSS實現進度條加載動畫 緣創作背景html結構css樣式完整代碼基礎版進階版 效果圖 通過CSS漸變與背景位移動畫,無需JavaScript即可創建流體動態進度條。 想直接拿走的老板,鏈接放在這里:https://download.csdn.net/download/u…