Jetson TX2 に JetPack 3.2 の上に Tensorflow を入れようとして挫折した話
はじめに
本記事ではJetPack 3.2でJetson TX2をインストールしようとして 失敗した話 を備忘録として書いています。決して成功した記事ではないので あしからず。Jetson TX2ではアーキテクチャがx86_64ではなくaarch64であるため工夫してインストールする必要があり単純には行かない面倒なことになっています。
Jetson TX2のインストール環境
host環境
GPU環境
Virtual Box VMにUbuntuをインストール
上記サイトからUbuntuのイメージをダウンロードしてVirtual Boxにいれます。インストールにシステム含め30GB以上使用するのでストレージは60GB以上取っていると安心できます。インストール後はsudo apt-get update && sudo apt-get upgrade
してパッケージを更新します。
次にUbuntu内のブラウザにてJetpackをダウンロードします。
VMのUbuntuでJetpackをダウンロード
https://developer.nvidia.com/embedded/dlc/jetpack-l4t-3_2
上記サイト(要アカウント登録)からJetpackの最新3.2をダウンロードします。ダウンロード後はターミナルにてJetpackのファイルの位置まで移動しておきましょう。
VMにJetpackをインストール
途中のスクリーンショットあり
インストールには上記のサイトを参考にしました。
またインストール方法が2つありますが、前者はPCとJetsonが両方ネットワークに繋いでインストールをする方法。後者はPCを経由してインストールする方法となっています。お好みで選択できますが、ここでは私は後者を選択しました(後者はVMでインストールするとエラーが多発するらしい)。
(※画像は3.1の画像ですが、3.2でも同様の状態が現れます)
VMへのインストールが終わると次にJetson TX2へのインストールを行います。ここではVirtualBoxでUSBを認識させる必要があるので、その設定をする必要があります。設定には以下のサイトを参考にしました。
USBの接続設定をしたあとはTX2へのインストールを行います。インストールには時間がかかるので気長に待ちます。
インストールが終わってJetson TX2でUbuntuがインストールできれば下準備は完了です。問題はTensorflowのインストール・・・
Tensorflowのインストール
実はJetson 3.1なら以下のリポジトリに便利なスクリプトが存在しています。
スクリプトを通すことで
- bazel
- tensorflowをaarch64用にインストールするためのパッケージ作成に必要
- tensorflow
- 今回の最大目的であり、これをインストールしたい
の2つがインストールできます。が、上記スクリプトではうまくいきません。
tensorflowをインストールするにあたってぶち当たる壁(重要)
Bazelのインストールで躓く
BazelのインストールにはJDKのインストールが必須になるのですが、上記スクリプトではapt-get install oracle-java8-installer
で行うとリンクが切れておりうまくいきません。なので手動でapt-get install openjdk-8-jdk
をする必要があります。現時点(1/22時点)でBazelの最新は0.9.0なのですが、あまり安定しておらずいたるところで0.5.4を推奨しているところが多かったので0.5.4が良いのかもしれないです。
CUDAとcuDNNのバージョンが違う
スクリプトはJetpack 3.1を対象にしているため、CUDA:8.0, cuDNN:6.0を対象としています。今回使用したJetpack 3.2では CUDA:9.0, cuDNN:7.0なのでそれぞれに対応させたインストールが必要になります。エラーは色々あったので書き留められなかった。
つまるところ何が言いたいのかというと、上記のリポジトリの設定ファイルのバージョン変えたりするだけではうまく行かなかった!(色んな所で悩まされる)
じゃあどうすればいいのか。
候補案1
- Bazelのインストール
- Tensorflowのインストール
をそれぞれ別でやっていく。もしくは既にJetpack 3.2で環境構築できた記事を待つ((((殴
候補案2
結局のところCUDA9.0, cuDNN7.0とマッチしたtensorflowのwhlができていればいいので探す。
この方法ならきっとbazel通さなくてもpipさえあればtensorflowがインストールできるはずなのでこっちのほうがうれしいですね。
悔しい・・・だが、これでいいッ!(開き直り)
結局大したことはしていないのですが、3.2でインストールできたらまた記事にしようと思います。今のところは使えることが第1目標なので仕方なく最新は諦めることにします・・・リベンジしてやる。
2018/01/22追記
Jetpack 3.1では oracle-java8-installer の 8u161がインストールできてた。なんでや。
2018/01/23追記
bazelがうまくビルドできない問題があったけどどうやら8u152ならできるらしい・・・?なんで新しいjdkに対応してないんじゃ。
結局Jetpack 3.1を入れて、既にパッケージされたtensorflow1.4のwhlをつかってインストールしましたとさ。bazelもjdkもじぇんじぇん関係ありませんでした。ちゃんちゃん。