隨著深度學(xué)習(xí)模型復(fù)雜度和數(shù)據(jù)集規(guī)模的增大,計(jì)算效率的提升成為不可忽視的問題。然而,算法網(wǎng)絡(luò)的多樣性、輸入數(shù)據(jù)的不確定性以及硬件之間的差異性,使得網(wǎng)絡(luò)調(diào)優(yōu)耗費(fèi)巨大成本,即使是經(jīng)驗(yàn)豐富的專家,也需要耗費(fèi)數(shù)天的時(shí)間。
CANN(Compute Architecture for Neural Networks)是華為針對(duì)AI場(chǎng)景推出的異構(gòu)計(jì)算架構(gòu),對(duì)上支持多種AI框架,對(duì)下服務(wù)AI處理器與編程,發(fā)揮承上啟下的關(guān)鍵作用,是昇騰AI基礎(chǔ)軟硬件平臺(tái)的核心。為了在提升網(wǎng)絡(luò)性能的同時(shí)降低巨大的人工調(diào)優(yōu)成本,CANN推出了自動(dòng)化網(wǎng)絡(luò)調(diào)優(yōu)工具AOE(Ascend Optimization Engine),通過構(gòu)建包含自動(dòng)調(diào)優(yōu)策略生成、編譯、運(yùn)行環(huán)境驗(yàn)證的閉環(huán)反饋機(jī)制,不斷迭代,最終得到最優(yōu)調(diào)優(yōu)策略,從而在AI硬件上獲得最佳網(wǎng)絡(luò)性能。以ResNet50推理網(wǎng)絡(luò)為例,經(jīng)AOE調(diào)優(yōu)后的網(wǎng)絡(luò)性能提升100%以上,調(diào)優(yōu)耗時(shí)不到30分鐘。
針對(duì)網(wǎng)絡(luò)模型,AOE分別提供了算子調(diào)優(yōu)、子圖調(diào)優(yōu)與梯度調(diào)優(yōu)的功能。其中算子調(diào)優(yōu),主要針對(duì)算子的調(diào)度(Schedule)進(jìn)行優(yōu)化,從而使得昇騰AI處理器的多級(jí)Buffer與計(jì)算單元形成高效的流水并發(fā)作業(yè)流,充分釋放硬件算力;子圖調(diào)優(yōu),通過智能化的數(shù)據(jù)切分策略提升緩存利用率,從而大幅提升計(jì)算效率;梯度調(diào)優(yōu)主要應(yīng)用于集群訓(xùn)練場(chǎng)景下,通過自動(dòng)化尋找最優(yōu)梯度切分策略、降低通信拖尾時(shí)間,從而提升集群訓(xùn)練性能。同時(shí),AOE能夠支持多種主流開源框架,在訓(xùn)練和推理場(chǎng)景下全方位滿足不同開發(fā)者的網(wǎng)絡(luò)性能調(diào)優(yōu)訴求。
算子調(diào)優(yōu),提升計(jì)算節(jié)點(diǎn)執(zhí)行效率
1. 強(qiáng)化學(xué)習(xí),生成Vector算子最優(yōu)調(diào)度策略
AI處理器在計(jì)算過程中需要精心排布才能充分發(fā)揮算力,計(jì)算組件間的流水排布很大一部分由調(diào)度來承載,一個(gè)很小的調(diào)度操作映射到硬件行為上都可能產(chǎn)生巨大的差異。想要提升網(wǎng)絡(luò)性能,勢(shì)必需要為給定網(wǎng)絡(luò)在指定設(shè)備上開發(fā)一套專屬的調(diào)度邏輯。
網(wǎng)絡(luò)的組成單元是算子,為算子執(zhí)行尋找最優(yōu)的調(diào)度策略是提升網(wǎng)絡(luò)性能的關(guān)鍵。昇騰AI處理器的核心計(jì)算單元是AI Core,針對(duì)運(yùn)行在AI Core上的算子,可以分為Vector與Cube兩類,其中Vector算子主要負(fù)責(zé)執(zhí)行向量運(yùn)算,Cube算子主要負(fù)責(zé)執(zhí)行矩陣運(yùn)算。
針對(duì)Vector算子,CANN采用了RL強(qiáng)化學(xué)習(xí)(Reinforcement Learning)搜索框架,將算子調(diào)度過程抽象成了基于MCTS蒙特卡洛樹搜索(Monte Carlo Tree Search)的決策鏈,并模擬人工進(jìn)行決策,再通過和環(huán)境不斷交互得到性能數(shù)據(jù),作為反饋值指導(dǎo)下一步?jīng)Q策。通過此方法一步步改善自身行為,最終獲取算子執(zhí)行對(duì)應(yīng)的完整最優(yōu)調(diào)度策略。
經(jīng)過AOE調(diào)優(yōu)后的Vector算子,平均性能較調(diào)優(yōu)前可提升10%以上,平均調(diào)優(yōu)時(shí)間僅需200s,效率與性能都有較大提升。
2. 遺傳算法,提高Cube算子搜索效率
我們知道在深度學(xué)習(xí)網(wǎng)絡(luò)中包含了大量的矩陣乘計(jì)算,而這部分計(jì)算在昇騰AI處理器中均通過Cube算力來承擔(dān),因此Cube算子作為重型算子,在網(wǎng)絡(luò)中的影響權(quán)重較大,所以針對(duì)Cube算子的性能提升會(huì)給整個(gè)網(wǎng)絡(luò)的性能帶來較大的收益。
通過強(qiáng)化學(xué)習(xí)模式的搜索,我們已經(jīng)可以做到解放人力進(jìn)行Vector類型的算子優(yōu)化,因?yàn)閂ector算子的計(jì)算Buffer單一,調(diào)度算法可以基于各種Schedule原語(yǔ)為算子構(gòu)建完整的調(diào)度策略。而Cube算子涉及多塊片上Buffer之間的數(shù)據(jù)交互,如果按照和Vector算子相同的調(diào)優(yōu)方式,可能最終會(huì)因?yàn)樗阉骺臻g過大導(dǎo)致搜索效率低下和搜索策略不佳的結(jié)果。
針對(duì)Cube算子,AOE以Schedule模板為基礎(chǔ),利用GA遺傳算法(Genetic Algorithm),通過選擇、交叉、變異等方式對(duì)影響最大的Schedule原語(yǔ)參數(shù)進(jìn)行多輪調(diào)優(yōu),從而得到候選Tiling集,再根據(jù)在真實(shí)環(huán)境編譯執(zhí)行的性能反饋數(shù)據(jù)將候選策略進(jìn)行排序,得到最優(yōu)策略。
以卷積算子為例,若人工調(diào)優(yōu),需要消耗一個(gè)算子優(yōu)化專家兩天的時(shí)間;若使用AOE智能調(diào)優(yōu),平均僅需3分鐘即可達(dá)到相同甚至更優(yōu)的性能優(yōu)化效果,極大的節(jié)省了人力成本!
子圖調(diào)優(yōu),獲得更智能的數(shù)據(jù)切分
算子調(diào)優(yōu)已經(jīng)使得網(wǎng)絡(luò)性能有了可觀的提升,但AOE并沒有止步于此。AOE在更宏觀的粒度上加入了子圖調(diào)優(yōu),從而實(shí)現(xiàn)更智能的數(shù)據(jù)切分。
深度學(xué)習(xí)模型的計(jì)算往往有較大的數(shù)據(jù)吞吐,數(shù)據(jù)讀寫往往成為網(wǎng)絡(luò)性能的瓶頸,因此對(duì)于高速緩存利用率的提升成為計(jì)算效率優(yōu)化的關(guān)鍵手段。
昇騰AI處理器中包含了高速緩存以降低外部訪存的帶寬壓力,然而由于特征圖(Feature Map)和模型參數(shù)的數(shù)據(jù)量巨大,會(huì)導(dǎo)致算子計(jì)算過程中的Cache命中率較低,影響整網(wǎng)計(jì)算效率。為了更好的提升高速緩存Cache命中率,AOE引入了子圖調(diào)優(yōu)的概念。
子圖調(diào)優(yōu),基于算子切分?jǐn)?shù)學(xué)等價(jià)原則,根據(jù)硬件Cache大小、算子shape等信息,將網(wǎng)絡(luò)模型中的算子切分成多個(gè)算子,然后編排切分后算子的執(zhí)行順序,通過獲取最佳的性能反饋,確定計(jì)算圖切分策略和執(zhí)行順序。這樣,就可以將一次性的數(shù)據(jù)流計(jì)算分解成多次進(jìn)行執(zhí)行,在分解后的數(shù)據(jù)流分支上,數(shù)據(jù)大小相比之前成倍遞減,進(jìn)而實(shí)現(xiàn)了Cache命中率的顯著提升。
最終,在算子調(diào)優(yōu)和子圖調(diào)優(yōu)的共同作用下,使用AOE進(jìn)行性能調(diào)優(yōu)后,主流推理網(wǎng)絡(luò)的平均性能提升30%以上。以ResNet50推理網(wǎng)絡(luò)為例,性能較調(diào)優(yōu)前提升超過100%,整網(wǎng)調(diào)優(yōu)耗時(shí)30分鐘以內(nèi)。
梯度調(diào)優(yōu),提升集群訓(xùn)練性能
大規(guī)模集群訓(xùn)練場(chǎng)景中,存在著計(jì)算節(jié)點(diǎn)多、梯度聚合過程復(fù)雜、通信開銷大的痛點(diǎn)。梯度聚合過程和計(jì)算過程怎么更好的一定程度上相互掩蓋,讓整個(gè)過程保證較好的線性度,也是性能提升的關(guān)鍵問題。為此,AOE引入了梯度調(diào)優(yōu)的功能,通過智能梯度切分算法,自動(dòng)搜索出最優(yōu)梯度參數(shù)切分方式,為梯度傳輸選擇合適的通信時(shí)機(jī)和通信量,最大限度讓計(jì)算和通信并行,從而將通信拖尾時(shí)間降至最低,促使集群訓(xùn)練達(dá)到最優(yōu)性能。
相對(duì)人工調(diào)整梯度聚合數(shù)據(jù)量,自動(dòng)梯度調(diào)優(yōu)可以將梯度聚合數(shù)據(jù)量調(diào)參時(shí)間從數(shù)人天縮短至數(shù)十分鐘,一舉獲得最優(yōu)聚合策略,降低人工調(diào)參的不確定性。AOE通過調(diào)優(yōu)知識(shí)庫(kù)記錄模型調(diào)優(yōu)經(jīng)驗(yàn),使得模型聚合策略能夠動(dòng)態(tài)適應(yīng)不同集群規(guī)模。
經(jīng)過AOE調(diào)優(yōu)后,主流訓(xùn)練網(wǎng)絡(luò)在昇騰AI處理器上執(zhí)行性能較調(diào)優(yōu)前平均提升了20%以上。以ResNet50訓(xùn)練網(wǎng)絡(luò)為例,性能較調(diào)優(yōu)前提升了23%,整網(wǎng)調(diào)優(yōu)耗時(shí)2H以內(nèi)。
寫在最后
昇騰異構(gòu)計(jì)算架構(gòu)CANN始終致力于提供“開放易用、極致性能”的AI開發(fā)體驗(yàn),不斷降低AI開發(fā)的門檻與成本。CANN提供的昇騰調(diào)優(yōu)引擎AOE克服了傳統(tǒng)調(diào)優(yōu)方法耗時(shí)長(zhǎng)、泛化性差、維護(hù)成本高等影響開發(fā)效率和可用性的弊端,為AI開發(fā)者提供了更智能化的性能優(yōu)化手段。
以夢(mèng)為馬,未來可期,相信通過CANN的持續(xù)創(chuàng)新與不斷演進(jìn),定將進(jìn)一步釋放AI硬件的澎湃算力,加速AI應(yīng)用場(chǎng)景落地,共建智慧世界。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )