在 Anaconda 中安裝 TensorFlow-gpu 2.0(無需下載 CUDA)

最近在搗鼓 TensorFlow 2.0 alpha,最開始根據官方教程使用的

pip install tensorflow-gpu==2.0.0-alpha0

命令來安裝的,但是一直報下面這個錯誤。

ImportError: DLL load failed: The specified module could not be found.

換了 CUDA 和 cuDNN 都不行,在 Github 的 issue 裏面看到有人說可以用 conda install 來裝,於是就想試試,但是 Anaconda 現在最高只支持 TensorFlow 1.13,還不能直接用 Anaconda 安裝 2.0。

所以我就想着先裝 TensorFlow 1.13,然後再升級到 2.0。這個辦法是可行的,但是! TensorFlow 2.0 是用 cuDNN 7.4.1 編譯的,Anaconda 上的 cuDNN 只有 7.3,所以版本匹配不上。

於是就想着怎麼能夠把 Anaconda 裏面的 cuDNN 升級一下,終於讓我找到了辦法!

下面這個方法只是針對當前使用,當 Anaconda 支持 2.0 之後,就可以直接使用 conda install tensorflow 安裝了,我也是這次才發現 Anaconda 會直接把 CUDA 和 cuDNN 裝好,一條龍服務。

在此強烈建議使用 Anaconda 直接安裝 TensorFlow!!!免去折騰搭建環境煩惱!

conda search tensorflow --infoconda search tensorflow-gpu --info 可以查看當前 Anaconda 支持的 TensorFlow CPU 和 GPU 版本。

當前 TensorFlow-gpu 支持 1.8 之後的版本。


下面開始正題:

  1. 先創建一個新的環境來安裝 TensorFlow。
conda create -n tf2.0 python=3.6
  1. 然後激活環境
conda activate tf2.0
  1. 先使用 pip 安裝 TensorFlow 2.0
pip install tensorflow-gpu==2.0.0-alpha0
  1. 然後在 Conda 中安裝 cudatoolkit, cudnn, numba,安裝時可以看到 cuDNN 版本爲 7.3.1。Numba 用於支持 Anaconda 找到安裝的 cudatoolkit 和 cudnn。
conda install cudnn cudatoolkit numba

在這裏插入圖片描述

  1. 接下來下載 cuDNN,TensorFlow 2.0 支持的 cuDNN 版本要 >= 7.4.1,我上傳了 2 個 cuDNN,一個 CUDA 10 一個 CUDA 9 的,Linux 暫時沒用到,有需要的可以留言。
    鏈接: https://pan.baidu.com/s/1P7jgx9lhvlpVTK5QHulvhA
    提取碼: rvdh

  2. 找到環境位置,如果 Anaconda 的安裝位置是 C:\Anaconda 的話,那麼 tf2.0 環境的位置就在
    C:\Anaconda\envs\tf2.0
    我們需要的是這個目錄下的 Library 文件夾。
    Library 文件夾裏有 bin/include/lib 這三個文件夾,解壓下載的 cuDNN 壓縮包,可以發現裏面也有名字相同的三個文件夾,直接將 cuDNN 複製過去替換就行。

  3. 運行 numba 檢查 cudatoolkit 和 cuDNN。

numba -s

如果看到這些都 ok ,就沒什麼問題了。

Summary:
        1/1 devices are supported
CUDA driver version                           : 10010
CUDA libraries:
Finding cublas
        named  cublas64_100.dll
        trying to open library...       ok
Finding cusparse
        named  cusparse64_100.dll
        trying to open library...       ok
Finding cufft
        named  cufft64_100.dll
        trying to open library...       ok
Finding curand
        named  curand64_100.dll
        trying to open library...       ok
Finding nvvm
        named  nvvm64_33_0.dll
        trying to open library...       ok
        finding libdevice for compute_20...     ok
        finding libdevice for compute_30...     ok
        finding libdevice for compute_35...     ok
        finding libdevice for compute_50...     ok
  1. 打開 Python,運行 TensorFlow!
# 僅針對 TensorFlow 2.0
import tensorflow as tf
print(tf.reduce_sum(tf.random.normal([1000, 1000])))
2019-04-09 14:24:32.075124: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-04-09 14:24:32.114064: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library nvcuda.dll
2019-04-09 14:24:32.440864: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1467] Found device 0 with properties:
name: Quadro P2000 major: 6 minor: 1 memoryClockRate(GHz): 1.4805
pciBusID: 0000:b3:00.0
totalMemory: 5.00GiB freeMemory: 4.13GiB
2019-04-09 14:24:32.467335: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1546] Adding visible gpu devices: 0
2019-04-09 14:24:33.637880: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1015] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-04-09 14:24:33.657614: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1021]      0
2019-04-09 14:24:33.668759: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1034] 0:   N
2019-04-09 14:24:33.679975: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1149] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 3857 MB memory) -> physical GPU (device: 0, name: Quadro P2000, pci bus id: 0000:b3:00.0, compute capability: 6.1)
tf.Tensor(-2217.4058, shape=(), dtype=float32)

從文件上來看,好像通過 conda 安裝的 CUDA 和 cuDNN 都安裝到了 Anaconda 某個環境下的 Library 文件夾裏,也就是說一個電腦裏可以安裝多個不同版本的 CUDA 和 cuDNN(我是這麼理解的)。

所以現在安裝 TensorFlow 最方便的方法應該是直接通過 conda 安裝,如果想要定製一點的話也可以像上面這樣手動安裝。

Anaconda 中 cudatoolkit 版本支持 7.5、8、9、10。
cuDNN 可選較少,支持 6.0、7.1.4(CUDA 8、9)、7.3.1(CUDA 9、10),不過 cuDNN 替換也方便,直接覆蓋就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章