在量化金融、算法交易和欺詐檢測等高風險領域,數據從業者經常需要處理數百 GB 的數據,才能快速做出明智的決策。Polars 是發展最快的數據處理庫之一,其 GPU 引擎由 NVIDIA cuDF 提供動力支持,可加速這些領域常見的計算受限查詢,從而滿足這一需求。
但是,在使用 GPU 時,一個常見的挑戰是 VRAM ( GPU 的專用內存) 通常小于系統 RAM。在使用 GPU 引擎處理非常大的數據集時,這可能會導致問題。
本文將探討 Polars GPU 引擎中克服此限制的兩個選項。借助這些策略,您可以處理大于可用 VRAM 的數據,同時仍可從 GPU 加速中獲益:
- 統一虛擬內存 (UVM) :一種允許 GPU 溢出到系統 RAM 的技術。
- 多 GPU 流式傳輸執行:一項用于跨多個 GPU 分配工作負載的實驗性功能,非常適合大規模處理數百 GB 到幾 TB 的工作負載。
選項 1:提供單 GPU 靈活性的 UVM
當數據集大小開始超過 GPU 顯存時,您可以利用 NVIDIA UVM 技術。
UVM 在系統 RAM (主機內存) 和 GPU VRAM (設備內存) 之間創建統一的內存空間。這允許 Polars GPU 引擎在 VRAM 已滿時將數據溢出到系統 RAM,從而防止出現內存不足錯誤,并使您能夠處理大于 VRAM 的數據集。當 GPU 需要訪問當前系統 RAM 中的數據時,這些數據會自動引入 VRAM 進行處理。
如果您使用的是單個 GPU,并且需要靈活處理比可用顯存略大的數據集,則此方法是理想選擇。雖然它提供了幾乎無需更改代碼的無縫體驗,但系統 RAM 和 VRAM 之間的數據遷移可能會產生性能開銷。但是,通過使用 RAPIDS Memory Manager (RMM) (一個對 GPU 顯存分配方式提供精細控制的庫) 進行智能配置,這種性能成本可以顯著降低。
如需深入了解 UVM 的工作原理、其性能以及如何根據您的特定需求微調其配置,請查看在 Polars GPU 引擎上為大于 VRAM 數據引入 UVM。
選項 2:TB 級性能的多 GPU 流式傳輸執行
對于處理超過幾百 GB 到太字節 (TB) 的數據集的用戶,Polars GPU 引擎現在提供實驗性的多 GPU 流式傳輸執行配置。與在單個分區中處理數據的標準內存執行不同,流式傳輸執行器引入了數據分區和并行處理功能,旨在跨多個 GPU 分配工作負載。
此流執行程序的核心工作原理是采用 Polars 生成的優化內部表示 (IR) 圖,并將其重寫為批量執行。然后,根據數據大小和可用工作者的數量對生成的圖形進行劃分。流式傳輸執行程序使用基于任務的執行模型,其中每個分區都獨立處理,從而能夠并行執行任務。

流式傳輸執行程序通過 Dask 同步調度程序支持單 GPU 執行,并通過 Dask 分布式調度程序支持多 GPU 執行。許多參數可用于控制連接策略和分區大小。
在測試中,該團隊在 3 TB 規模的 PDS-H 基準測試中看到了強勁的性能,在幾秒鐘內處理了所有 22 個查詢。查看示例 Notebook,并在數據集上嘗試多 GPU 流式傳輸。
如需深入了解 Polars GPU 引擎中的流式傳輸執行在幕后的工作原理,請參閱 NVIDIA GTC 巴黎會議“使用 Polars 擴展數據幀”。
選擇正確的方法
UVM 和多 GPU 流式傳輸執行均提供了強大的方法,可在 Polars GPU 引擎中處理比 GPU VRAM 更大的數據集。最佳選擇取決于您的特定需求。
- UVM 最適用于比 VRAM 稍大的數據集。默認情況下,Polars GPU 引擎配置為利用 UVM 在大多數數據大小下實現性能和可擴展性的最佳組合。
- 多 GPU 流式傳輸執行實驗功能非常適合超大型數據集 (數百 GB 到 TB) ,您可以利用多個 GPU 進行分布式處理。
如需詳細了解這些配置,請查看 Polars 用戶指南。