深度卷積神經網絡CNNs的多GPU并行框架及其應用

摘要:本文是騰訊深度學習系列文章之一,主要聚焦于騰訊深度學習平臺(Tencent Deep Learning Platform)中深度卷積神經網絡Deep CNNs的多GPU模型并行和數據并行框架。

【編者按】深度卷積神經網絡有著廣泛的應用場景,本文對深度卷積神經網絡Deep CNNs的多GPU模型并行和數據并行框架做了詳細的分享,通過多個Worker Group實現了數據并行,同一Worker Group內多個Worker實現模型并行。框架中實現了三階段并行流水線掩蓋I/O、CPU處理時間;設計并實現了模型并行引擎,提升了模型并行計算執行效率;通過Transfer Layer解決了數據存儲訪問效率問題。此框架顯著提升了深度卷積神經網絡訓練速度,解決了當前硬件條件下訓練大模型的難題。

以下為原文:

將深度卷積神經網絡(Convolutional Neural Networks, 簡稱CNNs)用于圖像識別在研究領域吸引著越來越多目光。由于卷積神經網絡結構非常適合模型并行的訓練,因此以模型并行+數據并行的方式來加速Deep CNNs訓練,可預期取得較大收獲。Deep CNNs的單機多GPU模型并行和數據并行框架是騰訊深度學習平臺的一部分,騰訊深度學習平臺技術團隊實現了模型并行和數據并行技術加速Deep CNNs訓練,證實模型拆分對減少單GPU上顯存占用有效,并且在加速比指標上得到顯著收益,同時可以以較快速度訓練更大的深度卷積神經網絡,提升模型準確率。

1.CNNs模型并行導論

1.1.典型應用分析:圖像識別

圖像識別是深度卷積神經網絡獲得成功的一個典型應用范例。圖1揭示了一個具有5個卷積層和3個全連接層的深度卷積神經網絡,該模型可應用于圖像分類。


使用GPU訓練深度卷積神經網絡可取得良好的效果[1][2],自2012年使用Deep CNNs模型在ImageNet圖像分類挑戰中取得突破性成績,2013年的最佳分類結果也是由Deep CNNs模型取得。基于此,騰訊深度學習平臺技術團隊期望引入Deep CNNs來解決或優化圖像分類問題和圖像特征提取問題,以提升在相應用例場景中的效果。

1.2.現有系統的問題

在將CNN應用于圖像相關領域的算法研究以及CNN訓練平臺搭建的實踐過程中,受限于單個GPU上的顯存大小(例如:服務器采購的顯卡Tesla K20c可用顯存為4.8GB,ImageNet2012論文[1]中用到的網絡占用顯存大約3.9GB),在嘗試調整參數和網絡規模的實驗中,往往難以存儲下更大規模的深度卷積神經網絡模型,使得包含較多參數的網絡不能在單GPU上訓練,需要通過多GPU模型并行技術,拆分模型到多個GPU上存儲和訓練來解決。

隨著訓練數據集擴充、模型復雜度增加,即使采用GPU加速,在實驗過程中也存在著嚴重的性能不足,往往需要十余天時間才能達到模型的收斂,不能滿足對于訓練大規模網絡、開展更多試驗的需求

考慮到上述問題,在騰訊深度學習平臺的Deep CNNs多GPU并行訓練框架中,通過設計模型拆分方法、模型并行執行引擎和優化訪存性能的Transfer Layer,并吸收在數據并行方面設計經驗,實現了多GPU加速的模型并行和數據并行版本。

本文描述多GPU加速深度卷積神經網絡訓練系統的模型并行和數據并行實現方法及其性能優化,依托多GPU的強大協同并行計算能力,結合目標Deep CNNs模型在訓練中的并行特點,實現快速高效的深度卷積神經網絡訓練。

1.3.框架設計目標

多GPU模型并行+數據并行期望達到下述目標:充分利用Deep CNNs模型的可并行特點,結合SGD(Stochastic GradientDescent,隨機梯度下降)訓練的數據并行特性,加速模型訓練過程;突破顯存大小限制,使得訓練超過單GPU顯存的模型成為可能,并預期通過訓練更復雜的網絡來獲得更好的模型效果。

上述目標完成后,系統可以更快地訓練圖1中目標Deep CNNs模型。模型拆分到不同GPU上可減少對單GPU顯存占用,適用于訓練更深層次、更多參數的卷積神經網絡。

1.4.挑戰

在圖像識別應用中,深度卷積神經網絡模型的卷積層計算量大,全連接層參數多。因此,如何劃分計算資源,通過模型并行和數據并行兩個數據/計算組織層次上來加速訓練是框架設計首要解決的問題。

圖像作為輸入數據,其數據量龐大,且需要預處理過程,因此在Batch訓練時磁盤I/O、數據預處理工作也要消耗一定時間。經典的用計算時間掩蓋I/O時間的方法是引入流水線,因此如何設計一套有效的流水線方法來掩蓋I/O時間和CPU處理時間,以使得整體耗時只取決于實際GPU訓練時間,是一個重要問題。

模型并行是將一個完整Deep CNNs網絡的計算拆分到多個GPU上來執行而采取的并行手段,結合并行資源對模型各并行部分進行合理調度以達到模型并行加速效果是實現模型并行的關鍵步驟。

多GPU系統通過UVA(Unified Virtual Address,統一虛擬地址)技術,允許一顆GPU在kernel計算時訪問其他GPU的設備內存(即顯存),但由于遠程設備存儲訪問速度遠遠低于本地存儲訪問速度,實際性能不佳。因此在跨GPU的鄰接層數據訪問時,需要關注如何高效利用設備間數據拷貝,使所有計算數據本地化。

2.系統概述

如何模型并行?

模型并行是:適當拆分模型到不同的計算單元上利用任務可并行性達到整個模型在計算過程中并行化效果。

如圖2所示,揭示了從單GPU訓練到多GPU模型并行訓練的相異之處,主要在于:在使用單GPU訓練的場景下,模型不進行拆分,GPU顯存上存儲整個模型;模型并行的場景下,將模型拆分到多個GPU上存儲,因此在訓練過程中每個GPU上實際只負責訓練模型的一部分,通過執行引擎的調度在一個WorkerGroup內完成對整個模型的訓練。


多GPU并行系統從功能上劃分為用于讀取和分發數據的Training Data Dispatcher和用于做模型并行訓練的GPU Worker,如圖3所示。訓練數據從磁盤文件讀取到CPU主存再拷貝到GPU顯存,故此設計在各Worker計算每batch數據時,由Training Data Dispatcher從文件中讀取并分發下一batch數據,以達到用計算時間掩蓋I/O時間的設計目標。


3.訓練數據處理的并行加速

基于mini-batch的訓練,現有技術方案在訓練深度卷積神經網絡時,每次從數據文件中讀入和處理1個batch數據,在GPU計算某一batch時由CPU預讀取和預處理下一batch。但是隨著訓練集圖片像素數增大,讀取和處理時間隨之增加,由于采用多GPU技術加速了單個batch計算時間,數據處理的性能問題隨之而來,需要減少數據處理的用時,以使最終加速效果取決于計算用時。

如圖4所示,總體看來,在深度卷積神經網絡訓練過程中始終是在執行一條三階段并行的流水線:計算本次batch數據——處理下次batch數據——讀入再下次batch數據。


4.GPU Worker: 模型并行的承載體

數據并行以劃分Worker Group為基本組織形式,模型并行以在Worker Group內劃分Worker為基本組織形式,并行訓練的調度資源來源于CPU線程,計算資源來源于GPU卡。由于GPU卡通常意義上被看成是一種加速卡或協處理器卡,必須在基于CPU的主機上下文中被調用來做計算,因此遵循1個CPU線程綁定1張GPU卡能夠發揮多GPU共同參與計算時的并行性效能。


在實際生產環境中,安裝多GPU服務器的硬件體系結構如圖5所示,示例中揭示了一個8 GPU節點服務器的硬件配置,每兩個GPU Slot連接在一個GPU專用PCI槽位上再通過PCIe Switch將GPU Slot 0,1,2,3連接在一顆CPU上,GPU Slot 4,5,6,7連接在另一顆CPU上,兩顆CPU通過IOH(Input Output Hub)連接。


5.CNNs網絡的模型劃分

5.1.基本模型劃分方法

模型并行的來源是Deep CNNs網絡只在特定層(如輸入層、全連接層)與其他層有全面的連接,而其他較為獨立的直線連接關系即可作為模型的可并行部分。將模型的可并行部分拆分到多個GPU上,同時利用多個GPU的計算能力各執行子模型的計算,可以大大加快模型的單次前向-后向訓練時間。


DeepCNNs網絡的層次模型實際上是一張有向無環圖(DAG圖),分配到每個模型并行Worker上的層集合,是有向無環圖的拓撲排序子集,所有子集組成整個網絡的1組模型。

5.2“十字形”模型劃分方法

考慮極端情景:需要訓練超大規模Deep CNNs模型,或者使用計算能力相對較強、顯存較小(一般在1GB~3GB)的桌面級GeForce系列GPU,則利用模型本身的并行性這種基本的模型劃分方法將不再適用。需要將模型再做拆分以保證單個GPU都能存儲下對應的子模型。

如圖7所示,描述了將模型按“十字形”劃分到4 Worker上訓練的情景,不僅拆分了模型的可并行部分,也雖然這樣的劃分在Worker 0和Worker2之間,Worker 1和Worker 3之間達到并行加速效果,卻能使得整個模型得以存儲在4 GPU上。這種模型劃分方法能夠適用于訓練超大規模網絡等特殊模型的需求。


6.CNNs網絡的模型并行工作引擎

每個模型并行Worker上以一個模型并行執行引擎負責調度本Worker上子模型的執行過程。執行引擎控制所有Worker上的子模型完成前向和后向計算,各自對子模型完成參數更新后,到達主線程同步點,開始下一mini-batch訓練。

多GPU模型并行和數據并行的Deep CNNs模型replicas及劃分結構如圖8所示,在使用4 GPU的場景下,劃分了2組Worker Group用于數據并行;每個Worker Group內劃分2個Worker用于模型并行。


7.在圖像識別上的應用

7.1.模型訓練實驗性能

實驗環境為一臺搭載8核心Intel(R) Xeon(R) CPUE5-2640 v2 @ 2.00GHz的服務器,內存為48GB,服務器安裝了4塊NVIDIATesla K20c GPU,單GPU顯存大小為4.8GB。

訓練同樣的Deep CNNs模型,相比于單GPU,使用多GPU結合不同并行模式的加速效果如下表所示:


7.2.模型收斂性

對于目標Deep CNNs模型,在單GPU訓練時(對照實驗)顯存占用量為3.99GB;使用2 GPU模型并行訓練時單個GPU上顯存占用量為2.15GB,并且在訓練相同迭代時訓練集、測試集錯誤率效果都與對照實驗完全相同;抽樣比照參數一致性,被抽樣的參數(同對照實驗相比)也都是一樣。

嘗試更改Deep CNNs模型,訓練一個更大的網絡,增加濾波器數目,減小步長,增加中間卷積層feature map數目,訓練時所需顯存將達到9GB以上,使用單個Tesla K20c GPU(4.8GB顯存)無法開展訓練實驗;而多GPU模型并行訓練實驗中該模型的錯誤率對比圖1模型降低2%。

7.3.效果展示

圖9為圖像標簽識別的示例,通過對兩千多類物體的圖像進行訓練,可實現對常見物體的自動識別。


8.結論與展望

本文描述了深度卷積神經網絡Deep CNNs的多GPU模型并行和數據并行框架,通過多個Worker Group實現了數據并行,同一Worker Group內多個Worker實現模型并行。框架中實現了三階段并行流水線掩蓋I/O、CPU處理時間;設計并實現了模型并行引擎,提升了模型并行計算執行效率;通過Transfer Layer解決了數據存儲訪問效率問題。此框架顯著提升了深度卷積神經網絡訓練速度,解決了當前硬件條件下訓練大模型的難題。

深度卷積神經網絡有著廣泛的應用場景:在圖像應用方面,Deep CNNs可應用于相似圖片檢索、圖片的自動標注和人臉識別等。在廣告圖片特征提取方面,考慮Deep CNNs能夠很好地學習到圖像特征,我們嘗試將其用于廣告點擊率預估(Click-Through Rate Prediction, pCTR)模型中。

原文鏈接: 深度卷積神經網絡CNNs的多GPU并行框架及其在圖像識別的應用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447347.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如果誤刪谷歌瀏覽器的書簽,怎么恢復

如果是Mac用戶,command和z一直恢復就可以 同理,windows用戶,也可以使用撤銷鍵,ctrlz即可

55分鐘學會正則表達式

正則表達式是一種查找以及字符串替換操作。正則表達式在文本編輯器中廣泛使用,比如正則表達式被用于: 檢查文本中是否含有指定的特征詞找出文中匹配特征詞的位置從文本中提取信息,比如:字符串的子串修改文本 與文本編輯器相似&a…

線程安全和對應的核心概念

線程安全 線程安全的概念:當多個線程訪問某一個類(對象和方法)時,這個類始終都能表現出正確的行為,那么這個類(對象或者方法)就是線程安全的synchronized:可以在任意對象及方法上加…

JDK Unsafe類的使用與CAS原子特性

JDK Unsafe類的使用與CAS原子特性 Java.util.concurrent.atomic包,其中包含了大量使用到Unsafe這個類Java不能直接訪問操作系統的底層,而是通過本地方法來訪問。 Unsafe類提供了硬件級別的原子操作,主要提供了以下功能 內存操作字段的定位和…

寫軟件不是造汽車

寫軟件和做其他事情是不一樣的。當我們制造別的東西的時候——像汽車、玩具、椅子、畫作、甚至包括數字產品如平面圖片和3D模型——我們做出來的成品就是最終的結果。而開發軟件則不是,我們做出來的產品永遠不可能有最終的結果——我們需要向計算機解釋如何根據任意…

線程池核心概述

線程池核心概述 Executors工廠類使用 Executors工廠類底層源碼分析詳解 ThreadPoolExecutor自定義線程池 ThreadPoolExecutor拒絕策略詳解 計算機密集型與IO密集型詳解 如何正確的使用線程池…

網站盈利的10種方式

如果你有自己的網站,而且已經有了不少的流量,你肯定會開始考慮如何通過這個網站來掙一些錢。 在這篇文章中,我會向大家介紹網站最常見的10種盈利方式。 1.按點擊付費廣告 在網站上展示一個按點擊付費的廣告橫幅是最簡單的盈利方式&#xff…

程序員如何創業?

摘要:工作機會減少,讀大學也不是保障。大公司亦不再是構筑職業生涯的安全港灣。透過媒體的鏡頭,創業似乎成了沙漠中唯一的綠洲。然而關于創業,或許少有人給你建議,這里所列出的一些因素都是你可以考慮的。 如果你的年…

Redis數據的類型

Redis一共分為五種基本數據類型:String、Hash、List、Set、Zset. string 內部編碼有三種,raw,embstr,int String 是二進制的。可以存儲序列化對象,圖片,字符串,數值等 set和get方法 &#x…

Redis高級命令與特性以及單點模式的介紹

高級命令 keys * 返回滿足條件的所有key,可以模糊匹配exists 是否存在指定的keypersist 取消過期時間select 選擇數據庫 (0-15,總共16個數據庫)move key index 將當前數據庫的 key 移動到給定的數據庫 db 當中randomkey 隨機返回…

華為副總裁徐家駿離職:年薪千萬工作感悟十二條

從普通的公司職員,到年薪千萬的華為副總裁,再到離開華為轉戰百度,徐家駿的十年從業經歷和經驗可資借鑒,我們從中也可以一窺華為的運作過程。徐家駿是華為數據中心的頭,技術超級牛人,一級部門總監&#xff0…

Redis持久化之RDB和AOF

Redis持久化之RDB和AOF Redis 有兩種持久化方案,RDB (Redis DataBase)和 AOF (Append Only File); RDB 詳解 RDB 是 Redis 默認的持久化方案。在指定的時間間隔內,執行指定次數的寫操作&#…

同為程序員 為什么我的工資最低

我看著工資單上每一個開發團隊成員的薪水,慢慢地我不能保持淡定了。 而當我看到我的工資排名是倒數的時候——靠近最后一名——我不由得倒抽一口冷氣。就像圣誕故事中的那個可愛的小男孩Ralphie ,想買氣槍卻被忽悠會有危險一樣,我也不斷忽悠…

Docker安裝Redis以及配置Redis環境

1,下載Redis鏡像 首先拉取 Redis 鏡像, 這里我選擇的是 redis:alpine 輕量級鏡像版本 docker pull redis:alpine 下載完成后,通過 docker images 查看我們已經下載的鏡像,看看是否已經下載到本地 2,運行 Redis 容器 docker run …

.NET程序性能的基本要領

摘要:本文分享了性能優化的一些建議和思考,比如不要過早優化、好工具很重要、性能的關鍵,在于內存分配等。開發者不要盲目的沒有根據的優化,首先定位和查找到造成產生性能問題的原因點最重要。 【編者按】Bill Chiles&#xff08…

redis.conf配置文件詳解

基本配置 daemonize no #是否以后臺進程啟動databases 16 #創建database的數量(默認選中的是database 0)save 900 1 #刷新快照到硬盤中,必須滿足兩者要求才會觸發,即900秒之后至少1個關鍵字發生變化save 300 10 #必須是300秒之后至少10個關鍵字發生變…

什么原因成就了一位優秀的程序員?

這些年我曾和很多程序員一起工作,他們之中的一些人非常厲害,而另一些人顯得平庸。不久前因為和一些技術非常熟練的程序員工作感覺很愉快,我花了一些時間在考慮我佩服他們什么呢?什么原因讓優秀的程序員那么優秀,糟糕的…

Redis的哨兵模式Sentinel

sentinel功能 redis的sentinel系統用于管理多個redis服務器,該系統主要執行三個任務:監控、提醒、自動故障轉移。 1、監控(Monitoring): Redis Sentinel實時監控主服務器和從服務器運行狀態,并且實現自動…

csdn 到底怎么了?不準轉載?

我轉載了20多文章,很多人閱讀過,但是今天看到閱讀量是0, csdn 到底怎么了? 對用戶這樣?請大家看看是不是這樣?

python3之后版本讀取網頁的內容

import urllib.request url "http://helloworldbook2.com/data/message.txt" #直接通過url來獲取網頁數據 print(第一種) response urllib.request.urlopen(url) code response.getcode() html response.read() mystr html.decode("utf8") response.c…