tensorflow gpu安裝


要搭建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編程系列之一】從深度學習選擇什么樣的gpu來談談gpu的硬件架構

  • 顯卡: 簡單理解這個就是我們前面說的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

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設備。

nvccnvidia-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 | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

可以看到nvcc的CUDA 版本是9.2,而nvidia-smi的CUDA版本是10.0。很奇怪的是有時候絕大多數情況代碼也能整成跑起來,stackoverflow上的一個解釋如下:

CUDA有兩個主要的API:runtime(運行時) APIdriver API。這兩個API都有對應的CUDA版本(如9.2和10.0等)。

  • 用於支持driver API的必要文件(如libcuda.so)是由GPU driver installer安裝的。nvidia-smi就屬於這一類API。
  • 用於支持runtime API的必要文件(如libcudart.so以及nvcc)是由CUDA Toolkit installer安裝的。(CUDA Toolkit Installer有時可能會集成了GPU driver Installer)。nvcc是與CUDA Toolkit一起安裝的CUDA compiler-driver tool,它只知道它自身構建時的CUDA runtime版本。它不知道安裝了什么版本的GPU driver,甚至不知道是否安裝了GPU driver。

綜上,如果driver API和runtime API的CUDA版本不一致可能是因為你使用的是單獨的GPU driver installer,而不是CUDA Toolkit installer里的GPU driver installer。

參考:https://www.cnblogs.com/marsggbo/p/11838823.html

 

 

tensorflow 2.x gpu最簡單的安裝教程

1. conda create 一個env

 

查看tensorflow對應的python版本

https://www.tensorflow.org/install/source#tested_build_configurations

 

 2. 通過conda來安裝cuda和cudnn

CUDA Toolkit 和 cuDNN 的安裝 

在 Anaconda 環境下,推薦使用

conda install cudatoolkit=X.X conda install cudnn=X.X.X 

安裝 CUDA Toolkit 和 cuDNN,其中 X.X 和 X.X.X 分別為需要安裝的 CUDA Toolkit 和 cuDNN 版本號,必須嚴格按照 TensorFlow 官方網站所說明的版本 安裝。例如,對於 TensorFlow 2.1,可使用:

conda install cudatoolkit=10.1 conda install cudnn=7.6.5 

在安裝前,可使用 conda search cudatoolkit 和 conda search cudnn 搜索 conda 源中可用的版本號。

當然,也可以按照 TensorFlow 官方網站上的說明 手動下載 CUDA Toolkit 和 cuDNN 並安裝,不過過程會稍繁瑣

 

3.安裝conda來安裝tensorflow-gpu版本

conda install tensorflow-gpu=xx

需要說明的是:

從 TensorFlow 2.1 開始,pip 包 tensorflow 即同時包含 GPU 支持,無需通過特定的 pip 包 tensorflow-gpu 安裝 GPU 版本。如果對 pip 包的大小敏感,可使用 tensorflow-cpu 包安裝僅支持 CPU 的 TensorFlow 版本。但是conda中還是有區分tensorflow和tensorflow-gpu版本。我最開始用的conda install tensorflow。安裝后不支持gpu.

 

4 測試gpu是否可用

 

import tensorflow as tf
print(tf.__version__)
tf.config.list_physical_devices('GPU')
#tf2會報錯 ,這個函數廢棄了 print("Gpu ",tf.test.is_gpu_availabel())

 

還有一種驗證方法:

跑計算量大的代碼,通過 nvidia-smi 命令查看gpu的內存使用量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM