天天看點

多級别堆棧不是問題!谷歌開源全新中介碼與編譯器架構 MLIR

雷鋒網 AI 科技評論按:為了更好解決 TensorFlow 使用者在使用不同種類的硬體(GPU、TPU、移動裝置)時,由于多級别堆棧而導緻的編譯器與運作時錯誤,谷歌近日開源了一個全新的中介碼與編譯器架構 MLIR。

在過去,若想解決多級别堆棧問題,則需要我們建構新的軟硬體堆棧生成器,這也意味着必須為每個新路徑重新建構優化與轉換傳遞。

多級别堆棧不是問題!谷歌開源全新中介碼與編譯器架構 MLIR

TensorFlow 能夠以多種不同的方式運作,如:

将其發送至調用手寫運算核心的 TensorFlow 執行器

将圖轉化為 XLA 進階優化器 (XLA HLO) 表示,反之,這種表示亦可調用适合 CPU 或 GPU 的 LLVM 編輯器,或者繼續使用适合 TPU 的 XLA。(或者将二者結合!)

将圖轉化為 TensorRT、nGraph 或另一種适合特定硬體指令集的編譯器格式

将圖轉化為 TensorFlow Lite 格式,然後在 TensorFlow Lite 運作時内部執行此圖,或者通過 Android 神經網絡 API (NNAPI) 或相關技術将其進一步轉化,以在 GPU 或 DSP 上運作

谷歌的 MLIR(或稱為多級别中介碼)是一種表示格式和編譯器實用工具庫,介于模型表示和低級編譯器/執行器(二者皆可生成硬體特定代碼)之間,在生産品質元件的支援下,能夠對優化編譯器設計與實作進行全新探索。據了解,MLIR 深受 LLVM 的影響,并不折不扣地重用其許多優秀理念,比如擁有靈活的類型系統,可在同一編譯單元中表示、分析和轉換結合多層抽象的圖等——這些抽象包括 TensorFlow 運算、嵌套的多面循環區域乃至 LLVM 指令和固定的硬體操作及類型。

MLIR 沒有衆所周知的固定或内置的操作清單(無 “内聯函數”)。方言可完全定義自定義類型,即 MLIR 如何對 LLVM IR 類型系統(擁有一流彙總)、域抽象(對量化類型等經機器學習 (ML) 優化的加速器有着重要意義),乃至未來的 Swift 或 Clang 類型系統(圍繞 Swift 或 Clang 聲明節點而建構)進行模組化。

另外值得一提的是,雖然 MLIR 充當 ML 的編譯器,但它同樣支援在編譯器内部使用機器學習技術。MLIR 的擴充性有助于探索代碼降階政策,并在抽象之間執行逐漸降階。

具體開源連結:

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

via https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d

雷鋒網 AI 科技評論雷鋒網(公衆号:雷鋒網)

繼續閱讀