Hugging Face pytorch_block_sparse 發佈

Hugging Face 已發佈 pytorch_block_sparse,這是一個旨在透過實作區塊稀疏矩陣乘法(block-sparse matrix multiplication)來建立更小且更快速神經網路的擴充功能。此函式庫解決了現有稀疏代數計算中的效率差距,從而降低語言模型的記憶體佔用並減少生產成本。

區塊稀疏實作與用法

pytorch_block_sparse 提供了一個 BlockSparseLinear 模組,可作為 torch.nn.Linear 的直接替換方案。這讓開發者能夠在初始化時指定密度參數,以極少的程式碼變動將稀疏性整合到模型中。

此外,該函式庫還包含一個 BlockSparseModelPatcher,可實現對現有模型的「即時」修改。這讓模型能夠在稀疏化後進行正常訓練,而無需更改原始模型的原始碼。

技術基礎:NVIDIA CUTLASS

此擴充功能是基於 Yulhwa Kim 的 cutlass tilesparse 概念驗證,並利用基於 NVIDIA CUTLASS 的 C++ CUDA 範本來進行區塊稀疏矩陣乘法。

CUTLASS 是一組用於實作高效能 CUDA 核心(kernels)的 CUDA C++ 範本,它能在不需要組合語言的情況下,實現接近 cuBLAS 的效能水準。此函式庫與 Ampere Tensor Core 原語(primitives)相容,在精度損失有限的情況下,可提供 10 倍或更多的加速。

效能與記憶體效率

雖然目前該函式庫中稀疏矩陣的效能大約比經 cuBLAS 優化的密集矩陣慢兩倍,但與標準 PyTorch 稀疏矩陣相比,這已是顯著的改進,因為標準 PyTorch 稀疏矩陣比密集矩陣慢一個數量級。

效能增益會隨著稀疏程度而增加。例如,一個具有 75% 稀疏度的矩陣比其對應的密集矩陣快約 2 倍。記憶體節省則更為明顯;在 75% 稀疏度下,記憶體消耗減少了 4 倍。

未來開發路線圖

pytorch_block_sparse 的未來迭代版本旨在超越初始化時建立的固定稀疏模式。

計劃中的改進包括:

  • 稀疏模式優化:開發工具來衡量參數的「有用性」,以便在學習過程中優化稀疏模式。
  • 硬體加速:在區塊內整合 NVIDIA Ampere 50% 稀疏模式,以實現進一步的效能增益。
  • CUTLASS 更新:利用較新版本的 CUTLASS 來增強整體效率。

Sources