為了運行一個 Tensorflow1.6.0 的項目,CPU 跑了三個多小時才完成一個 epoch,還得用 GPU。但這個版本的 TF 只能在 10 以下的 CUDA 平臺,但是以前的 Pytorch 也要繼續啊。所以需要在本地 Windows 下安裝多個版本 CUDA,其實有兩種方式讓 CUDA 共存。一種是英偉達的工具包安裝,還一種是 CUDA 的動態鏈接庫通過 conda 安裝。
由于是 Windows,配置 CUDA 多版本環境變量可能還會出現 “此環境變量太大,此對話框允許將值設置為最長 2047 個字符” 和安裝后運行項目 “If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info” 等報錯,接下來就開始一一介紹了。
動態鏈接庫方式
相比英偉達官方提供的 CUDA Toolkit,這種方式顯得特別輕便。因為前者是一個完整的工具安裝包,其中還提供了英偉達驅動程序(可以不勾選)和開發 CUDA 程序的工具。而對于使用深度學習框架的話,訓練使用 GPU 確實只需要使用 CUDA 的動態鏈接庫就可以,而且只需要用 conda 安裝就可以。
這里還是用 conda 創建一個新環境專門用于一個版本的 CUDA,要幾個就創建幾個,然后激活并進入,當然也要看看當前 conda 支持哪些 cuda 和 cudnn。
conda create -n tensorflow-cu python=3.6
conda activate tensorflow-cu
conda search cudatoolkit --info
conda install cudatoolkit=9.01
conda install cudnn=7.1.4
工具包方式
這種方法就是先明確自己需要安裝的版本,然后去英偉達官網下載安裝包。我上面也有文章介紹,不過在以前基礎上再加一低版本,需要注意的就是不要勾選驅動程序,然后切換版本要配置環境變量。
安裝完畢后,他會自動在環境變量里新增 CUDA_PATH_V9_0 和 NVCUDASAMPLES9_0_ROOT,并且 CUDA_PATH 和 NVCUDASAMPLES 也會替換成最后安裝的版本,但當前依然還是之前的 CUDA11,這個時候還要去 Path 里設置一下。
要讓版本切換到 v9,需要手動添加 CUDA9 的 development 下 bin 和 libnvvp,并放 v11 前面,但是保存時報 “此環境變量太大”。這個是因為 Patch 變量的值只有 2047 字符大小,解決方法可以修改注冊表,在 Path 里刪除沒用的環境變量和用外邊的變量做一個引入。就是 bin 和 libvvp 都是 CUDA9 下,只需要引入這個就可以節省更多字符占用了。
%CUDA_PATH_V11_4%\bin
%CUDA_PATH_V11_4%\libnvvp
雖然可以保存了,但是想切換 CUDA 版本要再次打開 Path,發現這個彈窗變成了一行,而不是像之前那樣按變量展開。這是因為剛剛為了讓 V9 版本在前面,我把他頂到了最上面,而最頂上如果有變量方式的引入,Path 就會變成一行,我們只需要把一個其他絕對位置的變量放在頂部就可以解決了。
當切換后安裝 tensorflow-gpu 開始訓練時,出現 “Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info”,因為當前顯卡 GTX 750Ti,顯存太小,可以將批次 batch_size 調小解決。
第一種安裝方式:下載360的驅動大師安裝(最簡單)
第二種去官網下載驅動程序,https://www.nvidia.cn/Download/index.aspx?lang=cn。輸入顯卡的型號查找然后下載安裝。手動搜索驅動程序,查找對應顯卡的驅動。
打開NVIDIV設置,如上圖,雙擊打開軟件。選擇"幫助—》系統信息",查看NVCUDA.DLL后面的信息。我電腦的版本十一10.0.132的,所以選擇CUDA不能低于這個版本,否則會有兼容性的問題。
網站地址:,
選擇10.0的版本
點擊進去,選擇和自己電腦相匹配的操作系統環境。
現下圖所示界面后,點擊選擇"編程語言"下的Visual C++(或其他需要用到的語言,如Python),點擊"下一步",注意:請最好不要選擇"典型",因為在最新的VS默認安裝包中并不包含最基本的C++語言,而且系統會默認安裝許多很少用到的安裝包,這樣會使每次VS的運行加載嚴重減慢。
下面就是等待安裝的過程了,這個過程等待時間較長,可以去做其它事情
當看到下圖所示的界面時,程序就安裝完成了
雙擊剛才下載的CUDA安裝包,點擊"OK"
點擊"同意并繼續"
然后選擇"自定義安裝"
點擊"下一步"
點擊"下一步",等待安裝完成。
驗證是否安裝成功:
打開CMD輸入: nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:04_Central_Daylight_Time_2018
Cuda compilation tools, release 10.0, V10.0.130
已經自動添加系統變量。
打開C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0,用VS2015打開(注:要以管理員的身份運行)。
編譯測試文件
· C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0下找到Samples_vs2015.sln并打開
· 編譯:選擇Release x64,右鍵1_Utilities,點擊"生成"
驗證deviceQuery和bandwidthTest
打開命令提示符:定位到 c:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\bin\win64\Release
分別輸入deviceQuery,bandwidthTest并運行,出現如下類似信息便說明CUDA安裝成功
配置環境變量
1、確認系統變量中:CUDA_PATH和CUDA_PATH_V10.0已經存在
2、我們還需要在環境變量中添加如下幾個變量:
CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
CUDA_BIN_PATH = %CUDA_PATH%\bin
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
可在cmd中查看配置情況(命令:set cuda)
打開網站:
找對應的版本。我安裝的是10.0的,所以選擇10.0的最新版本
選擇對應的操作系統版本下載。下載之后是個壓縮包文件,解壓縮:
將CUDA\bin、CUDA\include、CUDA\lib中的內容拷貝到相應的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0文件路徑下即可:
按道理來講到這里cuDNN應該已經算安裝完畢了,但是參考一個博文,還是添加了cuDNN的環境變量,不知道是否有必要?