本文記錄了安裝theano、keras、tensorflow以及運行tutorial程序時遇到的一些問題,供后人參考。
實驗機器:聯想筆記本,i7-6700HQ,GTX960M,16G內存,SSD硬盤,64位Ubuntu 16.04 LTS
備注:
-
不推薦windows,會遇到各種不兼容問題。Ubuntu最好使用16.04這個版本,低版本的Ubuntu可能出現顯卡驅動不支持等問題。
- Ubuntu16.04 裝好后,注意將系統默認的顯卡驅動改為nvidia的驅動,並更新顯卡驅動,我用的是version 367.48。
-
TensorFlow的gpu版本安裝比較麻煩,由於CUDA版本兼容問題,如果使用當前最新的CUDA 8.0,則需要自己重新編譯TensorFlow源代碼,然后本地安裝。
-
建議先安裝Theano和Keras,流程相對容易,早點跑出“hello world”,增強信心。
安裝Theano作為后端的Keras:
詳細流程可參見
http://keras-cn.readthedocs.io/en/latest/getting_started/keras_linux/
流程中安裝CUDA和cuDNN時,應選擇CUDA 8.0和cuDNN 5.0,安裝完畢后,一定要記得重啟電腦!否則運行tutorial代碼會提示no CUDA-capable device is detected
按照教程運行mnist_mlp.py,會有如下提示,說明GPU加速成功,每次Epoch需要1s,如果是CPU版本的訓練,則一次Epoch需要70s左右。
Using Theano backend. Using gpu device 0: GeForce GTX 960M (CNMeM is enabled with initial size: 80.0% of memory, cuDNN 5005)
安裝Tensorflow:
在官方教程里,有編譯好的whl給我們直接安裝(通過pip install),比如我的機器就選下面這個
# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7 # Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Install from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.11.0rc1-cp27-none-linux_x86_64.whl
但實際操作后會遇到報錯,具體報錯信息我沒保存,今天反思了一下,估計是因為我的CUDA安裝路徑不是TensorFlow默認的"/usr/local/cuda",而是"/usr/local/cuda-8.0",可能把文件名改一下就好了的。當時我實際的解決方案是git clone TensorFlow源代碼,然后自己配置環境並重新編譯。。。
編譯TensorFlow也比較麻煩,最靠譜的安裝教程應該是這個
http://textminingonline.com/dive-into-tensorflow-part-iii-gtx-1080-ubuntu16-04-cuda8-0-cudnn5-0-tensorflow
首先需要安裝JDK,雖然Ubuntu自帶了OpenJDK,但還是按照網上教程,卸載了OpenJDK,裝了Oracle JDK並配置好環境變量。然后就是安裝Google內部使用的build工具Bazel,中間應該是有報錯的,我記得是提示有依賴包沒有安裝,google一下可以找到解決方案,然后成功安裝好bazel之后,就可以進行編譯了。
編譯之前,要先git clone TensorFlow,這里我直接下載了master版本,所以后面發現版本太新,無法與keras兼容。。不過先暫時這樣吧。下載好之后,要cd到TensorFlow源代碼主目錄,然后./configure配置環境,這里面最重要的就是設置好CUDA和cuDNN的版本和路徑,注意TensorFlow默認的CUDA路徑是“/usr/local/cuda”,而CUDA 8.0的默認安裝路徑是“/usr/local/cuda-8.0”,所以配置的時候一定要手動修改一下。
配置完畢之后,按照教程用bazel編譯即可。編譯大概要十多分鍾,結束之后得到whl文件,然后用pip install,大功告成。此時再在python里import tensorflow,可以看到以下信息
>>> import tensorflow I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
用TensorFlow跑MNIST數據集:
這個算是我們的hello world吧。按照官方教程,只需要下面兩條命令就可以跑起來並得到不錯的分類結果
$ cd tensorflow/models/image/mnist
$ python convolutional.py
但實際運行的時候,會發現terminal沒有任何輸出,原因是程序需要先下載MNIST數據集,數據源在國外,不翻牆的話很慢。用gedit打開convolutional.py,可以找到數據源的地址,以及下載存放的路徑,我們可以翻牆自己下載數據,然后根據需要修改一下
源代碼里的文件路徑即可。如果有GPU加速,會看到以下信息:
I tensorflow/core/common_runtime/gpu/gpu_device.cc:944] Found device 0 with properties: name: GeForce GTX 960M major: 5 minor: 0 memoryClockRate (GHz) 1.176 pciBusID 0000:01:00.0 Total memory: 3.95GiB Free memory: 3.57GiB I tensorflow/core/common_runtime/gpu/gpu_device.cc:965] DMA: 0 I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 0: Y I tensorflow/core/common_runtime/gpu/gpu_device.cc:1034] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 960M, pci bus id: 0000:01:00.0) Initialized! Step 0 (epoch 0.00), 7.8 ms Minibatch loss: 12.054, learning rate: 0.010000 Minibatch error: 90.6% Validation error: 84.6% Step 100 (epoch 0.12), 16.6 ms Minibatch loss: 3.297, learning rate: 0.010000 Minibatch error: 6.2% Validation error: 7.5% Step 200 (epoch 0.23), 16.5 ms Minibatch loss: 3.459, learning rate: 0.010000 Minibatch error: 12.5% Validation error: 3.9%
.......(后面的print信息被我省略掉了)
用TensorFlow跑word2vec:
官方教程在這里
https://www.tensorflow.org/versions/r0.11/tutorials/word2vec/index.html#vector-representations-of-words
我們運行 tensorflow/examples/tutorials/word2vec/word2vec_basic.py ,它還是要先自動下載數據,如果很慢的話,同樣可以自己下載搞定。然后訓練完畢之后會用TSNE對詞向量做可視化,這里需要再安裝幾個matplotlib,sklearn,scipy這三個python包,注意matplotlib還需要安裝Tkinter,可以用下面的命令
apt-get install python-tk
最后訓練完的詞向量如圖