Jetson NanoにTensorFlow Probabilityをインストールするには、工夫が要ります。
その詳細をstep by stepで記します。
そもそも、「Jetson NanoになんでTensorFlow Probabilityが必要なの?」と思われるかもしれません。
例えば以下のケースで必要です。
JetRacerを自走させるモデルをTensorflowで作成している。
行動は連続値なのでガウス方策を採用、その多次元正規分布の確率密度関数にTensorFlow Probabilityを使用している。
などです。
問題と対処
普通に
「sudo pip3 install tensorflow-probability」
とやってしまうと、途中まで進行しますが、dm-treeの自動ビルドのところで、
「bazelってなんじゃ?そんなファイルもディレクトリも無いぞ!」
と怒られます。
bazel build //tree:_tree --symlink_prefix=build/temp.linux-aarch64-3.6/bazel- --compilation_mode=opt
unable to execute 'bazel': No such file or directory
上記エラーメッセージ中に「bazel build」とあり、Bazelでビルドしようとしていることがわかります。
確かに、TensorFlow Probabilityの公式インストールガイドには、
「Bazel ビルドシステムが必要」と明記してあります(2021年3月末時点)。
よって、
Bazelが無いのが問題なので、事前にBazelをインストールする
ということになります。
概要
前提
適合しているバージョンのTensorflow本体がインストールされていること。
依存関係はここで確認します。
JetPackは4.5.1で実行しました。
大まかな手順
1.curlをインストール
Bazelのインストールスクリプト内でcurlを使用しているので。
2.Java JDK8をインストール
Bazelが依存しているため。
3.Jetson Nanoに適合したBazelをインストール
4.TensorFlow Probabilityをインストール
詳細
1.curlをインストール
Bazelのインストールスクリプト内でcurlを使用しているので、事前にインストールします。
sudo apt update
sudo apt install curl
2.Java JDK8をインストール
Bazelが依存しているJava JDK8をインストールします。
sudo apt install openjdk-8-jdk
3.Jetson Nanoに適合したBazelをインストール
実質、ここがキモとなります。
Bazelのビルド済バイナリとインストールスクリプトが置いてあるGitHubのリポジトリからcloneします。
カレントディレクトリに、「Bazel_bin」というディレクトリ(リポジトリ)ができます。
このリポジトリには、各バージョン、各アーキテクチャ用のインストールスクリプトがあります。
その中で、
バージョンは2.0.0、
Jetson Nanoに適合している、/Ubuntu1804_JetsonNano_aarch64/openjdk-8-jdk/
内のインストールスクリプトを走らせます。
git clone https://github.com/PINTO0309/Bazel_bin.git
cd Bazel_bin/2.0.0/Ubuntu1804_JetsonNano_aarch64/openjdk-8-jdk/
./install.sh
実行後、/usr/local/bin/にbazelという名のバイナリファイルができているはずです。
4.TensorFlow Probabilityをインストール
これで準備完了しました。
TensorFlow Probabilityをいつものように普通にインストールします。
sudo pip3 install tensorflow-probability
今度は怒られることもなく、すんなり終了するはずです。
参考・利用させていただいたリソース
・【MediaPipe】Jetson Nanoで環境構築し、CPU/GPUで動かしてみた(v0.7.5)
Bazelのインストール方法の参考にしました。ありがとうございました。
・Bazelのビルド済バイナリとインストールスクリプトが置いてあるGitHubのリポジトリ
「Katsuya Hyodo」さんのリポジトリです。Bazelのビルド済バイナリとインストールスクリプト、しかもJetson Nanoドンピシャのものがあって、本当に助かりました。これが無ければもっと苦労していました。ありがとうございました。