什麼是全場景AI計算框架MindSpore?

摘要:MindSpore是華爲公司推出的新一代深度學習框架,是源於全產業的最佳實踐,最佳匹配昇騰處理器算力,支持終端、邊緣、雲全場景靈活部署,開創全新的AI編程範式,下降AI開發門檻。

MindSpore是華爲公司推出的新一代深度學習框架,是源於全產業的最佳實踐,最佳匹配昇騰處理器算力,支持終端、邊緣、雲全場景靈活部署,開創全新的AI編程範式,下降AI開發門檻。2018年華爲全聯接大會上提出了人工智能面臨的十大挑戰,其中提到訓練時間少則很多天多則數月,算力稀缺昂貴且消耗大,仍然面臨沒有「人工」就沒有「智能」等問題。這是一項須要高級技能的、專家的工做,高技術門檻、高開發成本、長部署週期等問題阻礙了全產業AI開發者生態的發展。爲了助力開發者與產業更加從容地應對這一系統級挑戰,新一代AI框架MindSpore具備編程簡單、端雲協同、調試輕鬆、性能卓越、開源開放等特色,下降了AI開發門檻。算法

編程簡單MindSpore函數式可微分編程架構可讓用戶聚焦模型算法數學原生表達。資深的深度學習開發者都體會過手動求解的過程,不只求導過程複雜,結果還很容易出錯。因此現有深度學習框架,都有自動微分的特性,幫助開發者利用自動微分技術實現自動求導,解決這個複雜、關鍵的過程。深度學習框架的自動微分技術根據實現原理的不一樣,分爲以Google的TensorFlow爲表明的圖方法,以Facebook的PyTorch爲表明的運算符重載,以及以MindSpore爲表明的源碼轉換方法(Source to Source,S2S自動微分技術),如圖1.1所示。編程

圖方法實現簡單,而且圖的數據結構容易進行優化和並行。不過圖方法的可編程性一直飽受爭議,用戶須要理解圖的概念和接口,例如數據節點、通訊節點、計算節點、數據邊、依賴邊、引用邊等,存在必定的學習成本。而且,在圖方法中控制流、高階導的表示較爲複雜。運算符重載方式比較符合用戶尤爲是研究人員的編程習慣,很受學術界歡迎。不過這種方式須要使用宿主語言(Host Language)的解釋器,而且使用Tape模式去記錄運行過程,因此開銷比較大,同時這種動態方式也不利於反向性能優化。性能優化

S2S自動微分技術,兼顧了可編程性和性能。一方面可以和編程語言保持一致的編程體驗;另外一方面它是中間表示(Intermediate Representation,IR)粒度的可微分技術,可複用現代編譯器的優化能力,性能也更好。S2S自動微分技術使用了高效易調試的可微編程架構。首先在接口層提供Python編程接口,包括控制流表達,利於用戶快速入門,如代碼1.1所示。第一步用Python代碼定義一個計算圖(函數)。第二步,利用MindSpore提供的反向接口進行自動微分,這一步的結果是一個反向的計算圖(函數)。第三步給定一些輸入,就能獲取第一步中的計算圖(函數)在給定處的導數。在這個例子中,自動微分的結果是圖中全部輸入的導數。MindSpore的反向接口一樣提供選項計算某一個或者一部分輸入的導數。網絡

代碼1.1 原生Python編程體驗數據結構

其次,IR(Intermediate Representation,中間表示)粒度的可微分技術可以把用戶定義的網絡源代碼經過解析驗證等過程轉換爲MindSpore定義的IR,也就是MindSpore IR,在IR的基礎上應用IR更變器方法(IR Mutator Method),最終生成反向代碼。在此過程當中,也應用了算子融合等技術進一步提高反向性能。如圖1.2所示,MindSpore對控制流的表達包括循環和條件。能夠看到代碼編程風格與原生Python保持一致,更重要的是,與Python對控制流的表達不一樣的是,MindSpore在生成控制流的反向時不會對循環進行展開,而經過在IR基礎上進行反向計算,避免了表達式膨脹,從而提高性能。架構

相比其餘框架,用MindSpore能夠下降核心代碼量20%,下降開發門檻,效率總體提高50%以上。同時,能自然支持編譯優化,進一步提高代碼運行效率,有效下降科研工程門檻。MindSpore自動微分代碼如代碼1.2所示。框架

除了圖層面的自動微分之外,MindSpore同時支持算子層面的自動微分。在提供了深度學習主要網絡的算子的同時,MindSpore自帶的張量引擎(Tensor Engine)支持用戶使用Python DSL(Domain Specific Language)自定義算子,而且提供算子級的自動微分接口。經過使用Python DSL,用戶能夠在Python中像寫數學式同樣自定義算子,如同數學中用公式定義函數同樣,而張量引擎的算子自動微分接口能夠直接對DSL定義的算子進行微分,正如數學中使用統一的微分符號表示求導同樣,這樣讓代碼的書寫更加簡潔直觀,貼近用戶的書寫習慣,編程語言

如代碼1.3所示。這裏的前向算子是用戶用DSL自定義的算子,也是算子級自動微分的求解目標。接下來利用張量引擎提供的反向接口去推導出反向算子。對於多輸入的算子,反向算子接口能夠指定一個或者多個前向算子的輸入,而後對這些輸入同時進行自動微分計算。另外與圖層面的自動微分不一樣,算子級的自動微分額外接收反向圖中上一層算子(對應在正向圖的下一層算子)的微分結果做爲輸入,而後使用鏈式法則計算出該層反向算子的結果。數學中高階導數是經過對函數反覆使用微分算子計算獲得的,一樣,在MindSpore中,用戶能夠對算子反覆使用反向接口來計算算子的高階導數。函數

代碼1.3 MindSpore算子級自動微分代碼示例性能

算子級的自動微分一樣使用了IR方法,所以許多IR層面的優化技術能夠應用在算子級的自動微分中。其中MindSpore的張量引擎根據深度學習的算子特徵特別增長了IR層面的除零優化。未經優化的反向算子中可能存在大量的零元素,極大地影響求和等計算的效率。張量引擎的自動微分經過循環軸合併、循環域調度變換消除反向算子中的零元素,不只能提升代碼的運行效率,也使得代碼簡化讓後續部署更加方便。此外MindSpore的張量引擎引入多項式(Polyhedral)模型,解決循環變形依賴問題,實現自動的算子調度,而且自動內存優化,實現內存最優排布、算子最佳性能。如此讓用戶從手寫調度調優的細節中解放出來,更專一於算法自己。

MindSpore的算子級自動微分接口不只能夠自動生成反向算子,更提供了進一步手動優化導數公式的可能。MindSpore的算子級自動微分功能把算子分割成若干步簡單函數的複合運算後,先是利用已知基礎函數的導數和求導法則分佈求導,而後利用鏈式法則計算複合函數的導數,最後經過張量引擎內置的數學公式簡化器進行化簡。這能夠知足絕大部分用戶對自動微分的須要。

可是對部分有更高性能或者代碼部署要求的用戶,MindSpore提供接口讓用戶能夠用本身優化過的導數公式代替某一步或者若干步自動生成的微分,如代碼1.4所示。雖然上面的例子中MindSpore業已完成Sigmoid函數的求導,但部分用戶可能但願用手動推導的Sigmoid函數的導數dy=y(1-y)進行計算,這樣能夠利用前向函數計算的結果。這裏把手動推導的導數公式放入函數custom_sigmoid_fdiff中,並在自動微分中重載這部分的求導。那麼自動微分在保持其餘部分自動生成的狀況下,使用custom_sigmoid_fdiff做爲輸出對於x的導數進行運算。這樣MindSpore保持了自動微分和手動調優的反向算子在風格上的統一,方便了圖層對算子的調用。

代碼1.4 MindSpore手動調優自動微分代碼示例

總而言之,MindSpore在支持算子級自動微分的同時,對反向算子進行IR層面的優化,知足算子開發者自動生成反向算子的需求。同時MindSpore兼顧了用戶對手動調優反向的需求,將自動和手動有機結合,簡化了開發流程,提高了代碼的可讀性,增長了代碼的運行效率。

端雲協同MindSpore依託華爲「端—邊—雲」的業務場景,在隱私保護日漸重要的狀況下,致力於支持全場景部署,並打通雲到端全流程。MindSpore針對全場景提供一致的開發和部署能力,以及按需協同能力,讓開發者可以實現AI應用在雲、邊緣和手機上快速部署,全場景互聯互通,實現更好的資源利用和隱私保護,創造更加豐富的AI應用。

學術界和工業界沒有對端雲協同作系統的概念定義,通常認爲涉及雲和端交互的學習形態,便是端雲協同系統。模型壓縮、端側推理、端側訓練、遷移學習、聯邦學習等技術在端側的應用均可以劃分到端雲協同的範疇。這些涉及在雲側構建、預訓練或託管模型,在端側執行或訓練模型,以及雲和端之間模型或權重的傳輸。在端側推理場景中,對雲側模型進行模型壓縮並轉換爲端側推理模型,使用端側推理框架加載模型並對本地數據進行推理。但云側預訓練模型使用的數據集和端側真實的數據存在差別,爲了利用端側真實數據訓練模型,帶來精準的個性化體驗,端側訓練成爲必然。

因爲端側設備在算力、電量和數據量方面的限制,從頭訓練一個模型不切實際,所以遷移學習技術被用在了端側學習中,能夠大幅度下降端側訓練的難度。爲了充分利用端側數據和端側訓練能力,一些端雲聯合學習方法和框架被提出來,旨在聯合多個端側設備共同訓練一個全局模型,並實現端側隱私保護。Google率先於2016年提出了聯邦學習方法和框架。楊強等又提出了橫向聯邦學習、縱向聯邦學習、聯邦遷移學習以及聯邦強化學習等方法及對應的框架。端側推理、遷移學習和聯邦學習屬於端雲協同的不一樣階段,如圖1.3所示的MindSpore端雲協同框架融合了這三種形態並打通了雲到端全流程。

MindSpore端雲協同框架整合了MindSpore雲側框架、MindSpore端側框架,並打通了模型生成、模型壓縮、編譯優化和端側學習的全流程。MindSpore提供神經架構搜索(Neural Architecture Search,NAS)能力用於自動化生成模型,構建模型庫。MindSpore模型壓縮模塊用於對模型庫中的模型進行剪枝和量化。MindSpore提供了編譯優化能力用於轉換和優化模型,並經過神經處理單元(Neural-network Processing Unit,NPU)、圖形處理單元(GraphicsProcessing Unit,GPU)或ARM NEON(1)等加速算子執行。MindSpore端雲協同框架具備以下多種特性(2)。

(1)快速多處部署。實際場景中,模型須要快速適配不一樣機型硬件。經過神經架構搜索技術構建多元化的模型庫,適配多種機型。針對特定應用場景,從模型庫中搜索知足性能約束的模型,拿來即用,無須重複訓練。(2)全棧性能優化。結合神經架構搜索、模型壓縮(剪枝、蒸餾、量化)、編譯優化(算子融合、常量摺疊、硬件加速)等手段優化模型精度、大小、時延,追求極致性能。(3)靈活易用。支持多種策略,如模型生成、模型壓縮和編譯優化組合使用。打通雲到端全流程,集中管理全流程策略和配置,方便使用。(4)多種學習形態。MindSpore端雲框架逐步支持多種學習形態,好比支持當前業界經常使用的端側推理形態,並逐步支持遷移學習、聯邦學習等須要端側訓練能力的高級學習形態,知足開發者各類各樣的場景需求。

調試輕鬆MindSpore實現看得見的AI開發、更輕鬆的調試體驗、動靜結合的開發調試模式。開發者能夠只開發一套代碼,經過變動一行代碼,從容切換動態圖/靜態圖調試方式。須要高頻調試時,選擇動態圖模式,經過單算子/子圖執行,方便靈活地進行開發調試。須要高效運行時,能夠切換爲靜態圖模式,對整張圖進行編譯執行,經過高效的圖編譯優化,得到高性能。MindSpore切換調試模式代碼如代碼1.5所示。

代碼1.5 MindSpore切換調試模式代碼

性能卓越MindSpore經過AI Native執行新模式,最大化發揮了「端—邊—雲」全場景異構算力。它還協同華爲昇騰芯片On Device執行、高效AI數據格式處理、深度圖優化等多維度達到極致性能,幫助開發者縮短訓練時間,提高推理性能。此外,數據集、模型愈來愈大,單機的內存和算力沒法知足需求,須要模型並行;模型手動切分門檻高,開發效率低,調試困難。MindSpore能夠經過靈活的策略定義和代價模型,自動完成模型切分與調優,獲取最佳效率與最優性能。MindSpore自動並行代碼如代碼1.6所示。

代碼1.6 MindSpore自動並行代碼示例

開源開放MindSpore致力於AI開發生態的繁榮,開源開放可擴展架構,助力開發者靈活擴展第三方框架、第三方芯片支持能力,讓開發者實現各類定製化需求。MindSpore將在門戶網站、開源社區提供更多學習資源、支持與服務。

 

(1) 參考連接:https://developer.arm.com/architectures/instruction-sets/simd-isas/neon。

(2) MindSpore端雲協同框架處於開發迭代中,其支持特性以官網公佈的爲準。

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

相關文章
相關標籤/搜索