MLIR中間表示和編譯器框架


MLIR中間表示和編譯器框架

TensorFlow生態系統包含許多在軟件和硬件堆棧的多個級別上運行的編譯器和優化器。作為TensorFlow的日常用戶,使用不同類型的硬件(GPU,TPU,移動設備)時,此多級堆棧可能會表現為難以理解的編譯器和運行時錯誤。

TensorFlow可以通過多種不同方式運行:

  • 發送到TensorFlow執行程序,該執行程序調用手寫的操作內核
  • 轉換為XLA高級優化器表示形式(XLA HLO),后者又可以調用用於CPU或GPU的LLVM編譯器,或者繼續將XLA用於TPU。(或兩者的某種組合!)
  • 轉換為TensorRTnGraph或另一種針對特定於硬件的指令集的編譯器格式
  • 將圖形轉換為TensorFlow Lite格式,然后在TensorFlow Lite運行時內部執行,或者進一步轉換為通過Android Neural Networks API(NNAPI)或相關技術在GPU或DSP上運行。

更復雜的路徑,包括每層內的多輪優化,例如Grappler框架可優化TensorFlow中的張量布局和操作。

眾多的編譯器和表示實現大大提高了性能,但這種異構世界可能會給最終用戶帶來問題,例如在這些系統之間的邊界處產生令人困惑的錯誤消息。同樣,新的硬件和軟件堆棧創建,必須為每個新路徑重建優化和轉換過程。

MLIR,或多級中間層表示。這是表示形式和編譯器實用程序的庫,位於模型表示和生成特定於硬件的代碼的低級編譯器/執行器之間。借助MLIR,在生產質量組件的支持下,實現優化編譯器設計和實現方面的新穎探索。

MLIR引起許多團體的關注,包括:

  • 優化機器學習模型的性能和內存消耗的編譯器研究和實施
  • 硬件制造商尋找一種將其硬件連接到TensorFlow的方法,例如TPU,手機便攜式神經硬件以及其它定制ASIC。
  • 編寫語言綁定時,利用優化編譯器和硬件加速的優勢。

什么是MLIR?

MLIR本質上是用於現代優化編譯器的靈活基礎架構。由一個中間表示(IR)規范和一個用於對該表示執行轉換的代碼工具包組成。(按照編譯器的說法,從較高級別的表示形式轉換為較低級別的表示形式時,這些轉換可以稱為“降低lowerings”。)

MLIR受LLVM的影響很大,重用了它的許多好思想。具有靈活的類型系統,允許在同一編譯單元中結合多個抽象級別來表示,分析和轉換圖形。這些抽象包括TensorFlow操作,嵌套的多面循環區域,LLVM指令,以及固定的硬件操作和類型。

MLIR Dialects

為了分離不同的硬件和軟件目標,MLIR提供了“方言”,其中包括:

  • TensorFlow IR,代表TensorFlow中的所有可能事物
  • XLA HLO IR,旨在利用XLA的編譯功能(輸出到TPU)
  • 實驗仿射方言,重點關注多面體表示和優化
  • LLVM IR,與LLVM表示之間具有1:1映射,允許MLIR通過LLVM發出GPU和CPU代碼
  • TensorFlow Lite,轉換為在移動平台上運行的代碼

每個方言由一組已定義的算子組成,這些算子具有不變的內容,例如:“一個二進制運算符,輸入和輸出具有相同的類型。”
添加到MLIR

MLIR沒有固定/內置的全局已知算子列表(沒有“內部”)。方言可以定義完全自定義的類型,這就是MLIR如何建模LLVM IR類型系統(具有一流的聚合),對ML優化的加速器(如量化類型)重要的域抽象,甚至是Swift或Clang類型系統(在以后圍繞Swift / Clang聲明節點構建)。

如果要連接新的低級編譯器,則將創建一個新的方言以及TensorFlow Graph方言和方言之間的降低。這為硬件和編譯器制造商鋪平了道路。可以將同一模型中的不同級別的方言作為目標。較高級別的優化器將尊重IR的不熟悉部分,並等待較低級別的IR處理。

對於編譯器研究和框架制造商來說,MLIR允許在各個層次上進行轉換,甚至可以在IR中定義自己的算子和抽象-從而可以對要解決的問題領域進行最佳建模。這樣,與LLVM相比,MLIR更像是純編譯器基礎結構

雖然MLIR充當ML的編譯器,使機器學習技術也可以在編譯器中使用!這一點特別重要,因為開發數值庫的工程師的縮放比例與ML模型或硬件的多樣化不一樣。MLIR的可擴展性促進了代碼降低策略的探索和跨抽象的漸進式降低。

在TensorFlow 2.0中,圖可以是隱式的;執行的操作可以單獨,成組或作為完整圖形(例如Keras順序)運行。無論如何,這些圖或圖片段必須進行優化和執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM