1. 程式人生 > >Windows下Tensorflow-GPU的安裝,Tensorboard的使用,以及過程中遇到的各種坑

Windows下Tensorflow-GPU的安裝,Tensorboard的使用,以及過程中遇到的各種坑

1、安裝Anaconda

Anaconda 4.3.1 (Python 3.6)
下載頁:https://www.continuum.io/downloads
安裝後,如果conda下載包的速度很慢,可以執行下面的命令設定國內映象

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

conda config --set show_channel_urls yes

執行後生成C:\Users\USER_NAME目錄下的.condarc檔案記錄著conda的配置

2、CUDA和CUDNN

cudnn(Cuda Deep Neural Network library,是用於深度神經網路的GPU加速庫,提供了forward and backward convolution, pooling, normalization, and activation layers等實現,讓深度學習的研究者能夠專注於訓練神經網路而不是花費在 low-level GPU performance tuning上。許多深度學習框架都可以用cudnn加速,包括Tensorflow、Caffe、Theano、Torch、CNTK。):
https://developer.nvidia.com/cudnn
版本:cudnn v5.1 library for windows 7
下載cudnn需要註冊一下。

1、安裝cuda
2、解壓cudnn,裡面是三個資料夾bin、include、lib。將這三個資料夾複製到cuda的安裝目錄下C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0

3、安裝Tensorflow

conda create -n tensorflow-gpu  python=3.6
建立了一個環境,名字叫tensorflow-gpu
activate tensorflow-gpu
啟用這個環境

可以看到命令前面有tensorflow-gpu標識。
這裡寫圖片描述

pip install tensorflow-gpu
import
tensorflow as tf hello=tf.constant('Hello,Tensorflow') sess=tf.Session()

開啟Session,會看到下圖,正確的是隻有I開頭的訊息,我這兒出現W開頭的訊息,也就是警告Warning,似乎和SSE指令集有關。不過不是錯誤我就先忽略了。
這裡寫圖片描述

print(sess.run(hello))

正確輸出‘Hello,Tensorflow’說明安裝成功。

4、使用Tensorboard

這是用來視覺化的工具,可以直觀的觀察神經網路的結構,和資料在神經網路中的變化。
D:\Anaconda路徑
\envs\tensorflow-gpu\Lib\site-packages\tensorflow\examples\tutorials\mnist
這個路徑下是一個經典的識別手寫數字的例子。
這裡寫圖片描述

cd PYTHON\Anaconda3\envs\tensorflow-gpu\Lib\site-packages\tensorflow\examples\tutorials\mnist
首先轉到這個路徑下

activate tensorflow-gpu
啟用環境

python mnist_with_summaries.py
執行程式碼

需要的資料執行程式碼時會自動下載,可以看到隨著訓練的進行精確度不斷提高。

這裡寫圖片描述

訓練完成後.\mnist\tmp\tensorflow\mnist下有兩個資料夾,input_data和logs。input_data下是用到的資料。logs下是訓練過程中儲存的資料用來顯示在tensorboard上。
(我第一次執行mnist_with_summaries.py完之後,並沒有看到這個資料夾,也沒有看到記錄資料的檔案“events.out.tfevents.1497007494”,便自己新建了一個資料夾tmp,運行了第二次結果就有了,我也不知道為毛。。。)

之所以在這個資料夾下是因為程式碼中有如下程式碼,可以看到預設路徑是這樣的。

parser.add_argument(
      '--data_dir',
      type=str,
      default='./tmp/tensorflow/mnist/input_data',
      help='Directory for storing input data')
parser.add_argument(
      '--log_dir',
      type=str,
      default='./tmp/tensorflow/mnist/logs/mnist_with_summaries',
      help='Summaries log directory')
train_writer = tf.summary.FileWriter(FLAGS.log_dir + '/train', sess.graph)
test_writer = tf.summary.FileWriter(FLAGS.log_dir + '/test')
tensorboard 
--logdir=/tmp/tensorflow/mnist/logs/mnist_with_summaries

然後在瀏覽器中輸入localhost:6006

這裡寫圖片描述

可能會遇到顯示錯誤,我首先更新了谷歌瀏覽器,然後在論壇上看到一個人說的方法,先將命令列的目錄進入/tmp/tensorflow/mnist/logs,再執行命令才能成功。ORZ。

tensorboard --logdir=mnist_with_summaries

這裡寫圖片描述

遇到的錯誤

cupti64_80.dll缺失

2017-06-09 15:46:34.429648: I
c:\tf_jenkins\home\workspace\release-win\m\windows
-gpu\py\36\tensorflow\stream_executor\dso_loader.cc:129] Couldn't open CUDA library cupti64_80.dll
2017-06-09 15:46:34.430649: F 
c:\tf_jenkins\home\workspace\release-win\m\windows
-gpu\py\36\tensorflow\stream_executor\lib\statusor.h:205] Non-OK-status: status_status: Failed precondition: could not dlopen DSO: cupti64_80.dll; dlerror: cup
ti64_80.dll not found

可以在C:\Program Files\NVIDIA GPU Computing
Toolkit\CUDA\v8.0\extras\CUPTI\libx64下找到這個檔案。
我看了一下我的電腦的環境變數path關於cuda只有:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp
因此找不到這個檔案。
將這個檔案拷貝到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
將cupti.lib拷貝到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

NVIDIA GeForce GT 640M裝置是不可移動的,無法彈出或拔出

這個是因為我的驅動程式版本不對,應該裝合適的顯示卡驅動。
右鍵計算機,屬性,然後開啟裝置管理器。可以看到我的顯示卡是NVIDIA GeForce GT 640M。
這裡寫圖片描述

這裡寫圖片描述

電腦上的GPU是CUDA-enabled的嗎

nvidia:https://developer.nvidia.com/cuda-gpus
使用GPU的tensorflow對NVIDIA的計算能力是有要求的,可以在這個地址上看到符合要求的GPU。我的GPU型別是GeForce的,因此點開CUDA-Enabled GeForce Products可以看到符合條件的各系列GPU。

這裡寫圖片描述

CUDNN 版本問題

2017-06-07 16:29:00.354047: E c:\tf_jenkins\home\workspace\release-win\m\windows
-gpu\py\36\tensorflow\stream_executor\cuda\cuda_dnn.cc:352] Loaded runtime CuDNN library: 6021 (compatibility version 6000) but source was compiled with 5105 (compatibility version 5100).  If using a binary install, upgrade your CuDNN library to match.  If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.

這個錯誤時因為現在用的cudnn是6.1版本的,應該用5.1版本的。下載v5.1的CUDNN重新解壓,複製過來。