1. 程式人生 > >深度學習框架--深度卷積神經網路CNNs的多GPU並行框架 及其在影象識別的應用

深度學習框架--深度卷積神經網路CNNs的多GPU並行框架 及其在影象識別的應用

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

        1. CNNs模型並行導論

        1.1. 典型應用分析:影象識別

        影象識別是深度卷積神經網路獲得成功的一個典型應用範例。

        圖1揭示了一個具有5個卷積層和3個全連線層的深度卷積神經網路,該模型可應用於影象分類。

神經網路1

                              圖1 ImageNet深度卷積神經網路模型

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

        1.2. 現有系統的問題

        在將CNN應用於影象相關領域的演算法研究以及CNN訓練平臺搭建的實踐過程中,受限於單個GPU上的視訊記憶體大小(例如:伺服器採購的顯示卡Tesla K20c可用視訊記憶體為4.8GB,ImageNet 2012論文[1]中用到的網路佔用視訊記憶體大約3.9GB),在嘗試調整引數和網路規模的實驗中,往往難以儲存下更大規模的深度卷積神經網路模型,使得包含較多引數的網路不能在單GPU上訓練,需要通過多GPU模型並行技術,拆分模型到多個GPU上儲存和訓練來解決。

        隨著訓練資料集擴充、模型複雜度增加,即使採用GPU加速,在實驗過程中也存在著嚴重的效能不足,往往需要十餘天時間才能達到模型的收斂,不能滿足對於訓練大規模網路、開展更多試驗的需求。

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

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

        1.3. 框架設計目標

        多GPU模型並行+資料並行期望達到下述目標:充分利用Deep CNNs模型的可並行特點,結合SGD(Stochastic Gradient Descent,隨機梯度下降)訓練的資料並行特性,加速模型訓練過程;突破視訊記憶體大小限制,使得訓練超過單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內完成對整個模型的訓練。

圖2從單GPU訓練到多GPU模型並行訓練的概要檢視

神經網路2

        多GPU並行系統從功能上劃分為用於讀取和分發資料的Training Data Dispatcher和用於做模型並行訓練的GPU Worker,如圖3所示。訓練資料從磁碟檔案讀取到CPU主存再拷貝到GPU視訊記憶體,故此設計在各Worker計算每batch資料時,由Training Data Dispatcher從檔案中讀取並分發下一batch資料,以達到用計算時間掩蓋I/O時間的設計目標。

神經網路3

     圖3 2 GPU模型並行系統框架示意

        3. 訓練資料處理的並行加速

        基於mini-batch的訓練,現有技術方案在訓練深度卷積神經網路時,每次從資料檔案中讀入和處理1個batch資料,在GPU計算某一batch時由CPU預讀取和預處理下一batch。

        但是隨著訓練集圖片畫素數增大,讀取和處理時間隨之增加,由於採用多GPU技術加速了單個batch計算時間,資料處理的效能問題隨之而來,需要減少資料處理的用時,以使最終加速效果取決於計算用時。

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

神經網路4

                                 圖4資料處理和計算流水線

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

資料並行以劃分Worker Group為基本組織形式,模型並行以在Worker Group內劃分Worker為基本組織形式,並行訓練的排程資源來源於CPU執行緒,計算資源來源於GPU卡。由於GPU卡通常意義上被看成是一種加速卡或協處理器卡,必須在基於CPU的主機上下文中被呼叫來做計算,因此遵循1個CPU執行緒繫結1張GPU卡能夠發揮多GPU共同參與計算時的並行性效能。

        表1 4 GPU模型並行+資料並行CPU執行緒、GPU與Worker Group、Worker繫結關係

Worker Group 0 Worker Group 1 Worker Group 2 Worker Group 3
Worker 0 CPU執行緒 0 CPU執行緒 2 CPU執行緒 4 CPU執行緒 6
GPU 0 GPU 2 GPU 4 GPU 6
Worker 1 CPU執行緒 1 CPU執行緒 3 CPU 執行緒 5 CPU執行緒 7
GPU 1 GPU 3 GPU 5 GPU 7

        在實際生產環境中,安裝多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

                              圖5硬體體系結構

        5. CNNs網路的模型劃分

        5.1. 基本模型劃分方法

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

                             66

圖6模型並行中的模型劃分方案示意

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

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

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

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

神經網路7

                              圖7 “十字形”模型劃分方案示意

        6. CNNs網路的模型並行工作引擎

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

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

神經網路8

                              圖8對ImageNet網路的模型並行和資料並行劃分

        7. 在影象識別上的應用

        7.1. 模型訓練實驗效能

        實驗環境為一臺搭載8核心Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz的伺服器,記憶體為48GB,伺服器安裝了4塊NVIDIA Tesla K20c GPU,單GPU視訊記憶體大小為4.8GB。

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

        表2不同並行配置的加速比

        配置 對單GPU的加速比

配置 對單GPU的加速比
2 GPUs 模型並行 1.71
2 GPUs 資料並行 1.85
4 GPUs 模型並行+資料並行 2.52
4 GPUs 資料並行 2.67

        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為影象標籤識別的示例,通過對兩千多類物體的影象進行訓練,可實現對常見物體的自動識別。

神經網路9

神經網路10

神經網路11

                               圖9應用效果展示

        8. 結論與展望

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

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

        參考文獻

        [1] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E. Hinton. (2012) ImageNet Classification with Deep Convolutional Neural Networks. In Advances in Neural Information Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.

        [2] Ossama Abdel-Hamid, Abdel-rahman Mohamed, Hui Jiang, Gerald Penn. (2012) Applying Convolutional Neural Networks Concepts to Hybrid NN-HMM Model for Speech Recognition. ICASSP’12, 2012.

        [3] Jeffrey Dean, Greg S. Corrado, Rajat Monga, et al, and Andrew Y. Ng. (2012) Large Scale Distributed Deep Networks. In Advances in Neural Information Processing 25 (NIPS 2012), MIT Press, Cambridge, MA.

        [4] Omry Yadan, Keith Adams, Yaniv Taigman, Marc’Aurelio Ranzato. (2014) Multi-GPU Training of ConvNets. arXiv: 1312.5853v4 [cs.LG], Feb. 18th, 2014.

相關推薦

[深度學習] Python實現神經網路- Convolution

[深度學習] Python實現卷積神經網路- Convolution 作者 sunsided github 地址: https://github.com/sunsided/python-conv2d import cv2 import numpy as np # load the

深度學習入門——利用神經網路訓練CIFAR—10資料集

CIFAR-10資料集簡介 CIFAR-10是由Hinton的學生Alex Krizhevsky和Ilya Sutskever整理的一個用於普適物體的小型資料集。它一共包含10個類別的RGB彩色圖片:飛機、汽車、鳥類、貓、鹿、狗、蛙類、馬、船: 資料集包含50000張訓練圖片和1000

深度學習系列】神經網路CNN原理詳解(一)——基本原理

轉自:https://www.cnblogs.com/charlotte77/p/7759802.html 上篇文章我們給出了用paddlepaddle來做手寫數字識別的示例,並對網路結構進行到了調整,提高了識別的精度。有的同學表示不是很理解原理,為什麼傳統的機

深度學習之3D神經網路

一、概述 3D CNN主要運用在視訊分類、動作識別等領域,它是在2D CNN的基礎上改變而來。由於2D CNN不能很好的捕獲時序上的資訊,因此我們採用3D CNN,這樣就能將視訊中時序資訊進行很好的利用。首先我們介紹一下2D CNN與3D CNN的區別。如圖1所示,a)和b

深度學習小白——神經網路視覺化(二)

一、由卷積後的code得到原始影象 可以看出隨著卷積網路的進行,越來越多的資訊被扔掉了,能還原除的資訊也就越少。 二、Deep Dream google發明的起初是用來看神經網路各層在“看”什麼,後來因為得到的影象很具有藝術感,所以成為了一個藝術圖片生成器。 這是一

深度學習(DL)與神經網路(CNN)學習筆記隨筆-01-CNN基礎知識點

神經認知機。  卷積神經網路是受生物靈感的多層感知機的變體。從Hubel和Wiesel的早期對貓的視覺皮層的研究工作中得出,視覺皮層包含一組複雜的細胞排列。這些細胞會對很小的子區域敏感,稱作

深度學習技術】神經網路常用啟用函式總結

本文記錄了神經網路中啟用函式的學習過程,歡迎學習交流。 神經網路中如果不加入啟用函式,其一定程度可以看成線性表達,最後的表達能力不好,如果加入一些非線性的啟用函式,整個網路中就引入了非線性部分,增加了網路的表達能力。目前比較流行的啟用函式主要分為以下7種:

深度學習(八)CNN神經網路基礎

《Convolutional Neural Networks》是Andrw Ng深度學習專項課程中的第四門課。這門課主要介紹卷積神經網路(CNN)的基本概念、模型和具體應用。該門課共有4周課時,所以我將分成4次筆記來總結,這是第一節筆記。 1. Comput

深度學習筆記:神經網路的Tensorflow實現

在上一講中,我們學習瞭如何利用 numpy 手動搭建卷積神經網路。但在實際的影象識別中,使用 numpy 去手寫 CNN 未免有些吃力不討好。在 DNN 的學習中,我們也是在手動搭建之後利用 Tensorflow 去重新實現一遍,一來為了能夠對神經網路的傳播機制能夠理

深度學習(DL)與神經網路(CNN)學習筆記隨筆-03-基於Python的LeNet之LR

  0階張量叫標量(scarlar);1階張量叫向量(vector);2階張量叫矩陣(matrix)      本文主要內容:如何用python中的theano包實現最基礎的分類器–LR(Logistic Regression)。   一、模型

深度學習入門——利用神經網路實現MNIST手寫數字識別

MNIST(Modified National Institute of Standards and Technology)資料庫是一個大型手寫數字資料庫,通常用於訓練各種影象處理系統。該資料庫還廣泛用於機器學習領域的培訓和測試。它是通過重新打亂來自NIST原始資料集的樣本而

吳恩達深度學習筆記之神經網路(目標檢測)

3.1 目標定位 定位分類問題意味著我們不僅要用演算法判斷出圖片中是否有該物體,還要標記出它的位置,例如圖片有一輛汽車,我們需要用邊框把汽車圈起來。 影象分類問題已不陌生,例如輸入一張圖片到多層卷積神經網路,它會輸出一個特徵向量,並反饋給softmax來預測

深度學習三:神經網路

# 卷積神經網路 **卷積神經網路(Convolutional Neural Network,CNN)**又叫**卷積網路(Convolutional Network)**,是一種專門用來處理具有類似網格結構的資料的神經網路。卷積神經網路一詞中的卷積是一種特殊的線性運算。卷積網路是指那些至少在網路的一層中使

深度學習框架--深度神經網路CNNsGPU並行框架 及其影象識別應用

        將深度卷積神經網路(Convolutional Neural Networks, 簡稱CNNs)用於影象識別在研究領域吸引著越來越多目光。由於卷積神經網路結構非常適合模型並行的訓練,因此以模型並行+資料並行的方式來加速Deep CNNs訓練,可預期取得較大收穫。Deep CNNs的單機多G

論文學習-系統評估神經網路各項超引數設計的影響-Systematic evaluation of CNN advances on the ImageNet

寫在前面 論文狀態:Published in CVIU Volume 161 Issue C, August 2017 論文地址:https://arxiv.org/abs/1606.02228 github地址:https://github.com/ducha-aiki/caffenet-benchmar

Tensorflow學習教程------利用神經網路對mnist資料集進行分類_利用訓練好的模型進行分類

#coding:utf-8 import tensorflow as tf from PIL import Image,ImageFilter from tensorflow.examples.tutorials.mnist import input_data def imageprepare(ar

Tensorflow學習筆記(五)——神經網路實現

今天來實現tensorflow架構下的卷積神經網路,首先了解清楚我們要構建的網路架構,資料集還是用mnist,所以輸入還是28X28。 建立的卷積神經網路架構是:卷積層->pooling層->卷積層->pooling層->全連線層1->全連線層2。 全連線層

【基於tensorflow的學習】經典神經網路、模型的儲存和讀取

 CNN發展史: 1.經典卷積神經網路 以下僅列出關於CNN的深層次理解: 卷積層 tensorflow中卷積層的建立函式:_conv1 = tf.nn.conv2d(_input_r, tf.Variable(tf.random_normal([3, 3, 1, 6

cs231n-學習筆記-05神經網路

卷積神經網路 1 簡介 全連線網路層 32x32x3的影象->伸展成3072x1 輸入x (3072,1) 計算Wx (10,3072) x (3072,1) = (10,1) 輸出y (10,1) 卷積網路層

TensorFlow學習筆記(7) 神經網路簡介

前面所提到的MNIST是一個相對簡單的資料集,而在其他更復雜的影象識別資料集上,卷積神經網路有更好的表現。比如Cifar資料集和ImageNet資料集。Cifar分為Cifar-10和Cifar-100兩個問題,都是32*32的彩色圖片,Cifar-10問題收集了來自10個不同種類的60000張圖片