
一 導讀
二 BladeDISC是什麼
1 主要特性
-
多款前端框架支援:TensorFlow,PyTorch -
多後端硬體支援:CUDA,ROCM,x86
-
完備支援動態shape語義編譯 -
支援推理及訓練
-
輕量化API,對使用者通用透明 -
支援外掛模式嵌入宿主框架執行,以及獨立部署模式
三 深度學習編譯器的背景
1 AI浪潮與晶片浪潮共同催生——從萌芽之初到蓬勃發展
框架效能最佳化在模型泛化性方面的需求

AI框架在硬體泛化性方面的需求
AI系統平臺對前端AI框架泛化性方面的需求
2 什麼是深度學習編譯器

3 距離大規模應用面臨的瓶頸問題
易用性
-
與前端框架對接的問題。不同框架對深度學習任務的抽象描述和API介面各有不同,語義和機制上有各自的特點,且作為編譯器輸入的前端框架的運算元型別數量呈開放性狀態。如何在不保證所有運算元被完整支援的情況下透明化的支援使用者的計算圖描述,是深度學習編譯器能夠易於為使用者所廣泛使用的重要因素之一。
-
動態shape問題和動態計算圖問題。現階段主流的深度學習編譯器主要針對特定的靜態shape輸入完成編譯,此外對包含control flow語義的動態計算圖只能提供有限的支援或者完全不能夠支援。而AI的應用場景卻恰恰存在大量這一類的任務需求。這時只能人工將計算圖改寫為靜態或者半靜態的計算圖,或者想辦法將適合編譯器的部分子圖提取出來交給編譯器。這無疑加重了應用深度學習編譯器時的工程負擔。更嚴重的問題是,很多工型別並不能透過人工的改寫來靜態化,這導致這些情況下編譯器完全無法實際應用。
-
編譯開銷問題。作為效能最佳化工具的深度學習編譯器只有在其編譯開銷對比帶來的效能收益有足夠優勢的情況下才真正具有實用價值。部分應用場景下對於編譯開銷的要求較高,例如普通規模的需要幾天時間完成訓練任務有可能無法接受幾個小時的編譯開銷。對於應用工程師而言,使用編譯器的情況下不能快速的完成模型的除錯,也增加了開發和部署的難度和負擔。
-
對使用者透明性問題。部分AI編譯器並非完全自動的編譯工具,其效能表現比較依賴於使用者提供的高層抽象的實現模版。主要是為運算元開發工程師提供效率工具,降低使用者人工調優各種運算元實現的人力成本。但這也對使用者的運算元開發經驗和對硬體體系結構的熟悉程度提出了比較高的要求。此外,對於新硬體的軟體開發者來說,現有的抽象卻又常常無法足夠描述創新的硬體體系結構上所需要的運算元實現。需要對編譯器架構足夠熟悉的情況下對其進行二次開發甚至架構上的重構,門檻及開發負擔仍然很高。
魯棒性
效能問題
四 BladeDISC的主要技術特點
-
大幅增加編譯開銷。引入離線編譯預熱過程,大幅增加推理任務部署過程複雜性;訓練迭代速度不穩定甚至整體訓練時間負最佳化。
-
部分業務場景shape變化範圍趨於無窮的,導致編譯快取永遠無法收斂,方案不可用。
-
記憶體視訊記憶體佔用的增加。編譯快取額外佔用的記憶體視訊記憶體,經常導致實際部署環境下的記憶體/視訊記憶體OOM,直接阻礙業務的實際落地。
-
人工padding為靜態shape等緩解性方案對使用者不友好,大幅降低應用的通用性和透明性,影響迭代效率。
五 關鍵技術

1 MLIR基礎架構
2 動態shape編譯

圖層IR設計
執行時Shape計算、儲存管理和Kernel排程
動態shape下的效能問題
大顆粒度運算元融合


3 多前端框架支援
4 執行時環境適配
-
全圖編譯,獨立執行。當整個計算圖都支援編譯時,RAL提供了一套簡易的runtime以及在此之上RAL Driver的實現,使得compiler編譯出來結果可以脫離框架直接執行,減少框架overhead。
-
TF中子圖編譯執行。
-
Pytorch中子圖編譯執行。
六 應用場景
-
應對動態shape業務完備的動態shape語義支援
-
基於compiler based的技術路徑的模型泛化性在非標準模型上的效能優勢
-
更為靈活的部署模式選擇,以外掛形式支援前端框架的透明性優勢

|
|
|
|
|
|
|
|
|
|
|
|
七 開源生態——構想和未來
-
BladeDISC發源於阿里雲計算平臺團隊的業務需求,在開發過程中與MLIR/MHLO/IREE等社群同行之間的討論和交流給了我們很好的輸入和借鑑。在我們自身隨著業務需求的迭代逐漸完善的同時,也希望能夠開源給社群,在目前整個AI編譯器領域實驗性專案居多,偏實用性強的產品偏少,且不同技術棧之間的工作相對碎片化的情況下,希望能夠將自身的經驗和理解也同樣回饋給社群,希望和深度學習編譯器的開發者和AI System的從業者之間有更多更好的交流和共建,為這個行業貢獻我們的技術力量。
-
我們希望能夠藉助開源的工作,收到更多真實業務場景下的使用者反饋,以幫助我們持續完善和迭代,併為後續的工作投入方向提供輸入。
-
持續的魯棒性及效能改進
-
x86後端補齊計算密集型運算元的支援,端到端完整開源x86後端的支援
-
GPGPU上基於Stitching的大顆粒度自動程式碼生成
-
AMD rocm GPU後端的支援
-
PyTorch訓練場景的支援
-
更多新硬體體系結構的支援和適配,以及新硬體體系結構下軟硬體協同方法學的沉澱
-
計算密集型運算元自動程式碼生成和動態shape語義下全域性layout最佳化的探索
-
稀疏子圖的最佳化探索
-
動態shape語義下執行時排程策略、記憶體/視訊記憶體最佳化等方面的探索
-
模型壓縮與編譯最佳化聯合的技術探索
-
圖神經網路等更多AI作業型別的支援和最佳化等
開源地址:
參考文獻
-
"DISC: A Dynamic Shape Compiler for Machine Learning Workloads", Kai Zhu, Wenyi Zhao, Zhen Zheng, Tianyou Guo, Pengzhan Zhao, Feiwen Zhu, Junjie Bai, Jun Yang, Xiaoyong Liu, Lansong Diao, Wei Lin -
Presentations on MLIR Developers' Weekly Conference: 1, 2
-
"AStitch: Enabling A New Multi-Dimensional Optimization Space for Memory-Intensive ML Training and Inference on Modern SIMT Architectures", Zhen Zheng, Xuanda Yang, Pengzhan Zhao, Guoping Long, Kai Zhu, Feiwen Zhu, Wenyi Zhao, Xiaoyong Liu, Jun Yang, Jidong Zhai, Shuaiwen Leon Song, and Wei Lin. The 27th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), 2022. [to appear] -
"FusionStitching: Boosting Memory Intensive Computations for Deep Learning Workloads", Zhen Zheng, Pengzhan Zhao, Guoping Long, Feiwen Zhu, Kai Zhu, Wenyi Zhao, Lansong Diao, Jun Yang, and Wei Lin. arXiv preprint
Java面試疑難點串講1:面試技巧及語言基礎
關鍵詞
深度學習
框架
模型
計算圖
問題