當深度學習趕上異構並行計算

當深度學習趕上異構並行計算

近幾年來,以深度神經網絡(DNN)爲表明的深度學習如火如荼,深度學習的研究領域從開始的圖像識別(如imagenet比賽)到如今的天然語言處理,幾乎有席捲一切機器學習研究領域的趨勢。算法

對於深度神經網絡的訓練來講,一般網絡越深,須要的訓練時間越長。對於一些網絡結構來講,若是使用串行的X86 處理器來訓練的話,可能須要幾個月、甚至幾年,所以必需要使用並行甚至是異構並行的方法來優化代碼的性能纔有可能讓訓練時間變得能夠接受。編程

人類生活的方方面面存在着並行或者併發,邊吃飯邊看電視,雙手同時拔草,甚至吃飯時,嘴巴的動做和手的動做也是並行的。和人類社會普遍存在並行不一樣的是:計算機編程幾乎一直都是串行的,絕大多數的程序只存在一個進程或線程。對於並行和向量化的研究能夠追溯到20世紀60年代,可是直到近年來才獲得普遍的關注,主要是自2003年以來,能耗和散熱問題限制了 X86 CPU頻率的提升,從而致使多核和向量處理器的普遍使用。性能優化

2003年之前,在摩爾定律的做用下,單核標量處理器的性能持續提高,軟件開發人員只須要寫好軟件,而性能就等待下次硬件的更新,在2003年以前的幾十年裏,這種「免費午飯」的模式一直在持續。2003年後,主要因爲功耗的緣由,這種「免費的午飯」已經不復存在。爲了生存,各硬件生產商不得不採用各類方式以提升硬件的計算能力,如下是目前最流行的幾種方式是。服務器

1)讓處理器一個週期處理多條指令,這多條指令可相同可不一樣。如Intel Haswell處理器一個週期可執行4條整數加法指令、2條浮點乘加指令,同時訪存和運算指令也可同時執行。網絡

2)使用向量指令,主要是SIMD和VLIW技術。SIMD技術將處理器一次可以處理的數據位數從字長擴大到128或256位,也就提高了計算能力。架構

3)在同一個芯片中集成多個處理單元,根據集成方式的不一樣,分爲多核處理器或多路處理器。多核處理器是如此的重要,以致於如今即便是手機上的嵌入式ARM處理器都已是四核或八核。併發

4) 使用異構處理器,不一樣的架構設計的處理器具備不一樣的特色,如X86 處理器爲延遲優化,以減小指令的執行延遲爲主要設計考量(固然今天的X86 處理器設計中也有許多爲吞吐量設計的影子);如NVIDIA GPU和AMD GPU則爲吞吐量設計,以提升整個硬件的吞吐量爲主要設計目標。機器學習

標量單核的計算能力沒有辦法接着大幅度提高,而以深度學習爲表明的應用對硬件計算能力的需求依舊在提高,這是個實實在在的矛盾。在可見的未來,要解決這個矛盾,軟件開發人員只有代碼優化和並行能夠選擇。編程語言

從2006年開始,可編程的GPU愈來愈獲得大衆的承認,GPU是圖形處理單元(Graphics Processing Unit)的簡稱,最初主要用於圖形渲染。自20世紀90年代開始,NVIDIA、AMD(ATI)等GPU生產商對硬件和軟件加以改進,GPU的可編程能力不斷提升,GPU通用計算比之前的GPGPU(General-Gurpose Computing on Graphics Processing Units)容易許多,另外因爲GPU具備比CPU強大的峯值計算能力,近來引發了許多科研人員和企業的興趣。工具

在深度學習應用領域,自從cuda-convnet爲利用gpu的計算能力設計開始,如今主流的深度學習平臺(如caffe, theano)都支持GPU的訓練,能夠絕不諱言的說:GPU硬件已是深度學習訓練平臺的標準配置。

要將使用GPU訓練得到的深度學習模型部署給用戶使用時,一樣須要考慮深度學習算法對硬件計算能力的需求。因爲不是每一個客戶都有GPU硬件,故在目前實際應用中,主要的部署平臺是:X86(桌面端)和ARM(移動端),爲了提升吞吐量,使用更少的服務器支持更多的訪問請求,或提升用戶使用體驗,爲X86 和 ARM處理器優化就變得頗有意義。

因爲各類各樣的緣由,大多數軟件開發人員並無很好的並行和代碼優化理論和代碼可供參考。最近華章出版公司出版的、由異構並行計算領域專家風辰編寫的《並行算法設計與性能優化》、《並行編程方法與優化實踐》和《科學計算與企業級應用的並行優化》填補了國內這一領域的空白。其中《並行算法設計與性能優化》和《並行編程方法與優化實踐》已經上線,能夠在京東和噹噹上購買。

《並行算法設計與代碼優化》關注在並行優化和並行計算相關的理論、算法設計及高層次的實踐經驗;因爲這本書填補了國內代碼性能優化和並行計算的空白,獲得了吳韌老師的強烈推薦。若是讀者想要了解代碼優化和並行化背後的理論基礎,可購買此書。

《並行編程方法與優化實踐》關注於C程序設計語言的向量化和並行化擴展及算法到硬件的映射;此書介紹了常見的SSE/AVX/NEON SIMD指令集編程,以及用於GPU的異構並行編程語言CUDA、OpenCL和OpenACC,以及常見的用於多核編程的OpenMP標準。而且以稠密矩陣運算和圖像處理爲例,介紹瞭如何使用這些工具優化程序性能。

《科學計算與企業級應用的並行優化》則關注於如何將線性代數、偏微分方程求解、分子動力學和機器學習領域的常見算法優良的在X86和GPU平臺上實現出來。

相關文章
相關標籤/搜索