(山東大學工程訓練中心 山東 濟南 250061)
神經網絡是由許多神經元構成的,單個神經元與其他神經元互聯,形成網狀結構,各網狀結構相互盤錯形成規模巨大的多層次人工模型,長久以來,相關人士一直聚焦于提高神經網絡的訓練性能。在深度神經網絡上,算法的改進和硬件的性能的提高都可以對訓練性能起到很好的加速作用。設計更出色的模型進行學習,來降低訓練過程中的難度,這是算法優化的主要目的和方法。硬件的優化是利用GPU或其他硬件硬件來進行訓練模型的計算。借助硬件的良好性能,以期達到越來越好的加速效果。
深度神經網絡模型在網絡結構中有非常多隱含單元,這些隱含單元又可以稱作隱含層,涉及范圍之廣層次之深,因此被稱為深度神經網絡。
神經系統接收某個向量作為輸入信號,并且經過一系列的中間加工過程。類似于人類的神經系統,隱含層就像神經纖維束,無數神經纖維纏繞盤旋糾結在一起形成纖維束,但是每個神經元又是獨立存在,不與其它神經元共享連接,每個神經元與前面層的隱含層的每個神經元相連接。最終輸出層輸出所識別對象的類別結果,神經網絡模型中的卷積加工過程分兩步走,一個是子采樣,另一個就是子卷積。在卷積層進行特征提取時,卷積層中的神經元相同層的部分神經元間的鏈接共享權值,神經元間是非全連接的。得益于有監督的學習,卷積具有兩種特性,這種良好的性能不僅使學習過程中神經元間共享權值的數量大幅減少,而且也簡化了網絡模型訓練的復雜過程,降低了數據工作的壓力。
卷積神經網絡主要由輸入層、卷積層、池化層和全連接層構成。卷積神經網絡模型的工作過程一般是這樣的:首先提取特征,每一次數據訓練結束后,每層隱含層會向后層神經元傳播,后層神經元接收傳播的信息后,提取出局部特征以及每個特征與相鄰特征之間的相鄰位置關系。其次特征映射,而獨立的神經元具有相同的權值,從而在整個過程中,不對物體在圖像中的位置產生影響,多個映射結構組成一個模型中的計算層。第二步,進行子采樣。任何一個卷積層都包含特征提取、特征映射和子采樣三個操作,在網絡結構完成卷積計算之后會進行二次采樣的處理,這樣做是為了減少訓練參數的規模。在經過多層卷積之后,最終構成一個完整的網絡模型結構。
如果單個GPU的存儲內存可以大到存儲下所有數據時,就可以在深度神經網絡的所有層次中對所有數據進行并行化處理。此時,每個GPU只需要對一個批次的輸入數據進行處理,所有GPU同時處理所有數據,數據處理的效率也就得到大幅提升。在神經網絡的正向反向傳播的過程中,每個層的梯度和參數都會被復制并傳遞到每個GPU。所有的GPU在本地訓練權重及數據指導下重新計算梯度,完成后,新的訓練權重會替代之前的,通過交換學習,GPU的本地存儲訓練權重也就被更新過一次了。
將全部梯度劃分K部分,每個GPU負責一個部分,計算完成時,第K個GPU對其他所有GPU上的提督計算進行累計整合,然后發送累計梯度記錄給所有GPU。這是第一種實現數據并行的方法。第二種方法是在數據進行反向的傳播過程中生成梯度,每一個GPU就進行異步處理,將梯度值傳遞給對應GPU,在需要對應權重時進行同步處理,這樣最大程度的加大計算與通信間的重疊。訓練模型的大小直接決定著GPU間通信的開銷,而這與GPU的數目一般是沒有直接關系的。如果模型存儲在GPU上后,如果仍然存在空閑內存,此時空閑內存可用來緩存訓練數據,縮短訓練時間。
當前深度神經網絡模型逐漸增大,單個GPU存儲不下,因此數據并行也僅僅適合小模型。此時,模型并行訓練機制就派上用場了。在卷積層中使用仍然使用數據并行,在全連接層中,將大模型劃分成多個部分分別指派到多個GPU中去,這樣就可以實現同時計算。卷積層和全連接層具有不同特性,僅有小部分數據時,所有參數可以同時存儲在一個GPU上,每一批需要處理的圖像分配給全部GPU,這種方法很有效果。但是,當全連接層的參數較多時,則需要所有的GPU均等的劃分這些參數。最后所有的GPU協助彼此工作,以在必要時同步全鏈路層計算中的參數。
在當前使用的框架中,研發了許多深度學習專用的計算機型號。英偉達公司近年來目光放在深度學習計算機的研發上,軟硬件是深度學習的基礎,一是硬件開發,更高性能的GPU及其他計算機硬件可以推動深度學習訓練的加速。二是設計更加高效的并行處理框架。顯然,不同的深度學習算法在不同架構上會體現出不同的性能。GPU在處理龐大而繁重的計算時,單個GPU計算性能是八核CPU的十倍,性能遠優于CPU。前面提到還有一種辦法是采用多個GPU進行并行協同計算,例如在雙GPU上模擬模型并行訓練架構,GPU相互交流學習是通過連接線進行的。SGD算法是目前常用的訓練算法,該算法有很大的計算密度,在GPU上運行SGD算法可以很好的結合兩者計算性能優勢。通常當GPU的內存不能存儲一個大型模型的數據時,將大型模型擴展到多個GPU上進行訓練是完全可行的。結合SGD算法的特點,在模型訓練過程中,盡可能多的連接高帶寬和低延遲,從而最大限度的減少顯卡相互間通信的開銷。使用多GPU與使用單GPU的差異在于,當GPU數目為一時,數據必須全部存儲在一個GPU上,將數據分批次處理,如今模型愈來愈大,大多數情況下不能存在一個GPU上,這時候就體現出了多GPU的優勢,眾多GPU協同工作,將大模型擇分成小模型,每個GPU的計算壓力減小,且同時工作,最后,GPU線程調度程序整合出一個完整模型,這樣不僅效率高,而且硬件損耗小。
GPU上的深度神經網絡模型并行系統中最主要的問題就是計算和訓練的模型越來越大無法將全部數據存儲在同一塊GPU上,這是深度神經網絡模型并行過程中的主要問題,極大的降低了訓練效率,它在現實生活中的具體應用就會受到限制,所以此后的研究人員應將部分目光匯聚于此。