如果你正在使用深度學(xué)習(xí)工具進(jìn)行科研或工作,一定會依賴深度學(xué)習(xí)的框架,今天我們一起討論“Deep Learning Framework”。我們先一起看一下英偉達(dá)對Framework的定義。“Deep learning frameworks offer building blocks for designing, training and validating deep neural networks, through a high level programming interface. Every major deep learning framework such as PyTorch, TensorFlow, and JAX rely on Deep Learning SDK libraries to deliver high-performance multi-GPU accelerated training. As a framework user, it's as simple as downloading a framework and instructing it to use GPUs for training.' 參考前期的Deep Learning由“淺”變“深”,天天向上,從感知機到多層前饋網(wǎng)絡(luò),從BP算法到卷積核,到處都包含各種各樣的數(shù)學(xué)算法,而深度學(xué)習(xí)框架正是一種庫和工具,包含了常用算法和計算過程,給開發(fā)者提供構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的數(shù)學(xué)操作。AI框架把復(fù)雜的數(shù)學(xué)表達(dá)轉(zhuǎn)換成計算機可識別的計算圖,這種對整體開發(fā)流程的封裝,讓研究人員和工程師只需要了解神經(jīng)網(wǎng)絡(luò)中各種'計算'的目的和各種'算法”的邏輯即可。針對實際科研項目或?qū)嶋H應(yīng)用場景時,開發(fā)者可以把有限的精力都專注于的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)的設(shè)計和優(yōu)化上,如訓(xùn)練參數(shù)、增加自己需要的Layer、或者改良分類器等,大大降低了使用者入場的門檻,提高生產(chǎn)效率。框架避免了大家重復(fù)造輪子,而去琢磨“造車子”這樣的更有價值的事。 如前面討論框架就是有許多常用的函數(shù)或運算(如矩陣乘法等)的庫,這些程序庫可以用C/C /Python等編程,可以在Linux、Windows、Mac OS不同的操作系統(tǒng)上運行。目前大家常用的不同編程框架的本質(zhì)是很類似,通常都由以下幾部分組成。- 張量對象:張量就是一組多維的數(shù)據(jù),能涵蓋各種數(shù)據(jù)的形式,不論要處理的數(shù)據(jù)是天氣、股票、人體生理指標(biāo)、語音、圖像還是視頻,都可以用不同維度的張量表示。在所有的張量里最常用的就是二維張量,即矩陣。
- 對張量的運算:基于神經(jīng)網(wǎng)絡(luò)的機器學(xué)習(xí)在本質(zhì)上是對輸入數(shù)據(jù)的一系列矩陣運算、卷積運算和非線性運算。這些常用的運算例如矩陣乘法、非線性處理等都可以成為程序庫里的一個運算或函數(shù)。當(dāng)我們調(diào)用這個函數(shù)時,只需要把該填的參數(shù)填進(jìn)去,例如矩陣的大小和內(nèi)容,而不必再自己寫矩陣的具體運算。
- 運算流程圖和程序優(yōu)化:許多編程框架都提供可視運算流程圖,這個工具可以把一個神經(jīng)網(wǎng)絡(luò)的全部運算用框圖的方法畫出來,框圖中的每個節(jié)點就是程序庫中的一個函數(shù)或運算,這樣整個運算非常直觀,也容易找到程序漏洞。對于一個復(fù)雜的程序,用可視流程圖方法畫出來后有全局觀,很容易優(yōu)化。
- 自動求導(dǎo)器:在神經(jīng)網(wǎng)絡(luò)訓(xùn)練時最復(fù)雜的計算就是把輸出誤差通過反向傳播,用最陡梯度法來調(diào)整網(wǎng)絡(luò)各層的加權(quán)系數(shù)直至輸出誤差最小。這個計算是一個連鎖的在網(wǎng)絡(luò)各層對權(quán)重系數(shù)集求導(dǎo)數(shù)的計算,在大部分的編程框架中,這個連鎖求導(dǎo)被打包成一個運算函數(shù)。在把運算流程圖畫出來以后,只要調(diào)用執(zhí)行“訓(xùn)練”這個運算,就可以得出訓(xùn)練好的網(wǎng)絡(luò)參數(shù)。
- 針對GPU的線性代數(shù)運算優(yōu)化:GPU特點是可以執(zhí)行大量的并行計算,線性代數(shù)中的運算許多都是矩陣運算,通過優(yōu)化讓運算在硬件中充分并行。
(2)開發(fā)者需要“易用”的框架,很多“軟需求”變成“常規(guī)需求” 深度學(xué)習(xí)框架能屏蔽底層硬件復(fù)雜繁瑣的使用方式,提供簡單應(yīng)用的功能函數(shù),方便開發(fā)者更好的利用機器資源,完成自己的任務(wù)。對于廣大開發(fā)者,要充分降低使用門檻,對于一個框架很多的“軟需求”就變成了“常規(guī)需求”,譬如易用,高效,完備(算子、模型、配套工具鏈、文檔、案例),一個新的框架在這些方面應(yīng)該沒有明顯的短板。以國內(nèi)百度的深度學(xué)習(xí)框架Paddle為例子,它開源的框架產(chǎn)品里包括- 開發(fā)套件 訓(xùn)練品平臺:包括核心框架(Paddle)、分布式訓(xùn)練(API Fleet)、多任務(wù)學(xué)習(xí)框架(PALM)、云上任務(wù)提交工具PaddleCloud,有了這些,開發(fā)者可以開始進(jìn)行開發(fā)、訓(xùn)練模型了。
- 模型庫:目標(biāo)檢測(PaddleDetection),PaddleHelix(生物計算),PaddleOCR(文本識別)等,熱門模型如ResNet、Yolo、Deeplab等都可以在其中找到。
- 輔助工具:自動化深度學(xué)習(xí)工具(AutoDL) 、聯(lián)邦學(xué)習(xí)工具(PaddleFL) 、可視化分析工具(VisualDL)、全流程開發(fā)工具(PaddleX)、模型壓縮工具(PaddleSlim)。
- 推理部署工具:推理庫(Paddle Inference),服務(wù)化部署框架(Paddle Serving),輕量化推理引擎(Paddle Lite)等。
- 文檔 社區(qū):官方教程,官方文檔,應(yīng)用案例,飛槳開發(fā)者技術(shù)專家、飛槳領(lǐng)航團(tuán)、飛槳博士會、深度學(xué)習(xí)工程師認(rèn)證、技術(shù)論壇。
可以看到,一款成熟的深度學(xué)習(xí)框架產(chǎn)品,不僅需要包括模型從訓(xùn)練到落地所需的主程序、模型庫、輔助工具、開發(fā)平臺等,也需要良好的文檔、活躍的社區(qū)、精彩的課程,這樣子才能夠吸引更多的開發(fā)者入駐,繁榮生態(tài)。
看看這些主流框架背后的大公司,我們就知道一定有很多故事,以后我們慢慢討論。框架 | 背后的公司 | 開源時間 |
Tensorflow | Google | 2015年11月 |
CNTK | 微軟 | 2016年1月 |
MXNet | Amazon | 2016年5月 |
Pytorch | Facebook | 2017年1月 |
MXNet | Amazon | 2016年5月 |
Caffe | 加州大學(xué)伯克利分校 | Caffe2于2018年合入Pytorch |
Onnx | 微軟,亞馬遜 ,Facebook 和 IBM 等公司共同開發(fā) | 2020年12月 |
PaddlePaddle | 百度 | 2018年7月 |
MindSpore | 華為 | 2020年3月 |
OneFlow | 一流科技 | 2020年7月 |
4、老美為啥愛做框架和標(biāo)準(zhǔn)?
以前有幾年參與過IEEE標(biāo)準(zhǔn)制定的工作,后來總結(jié)IEEE的運作規(guī)則,有這12個字“靠臉吃飯、多勞多得、官商勾結(jié)”。所謂“靠臉吃飯”是指,“老人”和“大公司”在標(biāo)準(zhǔn)組織中有強大的話語權(quán)和運作能力,而且公司實力和人際關(guān)系網(wǎng)影響了技術(shù)(即標(biāo)準(zhǔn)演進(jìn))的態(tài)勢均衡;所謂“多勞多得”是指,在標(biāo)準(zhǔn)組織中,只有“多勞”才能“多得”,你干了很多技術(shù)分析、組織了很多熱點討論、寫了很多的文檔,只有做了這些持續(xù)的投入(最好還要爭取到職位),才能獲得利益保障(即你的標(biāo)準(zhǔn)技術(shù)訴求);所謂“官商勾結(jié)”是指,標(biāo)準(zhǔn)組織不是純粹的學(xué)術(shù)組織,每一項運作和決策都有背后的商業(yè)訴求影響,理解不同公司和組織的商業(yè)訴求才能理解標(biāo)準(zhǔn)方向,你不要天真的以為IEEE是一個純粹的工程師討論技術(shù)的組織,這里里外外也包含了很多商業(yè)利益的。 我們回到深度學(xué)習(xí)框架上來,老美做框架、做標(biāo)準(zhǔn)、做體系的能力是非常強的,思路是非常清晰的,打法也是非常套路化的。就和做標(biāo)準(zhǔn)一樣,你別認(rèn)為框架開源就是一個純技術(shù)的事了。你用這些開源框架進(jìn)行開發(fā),多好啊,多省事啊,殊不知“免費的才是最貴的”,別人可不傻,這些大公司也不是做慈善的。你用了他的框架開發(fā)產(chǎn)品,也就是在給他的產(chǎn)品添磚加瓦,幫助他不斷完善;你在他的社區(qū)里灌水提問題,幫他解bug,也幫他聚集了人氣;你在賣產(chǎn)品時,宣傳支持/兼容XXX框架,也是幫他打了廣告。而且目前所有的框架開源了都是遵循Apache2.0協(xié)議,在這個協(xié)議的規(guī)則下,任何人都可以使用Apache2.0協(xié)議許可下的軟件,并且可以用于商業(yè);但任何人都可以任意修改原有的軟件,并將修改后的軟件申請商標(biāo)和專利,但修改的軟件必須注明使用了Apache 2.0的許可,必須明確標(biāo)示修改的部分。別人用“開源免費”請你進(jìn)來,幫你獲取利益的時候也通過很多的方式從你身上獲得利益。總之,天下是沒有免費的午餐的。5、期待國產(chǎn)深度學(xué)習(xí)框架能與TensorFlow,Pythroch一較高下 中國目前深度學(xué)習(xí)研究和應(yīng)用主要還主要依賴于國外平臺,時刻面臨著卡脖子的風(fēng)險,中國需要有自主化人工智能全產(chǎn)業(yè)鏈。因此作為產(chǎn)業(yè)鏈上很重要的一環(huán),如果沒有自己的框架,未來風(fēng)險很高的,就像做芯片設(shè)計的缺EDA軟件一樣,如果美國說你不能用了,那可能你就玩不了了!除了上面介紹百度的Paddle,清華的計圖、曠世的天元、華為的MindSpore、一流科技的OneFlow等開源框架紛紛推出,給走在國產(chǎn)化道路上的中國開發(fā)者打了強心針,如果我們有了自己的“輪子”,我們就敢安安心心造自己的“車子”。 但是,重復(fù)造輪子可以解決“卡脖子”問題,卻無法形成超越。做國產(chǎn)化的開源架構(gòu)當(dāng)然不能僅僅“生搬硬套”,結(jié)合實際應(yīng)用做創(chuàng)新,在未來發(fā)展方向做創(chuàng)新,在局部性能上通過創(chuàng)新取得領(lǐng)先,這些應(yīng)該是國產(chǎn)化框架應(yīng)有的理想。相信Deeplearing Framework上一定還能找到創(chuàng)新點?就像幾年前,本來TensorFlow看上去已經(jīng)一統(tǒng)天下了,然后PyTorch來一個動態(tài)圖再加上易用性好像就找到突破點了。我們期待創(chuàng)新,至于是否能形成燎原之勢,是否能真正與TensorFlow、PyTorch一較高低,就要看每一位開發(fā)者投票了。 除了技術(shù)以外,生態(tài)建設(shè)是應(yīng)該更加要關(guān)注的一點。看看TensorFlow的下載量、看看學(xué)生都在用PyTorch做科研,國產(chǎn)化框架就會覺得壓力很大,生態(tài)建設(shè)是漫漫長路,框架的表達(dá)能力是否能更強?用戶上手的速度是否能更快?只有把麻煩留給自己,把便捷留給用戶,才能慢慢獲得口碑。作為很多的普通開發(fā)者,所謂的性能指標(biāo)領(lǐng)先對我們來說有時候是看熱鬧,但是,從下載安裝到場景部署整個鏈條上的易用性、有體系有邏輯的支持文檔、對于不同種類和款型芯片能夠良好支持、有問必答的社區(qū)環(huán)境等等,這些才是能真正綁住數(shù)量眾多普通開發(fā)者的。 后發(fā)劣勢、創(chuàng)新點瓶頸,生態(tài)建設(shè),這三座大山橫在國產(chǎn)化框架開發(fā)者面前。但我們也相信應(yīng)對未來大量的不確定性,供應(yīng)安全永遠(yuǎn)都是最大的風(fēng)險,因此夯實產(chǎn)業(yè)基礎(chǔ),擼起袖子自己造'輪子',這樣心里才踏實。6、關(guān)于國產(chǎn)AI芯片對各種框架的支持:
除了框架的國產(chǎn)化。那么國產(chǎn)芯片去支持各種框架,包括國產(chǎn)框架和國外的框架,特別是最流行的如TensorFlow、PyTorch、Caffe、ONNX,國產(chǎn)的如飛槳等框架的支持程度也是很重要的。
國產(chǎn)的AI芯片支持的框架越多,其可用場景越多,會被更多基于各種框架開發(fā)算法的用戶去使用。
有的廠家更多的是依賴自己強大的投入,有一套自己的完整的編譯環(huán)境,適配主流框架。讓自己的芯片能夠承載更多的框架。例如華為、英偉達(dá)、寒武紀(jì)等廠家,從芯片到工具鏈、芯片、框架、算法,全部自己開發(fā)。但是框架和算法日新月異,不斷的推陳出新,閉環(huán)開發(fā)會導(dǎo)致芯片無法全方位的跟得上軟件發(fā)展步伐。
算能公司推出“通用架構(gòu)TPU編譯工具鏈”TPU-MLIR,最大的特點就是“開源”,特別是匹配國產(chǎn)框架的發(fā)展,助力國產(chǎn)框架的適配性。
TPU-MLIR是一個專注于AI芯片的TPU編譯器開源工程。該工程中提供了一套完整的工具鏈,用于將不同框架下預(yù)訓(xùn)練過的神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)化為可以在TPU上高效運算的二進(jìn)制文件 bmodel。
開放源碼
TPU-MLIR 工程的所有代碼都已開源,向所有用戶免費開放。用戶在使用本工程的同時也可以參與到該工程的完善與改進(jìn)工作中,共同創(chuàng)造出一款站在時代前沿的 AI編譯器。
入手簡單
通過閱讀開發(fā)手冊與工程中已包含的樣例,用戶可以快速地了解模型轉(zhuǎn)化流程與原理,從而入門該工程。并且,TPU-MLIR 基于當(dāng)前主流的編譯器工具庫 MLIR 進(jìn)行模型化設(shè)計,用戶也可以透過該工程來學(xué)習(xí) MLIR 的應(yīng)用,知識點豐富,應(yīng)用面廣泛。
使用便捷
該工程目前已經(jīng)提供了一套完備的工具鏈,用戶可以直接通過現(xiàn)有接口快速地完成模型的轉(zhuǎn)化工作,節(jié)約大量投入在適配不同網(wǎng)絡(luò)的過程中所花費的時間成本。
多框架支持
目前 TPU-MLIR 已經(jīng)支持 tflite 以及 onnx 格式,該類格式的模型可以使用本工程直接進(jìn)行模型轉(zhuǎn)化。此外,依托 onnx 當(dāng)前完善的生態(tài),大部分利用主流深度學(xué)習(xí)框架(如 PyTorch 與 Caffe 等)開發(fā)的模型也都可以通過先轉(zhuǎn)換為 onnx 模型間接地完成 bmodel 轉(zhuǎn)化。
精度與效率并存
TPU-MLIR 支持 INT8 對稱和非對稱量化,在大幅提高性能的同時又結(jié)合原始開發(fā)企業(yè)的 Calibration 與 Tune 等技術(shù)保證了模型的高精度。不僅如此,TPUMLIR 中還運用了大量圖優(yōu)化和算子切分優(yōu)化技術(shù),以保證模型的高效運行。
完善文檔支持
一個好的開源項目必須配套完善的用戶文檔,才能讓用戶以最小的代價入門,一起參與進(jìn)來共同貢獻(xiàn),同時如果配合完善的用戶文檔,貢獻(xiàn)者也可以自己探索一些不常用的模塊,最大限度地提高大家協(xié)作的效率。
大量模型轉(zhuǎn)換,把各種框架運行在算能AI芯片BM1684上的課程實例已經(jīng)上傳至硬十課堂網(wǎng)站。全部免費公開。