0
本文作者: 黃善清 | 2019-04-11 10:05 |
雷鋒網(wǎng) AI 科技評論按:為了更好解決 TensorFlow 用戶在使用不同種類的硬件(GPU、TPU、移動設(shè)備)時(shí),由于多級別堆棧而導(dǎo)致的編譯器與運(yùn)行時(shí)錯(cuò)誤,谷歌近日開源了一個(gè)全新的中介碼與編譯器框架 MLIR。
在過去,若想解決多級別堆棧問題,則需要我們構(gòu)建新的軟硬件堆棧生成器,這也意味著必須為每個(gè)新路徑重新構(gòu)建優(yōu)化與轉(zhuǎn)換傳遞。
TensorFlow 能夠以多種不同的方式運(yùn)行,如:
將其發(fā)送至調(diào)用手寫運(yùn)算內(nèi)核的 TensorFlow 執(zhí)行器
將圖轉(zhuǎn)化為 XLA 高級優(yōu)化器 (XLA HLO) 表示,反之,這種表示亦可調(diào)用適合 CPU 或 GPU 的 LLVM 編輯器,或者繼續(xù)使用適合 TPU 的 XLA。(或者將二者結(jié)合?。?/span>
將圖轉(zhuǎn)化為 TensorRT、nGraph 或另一種適合特定硬件指令集的編譯器格式
將圖轉(zhuǎn)化為 TensorFlow Lite 格式,然后在 TensorFlow Lite 運(yùn)行時(shí)內(nèi)部執(zhí)行此圖,或者通過 Android 神經(jīng)網(wǎng)絡(luò) API (NNAPI) 或相關(guān)技術(shù)將其進(jìn)一步轉(zhuǎn)化,以在 GPU 或 DSP 上運(yùn)行
谷歌的 MLIR(或稱為多級別中介碼)是一種表示格式和編譯器實(shí)用工具庫,介于模型表示和低級編譯器/執(zhí)行器(二者皆可生成硬件特定代碼)之間,在生產(chǎn)質(zhì)量組件的支持下,能夠?qū)?yōu)化編譯器設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行全新探索。據(jù)了解,MLIR 深受 LLVM 的影響,并不折不扣地重用其許多優(yōu)秀理念,比如擁有靈活的類型系統(tǒng),可在同一編譯單元中表示、分析和轉(zhuǎn)換結(jié)合多層抽象的圖等——這些抽象包括 TensorFlow 運(yùn)算、嵌套的多面循環(huán)區(qū)域乃至 LLVM 指令和固定的硬件操作及類型。
MLIR 沒有眾所周知的固定或內(nèi)置的操作列表(無 “內(nèi)聯(lián)函數(shù)”)。方言可完全定義自定義類型,即 MLIR 如何對 LLVM IR 類型系統(tǒng)(擁有一流匯總)、域抽象(對量化類型等經(jīng)機(jī)器學(xué)習(xí) (ML) 優(yōu)化的加速器有著重要意義),乃至未來的 Swift 或 Clang 類型系統(tǒng)(圍繞 Swift 或 Clang 聲明節(jié)點(diǎn)而構(gòu)建)進(jìn)行建模。
另外值得一提的是,雖然 MLIR 充當(dāng) ML 的編譯器,但它同樣支持在編譯器內(nèi)部使用機(jī)器學(xué)習(xí)技術(shù)。MLIR 的擴(kuò)展性有助于探索代碼降階策略,并在抽象之間執(zhí)行逐步降階。
具體開源鏈接:
GitHub 代碼庫
https://github.com/tensorflow/mlir
教程
https://github.com/tensorflow/mlir/blob/master/g3doc/Tutorials/Toy/Ch-1.md
演講稿
https://drive.google.com/file/d/1hUeAJXcAXwz82RXA5VtO5ZoH8cVQhrOK/view
雷鋒網(wǎng) AI 科技評論雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。