在Linux安裝CNTK作為keras的backend並與TensorFlow比較速度

I-Sheng Fang
4 min readJun 15, 2017

--

之前在keras作者François Chollet‏的twitter上看到keras beta支援微軟的深度學習框架CNTK作為backend

上禮拜的PyConTW聽了場微軟的CNTK傳教會,看到demo時比TensorFlow快很多的速度覺得半信半疑。決定自己來試試CNTK,廢話不多說我們開始吧。

先簡單交待一下我使用的環境:

Ubuntu 16.04 LTS
Intel Xeon E3–1231 v3
NVIDIA GTX770 Driver 375.66
CUDA 8.0
cuDNN 5.1
Anaconda 4.3.1

因為CNTK要用到OpenMPI,所以來apt-get一下

sudo apt-get install openmpi-bin

既然是要用beta版,建一個新的環境還是比較安全,反正玩壞大不了把環境刪掉就好了

conda create -n CNTKpy36 python=3.6 anaconda

建完環境之後記得activate他

source activate CNTKpy36

從github上安裝最新版的keras

pip install git+https://github.com/fchollet/keras.git

裝最新的CNTK吧

pip install https://cntk.ai/PythonWheel/GPU/cntk-2.0-cp36-cp36m-linux_x86_64.whl

這是單GPU版的,如果要其他python版本、CPU或是多GPU版的請到這裡任君挑選

然後你就搞定了。

只要記得在 .kerasrc裡面的keras.json裡面backend改成cntk(是的你沒看錯,全小寫)或是在跑程式之前打

export KERAS_BACKEND=cntk

就可以了

簡單測試順便跟TensorFlow backend做比較

我簡單跑了一下幾個keras附的example

tl:dr RNN: CNTK > TensorFlow, CNN: TensorFlow > CNTK, GAN: CNTK have bugs

RNN

lstm_text_generation.py

  • CNTK: 40秒 per epoch
  • TensorFlow: 52秒 per epoch

imdb_lstm.py

  • CNTK: 約37秒 per epoch
  • TensorFlow: 約70秒 per epoch

mnist_irnn.py

  • CNTK: 約80.6秒 per epoch
  • TensorFlow: 約220秒 per epoch

CNN

mnist_cnn.py

  • CNTK: 約16秒 per epoch
  • TensorFlow: 約12秒 per epoch

cifar10_cnn.py

  • CNTK: 約40秒 per epoch
  • TensorFlow: 約23秒 per epoch

GAN

mnist_acgan.py

keras CNTK backend在這邊應該有bug,我用tensorflow當backend跑沒出問題

題外話

PyConTW那天跟那位微軟技術佈道師聊到這整個套件當初是微軟內部拿來做語言處理的。看起來應該有對RNN做特別的優化沒錯。

--

--