OSDI 2022 | 速來圍觀!微軟亞洲研究院計算機系統領域最新論文!

語言: CN / TW / HK

(本文閱讀時間:11分鐘)

編者按:OSDI(Operating Systems Design and Implementation)是計算機系統領域最頂級的學術會議之一,彙集了全球電腦科學家們對於計算機系統的前瞻性思考。第16屆 OSDI 於2022年7月11日至13日召開,本次會議共有253篇論文投稿,接收49篇,接收率為19.4%。本文中,我們將分享微軟亞洲研究院被 OSDI 2022收錄的3篇論文,希望可以幫助大家瞭解計算機系統領域的前沿趨勢。歡迎感興趣的讀者閱讀論文原文。

01

Roller: 快速高效的深度學習運算元編譯器

論文連結:

https://www.usenix.org/conference/osdi22/presentation/zhu

程式碼地址:

https://github.com/microsoft/nnfusion/

隨著模型規模的不斷增長,深度學習對算力的需求也與日俱增。當前,深度學習硬體加速器(如 GPU、TPU 等)主要依賴運算元加速庫來支援深度學習應用。然而,隨著不斷出現的新模型和新硬體型別,業界對快速、高效地開發新運算元有了更高的要求。運算元編譯器(Tensor Compiler)作為一種新途徑,提供了將運算元自動編譯成對應加速器核心程式碼的能力。

目前,深度學習模型的運算元通常被實現成為多重迴圈巢狀的計算。為了實現對這種運算元程式效能的進一步提升,研究員們通常需要對已實現的多重迴圈計算進行迴圈展開、合併、分塊、快取使用、改變並行度等調整。這實質上是一個組合優化問題,搜尋空間巨大,所以主流的運算元編譯器往往不得不借助機器學習的方法在這個巨大的搜尋空間中找出較優的程式實現。而這種搜尋過程往往需要數千甚至上萬步的探索,導致編譯一個模型經常需要耗費數小時甚至數天的時間。這種問題在新型的硬體和計算量巨大的運算元上特別嚴重。因此,目前主流的基於機器學習的運算元程式優化方法極大地影響了深度學習在實際場景中的部署效率。隨著近年來深度學習模型規模的快速增長,預計這種情況將進一步惡化。

微軟亞洲研究院聯合多倫多大學等多所高校在對深度學習計算中用到的大量運算元進行編譯、優化和效能分析後,發現了一個有意思的現象:儘管每個運算元的優化選項成千上萬,但能達到最大效能的程式,其配置往往與硬體引數匹配,從而能夠更充分地利用硬體資源。基於這樣的觀察,研究員們提出了一個新的運算元編譯器 Roller。為了更好地匹配硬體引數,Roller 將運算元的計算過程建模成基於資料塊(tile)的“資料處理流水線”,即將不同大小的資料塊從多級記憶體結構中搬運到計算核心處理並逐級寫回。為了使整個流水線的吞吐最大化,Roller 要求每一級中資料塊的設定都必須充分匹配硬體的引數設定,比如記憶體的訪問寬度、計算核的並行度等等。這樣的約束不僅保證了計算程式在整個流水線中的每一級都充分發揮了硬體的最大效能,同時也簡化了對運算元程式的效能建模,大大減小了搜尋空間,從而避免了在實際硬體加速器上耗時地進行大量嘗試和效能測量。因此,這樣一種“白盒”的核心程式構建方法從本質上可以大大縮減運算元編譯時間。

圖1:Roller 編譯器的架構

更重要的是,Roller 的整個設計是構建在一套通用硬體抽象上的,它可以很好地適配到多種主流加速器裝置上。通過在 NVIDIA GPU、AMD GPU 和 Graphcore IPU 上進行實驗評測,研究員們發現相比於當前運算元編譯器(如 TVM 和 Ansor)和運算元庫(如 cuBLAS、cuDNN 等),Roller 的編譯方法可以生成效能相近,甚至更好的核心程式碼。例如,研究員們在對不同型別的模型中常用到的一百多個運算元進行編譯後,Roller 產生的核心程式碼中分別有59.7%和73.1%的程式碼要優於 NVIDIA 和 AMD 的運算元庫,有54.6%和58.8%的程式碼優於 TVM 或 Ansor 在這兩種 GPU 上生成程式的效能。值得注意的是,Roller 的運算元編譯時間也從小時級別降低到了秒級別,編譯時間減少了三個數量級!

研究員們認為 Roller 這樣的系統可以給硬體加速器提供更高效快速的軟體生態支援。對於缺少成熟運算元庫的新型硬體廠商,Roller 還提供了一個可以快速生成運算元庫的機會,從而獲得以較快速度趕上領先硬體廠商的機會。Roller 的“白盒”編譯方法也給針對特定硬體快速進行深度學習模型優化和部署帶來了新的機遇。微軟亞洲研究院正在基於 Roller 進一步完善深度學習模型編譯棧,並展開更多關於模型優化、場景部署和新型硬體支援的研究。

02

RESIN: 一種處理雲服務中記憶體洩漏的整體方案

論文連結:

https://www.usenix.org/conference/osdi22/presentation/lou-chang-resin

雲端計算的基礎設施包含許多複雜的軟體元件,因此會遇到記憶體洩漏的問題。在雲服務中,一旦某個程序發生記憶體洩露,就會使得其部署的大量機器記憶體不足以及無辜程序被殺,最終導致大量使用者的虛擬機器效能下降、崩潰及重啟,嚴重影響使用者的體驗並可能給使用者造成重大經濟損失。

然而,在雲系統中,記憶體洩漏問題很難處理,現有解決方案或是準確性不高,或是會產生很高的開銷。其原因,一方面是由於許多記憶體洩漏在極少數情況下才會被緩慢觸發,因此在開發部署過程中很容易躲過測試和檢測;另一方面,在檢測到記憶體洩漏後,相關問題很難離線復現,這會使得開發人員很難找到洩漏的根本原因。為了解決上述問題,微軟亞洲研究院與微軟 Azure 團隊以及霍普金斯大學的科研人員,一起提出了一種處理雲服務中記憶體洩漏的整體方案 RESIN。

RESIN 採用集中式方法,無需訪問元件的原始碼,也不需要大量的檢測或重新編譯。RESIN 對每個主機都使用了一個監控代理(Monitor Agent ,該代理通過利用底層作業系統功能來收集記憶體使用資料,因此它支援包括核心(Kernel 在內的所有元件。收集好的資料隨後會被載入到遠端服務用於進一步的資料分析,從而最大限度地減少主機的開銷。通過聚合來自不同主機的資料,RESIN 可以執行更復雜的分析來捕獲複雜的洩漏。對於記憶體洩漏問題,RESIN 進行了多級分解和處理。它會首先執行輕量級洩漏檢測,並在需要確認和診斷時觸發更深入的動態檢查。這種分治法(Divide-and-Conquer 使 RESIN 能夠同時實現低開銷、高精度和可擴充套件性。

圖2:RESIN 系統的工作流程

目前,RESIN 已經在微軟 Azure 中執行3年,具有高準確性與低開銷等優勢。由於記憶體不足導致的虛擬機器重啟有效地減少了41倍。

03

SparTA: 基於張量稀疏屬性的深度學習模型稀疏化編譯框架

論文連結:

https://www.usenix.org/conference/osdi22/presentation/zheng-ningxin

專案程式碼地址:

https://github.com/microsoft/SparTA.git

論文結果復現程式碼地址:

https://github.com/microsoft/nni/tree/sparta_artifact/sparta

隨著深度學習的快速發展,深度學習模型的規模呈現出指數級增長的態勢。單個模型具有高達萬億級別的引數量,這遠遠超出了硬體加速器運算能力的增長速度。同時,端側裝置由於其運算能力和功耗的限制,對深度學習模型大小和推理延遲有近乎嚴苛的要求。因此,探索深度學習模型中的稀疏性以及對稀疏模型做有效的加速成為深度學習模型發展和落地的關鍵因素。然而,目前稀疏模型在系統支援方面還存在諸多不足,阻礙了模型在稀疏化上的探索。

這些不足具體表現為(i)由於針對特殊的模型稀疏模式構建高效的程式碼非常困難,通常需要系統程式設計師的深度參與,深度學習研究員在模型稀疏化的研究過程中通常使用代理指標(Proxy metrics,如 FLOPs、位寬)來估算加速效果。可是代理指標並不能準確反映模型稀疏化帶來的加速效果,其預測的效果有時甚至和實際情況相去甚遠;(ii)當前稀疏優化的大多工作都只集中在單個運算元,忽視了一個稀疏化運算元在整個深度學習模型中可能產生的連帶影響,可將稀疏化傳導到模型中的其他運算元;(iii)當前針對某個具體模型的稀疏化優化方案很難被重用,難以和其它相關技術組合起來遷移到其他深度學習模型上去,例如,在被剪枝的運算元和被量化的運算元上做的優化技術很難直接遷移到一個既被剪枝又被量化的運算元上。

為了解決模型稀疏化過程中遇到的上述挑戰,微軟亞洲研究院提出了 SparTA——一個專門優化稀疏深度學習模型的端到端編譯框架。SparTA 將深度學習模型中張量的稀疏屬性(由剪枝和量化產生)作為整個編譯框架中的核心抽象 TeSA (Tensor with Sparsity Attribute) ,並圍繞 TeSA 構建出面向稀疏模型的全套編譯優化技術。

圖3:SparTA 的系統架構

在使用 SparTA 時,使用者先使用 TeSA 來標註深度學習模型中某些張量的稀疏樣式(Sparsity pattern ,然後通過 SparTA 提出的三個核心技術來對模型進行端到端地優化:一是張量的稀疏屬性在整個資料流圖中的傳播,由 Tensor Algebra 和 Tensor Scrambling 技術自動完成;二是對稀疏運算元進行優化變換(Transformation),變換為更易於加速、計算效率更高的稀疏樣式,這種變換使得不同的優化技術可以被有機地結合起來;三是做針對稀疏張量的程式碼特化(Code Specialization),將稀疏樣式硬編碼到運算元的程式碼中,刪除死程式碼(Dead Code),並且針對給定加速器特化使用其專有硬體(如 sparse tensor core

通過全面的測試,SparTA 展示出了相比於已有工具高達平均8.4倍的加速效果。SparTA 不但可以對稠密模型稀疏化以後進行優化,而且還能用來加速一開始就採用特定稀疏樣式設計的大型預訓練模型。在這方面,SparTA 已經被用來優化 微軟亞洲研究院研發的 NUWA 預訓練視訊生成模型 。SparTA 對 NUWA 模型中提出的 3DNA 稀疏化注意力機制達到了2倍以上的加速。微軟亞洲研究院目前正在對 SparTA 進行程式碼重整和優化,提高易用性,並將儘快開源,以促進深度學習模型稀疏化的研究和實用化。

你也許還想看