深度學習簡介,GPU計算的原理,分布式機器學習原理

2021-02-13 校苑數模


深度學習的概念源於人工神經網絡的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現數據的分布式特徵表示。

深度學習採用的模型為深層神經網絡(Deep Neural Networks,DNN)模型,即包含多個隱藏層(Hidden Layer,也稱隱含層)的神經網絡(Neural Networks,NN)。深度學習利用模型中的隱藏層,通過特徵組合的方式,逐層將原始輸入轉化為淺層特徵,中層特徵,高層特徵直至最終的任務目標。

如下圖所示:

相對於傳統的神經網絡,深度學習含有更多的隱層(hidden layer),構造包含多隱藏層的深層網絡結背後的理論依據包括仿生學依據與訓練任務的層次結構依據。

對於很多訓練任務來說,特徵具有天然的層次結構。以語音、圖像、文本為例,層次結構大概如下表所示。

以圖像識別為例,圖像的原始輸入是像素,相鄰像素組成線條,多個線條組成紋理,進一步形成圖案,圖案構成了物體的局部,直至整個物體的樣子。不難發現,可以找到原始輸入和淺層特徵之間的聯繫,再通過中層特徵,一步一步獲得和高層特徵的聯繫。想要從原始輸入直接跨越到高層特徵,無疑是困難的。

1.  GPU算的優勢

複雜的人工智慧算法訓練與計算經常涉及上億的參數,這些參數的計算需要大量的計算能力,目前在深度學習領域,GPU計算已經成為主流,使用GPU運算的優勢如下:

目前,主流的GPU具有強大的計算能力和內存帶寬,如下圖所示,無論性能還是內存帶寬,均遠大於同代的CPU。 同時,GPU的thousands of cores的並行計算能力也是一大優勢。

理解 GPU 和 CPU 之間區別的一種簡單方式是比較它們如何處理任務。CPU 由專為順序串行處理而優化的幾個核心組成,而 GPU 則擁有一個由數以千計的更小、更高效的核心(專為同時處理多重任務而設計)組成的大規模並行計算架構。同時CPU相當的一部分時間在執行外設的中斷、進程的切換等任務,而GPU有更多的時間並行計算。


2.  GPU算的原理

那麼,CPU與GPU如何協同工作?下圖展示了CPU與GPU的並存體系模式。

在需要GPU進行運算時,以NVIDIA推出的CUDA(Compute Unified Device Architecture)為例,整體的原理如下:

整體分為4步:

從主機內存將需要處理的數據copy到GPU的內存

CPU發送數據處理執行給GPU

GPU執行並行數據處理

將結果從GPU內存copy到主機內存

CUDA提供了對於一般性通用需求的大規模並發編程模型,使用戶可以對NVIDIA GPU方便的對於 GPU進行並發性編程。如果進行編譯優化會在特定作業系統裡面把計算並行化分配到GPU的多個core裡面,由於GPU有多個core(上千個),所以並發度大大提高,運算效率會比CPU高。下面用代碼表明了如何通過GPU進行計算:

有三個數組int a[10], b[10], c[10];我們要計算a和b的向量之和存放到c中。

一般C語言:

for(int i=0; i<10; i++)

c[i] = a[i] + b[i];


CUDA編程做法:

GPU中的每個線程(核)有一個獨立序號叫index,那麼只要序號從0到9的線程執行c[index] = a[index] + b[index];就可以實現以上的for循環。

3.  GPU並行算的原理

由於每臺伺服器有多個CPU,多個GPU,同時為了進一步提高並行機器學習效率,我們的目標是為了多臺伺服器(每臺伺服器包含多塊GPU卡)採取分布式計算的形式進行,那麼要完成目標,在硬體層面需要進行伺服器集群的構建,同時需要在深度學習框架層面也支持分布式,下面介紹GPU計算的分布式原理,深度學習分布式原理在下一個章節介紹。

首先簡單介紹下單主機內GPU並行計算的基本原理:

單GPU並行計算:

針對每次訓練數據,模型內計算通過多次GPU 內核的調用完成計算。權重W值一直存在GPU內存中,直到所有訓練數據計算完畢之後回傳到系統內存中。

多GPU並行計算之數據並行:

數據並行是指不同的GPU計算不同的訓練數據,即把訓練數據劃分給不同的GPU進行分別計算,由於訓練是逐步訓練的,後一個訓練數據的計算需要前一個訓練數據更新的W(W通常是指模型訓練變化了的數據),數據並行改變了這個計算順序,多GPU計算需要進行W的互相通信,滿足訓練的特點,使訓練可以收斂。數據並行如上圖所示,多GPU訓練不同的數據,每訓練一次需要同步W,使得後面的訓練始終為最新的W。該模型的缺點是當模型較大時,GPU內存無法滿足存儲要求,無法完成計算。

 

多GPU並行計算之模型並行:

模型並行是指多個GPU同時計算同一個訓練數據,多個GPU對模型內的數據進行劃分,在一次訓練數據多層計算過程中,每個GPU內核計算之後需要互相交換數據才能進行下一次的計算。

可以看出,模型並行需要更頻繁的通信,增加通信壓力,且實現難度較大

多GPU並行計算之集群計算:

GPU集群並行模式即為多GPU並行中各種並行模式的擴展,如上圖所示。節點間採用InfiniBand通信,節點間的GPU通過RMDA通信,節點內多GPU之間採用基於infiniband的通信。

分布式深度學習框架的基本原理,每個深度學習框架在分布式實現上各有不同,在此,我們用tensorflow作為例子:

分布式TensorFlow集群由多個服務端進程和客戶端進程組成. 服務端和客戶端的代碼可以在不同的機器上也可以在同一個機器上。在具體實現上,分為ps伺服器與worker伺服器,ps伺服器即是參數伺服器,當模型越來越大,模型的參數越來越多,多到模型參數的更新,一臺機器的性能都不夠的時候,就需要把參數分開放到不同的機器去存儲和更新。

於是就有了參數伺服器的概念。

參數伺服器可以是多臺機器組成的集群,類似分布式的存儲架構,涉及到數據的同步,一致性等等, 一般是key-value的形式,可以理解為一個分布式的key-value內存資料庫,然後再加上一些參數更新的操作,採取這種方式可以幾百億的參數分散到不同的機器上去保存和更新,解決參數存儲和更新的性能問題。

在tensorflow中,計算節點稱做worker節點。

在運行在具體的物理集群時,PS伺服器可以挑選如下圖中的node0、node1…,worker節點可以挑選如下圖中的node2,node3…

 

tensorflow的分布式有in-graph和between-gragh兩種架構模式。

in-graph模式,把計算已經從單機多GPU擴展到了多機多GPU, 不過數據分發還是在一個節點。 這樣的好處是配置簡單,但是這樣的壞處是訓練數據的分發依然在一個節點上,要把訓練數據分發到不同的機器上,嚴重影響並發訓練速度。在大數據訓練的情況下,不推薦使用這種模式。

between-graph模式下,訓練的參數保存在參數伺服器,數據不用分發,數據分片的保存在各個計算節點,各個計算節點自己算自己的,算完了之後,把要更新的參數告訴參數伺服器,參數伺服器更新參數。 這種模式的優點是不用訓練數據的分發, 尤其是在數據量在TB級的時候,所以大數據深度學習推薦使用between-graph模式。

in-graph模式和between-graph模式都支持同步和異步更新

在同步更新的時候,每次梯度更新,要等所有分發出去的數據計算完成後,返回回來結果之後,把梯度累加算了均值之後,再更新參數。這樣的好處是loss的下降比較穩定, 但是這個的壞處也很明顯, 處理的速度取決於最慢的那個分片計算的時間。

在異步更新的時候,所有的計算節點,各自算自己的,更新參數也是自己更新自己計算的結果,這樣的優點就是計算速度快,計算資源能得到充分利用,但是缺點是loss的下降不穩定,抖動大。

本文介紹了深度學習的概念,GPU的計算原理,包括GPU並行計算的實現,以及分布式深度學習框架(以tensorflow為例)實現的方式。分布式的深度學習框架如果需要進行動態的調度,以及多個學習框架以資源共享的方式運行與同一個集群時,我們又需要在集群上實現集群管理與調度軟體,來實現分布式深度學習框架的資源調度,我們將在我們的下一篇:分布式深度學習的兩種集群管理與調度的實現方式簡介中進行介紹。

 

 註:部分內容與圖片來源於網絡,如有侵犯,請聯繫我們。

相關焦點

  • Python大數據綜合應用 :零基礎入門機器學習、深度學習算法原理與案例
    機器學習、深度學習算法原理與案例實現暨Python大數據綜合應用高級研修班一、課程簡介
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • 一文讀懂「Parameter Server」的分布式機器學習訓練原理
    這裡是 「王喆的機器學習筆記」 的第二十六篇文章。這篇文章我們繼續討論機器學習模型的分布式訓練問題。上篇文章對Spark MLlib的並行訓練方法做了詳細的介紹(分布式機器學習之——Spark MLlib並行訓練原理),如文章所說,Spark採取了簡單直觀的數據並行的方法解決模型並行訓練的問題,但由於Spark的並行梯度下降方法是同步阻斷式的,且模型參數需通過全局廣播的形式發送到各節點,因此Spark的並行梯度下降是相對低效的。
  • 深度學習中GPU和顯存分析
    本文都是針對單機單卡的分析,分布式的情況會和這個有所區別。在分析計算量的時候,只分析了前向傳播,反向傳播計算量一般會與前向傳播有細微的差別。《美團機器學習實踐》_美團算法團隊.pdf《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼特徵提取與圖像處理(第二版).pdfpython就業班學習視頻,從入門到實戰項目2019最新《PyTorch
  • 【CTO講堂】如何用Python一門語言通吃高性能並發、GPU計算和深度...
    本期邀請極驗驗證CTO黃勝藍帶來「如何用Python一門語言通吃高性能並發、GPU計算和深度學習 」的主題分享。歡迎加入CTO講堂微信群與業界大咖零距離溝通,1月7日本期講堂報名方式拖至文末查看。
  • 分布式深度學習最佳入門(踩坑)指南
    本文主要分為兩部分:在各框架分布式簡介中,將先從入門的角度介紹各個框架的分布式接口或相關概念以及和單機程序的主要區別、然後在分布式示例部分,通過各個框架github官方倉庫中的分布式代碼實現(resnet50),簡單介紹各框架的分布式訓練;最後對分布式深度學習中常見的庫如Horovod、Dali做簡單的介紹,
  • 業界 | 詳解Horovod:Uber開源的TensorFlow分布式深度學習框架
    近年來,深度學習引領了圖像處理、語音識別和預測等方面的巨大進步。在 Uber,我們將深度學習應用到了公司業務中,從自動駕駛搜索路線到防禦欺詐,深度學習讓我們的數據科學家和工程師們能夠為用戶提供更好的體驗。TensorFlow 已經成為了 Uber 首選的深度學習庫。因為這個框架是目前使用最為廣泛的開源深度學習框架,對於新的開發者而言非常友好。
  • 深度學習算法 | LSTM算法原理簡介及Tutorial
    目前在機器學習領域,最大的熱點毫無疑問是深度學習,從谷歌大腦(Google Brain)的貓臉識別,到ImageNet比賽中深度卷積神經網絡的獲勝,再到Alphago大勝李世石,深度學習受到媒體、學者以及相關研究人員越來越多的熱捧。這背後的原因無非是深度學習方法的效果確實超越了傳統機器學習方法許多。從2012年Geoffrey E.
  • DMLC深盟分布式深度機器學習開源平臺解析
    【編者按】算法速度、系統性能以及易用性的瓶頸,制約著目前機器學習的普及應用,DMLC分布式深度機器學習開源項目(中文名深盟)的誕生,正是要降低分布式機器學習的門檻。文章將被收錄到《程式設計師》電子刊(2015.06A)人工智慧實踐專題,以下為全文內容:機器學習能從數據中學習。通常數據越多,能學習到的模型就越好。在數據獲得越來越便利的今天,機器學習應用無論在廣度上還是在深度上都有了顯著進步。雖然近年來計算能力得到了大幅提高,但它仍然遠遠不及數據的增長和機器學習模型的複雜化。
  • 「人工智慧師資班」(Python機器學習,圖像識別與深度學習,深度學習與NLP,知識圖譜,強化學習)
    本次培訓分為Python機器學習,圖像識別與深度學習,深度學習與NLP,知識圖譜和強化學習五大專題。本次培訓由權威專家主講,提供實驗環境及實驗數據,並提供配套資料,通過剖析工程案例展現機器學習、深度學習落地全過程。培訓暫定2021年1月5日開始,每個專題6天左右,一共28天,直播集訓。本次培訓由淺入深,面向0基礎、不懂機器學習、不具備任何Python基礎的老師和同學。
  • 【乾貨薈萃】機器學習&深度學習知識資料大全集(二)(論文/教程/代碼/書籍/數據/課程等)
    【導讀】轉載來自ty4z2008(GItHub)整理的機器學習&深度學習知識資料大全薈萃,包含各種論文、代碼、視頻、書籍、文章、數據等等。是學習機器學習和深度學習的必備品!  介紹:ICML2015 論文集,優化4個+稀疏優化1個;強化學習4個,深度學習3個+深度學習計算1個;貝葉斯非參、高斯過程和學習理論3個;還有計算廣告和社會選擇.ICML2015 Sessions.
  • 《深度學習》聖經花書的數學推導、原理與Python代碼實現
    MingchaoZhu同學基於數學推導和產生原理重新描述了書中的概念,並用Python (numpy 庫為主) 復現了書本內容,在Github上開放,歡迎大家查看學習。最後,深度學習全書還提供了一些研究方向,涵蓋的理論主題包括線性因子模型、自編碼器、表示學習、結構化概率模型、蒙特卡羅方法、配分函數、近似推斷以及深度生成模型,適用於相關專業的大學生或研究生使用。《深度學習》可以說是深度學習與人工智慧的入門寶典,許多算法愛好者、機器學習培訓班、網際網路企業的面試,很多都參考這本書。但本書晦澀,加上官方沒有提供代碼實現,因此某些地方較難理解。
  • 深度學習環境搭建
    本文作者尚未具備清楚講述目標檢測原理的能力,學習原理請自行另找文章。1不同作業系統的指引本文中演示的作業系統是Win10。如果要學習如何在Linux作業系統中下載和安裝CUDA9.0、cudnn7.3、tensorflow_gpu1.10,請瀏覽本文作者的另外一篇文章《在谷歌雲伺服器上搭建深度學習平臺》,連結:https://www.jianshu.com/p/893d622d1b5a《在谷歌雲伺服器上搭建深度學習平臺》這篇文章中有部分內容是如何建立和連接雲虛擬機,這部分內容對於擁有Linux主機的讀者是無用的
  • 人工智慧及機器學習與深度學習揭秘
    深度學習、機器學習、人工智慧,這些代表著未來技術的流行語。在本文中,我們將通過一些真實案例討論機器學習和高階的深度學習。在21世紀技術官社區未來的文章中,我們會持續探討垂直行業人工智慧的應用。當然,本文的目的並不是讓你成為數據科學家,而是讓你更好的理解用機器學習都做什麼。
  • 深度強化學習核心技術實戰培訓班
    而深度強化學習,作為一種嶄新的機器學習方法,同時具有感知能力和決策能力,它是深度學習與強化學習的結合,二者的結合涵蓋眾多算法、規則、框架,並廣泛應用於機器人控制、多智能體、推薦系統、多任務遷移等眾多領域,具有極高的研究與應用價值。
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    但進入機器學習和人工智慧領域並不是一件簡單的事情,目前市場上有許多大量的學習資源,許多開發者和想要進入的愛好者往往很難找到適合自己的發展路徑。其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。
  • 深度學習和機器學習的線性代數入門
    機器學習和深度學習建立在數學原理和概念之上,因此AI學習者需要了解基本數學原理。神經元是深度學習的基本單位,該結構完全基於數學概念,即輸入和權重的乘積和。至於Sigmoid,ReLU等等激活函數也依賴於數學原理。
  • 深度學習 | Keras 簡介
    戳左上藍字「阿力阿哩哩的煉丹日常」關注作者哦~這章開始,筆者開始帶領大家一起學習深度學習的原理和實踐。
  • 《機器學習-原理、算法與應用》出版了
    基於深度學習的目標檢測算法綜述用一張圖理解SVM的脈絡深度卷積神經網絡演化歷史及結構改進脈絡理解梯度下降法用一句話總結常用的機器學習算法機器學習算法地圖深度學習算法地圖其他的不再一一列舉。這些文章有一個共同的特點:脈絡清晰,深入淺出,一針見血。
  • 機器學習和深度學習的 5 個關鍵區別
    儘管它們可能被稱為「智能,「有些人工智慧計算機系統不能自己學習;這就是機器學習和深度學習的用武之地。讓我們深入討論機器學習和深度學習到底是什麼,以及機器學習和深度學習的區別。什麼是機器學習?通過機器學習,計算機系統通過編程來學習輸入的數據,而不需要重複編程。