Jetson TX2にTensorFlowをインストールした
GWが暇だったので、おもちゃとしてNVIDIAが出していてるJetson TX2を購入した。
結論から言うとTensorFlowのインストールにつまづき過ぎてGWは終わってしまった。。。
本当は自分のノートPCとの性能比較したかったのだが、苦労したので備忘録として残す。
事前準備
届いたばかりのTX2にはCUDAなどのライブラリがインストールされていないので、JetPack 3.0をインストールガイドに従ってインストールする。
自分の場合は、一度目でL4Tのインストールはできたが何故かライブラリはインストールできなかったので、もう一度ライブラリはインストールを実行した。
TensorFlowのインストール
公式に公開されているバイナリにTX2向けのものを自前でビルドする必要がある。
Googleで検索すると真っ先に出てきたのがhttps://github.com/jetsonhacks/installTensorFlowTX2だが、実行してみてもビルドエラーとなりインストールできなかった。
Bazelのインストールまでは問題なかったのでそこまでは参考にできる。
では、どうしたか?
色々、ビルドエラーについて検索したが、明確な解決方法は見つからなかった。
結局は下記サイトを参考にインストールすることでTensorFlowを使用できる状態になった。
How to install TensorFlow on the NVIDIA Jetson TX2?
手順
依存ライブラリ及びBazelのインストール
TensorFlowのビルドに必要なビルドツールとビルドするのに必要な依存ライブラリをインストールする必要がある。
これについては、自分はhttps://github.com/jetsonhacks/installTensorFlowTX2のinstallPrerequisites.sh
を使用して行った。
TensorFlowのビルド
これについては上記で紹介した手順書通りに行えば良い。
最初にリポジトリを落としてくる。自分は最新版が良かったのでリポジトリのブランチはv1.0.1
から変更した。
$ git clone https://github.com/tensorflow/tensorflow.git
$ cd tensorflow
$ git checkout v1.1.0
次にtensorflow/stream_executor/cuda/cuda_gpu_executor.cc
ファイルに変更を加える。
具体的にはTryToReadNumaNode
関数の最初の行に下記を追記して即終了するように変更する。
LOG(INFO) << "ARM has no NUMA node, hardcoding to return zero";
return 0;
その後も手順書通りに実行していけば良い。
説明は省く。
$ sudo cp /usr/include/cudnn.h /usr/lib/aarch64-linux-gnu/include/cudnn.h
$ ./configure
$ nvidia@tegra-ubuntu:~/tensorflow$ ./configure
Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python2.7
Please specify optimization flags to use during compilation [Default is -march=native]:
Do you wish to use jemalloc as the malloc implementation? (Linux only) [Y/n] y
jemalloc enabled on Linux
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] n
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] n
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] y
XLA JIT support will be enabled for TensorFlow
Found possible Python library paths:
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
Please input the desired Python library path to use. Default is [/usr/local/lib/python2.7/dist-packages]
Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with OpenCL support? [y/N] n
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] y
CUDA support will be enabled for TensorFlow
Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]:
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to use system default]:
Please specify the location where CUDA toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify the Cudnn version you want to use. [Leave empty to use system default]:
Please specify the location where cuDNN library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size.
Extracting Bazel installation...
.......................
INFO: Starting clean (this may take a while). Consider using --expunge_async if the clean takes more than several minutes.
.......................
INFO: All external dependencies fetched successfully.
Configuration finished
$ bazel build -c opt --local_resources 3072,4.0,1.0 --verbose_failures --config=cuda //tensorflow/tools/pip_package:build_pip_package
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
これで、/tmp/tensorflow_pkg
にインストール用のバイナリが作成されているはずなので、下記コマンドにてインストールすれば完了。
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-1.1.0-cp27-cp27mu-linux_aarch64.whl
ただし、自分の場合は、localeがサポートされてないよというエラーが出たので、事前に下記コマンドを実行することで回避した。
$ export LC_ALL="en_US.UTF-8"
$ export LC_CTYPE="en_US.UTF-8"
$ sudo dpkg-reconfigure locales
次回こそはベンチマークをとりたい。。。