【杂谈】学深度学习的你有GPU了吗
隨著人工智能越來越火,越來越多的人想從事人工智能相關的工作,如計算機視覺等。如果你正想或已經入門計算機視覺行業,你必須擁有GPU。因為深度學習的成功與否很大程度上取決于硬件承載的能力,所以你必須要一個GPU來訓練你的模型!
作者&編輯 | 湯興旺&言有三??
1 什么是GPU
計算機常見的處理器包括CPU和GPU,CPU即中央處理單元(Central processing unit),它是計算機的控制核心。CPU需要很強的通用性來處理各種不同的數據類型,同時在大量的邏輯判斷中,包含了大量的分支跳轉和中斷處理,使得CPU的內部結構異常復雜,不擅長于快速計算。
GPU(Graphic Processing Unit),中文名稱是圖形處理器。其主要是用于處理圖形信號的單芯片處理器,在獨立顯卡中, 一般位于PCB板的中心?。
GPU專為圖像處理設計,存儲系統實際上是一個二維的分段存儲空間,包括一個區段號(從中讀取圖像)和二維地址(圖像中的X、Y坐標)。GPU采用了數量眾多的計算單元和超長的流水線,但只有非常簡單的控制邏輯并省去了Cache。
可以說GPU是一種讓計算機視覺領域的從業者和無數游戲玩家為之瘋狂的處理器,目前GPU是研發強大深度學習算法必備的硬件。
2 GPU發展簡史
了解完什么是GPU后,我們說下GPU始祖——Geforce256。
1999年,第一款真正意義上的顯卡芯片Geforce256由NVIDIA推出,Geforce256第一次被稱為GPU(Graphics Processing Unit),即圖形處理單元,其具有完整的頂點變換、光照計算、參數設置以及渲染等四種3D計算引擎,極大加快了計算機3D程序運行速度,減輕了CPU負擔。
盡管Geforce256中的固定管線雖然能實現完整的3D圖形計算,但是其處理算法固定,弊端日漸凸顯,因此人們開始考慮一種可編程的GPU。
于是NVIDIA推出了Geforce3,ATI推出了Radeon8500。這也就是第二代GPU,接下來的幾年,GPU都是以這種獨立的可編程架構設計發展,時間是1999年到2002年。
但此時的GPU編程比較有限,于是到了03年后,第三代GPU推出,特別是2006年NVIDIA與ATI分別推出了CUDA(Computer Unified Device Architecture,統一計算架構)編程環境和CTM(Close To the Metal)編程環境,這使GPU通用計算編程的復雜性大幅度降低。
GPU技術當前在不斷進步,我們再來了解下它的發展歷程和其技術的創新和突破。
從上表GPU的發展歷程,我們可以從并行體系結構的角度將其劃分為三個時代:
1 固定功能架構時代
這個時代發生在1995-2000年, 期間各硬件單元形成一條圖形處理流水線,每個流水線功能固定, 硬化了一些給定的函數。其計算模型是流式計算(stream computing),GPU也卸去了CPU的計算負擔, 聚焦于圖形繪制功能, 促進了圖形學發展。
2?分離渲染架構時代
這個時代發生在2001-2005年,此時GPU用可編程的頂點渲染器替換了變換與光照相關的固定單元,用可編程的像素渲染器替換了紋理采樣與混合相關的固定單元。這兩部分是實現圖形特效最密集的部分,?使用渲染器大大加強了圖形處理的靈活性與表現力。
3?統一渲染架構時代
從2006年開始到現在GPU技術一直處于統一渲染架構時代。在這一時代,GPU首次提供幾何渲染程序(geometry shader program)功能,并動態調度統一的渲染硬件(unified shader)來執行頂點、幾何、像素程序,在體系結構上不再是流水線的形式,而呈現并行機的特征。?
如今GPU廠商們開始從硬件和API上提供對GPU專門支持,且推出專門做通用計算的GPU(如AMD FireStream和NVIDIA Tesla)。GPU的服務對象也從以圖形為主發展為圖形和高性能計算并重。
3 GPU與CPU運算能力對比
我們應該知道GPU有著高速的浮點運算能力,那么其計算能力到底有多大呢?
CPU的峰值計算能力=CPU頻率×CPU核心數*浮點運算單元數
i7-8700K的CPU頻率=3.7GHZ,核數為6,浮點運算單元數為16。
那么i7-8700K的CPU的浮點運算能力是3.7*16*6<360Gflops以下,而目前的TITAN V峰值浮點性能(特指深度學習)為110TFlops(1T=1024G),TESLA v00是125TFlops,可以看出GPU的浮點運算能力吊打CPU。
GPU特殊的硬件架構突出了對CPU的優勢:擁有高帶寬的獨立顯存;浮點運算性能高;幾何處理能力強;適合處理并行計算任務;適合進行重復計算;適合圖像或視頻處理任務;能夠大幅度降低系統成本。
盡管GPU運算能力超強,但不代表GPU可以取代CPU了。CPU是設計用來處理通用任務的處理、加工、運算以及系統核心控制等業務邏輯類工作,其微架構是為高效率處理數據相關性不大的計算類、復雜繁瑣的非計算類等工作而優化的。總之,當前CPU和GPU各有各的優勢,各司其職。
4 深度學習與GPU
想要搞好深度學習,GPU是必備的,其適合深度學習的有三大理由,分別是高寬帶的內存、多線程并行下的內存訪問隱藏延遲和數量多且速度快的可調整的寄存器和L1緩存。
接下來,我們詳細說說GPU與深度學習完美搭配的三大理由。
第一大理由——高帶寬
首先,我們需要知道CPU是基于延遲優化的,而GPU是基于帶寬優化的。舉個例子:如下圖所示,CPU與GPU就像法拉利與卡車,兩者的任務都是從隨機位置A提取貨物(即數據包),并將這些貨物傳送到另一個隨機位置B。法拉利(CPU)可以快速地從RAM里獲取一些貨物,而大卡車(GPU)則慢很多,有著更高的延遲。但是,法拉利傳送完所有貨物需要往返多次,相比之下,大卡車可以一次提取更多的貨物,減少往返次數。
換句話說,CPU更擅長于快速獲取少量的內存,GPU則更擅長于獲取大量的內存。
第二大理由——多線程并行
為了理解多線程并行這個概念,我們同樣舉一個例子。如下圖所示:
如果讓大卡車往返多次來提取貨物,一旦卡車已經出發,你將會花上大量的時間來等待下一次的貨物裝載,畢竟卡車速度很慢。然而,如果你使用一隊法拉利或大卡車(即多線程并行)來運輸大量的貨物(例如像矩陣一樣的大塊內存),那么你只需要花上一點時間來等待第一次運輸,之后就無需等待了,因為卸貨的過程長,此時所有卡車都在B區排隊卸貨,所以你可以直接在B區取到你的貨物。
這種方法有效地隱藏了延遲,GPU可以在多線程并行下隱藏延遲的同時提供高帶寬,因此,對于大塊內存來說,GPU提供了幾乎沒有缺點的最佳內存帶寬。這是為什么GPU比CPU在處理深度學習上更快速的第二個理由。
第三大理由——可調整的L1緩存和寄存器
GPU寄存器的充分利用似乎很難實現,因為它作為最小的計算單元,需要進行微調來滿足高性能。關于這個問題,NVIDIA已經開發出了很好的編譯工具,它可以準確地指出你使用了多少寄存器,讓你更容易調整GPU代碼,合理安排寄存器和L1緩存的數量以獲得快速的性能,這就使得GPU比其他諸如Xeon Phis一類的架構有優勢。
最終,這意味著你可以在GPU的L1 緩存和寄存器中存儲大量數據來反復計算卷積和矩陣乘法。如果你有一個100MB的矩陣,你可以把它拆分為適合你緩存和寄存器的多個小矩陣,然后用10-80TB/s的速度做三個矩陣塊的乘法,處理速度非???。這也是GPU比CPU快且更適合于深度學習的第三個原因。
5 選擇GPU的筆記本
從開始我們就說過學深度學習成功與否與硬件的關系很大,其最重要的就是顯卡,當然我們首推Nvidia顯卡。想要了解各種顯卡參數,請看https://www.nvidia.com/zh-cn/
因為顯卡的參數就是顯存,而且我們大部分模型是在GPU上進行訓練,所以這個顯存當然是越大越好,但是對于個人開發者來說,必須在顯存和經濟能力之間取得平衡。在這里我們推薦顯存8G的顯卡,其可以滿足你在學習深度學習時候的大多數需求,不管是驗證和訓練都不會有問題!
最后推薦下預算8000左右可以購買神舟(HASEE)戰神ZX8-CR6S1,其是GTX1070 8G獨顯!
當然如果大家有更好的選擇,歡迎留言!
6 深度學習與GPU
對于像我這樣的學生黨來說,上面帶有GPU的筆記本的價格還是挺貴的,如果我們要去租GPU,一個月也要好幾百,這也是我們無法承受的。于是我們在想,如果要有免費的GPU多好!接下來我就推薦一些免費的GPU資源。
1、Google Colab
Google Colab,全名Colaboratory,它可以讓我們免費使用GPU,其GPU型號是Tesla K80!它本身包含 Keras、TensorFlow、PyTorch、OpenCV等大部分深度學習庫,基本不需要我們額外安裝運行環境。下面是其官方教程,我們可以憑借它基本入門Colab。
新手指引:https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d
常見問題:https://research.google.com/colaboratory/faq.html
2、FloydHub
FloydHub,這是一個由Heroku提供的Deep Learning的訓練平臺,可以讓你使用簡單的命令就在本機提交訓練任務,支持Caffe,Tensoflow,Torch等等。
對于新用戶,有免費的2個小時的GPU訓練時間,當然后續你可以購買其他計劃。
3、?Kaggle Kernels
Kaggle Kernels是一個能在瀏覽器中運行Jupyter Notebooks 的免費平臺,我們可以通過它免費使用 NVidia K80 GPU訓練我們的模型。
總結
工欲善其事,必先利其器,為了學好深度學習,我們必須備好GPU。如果你是剛入門深度學習,請問你有GPU了嗎?如果您在深度學習領域工作多年,那么請問您什么時候擁有自己的GPU了呢?歡迎留言!
轉載文章請后臺聯系
侵權必究
更多請關注知乎專欄《有三AI學院》
往期精選
【總結】這半年,有三AI都做了什么
【AI初識境】從3次人工智能潮起潮落說起
【AI初識境】從頭理解神經網絡-內行與外行的分水嶺
【AI初識境】近20年深度學習在圖像領域的重要進展節點
【AI初識境】激活函數:從人工設計到自動搜索
【AI初識境】什么是深度學習成功的開始?參數初始化
【AI初識境】深度學習模型中的Normalization,你懂了多少?
【雜談】白身,初識,不惑,有識,不可知,你處于深度學習工程師哪一重境界了
想要變身”AI專家“,就戳戳手指關注我們吧
別忘了點“好看”支持作者噢? ????
總結
以上是生活随笔為你收集整理的【杂谈】学深度学习的你有GPU了吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学员分享】程序员效率神器,最常用VIM
- 下一篇: 【有三吐槽】程序员改BUG的六重境界,你