英偉達、IBM 和大學合作者開發了一種架構,他們稱該架構將為 GPU 加速的應用程序(例如分析和機器學習訓練)提供對大量數據存儲的快速細粒度訪問。
這種技術被稱為大加速器內存(Big accelerator Memory),又名 BaM,這是一個有趣的嘗試,旨在減少 Nvidia 圖形處理器和類似硬件加速器在訪問存儲時對通用芯片的依賴,這可以提高容量和性能。
我們知道,現代圖形處理單元不僅僅用于圖形;它們還用于各種重型工作負載,例如分析、人工智能、機器學習和高性能計算 (HPC)。為了高效地處理大型數據集,GPU 要么需要大量昂貴的本地專用內存(例如 HBM2、GDDR6 等),要么需要高效地訪問固態存儲。現代計算 GPU 已經搭載 80GB–128GB 的 HBM2E 內存,下一代計算 GPU 將擴展本地內存容量。但數據集大小也在迅速增加,因此優化 GPU 和存儲之間的互操作性很重要。
換而言之,我們必須改進 GPU 和 SSD 之間的互操作性有幾個關鍵原因:首先,NVMe 調用和數據傳輸給 CPU 帶來了很大的負載,從整體性能和效率的角度來看,這是低效的。其次,CPU-GPU 同步開銷和/或 I/O 流量放大顯著限制了具有大量數據集的應用程序所需的有效存儲帶寬。
“BaM 的目標是擴展 GPU 內存容量并提高有效的存儲訪問帶寬,同時為 GPU 線程提供高級抽象,以便輕松按需、細粒度地訪問擴展內存層次結構中的海量數據結構”,該團隊在其撰寫的論文中說。
BaM 是 Nvidia 將傳統的以 CPU 為中心的任務轉移到 GPU 內核的一步。BaM 不依賴于虛擬地址轉換、基于頁面錯誤的按需加載數據以及其他以 CPU 為中心的傳統機制來處理大量信息,而是提供了允許 Nvidia GPU 獲取的軟件和硬件架構直接從內存和存儲中獲取數據并對其進行處理,而無需 CPU 內核對其進行編排。
BaM 有兩個主要部分:GPU 內存的軟件管理緩存;以及用于 GPU 線程的軟件庫,通過直接與驅動器對話,直接從 NVMe SSD 請求數據。在存儲和 GPU 之間移動信息的工作由 GPU 內核上的線程處理,使用 RDMA、PCIe 接口和允許 SSD 在需要時直接讀取和寫入 GPU 內存的自定義 Linux 內核驅動程序。如果請求的數據不在軟件管理的緩存中,驅動器的命令將由 GPU 線程排隊。
這意味著在 GPU 上運行以執行密集型工作負載的算法可以快速獲取所需的信息,并且——至關重要的是——以針對其數據訪問模式進行優化的方式。
論文中的圖表比較了傳統的以 CPU 為中心的存儲訪問方法 (a) 與 GPU 主導的 BaM 方法 (b) 以及所述 GPU 將如何物理連接到存儲設備 (c)。
研究人員使用現成的 GPU 和 NVMe SSD 測試了一個由 Linux 驅動的原型 BaM 系統,以證明它是當今讓主機處理器指揮一切的方法的可行替代方案。我們被告知,可以并行化存儲訪問,消除同步障礙,更有效地使用 I/O 帶寬來提高應用程序性能。
“以 CPU 為中心的策略會導致過多的 CPU-GPU 同步開銷和/或 I/O 流量放大,從而減少具有細粒度數據相關訪問模式(如圖形和數據分析、推薦系統和圖形)的新興應用程序的有效存儲帶寬神經網絡,”研究人員在論文中說。
借助軟件緩存,BaM 不依賴于虛擬內存地址轉換,因此不會遭受諸如 TLB 未命中之類的序列化事件的影響,”包括 Nvidia 首席科學家、曾領導斯坦福大學計算機科學系的 Bill Dally 在內的作者指出。
“BaM 在 GPU 內存中提供了一個高并發 NVMe 提交/完成隊列的用戶級庫,使按需訪問未從軟件緩存中丟失的 GPU 線程能夠以高吞吐量方式進行存儲訪問,”他們繼續說道。“這種用戶級方法對每次存儲訪問產生的軟件開銷很小,并且支持高度的線程級并行性。”
該團隊計劃將他們的硬件和軟件優化的細節開源給其他人來構建這樣的系統。我們想起了 AMD 的 Radeon Solid State Graphics (SSG) 卡,它將閃存放置在 GPU 旁邊。