天天看點

GPipe就可以減少參數模型對記憶體的占用

模型的訓練是深度學習應用程式生命周期中的一個部分,在模型達到一定的規模之前,我們認為它不會遇到什麼挑戰性。雖然在實驗過程中訓練基本模型是較為平常的工作,但複雜度與模型的品質和大小成線性關系。例如,2014年ImageNet視覺識别挑戰賽(ImageNet visual recognition challenge)的獲勝者是GoogleNet,它以400萬個參數獲得了74.8%的Top-1準确率;而僅僅在三年之後,2017年ImageNet挑戰賽的獲勝者則成了Squeeze-and-Excitation Networks(SENet),它用了1.458億個(是之前的36倍以上)參數獲得了82.7%的Top-1準确率。然而,在同一時期,GPU的記憶體隻增加了大約3倍。

随着模型的發展,為了達到更高的精确度,這些模型的訓練變得越來越具有挑戰性。前面提到的例子表明,僅僅依靠GPU硬體設施的改進來實作更好的訓練效果是不可持續的。相反,我們需要分布式的計算方法,将不同節點上的訓練工作負載并行化,以便進行擴充訓練。可并行化訓練的概念聽起來可能比較簡單,但實際上卻是極其複雜的工作。如果你思考一下,我們将要讨論通過跨不同節點來劃分模型的知識擷取部分,并在完成之後将這些部分再重新組合成為一個模型。然而,為了擴充深度學習模型,必須進行并行訓練。為了應對這些挑戰,微軟和谷歌投入了數月進行研究和設計,分别釋出了GPipe 和PipeDream。

GPipe(Google)

GPipe專注于擴充深度學習應用程式的訓練負載。從基礎設施的角度來看,訓練過程的複雜性是在深度學習模型中經常被忽視的因素。訓練資料集越來越大,就越複雜。例如,在醫療保健領域,經常會遇到需要使用數百萬高分辨率的圖像進行訓練的模型。是以,訓練過程通常需要很長的時間才能完成,并且由于記憶體和CPU的消耗而導緻付出非常高的代價。

對于深度學習模型并行性的一種有效思考方法是将其劃分為資料并行和模型并行的方式。資料并行方式使用大型的計算機叢集來分割所輸入的資料。模型并行性則是試圖将模型轉移到加速器上,GPU或TPU,它們具有加速模型訓練的特殊硬體。在較高的層次上,幾乎所有的訓練資料集都可以按照一定的邏輯進行并行化工作,但在模型上卻不一定是這樣的。例如,一些深度學習模型是由可獨立進行訓練的并行分支組成的。在這種情況下,典型的政策是将計算任務劃分到多個分區,并将不同的分區配置設定給不同的分支。然而,這種政策在按順序進行層堆疊的深度學習模型中存在着很大不足,這就給高效的并行計算帶來了挑戰。

GPipe通過一種叫做流水線的技術将

資料

并行和模型并行相結合起來。從概念上講,GPipe是一個分布式機器學習庫,它使用同步随機梯度下降和流水線并行的方式進行訓練,适用于任何由多個有序的層組成的深度神經網絡(Deep Neural Networks, DNN)。Gpipe通過跨不同的加速器來分割模型,并自動将一小批訓練示例劃分成更小的批量。該模型允許GPipe的加速器進行并行操作,最大限度地提高了訓練過程中的可擴充性。

下圖說明了具有多個有序層的神經網絡的GPipe模型被劃分到了四個加速器上。Fk是kth分區的複合正向計算函數。Bk是其相對應的反向傳播函數。Bk依賴于來自上層的Bk+1和Fk的中間激活函數。在上面的模型中,我們可以看到網絡的順序性是如何導緻資源利用不足的。圖中的下半部分顯示了GPipe方法,在該方法中,輸入的小批量示例被劃分為更小的微批量,這些微批量可以由加速器同時處理。

PipeDream(微軟)

幾個月以前,微軟研究院宣布了Fiddle項目的創立,其包括了一系列的旨在簡化分布式深度學習的研究項目。PipeDreams是Fiddle釋出的第一個側重于深度學習模型并行訓練的項目之一。

PipeDream采用一種有别于其它方法的方式,利用稱為“流水線并行”的技術來擴充深度學習模型的訓練。這種方式試圖解決目前資料和模型并行技術所面臨的一些挑戰,例如在Gpipe中使用的一些技術。通常來說,當在雲基礎設施上進行訓練的時候,資料并行方法在規模上承受着很高的通信成本,另外也可以随着時間的推移來提高GPU的計算速度。類似地,模型并行技術經常會通過無效地硬體資源利用,同時給程式員帶來不必要負擔的情況下,來确定如何在給定硬體部署環境的情況下進行特定模型的拆分。

PipeDream試圖通過一種叫做流水線并行的技術來克服資料模型并行方法上的一些挑戰。在概念上,流水線并行計算技術涉及将DNN模型的層劃分為多個階段,每個階段是由模型中的一組連續的層組成的。每個階段都被映射到一個單獨的GPU上,該GPU對目前階段中的所有層将執行前向傳遞和後向傳遞。

給定一個特定的深度神經網絡,PipeDream會根據在單個GPU上執行的一個簡短的評測運作,自動确定如何劃分DNN模型的操作者,并在不同階段之間均衡計算的負載,同時也會最小化目标平台的通信任務。即使存在模型的多樣化(計算和通信)和平台的多樣化(互連拓撲和分層帶寬),PipeDream也能有效地進行負載均衡。PipeDream的并行訓練方法對比資料模型并行方法提供了一些額外的優勢。首先,PipeDream在工作節點之間需要更少的通信,因為在管道執行中的每個工作節點隻需傳遞梯度和輸出激活的子集,給其它的單個工作節點。此外,PipeDream以一種更容易并行的方式來分離計算和通信任務。

并行訓練方法是建構更龐大、更精确的深度學習模型的關鍵挑戰之一。作為深度學習社群中的一個非常活躍的研究領域,并行訓練方法需要将有效的并發程式設計技術與深度學習模型的本質相結合起來。雖然仍處于初期階段,但谷歌的GPipe和微軟的PipeDream作為兩種最具創造性的技術,為深度學習的開發人員提供了并行訓練方法。

繼續閱讀