轉載自:知乎
作者:金雪鋒
MindSpore在3月底開源后,一直忙于功能完善和內外部的應用推廣,現在終于有點時間可以停下來結合MindSpore的實踐和團隊一起總結對AI框架的一些思考,希望對大家有所幫助,也有助于大家去了解MindSpore,更加歡迎大家一起探討。
計劃開一個專欄,有一系列的文章,初步主題規劃包括:
- AI框架的演進趨勢和MindSpore的構想
- AI框架的圖層IR的分析
- 動靜態圖統一的思考
- 端邊云的框架如何統一
- 圖算融合的設計思考
- 自動算子生成可行嗎?
- 如果自研一個AI編程語言,應該長什么樣?
- 如何成為分布式并行原生的AI框架?
- AI與科學計算怎么結合?
- AI框架怎么使能AI責任?
…….等等
內容比較多,全部寫完要很長時間,希望自己有足夠的耐心堅持下去。
本篇是一個總體的介紹,主要是分析AI框架的發展趨勢,介紹一下MindSpore的構想
1、未來AI框架的發展趨勢是什么
AI框架的發展個人認為可以大致分為3個階段:
第一階段的代表是torch、theano以及Caffe,奠定了基于Python、自動微分、計算圖等基本設計思路。
第二階段的代表是TensorFlow、PyTorch,一個通過分布式訓練、多樣的部署能力在工業界廣泛使用,另外一個是提供動態圖能力,在靈活性上吸引了大量的研究者和算法工程師。
第三階段的方向是什么?目前看還沒有定型,我們看到Google也有多條技術路徑在探索,包括TF2.0,JAX、MLIR、Swift for TF等;有些在做動態圖和靜態圖的統一,有些在構建統一的IR基礎設施,還有些在探索新的表達方式等,總之還是百花齊放的狀態。
不管AI框架未來的發展方向是什么,AI框架的驅動力還是相對清晰,我們認為AI框架的驅動力主要是5個-“ABCDE”:
- Application+Bigdata:AI框架的Application就是AI的模型和算法,Bigdata就是AI模型需要的數據
- Chip:AI的芯片,代表AI的算法發展
- Developer:AI的算法研究者和算法工程師
- Enterprise:AI部署和AI責任
下面,我們想通過對AI框架的驅動因素的分析來討論一下AI框架的發展方向。
從應用和數據角度看AI框架的挑戰
- 模型和數據的規模和復雜度持續提升
今年5月,OpenAI發布GPT-3模型,千億參數量,數據集(處理前)45T,訓練一次的成本號稱接近500萬美金,超大模型不僅僅是算法和算力成本的挑戰,同時對AI框架的挑戰也是巨大,主要體現在三點,性能墻(內存、通信、計算利用率)、效率墻以及精度墻:
- 性能墻:大模型下,GPU和NPU的單卡(內存一般只有32G)肯定裝不下整個模型,傳統的數據并行是不夠的,未來內存復用、混合并行(數據并行/模型并行/pipeline并行)等技術的使用將會是常態,同時,混合并行的切分策略尋優是很困難的,不同的切分產生的通信量差異巨大,計算利用率也很不一樣,比如pipeline并行往往在計算利用率存在較大的挑戰,算子切分的并行在通信量的挑戰會很大,這些都需要AI框架來支持;最后在大規模并行訓練系統中,當性能要求越來越高時,數據預處理也會成為一個瓶頸,比如我們在ResNet50性能調優時發現,當單Step跑到17~18ms的時候,host數據處理的時間就跟不上了。
- 效率墻:混合并行策略如果讓算法工程師來手工確定的,這個門檻就會很高,既要懂算法,又要懂系統,怎么做到自動并行是關鍵。
- 精度墻:大規模模型訓練天生就是一個大Batchsize的訓練,怎么更好的收斂,達到精度要求,都是一個大的挑戰。
除了上面講的三點外,超大規模的訓練還面臨其他的挑戰,比如大規模集群的可用性、尾部時延、動態調度等等。
- 框架的負載從單一的深度學習模型向通用的張量可微計算演進
目前主要看到三個方向:
1)DNN與傳統機器學習結合,比如深度概率學習、圖神經網絡等,這一塊基本上業界的AI框架都已經支持。
2)AI與科學計算結合,看到業界在探索三個方向,一是AI建模替代傳統的計算模型,這個方向剛剛起步,進展還不是很多;二是AI求解,模型還是傳統的科學計算模型,但是使用神經網絡的方法來求解,這個方向已經有一定的進展,目前看到不少基礎的科學計算方程已經有對應的AI求解方法,比如PINNs、PINN-Net等,當然現在挑戰還很大,特別是在精度收斂方面,如果要在AI框架上AI求解科學計算模型,最大的挑戰主要在前端表達和高性能的高階微分;三是使用框架來加速方程的求解,就是科學計算的模型和方法都不變,但是與深度學習使用同一個框架來求解,其實就是把框架看成面向張量計算的分布式框架。
3)計算圖形相關的,類似Taichi這樣的語言和框架,提供可微物理引擎、可微渲染引擎等
從AI的芯片發展趨勢看AI框架的挑戰
AI芯片主要是兩種形態,一種是基于SIMT的GPU,另外一種是類SIMD的NPU,隨著NVIDIA A100的發布,我們看到兩種芯片架構在相互借鑒,相互融合:
- 大算力還是要靠SIMD(SIMT的靈活性雖然強,但是芯片的面積/功耗挑戰太大),Tensor Core的規模越來越大;
- 片內片間高速互聯;
- 多硅片,大內存封裝,x倍體積(特別是推理芯片)。
AI芯片的持續演進對AI框架也提出了許多關鍵的挑戰:
- 優化與硬件耦合度提升,圖算編譯一體化:圖層融合優化已經趨于收斂,需要和算子層聯動優化,子圖級和算子級的界限打破,基于Graph tuning的整體優化是目前的熱點;
- 多樣的執行方式:圖下沉模式和單算子調用模式混合,不同的情況下,可能采用不同的方式;
- 可編程性挑戰變大:由于有了大量的SIMD加速指令,不在是單純的SIMT編程模型,異構編程的挑戰變大
從算法工程師和開發者的角度看AI框架的趨勢
- 新的AI編程語言嘗試突破Python的限制
目前看到有代表性主要是Julia和Swift for TensorFlow
Julia的歷史較早,目前在科學計算領域已經有不錯的應用基礎,當前結合這些領域的積累,逐步進入AI和深度學習領域,宣稱的特點是動態語言的特征,靜態語言的性能,和Python比,比較有特色的地方包括:
- 類MATLAB的張量原生表達
- 多態的能力+動態類型推導/特化
3. IR的反射機制
所謂的IR反射機制是指,Julia的IR可以讓開發者做二次加工,以Julia的機器學習庫Flux+Zygote為例:
Flux是一個Julia上的擴展庫,定義基本的算子,如conv,pooling,bn等等,方便開發者基于Flux去定義機器學習模型;
Zygote基于Julia提供的IR反射機制實現了源到源的自動微分,在這個過程中,是不要改變Julia本身的。
與Julia相比,Swift for TensorFlow則完全是另外一套思路,他試圖從工業級開發的角度來找到差異化,包括靜態類型、高性能、與端側結合的易部署等。
從目前看盡管Julia和Swift都有些特色,但是短期內還很難撼動Python在AI領域的地位。
- AI編譯器成為框架的競爭焦點
AI編譯器目前看到有三個方向在發力,第一類是致力于動靜態圖統一的AI JIT能力,比如TorchScript、JAX等;第二類是偏向于面向芯片的優化,如XLA、TVM;第三類是想做AI編譯器的基礎設施,MLIR希望是提供MetaIR,成為構建AI編譯器的基礎,Relay/TVM則是想把編譯器接口開放出去支撐第三方框架。不過我們看到這三個方向都還存在比較大的挑戰。
AI JIT:Python的靈活性和動態性太強,動態shape好搞定,但是動態Type就難了,更不用說Python里面有大量非常靈活的數據結構的用法,一個動態圖想無縫的轉到靜態圖的確不是一件很容易的事情。
編譯加速:目前主要還是基于Pattern的算子融合和基于模板的算子生成技術,這里的瓶頸在于算子生成技術,因為算子融合的組合條件太多,基于模板無法做到完全枚舉,要提升整個編譯加速的泛化能力,下一個需要攻克的技術就是不需要模板的自動算子生成技術。
AI編譯器的基礎設施:MLIR在設計理念上確實是先進和宏大的,MLIR目標通過Dialect的擴展來支持各種領域編譯器,包括AI編譯器(圖層和算子層)。從進展看,MLIR在TF Lite的應用最快,主要是用作模型轉換工具。我們需要思考的是,MLIR帶來的好處究竟是什么?我想MLIR本身并不會打來框架性能和易用性的提升,主要還是重用和歸一,如LLVM的基礎結構CFG+BB、大量的優化等,問題是這些重用是否有利于AI圖層和算子層的編譯,個人的觀點,對于算子層來說MLIR+LLVM肯定是適用的,對于圖層就未必,LLVM雖然統一了許多編程語言的編譯器,但是優勢領域還是集中在靜態編譯領域,在JIT和VM領域,LLVM的優勢并不明顯,CFG+BB這樣的基礎架構未必適合需要自動微分/JIT這樣的AI圖層編譯器。
從AI的部署看AI框架的挑戰
從AI部署看,我們看到三個趨勢:
- 大模型在端側的部署,特別是語言型的模型
- 端云協同的場景逐步開始應用,這里主要有兩類,一類是云側訓練,端側做在線finetuning的增量學習,第二類是聯邦學習。
- AI無處不在,在IoT那些資源受限的設備上進行AI模型的部署。
目前看AI框架主要是兩個挑戰:
- AI框架在云側和端側能否做到架構上的統一,這里的統一主要是指IR格式,只有這樣才能做到云側訓練出來的模型,在端側可以平滑的進行增量學習,并方便地進行聯邦學習。
- AI框架能否做到可大可小,比如小到K級的底噪,能夠內置到IoT的設備里。
從AI的責任看AI框架的挑戰
AI的責任涉及的范圍非常廣,包括安全、隱私、公平、透明、可解釋。
作為AI業務的承載,AI框架需要具備使能AI責任的能力,目前AI框架需要解決的幾個挑戰:
1、對于AI責任的各個方面,缺乏通用的分析方法和度量體系,缺乏場景感知的自動化度量方法。
2、AI模型魯棒性、隱私保護技術、密態AI在實際場景下對模型性能影響較大。
3、AI的可解釋性還缺乏理論和算法支撐,難以給出人類友好的推理結果解釋。
2、MindSpore的構想
MindSpore作為一個新興的框架,大家經常問的一個問題是他的差異化在哪里?
結合前面分析的AI框架的驅動力和挑戰,我們希望MindSpore在5個方向上引領AI框架的演進:
- Beyond AI:從深度學習框架演進到通用張量可微計算框架
MindSpore會提供一個更通用的AI編譯器,為支持更多的應用類型提供可能性。
- 分布式并行原生(Scale out):從手工并行演進到自動并行
MindSpore在支持大規模訓練方面除了性能和擴展性好外,更重要的是想降低這一塊的門檻,讓分布式訓練變得更加簡單。
- 圖算深度融合(Scale up):從圖算分離優化演進到圖算聯合優化
MindSpore提供圖算聯合優化、自動算子生成、深度圖優化等關鍵技術,充分發揮AI芯片的算力。
- 全場景AI:從端云分離架構演進到端云統一架構
MindSpore的云側框架和端側框架做到統一架構,方便云端訓練/端側finetuing或者端云協同的聯邦學習
- 企業級可信能力:從消費級AI演進到企業級AI
MindSpore會內置對抗性訓練、差分隱私、密態AI、聯邦學習以及可解釋AI等能力。
當然,軟件架構都是持續演進的,很少有技術能夠做到獨門絕技,MindSpore也希望和業界其他框架在正確的方向上一起進步。
同時,MindSpore社區也對外發布了10大課題,邀請開發者一起參與創新。具體參見鏈接:https://github.com/mindspore-ai/community/tree/master/working-groups/research
最后,簡單介紹一下MindSpore的高層設計
MindSpore主要分為四層:
- MindSpore Extend:這個是MindSpore的擴展包,現在的數量還比較少,希望未來有更多的開發者來一起貢獻和構建
- MindSpore的表達層:MindExpress是基于Python的前端表達,未來我們也計劃陸續提供C/C++、Java等不同的前端;MindSpore也在考慮自研編程語言前端-倉頡,目前還處于預研階段;同時,我們內部也在做與Julia這些第三方前端的對接工作,引入更多的第三方生態。
- MindSpore的編譯優化層:MindCompiler是我們圖層的核心編譯器,主要基于端云統一的MindIR實現三大功能,包括硬件無關的優化(類型推導/自動微分/表達式化簡等)、硬件相關優化(自動并行、內存優化、圖算融合、流水線執行等)、部署推理相關的優化(量化/剪枝等);MindAKG是MindSpore的自動算子生成編譯器,目前還在持續完善中。
- MindSpore全場景運行時:這里含云側、端側以及更小的IoT。
同時MindSpore也提供了面向AI責任的MindArmour,以及面向數據處理/可視化/可解釋的MindData。
MindSpore是一個新生的開源項目,今年3月底剛開源,本文介紹的構想更偏向MindSpore的規劃,其中有不少功能還沒有完善,許多功能還不好用,甚至還有些功能處于前期研究階段,希望開發者們能一起參與MindSpore社區,多提問題和意見,共建MindSpore社區。
MindSpore官網:https://www.mindspore.cn/
MindSpore論壇:https://bbs.huaweicloud.com/forum/forum-1076-1.html
代碼倉地址:
Gitee-https://gitee.com/mindspore/mindspore
GitHub-https://github.com/mindspore-ai/mindspore
官方QQ群: 871543426
推薦專欄文章
- OCR中文項目綜合實踐(CTPN+CRNN+CTC Loss原理講解)
- 【項目實踐】多人姿態估計實踐(代碼+權重=一鍵運行)
- 【項目實踐】從零開始學習SSD目標檢測算法訓練自己的數據集(附注釋項目代碼)
更多嵌入式AI算法部署等請關注極術嵌入式AI專欄。
審核編輯:符乾江
-
嵌入式系統
+關注
關注
41文章
3614瀏覽量
129631 -
人工智能
+關注
關注
1793文章
47590瀏覽量
239486
發布評論請先 登錄
相關推薦
評論