天天看點

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

作者:華為雲開發者聯盟

本文分享自華為雲社群《網絡性能總不好?專家幫你來“看看”— 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幫你來“看看”

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

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

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

1. 強化學習,生成Vector算子最優排程政策

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

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

針對Vector算子,CANN采用了RL強化學習(Reinforcement Learning)搜尋架構,将算子排程過程抽象成了基于MCTS蒙特卡洛樹搜尋(Monte Carlo Tree Search)的決策鍊,并模拟人工進行決策,再通過和環境不斷互動得到性能資料,作為回報值指導下一步決策。通過此方法一步步改善自身行為,最終擷取算子執行對應的完整最優排程政策。

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

經過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幫你來“看看”

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

子圖調優,獲得更智能的資料切分

算子調優已經使得網絡性能有了可觀的提升,但AOE并沒有止步于此。AOE在更宏觀的粒度上加入了子圖調優,進而實作更智能的資料切分。

深度學習模型的計算往往有較大的資料吞吐,資料讀寫往往成為網絡性能的瓶頸,是以對于高速緩存使用率的提升成為計算效率優化的關鍵手段。

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

子圖調優,基于算子切分數學等價原則,根據硬體Cache大小、算子shape等資訊,将網絡模型中的算子切分成多個算子,然後編排切分後算子的執行順序,通過擷取最佳的性能回報,确定計算圖切分政策和執行順序。這樣,就可以将一次性的資料流計算分解成多次進行執行,在分解後的資料流分支上,資料大小相比之前成倍遞減,進而實作了Cache命中率的顯著提升。

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

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

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

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

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

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

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

寫在最後

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

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

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

華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲

#華為雲開發者聯盟#

繼續閱讀