技術背景與定義
在傳統的數據處理流程中,存儲設備與GPU之間的數據傳輸需要經過CPU系統記憶體作為“反彈緩衝區”,這導致CPU成為I/O性能瓶頸,增加了延遲和CPU負載。GPU直連SSD技術旨在打破這一瓶頸,通過在存儲設備與GPU顯存之間建立直接的數據通道,實現存儲與GPU記憶體間的直接記憶體訪問傳輸。
“GPU直連SSD”技術方案,主要指由
英偉達主導並推動的GPUDirect Storage技術。GPUDirect Storage是英偉達GPUDirect技術家族的重要成員,其核心思想擴展自更早的GPUDirect RDMA技術。
技術原理與架構
GPUDirect Storage (GDS) 利用直接記憶體訪問 (
DMA) 技術在 GPU 記憶體與存儲(如 NVMe SSD)之間直接傳輸數據,避免了數據經過 CPU 記憶體中的“反彈緩衝區”(bounce buffer)。
其核心軟體組件包括用戶態的 cuFile API 和核心態的 nvidia-fs.ko 驅動。cuFile API 是
CUDA對檔案 I/O 支持的機制,為應用程式提供高性能的存儲訪問接口;nvidia-fs.ko 驅動則負責處理 GPU 記憶體地址映射並編程底層
DMA/
RDMA引擎。
典型的工作流程為:應用程式通過 cuFile 庫發起 I/O 請求;核心驅動(nvidia-fs.ko)處理 GPU 記憶體地址映射,並編程底層
DMA/
RDMA引擎(如 NVMe 驅動或網卡)直接在存儲與 GPU 記憶體間移動數據;完成信號通過回調返回給應用程式。
該技術與
Linux社區為對等設備添加原生
DMA支持的努力相協同,例如 Linux 核心(6.2 及以上版本)中的 PCI P2PDMA 支持。此外,從 CUDA 11.4 和 R470 驅動開始,標準
NVIDIA驅動安裝包中包含的 nvidia-peermem 核心模組,為基於 Mellanox Infiniband 的網卡提供了與 GPU 記憶體的直接點對點讀寫訪問能力,進一步支持了 GPUDirect RDMA 和 Storage 技術。
實現與部署
部署GPUDirect Storage需要滿足特定的軟體前提條件,包括需要CUDA 11.4及R470以上版本驅動。所需的軟體組件包括用戶庫(libcufile.so)、核心驅動(nvidia-fs.ko)以及第三方依賴(如libmount-dev, libnuma-dev)等。自CUDA 11.4和R470驅動起,標準安裝包中包含了一個新的核心模組nvidia-peermem,該模組為基於Mellanox Infiniband的HCAs提供對GPU記憶體的直接對等讀寫訪問,是啟用GPUDirect RDMA和GDS的關鍵組件。
GDS支持的平台環境包括Kubernetes裸機,以及支持GPU直通或
vGPU的
vSphere虛擬機。典型的部署流程通常通過Helm安裝GPU Operator,並設定和等參數。從GPU Operator v22.9.1開始,提供了在NVIDIA驅動守護進程集引導期間載入nvidia-fs核心模組的選項。部署時需要確保MLNX_OFED等網路驅動已由NVIDIA Network Operator安裝,以便設定網路相關組件。
部署後可通過檢查必要的核心模組是否成功載入來驗證,例如運行命令。
相關技術與產品
GPUDirect Storage (GDS) 技術實現了GPU記憶體與存儲之間的直接數據傳輸路徑,避免了經過CPU緩衝。
Big Accelerator Memory (BaM) 是一種系統架構,它不依賴CPU來準備從GPU到SSD的通信,允許GPU執行緒直接對SSD上的數據集進行細粒度訪問。GPU Initiated Direct Storage (GIDS) 數據載入器基於BaM構建,用於滿足GPU加速的圖神經網路訓練對記憶體容量的要求。BaM和GIDS是NVIDIA Research的原型項目。
在基於美光9400 NVMe SSD的測試中,GIDS數據載入器相比基線獲得了顯著的性能提升。例如,使用單塊美光9400 NVMe SSD時,特徵抽象改進幅度為35.76倍,使用4塊時改進幅度為131.87倍。
性能優勢與測試數據
GPUDirect Storage在4KB隨機讀取工作負載中,峰值吞吐量可達8.8 GB/s,相比傳統數據路徑提升數倍。得益於直接數據路徑,其端到端延遲可降低至傳統路徑的1/3.8。該技術將CPU從數據搬運中解放,在測試中,CPU利用率相當於低於6個核心。
在GPU加速的AI/ML工作負載中,該技術能夠提升性能。例如,使用GIDS數據載入器與美光9400 NVMe SSD,在圖神經網路訓練中,對特徵數據的訪問性能相比基線提升了35.76倍(單盤)至131.87倍(四盤)。