在Linux安裝CNTK作為keras的backend並與TensorFlow比較速度
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
- CNTK: 40秒 per epoch
- TensorFlow: 52秒 per epoch
- CNTK: 約37秒 per epoch
- TensorFlow: 約70秒 per epoch
- CNTK: 約80.6秒 per epoch
- TensorFlow: 約220秒 per epoch
CNN
- CNTK: 約16秒 per epoch
- TensorFlow: 約12秒 per epoch
- CNTK: 約40秒 per epoch
- TensorFlow: 約23秒 per epoch
GAN
keras CNTK backend在這邊應該有bug,我用tensorflow當backend跑沒出問題
題外話
PyConTW那天跟那位微軟技術佈道師聊到這整個套件當初是微軟內部拿來做語言處理的。看起來應該有對RNN做特別的優化沒錯。