TPU-MLIR正式開(kāi)源!跟算能一起打造下一代深度學(xué)習編譯器
?
近幾年,以深度學(xué)習為代表的技術(shù)發(fā)展迅猛,深度神經(jīng)網(wǎng)絡(luò )廣泛應用于各行各業(yè)。
一、算能TPU編譯器開(kāi)源,架起算力硬件和深度學(xué)習框架的橋梁
開(kāi)發(fā)者使用TensorFlow、PyTorch、PaddlePaddle等深度學(xué)習框架可以快速訓練出自己的模型,但這些模型想要部署到TPU、Graphic等終端算力設備時(shí),需要將模型中的計算圖/算子等輸出為低級的機器語(yǔ)言更快地執行,這時(shí)編譯器就有用武之地了。
作為框架和硬件之間的橋梁,編譯器可以實(shí)現一次代碼開(kāi)發(fā),各種算力處理器復用的目標。最近,算能也將自己研發(fā)的TPU編譯工具 TPU-MLIR 開(kāi)源了。項目地址:https://github.com/sophgo/tpu-mlir

?
TPU-MLIR是一個(gè)專(zhuān)注于處理器的TPU編譯器開(kāi)源工程,提供了一套完整的工具鏈,可以將不同框架下預訓練過(guò)的深度學(xué)習模型,轉化為可以在TPU上運行的二進(jìn)制文件bmodel,從而實(shí)現更高效的推理。
MLIR(Multi-Level Intermediate Representation,多級的中間表示)是一種用來(lái)構建可重用和可擴展編譯基礎設施的新方法,由LLVM原作者Chris Lattner在Google工作時(shí)期開(kāi)發(fā),MLIR目的是做一個(gè)通用、可復用的編譯器框架,解決軟件碎片化,改進(jìn)異構硬件的編譯,顯著(zhù)減少構建特定領(lǐng)域編譯器的成本。
TPU-MLIR站在MLIR巨人的肩膀上打造,現在整個(gè)工程的所有代碼都已開(kāi)源,向所有用戶(hù)免費開(kāi)放。
二、精度與效率并存,TPU-MLIR實(shí)現主流框架全支持
TPU-MLIR相對其他編譯工具,有以下幾個(gè)優(yōu)勢:
簡(jiǎn)單:通過(guò)閱讀開(kāi)發(fā)手冊與工程中已包含的樣例,用戶(hù)可以了解模型轉化流程與原理,快速上手。并且,TPU-MLIR基于當前主流的編譯器工具庫MLIR進(jìn)行設計,用戶(hù)也可以通過(guò)它來(lái)學(xué)習MLIR的應用。
便捷:該工程目前已經(jīng)提供了一套完備的工具鏈,用戶(hù)可以直接通過(guò)現有接口快速地完成模型的轉化工作,不用自己適配不同的網(wǎng)絡(luò )。
通用:目前TPU-MLIR已經(jīng)支持TFLite以及onnx格式,這兩種格式的模型可以直接轉化為T(mén)PU可用的bmodel。如果不是這兩種格式呢?實(shí)際上onnx提供了一套轉換工具,可以將現在市面上主流的深度學(xué)習框架編寫(xiě)的模型轉為onnx格式,然后就能繼續轉為bmodel了。

TPU- MLIR的工作流
?
精度與效率并存:模型轉換的過(guò)程中有時(shí)會(huì )產(chǎn)生精度損失,TPU-MLIR支持INT8對稱(chēng)和非對稱(chēng)量化,在大幅提高性能的同時(shí)又結合原始開(kāi)發(fā)企業(yè)的Calibration與Tune等技術(shù)保證了模型的高精度。不僅如此,TPU- MLIR中還運用了大量圖優(yōu)化和算子切分優(yōu)化技術(shù),以保證模型的高效運行。
目前 TPU-MLIR工程已被應用在算能研發(fā)的最新一代深度學(xué)習處理器BM1684x 上,搭配上處理器本身的高性能ARM內核以及相應的SDK,能夠實(shí)現深度學(xué)習算法的快速部署。
三、實(shí)現極致性?xún)r(jià)比,打造下一代編譯器
神經(jīng)網(wǎng)絡(luò )模型想要支持Graphic計算,就要把神經(jīng)網(wǎng)絡(luò )模型里面的算子開(kāi)發(fā)一個(gè)Graphic版本,如果要適配TPU,又要把每個(gè)算子開(kāi)發(fā)一個(gè)TPU的版本,還有的場(chǎng)景需要適配同種算力處理器不同型號的產(chǎn)品,每次都要手工編譯的話(huà),會(huì )非常耗時(shí)耗力。
編譯器正是為了解決上面的問(wèn)題而生,TPU-MLIR的一系列自動(dòng)優(yōu)化工具可以節省大量的人工優(yōu)化時(shí)間,讓處理器上開(kāi)發(fā)的模型可以平滑、零成本地移植到TPU上,實(shí)現極致性?xún)r(jià)比。
隨著(zhù)transformer等神經(jīng)網(wǎng)絡(luò )結構的出現,新的算子不斷增加,不僅需要實(shí)現出來(lái),還需要結合后端硬件的特點(diǎn)進(jìn)行優(yōu)化和測試,盡量將硬件的性能壓榨到極致,這也導致算子的復雜度越來(lái)越高,調優(yōu)難度變大,而且并不是所有的算子都能通過(guò)一個(gè)工具有效生成,整個(gè)編譯器領(lǐng)域仍然處于一個(gè)不斷完善的狀態(tài)。
TPU- MLIR也需要持續的研發(fā)投入,更多的處理器支持,代碼生成性能優(yōu)化,運行時(shí)調度優(yōu)化等環(huán)節還有很大提升空間,用戶(hù)在使用本工程的同時(shí)也可以參與到該項目的完善與改進(jìn)工作中,跟算能一起打造一款站在時(shí)代前沿的編譯器!
?