一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何搭建高效推薦系統(tǒng)?用Milvus和NVIDIA Merlin搭建高效推薦系統(tǒng)

NVIDIA英偉達(dá) ? 來源:NVIDIA英偉達(dá) ? 作者:NVIDIA英偉達(dá) ? 2023-11-01 09:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如何搭建一個高效的推薦系統(tǒng)?

簡單來說,現(xiàn)代推薦系統(tǒng)由訓(xùn)練/推斷流水線(pipeline)組成,涉及數(shù)據(jù)獲取、數(shù)據(jù)預(yù)處理、模型訓(xùn)練和調(diào)整檢索、過濾、排名和評分相關(guān)的超參數(shù)等多個階段。走遍這些流程之后,推薦系統(tǒng)能夠給出高度個性化的推薦結(jié)果,從而提升產(chǎn)品的用戶體驗。

為了方便大家對此進(jìn)行深入了解,我們邀請到 NVIDIA Merlin團(tuán)隊,他們將詳細(xì)介紹推薦系統(tǒng)的上述多個階段的工作流程,以及推薦系統(tǒng)在電商、流媒體、社交媒體等多個行業(yè)領(lǐng)域的實踐和用例。

NVIDIA Merlin & Milvus

推薦系統(tǒng) pipeline 中至關(guān)重要的一環(huán)便是為用戶檢索并找到最相關(guān)的商品。為了實現(xiàn)這一目標(biāo),通常會使用低維向量(embedding)表示商品,使用數(shù)據(jù)庫存儲及索引數(shù)據(jù),最終對數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行近似最近鄰(ANN)搜索。這些向量表示是通過深度學(xué)習(xí)模型獲取的,而這些深度學(xué)習(xí)模型基于用戶和產(chǎn)品或服務(wù)之間的交互進(jìn)行訓(xùn)練。使用計算機視覺算法或語言模型,還可以從各種數(shù)據(jù)模態(tài)(例如圖像、視頻或產(chǎn)品與用戶的文本描述)中生成向量表示。獲取向量表示后便迎來關(guān)鍵步驟——對數(shù)十萬甚至數(shù)百萬/數(shù)十億的向量嵌入數(shù)據(jù)集(例如電商庫存產(chǎn)品 embedding)進(jìn)行高效的 top-k(即 k 個最相似)搜索。

NVIDIA Merlin 是一個開源框架,用于訓(xùn)練端到端模型,從而為各類規(guī)模的數(shù)據(jù)生成推薦,輕松集成高效的向量數(shù)據(jù)庫索引和搜索框架。而 Milvus 作為大模型時代備受關(guān)注的向量數(shù)據(jù)庫可以提供高效索引和查詢功能。

最近,Milvus 新增支持 NVIDIA GPU加速,可提升查詢的并發(fā)和速度,這對于現(xiàn)代推薦系統(tǒng)十分有用。截至 2023 年 10月,Milvus 獲得了 599 萬次 docker pull 及 2.3 萬顆 GitHub Star,被業(yè)界廣泛應(yīng)用。

接下來,我們將演示 Milvus 是如何與 Merlin RecSys 框架集成、Milvus 如何在項目檢索階段與高效的 top-k 向量搜索技術(shù)相結(jié)合,以及如何在推斷時使用 NVIDIA Triton Inference Server (TIS)。根據(jù) NVIDIA 性能測試結(jié)果顯示:使用 Merlin 模型生成向量并使用 GPU 加速版的 Milvus 可以將搜索速度提升 37 至 91 倍。我們使用的 Merlin-Milvus 集成代碼和詳細(xì)性能測試結(jié)果均可在 https://github.com/bbozkaya/merlin-milvus/tree/main 處獲取。

wKgZomVBq0eAIs15AAE-CJrkfAw565.jpg

圖 1. Milvus 框架為多階段推薦系統(tǒng)的

檢索階段做出貢獻(xiàn)

挑戰(zhàn)

由于推薦系統(tǒng)具備多階段的性質(zhì)以及各種組件和庫的可用性問題,其主要挑戰(zhàn)就是在端到端流程中無縫集成所有組件,因此我們的目標(biāo)是在示例 notebook 中盡可能簡化集成工作。

另一個挑戰(zhàn)是加速整個推薦流程。雖然加速在訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)中扮演著重要的角色,但 GPU 是在近期才被添加到向量數(shù)據(jù)庫和 ANN 搜索領(lǐng)域中的。隨著電商庫存產(chǎn)品、流媒體等數(shù)據(jù)規(guī)模爆炸式增長和用戶數(shù)量的井噴,CPU 從性能上而言已經(jīng)無法滿足服務(wù)數(shù)百萬用戶的推薦系統(tǒng)的需求。為了解決這個挑戰(zhàn),需要在流程的其他部分進(jìn)行 GPU 加速。本文提出的解決方案展示了 ANN 搜索時使用 GPU 加速可以有效解決這一問題。

技術(shù)棧

正式開始前,先介紹一下即將用到的技術(shù)棧。

首先需要一個推薦系統(tǒng)框架作為基礎(chǔ),本例中我們使用 NVIDIA Merlin,因為這個開源庫提供在 NVIDIA GPU 上加速推薦系統(tǒng)的高級 API (high-level API)。Merlin 可以助力數(shù)據(jù)科學(xué)家、機器學(xué)習(xí)工程師和研究人員構(gòu)建高性能推薦系統(tǒng)。除了 Merlin 以外,本例中還使用了以下開源工具/庫:

  • NVTabular:用于預(yù)處理輸入表格數(shù)據(jù)和特征工程。

  • Merlin Models:用于訓(xùn)練深度學(xué)習(xí)模型,從用戶交互數(shù)據(jù)中學(xué)習(xí)獲取用戶和商品向量。

  • Merlin Systems:用于集成基于 TensorFlow 的推薦模型與其他組件(例如特征存儲、Milvus 的 ANN 搜索功能),以便在 TIS 中提供服務(wù)。

  • Triton Inference Server:用于在推斷階段傳遞用戶特征向量并生成產(chǎn)品推薦。

  • 容器化:上述所有內(nèi)容都可以在 NVIDIA 提供的 NGC 目錄中獲取。本例使用 Merlin TensorFlow 23.06 容器。

  • Milvus 2.3:用于啟用 GPU 加速的向量索引和查詢。

  • Milvus 2.2.11:與上述相同,但在 CPU 上執(zhí)行向量索引和查詢。

  • pymilvus SDK:用于連接 Milvus 服務(wù)器、創(chuàng)建向量數(shù)據(jù)庫索引并通過 Python 接口運行查詢命令。

  • Feast:用作端到端 RecSys 流程中保存和檢索用戶、商品向量的(開源)特征存儲。

此外,我們還用到了許多底層庫和框架。例如,Merlin 依賴于 cuDF 和 Dask 等其他 NVIDIA 庫,這兩個庫均可在 RAPIDS cuDF 中獲取。同樣,Milvus 依賴于 NVIDIA RAFT 實現(xiàn) GPU 加速,HNSW 和 FAISS 等庫進(jìn)行搜索。

了解向量數(shù)據(jù)庫

ANN 搜索是關(guān)系型數(shù)據(jù)庫無法提供的功能。關(guān)系型數(shù)據(jù)庫只能用于處理具有預(yù)定義結(jié)構(gòu)、可直接比較值的表格型數(shù)據(jù)。因此,關(guān)系數(shù)據(jù)庫索引也是基于這一點來比較數(shù)據(jù)。但是 Embedding 向量無法通過這種方式直接相互比較。因為我們不知道向量中的每個值代表什么意思,無法使用關(guān)系型數(shù)據(jù)庫來確定一個向量是否一定小于另一個向量,唯一能做的就是計算兩個向量之間的距離。

如果兩個向量之間的距離很小,可以假設(shè)它們所代表的特征相似;如果距離很大,可以假設(shè)它們代表的數(shù)據(jù)十分不同。對我們而言,向量距離及其含義是有用的。我們可以創(chuàng)建索引結(jié)構(gòu),高效搜索這些數(shù)據(jù)。但是為向量數(shù)據(jù)構(gòu)建索引也有不小挑戰(zhàn):計算兩個向量間距離成本高昂,而且向量索引一旦構(gòu)建完成后,不易于修改。因此,我們無法直接使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫來處理向量數(shù)據(jù),需要使用專為向量數(shù)據(jù)而打造的向量數(shù)據(jù)庫。

Milvus 是一款專為向量數(shù)據(jù)處理而設(shè)計的向量數(shù)據(jù)庫,可以解決傳統(tǒng)關(guān)系型數(shù)據(jù)庫無法處理向量的問題,為海量向量數(shù)據(jù)高效構(gòu)建索引。為了滿足云原生的要求,Milvus 將計算和存儲以及不同的計算任務(wù)(查詢、數(shù)據(jù)處理和索引)分離開來。用戶可以根據(jù)不同的應(yīng)用靈活擴展每個組件。無論是數(shù)據(jù)插入密集型應(yīng)用還是搜索密集型應(yīng)用,Milvus 都能夠輕松應(yīng)對。如果有大量插入請求涌入,用戶可以臨時水平和垂直擴展索引節(jié)點以處理數(shù)據(jù)。同樣,如果沒有大量插入數(shù)據(jù),但有大量搜索操作,用戶可以減少索引節(jié)點的數(shù)量,并提高查詢節(jié)點的吞吐量。Milvus 的系統(tǒng)架構(gòu)設(shè)計(見圖 2)采用并行計算的思維方式,助力我們進(jìn)一步優(yōu)化本例中的推薦系統(tǒng)應(yīng)用。

wKgZomVBq0eANB9YAADyOckTW6I941.jpg

圖 2. Milvus 框架設(shè)計

此外,Milvus 還整合了許多最先進(jìn)的索引庫,以便為用戶提供盡可能多的系統(tǒng)自定義功能。稍后,我們將討論這些索引的區(qū)別以及各自的優(yōu)缺點。

向量數(shù)據(jù)索引

大多數(shù)向量索引可以分成兩種類型——聚類和圖形。IVF 是聚類類別中的一種算法,它使用 k-means 來計算最近鄰的聚類。然后,將查詢向量與最近的質(zhì)心聚類進(jìn)行比較,并在搜索時進(jìn)行搜索。HNSW、DiskANN 和圖形類別中的其他算法主要圍繞著導(dǎo)航擴展圖進(jìn)行搜索,這些圖形在 ANN 搜索時效率更高。但是圖形算法往往也更加復(fù)雜。如果大家對此感興趣,可以閱讀:https://zilliz.com/learn/hierarchical-navigable-small-worlds-HNSW

除了上述這些算法,還有一類叫做乘積量化 (PQ) 的算法。PQ 是一種將向量數(shù)據(jù)壓縮以減少資源使用并提高性能的方法,但其代價是降低召回率/準(zhǔn)確性。該領(lǐng)域中的大多數(shù)算法都是量化的變體,以允許降低內(nèi)存使用或提高其方法的性能。

所有這些算法和組合之間的區(qū)別是什么?為什么有這么多算法呢?它們之間的區(qū)別在于性能、召回率和內(nèi)存使用之間的權(quán)衡。例如,IVF_FLAT 索引是一個平衡了上述 3 個方面的索引,可以在不過多增加內(nèi)存開銷的情況下以較快的速度獲得良好的結(jié)果。基于壓縮的索引,如 IVF_SQ8 和 IVF_PQ,在速度和減少內(nèi)存使用方面更強大,但根據(jù)所使用的壓縮級別,會降低召回率。HNSW 則以性能和召回率為目標(biāo),但代價是內(nèi)存消耗。與其他索引相比,DiskANN 是最獨特的,因為它是一種基于磁盤的索引。前面的索引都完全存儲在內(nèi)存中,需要大量的 RAM。DiskANN 只在內(nèi)存中保存少量索引數(shù)據(jù),并將大部分?jǐn)?shù)據(jù)保存在磁盤存儲器中,這樣可以大大減少內(nèi)存使用量,同時仍然保持較高的召回率。但是,使用 DiskANN 會降低吞吐性能,并且根據(jù)所使用的 SSD 類型,會影響延遲性能。

如今,并非只有大型用戶/公司才能訪問非常大的數(shù)據(jù)集,小型用戶可能會從其數(shù)據(jù)中生成數(shù)十億個向量,并需要以最經(jīng)濟(jì)的方式進(jìn)行搜索。相比之下,大型用戶可能只有幾十萬個數(shù)據(jù),每秒需要處理數(shù)萬個查詢。為了解決這些問題,索引層面提供很多定制化的參數(shù)來支持不同的用例。更多詳情,請訪問 https://milvus.io/docs/index.md 查看。

GPU vs CPU

對于大多數(shù)用戶來說,GPU 索引是獲得所需性能的關(guān)鍵。GPU 索引提供了許多用例所需的高吞吐量,同時從長期而言可以節(jié)省成本。

構(gòu)建和搜索索引主要依賴向量化計算,可以在 CPU 上完成,但使用 GPU 效率大大提升。Milvus 將搜索計算遷移到 GPU 后,查詢每秒 (QPS) 的性能提高了 37 至 91 倍,性能提升非常顯著。想要獲得如此大的性能提升的唯一其他途徑就是擴展集群規(guī)模。但是這種方式開銷較大。通過使用 GPU,用戶可以在提升性能的同時簡化集群,減少額外節(jié)點和調(diào)度開銷。

然而,基于 GPU 的搜索有一個限制,那就是低并發(fā)情況。當(dāng)并發(fā)較高且在 CPU 和 GPU 內(nèi)存之間傳輸數(shù)據(jù)的減速小于搜索時間的總節(jié)省時,GPU 的性能比 CPU 好得多。在低并發(fā)情況下,GPU 的延遲較大,因為 CPU 可以比將數(shù)據(jù)傳輸?shù)?GPU 再從 GPU 傳回的時間內(nèi)更快地完成搜索。

示例

我們提供的示例演示了在商品檢索階段如何集成 Milvus 與 Merlin,其中用到了來自 RecSys Challenge 2015 的真實數(shù)據(jù)集進(jìn)行訓(xùn)練。同時,我們也訓(xùn)練了一個雙塔深度學(xué)習(xí)模型,用于學(xué)習(xí)用戶和商品向量。在本章節(jié)的最后,我們還會提供一些性能測試相關(guān)的信息,包括在性能測試過程中觀察的指標(biāo)和使用的參數(shù)范圍。

數(shù)據(jù)集

在集成和性能測試時,我們使用了由 YOOCHOOSE GmbH 在 RecSys Challenge 2015 中提供的數(shù)據(jù)集,可在 Kaggle 上下載。這個數(shù)據(jù)集中包含了歐洲在線零售商提供的用戶點擊/購買事件,其中包括與點擊/購買相關(guān)的會話 ID、時間戳、商品 ID 和商品類別等信息。這些內(nèi)容均可在文件 yoochoose-clicks.dat 中獲取。各個會話都是獨立的,不考慮回購用戶的情況。因此我們將每個會話視為屬于不同用戶的會話。該數(shù)據(jù)集包含 9,249,729 個會話(用戶)和 52,739 個商品。

工作流程主要包括:a) 數(shù)據(jù)獲取和預(yù)處理。b) 搭建雙塔深度學(xué)習(xí)模型,訓(xùn)練數(shù)據(jù)。c) 在 Milvus 向量數(shù)據(jù)庫中創(chuàng)建索引。d) 在 Milvus 向量數(shù)據(jù)庫中進(jìn)行向量相似性搜索。接下來,我們會簡要描述每個步驟,如果大家對每個步驟的詳情感興趣,請參考:https://github.com/bbozkaya/merlin-milvus/tree/main/notebooks

數(shù)據(jù)獲取和預(yù)處理

用 NVTabular 對數(shù)據(jù)進(jìn)行預(yù)處理。這個工具利用了 Merlin 的 GPU 加速能力,是高度可擴展的特征提取和預(yù)處理組件,能夠幫助我們輕松處理 T 太字節(jié)級別的數(shù)據(jù)集、搭建訓(xùn)練基于深度學(xué)習(xí)的推薦系統(tǒng)。

NVTabular 經(jīng)過抽象,提供一套簡化的代碼,使用 RAPIDS 的 Dask-cuDF 庫在 GPU 上實現(xiàn)加速計算。用 NVTabular 將數(shù)據(jù)讀入 GPU 內(nèi)存,并按需重新排列特征,最終導(dǎo)出為 Parquet 文件。最終得到了 7,305,761 個用戶向量和 49,008 個商品向量以供后續(xù)訓(xùn)練使用。在預(yù)處理時,我們還會將每列數(shù)據(jù)和值進(jìn)行分類,轉(zhuǎn)換為整數(shù)值。

模型訓(xùn)練

用 Two-Tower 深度學(xué)習(xí)模型來生成用戶和商品向量,隨后為這些向量創(chuàng)建索引并查詢向量。我們將用戶屬性(user_id, user_age)和商品屬性(item_id, item_category)輸入到 Two-Tower 模型中。這個過程中,可以選擇是否要包含一個目標(biāo)列,只包括具有正交互作用的行。模型訓(xùn)練完成后,提取學(xué)習(xí)到的用戶和商品嵌入向量。

接下來是兩個可選步驟:

1. 使用 DLRM 模型對檢索到的商品進(jìn)行排序。

2. 使用特征存儲(在本例中為 Feast)存儲和檢索用戶和商品特征。在本示例中,加入了這兩個步驟從而更為完整地展示推薦系統(tǒng)的多階段工作流程。

最后,將用戶和商品向量導(dǎo)出為 parquet 文件,稍后可以重新加載并為其在 Milvus 中創(chuàng)建向量索引。現(xiàn)在,可以啟動 Milvus 服務(wù)器并上傳商品向量、創(chuàng)建向量索引。然后,在推理時使用 NVIDIA TIS 和自定義的 Merlin 系統(tǒng) Operator 對現(xiàn)有用戶和新用戶進(jìn)行相似性搜索查詢。請參見 notebook 中的第二個示例。

構(gòu)建和查詢 Milvus 索引

Milvus 通過在推理機上啟動一個“服務(wù)器”來實現(xiàn)向量索引和相似度搜索。在 notebook 2 中,我們通過 pip 安裝了 milvus 服務(wù)器和 pymilvus,然后使用默認(rèn)的監(jiān)聽端口啟動了服務(wù)器。接下來,我們將演示如何使用兩個函數(shù) setup_milvus 和 query_milvus 來構(gòu)建一個簡單的索引(IVF_FLAT)并對其進(jìn)行查詢。

當(dāng)我們將相同任務(wù)作為 TIS 框架中的多階段推理的一部分完成時,事情變得更有趣了。Merlin 提供了一個高級 API,Merlin Systems,允許將推薦系統(tǒng)的不同階段組合成一個單獨的鏈?zhǔn)健凹赡P汀薄R虼?,上述所有階段都在對 TIS 發(fā)送的單個請求中執(zhí)行。在這里,我們實現(xiàn)了一個自定義的 Merlin Systems 操作符作為集成的一部分,名為 QueryMilvus。

細(xì)心的朋友可能已經(jīng)注意到,pymilvus 庫沒有使用 GPU 加速,而 NVTabular 和 Merlin Models 卻使用了 GPU。這是因為 Milvus 的 GPU 加速版本需要啟動多個容器,而我們使用的 Merlin 容器不支持這樣做。相反,通過 pymilvus,在 notebook 所在的同一個容器中將 Milvus 服務(wù)器作為一個進(jìn)程啟動。要在 GPU 上運行 Milvus,可以參考最新的 Milvus 發(fā)版說明:https://github.com/milvus-io/milvus/releases/tag/v2.3.1

下面性能測試是在 GPU 上完成的,使用的是 Milvus 最新版。

基準(zhǔn)測試

為了證明使用快速高效的向量索引/搜索庫(如 Milvus)的必要性,我們設(shè)計了兩組性能測試。

1. 使用 Milvus 構(gòu)建向量索引,我們生成了兩組向量:1)針對 730 萬個用戶向量,按照 85% 的訓(xùn)練集(用于索引)和 15% 的測試集(用于查詢)進(jìn)行劃分;2)針對 4.9 萬個商品向量,按照 50% 的訓(xùn)練集(用于索引)和 50% 的測試集(用于查詢)進(jìn)行劃分。性能測試針對每個向量數(shù)據(jù)集獨立進(jìn)行,生成獨立的結(jié)果。

2. 使用 Milvus 構(gòu)建一個針對 4.9 萬個商品向量數(shù)據(jù)集的索引,并基于該索引使用 730 萬個用戶向量進(jìn)行相似性搜索。

在性能測試中,我們使用了 GPU 和 CPU 版的 IVF_PQ 和 HNSW 索引算法,并嘗試了各種參數(shù)組合。詳細(xì)信息請參見:https://github.com/bbozkaya/merlin-milvus/tree/main/results

在生產(chǎn)環(huán)境中,一個重要的性能考量指標(biāo)是搜索質(zhì)量吞吐量之間的平衡(tradeoff)。Milvus 允許完全控制索引參數(shù),以探索這個 tradeoff,以達(dá)到與基準(zhǔn)結(jié)果相關(guān)的更好搜索結(jié)果。這可能意味著減少吞吐率或每秒查詢數(shù)(QPS),增加計算成本。我們使用召回率指標(biāo)來衡量 ANN 搜索的質(zhì)量,并提供了 QPS -召回率曲線來展示 tradeoff。然后,您可以根據(jù)計算資源、延遲/吞吐量需求來決定可接受的搜索質(zhì)量水平。

還請注意我們基準(zhǔn)測試中使用的查詢批處理大?。╪q)。這在工作流中非常有用,其中會同時向推理發(fā)送多個請求(例如,將離線推薦請求發(fā)送給一系列電子郵件收件人,或者通過匯集并同時處理到達(dá)的并發(fā)請求生成在線推薦)。根據(jù)具體情況,TIS 還可以幫助以批處理方式處理這些請求。

結(jié)果

以下展示基于 CPU 和 GPU 的 3 組性能測試結(jié)果。該測試使用了 Milvus 的 HNSW(僅 CPU)和 IVF_PQ(CPU 和 GPU)索引類型。

商品向量間相似度搜索

對于給定的參數(shù)組合,將 50% 的商品向量作為查詢向量,并從剩余的向量中查詢出 top-100 個相似向量。我們發(fā)現(xiàn),在測試的參數(shù)設(shè)置范圍內(nèi),HNSW 和 IVF_PQ 的召回率很高,分別在 0.958 - 1.0 和 0.665 - 0.997 之間。這表明 HNSW 在召回率方面表現(xiàn)更好,但是 IVF_PQ 在 nlist 較小的情況下也能得到非常高的召回率。此外,召回率的值隨著索引和查詢參數(shù)的變化也會發(fā)生很大的變化。報告結(jié)果是在對一般參數(shù)范圍進(jìn)行初步實驗并進(jìn)一步深入選擇子集之后獲得的。

在給定參數(shù)組合下,使用 HNSW 在 CPU 上執(zhí)行所有查詢的總時間范圍在 5.22 到 5.33 秒之間(在 ef 不變的情況下,隨著 m 的增大而更快),而使用 IVF_PQ 在 13.67 到 14.67 秒之間(隨著 nlist 和 nprobe 的增大而變慢)。如圖 3 所示,GPU 加速確實效果更明顯。

圖 3 顯示了在 CPU 和 GPU 上,使用 IVF_PQ 和這個小數(shù)據(jù)集時召回率和吞吐量之間的 tradeoff。我們發(fā)現(xiàn),GPU 在所有測試的參數(shù)組合下都實現(xiàn)了 4 到 15 倍的加速(隨著 nprobe 的增大而加速更明顯)。這個結(jié)果是比較每個參數(shù)組合下 GPU 的每秒查詢數(shù)與 CPU 的每秒查詢數(shù)得出的。總體而言,這個小數(shù)據(jù)集對于 CPU 或 GPU 來說都很容易處理,而且不難看出,還有進(jìn)一步加速空間。

wKgZomVBq0eAJE0yAACYh81VuRQ829.jpg

圖 3. 在 NVIDIA A100 GPU 上運行

Milvus IVF_PQ 算法的GPU 加

(商品與商品相似性搜索)

用戶向量間相似性搜索

對于更大的第二個數(shù)據(jù)集(730 萬個用戶),我們將 85%(約 620 萬個)的向量用于“訓(xùn)練”(要建立索引的向量集),剩下的 15%(約 110 萬個)作為“測試”或查詢向量集。在這種情況下,HNSW 和 IVF_PQ 表現(xiàn)非常出色,召回率分別為 0.884-1.0 和 0.922-0.999。然而,它們在計算上要求更高,尤其是在 CPU 上使用 IVF_PQ 的情況。使用 HNSW 在 CPU 上執(zhí)行所有查詢的總時間范圍為 279.89 至 295.56 秒,而使用 IVF_PQ 的總時間范圍為 3082.67 至 10932.33 秒。注意,這些查詢時間是對 110 萬個向量進(jìn)行查詢的累積時間,因此可以說針對索引的單個查詢?nèi)匀环浅??。然而,如果推理服?wù)器要對數(shù)百萬個商品并發(fā)請求運行查詢,不推薦使用 CPU 查詢。

使用 IVF_PQ 和 A100 GPU 時,吞吐量(QPS)提升 37 至 91倍 (平均為 76.1 倍)。這與我們在小數(shù)據(jù)集中觀察到的結(jié)果一致,這表明處理數(shù)百萬向量數(shù)據(jù)時,Milvus 結(jié)合 GPU 加速可以大幅提升性能。

wKgZomVBq0iAY5oLAACX0zl1eKk952.jpg

圖 4. 在 NVIDIA A100 GPU 上運行

Milvus IVF_PQ 算法的GPU 加速比

(用戶-用戶相似性搜索)

此外,圖 5 顯示了在 CPU 和 GPU 上使用 IVF_PQ 測試的所有參數(shù)組合的召回率- QPS tradeoff。該圖中每個點(上為 GPU,下為 CPU)展示了在改變向量索引/查詢參數(shù)時召回率和吞吐量的 tradeoff:更高召回率的代價是較低吞吐量。注意,在使用 GPU 的情況下,提高召回率時,QPS 會大幅降低。

wKgZomVBq0iARUr1AACApzqKdZU635.jpg

圖 5. 在 CPU 和 GPU 上使用 IVF_PQ

進(jìn)行測試的參數(shù)組合及其召回率-吞吐量

tradeoff(user-use)

用戶與商品向量間相似度搜索

最后,考慮另一個現(xiàn)實場景,即將用戶向量與商品向量進(jìn)行比較(如上面的 notebook 1 所示)。在這種情況下,我們?yōu)?49000 個商品向量創(chuàng)建索引,為每個用戶向量查詢其 top-100 最相似的商品。

在 CPU 上進(jìn)行向量批量查詢非常耗時,無論是使用 HNSW 還是 IVF_PQ 索引(請參見圖 6)。而 GPU 在這種情況下表現(xiàn)更好。當(dāng) nlist = 100 時,IVF_PQ 在 CPU 上平均計算時間約為 86 分鐘。但計算時間隨著 nprobe 值的增加而變化很大(當(dāng) nprobe = 5 時為 51 分鐘,而當(dāng) nprobe = 20 時為 128 分鐘)。NVIDIA A100 GPU 能夠?qū)⑿阅芴嵘?strong>4 至 17 倍(當(dāng) nprobe 較大時,速度提升更高)。前文也提到,通過其量化技術(shù),IVF_PQ 算法還可以減少內(nèi)存占用。這樣看來,如果結(jié)合 GPU 加速方案,能夠得到一個計算上更可行的 ANN 搜索解決方案。

wKgZomVBq0iAZwlUAACSQVJuLKA449.jpg

圖 6. 在 NVIDIA A100 GPU 上運行

Milvus IVF_PQ 算法的GPU 加速比

(用戶-商品相似性搜索)

與圖 5 類似,圖 7 顯示了使用 IVF_PQ 測試的所有參數(shù)組合的召回率-吞吐量間的 tradeoff。我們?nèi)匀豢梢钥吹皆?ANN 搜索中,為了提高吞吐量,可能需要稍微犧牲一些準(zhǔn)確性,尤其是在使用 GPU 的情況下。也就是說,我們可以在 GPU 的計算性能上保持相當(dāng)高的水平,同時實現(xiàn)高召回率。

wKgZomVBq0iAN4-cAAB7kEQboH8822.jpg

圖 7. 使用 IVF_PQ 索引在 CPU 和 GPU 上

測試的所有參數(shù)組合及其對應(yīng)召回率-吞吐量

tradoff(用戶 vs 商品)

結(jié)論

最后,和大家分享一些思考。

現(xiàn)代推薦系統(tǒng)復(fù)雜和多階段的特質(zhì)對每個環(huán)節(jié)的性能和效率都有很高的要求。因此,大家可以考慮在推薦系統(tǒng)流程中使用以下兩個關(guān)鍵功能:

  • NVIDIA Merlin 及其 Merlin Systems 庫:您能夠輕松插入高效的 GPU 加速向量搜索引擎 Milvus。

  • 使用 GPU 加速計算,用諸如 RAPIDS RAFT 等技術(shù)來進(jìn)行向量數(shù)據(jù)庫索引和 ANN 搜索。

wKgZomVBq0iABkE8AABwaGGe-BE091.png

上述測試結(jié)果表明,本文所提出的 Merlin-Milvus 集成方案在訓(xùn)練和推理方面都非常高效且比其他方案更簡單。而且,這兩個框架都在積極開發(fā)中,每個版本都會添加許多新功能,例如,Milvus 新增了基于 GPU 加速的向量數(shù)據(jù)庫索引。向量相似性搜索是計算機視覺、大語言模型系統(tǒng)、推薦系統(tǒng)等工作流程中的關(guān)鍵組成部分,因此十分推薦您嘗試使用 Milvus 向量數(shù)據(jù)庫。

最后,要感謝 Zilliz/Milvus 和 Merlin 以及 RAFT 團(tuán)隊為完成這個項目和這篇博客文章所做出的貢獻(xiàn)。當(dāng)然,如果大家在自己的推薦系統(tǒng)或其他工作流程中使用了 Merlin 和 Milvus, 也歡迎和我們分享。

參考文獻(xiàn)和資源鏈接:

  • Public repo for this blog:https://github.com/bbozkaya/merlin-milvus

  • Yoochoose dataset:https://www.kaggle.com/datasets/chadgostopp/recsys-challenge-2015

  • Recommender Systems, Not Just Recommender Models:https://medium.com/nvidia-merlin/recommender-systems-not-just-recommender-models-485c161c755e

  • Exploring Production Ready Recommender Systems with Merlin:https://medium.com/nvidia-merlin/exploring-production-ready-recommender-systems-with-merlin-66bba65d18f2

  • Scale faster with less code using Two Tower with Merlin:https://medium.com/nvidia-merlin/scale-faster-with-less-code-using-two-tower-with-merlin-c16f32aafa9f

  • Transformers4Rec: A flexible library for Sequential and Session-based recommendation:https://medium.com/nvidia-merlin/transformers4rec-4523cc7d8fa8

  • NVIDIA Merlin:https://github.com/NVIDIA-Merlin

  • Milvus repo:https://github.com/milvus-io/milvus

  • Milvus use-cases:https://medium.com/vector-database/tagged/use-cases-of-milvus

  • Hierarchical navigable small worlds (HNSW):https://zilliz.com/blog/hierarchical-navigable-small-worlds-HNSW

  • Triton inference server:https://github.com/triton-inference-server

  • NVIDIA RAFT:https://github.com/rapidsai/raft

  • Vectordb benchmarking library:https://github.com/zilliztech/vectordb-benchmark


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5309

    瀏覽量

    106405
  • 英偉達(dá)
    +關(guān)注

    關(guān)注

    22

    文章

    3952

    瀏覽量

    93766
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5561

    瀏覽量

    122794

原文標(biāo)題:使用 Milvus 和 NVIDIA Merlin 搭建高效推薦系統(tǒng)

文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    電商API集成入門:從零開始搭建高效接口

    零開始,逐步引導(dǎo)您搭建一個高效、可靠的電商API接口。目標(biāo)讀者為初學(xué)者,我們將使用簡單語言和實用示例,確保內(nèi)容真實可靠。 什么是電商API? API是軟件系統(tǒng)間交互的橋梁,允許不同應(yīng)用交換數(shù)據(jù)。電商API常見于平臺如淘寶、京東或
    的頭像 發(fā)表于 07-10 14:23 ?128次閱讀
    電商API集成入門:從零開始<b class='flag-5'>搭建</b><b class='flag-5'>高效</b>接口

    歸類繽紛:如何輕松搭建一套用于塑料分揀的高光譜檢測系統(tǒng)?

    多光譜技術(shù)和高光譜技術(shù)能夠高效經(jīng)濟(jì)地幫助塑料實現(xiàn)準(zhǔn)確回收。本文詳述了友思特 BlackIndustry 系列高光譜相機系統(tǒng)搭建方式,清晰解讀了高光譜技術(shù)在回收領(lǐng)域的優(yōu)勢應(yīng)用。
    的頭像 發(fā)表于 02-25 10:56 ?475次閱讀
    歸類繽紛:如何輕松<b class='flag-5'>搭建</b>一套用于塑料分揀的高光譜檢測<b class='flag-5'>系統(tǒng)</b>?

    直擊 MBR2054:低正向壓降如何成就高效電路,應(yīng)用實例解讀#

    高效電路
    杰克船長6262
    發(fā)布于 :2025年02月22日 14:23:54

    低代碼平臺:快速搭建與優(yōu)化MES系統(tǒng),提升生產(chǎn)效率

    和交付應(yīng)用軟件,全方位降低軟件的開發(fā)、配置、部署和培訓(xùn)的成本。 二、低代碼平臺搭建MES系統(tǒng)的優(yōu)勢 1、快速開發(fā): 低代碼平臺提供了豐富的模板和組件,IT人員可以通過拖拽、配置等圖形化操作,快速搭建MES
    的頭像 發(fā)表于 01-23 09:37 ?352次閱讀
    低代碼平臺:快速<b class='flag-5'>搭建</b>與優(yōu)化MES<b class='flag-5'>系統(tǒng)</b>,提升生產(chǎn)效率

    如何用mac電腦搭建云存儲,怎么Mac電腦搭建云存儲呢?

    在數(shù)字時代,我們的生活和工作都離不開數(shù)據(jù)的存儲與管理。對于Mac電腦用戶而言,搭建屬于自己的云存儲,能讓數(shù)據(jù)管理更加高效、安全和便捷。無論是工作文檔的實時共享,還是珍貴照片、視頻的備份存儲,云存儲
    的頭像 發(fā)表于 01-17 14:15 ?643次閱讀
    如何用mac電腦<b class='flag-5'>搭建</b>云存儲,怎么<b class='flag-5'>用</b>Mac電腦<b class='flag-5'>搭建</b>云存儲呢?

    蘋果電腦搭建私有云,蘋果電腦搭建私有云的詳細(xì)操作步驟

    ? ? 隨著云計算技術(shù)的飛速發(fā)展,云電腦逐漸走進(jìn)了人們的視野。它像一朵神奇的云,承載著我們的數(shù)據(jù)和應(yīng)用,讓我們隨時隨地都能享受到高效的計算服務(wù)。今天就為大家介紹蘋果電腦搭建私有云的詳細(xì)操作步驟
    的頭像 發(fā)表于 01-17 10:17 ?1171次閱讀
    蘋果電腦<b class='flag-5'>搭建</b>私有云,蘋果電腦<b class='flag-5'>搭建</b>私有云的詳細(xì)操作步驟

    普通電腦搭建私有云,普通電腦搭建私有云教程

    隨著云存儲的普及,越來越多的用戶開始考慮搭建自己的私有云系統(tǒng)。那普通電腦也能搭建私有云嗎?當(dāng)然可以,并且方法很簡單。首先,私有云是什么?與公有云存儲不同,私有云存儲是指將文件存儲和管理完全控制在自己
    的頭像 發(fā)表于 01-13 13:55 ?699次閱讀
    <b class='flag-5'>用</b>普通電腦<b class='flag-5'>搭建</b>私有云,<b class='flag-5'>用</b>普通電腦<b class='flag-5'>搭建</b>私有云教程

    華為 Flexus 云服務(wù)器搭建螢火商城 2.0

    在浩瀚的數(shù)字海洋中探索未知的寶藏。 華為 Flexus 云服務(wù)器:強大的根基 華為 Flexus 云服務(wù)器,宛如一座巍峨的數(shù)字大廈,以其卓越的性能和堅如磐石的穩(wěn)定性,成為搭建電商系統(tǒng)的理想之選。它那獨特的架構(gòu),仿佛是精心設(shè)計的建筑藍(lán)圖,能夠
    的頭像 發(fā)表于 01-13 13:36 ?500次閱讀
    華為 Flexus 云服務(wù)器<b class='flag-5'>搭建</b>螢火商城 2.0

    自己電腦搭建云主機,自己電腦如何搭建云主機?

    ? 如今,服務(wù)器遠(yuǎn)程連接技術(shù)正逐漸成為行業(yè)的新寵,它代表著服務(wù)器管理領(lǐng)域向高效化、智能化邁進(jìn)的發(fā)展趨勢。本文將帶你剖析自己電腦如何搭建云主機。 自己電腦搭建云主機是一種經(jīng)濟(jì)實惠且具有可行性的選擇
    的頭像 發(fā)表于 01-06 09:55 ?922次閱讀
    自己電腦<b class='flag-5'>搭建</b>云主機,自己電腦如何<b class='flag-5'>搭建</b>云主機?

    企業(yè)云服務(wù)器平臺設(shè)計與搭建

    企業(yè)云服務(wù)器平臺的設(shè)計與搭建是一個復(fù)雜但系統(tǒng)的過程,涉及多個環(huán)節(jié)和因素。主機推薦小編為您整理發(fā)布企業(yè)云服務(wù)器平臺設(shè)計與搭建這一過程的詳細(xì)闡述。
    的頭像 發(fā)表于 12-04 09:51 ?544次閱讀

    怎樣搭建基于 ChatGPT 的聊天系統(tǒng)

    搭建一個基于ChatGPT的聊天系統(tǒng)是一個涉及多個步驟的過程,包括理解ChatGPT的API、設(shè)計用戶界面、處理數(shù)據(jù)和集成ChatGPT模型。以下是一個簡化的指南,用于創(chuàng)建一個基本的聊天系統(tǒng)。 1.
    的頭像 發(fā)表于 10-25 16:23 ?1023次閱讀

    如何搭建智能制造工廠

     搭建智能制造工廠是一個復(fù)雜而系統(tǒng)的工程,需要從多個方面入手,包括規(guī)劃與設(shè)計、基礎(chǔ)設(shè)施建設(shè)、系統(tǒng)集成與測試、上線與試運行以及持續(xù)優(yōu)化與升級等階段。以下是一個詳細(xì)的搭建智能制造工廠的步驟
    的頭像 發(fā)表于 09-15 14:17 ?1195次閱讀

    TINA如何搭建仿真模型?

    使用TINA仿真單極運放的環(huán)路,仿真模型知道怎么搭建,現(xiàn)在要仿真由兩級TL082搭建的兩級運放的環(huán)路穩(wěn)定性,請教,TINA如何搭建仿真模型,謝謝!
    發(fā)表于 08-15 08:10

    搭建光學(xué)相干斷層掃描(OCT)系統(tǒng)您需要知道

    搭建光學(xué)相干斷層掃描(OCT)系統(tǒng)您需要知道!光學(xué)相干斷層掃描(OCT)系統(tǒng)搭建需要光學(xué)和機械、信號和圖像處理等背景知識、一定的編程能力、以及大量的時間投入。使用現(xiàn)成的OCT光譜儀作
    的頭像 發(fā)表于 07-18 08:16 ?1228次閱讀
    <b class='flag-5'>搭建</b>光學(xué)相干斷層掃描(OCT)<b class='flag-5'>系統(tǒng)</b>您需要知道

    STM32WL33CCV的SWD燒錄最小系統(tǒng)怎么搭建?

    STM32WL33CCV的SWD燒錄最小系統(tǒng)怎么搭建?的哪一組S
    發(fā)表于 07-18 07:35