OSDI 2020 | 微軟亞洲研究院論文一覽

微軟研究院AI頭條發表於2020-11-04
拜占庭有序共識:對拜占庭共識的擴充

Byzantine Ordered Consensus without Byzantine Oligarchy

論文連結:https://www.usenix.org/conference/osdi20/presentation/zhang-yunhao

程式碼地址:https://github.com/yhzhang0128/archipelago-hotstuff

區塊鏈是當前產業界和學術界十分關心的一種新型應用模式,其核心目標是在分散式、無信任的情況下達成共識。而分散式、無信任共識問題是系統領域中的經典理論問題。拜占庭共識(Byzantine Consensus)是無信任情況下達成共識的一個經典成果。在各種區塊鏈中,許可鏈(Permissioned Blockchain)系統看起來可以很自然地利用拜占庭共識的結果達到目標。

然而,在微軟亞洲研究院和康奈爾大學合作發表的論文 “Byzantine Ordered Consensus without Byzantine Oligarchy” 中,研究員們揭示了事情並沒有看上去那麼簡單。在傳統的拜占庭共識問題中,所有正確節點需要達成一致的執行順序,而具體達成什麼樣的順序並不重要。但是,研究員們意識到,在依賴拜占庭共識的許可鏈中,節點的利益與該順序緊密相關。例如在應用於拍賣或者交易的許可鏈中,不同節點提交的購買請求的執行順序決定了哪些節點能夠最終交易成功。在交易中,每個節點都對該順序擁有話語權,並有義務阻止惡意節點操縱該順序來獲利。然而,共識問題的經典定義中並沒有與順序正確性相關的描述。

因此,在論文中研究員們首次提出了一種新的概念——“拜占庭有序共識”,透過引入順序正確性維度擴充了共識問題的經典定義。

同時,該論文提出了一個新的實現拜占庭共識的系統構架,該構架透過分離給命令排序的步驟和節點達成共識的步驟,來高效地滿足新概念中所定義的順序正確性,阻止惡意節點單方面控制執行順序。論文還提出並實現了新的 Pompe 協議,將傳統的線性一致性原則自然地擴充套件到了順序正確性維度。大規模跨多個資料中心的實驗表明,Pompe 可以很好地在滿足順序正確性的條件下達到高效能:在執行時間大致相同的前提下,Pompe 可以透過在命令排序和節點達成共識兩個步驟中採用批次命令處理方式獲得比其他拜占庭共識協議更高的吞吐率。

這篇論文展示了新的應用場景可以對經典計算機理論產生新挑戰,驅動計算機理論進一步發展,讓新理論滿足新的需求,從而達到理論從實踐中抽象而生又可以應用回實踐中的良性迴圈。

HiveD:新的多租戶 GPU 叢集管理方案

HiveD: Sharing a GPU Cluster for Deep Learning with Guarantees

論文連結:https://www.usenix.org/conference/osdi20/presentation/zhao-hanyu

程式碼地址:https://github.com/microsoft/hivedscheduler/

隨著深度學習訓練需求的不斷擴張,很多組織和機構都會選擇自建多租戶叢集來共享昂貴的 GPU 資源。然而現有的 GPU 叢集管理方案因為使用了 GPU 配額(Quota)機制,可能導致嚴重的共享異常(Sharing Anomaly)現象:某些租戶的深度學習任務甚至比在私有叢集中效能更差。為了從根本上解決該問題,微軟亞洲研究院和微軟(亞洲)網際網路工程院、北京大學、香港大學合作提出了一個新的多租戶 GPU 叢集管理方案 HiveD,透過新的資源抽象和排程框架從而100% 保證共享安全(Sharing Safety),同時不失一般性地和任何任務排程策略相容。

現有叢集管理方案無法滿足共享安全的根本原因是因為採用了 GPU 配額這一資源抽象,使得租戶無法對 GPU 拓撲資源進行預留。HiveD 首先提出了一種新的資源抽象,被稱為 Cell(類比蜂巢 Hive 中的蜂窩)。研究員們透過多級 Cell 來描述 GPU 叢集拓撲的層級組織。如圖1所示,一個 Cell 就是一個由同一級拓撲結構互聯的 GPU 的集合。Cell 的定義取決於所管理的 GPU 伺服器叢集的拓撲組織方法,並不只限於圖1所示的形式。

OSDI 2020 | 微軟亞洲研究院論文一覽圖1:HiveD 提供的基於多級 Cell 的資源抽象

在 Cell 的基礎上,HiveD 會為每個租戶提供一個虛擬私有叢集(Virtual Private Cluster,簡稱 VC)。每個租戶的 VC 顯式定義了它擁有的各級 Cell 的配額。有了 VC 作為參考,HiveD 可以輕易地分辨出每個租戶的任務可以使用什麼 GPU 拓撲。而使用者也可以根據自己任務的需求,靈活地為自己的任務選擇消耗什麼級別的 Cell。 

OSDI 2020 | 微軟亞洲研究院論文一覽圖2:HiveD 為各租戶提供獨立的 VC,並動態地進行 Cell 和物理 GPU 的繫結為了在保證共享安全的同時,靈活地分配 GPU 資源,研究員們在 HiveD 中設計了一個 Buddy Cell Allocation 演算法,來把 VC 中的邏輯 Cell 和物理 GPU 進行動態繫結。除了提供共享安全,HiveD 的 Buddy Cell Allocation 還有其他好處,如降低物理叢集的 GPU 碎片化、更靈活地處理裝置故障、支援動態重配置 VC 等。

HiveD 的整個排程流程可以被理解為兩級排程:VC 內排程和物理排程。當一個租戶提交任務時,該任務首先會進行 VC 內排程,來決定申請使用哪些邏輯 Cell。然後這些被選擇的邏輯 Cell 會在物理排程時再由 HiveD 的 Buddy Cell Allocation 演算法繫結到物理叢集的 GPU 上。因為 VC 內的所有 Cell 可以被看成一個虛擬的私有叢集,這種設計允許 HiveD 在 VC 內部相容各種任務排程演算法(比如 Gandiva, Tiresias, Philly, Optimus)。每個租戶甚至可以根據自己的需求來採用不一樣的任務排程演算法。

OSDI 2020 | 微軟亞洲研究院論文一覽

OSDI 2020 | 微軟亞洲研究院論文一覽圖3:在生產叢集資料集的實驗驗證了 HiveD 在幾乎不損失排程效率的情況下,避免了所有共享異常

到目前為止,HiveD 已經在微軟內部數個叢集上線並穩定執行了超過11個月,以負責排程各種生產和科研性質的深度學習任務。

NARYA:基於“預測+自適應緩解”的叢集故障處理方案

Narya: Predictive and Adaptive Failure Mitigation to Avert Production Cloud VM Interruptions

論文連結:https://www.usenix.org/conference/osdi20/presentation/levy

高可靠性一直是各大雲端計算平臺的追求。針對雲端計算叢集內部發生的故障,傳統的做法是“發生故障->造成負面影響(服務中斷、效能下降等)->檢測到問題->診斷、歸因->修復問題->重新部署”,而在這個過程中使用者會持續被影響,嚴重影響使用者的體驗並可能給使用者造成嚴重的經濟損失。為了解決這一問題,微軟亞洲研究院的研究員與微軟 Azure 團隊一起提出了一種基於“預測+自適應緩解”的故障處理方案,命名為 NARYA。

OSDI 2020 | 微軟亞洲研究院論文一覽圖4: NARYA 整體框架圖NARYA 首先透過模型來預測故障的發生,然後對即將發生故障的元件自適應地採取緩解措施,使整個故障處理流程對使用者透明並避免使用者受到負面影響。

1,故障預測:NARYA 採用深度學習模型來預測某元件是否快要發生故障,不同於其他現有 SOTA 故障預測模型的是,它是一個完全基於注意力機制的模型,包括兩個編碼器,一個用來編碼時序資訊,一個用來編碼元件的上下文資訊。所以 NARYA 不僅利用了元件自身的資訊還利用了元件的上下文環境資訊來進行故障預測,極大地提升了預測的準確性。

2,自適應採取緩解措施:在實際生產環境中,雲端計算系統是不斷演化的(如叢集規模,軟硬體升級等),所以某個緩解故障的措施可能在以前有效,但隨著系統自身的演化將變得不再有效。為了“因地制宜、因時制宜”,研究團隊提出了基於強化學習的自適應決策策略,它可以透過可控隨機實驗來探索動作(緩解措施)空間,然後收集使用者的體驗資料作為反饋,從而得到當前叢集狀態下各措施對應的獎懲資訊。為了最大化獎勵,它將不斷自我最佳化,變得越來越“聰明”、採取的緩解措施也越來越符合當前系統的需要。

目前這一方案已經被整合到微軟 Azure 雲端計算平臺上,上線15個月以來平均減少了26%的服務中斷問題,充分證明了 NARYA 的有效性。

Protean: 提供大規模的 VM 配置服務

Protean: VM Allocation Service at Scale

論文連結:https://www.msra.cn/wp-content/uploads/2020/10/Protean-VM-Allocation-Service-at-Scale.pdf

本篇論文介紹了微軟雲端計算平臺 Azure 的一個核心服務 Protean 的設計和實現。Protean 的任務是負責將虛擬機器分配到 Azure 遍佈全球的資料中心裡執行著的數以百萬計的伺服器上。如果將 Azure 比作一臺巨大的超級電腦,那麼 Protean 就是這臺電腦作業系統核心中的計算資源分配模組。

OSDI 2020 | 微軟亞洲研究院論文一覽圖5:Azure 拓撲結構

虛擬機器作為雲端計算平臺的基本資源分配單元,能夠給使用者的應用程式提供獨立、安全和可靠的執行環境。Protean 需要根據使用者的需求自動將 Azure 的各種伺服器動態分割成大小不同的虛擬機器,並滿足使用者對於這些虛擬機器所處的地理區域(region)和可用區(available zone)的要求,以及虛擬機器之間的相對位置、虛擬機器對伺服器的獨佔需求等各種限制條件。同等重要的是,Protean 還需要在追求資源的充分利用和預留足夠的空閒資源用於容錯和擴容之間取得平衡。

OSDI 2020 | 微軟亞洲研究院論文一覽圖6:Protean 框架圖

Protean 是微軟工程團隊和研究人員在過去十多年中,伴隨著雲端計算業務的飛速發展,而不斷迭代產生的結晶。它經過了實踐的充分檢驗,達到了高可擴充套件性、高可配置性、高資源利用率、高吞吐量、低響應延遲的設計目標。

這篇論文最大的價值在於首次向學術界和工業界披露了微軟 Azure 雲端計算平臺在虛擬機器分配方面需要解決的關鍵問題和經過時間考驗的真實解決方案。微軟 Azure 作為全球最先進、規模最大的雲端計算平臺之一,使得這些寶貴的洞見和經驗,具有巨大的現實意義和啟發性。

RAMMER: 如何透過全域性視角編譯深度學習計算

Rammer: Enabling Holistic Deep Learning Compiler Optimizations with rTasks

論文連結:https://www.usenix.org/conference/osdi20/presentation/ma

程式碼地址:https://github.com/microsoft/nnfusion/

傳統深度學習框架由於其自身的侷限性,如今還遠沒有充分發揮出硬體的計算效能。微軟亞洲研究院的研究員們在一些測試集上發現,現有的深度學習模型只能用到 GPU 2%到40%的效能。傳統的深度學習框架通常透過分層排程來將一個深度學習模型排程到硬體裝置(通常是 GPU 這樣的協處理器)上進行計算。首先,在上層,深度學習模型通常會被抽象為由運算元(Operator)和依賴關係構建而成的資料流圖(DFG),深度學習框架主要負責將每個運算元按照正確的依賴關係依次排程到下層裝置上;接著,在下層硬體裝置上(如 GPU),會有一個硬體的排程器將每個運算元根據其內部並行性排程到硬體內的平行計算核上。這樣兩層排程的模型儘管較為簡潔明晰,但在實際的部署中,兩個排程層互相不感知會導致較大的排程開銷,以及較低的硬體利用率。

傳統深度學習框架在實現全面神經網路最佳化上的核心障礙在於:首先,現有的基於資料流圖的抽象無法表示運算元內部的並行性,對於由深度學習框架控制的圖排程器完全是黑盒;其次,硬體廠商往往將細粒度的任務排程隱藏在硬體中,對上層框架排程也是黑盒。

針對現有深度學習框架的侷限,微軟亞洲研究院和北京大學、上海科技大學合作提出了一種可以成倍甚至幾十倍地提升深度學習計算速度的編譯框架 RAMMER。

RAMMER 一方面將原資料流圖中的運算元透過 rOperator 抽象暴露出運算元內部的並行性,從而在資料流圖中同時表示運算元間和運算元內的並行度;另一方面,透過虛擬裝置(Virtualized Device)抽象將底層的硬體充分暴露出硬體內部的計算單元以及排程能力。透過 rOperator 和虛擬裝置的抽象,整個深度學習計算流圖可以根據其本身各層次的並行度以及硬體所提供的並行度在編譯期生成完整排程方案,並“靜態”對映到硬體計算單元上,因此可以天然地消除原本存在的排程開銷,提高硬體利用率。

OSDI 2020 | 微軟亞洲研究院論文一覽圖7:(a)傳統深度學習框架,(b)RAMMER 深度學習編譯框架更重要的是,RAMMER 的整個設計是硬體通用的。它可以很好地適配到諸如多核 CPU、主流深度學習加速器等裝置上。透過在 NVIDIA GPU、AMD GPU 和 Graphcore IPU 上進行充分的實驗評測,相比於當前最先進的神經網路編譯器如 XLA 和 TVM,該編譯技術可以使現有模型的效能提升高達20倍。甚至和 NVIDIA 內部高度最佳化過的私有計算庫 TensorRT 相比,也能得到高達3倍的效能超越。這些顯著的效能提升很大程度上得益於 RAMMER 的系統抽象所充分暴露出來的最佳化空間,也再次驗證了系統抽象對最佳化空間、最佳化策略、以及整體計算效能的重要影響。

Retiarii: 一種支援“探索性訓練”的新型深度學習框架

Retiarii: A Deep Learning Exploratory-Training Framework

論文連結:https://www.usenix.org/conference/osdi20/presentation/zhang-quanlu

程式碼地址:https://github.com/microsoft/nni/tree/retiarii_artifact

深度學習框架(Deep Learning Framework)是目前研究人員開發深度神經網路的主要工具。以 TensorFlow、PyTorch 為代表的深度學習框架為深度神經網路的成功應用和快速發展起到了重要的促進作用。

在和深度學習領域研究員的長期合作中,微軟亞洲研究院系統領域的研究員發現在開發新的神經網路時,研究人員通常需要探索一類神經網路結構,而不是單個具體的神經網路。在探索過程中,深度神經網路的研究人員通常從構建一個基礎網路(Base Graph)為出發點,對該網路進行訓練,根據訓練情況的反饋,對該神經網路的結構進行調整,然後再次訓練。透過一系列反覆的訓練、調整,最終找到符合要求的神經網路。在論文中,研究員將上述過程稱為“探索性訓練”(Exploratory-Training)。

目前的深度學習框架只支援開發單個神經網路,然而這僅完成了整個探索性訓練過程中的一步。另一方面,現有自動機器學習(AutoML)的方案如神經網路結構搜尋(NAS: Neural Architecture Search)或超引數最佳化(HPO: Hyperparameter Optimization)缺乏可程式設計性和模組化,這使得一種 NAS/HPO 解決方案通常只能用在某一類神經網路結構上。此外,在探索性訓練過程中很多神經網路結構是相似的,利用這些相似性有很多最佳化的機會可以加速整個探索性訓練的過程。而現有的深度神經網路開發工具並沒有系統性地利用這些相似性來加速探索過程。

針對以上不足,本篇論文提出了一種支援探索性訓練的新型深度學習框架 Retiarii。Retiarii 創新性地將神經網路的開發看成一系列網路模型的“變形“ (Mutation),這一系列變形組成了在一個網路空間(Model Space)內的搜尋過程。Retiarii 提出將“變形器”(Mutator)作為基本的程式設計正規化,神經網路開發人員利用變形器對一個基礎網路 (Base Graph) 進行程式設計變形,如增加或刪除某個網路節點。在每次變形時,變形器透過選擇 (choose()) 這一介面將網路具體如何變形的選擇權交給了“探索策略”(Exploration Strategy),甚至可以實時地交給開發者本人。這樣整個探索性訓練就是將一系列的變形器作用於一個基礎網路上,並交由探索策略來驅動整個探索過程。Retiarii 的上述設計讓整個探索過程更加可程式設計和模組化。

OSDI 2020 | 微軟亞洲研究院論文一覽圖8:Retiarii 的系統架構論文表明,不同的搜尋策略可以和少數幾個變形器組合起來,實現多達27種神經網路結構搜尋方案。另外,Retiarii 的跨網路最佳化器還可以自動地發現探索性訓練期間各個網路之間的相似性,利用相似性實現多達8.58倍的網路搜尋加速。

微軟亞洲研究院正在積極開發和完善 Retiarii 的使用者體驗,計劃於近期將其正式整合在開源自動機器學習工具集 NNI 中。

NNI連結:https://github.com/microsoft/nni

相關文章