編譯 TensorFlow w/ cudnn v5

目前 [2016/06/12] 用 pip 裝的 tensorflow 0.9,預設會使用 cudnn v4,我們的系統上也是裝 cuda-7.5 和 cudnn-v4。不過聽說 v5 對 convolution 效能大幅改善,想裝來用,那麼就得自己編譯 Tensorflow 才行。

環境

OS:Debian Streth 64
cuda:7.5
bazel: 3.0 (1.4 遇到奇怪的錯誤,記得更新)
gcc/g++: 5.2

步驟

首先把 cudnn-v5 載下來解壓縮放到家目錄 $HOME/cudnn5 (/include, /lib64)。

然後進到 tensorflow 目錄。若之前有編譯過,用 bazel clean 清掉。

git pull # 更新最新 0.9 版
git pull --recurse-submodules
git submodule update --recursive

如果 gcc/g++ 像我們一樣是 5.1 以上,等下編譯會遇到像這種錯誤 [1]

/usr/lib/gcc/x86_64-linux-gnu/5/include/mwaitxintrin.h(36): error: identifier "__builtin_ia32_monitorx" is undefined
/usr/lib/gcc/x86_64-linux-gnu/5/include/mwaitxintrin.h(42): error: identifier "__builtin_ia32_mwaitx" is undefined

那麼要修改一下 third_party/gpus/crosstool/CROSSTOOL 加上兩行:

 cxx_flag: "-std=c++11"
+ cxx_flag: "-D_MWAITXINTRIN_H_INCLUDED"
+ cxx_flag: "-D__STRICT_ANSI__"
 linker_flag: "-lstdc++"
 linker_flag: "-B/usr/bin/"

接著設定一下編譯環境

./configure

cudnn 版本打 5 ,路徑記得設 cudnn v5 的安裝路徑。

最後終於編譯(gpu模式):

# 編譯要 "--config=cude" 才能用 GPU。此編譯的目標是tutorials_example_trainer
bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer 
# 測試
bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu

官網只寫了以上,笨笨的直接跑完就以為裝好了,結果 PYTHONPATH 也加入 tensorflow/ 了,怎麼 import 卻總是說找不到 pywrap_tensorflow。發現原來是要另外編譯 pip package 才能做出能 import 的東西:

# 編譯 pip package 以便之後在 python import 使用
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

然後決定安裝路徑,例如想裝在 ~/tensorflow/built_package

TF_DIR=$HOME/tensorflow
TF_INSTALL_DIR=$HOME/tensorflow/built_package
rm -r $TF_INSTALL_DIR
mkdir $TF_INSTALL_DIR
cd $TF_INSTALL_DIR 
cp -r $TF_DIR/bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .
cp -r $TF_DIR/tensorflow/tools/pip_package/* .
  • 當然,cudnn v5 的 lib64 路徑要在設定檔 (.bashrc, .zshrc, etc.) 裡加到 LD_LIBRARY_PATH,以後程式才找得到。
  • 把 $TF_INSTALL_DIR 加到 PYTHONPATH,使 python 找得到。
  • 把 $TF_INSTALL_DIR/tensorflow/tensorboard 加進 PATH,就能使用 tensorboard。

參考:

  1.  build fail with cuda: identifier “__builtin_ia32_mwaitx" is undefined #1066
  2. tensorflow install

 

 

 

 

廣告
編譯 TensorFlow w/ cudnn v5

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s