[Jetson]古いTX1をNano人気に便乗して復活させる

## 0.はじめに

Jetson Nano持ってないのに、勝手に敬愛してる[鶴長さん](https://www.amazon.co.jp/%E9%B6%B4%E9%95%B7-%E9%8E%AE%E4%B8%80/e/B004LUSMOG/ref=dp_byline_cont_book_5)と[からあげさん](https://karaage.hatenadiary.jp/)が著者なので、発売直後にNano本購入しました:sweat:
[Jetson-Nano超入門](https://www.amazon.co.jp/dp/4800712513)
![SS 2020-02-09 17.42.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/df66d566-8d0d-c4bc-df28-642c366287ca.jpeg)

調べてみると、この本に出てくるJetPack4.3は、なんと最近すっかり出番のなくなった我が家のJetson TX1にも対応していることが判明！Nano本ありがとう！！

NanoみたいにSD Card Flashでブート....って程簡単じゃないけど、以前のJetPackに比べたら数段インストールが楽になっていました。ただ TensorflowやKeras動かそうとすると以前同様苦労したので、TX1持っていて使っていない人の参考にKeras動かすまでのメモです。


## 1.JetPack導入

JetPack導入手順は英語ですが以下に説明されています。
[Quick Start Guide](https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fquick_start.html%23wwpID0E0WD0HA)

Nanoと違ってUbuntu16.04 or 18.04が動作するHOSTが必要です。

> You have a host computer that is running Ubuntu (Linux) version 16.04 or 18.04.

今回は18.04で行いました。

###(1)HOSTにSDK Manager導入

これは上記Quick Start Guideのままやれば良いので省略します。
(本当はINSTALLした時にスクショとってなかったので:sweat:)

###(2)HOSTにSDK ManagerからINSTALL

(1)で導入したSDK ManagerをGUIから起動します。
NVIDIA Developerアカウントを入れると以下のSTEP.1画面になるので、ターゲット(TX1)などを指定してインストール開始します。
![Screenshot from 2020-02-09 09-47-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/5321b421-82b6-42fc-0ff4-ddece29e44ce.png)

STEP.2画面でINSTALL対象ソフトを選択します（ここでは全部選択）。
![Screenshot from 2020-02-09 09-56-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/8efbd890-fc9b-4673-f48f-a06a65781400.png)

SEP.3画面が表示されます。
![Screenshot from 2020-02-09 09-59-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/dd60e4ba-ef0a-46b3-ec40-a336763a1dfe.png)

デフォルトでAutomatic Setupになっているので Manual Setupに変更します。
(ここもスクショ忘れました:p)

画面指示にあるように、HOST-TX1間をMicro USBケーブルで接続し、TX1をリカバリーモードで起動してINSTALL続行する必要があります。
リカバリーモードのSW位置は以下の図が参考になります。
[TX1リカバリーモード参考](http://blog.bylo.jp/misc/2016/05/2072/)
<img width="580" alt="SS 2020-02-09 10.08.36.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/7d505cca-3e0a-6459-ce2d-47fb8432ae41.jpeg">

TX1側はFlashが終わると再起動してUbuntuインストーラが起動し、通常のUbuntuインストール時の画面が表示されます。
ここでユーザ(この例ではkenzo)などを設定します。

HOST側はTX1へのFlashが終わると以下画面で待ちに入るので、TX1に登録したユーザ名を入れます。
![Screenshot from 2020-02-09 11-42-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/4696cd4c-13cd-e31c-094a-ab0d1340f8ac.png)

STEP3.が続行されます。
![Screenshot from 2020-02-09 10-31-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/be28e129-a3b3-0ee5-3bf9-a8bf1104725e.png)

INSTALLが完了するとSTEP.4画面で完了です。
![Screenshot from 2020-02-09 12-12-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/d29bb7db-ed34-d1fa-c251-ffc9b32faadb.png)

ここまでくるとMicro USBケーブルを外してHOSTの役目は終了です。

TX1でUbuntu18.04が動きました。
![IMG_4103.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/80ad5387-d836-2a4c-b17c-1f92fac52220.jpeg)


## 2.Tensorflow2.0導入

Nano本に書かれているいろんなツールも楽しいのですが、せっかくのGPUボードなので TensorFlowを使えるようにします。
Jetson Nano用に.whlからtensorflowを導入する記事があるので、これを参考に。

[Jetson Nano への.whl（wheel）を用いたTensorflow install 手順](https://www.space-i.com/post-blog/jetson-nano-%E5%85%AC%E5%BC%8F%E6%89%8B%E9%A0%86%E3%81%A7%E3%81%AEtensorflow-install-error%E3%80%81%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB-whl%E3%81%AB%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88/)

###(1)まずはpip3とh5py導入
Ubuntu18.04にはpython3は入っていますがpip3がはいってないので aptでpip3を入れてUpdateしておきます。
またインストール中のh5pyエラーを回避するため先にh5pyを入れておきます。

コードはこんな感じ。

```bash
sudo apt install python3-pip
sudo pip3 install --upgrade pip

sudo apt-get install libhdf5-serial-dev hdf5-tools
sudo pip3 install h5py
```

###(2)Tensorflow.whlのURLを調べて pip3 install
以下のサイトにJetson用Tensorflowパックがあるので導入するwhlのURLを調べます。
[Jetson Download Center](https://developer.nvidia.com/embedded/downloads)
![SS 2020-02-09 16.56.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/61e105d0-b4cb-89a5-dd5f-5c7a576c9cb4.jpeg)

そのURLを pip3 installの引数にして実行。今回はこんなURL。

```bash
sudo pip3 install https://developer.download.nvidia.com/compute/redist/jp/v43/tensorflow-gpu/tensorflow_gpu-2.0.0+nv20.1-cp36-cp36m-linux_aarch64.whl
```

色々依存パッケージもINSTALLされて時間かかります。

<img width="807" alt="SS 2020-02-09 17.24.13.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/91d4cf3a-7121-1609-c7bd-9a1deda8684f.jpeg">

###(3) Tensorflow 確認

tensorflow2.0が使えるようになりました。

<img width="811" alt="SS 2020-02-09 19.42.19.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/9accb5fc-ea28-19ae-9c6e-449618b227d2.jpeg">

REPLで以下を入れればGPU利用も確認できます。

```bash
>>> from tensorflow.python.client import device_lib
>>> device_lib.list_local_devices()
```
<img width="810" alt="SS 2020-02-09 19.47.47.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/86ee4bfc-133b-5cfa-91d5-23a16ad37e8d.jpeg">

###(4)tf.keras確認

tensorflow2.0なのでそのままでもkerasは使えます。

```bash
>>> model = tf.keras.models.Sequential()
>>> type(model)
```
<img width="544" alt="SS 2020-02-09 19.52.43.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/fca0cb1b-45a2-e39d-b2da-a9014509372a.jpeg">

## 3.Keras導入

せっかくなので従来のKerasも入れてみます。

### (1)まずはscipyを用意

scipyの通常インストール(コンパイルにfortran使うやつ）はうまく行かなかったので、scipyもパッケージで入れます。

```bash
sudo apt-get install python3-scipy
```

### (2)kerasをユーザモードで導入

```bash
pip3 install keras --user
```

### (3)確認

REPLでkeras versionを確認します。
<img width="809" alt="SS 2020-02-09 20.00.59.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79389/2c7516ce-78a8-d30d-2fe4-d3fc8a2a4a21.jpeg">

あとは以下のようなKerasサンプルをやってみて動作確認すればOKです。
[KerasでMNIST分類問題をCNNで解く](https://tech.mof-mof.co.jp/blog/keras-mnist-cnn.html)

TX1が復活しました:smile: