要搭建TensorFlow的GPU版本,首先需要的必備條件就是一塊能夠支持CUDA的NVIDIA顯卡,因為在搭建TensorFlow的GPU版本時,首先需要做的一件事就是安裝其基礎支持平台CUDA和其機器學習庫cuDNN,然后在此基礎上搭建TensorFlow GPU版本。
其次還要了解一下不同的TensorFlow版本所需要對應安裝的CUDA和cuDNN版本是多少,因為在TensorFlow的GPU版本安裝過程中,如果對應的CUDA版本和cuDNN版本不正確的話,是無法正常使用GPU來進行模型訓練的。下表整理出了TensorFlow從1.2到最新版本的CUDA和cuDNN所對應的版本集合
要想成功安裝tensorflow並提供GPU支持,必須保證tensorflow、cudatoolkit、cudnn版本對應。
查看tensorflow娛cuda cudnn版本對應關系
https://www.tensorflow.org/install/source_windows
Windows系統查看CUDA版本號
檢查硬件支持。
點擊如圖所示的圖標打開nvidia控制面板。
點擊組件按鈕,如下圖紅色箭頭標注處所示。
在紅色方框和紅色文字共同標注處則顯示當前電腦的CUDA版本號
知道自己電腦的CUDA版本號,則可以 選擇合適版本的CUDA Toolkit
安裝cuda toolkit
各種歷史版本:https://developer.nvidia.com/cuda-toolkit-archive
選擇合適的cuda toolkit,下載好,雙擊下載好的文件,會提示選擇目錄釋放臨時文件,直接點擊下一步即可。
安裝好后,打開anaconda的terminal輸入
nvcc -V
進行測試,如果顯示如下,證明你安裝成功了。
安裝cudnn
cuDNN
是一個SDK,是一個專門用於神經網絡的加速包,注意,它跟我們的CUDA沒有一一對應的關系,即每一個版本的CUDA可能有好幾個版本的cuDNN與之對應,但一般有一個最新版本的cuDNN版本與CUDA對應更好。
- cuDNN與CUDA沒有版本綁定的關系。
1、下載cudnn 按圖片所示操作即可。注意,可能會要求需要注冊賬號。
cuddn各種歷史版本:
https://developer.nvidia.com/rdp/cudnn-archive
解壓cuDNN壓縮包,可以看到bin、include、lib目錄,
打開 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA
將下載文件解壓,然后 copy------》past
按照自己的情況來,圖中是我的解壓和安裝路徑:(注意是路徑中的文件)
需要添加下面兩個路徑,這就是說為什么要記住你的安裝路徑了,我使用的是默認的安裝路徑。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
注意:選擇你安裝的路徑
5、檢查安裝結果
打開 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite
在此路徑下打開powershell
‘
參考:https://zhuanlan.zhihu.com/p/94220564
’https://www.jianshu.com/p/622f47f94784
https://blog.csdn.net/qq_27825451/article/details/89082978
安裝tensorflow gpu版本
conda create -n tf2.3
可以先搜索tensorflow-gpu版本有哪些
conda install tensorflow-gpu=2.3
測試:
import tensorflow as tf version = tf.__version__ gpu_ok = tf.test.is_gpu_availableI() print("tf version:",version,"nuse GPU",gpu_ok)
結果 輸出了false,為什么?
一篇文章:https://blog.csdn.net/flana/article/details/104772614/
我已經設置了把PhysX設置固定為獨立顯卡。 但還是false,可能是tf的版本和cuda,cudnn匹配不上。
TensorFlow-GPU簡單安裝的方法
查看tf對應的cuda和cuddn版本:https://www.tensorflow.org/install/source_windows
建立虛擬環境:
conda create -n your_env_name(虛擬環境名) python=x.x(先要的python版本)
激活虛擬環境:
activate your_env_name(虛擬環境名)
安裝TensorFlow對應版本的CUDA和cuDNN:
conda install cudatoolkit=10.1 cudnn=7.6.5
安裝對應版本的TensorFlow-GPU:
pip install tensorflow-gpu==xxx -i
我通過這種方法運行測試程序,is gpu ok輸出了True,成功。
https://www.bilibili.com/read/cv10593154
cuda卸載:
(1)留下:NVIDIA的圖形驅動程序、NVIDIA Physx系統軟件、NVIDIA GeForce Experience
-
CUDA和顯卡驅動是沒有版本綁定關系。
顯卡驅動下載地址: https://www.nvidia.com/Download/index.aspx?lang=en-us
CUDA的下載地址為:https://developer.nvidia.com/cuda-downloads
- 顯卡: 簡單理解這個就是我們前面說的GPU,尤其指NVIDIA公司生產的GPU系列,因為后面介紹的cuda,cudnn都是NVIDIA公司針對自身的GPU獨家設計的。
- 顯卡驅動:很明顯就是字面意思,通常指NVIDIA Driver,其實它就是一個驅動軟件,而前面的顯卡就是硬件。
- gpu架構:Tesla、Fermi、Kepler、Maxwell、Pascal
- 芯片型號:GT200、GK210、GM104、GF104等
- 顯卡系列:GeForce、Quadro、Tesla
- GeForce顯卡型號:G/GS、GT、GTS、GTX
gpu架構指的是硬件的設計方式,例如流處理器簇中有多少個core、是否有L1 or L2緩存、是否有雙精度計算單元等等。每一代的架構是一種思想,如何去更好完成並行的思想
芯片就是對上述gpu架構思想的實現,例如芯片型號GT200中第二個字母代表是哪一代架構,有時會有100和200代的芯片,它們基本設計思路是跟這一代的架構一致,只是在細節上做了一些改變,例如GK210比GK110的寄存器就多一倍。有時候一張顯卡里面可能有兩張芯片,Tesla k80用了兩塊GK210芯片。這里第一代的gpu架構的命名也是Tesla,但現在基本已經沒有這種設計的卡了,下文如果提到了會用Tesla架構和Tesla系列來進行區分。
而顯卡系列在本質上並沒有什么區別,只是NVIDIA希望區分成三種選擇,GeFore用於家庭娛樂,Quadro用於工作站,而Tesla系列用於服務器。Tesla的k型號卡為了高性能科學計算而設計,比較突出的優點是雙精度浮點運算能力高並且支持ECC內存,但是雙精度能力好在深度學習訓練上並沒有什么卵用,所以Tesla系列又推出了M型號來做專門的訓練深度學習網絡的顯卡。需要注意的是Tesla系列沒有顯示輸出接口,它專注於數據計算而不是圖形顯示。
最后一個GeForce的顯卡型號是不同的硬件定制,越往后性能越好,時鍾頻率越高顯存越大,即G/GS<GT<GTS<GTX。
CUDA名稱含義
CUDA
看了很多答案,有人說CUDA就是一門編程語言,像C,C++,python 一樣,也有人說CUDA是API。CUDA英文全稱是Compute Unified Device Architecture,是顯卡廠商NVIDIA推出的運算平台。 CUDA™是一種由NVIDIA推出的通用並行計算架構,該架構使GPU能夠解決復雜的計算問題。按照官方的說法是,CUDA是一個並行計算平台和編程模型,能夠使得使用GPU進行通用計算變得簡單和優雅。

cudnn
這個其實就是一個專門為深度學習計算設計的軟件庫,里面提供了很多專門的計算函數,如卷積等。從上圖也可以看到,還有很多其他的軟件庫和中間件,包括實現c++ STL的thrust、實現gpu版本blas的cublas、實現快速傅里葉變換的cuFFT、實現稀疏矩陣運算操作的cuSparse以及實現深度學習網絡加速的cuDNN等等,具體細節可參閱GPU-Accelerated Libraries
CUDA Toolkit
CUDA Toolkit由以下組件組成:
- Compiler: CUDA-C和CUDA-C++編譯器
NVCC
位於bin/
目錄中。它建立在NVVM
優化器之上,而NVVM
優化器本身構建在LLVM
編譯器基礎結構之上。希望開發人員可以使用nvm/
目錄下的Compiler SDK來直接針對NVVM進行開發。 - Tools: 提供一些像
profiler
,debuggers
等工具,這些工具可以從bin/
目錄中獲取 - Libraries: 下面列出的部分科學庫和實用程序庫可以在
lib/
目錄中使用(Windows上的DLL位於bin/
中),它們的接口在include/
目錄中可獲取。- cudart: CUDA Runtime
- cudadevrt: CUDA device runtime
- cupti: CUDA profiling tools interface
- nvml: NVIDIA management library
- nvrtc: CUDA runtime compilation
- cublas: BLAS (Basic Linear Algebra Subprograms,基礎線性代數程序集)
- cublas_device: BLAS kernel interface
- ...
- CUDA Samples: 演示如何使用各種CUDA和library API的代碼示例。可在Linux和Mac上的
samples/
目錄中獲得,Windows上的路徑是C:\ProgramData\NVIDIA Corporation\CUDA Samples
中。在Linux和Mac上,samples/
目錄是只讀的,如果要對它們進行修改,則必須將這些示例復制到另一個位置。 - CUDA Driver: 運行CUDA應用程序需要系統至少有一個具有CUDA功能的GPU和與CUDA工具包兼容的驅動程序。每個版本的CUDA工具包都對應一個最低版本的CUDA Driver,也就是說如果你安裝的CUDA Driver版本比官方推薦的還低,那么很可能會無法正常運行。CUDA Driver是向后兼容的,這意味着根據CUDA的特定版本編譯的應用程序將繼續在后續發布的Driver上也能繼續工作。通常為了方便,在安裝CUDA Toolkit的時候會默認安裝CUDA Driver。在開發階段可以選擇默認安裝Driver,但是對於像Tesla GPU這樣的商用情況時,建議在官方安裝最新版本的Driver。 目前(2019年10月)的CUDA Toolkit和CUDA Driver版本的對應情況如下:
CUDA Toolkit |
Linux x86_64 Driver Version |
Windows x86_64 Driver Version |
---|---|---|
CUDA 10.1 (10.1.105 general release, and updates) |
>= 418.39 |
>= 418.96 |
CUDA 10.0.130 |
>= 410.48 |
>= 411.31 |
CUDA 9.2 (9.2.148 Update 1) |
>= 396.37 |
>= 398.26 |
CUDA 9.2 (9.2.88) |
>= 396.26 |
>= 397.44 |
CUDA 9.1 (9.1.85) |
>= 390.46 |
>= 391.29 |
CUDA 9.0 (9.0.76) |
>= 384.81 |
>= 385.54 |
CUDA 8.0 (8.0.61 GA2) |
>= 375.26 |
>= 376.51 |
CUDA 8.0 (8.0.44) |
>= 367.48 |
>= 369.30 |
CUDA 7.5 (7.5.16) |
>= 352.31 |
>= 353.66 |
CUDA 7.0 (7.0.28) |
>= 346.46 |
>= 347.62 |
nvcc
&nvidia-smi
nvcc
這個在前面已經介紹了,nvcc
其實就是CUDA的編譯器,可以從CUDA Toolkit的/bin
目錄中獲取,類似於gcc
就是c語言的編譯器。由於程序是要經過編譯器編程成可執行的二進制文件,而cuda程序有兩種代碼,一種是運行在cpu上的host代碼,一種是運行在gpu上的device代碼,所以nvcc
編譯器要保證兩部分代碼能夠編譯成二進制文件在不同的機器上執行。nvcc涉及到的文件后綴及相關意義如下表
文件后綴 |
意義 |
---|---|
.cu |
cuda源文件,包括host和device代碼 |
.cup |
經過預處理的cuda源文件,編譯選項--preprocess/-E |
.c |
c源文件 |
.cc/.cxx/.cpp |
c++源文件 |
.gpu |
gpu中間文件,編譯選項--gpu |
.ptx |
類似匯編代碼,編譯選項--ptx |
.o/.obj |
目標文件,編譯選項--compile/-c |
.a/.lib |
庫文件,編譯選項--lib/-lib |
.res |
資源文件 |
.so |
共享目標文件,編譯選項--shared/-shared |
.cubin |
cuda的二進制文件,編譯選項-cubin |
nvidia-smi
nvidia-smi
全程是NVIDIA System Management Interface ,它是一個基於前面介紹過的NVIDIA Management Library(NVML)
構建的命令行實用工具,旨在幫助管理和監控NVIDIA GPU設備。
nvcc
和nvidia-smi
顯示的CUDA版本不同?
在我們實驗室的服務器上nvcc --version
顯示的結果如下:
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Tue_Jun_12_23:07:04_CDT_2018 Cuda compilation tools, release 9.2, V9.2.148
而nvidia-smi
顯示結果如下:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-PCIE... On | 00000000:01:00.0 Off | Off | | N/A 28C P0 26W / 250W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 Tesla P100-PCIE... On | 00000000:02:00.0 Off | Off | | N/A 24C P0 30W / 250W | 0MiB / 16280MiB | 0% Default | +-------------------------------+--------------------