当深度学习遇上异构并行计算
當深度學習遇上異構并行計算
近幾年來,以深度神經網絡(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平臺上實現出來。
總結
以上是生活随笔為你收集整理的当深度学习遇上异构并行计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP网站安装程序的原理及代码
- 下一篇: 关于技术博客的思考