1. 程式人生 > >深度學習的訓練加速

深度學習的訓練加速

深層模型訓練需要各種技巧,例如網路結構的選取,神經元個數的設定,權重引數的初始化,學習率的調整,Mini-batch的控制等等。即便對這些技巧十分精通,實踐中也要多次訓練,反覆摸索嘗試。此外,深層模型引數多,計算量大,訓練資料的規模也更大,需要消耗很多計算資源。如果可以讓訓練加速,就可以在同樣的時間內多嘗試幾個新主意,多除錯幾組引數,工作效率會明顯提升,對於大規模的訓練資料和模型來說,更可以將難以完成的任務變成可能。這一節就談談深層模型的訓練加速方法。

GPU加速

向量化程式設計是提高演算法速度的一種有效方法。為了提升特定數值運算操作(如矩陣相乘、矩陣相加、矩陣-向量乘法等)的速度,數值計算和平行計算的研究人員已經努力了幾十年。向量化程式設計強調單一指令並行操作多條相似資料,形成單指令流多資料流(SIMD)的程式設計泛型。深層模型的演算法,如BP,Auto-Encoder,CNN等,都可以寫成向量化的形式。然而,在單個CPU上執行時,向量運算會被展開成迴圈的形式,本質上還是序列執行。

GPU(Graphic Process Units,圖形處理器)的眾核體繫結構包含幾千個流處理器,可將向量運算並行化執行,大幅縮短計算時間。隨著NVIDIA、AMD等公司不斷推進其GPU的大規模並行架構支援,面向通用計算的GPU(General-Purposed GPU, GPGPU)已成為加速可並行應用程式的重要手段。得益於GPU眾核(many-core)體系結構,程式在GPU系統上的執行速度相較於單核CPU往往提升幾十倍乃至上千倍。目前GPU已經發展到了較為成熟的階段,受益最大的是科學計算領域,典型的成功案例包括多體問題(N-Body Problem)、蛋白質分子建模、醫學成像分析、金融計算、密碼計算等。

利用GPU來訓練深度神經網路,可以充分發揮其數以千計計算核心的高效平行計算能力,在使用海量訓練資料的場景下,所耗費的時間大幅縮短,佔用的伺服器也更少。如果對針對適當的深度神經網路進行合理優化,一塊GPU卡可相當於數十甚至上百臺CPU伺服器的計算能力,因此GPU已經成為業界在深度學習模型訓練方面的首選解決方案。

資料並行

資料並行是指對訓練資料做切分,同時採用多個模型例項,對多個分片的資料並行訓練。

圖13 資料並行的基本架構 [17]

要完成資料並行需要做引數交換,通常由一個引數伺服器(Parameter Server)來幫助完成。在訓練的過程中,多個訓練過程相互獨立,訓練的結果,即模型的變化量ΔW需要彙報給引數伺服器,由引數伺服器負責更新為最新的模型W’ = W – η ∙ ΔW,然後再將最新的模型W’分發給訓練程式,以便從新的起點開始訓練。

資料並行有同步模式和非同步模式之分。同步模式中,所有訓練程式同時訓練一個批次的訓練資料,完成後經過同步,再同時交換引數。引數交換完成後所有的訓練程式就有了共同的新模型作為起點,再訓練下一個批次。而非同步模式中,訓練程式完成一個批次的訓練資料,立即和引數伺服器交換引數,不考慮其他訓練程式的狀態。非同步模式中一個訓練程式的最新結果不會立刻體現在其他訓練程式中,直到他們進行下次引數交換。

引數伺服器只是一個邏輯上的概念,不一定部署為獨立的一臺伺服器。有時候它會附屬在某一個訓練程式上,有時也會將引數伺服器按照模型劃分為不同的分片,分別部署。

模型並行

模型並行將模型拆分成幾個分片,由幾個訓練單元分別持有,共同協作完成訓練。當一個神經元的輸入來自另一個訓練單元上的神經元的輸出時,產生通訊開銷。

圖14 模型並行的基本架構 [17]

多數情況下,模型並行帶來的通訊開銷和同步消耗超過資料並行,因此加速比也不及資料並行。但對於單機記憶體無法容納的大模型來說,模型並行是一個很好的選擇。令人遺憾的是,資料並行和模型並行都不能無限擴充套件。資料並行的訓練程式太多時,不得不減小學習率,以保證訓練過程的平穩;模型並行的分片太多時,神經元輸出值的交換量會急劇增加,效率大幅下降。因此,同時進行模型並行和資料並行也是一種常見的方案。如下圖所示,4個GPU分為兩組,GPU0,1為一組模型並行,GPU2,3為另一組,每組模型並行在計算過程中交換輸出值和殘差。兩組GPU之間形成資料並行,Mini-batch結束後交換模型權重,考慮到模型的藍色部分由GPU0和GPU2持有,而黃色部分由GPU1和GPU3持有,因此只有同色的GPU之間需要交換權重。

圖15 4GPU卡的資料並行和模型並行混合架構

計算叢集

搭建CPU叢集用於深度神經網路模型訓練也是業界常用的解決方案,其優勢在於利用大規模分散式計算叢集的強大計算能力,利用模型可分散式儲存、引數可非同步通訊的特點,達到快速訓練深層模型的目的。

CPU叢集方案的基本架構包含用於執行訓練任務的Worker、用於分散式儲存分發模型的引數伺服器(Parameter Server)和用於協調整體任務的主控程式(Master)。CPU叢集方案適合訓練GPU記憶體難以容納的大模型,以及稀疏連線神經網路。Andrew Ng和Jeff Dean在Google用1000臺CPU伺服器,完成了模型並行和Downpour SGD資料並行的深度神經網路訓練[17]。

結合GPU計算和叢集計算技術,構建GPU叢集正在成為加速大規模深度神經網路訓練的有效解決方案。GPU叢集搭建在CPU-GPU系統之上,採用萬兆網絡卡或Infiniband等更加快速的網路通訊設施,以及樹形拓撲等邏輯網路拓撲結構。在發揮出單節點較高計算能力的基礎上,再充分挖掘叢集中多臺伺服器的協同計算能力,進一步加速大規模訓練任務。

相關推薦

深度學習訓練技巧---權重初始化

常量 反向傳播 ive str 防止 自己 對稱性 就是 導致 全零初始化   全零初始化即所有的變量均被初始化為0,這應該是最笨、最省事的隨機化方法了。然而這種偷懶的初始化方法非常不適合深度學習,因為這種初始化方法沒有打破神經元之間的對稱性,將導致收斂速度很慢甚至訓練失敗

深度學習訓練評價指標

深度學習分類任務評價指標 PR曲線即查準率(Precision)與查全率(Recall) https://blog.csdn.net/zong596568821xp/article/details/80797695   深度學習常用評價指標(分類清晰) https://

配置深度學習GPU加速(Cuda以及Cudnn安裝,win10作業系統下)

https://blog.csdn.net/hejunqing14/article/details/76059603 https://blog.csdn.net/Captain_F_/article/details/79171332 https://blog.csdn.net/xuyanan

深度學習訓練中關於資料處理方式--原始樣本採集以及資料增廣

         好久沒有寫部落格,一直想重新調整自己的部落格,想盡可能寫的前後連貫一點,同時希望自己寫的更通熟易懂些,可是遲遲沒有動筆修改曾經的博文,哎,還是慢慢跟著自己的理解再修改之前的文章吧,今兒就寫寫關於深度學習訓練中最關鍵的一步,資料問題,也就是樣本庫的建立!來

深度學習訓練的常用名詞

     本文節選自CVer《深度學習速查詞典》中的一部分內容,並補充一些常見名詞。       batch size 一次前向或反向傳播時樣本的數目,該引數受限於記憶體的大小。      

如何解決機器學習深度學習訓練集樣本不均衡的問題!

解決樣本不均衡的問題很多,主流的幾個如下: 1.樣本的過取樣和欠取樣。 2..使用多個分類器進行分類。 3.將二分類問題轉換成其他問題。 4.改變正負類別樣本在模型中的權重。 一、樣本的過取樣和欠取樣。 1.過取樣:將稀有類別的樣本進行復制,通過增加此稀有

深度學習(訓練/開發/測試集)的劃分技巧

github部落格傳送門 部落格園傳送門 小資料量時代(100 - 1000 - 10000條左右): 一. 70%訓練集 , 30%測試集 二. 60%訓練集 , 20%交叉驗證集 , 20%測試集 大資料量時代(1000000條左右或更多): 一. 98%訓練集 ,

G2P(單詞到音素)的深度學習訓練測試

音素提取是語音識別中的一塊重要內容。 G2P(Grapheme-to-Phoneme),英文意思是字素到音素,使用迴圈神經網路(recurrent neural network,RNN) 和LSTM( long short-termmemory units),來實現從英

Caffe的深度學習訓練全過程

本文為大資料雜談4月20日微信社群分享內容整理。 今天的目標是使用Caffe完成深度學習訓練的全過程。Caffe是一款十分知名的深度學習框架,由加州大學伯克利分校的賈揚清博士於2013年在Github上釋出。自那時起,Caffe在研究界和工業界都受到了極大的關注。Caf

深度學習訓練資料python程式碼——資料增廣(二)

python影象資料增強庫 Augmentor使用比較簡單,只有一些簡單的操作。 imgaug實現的功能更多,可以對keypoint, bounding box同步處理,比如你現在由一些標記好的資料,只有同時對原始圖片和標記資訊同步處理,才能有更多的標記資料進行訓練。我

密碼危機:深度學習正在加速密碼破解!

資訊保安專家們一直在探索“生成式對抗網路”(GAN)如何提高我們的線上安全性,並取得了令人鼓舞的結果。近日,新澤西州史蒂文斯理工學院和紐約理工學院的研究人員開發了使用GAN猜測密碼的方法。 該小組開發了一個實驗,通過其被稱為“PassGan”的密碼猜測技術來檢視洩露

設定可見GPU,進行多顯示卡深度學習訓練

在深度學習中,如果一臺電腦具有多個NVIDIA的GPUs,使用者想要在不同的GPU上訓練不同的網路,那麼在程式中指定佔用的GPU的id,在python中如: import os os.environ[

VggNet10模型的cifar10深度學習訓練

先放些連結 cifar10的資料集的下載地址:http://www.cs.toronto.edu/~kriz/cifar.html 用二進位制tfcords的資料集訓練,下載第三個,下載的資料檔案集是這樣的 上面下載的檔案中,data_batch_(num).bin是訓

深度學習——訓練trick

1、資料預處理 資料必須進行預處理以使其zero-mean。 影象處理中有兩種方式中心化:減去均值影象(32,32,3);減去每通道均值(3個值)。 2、梯度檢查 使用中心形式: 使用雙精度:

深度學習訓練的小技巧,調參經驗。總結與記錄。

經常會被問到你用深度學習訓練模型時怎麼樣改善你的結果呢?然後每次都懵逼了,一是自己懂的不多,二是實驗的不多,三是記性不行忘記了。所以寫這篇部落格,記錄下別人以及自己的一些經驗。 Ilya Sutskever(Hinton的學生)講述了有關深度學習的見解及實用建議: 獲取

斯坦福DAWNBench:華為雲ModelArts深度學習訓練全球最快

res 服務 資源 搜索 由於 機器 最短時間 包含 讀取 斯坦福DAWNBench:華為雲ModelArts深度學習訓練全球最快 近日,斯坦福大學發布了DAWNBenchmark最新成績,在圖像識別(ResNet50-on-ImageNet,93%以上精度)的總訓練時間上

如何將深度學習訓練速度提升一百倍?PAISoar 來了

阿里妹導讀:得力於資料規模增長、神經網路結構的演進和計算能力的增強,深度學習的影象處理、語音識別等領域取得了飛速發展。隨著訓

深度學習訓練加速

深層模型訓練需要各種技巧,例如網路結構的選取,神經元個數的設定,權重引數的初始化,學習率的調整,Mini-batch的控制等等。即便對這些技巧十分精通,實踐中也要多次訓練,反覆摸索嘗試。此外,深層模型引數多,計算量大,訓練資料的規模也更大,需要消耗很多計算資源。如果可以讓

基於深度學習的病毒檢測技術無需沙箱環境,直接將樣本文件轉換為二維圖片,進而應用改造後的卷積神經網絡 Inception V4 進行訓練和檢測

進制 思科 開發 主題 需求 做的 病毒 無法 大於 話題 3: 基於深度學習的二進制惡意樣本檢測 分享主題:全球正在經歷一場由科技驅動的數字化轉型,傳統技術已經不能適應病毒數量飛速增長的發展態勢。而基於沙箱的檢測方案無法滿足 APT 攻擊的檢測需求,也受到多種反沙箱技術的

深度學習的異構加速技術(二):螺獅殼裏做道場

篩選 分享 intel 支持 get 更多 wid efficient 優勢 作者簡介:kevinxiaoyu,高級研究員,隸屬騰訊TEG-架構平臺部,主要研究方向為深度學習異構計算與硬件加速、FPGA雲、高速視覺感知等方向的構架設計和優化。“深度學習的異構加速技術”系列