PyTorch 大殺器:用 AdaptDL 優化 GPU 集羣中的 EDL

內容導讀 AdaptDL 是一個資源自適應深度學習訓練和調度框架,是 CASL 開源項目的一部分。AdaptDL 的目標是使分佈式 DL 在動態資源環境中變得簡單和高效。

本文首發自微信公衆號 PyTorch 開發者社區python

EDL 全稱 Elastic Deep Learning,由 LF AI 基金會孵化,是一個能動態調整並行度的深度神經網絡訓練框架。它支持多租戶集羣管理,能夠平衡模型訓練等待及完成時間,可以提升資源利用率。git

訓練深度學習模型一般比較耗時,在算力資源、儲存空間等方面的花費也比較高昂。github

以 BERT 模型爲例, GPU 上的訓練過程經常超過 2000 小時,而訓練 ResNet 和 VGG 模型,少說也要 100 個小時。docker

按照現現在的雲計算成本覈算,模型訓練費用可能高達數千甚至上萬元。爲了控制模型訓練的成本,計算資源共享集羣應運而生。咱們今天介紹的是由 Petuum CASL 團隊開發的 AdaptDL,它使得 GPU 集羣中的 EDL 獲得了極大優化。微信

共享集羣面臨的挑戰

藉助共享集羣,多用戶能夠各自提交模型訓練任務。網絡

這不只減小了計算資源過分供應形成的浪費,並且經過利用空閒資源,用戶能夠在一個工做站上,只用幾天甚至幾小時就能訓練一個複雜模型。框架

可是,共享集羣自己也存在一些問題。分佈式

共享集羣面臨的典型挑戰包括:性能

一、資源分配:多任務共用一個集羣,須要仔細規劃 GPU 資源的分配問題。如訓練模型時,用同一臺機器上的 GPU,比使用多臺機器上的 GPU,訓練速度要快得多。並且爲了不訓練任務之間競爭網絡帶寬,應該將不一樣的分佈式訓練任務,分配給不一樣機器上的 GPU。學習

二、訓練速度和可擴展性良莠不齊 :爲訓練任務選擇合適的 GPU 配置,須要不間斷地監控模型的訓練速度和可擴展性,這些都是隨着時間的變化而變化的。尤爲是接近收斂(convergence)時,要使用較大的批尺寸。所以訓練開始時,最好佔用較少的 GPU 資源。

三、訓練配置:一般狀況下,咱們須要提早知道哪些 GPU 可用,而後才能爲一些重要的訓練進行配置。這在共享集羣中有時候沒法實現的。例如,批尺寸以及學習率一般是根據 GPU 的數量來決定的,又或者已知 GPU 在不一樣的機器上,梯度累加能用來克服網絡瓶頸等。

四、公平性和可用性:在 GPU 使用高峯,一些用戶可能須要排隊等待空閒 GPU,可是一些已經在跑任務的用戶爲了提速,還想增長 GPU 數量。如何權衡並解決兩者矛盾。

AdaptDL 能夠簡化並加速本地機器和共享集羣上的模型訓練

AdaptDL讓共享集羣的問題迎刃而解


爲了解決與組織池計算(organizations pool computing)和共享集羣相關的缺點,Petuum CASL 團隊建立了 AdaptDL,以簡化和加快共享集羣上的分佈式訓練。

AdaptDL 是一個資源自適應深度學習(DL)訓練和調度框架。它能夠實時監控訓練任務的性能,並在任務運行期間,彈性地調整資源(如 GPU、計算實例等)分配。

它針對前文在共享集羣中存在的問題,具備如下優點:

一、提升共享 GPU 集羣的利用率:AdaptDL 能夠針對全部模型訓練任務進行分析,學習不一樣任務在不一樣 GPU 資源配置下的表現。利用學到的知識,AdaptDL 調度器可以公平高效地爲不一樣的訓練任務配置 GPU 資源。隨着訓練任務的增多,對不一樣任務的性能特徵瞭解的愈來愈深刻,AdaptDL 將學會彈性地再次配置 GPU。

二、下降雲端模型訓練成本:AdaptDL 能夠在雲端提供數量適中的 GPU 實例,避免多餘的費用。當訓練中使用更大的批尺寸時,AdaptDL 也能自動擴展集羣。

三、輕鬆實現大批尺寸訓練:使用較大的批尺寸能夠在衆多 GPU 上加速訓練,可是應用起來並不簡單。有些模型若是採用過大的批尺寸,可能由於下降統計效率而增長訓練時長,可是使用太小的批尺寸又沒法有效地利用 GPU。AdaptDL 能夠在共享集羣、雲端環境和本地機器上,自動選擇合適的批尺寸。

與 Optimus 和 Tiresias 相比,使用 AdaptDL 的模型平均訓練用時更少

對於每一個模型訓練任務,AdaptDL 能自動調整批尺寸、學習率和梯度累加,在雲服務平臺中,也能夠自行控制競價實例(Spot Instance)的數量。

在 Petuum 的實踐代表,藉助 AdaptDL 共享集羣訓練模型,平均完成速度提升 2-3 倍,在 AWS 中使用競價實例的費用也下降了 3 倍。

開始


AdaptDL 能夠在兩種模式下使用。

一、集羣調度:容許在一個 Kubernetes 集羣上運行多個任務。使用 AdaptDL Python 庫,AdaptDL 調度程序能夠集成到 PyTorch 代碼中,自動選用最佳數量的 GPU 和訓練批尺寸。

二、獨立訓練:在任意集羣或本地多 GPU 機器上,用自適應批尺寸和學習率訓練模型。AdaptDL 能夠自動計算出什麼時候可使用較大的批尺寸來加速模型訓練。

用 AdaptDL Python 庫進行訓練:

Adaptdl Python 庫簡化了 PyTorch 訓練代碼,使得批尺寸跟學習率都是自適應的,無需額外設定。

python3 –m pip install adaptdl

以 PyTorch MNIST 爲例,只須要修改幾行代碼。以下圖所示:

AdaptDL 提供了一個相似於 PyTorch 原生的分佈式數據並行接口,能夠輕鬆地修改現有的分佈式訓練代碼。

第一步:

用 adaptdl.torch.AdaptiveDataLoader 替代 torch.utils.data.DataLoader。

根據程序的吞吐量和統計效率,AdaptiveDataLoader 在訓練期間能夠自動選用最佳批尺寸。執行 checkpoint 時還能保存狀態,這樣從新啓動後就能從中止的地方恢復訓練了。

train_loader.autoscale_batch_size(1024) 使得 AdaptDL 能爲訓練自動選擇最有效的批尺寸,在全部訓練進程中最大全局批尺寸(global batch size)合計 1024。

接下來:

用 adaptdl.torch.AdaptiveDataParallel 封裝模型。

adaptdl.torch.AdaptiveDataParallel 在訓練過程當中會計算梯度噪聲尺度(Gradient Noise Scale),它能夠用於計算統計效率。當批尺寸改變時,AdaptiveDataParallel 將根據規則自動調整學習率。

默認狀況下,AdaptiveDataParallel 用的是在多種任務中都性能良好的 AdaScale。

在 checkpoint 期間,AdaptiveDataParallel 能夠自動保存模型參數、優化器狀態和 LR 調度器狀態,在從新啓動訓練後一鍵恢復這些設置。

經過以上更改,用戶能夠在本地計算機或分佈式集羣中運行訓練代碼。AdaptDL 爲更快的分佈式訓練選擇了正確的批尺寸和學習率,並自動執行梯度累加,以克服網絡問題。

YOLOv3在Adaptive和Manual Batch Size兩臺機器上的訓練時對比,Adaptive在訓練時和批尺寸對比方面優點顯著

若是不使用 AdaptDL,一旦選擇太小的批尺寸,則會由於沒有充分利用 GPU,致使訓練時延長。相反,若是選擇一個過大的批尺寸,也會由於須要更多的 epoch 來收斂,從而致使更長的訓練時。對比可知 AdaptDL 無需選擇固定的批尺寸,就能自動達到更好的訓練性能。

用 AdaptDL 調度器進行集羣管理:

AdaptDL 調度器可以自動判斷訓練任務要使用的 GPU 資源,這使得共享集羣中的訓練任務變得更智能。

利用靈活性,當集羣空閒率較高時,訓練任務就會擴展爲使用額外 GPU;當集羣使用率較高時,將收縮爲使用較少的 GPU 資源,而不是暫停訓練任務。

AdaptDL 調度器還提供了其餘功能,如整理集羣以免不一樣任務之間的網絡爭奪,以及保持競爭性訓練任務之間的公平性。

因爲調度器和每一個訓練任務之間的協調,AdaptDL 可讓共享集羣保持高效利用率。

當一個任務能夠有效地使用更大的批尺寸時,AdaptDL 會自動地將更多的 GPU 轉移到該工做上以加速訓練。另外一方面,當只能使用較小的批尺寸時,空閒的 GPU 將更有效地分配給其餘任務。

AdaptDL 調度器可使用 Helm 一鍵安裝在任何一個 Kubernetes 實例上,命令以下:

helm install adaptdl adaptdl-sched 
-— repo https://github.com/petuum/adaptdl/raw/helm-repo 
-— namespace adaptdl — create-namespace 
-— set docker-registry.enabled=true

安裝 AdaptDL 調度器後,就可使用 AdaptDL CLI 提交訓練任務了。剛開始訓練任務會使用一個單一 GPU,而後使用不一樣數量的 GPU 屢次重啓,這期間 AdaptDL 會計算出最佳數量的 GPU 使用。無論有多少 GPU,AdaptDL 總能選擇最有效的批尺寸,並相應地調整學習率。

AdaptDL集羣跟蹤示例

彩色條形圖顯示分配給不一樣任務的計算實例數量,AdaptDL 能夠動態優化每一個任務得到的計算實例數量

藉助 AdaptDL,PyTorch 訓練任務在共享集羣中運行的速度提高了 2-3 倍。此外,AdaptDL 調度器還支持 AWS 競價實例,使得費用也下降了 3 倍。

最後,還可使用 AdaptDL 和 NNI 來加速超參數調優工做負載(AdaptDL + NNI Post)。

項目地址:點擊此處

本文翻譯自 PyTorch Medium 博客。

參考: 點擊此處
相關文章
相關標籤/搜索