PyTorch 2 2 大更新! 整合的 FlashAttention 2 將效能提高了 2 倍

Mondo 家居 更新 2024-02-02

編輯:alan

在新的一年裡,PyTorch 也迎來了重大更新!

繼 2 發布之後在版本 1 之後,全球 521 名開發人員為最新版本的 PyTorch 2 貢獻了 3,628 次提交版本 2。

新版本整合了 FlashAttention-2,與之前的版本相比,效能提高了約 2 倍。

pytorch 2.2 還引入了乙個新的 TorchInductor 高階擴充套件,稱為 Aotinductor,旨在為非 Python 伺服器端編譯和部署 PyTorch 程式。

火炬。 在 pytorch 中分布式支援乙個名為 Device Mesh 的新抽象,用於初始化和表示 ProcessGroups。

另外,pytorch 22提供標準化、可配置的日誌記錄機制,——火炬日誌。

pytorch 2.2.也在火炬上Compile 進行了許多改進,包括改進了對編譯優化器的支援,以及火炬電感融合和布局優化。

最後,值得注意的是,PyTorch 將放棄對 macOS x86、PyTorch 2 的支援2.X 是支援 macOS X64 的最後乙個版本。

pytorch 2.2 個新功能

首先,請注意,如果您從原始碼構建 pytorch 22. 海灣合作委員會 94 或更高版本,PyTorch 庫已從 C++14 遷移到 C++ 17。

FlashAttention-2 通過優化 GPU 上不同執行緒塊和扭曲之間的工作分割槽,解決了使用率低或不必要的共享記憶體讀寫問題。

FlashAttention-2 調整了演算法以減少非 matmul 計算量,同時提高了注意力計算的並行性(即使是單個標頭也可以跨不同的執行緒塊以增加使用率),並且在每個執行緒塊中,warp 之間的工作分配都經過優化,以減少通過共享記憶體的通訊。

pytorch 2.2 將 FlashAttention 核心更新為 v2,但需要注意的是,之前的 Flash Attention 核心有 Windows 實現,Windows 使用者可以強制使用 SDP 核心,並且只啟用 Flash Attention 的上下文管理器。

而在 22、如果必須使用SDP核心上下文管理器,請使用記憶體效率或數學核心(在Windows上)。

在閃光燈的加持下-2,火炬nn.functional.Scaled Dot Product Attention 的速度提高了約 2 倍,達到 A100 GPU 理論峰值的 50%-73%。

Aotinductor 是 Torchinductor 的擴充套件,用於處理匯出的 PyTorch 模型、優化它們以及生成共享庫以及其他相關工件。

這些編譯的專案可以部署在非 Python 環境中,通常用於伺服器端推理。

以下示例演示如何呼叫 AOT Compile 將模型轉換為共享庫。

Aotinductor 支援與 Inductor 相同的後端,包括 CUDA、ROCM 和 CPU。

pytorch 2.2 提供了標準化的、可配置的日誌記錄機制,可用於分析各種子系統的狀態,例如編譯和分布式操作。

可以通過 torch logs 環境變數啟用日誌記錄。 例如,通過在命令列中修改環境變數:

將 torchdynamo 的日誌級別設定為日誌記錄錯誤,將 TorchInductor 的 log 級別設定為 loggingdebug。

當然,它也可以以 API 的形式使用 **:

pytorch 2.2 引入了一種新的抽象,用於表示分布式並行中涉及的程序組,稱為 torchdistributed.device_mesh。

為分布式訓練設定分布式通訊器 (NCCL) 是一件繁瑣的事情。 使用者需要編寫具有不同並行度的工作負載,並針對每個並行度手動設定和管理 NCCL 通訊器 (ProcessGroup)。

此過程可能很複雜且容易出錯。 DeviceMesh 可以簡化此過程並使其更易於管理。

DeviceMesh 是用於管理程序組的更高階別的抽象。 它允許使用者毫不費力地建立節點間和節點內程序組,而不必擔心如何正確設定不同子程序組的層次結構。

例如,陣列的乙個維度可以表示 FSDP 中的資料並行性,而另乙個維度可以表示 FSDP 中的張量並行性。

使用者還可以通過DeviceMesh輕鬆管理底層程序組,實現多維並行。

DeviceMesh 在處理多維並行性(如 3D 並行性)時非常有用。 如上圖所示,當您的並行解決方案需要在每個主機之間和每個主機內進行通訊時,您可以建立乙個 2D 網格,用於連線每個主機中的裝置,並在同構設定中將每個裝置連線到其他主機上的對應裝置。

在 Init Device Mesh() 的幫助下,我們只需兩行即可完成上述 2D 設定:

如果我們不使用 devicemesh,我們可能需要編寫以下一堆 **:

當然,如果需要,我們仍然可以訪問底層的 processgroup:if need

可能有以下幾種:

編譯優化器提高了所有基準測試的效能:HuggingFace +18%、Torchbench +19%、TIMM +8% E2E;

編譯優化器增加了對 cudagraph 的支援;

對測試套件中的所有模型進行平均,每個測試套件的平均基準編譯時間增加了約 40 秒; 正在進行的優化可能會將其縮短到 30 秒以內。

用於多張量優化器編譯的電感器中缺少的主要功能是 foreach 運算元的高效編碼生成。

在排程器中,將去中心化過程中註冊的緩衝區列表壓縮到 ForeachKernelSchedulerNodes(FusedSchedulerNode 的子類)中。

為了檢查融合是否合法,每個內部排程節點執行的寫入操作必須與使用排程節點位於同一列表索引的讀取操作匹配。

此外,正常的垂直收斂規則必須允許在消費者和生產者排程器節點列表的每個索引處進行收斂。

如果滿足這些條件,ForeachKernelSchedulerNode 將垂直融合到 ForeachKernelSchedulerNode 中,其中每個列表上的相應點操作將被融合。

通過實現這種融合,可以將一系列 foreach 操作融合到單個核心中,從而實現多張量優化器的完全融合。

TorchInductor 新增了許多效能優化,包括對 Torch 的支援Concat 的水平融合支援、改進的卷積布局優化以及改進的縮放點產品注意力模式匹配。

pytorch 2.2 還包括對 ARClCloud64 的許多效能增強,包括對 mkldnn 權重預打包的支援、改進的 iDeep 基元快取,以及通過對 Onednn 的固定格式核心改進來提高推理速度。

引用:

相關問題答案

    王者22日更新,眾多英雄迎來弱化,李白玩法略有變化

    年已經進入倒計時,沒想到年底看到小王對李白的強化,你沒聽錯,李白強化了。剛才小王對體驗服進行了一波更新,這次更新調整了不少人氣英雄,其中絕大多數英雄都被削弱了。在這篇文章中,我們一起來看看這些英雄的調整內容和對它的解讀。既然李白 王兆鈞 大喬,我們在上一篇文章中已經講過了,所以這次我們就重點介紹其他...

    濃眉41 11 6大爆發! 詹姆斯22 5 12,湖人7險勝猛龍雙打!

    月日的NBA常規賽,多倫多猛龍客場對陣洛杉磯湖人隊,猛龍隊以 不敵湖人隊。本場比賽,湖人濃眉大眼出戰分鐘,投籃中,其中三分球中,罰球中,貢獻分籃板助攻蓋帽。湖人隊的詹姆斯全場投中,三分球投中,得到分 個籃板 次助攻 次搶斷和次蓋帽。與此同時,湖人隊的里夫斯全場中,三分球中,得到分 個籃板 次助攻和次...

    適用於 iPhone 和 iPad 的 iOS 17 2 重大更新

    近日,蘋果發布了iOS 和 iPadOS 系統更新,但是,此更新對於大多數iPhone和iPad使用者來說是乙個巨大的挑戰。在新版本中,Apple 調整了其伺服器,刪除了使用者在 iPhone 和 iPad 上購買和 電影和電視節目的選項。這讓許多使用者感到驚訝和不便。在之前的測試階段,iTunes...

    陳廷靖,清朝丞相(22歲)。

    張旺奉命進京,但仍暫時住在山西會館。陳庭靜今日難得一見,約張旺去逛逛古色古香街。兩人在街上走了一會兒,然後進屋喊了起來 五墨店 的商店。掌櫃見客人,連忙打招呼 喲,兩個,看看吧!我店裡的東西都是正品!陳庭靜笑了笑 聽說你們店裡有好東西,就來看看。掌櫃看著陳庭靜和張旺說道 兩人應該是鑑賞家,我這裡有一...

    985所高校排名更新,分為“六梯隊”,中國人民大學和浙江大學位居第二梯隊

    所高校排名更新,分為 六梯隊 中國人民大學和浙江大學位居第二梯隊 官方宣布,工程 工程等重點建設專案已整合統一為 雙一流 建設,這意味著工程和工程正式終止。然而,時至今日,工程和工程仍是備受關注的頂尖大學的標誌,並得到廣大學生和家長的高度認可,尤其是工程,象徵著中國綜合實力的巔峰水平。自專案啟動以來...