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