2021/05/03

Jetson-nano で tensorflow & tfjs-node-gpu 動かすまで(多分最短手順)

install

Jetson-nano devkit 買ったはいいものの、CUDAとかTensorRTとかでガリガリやる時間はないのですよ。もっと簡単に手早く既存の学習済みモデルで遊びたいのですよ。

python3 + tensorflow と nodejs + tfjs-node-gpu を動かしたい。だけど普通のインストールだとまともに動かない。特にtfjsはaarch64のプリビルドパッケージがないため、自分でビルドしないとならないが、tfjs-nodeをビルドするために必要な libtensorflow をまずは作らないとならず、これが尋常じゃないほど大変。
というか、自分はまだ成功していない。
ということで、先人の力を借りて、とにかく最短で動くところまでの手順を紹介します。

自分のJetson-nano環境

installed JetPack 4.5.1

$ cat /etc/nv_tegra_release
# R32 (release), REVISION: 5.1, GCID: 26202423, BOARD: t210ref, EABI: aarch64, DATE: Fri Feb 19 16:45:52 UTC 2021

$ cat /usr/local/cuda-10.2/version.txt 
CUDA Version 10.2.89

$ node -v
v14.16.1
$ npm -v
6.14.12

Tensorflow 手順

$ python3 -m venv tf
$ . ~/tf/bin/activate
$ pip install --upgrade pip
$ pip install numpy==1.19.4
$ sudo apt-get install libhdf5-dev
$ pip install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v45 tensorflow 
  1. venvでtensorflow用のpython3環境を作る
  2. 作った環境をアクティベートする(pipが使えるようになる)
  3. pipアップグレード(しないとその後のインストールが上手く出来ない)
  4. numpyとlibhdf5-devを先に入れる
    • numpy 1.19.5はnanoのarm64でサポートしてない命令を使っているらしく、importすると Illegal instructionになる。いずれ解決されるだろう。
  5. tensorflowをnvidiaが提供するパッケージをインストールする
    • 芋づる式に依存パッケージがどっさり入る
    • h5pyとかが自動的にビルドされる(時間かかる)

以下のようにtensorflowをインポートしてみてlibcudart.soがロードされればOK

$ python -c "import tensorflow"
2021-05-03 13:43:44.320234: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.2

tfjs-node-gpu 手順

$ npm init
$ npm install @tensorflow/tfjs-node-gpu@3.3.0
  1. 適当なディレクトリ掘ってnpm init
  2. tfjs-node-gpuをインストール
    • 3.4.0以上だと以下の手順で入れるlibtensorflowではビルドできなかった

node_modules/@tensorflow/tfjs-node-gpu/scripts/custom-binary.json を作成して以下を記述

{
  "tf-lib": "https://s3.us.cloud-object-storage.appdomain.cloud/tfjs-cos/libtensorflow-gpu-linux-arm64-1.15.0.tar.gz"
}
$ npm rebuild @tensorflow/tfjs-node-gpu
  1. tfs-node-gpu をビルド(custom-binary.jsonで指定したライブラリが使用される)
  2. 時々libtensorflowダウンロードがスタックする時がある。その時はkillして再実行

https://www.tensorflow.org/js/guide/nodejs?hl=ja を試してみて動けばOK

import * as tf from '@tensorflow/tfjs-node-gpu'

libtensorflow-gpu-linux-arm64-1.15.0.tar.gz のダウンロード先は、 https://enricopiccini.com/en/kb/HOW_TO_RUN_TensorflowJs_in_NodeJs_on_NVidia_Jetson_Nano_arm64-658 を参照させてもらいました。

まだ色々試したわけじゃないけど、とりあえず絶望的な状況からは脱した。
できれば最新のlibtensorflow-gpu-linux-arm64を作るか、cdn見つけたい。