網絡性能總不好?網絡調優專家AOE幫你來「看看」

華爲雲開發者聯盟 發佈 2024-04-28T11:28:31.250263+00:00

然而,算法網絡的多樣性、輸入數據的不確定性以及硬體之間的差異性,使得網絡調優耗費巨大成本,即使是經驗豐富的專家,也需要耗費數天的時間。

本文分享自華為雲社區《網絡性能總不好?專家幫你來「看看」— CANN 6.0 黑科技 | 網絡調優專家AOE,性能效率雙提升-雲社區-華為雲》,作者:昇騰CANN 。

隨著深度學習模型複雜度和數據集規模的增大,計算效率的提升成為不可忽視的問題。然而,算法網絡的多樣性、輸入數據的不確定性以及硬體之間的差異性,使得網絡調優耗費巨大成本,即使是經驗豐富的專家,也需要耗費數天的時間。

CANN(Compute Architecture for Neural Networks)是華為針對AI場景推出的異構計算架構,對上支持多種AI框架,對下服務AI處理器與編程,發揮承上啟下的關鍵作用,是昇騰AI基礎軟硬體平台的核心。為了在提升網絡性能的同時降低巨大的人工調優成本,CANN推出了自動化網絡調優工具AOE(Ascend Optimization Engine),通過構建包含自動調優策略生成、編譯、運行環境驗證的閉環反饋機制,不斷疊代,最終得到最優調優策略,從而在AI硬體上獲得最佳網絡性能。以ResNet50推理網絡為例,經AOE調優後的網絡性能提升100%以上,調優耗時不到30分鐘。

針對網絡模型,AOE分別提供了算子調優、子圖調優與梯度調優的功能。其中算子調優,主要針對算子的調度(Schedule)進行優化,從而使得昇騰AI處理器的多級Buffer與計算單元形成高效的流水並發作業流,充分釋放硬體算力;子圖調優,通過智能化的數據切分策略提升緩存利用率,從而大幅提升計算效率;梯度調優主要應用於集群訓練場景下,通過自動化尋找最優梯度切分策略、降低通信拖尾時間,從而提升集群訓練性能。同時,AOE能夠支持多種主流開源框架,在訓練和推理場景下全方位滿足不同開發者的網絡性能調優訴求。

算子調優,提升計算節點執行效率

1. 強化學習,生成Vector算子最優調度策略

AI處理器在計算過程中需要精心排布才能充分發揮算力,計算組件間的流水排布很大一部分由調度來承載,一個很小的調度操作映射到硬體行為上都可能產生巨大的差異。想要提升網絡性能,勢必需要為給定網絡在指定設備上開發一套專屬的調度邏輯。

網絡的組成單元是算子,為算子執行尋找最優的調度策略是提升網絡性能的關鍵。昇騰AI處理器的核心計算單元是AI Core,針對運行在AI Core上的算子,可以分為Vector與Cube兩類,其中Vector算子主要負責執行向量運算,Cube算子主要負責執行矩陣運算。

針對Vector算子,CANN採用了RL強化學習(Reinforcement Learning)搜索框架,將算子調度過程抽象成了基於MCTS蒙特卡洛樹搜索(Monte Carlo Tree Search)的決策鏈,並模擬人工進行決策,再通過和環境不斷交互得到性能數據,作為反饋值指導下一步決策。通過此方法一步步改善自身行為,最終獲取算子執行對應的完整最優調度策略。

經過AOE調優後的Vector算子,平均性能較調優前可提升10%以上,平均調優時間僅需200s,效率與性能都有較大提升。

2. 遺傳算法,提高Cube算子搜索效率

我們知道在深度學習網絡中包含了大量的矩陣乘計算,而這部分計算在昇騰AI處理器中均通過Cube算力來承擔,因此Cube算子作為重型算子,在網絡中的影響權重較大,所以針對Cube算子的性能提升會給整個網絡的性能帶來較大的收益。

通過強化學習模式的搜索,我們已經可以做到解放人力進行Vector類型的算子優化,因為Vector算子的計算Buffer單一,調度算法可以基於各種Schedule原語為算子構建完整的調度策略。而Cube算子涉及多塊片上Buffer之間的數據交互,如果按照和Vector算子相同的調優方式,可能最終會因為搜索空間過大導致搜索效率低下和搜索策略不佳的結果。

針對Cube算子,AOE以Schedule模板為基礎,利用GA遺傳算法(Genetic Algorithm)通過選擇、交叉、變異等方式對影響最大的Schedule原語參數進行多輪調優,從而得到候選Tiling集,再根據在真實環境編譯執行的性能反饋數據將候選策略進行排序,得到最優策略。

以卷積算子為例,若人工調優,需要消耗一個算子優化專家兩天的時間;若使用AOE智能調優,平均僅需3分鐘即可達到相同甚至更優的性能優化效果,極大地節省了人力成本!

子圖調優,獲得更智能的數據切分

算子調優已經使得網絡性能有了可觀的提升,但AOE並沒有止步於此。AOE在更宏觀的粒度上加入了子圖調優,從而實現更智能的數據切分。

深度學習模型的計算往往有較大的數據吞吐,數據讀寫往往成為網絡性能的瓶頸,因此對於高速緩存利用率的提升成為計算效率優化的關鍵手段。

昇騰AI處理器中包含了高速緩存以降低外部訪存的帶寬壓力,然而由於特徵圖(Feature Map)和模型參數的數據量巨大,會導致算子計算過程中的Cache命中率較低,影響整網計算效率。為了更好地提升高速緩存Cache命中率,AOE引入了子圖調優的概念。

子圖調優,基於算子切分數學等價原則,根據硬體Cache大小、算子shape等信息,將網絡模型中的算子切分成多個算子,然後編排切分後算子的執行順序,通過獲取最佳的性能反饋,確定計算圖切分策略和執行順序。這樣,就可以將一次性的數據流計算分解成多次進行執行,在分解後的數據流分支上,數據大小相比之前成倍遞減,進而實現了Cache命中率的顯著提升。

最終,在算子調優和子圖調優的共同作用下,使用AOE進行性能調優後,主流推理網絡的平均性能提升30%以上。以ResNet50推理網絡為例,性能較調優前提升超過100%,整網調優耗時30分鐘以內。

梯度調優,提升集群訓練性能

大規模集群訓練場景中,存在著計算節點多、梯度聚合過程複雜、通信開銷大的痛點。梯度聚合過程和計算過程怎麼更好的一定程度上相互掩蓋,讓整個過程保證較好的線性度,也是性能提升的關鍵問題。為此,AOE引入了梯度調優的功能,通過智能梯度切分算法,自動搜索出最優梯度參數切分方式,為梯度傳輸選擇合適的通信時機和通信量,最大限度讓計算和通信並行,從而將通信拖尾時間降至最低,促使集群訓練達到最優性能。

相對人工調整梯度聚合數據量,自動梯度調優可以將梯度聚合數據量調參時間從數人天縮短至數十分鐘,一舉獲得最優聚合策略,降低人工調參的不確定性。AOE通過調優知識庫記錄模型調優經驗,使得模型聚合策略能夠動態適應不同集群規模。

經過AOE調優後,主流訓練網絡在昇騰AI處理器上執行性能較調優前平均提升了20%以上。以ResNet50訓練網絡為例,性能較調優前提升了23%,整網調優耗時2H以內。

寫在最後

昇騰異構計算架構CANN始終致力於提供「開放易用、極致性能」的AI開發體驗,不斷降低AI開發的門檻與成本。CANN提供的昇騰調優引擎AOE克服了傳統調優方法耗時長、泛化性差、維護成本高等影響開發效率和可用性的弊端,為AI開發者提供了更智能化的性能優化手段。

以夢為馬,未來可期,相信通過CANN的持續創新與不斷演進,定將進一步釋放AI硬體的澎湃算力,加速AI應用場景落地,共建智慧世界。

點擊下方,第一時間了解華為雲新鮮技術~

華為雲博客_大數據博客_AI博客_雲計算博客_開發者中心-華為雲

關鍵字: