NVIDIA英偉達:深度學習伺服器搭建指南
主講人:Ken(何琨)| NVIDIA開發者社區經理
張康 屈鑫 編輯整理
量子位 出品 | 公眾號 QbitAI
7月21日,量子位聯合NVIDIA英偉達舉行了線下交流會,跟現場近百位開發者同學共同探討了深度學習伺服器搭建過程中可能出現的問題,交流了在開發中的實戰經驗。
本場活動主講人為NVIDIA英偉達開發者社區經理Ken(何琨),擁有7 年 GPU 開發經驗,5 年人工智慧開發經驗。在人工智慧、計算機視覺、高性能計算領域曾經獨立完成過多個項目,並且在機器人和無人機領域,有過豐富的研發經驗。
曾針對圖像識別,目標的檢測與跟蹤等方面完成多種解決方案,作為主要研發者參與GPU版氣象模式GRAPES。
活動現場座無虛席,交流環節也反應熱烈,線上聚集了千逾感興趣的小夥伴觀看現場直播。
應讀者要求,量子位將現場內容整理成文,與大家分享。
深度學習伺服器
深度學習發展已經歷經很多年。現在的相關演算法已經是二三十年前的理論,或者說相關數學演算法和模型都沒有太大變化。
為什麼到最近幾年,深度學習才真正火起來。因為在這個時間段,我們的計算能力達到了和深度學習理論對應的水平。
我們在用神經網路的時候,為什麼中間那些隱藏層原來不能用,就是因為我們原來的計算能力、CPU達不到相對應的水平。
2007年NVIDIA提出了CUDA這樣的方法和工具,為開發者進行高性能計算,或者一些更深的工作的時候,提供很多幫助。隨著深度學習技術的發展,我們發現GPU也很適用於深度學習的工作。
今天概括講三個比較重要的內容:第一是深度學習,也就是模型的訓練;第二是在訓練中的樣本管理;第三是訓練模型的部署。這是深度學習完整流程的三個重要部分。
有很多同學問我,NVIDIA的演算法的一些工具,是開源的嗎?NVIDIA很多是不開源的,但是不開源的東西不代表不可以用。下圖所示的工具,都可以免費使用,包括一些專用的框架,支持幾乎市面上常用的所有開源的深度學習框架。
對框架之下的底層內容又提供了計算服務,包括一些集成好的計算庫。在很早的時候,用CUDA去做一些計算之前,需要學 CUDA C、CUDA Fortune、CUDA C++等等,最近幾年還推出了CUDA python。
我們當初學CUDA的時候,覺得可能需要花半年的時間,才算真正學會了一個東西。而在現在這樣技術發展非常快的時代,已經不需要把底層研究那麼透,可以用工具來完成一些工作。
NVIDIA在深度學習這個領域提供了一些訓練的庫和工具,今天我會針對這些工具跟大家分享。
現在整個伺服器里的硬體產品,大家接觸更多的可能是Tesla系列,其實GeForce系列也可以拿來做實驗,也能得到一個不錯的效果。
硬體配置
如果我們想搭建一個GPU伺服器,主要是硬體配置,硬體配置相關參數如下圖。
Memory這塊,32-64GB為宜,對伺服器來說不算很大,但是也能夠有一兩個層次的區分。很多時候我們要處理樣本,要對GPU進行一個調度,這個時候內存這塊是個其實一個非常重要的問題,在一定數量級的計算上,這麼大的內存是一個基本標準。
硬碟的配置上,如果低於上圖的這個數值,我們在做深度學習開發的時候,在存儲模型和樣本的時候可能就會相對緊張。
接下來說電源和網路介面,這兩個之前很容易忽略,但是非常重要。選擇電源的時候,選2000w是因為可能有多個GPU並行的時候,在一個板上插很多GPU的時候,電源必須要支持,其次是選用冗餘電源,如果突然斷電的情況發生,還能堅持一下。
然後是網路介面。咱們自己在做實驗的時候,難免去找一些免費的圖片樣本集等等,網路介面稍微大一點就非常省事。
整個的硬體配置建議就是這樣。
軟體配置
而在軟體系統裡邊的配置,整個系統首先最好是Linux。有同學可能會問Windows的情況下是否支持,Windows系統在某些情況下是支持的,但是更多的情況下,在做深度學習開發的時候,還是盡量要往Linux上套一套。
我自己更喜歡的系統是Ubuntu,Centos等系統大家喜歡也可以去用,NVIDIA也是支持的。
這裡有個小建議,如果是初學者,不是很了解這些配置,那版本可選低一點。稍後後面會給大家介紹如何配環境,是以 16.04這個系統的版本為基準。大家需要注意的一個問題:選擇高級的版本,可能會有一些新的庫不匹配的情況。
接下來說安裝驅動的問題。我建議大家直接去官網下載;不行的話,如果比如在Ubuntu這樣的,直接用系統自帶的安裝就行;還是不行的話,在CUDA里,也會自帶一個驅動,按照最新的安裝就好。
安裝完驅動後,接下來介紹一下深度學習開發工具:CuDNN、TensorRT、CuBLAS、DeepStream。
TensorRT是在部署階段,一個加速inference的工具,目前為止4.0版本已經支持包括C++和python介面。而且它支持Caffe、TensorFlow等主流的框架,而且通過一個ONNX網路模型的格式,可以支持PyTorch,Caffe2等等。我自己在測試這個工具的時候發現,拿任何一個框架,同樣的模型,相同的數據測試它是最快的。
接下來是CuDNN,它跟TensorRT是一對,我們可以理解為CuDNN是提供了訓練時候的庫。用CuDNN之後的訓練速度,平均能快到4到5倍以上。
TensorRT是inference,CuDNN是training。
最後說一下DeepStream的發展。這個工具剛到2.0,是目前一個非常新的工具。它的系統是在視頻編解碼的過程當中,就把inference這個過程做了。這樣就省去了時間。
最開始的時候說過,深度學習的完整流程有三個大的部分:樣本的管理、模型的訓練和模型的部署。DIGITS是管理前兩個過程的重要工具。
具體的工具&安裝過程
現在給大家介紹一下具體的工具,和安裝過程。
這張圖是一個完整的深度學習解決方案。
樣本的管理中,可能有很多圖片或者音頻視頻資料,對這些的管理就依賴於伺服器本身的處理能力。當然也可以用GPU進行一些加速,我需要主要介紹訓練和部署這兩個階段,這兩個階段有一個很根本的不同:訓練的時候是在線的模式,模型要一步一步地迭代,模型是在不斷更新的,如果在這個過程當中發現哪裡的參數達不到心理預期了,或者是出現一些異常的時候,馬上可以更改,調整網路模型,或者調整樣本。
而在部署階段,整個的模型是以離線的方式運用,不可能在推理的過程當中更改樣本。比如智能的硬體設備,它的識別速度要求都非常高,而在部署到這些產品的時候,計算能力是極其有限的。而在這種計算能力有限的情況下,我們還要求更高的計算速度,這個時候就需要我們採用更好的inference演算法。在這裡,我推薦大家可以嘗試TensorRT這個inference工具。
搭建伺服器的流程
接下來介紹一下搭建伺服器的整體流程。
從系統開始,安裝CUDA之後安裝CuDNN,接下來是TensorFlow和Caffe兩個框架,然後是TensorRT,最後是DIGITS的完整流程。
CUDA的安裝
首先是CUDA的安裝。
如果是初學者,建議直接下載.deb文件,不要用.run安裝。因為首先流程很簡單,其次整個安裝的流程中一些備文件位置也都詳細提供,省去很多麻煩。如果大家覺得自己網路好,還有一種network的安裝方式,也可以嘗試。
CuDNN的安裝
接下來下載CUDA,按照流程走下來。需要注意的是:1、不要忘了在環境變數中把路徑加進去。2、在安裝Caffe和TensorFlow的時候,如果選擇使用CUDA或者CuDNN在系統,記得加上lib的庫。
然後是下載CuDNN,建議大家都安裝CuDNN,安裝之後速度會提升很多。
其中需要注意的是CuDNN的版本號,版本號一定要記住,後續安裝其他一些工具的時候都會涉及到。在做Linux開發的時候,不只是在CUDA或者GPU開發,這樣的工具,一定要注意安裝的版本號。如果是初學者,為了省去一些麻煩,最好用大版本號。
TensorRT的安裝
接下來是TensorRT的下載和安裝。同樣也是建議直接下載.deb。
TensorFlow & Caffe的安裝
最後還有兩個框架:Tensorflow和Caffe。
TensorFlow的框架,推薦大家使用TensorRT,能夠加速推理。
Caffe的安裝是基於CuDNN和CUDA的版本。有一點可能需要注意:Caffe的版本,推薦大家用0.15的版本,這個版本跟標準Caffe版本在最底層有一點不同,所以能做到更全面。
DIGITS
最後說一下DIGITS這個工具,上圖是DIGITS的基本界面。
做深度學習訓練的時候,會用到樣本的管理,用個人伺服器去管理內容的時候,通常情況下沒法可視化。如果只開一個終端的話,會有些卡頓,效果很不好。這個工具能夠提供各種各樣的介面,包括如何組織樣本,或者查看樣本當中的一些分布。
除此之外DIGITS里還有一些預訓練的模型,比如裡邊已經有了的GoogleNet和AlexNet,只需要再把樣本做好就行。
如果需要自己定義網路模型,直接把網路結構,複製到DIGITS里就好。
最後介紹一下TensorRT的工具,它是一個加速工具。NVIDIA在建立TensorRT這個項目之初是把它定義為一個GPU Inference Engine這樣一個名字。
整個工具的機制是:輸入一個訓練好的神經網路模型,這個模型可以是Caffe、Tensorflow或者PyTorch,輸入完後會在裡面自動優化模型,進行加速。
而我們自己加速模型的時候,需要對模型進行剪裁,對模型參數進行一些不必要的一些篩選和優化。或者針對模型寫一些解析器,在解析器里自動裁剪、加速。在這個過程中,會浪費很多時間。
接下來是輸出一個可執行的推理引擎,然後可序化這個可執行推理引擎,把序列化好的一個文件放入虛擬引擎,向引擎里輸入一張圖片或者語音實例,最後就能輸出一個結果。
總結
總結一下,要搭一台自己的伺服器,需要選擇好硬體產品,不一定要選最貴的或者大的,而是根據自己的需求,是需要更大的顯存還是更強的計算能力,還是對帶寬有要求等等,包括性價比,也是考慮因素。
然後是配置軟體環境,如果能自己配置好一個軟體環境,包括安好的拓展、框架,就可以直接實驗了。
後邊的管理系統和加速工具,就是代表真正生產力的工具。
Q&A
DIGITS是否收費,我們如何使用?開源的Jupyter Notebook能用嗎?
DIGITS是免費的,而且開源。
開源的Jupyter Notebook可以用。
虛擬機里怎麼用CUDA?
我在很早之前用過虛擬機里的CUDA,但是使用起來太麻煩了,不建議大家在虛擬機里使用CUDA,但是確實是可以用的。會出一些很細小的bug,而有些 bug本身並不是寫的問題,並不是代碼寫錯,可能是虛擬機底層機制通訊的問題。
做優化的時候,只優化GPU的計算,會不會對網路結構,或者說最後的精度有影響?
會有一定影響,但是這個影響在決斷和服務範圍內。因為CRD本身有一個機制:控制閾值與進度的影響。本身CRD的核心思想就是稍微降低一點的精度,大量提高速度。CRD本身的作用是部署在產品端,它要求更快的速度的問題。
學習資料
※這份NLP研究進展匯總請收好,GitHub連續3天最火的都是它
TAG:量子位 |