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