999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于GPU 直訪存儲架構的推薦模型預估系統

2024-03-23 08:04:20謝旻暉陸游游馮楊洋舒繼武
計算機研究與發展 2024年3期
關鍵詞:機制特征模型

謝旻暉 陸游游 馮楊洋 舒繼武

(清華大學計算機科學與技術系 北京 100084)

我們正身處一個信息過載的時代,全球內容生產呈指數型增長:新浪微博每天產生1.17 億條微博[1],快手每天有千萬條新發布的短視頻[2].在如此龐大的規模下,用戶很難從中找到自己可能感興趣的內容.推薦系統負責從中篩選出可能感興趣的內容個性化地推薦給每個用戶,被認為是解決信息過載的有效手段.近年來,隨著深度學習的快速發展,新型深度學習模型[3-6]已廣泛應用至現代推薦系統之中,顯著提升了個性化推薦的準確率.根據Meta 公司的統計[3],推薦模型預估(inference)耗時在其數據中心的人工智能服務總耗時的占比高達80%.因此,推薦模型預估系統設計已成為數據中心人工智能系統設計中的一個關鍵問題.

與計算機視覺、自然語言處理中的計算密集型深度學習模型不同,推薦模型包含一個巨大且訪存密集的嵌入層(embedding layer).該嵌入層用于映射對應輸入的特征ID 至低維嵌入參數(embedding vector),由于推薦模型接受的輸入包含海量高維稀疏的特征ID(例如用戶ID、近期觀看過的視頻ID),而深度神經網絡無法直接從高維稀疏特征中學習.所有低維嵌入參數拼接后,一同輸入深度神經網絡擬合樣本標簽.由于特征交叉技術[5]的廣泛使用與每個特征本身的海量ID 空間,嵌入層中包含的參數可多達千億級,占模型總體參數的99.99%以上[7].受限于GPU 的內存大小,嵌入參數通常存儲在內存(dynamic RAM,DRAM)與固態硬盤(solid state disk,SSD)等較為廉價的硬件資源上[8-10].

現有推薦模型預估系統[11]依賴于CPU 對存儲資源上的嵌入參數進行訪問(后文稱為基于CPU 訪問存儲架構).具體地,由CPU 接收經GPU 去重后的特征ID,訪問相應DRAM 或SSD 獲得嵌入參數后,再將所需嵌入參數額外聚集(gather)到一塊連續的內存空間,通過直接存儲器訪問(direct memory access,DMA)引擎傳輸至GPU.GPU 收到嵌入參數后,完成后續的神經網絡計算任務.

然而,我們發現該架構存在2 個問題:一方面,GPU 所需的任何數據均需交由CPU 訪問再傳回GPU,CPU 和GPU 的頻繁交互帶來的通信開銷增加了參數訪問的時延;另一方面,聚集操作引入的額外內存拷貝消耗了CPU 資源與內存帶寬,為訪存密集的嵌入層帶來了嚴重的性能損失.

針對上述問題,本文提出一種基于GPU 直訪存儲架構的推薦模型預估系統GDRec.GDRec 的核心思想是在嵌入參數的訪問路徑上移除CPU 參與,由GPU 通過零拷貝的方式直接訪問DRAM,SSD 等存儲資源,以減少主機端CPU 與DRAM 的開銷.具體地,GDRec 包含2 個直訪存儲機制:內存直訪機制(用于訪問位于DRAM 上的參數)與外存直訪機制(用于訪問位于SSD 上的參數).

內存直訪機制利用設備商提供的統一虛擬地址(unified virtual address,UVA)特性[12],將嵌入參數所在的DRAM 內存區域映射至GPU 內存虛擬地址空間.由此,GPU 核心函數(kernel)可以繞過主機端CPU,直接通過load/store 指令以字節粒度直接訪問DRAM.由于跨PCIe 總線訪問主機DRAM 內存有一定開銷,GDRec 進一步地提出訪問合并與訪問對齊2 個優化,通過調度GPU 線程讀取嵌入參數的方式,盡可能減少GPU 發出的PCIe 事務數量.

外存直訪機制在GPU上實現了一個類似于存儲性能開發套件(storage performance development kit, SPDK)[13]的用戶態NVMe(non-volatile memory express)驅動程序,允許GPU 線程直接向SSD 提交讀寫請求,同時也允許SSD 通過DMA 引擎將讀取到的硬盤數據直接寫入GPU 內存.整個過程無需主機端的CPU 與內存參與.

在每次推薦模型的預估過程中,GDRec 首先利用GPU 高效地將特征ID 去重,然后根據對應的嵌入參數所在的位置將請求分流至內存直訪機制與外存直訪機制.待所有嵌入參數的讀取請求完成后,類似于傳統的預估系統,GDRec 進行后續的神經網絡計算.

我們在3 個公開的點擊率預估數據集上進行了測試,實驗表明:與NVIDIA 公司深度優化的推薦模型預估系統HugeCTR[11](HugeCTR-Inference)相比,GDRec 可以提升超過1 個數量級的吞吐量;相比于使用SPDK 高度優化后的HugeCTR,GDRec 仍有多達1.9 倍的吞吐量提升.

綜上所述,本文的主要貢獻有3 個方面:

1) 分析了現有推薦模型預估系統(基于CPU 訪問存儲架構)的性能問題;

2) 提出了一種基于GPU 直訪存儲架構的推薦模型預估系統GDRec,其包含內存直訪與外存直訪2 個機制,分別使能GPU 直訪DRAM 與SSD 上的參數;

3) 使用實驗說明GDRec 設計的有效性,特別地,在3 個公開的點擊率預估數據集上,GDRec 在性能上優于高度優化后的基于CPU 訪問存儲的同類系統,吞吐提升多達1.9 倍.

1 背景介紹與研究動機

本節主要介紹深度學習推薦模型的基本結構與現有預估系統的主要處理流程,同時分析現有系統使用CPU 訪問存儲架構導致的性能問題.

1.1 深度學習推薦模型結構

自微軟公司的Deep Cross[6]與谷歌公司的Wide&Deep 模型[5]發布以來,推薦模型已全面步入深度學習時代.與傳統機器學習模型相比,深度學習推薦模型的表達能力更強,可以挖掘出用戶(user)與物品(item)之間更深層次的聯系,從而更好地推測出用戶的喜好.

深度學習推薦模型的輸入特征主要包含2 種類型:稠密特征和稀疏特征.稠密特征亦稱數值型特征、連續特征,指具有數值意義的特征,如用戶的年齡、商品被訪問的次數等;稀疏特征亦稱類別型特征、ID 型特征,指如用戶ID、視頻ID 列表等以獨熱(onehot)或多熱(multi-hot)形式存在的高維特征.稀疏特征一般被編碼為ID 的列表,如某用戶近期觀看過的視頻為[視頻ID1, 視頻ID4, 視頻ID5].

圖1 展示了典型的深度學習推薦模型結構,它由2 個部分組成:嵌入層(embedding)與多層感知機(multi-layer perceptrons,MLP).由于深度神經網絡無法直接從高維稀疏特征中學習[14],嵌入層用于將稀疏特征映射至稠密的嵌入參數.具體地,嵌入層由多個嵌入表(embedding table)組成,如用戶、視頻嵌入表.每個表用于映射對應的輸入特征ID 至低維嵌入參數,嵌入參數的維度稱為嵌入維度(embedding dimension),映射的過程類似于哈希表查詢.在嵌入層映射完稀疏特征后,所有嵌入參數會與樣本中的稠密特征拼接,得到包含樣本所有特征的特征向量.模型將特征向量輸入MLP,MLP 對特征向量各個維度進行復雜的交叉組合,最后擬合樣本的標簽(例如某用戶是否可能觀看某視頻).典型的工業級推薦模型神經網絡包括:Wide&Deep[5],DeepFM[15],DCN[16],DIN[17],DIEN[18].各模型在具體模型結構上有所不同,但模型主體結構都符合embedding 和MLP 兩個部分的結構.

圖1 深度學習推薦模型結構Fig.1 Structure of deep learning recommendation model

從圖1 還可以看到,深度學習推薦模型的參數可分為2 類:稀疏參數(由嵌入層組成,用于處理稀疏特征)與稠密參數(由MLP 層組成,用于處理稠密特征與稀疏特征經嵌入表映射后的中間結果).這2 類參數在計算模式與存儲特征上有著本質的區別.對于計算模式,只有樣本包含的特征ID 涉及到的一部分稀疏參數會參與計算,而全部的稠密參數都會參與計算;對于存儲特征,稠密參數通常只有百兆級,而稀疏參數可多達千億級,這一方面是由于每個稀疏特征ID 空間巨大,另一方面也由于廣泛使用的特征交叉技術[5]可以將多個特征做笛卡兒積(Cartesian product),從而形成ID 空間更大的新特征.

許多公司報告(如阿里巴巴[19]、Meta[3]),在它們生產環境的模型中,嵌入層通常占據模型端到端預估的時延60%以上.其原因在于嵌入層引入了大量對存儲資源的隨機訪問.因此,針對嵌入層的系統設計與優化是提升推薦模型預估系統性能的關鍵所在.

1.2 傳統架構及其問題分析

文獻[2,7,20]表明,更大的參數量往往能帶來更好的推薦質量,在過去幾年中,推薦模型參數量級已從百億級迅速膨脹至千億級,海量參數使得純內存存儲方案成本過高.另一方面,隨著Optane 等高速存儲介質的發展,現代高性能SSD 的平均延遲不斷降低.例如,Intel 公司在2018 年推出的905P SSD 的4 KB隨機讀延遲僅為10 μs.為了提高存儲性價比,學術界與工業界的許多工作[7-8,10,21-23]都已遷移至內存外存混合存儲方案.針對1.1 節所述的推薦模型結構與稠密、稀疏參數在計算、存儲上的特點,現有推薦系統比較通用的做法是將稠密參數緩存在GPU 的內存中,而將稀疏參數存儲在DRAM,SSD 等相對廉價存儲介質中.

如圖2 所示,現有系統采用基于CPU 訪問存儲架構.一次典型的預估處理流程為:

圖2 典型預估流程Fig.2 Typical inference process

①去重.一次預估輸入往往包含一批樣本,其中樣本包含大量重復的特征ID[11].CPU 會首先將所有特征ID 傳輸給GPU,由GPU 將特征ID 去重.得益于GPU 的高并行性,GPU 去重可以獲得比CPU 去重更好的性能.

②查詢.GPU 將去重后的特征ID 傳輸回CPU,CPU 根據去重后的特征ID,查取DRAM 以及SSD 上的嵌入表,得到特征ID 對應的嵌入參數.

③聚集.CPU 將上一步查詢得到的嵌入參數聚集至DRAM 內存上一塊連續的區域,再傳輸給GPU.

④神經網絡計算.GPU 將嵌入參數與樣本中的稠密特征拼接,輸入MLP 計算,得到最后的預估結果.

然而,我們發現該架構存在2 個問題:

1) CPU 與GPU 之間的通信開銷大.如圖2 所示,GPU 需要將訪問相關的元數據(即去重后的ID)傳輸至CPU,CPU 訪問存儲資源得到數據后,再傳輸回GPU.2 次通信交互均涉及到GPU 上DMA 引擎的啟動、同步,以及包含數次用戶態-內核態切換,這些開銷增加了嵌入層參數訪問的時延.

2) 聚集操作引入的額外拷貝,消耗了CPU 資源與內存帶寬,同時增加了嵌入層的時延.為了便于GPU 上的DMA 引擎拷貝,CPU 需將訪問得到的嵌入參數額外聚集至一塊連續的內存空間,再由DMA 引擎傳輸給GPU.這一步額外的拷貝帶來了3 方面弊端.首先,浪費寶貴的CPU 資源,除處理嵌入層外,CPU 還需服務于網絡棧、模型預處理等過程.CPU 訪問存儲架構浪費了一部分CPU 資源用于訪問存儲、嵌入參數聚集.在面對包含復雜預處理的模型或單機多GPU 卡等場景下,CPU 可能成為瓶頸而影響全局性能[24].其次,消耗了內存帶寬,給訪存密集的嵌入層帶來了嚴重的性能損失.最后,CPU 單線程逐參數拷貝性能低下,這增加了端到端預估時延.

2 GDRec 架構

本文提出一種基于GPU 直訪存儲架構的推薦模型預估系統GDRec.GDRec 同時使用GPU 顯存、DRAM內存與SSD 外存 3 個層級的存儲資源,參數存儲方式與現有系統類似:GPU 顯存中存儲稠密參數,DRAM 與SSD 分層存儲稀疏參數.具體地,在加載模型時,類似于現有工作[25],GDRec 根據參數訪問熱度對稀疏參數進行降序排序,并對參數ID 重編號.GDRec 將最熱的一部分參數緩存于DRAM,剩余部分存儲于SSD.

圖3 描述了GDRec 的總體結構與一次預估過程.CPU 上的特征ID 會首先傳輸至GPU 進行去重;GPU根據去重后的特征ID,分別通過內存直訪機制與外存直訪機制,以零拷貝的方式直接訪問主機端DRAM和SSD 上對應的嵌入參數;參數聚集操作直接在GPU 上完成;最后,模型正常進行神經網絡計算.

圖3 GDRec 架構Fig.3 Architecture of GDRec

相比于傳統CPU訪存的架構,GDRec這種基于GPU直訪存儲的架構帶來了3 點優勢:1)GPU 訪存可以享受GPU 高并行性帶來的高性能,GPU 在并行訪問DRAM、并行提交SSD 請求等方面可以獲得比CPU更好的性能;2)在訪存時僅涉及1 次CPU 與GPU 之間的通信,即去重前的ID 從CPU 傳入GPU,之后所有過程均由GPU 單獨完成;3)GPU 直訪機制節省了聚集過程中的額外拷貝,參數可直接被讀取到位于GPU 內存的目的地址,無需經由DRAM 緩存,這節省了CPU 資源、DRAM 內存帶寬,同時降低了端到端延遲.

需要說明的是,GDRec 的實現基于NVIDIA 公司推出的GPU,同時本文主要關注于CUDA(compute unified device architecture)編程模型;對其他廠商的GPU 以及編程模型(如AMD 與ROCm)的支持將是我們的未來工作.

3 關鍵技術設計與實現

本節將逐一介紹GDRec 的2 個關鍵技術,包括內存直訪機制與外存直訪機制.

3.1 內存直訪機制

根據1.2 節的問題分析,GDRec 內存直訪機制的核心思想是讓GPU 以零拷貝的方式從DRAM 中讀取數據,避免已有系統中CPU 額外的聚集操作與DMA 引擎啟動的開銷.為了達到這個目標,GDRec的內存直訪機制利用了CUDA 提供的UVA 特性[12].該特性可以將一塊DRAM 內存地址空間映射至GPU內存虛擬地址空間,GPU kernel 以讀寫指令(load/store)直接對DRAM 進行訪問.整個過程無需主機端CPU的參與.

GDRec 精心挑選了內存直訪機制的實現方式.CUDA 提供了下面2 種方式使一段內存可供GPU 直訪.1)如果內存尚未分配,可以通過cudaMallocHost函數同時實現內存的分配與地址空間的映射,該函數返回的指針可同時被CPU 與GPU 兩種處理器讀寫;2)如果內存已經分配,使用函數cudaHostRegister首先將該段內存區域鎖頁,再使用函數cudaGet-DevicePointer 獲得該區域在GPU 虛擬地址空間的指針.GDRec 使用方式2,原因是我們發現其可以使用大頁(huge page)分配內存,而方式1 不可以.大頁的使用可以減少轉換檢測緩沖區(translation lookaside buffer,TLB)缺失,從而提升嵌入層訪存時的性能.在系統初始化分配DRAM 上的嵌入表后,GDRec 將對應的UVA 虛擬地址指針傳入GPU.

內存直訪機制使得GPU 細粒度地訪問DRAM上的稀疏參數成為可能,但細粒度的訪問同時也可能帶來PCIe 開銷大的問題.一般來說,對于傳輸同樣大小的數據,越多的PCIe 事務意味著傳輸所需的元數據也越多,相應地訪存的有效吞吐量也會降低.例如,對于PCIe 4.0 標準,每個事務層數據包(transaction layer packet,TLP)包含12 B 或16 B 的包頭,如果數據包僅攜帶32 B 有效數據,直訪內存機制將遭受27%~36%的PCIe 開銷.由于PCIe 帶寬是有限的,這導致GPU 直訪內存的有效帶寬受限.為了解決該問題,GDRec 通過調整GPU 線程讀取嵌入參數的方式,盡可能地減少GPU 發出的PCIe 數據包數量,調整方式具體包括2 個部分:訪問合并與訪問對齊.對于訪問合并,現代GPU 支持以最大128 B 的內存事務訪問主機端的內存.GDRec 令GPU 線程束(warp,32 個線程為1 束)讀取連續的內存區域,每個線程讀取4 B.這樣,當該內存區域首地址是128 B 對齊時,這個線程束的內存訪問將被硬件合并為1 個PCIe 事務.對于訪問對齊,其處理的情況是當訪問的參數首地址非128 B 對齊時,例如參數尺寸非128 B 的整數倍.一種簡單的方法是位移參數,將每個嵌入參數的首地址對齊至128 B 的倍數,但這會引入額外的內存空間開銷.相對地,GDRec 沒有改變參數在內存中的布局,而是調整了GPU 線程讀取嵌入參數的方式.具體而言,如圖4 所示,當訪問的內存區域非128 B 對齊時,GDRec 所有線程束向高地址方向讀取對齊的1 個128 B,并額外分配1 個線程束讀取頭部剩余的字節.這樣,假設要訪問的內存區域大小為X(單位為B),我們只需發出「X/(128B)■個PCIe 事務,就可達到最優情況.

圖4 訪問對齊Fig.4 Aligned access

3.2 外存直訪機制

現有推薦模型預估系統在訪問外存時并不高效,它們將嵌入參數視為鍵值,并依賴于已有的SSD 鍵值存儲系統.例如NVIDIA 公司的HugeCTR 使用RocksDB系統[26]讀寫SSD.這種做法不僅面臨著大量內核存儲I/O 棧的開銷,其以CPU 為中心的訪存架構同樣存在著如1.2 節中所述的CPU-GPU 通信開銷大、額外拷貝引起的內存帶寬消耗與CPU 資源浪費這2 個問題.

對此,GDRec 提供了GPU 上的NVMe 驅動以實現GPU 外存直訪機制,進而優化推薦模型預估系統的外存訪問路徑.GDRec 的外存直訪機制具有3 個特點:1)純用戶態.類似于SPDK 繞過Linux 內核I/O 棧,允許在用戶態直接訪問SSD.2)GPU 直訪.GDRec 使得GPU kernel 可以直接向SSD 發起讀取請求,讀取到的數據直接寫入GPU 內存,控制路徑與數據路徑皆無需途經CPU,這減少了CPU-GPU 通信開銷、主機端CPU 和DRAM 的使用;3)GPU 并行快速提交I/O 請求,GDRec 充分利用GPU 并行性,允許大量線程并行提交一次預估過程中所需參數對應的I/O 請求至NVMe 提交隊列(submission queue, SQ),以進一步縮短控制路徑上的時延.

我們在GPU 內存上分配NVMe SSD 的提交隊列、完成隊列等空間,并將這些隊列注冊給SSD,同時分配可供SSD DMA 傳輸參數的數據緩存區,基于GPUDirect RDMA 機制,這些空間可以被暴露給SSD 讀寫訪問;然后將SSD 的門鈴寄存器(doorbell register),包括提交門鈴寄存器與完成門鈴寄存器,映射至GPU 內存虛擬地址空間,此操作需要2 步:首先使用函數mmap 將SSD 的門鈴寄存器所在地址映射至用戶進程地址空間,再使用函數cudaHostRegister 將其進一步注冊至GPU 內存虛擬地址空間.

GDRec 的每次預估過程涉及一批位于SSD 上的嵌入參數的查詢(假設有N個),直訪外存的具體流程如下.首先,GPU 接收到一批已經去過重后的特征ID,計算出對應的嵌入參數所在的邏輯塊號;其次,GDRec 為每個計算單元SM 分配了單獨的SSD,請求提交隊列與完成隊列,并充分利用GPU 并行性將I/O 命令批量寫入提交隊列;同一批次的讀請求中如果有多個參數在同一個邏輯塊中,GDRec 會將對應的I/O 命令合并以減少SSD 讀取的數據量.然后,GDRec 單獨分配1 個線程用于更新提交門鈴寄存器以通知SSD,利用門鈴批處理(doorbell batching)機制,提交讀請求時GPU 產生的跨PCIe 總線寫次數可以從N次降低至1 次;SSD 在收到提交門鈴寄存器的更新后,拉取位于GPU 內存上的提交隊列,處理其中的NVMe 命令;SSD 在完成I/O 命令后,會向位于GPU內存上的完成隊列寫入完成項,并更新完成門鈴寄存器.GPU 通過輪詢完成隊列得知SSD 讀取的完成情況.

GDRec 還采用2 個優化進一步提升外存直訪性能:

1)由于嵌入參數的尺寸通常在128~512 B,GDRec通過NVMe format 命令調整SSD 的邏輯塊大小,其優勢在于對于大小恰為邏輯塊的嵌入參數,GDRec可以將目的地址直接填入NVMe 讀命令,并加入提交隊列,以減少1 次從I/O 緩存區到目的地址的拷貝,并實現零拷貝.

2)GDRec 盡可能地將所有嵌入參數均勻地分布在SSD 整個空間上,如圖5(b)所示.相比于簡單的連續存放,如圖5(a)所示,這種方式可以更充分地綜合利用SSD 內部不同存儲芯片資源.當多個模型需要共享1 塊SSD 的存儲空間時,GDRec 將各個模型的參數交錯存儲,如圖5(c)所示.

圖5 SSD 嵌入參數放置策略Fig.5 Embedding placement strategy in SSD

3.3 局限性

GDRec 目前的實現有2 方面的局限性:

1)GDRec 僅支持靜態模型的預估,無法支持增量更新[2]的動態模型.其原因是GDRec 的直訪機制要求在GPU 內完成每個嵌入參數地址的定位,動態模型需要額外維護從特征ID 到嵌入參數地址的索引,而這通常會超過GPU 顯存容量.也因為同樣的原因,GDRec 目前不支持冷熱數據在SSD 和DRAM間的遷移.

2)GDRec 僅支持部分型號的GPU.由于GDRec外存直訪機制需要GPU 支持GPUDirect RDMA 機制.因此,對于NVIDIA 公司推出的GPU,GDRec 的外存直訪機制可以在NVIDIA Tesla 與Quadro 系列的GPU上運行,但無法在NVIDIA GeForce 系列GPU 上運行.

4 實 驗

本節將通過實驗對比和分析GDRec 與現有系統的性能差異.首先,使用微觀基準測試說明GDRec的GPU 直訪架構相比于傳統CPU 訪存架構在性能上的優越性;其次,使用真實世界的推薦模型與數據集對比測試所有系統的端到端吞吐量、延遲-吞吐曲線;最后,對比測試純內存場景下,小型推薦模型預估時所有系統的性能.

4.1 實驗平臺與測試數據集

1)實驗平臺.本文實驗使用的實驗平臺配置信息如表1 所示.本文實驗使用的GPU 為NVIDIA Tesla A30,其包含24 GB 顯存,使用的SSD 為Intel Optane P5800X,其4 KB 隨機讀延遲為5 μs.實驗機器擁有2 個非統一內存訪問(non uniform memory access, NUMA)架構節點,為避免跨NUMA 訪問帶來的性能下降,本文實驗只使用同一NUMA 下的CPU,GPU,DRAM,SSD.

Table 1 Configuration Information of Experiment Platform表1 實驗平臺配置信息

2)數據集.本文實驗共選用3 個數據集,具體信息如表2 所示.數據集來自Avazu 與Criteo 這2 家公司對真實世界點擊率(click-through rate, CTR)負載的采樣.在所有數據集上,我們訓練一個深度交叉網絡(deep cross network,DCN)作為推薦模型負載,該模型包含6 個交叉層與形狀為(1 024, 1 024)的MLP 層.對于Avazu 與Criteo-Kaggle 數據集,嵌入參數的維度被設為32;對于Criteo-TB 數據集,維度被設為128.

Table 2 Datasets for Test表2 測試用數據集

3)對比系統.本文實驗將GDRec 與HugeCTR 進行性能對比.HugeCTR 是NVIDIA 公司推出的針對推薦模型負載特別優化的預估系統.HugeCTR 使用RocksDB系統存儲SSD 上的參數,其會導致嚴重的內核I/O 棧開銷,同時其采用的LSM-Tree(log-structured merge-tree)數據結構對推薦模型點查詢的負載并不友好.為了公平對比與充分展現基于GPU 直訪架構的優勢,我們基于SPDK 重新實現了SSD 參數存儲模塊,并替換RocksDB,后文簡稱該系統為HugeCTR-OPT.HugeCTROPT 可被視為極致優化的基于CPU 訪存架構的系統,其與GDRec 僅在I/O 提交方式上有區別.

在系統配置方面,如不作特殊說明,我們默認設置DRAM 大小為5%的模型,模型剩余部分存儲于SSD中.對于HugeCTR,我們使用NVIDIA 提供的原生配置(RocksDB 開啟10 b 布隆過濾器, 8 MB 塊緩存大小).HugeCTR 與GDRec 均使用單個CPU 線程處理預估請求.

所有代碼使用GCC 9.3 與NVCC 11.3 編譯,優化選項為-O2.對于GPU,我們使用的CUDA 版本為11.3,cuDNN 版本為8.2.

4.2 微觀基準測試

本節測試對比基于CPU 訪存與GPU 直訪的2 種架構在訪問DRAM 與SSD 時的基準性能.測試過程為:在GPU 中以均勻分布隨機生成一定數量的特征ID,由2 種架構分別訪問DRAM 和SSD 得到對應參數,并將參數拷貝至GPU 中.該測試過程對應于推薦模型訪問嵌入參數時的過程,我們分別選擇HugeCTROPT 與GDRec 系統的對應功能實現用作本節的測試.

圖6 展示了當參數完全位于DRAM 上時2 種架構的性能.對于同樣數量的特征ID,GDRec 的完成時延要比HugeCTR-OPT 低1.5~3.6 倍.這一方面由于GDRec 無需CPU-GPU 之間多次通信,另一方面得益于GDRec 避免了聚集時CPU 額外拷貝造成的時延.

圖6 內存嵌入參數訪問性能Fig.6 Performance of accessing in-memory embeddings

此外,當查詢的特征數目較少時,例如100,Huge-CTR-OPT 單就CPU-GPU 通信時延(包括將ID 從GPU傳至CPU、將參數從CPU 傳至GPU),已與GDRec 完成的總體時延相近,這充分說明了GDRec 內存直訪機制設計的優越性.

圖7 則展示了當參數完全位于SSD 上時2 種架構的性能.GDRec 相比于HugeCTR-OPT 性能有1.2~2.0 倍的提升.其原因一方面類似于內存直訪機制,外存直訪機制同樣節省了CPU-GPU 通信開銷與聚集步驟的額外拷貝;另一方面,外存直訪機制在提交SSD 的I/O 請求時可以充分利用GPU 的高并行性并行提交,減少了參數讀取時延.

圖7 外存嵌入參數訪問性能Fig.7 Performance of accessing in-SSD embeddings

對比圖6 和圖7,我們發現相比于在DRAM 上,GDRec 在SSD 上獲得的性能提升更少.其原因是SSD有著比DRAM 更高的硬件讀取延遲,這導致GDRec可優化的軟件部分時延占端到端的比例減少,進而在SSD 上性能提升更少.

4.3 端到端吞吐量對比測試

圖8(a)展示了在不同批處理大小下,GDRec 與對比系統的預估樣本吞吐量情況.從圖8(a)中可知:

圖8 系統吞吐量對比Fig.8 System throughput comparison

1) 當批處理變大時,所有系統的吞吐量都隨之上升,這是由于大的批處理可以更充分地利用GPU的并行性;

2) HugeCTR 系統吞吐最低,且與另外2 個系統有著數量級上的差距,其原因是RocksDB 適合范圍查詢、寫密集場景,并未針對推薦模型的點查詢、讀密集場景做定制優化;

3) HugeCTR-OPT 使用SPDK 定制了點查詢友好的SSD 參數存儲模塊,相比于HugeCTR 獲得了性能提升,但其CPU 訪存的架構仍然面臨1.2 節所述的2個問題;

4) 相比于HugeCTR-OPT,GDRec 在Avazu,Criteo-Kaggle,Criteo-TB 這3 個數據集上分別獲得1.1~1.4 倍、1.1~1.9 倍與1.3~1.9 倍的性能提升,性能提升來自于GDRec 的GPU 直訪存儲設計,內存直訪機制與外存直訪機制將CPU 與GPU 的通信次數均降低為1,同時零拷貝的設計消除了額外的拷貝開銷,而GPU 并行提交I/O 命令縮短了讀取SSD 時控制路徑的時間;

5)隨著批處理變大,GDRec 相對于HugeCTROPT 提升的性能更多,這是由于大批次樣本情況下查詢SSD 的時間占比更多,此時GDRec 的GPU 外存直訪機制的優勢更得以充分體現.

進一步地,由于GDRec 的所有設計僅針對于嵌入層,我們在圖8(b)單獨展示不同系統在模型嵌入層的吞吐量.可以看到,在Avazu,Criteo-Kaggle,Criteo-TB 這3 個數據集上,相比于HugeCTR-OPT,GDRec分別可以獲得1.1~2.1 倍、1.4~2.4 倍與1.4~2.7 倍的性能提升.此測試排除了GDRec 未優化的模型MLP 層,因此,相比于端到端預估,GDRec 可以獲得更多的性能提升.

4.4 延遲-吞吐量曲線測試

圖9 展示了HugeCTR-OPT 與GDRec 在3 個數據集上的端到端預估中位數延遲-樣本吞吐曲線.由于HugeCTR 的性能與它們有數量級的差異,因此省去其測試結果.

圖9 端到端中位數延遲-吞吐量曲線Fig.9 Curves of throughput vs.end-to-end median latency

從圖9 發現,相比于HugeCTR-OPT,GDRec 可以達到更高的樣本吞吐量與更低的預估時延.在Criteo-TB 數據集上,給定中位數延遲為2 ms 的情況下,GDRec提升樣本吞吐量1.9 倍,這主要是由于GDRec 充分利用GPU 并行性對內存與外存進行直訪,可以達到更高的嵌入層吞吐量,同時避免CPU 訪存架構在嵌入層的瓶頸現象;給定樣本吞吐量為15 萬樣本/s,GDRec 可以降低74%的中位數延遲,這一方面由于在數據路徑上GPU 直訪省去了CPU 聚集時在內存上的額外拷貝與大部分CPU-GPU 通信開銷,另一方面,GPU 可以并行提交DRAM 的訪存指令和SSD 的I/O 命令,在控制路徑上具有更低的時延.

4.5 小模型性能對比測試

本節實驗考慮小模型預估場景,即當模型可以完全存儲在DRAM 中時的情況.

圖10 展示了GDRec 和HugeCTR-OPT 在不同批處理大小下的樣本吞吐量.因為Criteo-TB 數據集對應的模型容量已遠超過CPU 的DRAM 內存大小,本節測試用的數據集選擇了Avazu 與Criteo-Kaggle.從圖10 可知:

圖10 小模型端到端吞吐量Fig.10 End-to-end throughput when models fit in DRAM

1) GDRec 可以在純內存場景下在Avazu 與Criteo-Kaggle 上分別獲得1.1~1.3 倍、1.2~1.3 倍的吞吐性能提升,這完全得益于GDRec 的內存直訪機制;

2) GDRec 的相對性能提升在較大的批處理大小情況下更少,其原因是此時GPU 去重、CPU-GPU 通信等操作的時延增加,導致訪問內存時延占比變少,因此內存直訪機制可以提升的部分有限.

5 相關工作

本節從推薦模型預估系統與基于GPU 直訪存儲架構的系統2 方面介紹相關工作.

1)推薦模型預估系統.由于推薦模型獨特的訪存特性,大量工作對此設計定制化的預估系統.我們根據使用的硬件將它們分為兩類.

一類工作僅使用CPU,GPU 等通用硬件.HugeCTRInference[11]是NVIDIA 公司推出的高度優化的預估系統,其構建GPU 顯存、DRAM、SSD 多層級參數服務器存儲模型參數.Fleche[27]在HugeCTR-Inference 的基礎上優化了嵌入參數顯存緩存的組織形式與查詢方式,以減少緩存缺失率并提升預估性能.MERCI[25]基于物化視圖的思想緩存同時出現的嵌入參數經池化后的結果,以減少內存訪問量,提升性能.Bandana[10]系統利用NVMe SSD 存儲模型以降低DRAM 成本,其使用超圖劃分算法將可能同時出現的參數放置于同一個數據塊中,以減少塊設備的讀寫放大現象.EVSTORE[8]為SSD 參數存儲設計了混合型DRAM緩存,混合使用了組緩存、混合精度緩存和近似緩存,可以在幾乎不影響模型準確率的情況下充分降低DRAM 的使用量.文獻[11, 27]工作雖然在不同場景下緩解了嵌入層訪存瓶頸問題,但它們在本質上仍屬于傳統CPU 訪存架構,并未解決CPU-GPU 通信開銷高、內存上的額外拷貝等問題.

另一類工作使用FPGA、近內存計算(near memory processing, NMP)等定制硬件加速嵌入層的處理.MicroRec[28]與FleetRec[19]利用帶有高帶寬內存的FPGA 加速嵌入層的訪存操作.RecNMP[29],Tensor-DIMM[30],FAFNIR[31]使用近內存計算的方式,將池化操作卸載至內存; 類似地,FlashEmbedding[22]與RecSSD[23]將嵌入層的訪存與計算操作卸載至SSD控制器.在數據中心中部署這些工作需要付出額外的硬件開銷,而GDRec 則可以完全使用現有服務器硬件部署.

2) 基于GPU 直訪存儲架構的系統.圖計算、圖神經網絡、推薦系統等新興應用催生了GPU 對存儲資源進行大量隨機、細粒度的訪問需求.傳統架構依賴CPU 對存儲資源進行訪問,但造成CPU-GPU 通信開銷大、CPU 處理時延高等問題,嚴重影響GPU 計算效率.在此背景下,一些工作繞開CPU,使GPU 直訪存儲并加速各類應用.EMOGI[32]針對GPU 上的圖遍歷負載,利用細粒度主機內存直訪加速圖數據結構的訪問.伊利諾伊大學厄巴納-香檳分校、IBM、NVIDIA 等單位合作于2021 年提出的圖卷積神經網絡訓練系統[33],使用少量GPU 線程以零拷貝的方式從主機內存預取圖節點特征至GPU 內存,重疊計算與訪存,獲得了多達92%的訓練吞吐量提升.BaM[34]將SSD 抽象成可供GPU 直訪的大數組,并在其之上運行圖分析與數據分析應用.文獻[32–34]的工作僅面向單一的內存或外存GPU 直訪,且尚無現有工作針對推薦模型預估的獨特訪存流程與混合存儲場景做定制設計.

6 結 論

推薦模型的參數訪存已成為模型預估的性能瓶頸.現有基于CPU 訪存架構的預估系統存在著CPUGPU 同步開銷大和額外內存拷貝2 個問題,其性能已無法滿足模型高速增長的訪存需求.本文提出一種基于GPU 直訪存儲架構的推薦模型預估系統GDRec,通過在參數訪存路徑上移除CPU 參與,由GPU 以零拷貝的方式高效直訪內存、外存資源.實驗顯示,相比于現有預估系統,GDRec 可以大幅度提升模型預估的吞吐量,同時降低預估延遲.

作者貢獻聲明:謝旻暉參與論文設計、代碼實現測試,撰寫論文;陸游游參與研究思路討論,修改論文;馮楊洋參與前期實驗方案的討論設計與論文修改;舒繼武參與研究思路討論.

猜你喜歡
機制特征模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
如何表達“特征”
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
抓住特征巧觀察
3D打印中的模型分割與打包
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
注重機制的相互配合
中國衛生(2014年3期)2014-11-12 13:18:12
主站蜘蛛池模板: 欧美www在线观看| 国产精品手机在线观看你懂的| 好吊色妇女免费视频免费| 免费人成网站在线观看欧美| 精品一区二区三区水蜜桃| 喷潮白浆直流在线播放| 久久精品国产电影| 国产精品七七在线播放| 日韩美毛片| 亚洲网综合| 欧美日韩导航| 亚瑟天堂久久一区二区影院| 国产一级在线播放| 亚洲国产成人精品青青草原| 无码av免费不卡在线观看| 久久综合伊人 六十路| 无码丝袜人妻| 久久久久国产精品嫩草影院| 亚洲精品无码不卡在线播放| 人妻精品久久无码区| 91口爆吞精国产对白第三集| 99久久人妻精品免费二区| 狠狠色综合久久狠狠色综合| 国产美女在线免费观看| 国产91在线|中文| 日韩av在线直播| 午夜影院a级片| 乱人伦中文视频在线观看免费| 婷五月综合| 一级毛片在线直接观看| 亚洲 欧美 中文 AⅤ在线视频| 国产成人精品一区二区免费看京| 熟女日韩精品2区| 99精品视频在线观看免费播放| 国产 日韩 欧美 第二页| 亚洲aaa视频| 欧美午夜视频在线| 久久婷婷综合色一区二区| 欧美区一区| 四虎在线高清无码| 国产极品嫩模在线观看91| 麻豆国产在线观看一区二区| 亚洲精品无码久久毛片波多野吉| 日韩中文字幕免费在线观看 | 99热在线只有精品| 天堂在线亚洲| 999精品在线视频| 十八禁美女裸体网站| 亚洲自拍另类| 久久一本日韩精品中文字幕屁孩| 欧美97欧美综合色伦图| 久久亚洲美女精品国产精品| 免费日韩在线视频| 国产成人亚洲欧美激情| 久99久热只有精品国产15| 国产免费一级精品视频 | 四虎永久免费地址| 久久成人18免费| AV不卡国产在线观看| 中文字幕丝袜一区二区| 强奷白丝美女在线观看| 久久男人资源站| 一级毛片网| 国产欧美另类| 国产激情在线视频| 亚洲aaa视频| 欧美日韩在线成人| 国产精品私拍在线爆乳| 成人在线观看不卡| 亚洲AV无码久久精品色欲| 成人免费午夜视频| 国产毛片片精品天天看视频| 中文字幕2区| 男人天堂亚洲天堂| 在线网站18禁| 91在线国内在线播放老师| 中文字幕欧美日韩高清| 日韩 欧美 小说 综合网 另类| 日本精品中文字幕在线不卡 | 热99精品视频| 国产高清在线精品一区二区三区 | 免费a级毛片18以上观看精品|