昇思MindSpore是一個全場景深度學習框架,旨在實現易開發、高效執行、全場景覆蓋三大目標。
其中,易開發表現為API友好、調試難度低;高效執行包括計算效率、數據預處理效率和分布式訓練效率;全場景則指框架同時支持云、邊緣以及端側場景。
昇思MindSpore總體架構如下圖所示:
ModelZoo(模型庫):ModelZoo提供可用的深度學習算法網絡,也歡迎更多開發者貢獻新的網絡(ModelZoo地址)。
Extend(擴展庫):昇思MindSpore的領域擴展庫,支持拓展新領域場景,如GNN/深度概率編程/強化學習等,期待更多開發者來一起貢獻和構建。
Science(科學計算):MindScience是基于昇思MindSpore融合架構打造的科學計算行業套件,包含了業界領先的數據集、基礎模型、預置高精度模型和前后處理工具,加速了科學行業應用開發(了解更多)。
Expression(全場景統一API):基于Python的前端表達與編程接口。同時未來計劃陸續提供C/C++、華為自研編程語言前端-倉頡(目前還處于預研階段)等第三方前端的對接工作,引入更多的第三方生態。
Data(數據處理層):提供高效的數據處理、常用數據集加載等功能和編程接口,支持用戶靈活的定義處理注冊和pipeline并行優化。
Compiler(AI編譯器):圖層的核心編譯器,主要基于端云統一的MindIR實現三大功能,包括硬件無關的優化(類型推導、自動微分、表達式化簡等)、硬件相關優化(自動并行、內存優化、圖算融合、流水線執行等)、部署推理相關的優化(量化、剪枝等)。
Runtime(全場景運行時):昇思MindSpore的運行時系統,包含云側主機側運行時系統、端側以及更小IoT的輕量化運行時系統。
Insight(可視化調試調優工具):昇思MindSpore的可視化調試調優工具,能夠可視化地查看訓練過程、優化模型性能、調試精度問題、解釋推理結果(了解更多)。
Armour(安全增強庫):面向企業級運用時,安全與隱私保護相關增強功能,如對抗魯棒性、模型安全測試、差分隱私訓練、隱私泄露風險評估、數據漂移檢測等技術(了解更多)。
有了對昇思MindSpore總體架構的了解后,我們可以看看各個模塊之間的整體配合關系,具體如圖所示:
昇思MindSpore作為全場景AI框架,所支持的有端(手機與IOT設備)、邊(基站與路由設備)、云(服務器)場景的不同系列硬件,包括昇騰系列產品,英偉達NVIDIA系列產品,Arm系列的高通驍龍、華為麒麟的芯片等系列產品。
左邊藍色方框的是MindSpore主體框架,主要提供神經網絡在訓練、驗證相關的基礎API功能,另外還會默認提供自動微分、自動并行等功能。
藍色方框往下是MindSpore Data模塊,可以利用該模塊進行數據預處理,包括數據采樣、數據迭代、數據格式轉換等不同的數據操作。在訓練的過程會遇到很多調試調優的問題,因此有MindSpore Insight模塊對loss曲線、算子執行情況、權重參數變量等調試調優相關的數據進行可視化,方便用戶在訓練過程中進行調試調優。
AI安全最簡單的方式就是從攻防的視角來看,例如,攻擊者在訓練階段摻入惡意數據,影響AI模型推理能力,于是MindSpore推出了MindSpore Armour模塊,為MindSpore提供AI安全機制。
藍色方框往上的內容跟算法開發相關的用戶更加貼近,包括存放大量的AI算法模型庫ModelZoo,提供面向不同領域的開發工具套件MindSpore DevKit,另外還有高階拓展庫MindSpore Extend,這里面值得一提的就是MindSpore Extend中的科學計算套件MindSciences,MindSpore首次探索將科學計算與深度學習結合,將數值計算與深度學習相結合,通過深度學習來支持電磁仿真、藥物分子仿真等等。
神經網絡模型訓練完后,可以導出模型或者加載存放在MindSpore Hub中已經訓練好的模型。接著有MindIR提供端云統一的IR格式,通過統一IR定義了網絡的邏輯結構和算子的屬性,將MindIR格式的模型文件 與硬件平臺解耦,實現一次訓練多次部署。因此如圖所示,通過IR把模型導出到不同的模塊執行推理。
支持全場景協同
昇思MindSpore是源于全產業的最佳實踐,向數據科學家和算法工程師提供了統一的模型訓練、推理和導出等接口,支持端、邊、云等不同場景下的靈活部署,推動深度學習和科學計算等領域繁榮發展。
提供Python編程范式,簡化AI編程
昇思MindSpore提供了Python編程范式,用戶使用Python原生控制邏輯即可構建復雜的神經網絡模型,AI編程變得簡單。
提供動態圖和靜態圖統一的編碼方式
目前主流的深度學習框架的執行模式有兩種,分別為靜態圖模式和動態圖模式。靜態圖模式擁有較高的訓練性能,但難以調試。動態圖模式相較于靜態圖模式雖然易于調試,但難以高效執行。 昇思MindSpore提供了動態圖和靜態圖統一的編碼方式,大大增加了靜態圖和動態圖的可兼容性,用戶無需開發多套代碼,僅變更一行代碼便可切換動態圖/靜態圖模式,例如設置set_context(mode=PYNATIVE_MODE)
切換成動態圖模式,設置set_context(mode=GRAPH_MODE)
即可切換成靜態圖模式,用戶可擁有更輕松的開發調試及性能體驗。
采用函數式可微分編程架構,使用戶聚焦于模型算法的數學原生表達
神經網絡模型通常基于梯度下降算法進行訓練,但手動求導過程復雜,結果容易出錯。昇思MindSpore的基于源碼轉換(Source Code Transformation,SCT)的自動微分(Automatic Differentiation)機制采用函數式可微分編程架構,在接口層提供Python編程接口,包括控制流的表達。用戶可聚焦于模型算法的數學原生表達,無需手動進行求導。
統一單機和分布式訓練的編碼方式
隨著神經網絡模型和數據集的規模不斷增加,分布式并行訓練成為了神經網絡訓練的常見做法,但分布式并行訓練的策略選擇和編寫十分復雜,這嚴重制約著深度學習模型的訓練效率,阻礙深度學習的發展。MindSpore統一了單機和分布式訓練的編碼方式,開發者無需編寫復雜的分布式策略,在單機代碼中添加少量代碼即可實現分布式訓練,例如設置set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL)
便可自動建立代價模型,為用戶選擇一種較優的并行模式,提高神經網絡訓練效率,大大降低了AI開發門檻,使用戶能夠快速實現模型思路。
昇思MindSpore向用戶提供了3個不同層次的API,支撐用戶進行網絡構建、整圖執行、子圖執行以及單算子執行,從低到高分別為Low-Level Python API、Medium-Level Python API以及High-Level Python API。
High-Level Python API
第一層為高階API,其在中階API的基礎上又提供了訓練推理的管理、混合精度訓練、調試調優等高級接口,方便用戶控制整網的執行流程和實現神經網絡的訓練推理及調優。例如用戶使用Model接口,指定要訓練的神經網絡模型和相關的訓練設置,對神經網絡模型進行訓練,通過Profiler接口調試神經網絡性能。
Medium-Level Python API
第二層為中階API,其封裝了低階API,提供網絡層、優化器、損失函數等模塊,用戶可通過中階API靈活構建神經網絡和控制執行流程,快速實現模型算法邏輯。例如用戶可調用Cell接口構建神經網絡模型和計算邏輯,通過使用Loss模塊和Optimizer接口為神經網絡模型添加損失函數和優化方式,利用Dataset模塊對數據進行處理以供模型的訓練和推導使用。
Low-Level Python API
第三層為低階API,主要包括張量定義、基礎算子、自動微分等模塊,用戶可使用低階API輕松實現張量定義和求導計算。例如用戶可通過Tensor接口自定義張量,使用ops.composite模塊下的GradOperation算子計算函數在指定處的導數。
昇騰計算,是基于昇騰系列處理器構建的全棧AI計算基礎設施及應用,包括昇騰Ascend系列芯片、Atlas系列硬件、CANN芯片使能、MindSpore AI框架、ModelArts、MindX應用使能等。
華為Atlas人工智能計算解決方案,是基于昇騰系列AI處理器,通過模塊、板卡、小站、服務器、集群等豐富的產品形態,打造面向“端、邊、云”的全場景AI基礎設施方案,涵蓋數據中心解決方案、智能邊緣解決方案,覆蓋深度學習領域推理和訓練全流程。
昇騰AI全棧如下圖所示:
下面簡單介紹每個模塊的作用:
Atlas系列產品:提供AI訓練、推理卡及訓練服務器(了解更多)。
CANN(異構計算架構):芯片使能、驅動層(了解更多)。
MindSpore(AI框架):全場景AI框架(了解更多)。
MindX SDK(昇騰SDK):行業SDK和應用解決方案(了解更多)。
ModelArts(AI開發平臺):華為云AI開發平臺(了解更多)。
MindStudio(全流程開發工具鏈):AI全流程開發IDE(了解更多)。
詳細信息請點擊華為昇騰官網。
歡迎每一個開發者都參與到昇思MindSpore的社區里,為全場景AI框架昇思MindSpore添磚加瓦!
昇思MindSpore 官網:可以全方位了解昇思MindSpore,包括安裝、教程、文檔、社區、資源下載和資訊欄目等(了解更多)。
昇思MindSpore 代碼:
MindSpore Gitee:2020年Gitee千萬開源項目中Gitee指數TOP1項目,一鍵三連(Watch/Star/Fork)即可隨時跟蹤MindSpore最新進展,參與issues討論、提交代碼!
MindSpore Github:Gitee的MindSpore代碼鏡像,習慣用github的開發者可以在這里進行MindSpore的學習,查看最新代碼實現!
昇思MindSpore 論壇:我們努力地服務好每一個開發者,在昇思MindSpore無論是入門開發者還是高手大咖都能找到知音,共同學習,共同成長!(了解更多)