win10 安裝CUDA、cudnn、tensorflow-gpu

亦星然發表於2020-10-31

本文環境:

CUDA 10.0、cudnn 7.5.0、python 3.6 、tensorflow-gpu 1.13.1 、keras 2.1.5、kiwisolver 1.3.0、matplotlib3.3.2、 protobuf 3.6.0、numpy 1.16.0

以上版本為本文測試過得相容版本號。例如protobuf目前預設是3.13.0,是無法與tensorflow-gpu 1.13.1相容的。anaconda提示tensorflow-gpu 1.13.1所需的protobuf最低為3.6.1,經測試,3.6.1與tensorflow-gpu不相容。protobuf改為3.6.0才可以

本文主要參考連結:windows10下CUDA10.0環境配置

1.刪除原有的CUDA

參考連結:

Win10 NVDIA CUDA安裝失敗解決方案

重啟電腦,進入安全模式。

刪除系統盤中Program Files (x86)和Program Files內包含的
NVIDIA Corporation和NVIDIA GPU Computing Toolkit資料夾

重啟電腦,進入正常模式

2.安裝CUDA 10.0

下載CUDA 10.0
https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal

一路下一步即可,軟體已經自動幫我們配置好了環境變數

3.下載cuDNN 7.5.0

  • https://developer.nvidia.com/rdp/cudnn-download 需要註冊

  • 登入後選擇對應CUDA版本的cuDNN安裝

    Archived cuDNN Releases -> cuDNN7.5.0 -> windows 10

  • 下載後解壓,將cuDNN得到的cuda資料夾bin ,lib,include資料夾 複製合併到到
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0 中的bin ,lib,include

然後CUDA環境安裝就大功告成了

4.安裝tensorflow-gpu-1.13.1 及keras 2.1.5

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu==1.13.1

pip install keras==2.1.5

檢查TensorFlow版本以及GPU是否可用

import tensorflow as tf
from tensorflow.python.client import device_lib

# 列出所有的本地機器裝置
local_device_protos = device_lib.list_local_devices()
# 列印
#print(local_device_protos)

# 只列印GPU裝置
[print(x) for x in local_device_protos if x.device_type == 'GPU']

print("TensorFlow版本:",tf.__version__)

會輸出GPU資訊

5.安裝其它附加包

注意以下包是需要保證版本相容,即便此時環境裡已經存在該附加包,但可能出現不相容問題,所以需要安裝相容的版本

pip install numpy==1.16.0
pip install pillow

接下來是踩得幾個坑:

  • from google.protobuf.pyext import _message ImportError: DLL load
    failed:找不到指定的模組

    解決辦法:更換為 protobuf 3.6.0即可(pip install protobuf==3.6.0)

    protobuf目前預設版本是3.13.0,是無法與tensorflow-gpu 1.13.1相容的。anaconda提示tensorflow-gpu 1.13.1所需的protobuf最低為3.6.1,經測試,3.6.1與tensorflow-gpu不相容。protobuf改為3.6.0才可以

    參考連結:from google.protobuf.pyext import _message,使用tensorflow出現 ImportError: DLL load failed

  • FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated
    解決辦法:numpy1-17-0版本過高,使用numpy-1.16-0版本即可
    pip install numpy==1.16.0

  • pip install matplotlib報錯, Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio"

參考連結:error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studi解決方案

解決辦法:進入Unofficial Windows Binaries for Python Extension Packages
Ctrl + f 搜尋你需要的模組,例如我需要matplotlib

在這裡插入圖片描述
點選進入matplotlib

在這裡插入圖片描述

我選擇的是紅框的這個,因為我的python是3.6,64位,選擇了版本較高的matplotlib 3.2.2

下載完成後找到whl檔案的路徑,可以直接拖到終端裡,執行:

在這裡插入圖片描述
我在安裝過程中還遇到了kiwisolver版本不相容的問題,經過測試,kiwisolver 1.3.0版本相容。在安裝kiwisolver時也遇到了和matplotlib同樣的問題,按照上述方法下載whl檔案後,直接安裝即可解決問題。

  • AttributeError: ‘str’ object hasAttributeError: ‘str’ object has no attribute ‘decode’ no attribute 'decode’
    TypeError: a bytes-like object is required, not 'str’
    解決辦法:
  • 降低h5py版本。pip install h5py==2.10.0

網上很多說是“python3.5和Python2.7在套接字返回值解碼上有區別:python bytes和str兩種型別可以通過函式encode()和decode()相互轉換”。
但經過測試,用這種方法還是解決不了問題,最後發現通過降低h5py版本可以解決此問題。

6.GPU視訊記憶體問題

訓練過程中可能出現視訊記憶體不夠用的問題,這個問題網上說法都是控制分配給GPU的視訊記憶體,如:

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

但我所用的GPU為NVIDIA GeForce GT 720,視訊記憶體只有1G。通過加入以上程式碼仍未解決問題。

最後發現可以將pycharm所有工程都關閉,包括anaconda終端。再開啟工程即可正常訓練,原因應該是別的工程也使用過此環境,可能仍佔有一定的GPU資源,雖然在工作管理員並沒有顯示佔用。

相關文章