
cuDF-pandas 是一個 GPU 加速庫,可加速 pandas 以實現顯著的性能提升,速度最高可提升至原來的 50 倍,而無需對現有代碼進行任何更改。作為 NVIDIA RAPIDS 生態系統的一部分,cuDF-pandas 充當代理層,盡可能在 GPU 上執行運算,必要時 (通過 pandas) 回退至 CPU。這可確保與完整的 pandas API 和第三方庫相容,同時利用 GPU 加速加快資料處理速度。只需加載 cuDF-pandas,用戶即可維護熟悉的 pandas 工作流程,同時獲得統一的 CPU/GPU 體驗。
在幕後,cuDF-pandas 默認使用托管內存池,使其能夠處理超過 GPU 物理內存的資料集。這是通過 CUDA Unified Virtual Memory (UVM) 實現的,可提供跨主機 (CPU) 和設備 (GPU) 內存的統一地址空間。UVM 允許 cuDF-pandas 超額訂閱 GPU 內存,根據需要自動在主機和設備之間遷移資料。
這篇博文將介紹為甚麼需要 UVM 及其優勢。
為甚麼 cuDF-pandas 使用 UVM
統一虛擬內存對於解決 GPU 加速資料處理中的兩個關鍵挑戰至關重要:
GPU 顯存有限:許多 GPU (尤其是消費級型號) 的顯存明顯少於現代資料集。UVM 支援超額認購,允許工作負載利用系統內存擴展到物理 GPU 顯存之外。
易用性:UVM 可自動處理 CPU 和 GPU 之間的資料遷移,從而簡化內存管理。這降低了編程的複雜性,並確保用戶可以專注於自己的工作流程,而無需擔心顯式內存傳輸。
有關 UVM 的詳細資訊
CUDA 6.0 中引入的 Unified Virtual Memory (UVM)可創建 CPU 和 GPU 之間共享的單個虛擬地址空間,從而簡化開發者的內存管理。UVM 根據訪問模式以頁面粒度透明遷移資料:
當 GPU 訪問駐留在主機內存中的資料時,它會觸發頁錯誤,促使資料遷移到 GPU 內存。
相反,當 GPU 顯存已滿時,使用較少的頁面會被逐回主機內存。
雖然 UVM 通過消除顯式內存傳輸的需求來擴展內存容量並簡化編程,但由於頁面錯誤和遷移開銷,它可能會引入性能瓶頸。為緩解這些問題,我們採用了優化措施,如預取(例如,使用 cudaMemPrefetchAsync),以便在執行內核之前主動將資料遷移到 GPU。以下是 nsys 配置文件圖,其中顯示了在執行 libcudf 內核之前對 CUDA API 層中 cudaMemPrefetchAsync 的多次調用:

如需更深入地瞭解 Unified Memory,包括其優勢以及預取和內存建議 (cudaMemAdvise) 等優化實例,請參閱技術博客 《面向 CUDA 初學者的 Unified Memory》(Unified Memory for CUDA Beginners)。該博客解釋了 UVM 在不同 GPU 架構中的工作原理,並提供了在實際應用中更大限度提高性能的技巧。
cuDF-pandas 如何利用 UVM
在 cuDF-pandas 中,UVM 在實現高性能資料處理方面發揮著關鍵作用:
托管內存池:默認情況下,
cuDF-pandas使用由 UVM 支援的托管內存池。此池可減少分配開銷,並確保有效利用主機和設備內存。預取優化:預取可確保在內核訪問資料之前將資料遷移到 GPU,從而減少運行時頁錯誤。例如,在需要大量資料的 I/O 操作或連接期間,預取可通過主動將資料移動到設備內存來確保更流暢的執行。如前所述,這些預取調用發生在
libcudf層中,用於特定內核,如 哈希連接 。
示例:Google Colab 上的大型連接和寫入 Parquet
考慮對兩個非常大的表執行 合併/連接操作 ,即在 Google Colab 的有限 GPU memory 中執行 cuDF-pandas:
如果沒有 UVM,此操作將因設備內存不足而失敗。
啓用 UVM 後,資料集將在主機內存和設備內存之間進行分割。隨著連接的進行,系統僅會將所需的資料部分遷移到 GPU。
預取可確保在計算之前將相關資料引入設備內存,從而進一步優化此過程。
用戶可以利用 GPU 處理超過 GPU 顯存的更大資料集,而無需更改代碼。使用 Unified Virtual Memory (UVM)時,速度提升因操作而異,但在保持穩定性的同時,仍可顯著提升端到端應用的性能。

寫入 Parquet 文件也是如此。原本使用 cudf 運行到 MemoryError 的內容,現在使用 cuDF-pandas 成功完成,甚至比 pandas 更快。

結束語
統一虛擬內存是 cuDF-pandas 的基石,使其能夠高效處理大型資料集,同時保持與低端 GPU 的相容性。通過利用托管內存池和預取等功能,cuDF-pandas 可在受限硬體上為 pandas 工作流提供性能和穩定性。這使其成為擴展資料科學工作流的理想選擇,而無需犧牲可用性或修改大量代碼。
WeChat
Profile