TensorFlow™ GPU 背後的那些事兒
ofollow,noindex" target="_blank">TensorFlow™ 是一個開放原始碼軟體庫,用於進行高效能數值計算。藉助其靈活的架構,使用者可以輕鬆地將計算工作部署到多種平臺(CPU、GPU、TPU)和裝置(桌面裝置、伺服器叢集、移動裝置、邊緣裝置等)。
TensorFlow™ 最初是由 Google Brain 團隊(隸屬於 Google 的 AI 部門)中的研究人員和工程師開發的,可為機器學習和深度學習提供強有力支援,並且其靈活的數值計算核心廣泛應用於許多其他科學領域。目前TensorFlow™ 有適用於CPU(TensorFlowCPU)和GPU(TensorFlow GPU)的兩種安裝選擇。 有區別於通過pip安裝TensorFlowCPU版本,安裝TensorFlow GPU還需要更多的底層依賴。
TensorFlow GPU主要是通過NVIDIA提供的CUDA和cuDNN存取GPU,從而實現比CPU快數十倍的深度學習訓練加速能力。本文結合知道創宇IA實驗室在實際的業務生產中積累的經驗,主要介紹TensorFlow GPU版本的安裝和使用,以及簡單示例執行。
名詞解釋
在進入正題之前,首先詳細介紹一下其所涉及的幾個名詞。
Graphic Processing Unit(GPU):用於個人計算機、工作站和伺服器的專用影象裝置。又名顯示卡或顯示卡,目前主要的生產廠商是NVIDA生產的N卡和AMD 生產的A卡。相比於由幾個核組成CPU專注於順序序列處理,GPU 則擁有一個由數以千計的更小、更高效的核組成的大規模平行計算架構,其更擅長平行計算。
Compute Unified DeviceArchitecture(CUDA):它是NVIDIA推出的能夠解決GPU複雜計算問題的平行計算架構。目前NVIDIA面向分散式計算的顯示卡架構的演變已經歷了Tesla、Fermi、Kepler、Maxwell、Pascal、Volta(以物理學家名字命名),且隨著架構的演變其浮點計算的能力也越來越強。在NVIDIA Tesla常以第一個字母來命名其產品,比如Tesla M40、Tesla P100、Tesla V100。
CUDA Toolkit : CUDA Toolkit是為建立高效能GPU加速應用程式提供了開發環境。目前支援C,C ++,Fortran,Python和MATLAB的程式設計,編譯器的名稱是nvcc。
NVIDIA GPU drivers(顯示卡驅動):它是用來驅動NVIDIA顯示卡所對應的軟體程式。
CUDA Deep NeuralNetwork Library(cuDNN):NVIDIA打造的針對深度神經網路的加速庫,是一個用於深層神經網路的GPU加速庫。如果你要用GPU訓練模型,cuDNN不是必須的,但是一般會採用這個加速庫。
GPU支援
安裝TensorFlow GPU相應的硬體和軟體(驅動和庫)支援。TensorFlow™ 最新版本(1.12)對硬體:
NVIDIA® GPUcard with CUDA® Compute Capability 3.5 or higher.
具有計算能力3.5或更高版本的NVIDIA®GPU卡。
對軟體的要求:
NVIDIA® GPU drivers —CUDA 9.0requires 384.x or higher.
NVIDIA®GPU 驅動程式 -CUDA 9.0 需要384.x或更高版本。
CUDA®Toolkit —TensorFlow supports CUDA 9.0.
CUDA®Toolkit- TensorFlow支援CUDA 9.0。
CUPTI shipswith the CUDA Toolkit.
CUPTI附帶CUDA工具包。
cuDNNSDK ( > = 7.2)
NVIDIA深度神經網路的加速庫(版本大於等於7.2)
硬體支援
從TensorFlow 所需要軟體CUDA和CUDA的名詞描述可以得出TensorFlow僅僅支援N卡,如果計算機屬於A卡,則只能安裝TensorFlowCPU版本,或者用AMD的ROCm GPU平臺來安裝GPU 版本的TensorFlow。本文重點講以最為流行的N卡支援CUDA為重點講解。使用lspci命令可以檢視機器的NVIDIA顯示卡配置
從顯示結果看當前機器的GPU卡的型號是NVIDIA Tesla M40。當然,也並非所有的N卡都支援TensorFlow GPU 版本,其還要求GPU具有相應的計算能力,比如TensorFlow最新版1.12 就要求計算能力大於3.5。NVIDIA GPU卡的計算能力可以通過其 官網列表 查詢得到。目前NVIDIA產品主要系列有:
GeForce, 面向普通大眾使用者,包括GTX和TITAN系列,價格比較親民,用於科學計算精度稍低。GTX桌面版750以上、筆記本930M以上和全系的TITANX計算能力均大於等於3.5。
Tesla,面向企業部署而設計的用於大規模平行計算的產品,包含有F(Fermi 架構)、K ( Kepler架構 ) 、M(Maxwell架構)、P(Pascal架構)和V(Volta架構)系列產品。目前除TeslaK10以外,K、M、P、V系列的產品的計算能力均大於3.5。Tesla系列與GeForce 系列的TITANX相比,其單機長期上線執行,穩定性更好。
Quadro,面向專業的繪圖設計,其分為桌面版和手機版兩個系列。
Terga/Jetson, 面向移動和嵌入式裝置。
軟體支援
TensorFlow官方文件會指定每一個TensorFlowGPU版本所依賴的python、cuDNN、GPU顯示卡驅動和CUDA的版本。在安裝的時候一定注意版本的對應關係,若Python、cuDNN、GPU顯示卡驅動和CUDA的版本有低於TensorFlow GPU 要求的版本,在安裝和使用過程中會出現錯誤。下表是TensorFlow GPU在Linux系統下版本對應表。
TensorFlow GPU | python | cuDNN | CUDA |
---|---|---|---|
1.12 | 2.7、3.3-3.6 | >=7.2 | 9 |
1.11 | 2.7、3.3-3.6 | >=7.2 | 9 |
1.10 | 2.7、3.3-3.6 | 7 | 9 |
1.9.0 | 2.7、3.3-3.6 | 7 | 9 |
1.8.0 | 2.7、3.3-3.6 | 7 | 9 |
1.7.0 | 2.7、3.3-3.6 | 7 | 9 |
1.6.0 | 2.7、3.3-3.6 | 7 | 9 |
1.5.0 | 2.7、3.3-3.6 | 7 | 9 |
1.4.0 | 2.7、3.3-3.6 | 6 | 8 |
1.3.0 | 2.7、3.3-3.6 | 6 | 8 |
1.2.0 | 2.7、3.3-3.6 | 5.1 | 8 |
1.1.0 | 2.7、3.3-3.6 | 5.1 | 8 |
1.0.0 | 2.7、3.3-3.6 | 5.1 | 8 |
TensorFlow GPU 安裝過程
以伺服器的NVIDIA Tesla M40為例,在作業系統Centos 7上安裝最新版本TensorFlow GPU 1.12。
GPU 驅動安裝
根據TensorFlow 1.12 GPU支援要求的NVIDIA驅動版本,從 NVIDIA網站 選擇對應的型號和作業系統,CUDA Toolkit版本,下載驅動檔案,如NVIDIA-
執行驅動檔案,根據提示完成安裝。
安裝完成以後通過NVIDIA命令工具nvidia-smi檢視GPU情況
從上圖可以看到,NVIDIA GPU顯示卡驅動型號384.145。當有TensorFlow GPU任務執行的時候,使用該命令也可以檢視GPU的記憶體使用情況,也可以作為檢查TensorFlow是CPU執行還是GPU執行。
CUDA 安裝
從 NVIDIA網站 選擇相應的驅動版本,選擇Linux,x86_64,CentOS 7,下載rpm(local)驅動檔案。
根據安裝指導安裝
配置系統環境(/etc/profile)或者當前使用者的環境(~/.bashrc)。
Source配置檔案後,檢視nvcc版本,若如下圖所示則說明CUDA安裝成功。到此,也就配置好了CUDA C/C++的編譯環境,可以使用nvcc編譯.cu的檔案。
cuDNN 安裝
從 NVIDIA網站 下載cuDNN 安裝包,根據GPU及CUDA版本選擇對應cuDNN版本,下載cuDNN v7.4.1 for CUDA9.0。
解壓拷貝到CUDA安裝目錄,需要注意的是在/usr/local目錄下存在cuda和cuda-9.0兩個目錄,一定要拷貝到cuda目錄下。
安裝TensorFlow
安裝TensorFlow GPU就比較容易了,在啟用Python不同的虛擬環境下,可以直接通過pip安裝,國內的使用者可以選擇國內的豆瓣pip源。
驗證TensorFlow GPU
啟動python互動執行介面,匯入TensorFlow模組,進行簡單的驗證。
從輸出的日誌可以看到發現了兩個GPU卡,則說明 TensorFlow GPU是安裝成功的。
TensorFlow示例執行
TensorFlow GitHub官方倉庫
https://github.com/tensorflow/tensorflow.git
https://github.com/tensorflow/models.git
下載相應的程式碼,可以直接執行samples裡面例項。
*本文作者:Knownsec知道創宇,轉載請註明來自FreeBuf.COM