Jetson Nano 開発者キット
少し形から入る傾向は、否定できないです。そもそも人工知能を習得して何が出来るようになるのか、分かっていないままGPUを搭載したAI開発用マシンが必要なんじゃないかと先走って考えたのは、何故なのか思い出せませんが、とにかく手を出したからには、使いこなせるようになりたいとは思います。
まず、これまでに購入したオンボードPCとしては、Raspberry Pi 4B や Raspberry Pi Zero W などがありますが、いずれもディープラーニングや機械強化学習を実行するには、処理能力が足りないことが明白でした。少なくともディープラーニングの学習プログラムを実行するためには、繰り返し計算処理が必要で、PythonのNumpyというライブラリで大規模な行列計算等を行う必要があります。そのためには、全てをCPUに処理させるよりも効率良くGPU(Graphics Processing Unit)を使って処理する必要があります。CPUだけで実行すると何日間も延々と動き続ける処理が、GPUを利用すれば数時間といったように時間の短縮が可能になります。(はずです)
AmazonでこのJetson Nano 開発者キットを購入しましたが、Raspberry Pi 4B のようにスターターキットで必要なものが全て揃ったものは無いようなので、幾つか揃える必要があります。
購入する前にNVIDIAのサイトで事前に確認しておく必要があります。

メインストレージ用のmicroSDカード | 購入したものを次に紹介します |
電源1) ③に接続する5V2AのMicro-USB電源入力 | 一応、用意しましたが電源2を使いました。 |
電源2) ⑧に接続する5V2.5A以上のDC電源入力 | 購入したものを次に紹介します |
キーボードとマウス | Raspberry Pi 4B と共用のものです |
無線子機 Wifiトングル | 購入したものを次に紹介します |
HDMIディスプレイケーブル | ディスプレイとの接続用ケーブル(余っていたのを使いました) |
まず有線LANで繋げようと思いましたが、長いLANケーブルが無く断念しましたが、やはりネットワークに接続しなければAI開発どころではないので、安めの無線LAN 子機を探しました。最初に購入したwifiドングルは、繋げても認識しなかったため、返品して別のwifiドングルに交換しました。
上が繋がらなかったもので、下が繋がったものです。
Jetson Nano のセットアップ
必要なハードウェアが揃ったので、セットアップしていきます。セットアップを出来るだけ手短に動画で説明します。
WI-FI設定
ネットワークに繋がらないとインターネットに接続できずシステムアップデートも出来ないため、まずは、ネットワークに接続できるようにWI-FIトングルの設定を行います。
まずは、Jetson Nanoのリビジョンを確認します。続いてWI-FIドングルを認識しているか確認します。入力コマンドは以下の通りです。
$ cat /etc/nv_tegra_release
$ lsusb
$ lsusb -t

続いてNetwork Manager のCLI版を使ってネットワークに繋ぎます。
まずは、ネットワークデバイスの一覧を表示します。
続いてWIFIデバイスをオンにします。
WIFIのアクセスポイントを一覧表示します。
$ nmcli d
$ nmcli r wifi on
$ nmcli d wifi list


アクセスポイントに接続します。
$ sudo nmcli d wifi connect <アクセスポイント> password <パスワード>

再起動すると以降はネットワークに自動接続するようになります。
日本語環境の設定
英語しか使えないと不便なので、日本語が使えるようにします。SystemSettingメニューからLanguageSupportを選択します。

ネットワーク接続済みで初回起動時に利用可能な言語サポートを自動ダウンロードします。

ダウンロードが完了したら日本語サポートを適用します。初期は一番下に表示されていた日本語を一番上にドラッグ&ドロップします。少し動きが難しいですが、何度がやればいつの間にか一番上に表示されるようになります。

一番上に持っていけたら「システム全体に適用」というボタンを押します。
ここで一度rebootを行います。再度、システム設定(日本語になっている)から言語サポートを選択します。

再び、言語サポートを選択します。キーボード入力に使うIMシステムに「fcitx」を指定します。

再度、再起動をします。
再起動後にシステム設定からテキスト入力を指定します。

次のソースへ切り替えでキーボードの「半角/全角」キーを押すと以下のように設定されます。
前のソースへ切り替えは、Shiftを押しながら「半角/全角」キーを押します。(同じキーは設定できません)

これで日本語入力環境の設定は完了です。試しにChromeで日本語検索をしてみました。

ソフトウェアの最新化
実は、Jetson Nano のOSイメージは、Ubuntu 18.04がベースになっており、簡単にはバージョンアップは出来ないようです。(一度、試しましたが起動しなくなりました)
従って、ソフトウェアが少し古いもので初期インストールされており、Python3 もそのままでは動きませんでした。一度、Python3のバージョンアップも試してみましたが、こちらもまともに動かなくなりました。つまりPythonのみアップデートではダメでUbuntuのバージョンアップが必要なようです。
Pythonのバージョンも初心者は、更新せずに入っているものをそのまま使う方が良さそうです。
まずは、いつものやつを実施して、Ubuntu18.04 の最新状態にします。
$ sudo apt update
初回は、大量にupdate対象が表示されました。
$ sudo apt upgrade
$ sudo apt autoremove
このコマンドで必要なアップデート、不要なパッケージの削除が行われます。再度、apt updateを行ってみると以下のように「tensorrt」のインストールが保留になっています。

普通に以下のコマンドでインストールします。
$ sudo apt install tensorrt

ソフトウェアの最新化が出来たので、続いてPython3の開発環境を整備します。
Jetson Nano の Python3 開発環境整備
まず、基本的にOSイメージで綺麗にライブラリなどのバージョンが揃っていると勘違いしていました。しかし、Jetson Nano の Ubuntuイメージでは、python を実行すると 2.7.17が実行され、python3を実行してもバージョンは、3.6.9が実行されます。
Ubuntu18.04では、現時点での最新リポジトリがpython3.8 になっているようです。今のPython3の最新は、python3.11なので少し追従できていない感じがします。そして、python3.8にUpdateしても使えるようにするには幾つもハードルがあり、解決に時間がかかりそうだったため、python3.6のまま進めていくことにしました。
pip のインストール
なぜか初期状態でpip(Pip Installs Python)が入っていません。

新しくインストールを行います。
$ sudo apt install python3-pip

早速、インストールしたpip3を使って、matplotlibをインストールしようとしましたが、エラーが表示されました。

何度か見たことのあるエラーです。おそらくpipやsetuptoolsのバージョンが合ってないためエラーになっているのだと思います。インストールしているパッケージのバージョンを表示してみます。
$ pip3 list

何かいきなり警告が表示されています。Google翻訳すると以下のような事みたいです。
非推奨: デフォルトの形式は将来的に列に切り替わります。 –format=(legacy|columns) を使用する (または pip.conf の [list] セクションに format=(legacy|columns) を定義する) と、この警告を無効にすることができます。
毎回警告を受けるのは、嫌なので pip.conf で表示形式を指定します。
$ mkdir ~/.config$ mkdir ~/.config/pip/
$ cd ~/.config/pip/
$ vi pip.conf
以下のようにpip.confに書き込んで保存して終了します。
viコマンドではESCキーを押して:wqで保存して終了します。
[list]
format=columns
警告が表示されなくなったのでインストールされているパッケージのバージョンを確認してみます。
$ pip3 list
Package Version
----------------------------- -------------------
…(略)
pip 9.0.1
…(略)
setuptools 39.0.1
…(略)
うーん。古いような気がします。とりあえず最新版に入れ替えておきます。
$ python3 -m pip install -U pip
$ python3 -m pip install -U setuptools

pip のバージョンは 9.0.1 ⇒ 21.3.1
setuptools のバージョンは 39.0.1 ⇒ 59.6.0
になりました。大幅なアップグレードをするのですね。
一応、アップグレードには成功したものの何やら依存関係のエラーが出ています。
チェックを行ってみます。
$ pip3 check

最初の「WARNING:」は、python3 -m pip で呼び出してください。とのことです。
最後の2行が依存関係のエラーで以下のように表示されています。
launchpadlib 1.10.6 には testresources が必要ですが、これはインストールされていません。
uff 0.6.9 には protobuf>=3.3.0 という要件がありますが、protobuf 3.0.0 があります。
言われた通りインストールとアップグレードをします。
$ python3 -m pip install testresources
$ python3 -m pip install -U protobuf
これでpython3の環境が整ったと思います。初期で必要と分かっているパッケージをインストールしておきます。
$ python3 -m pip install matplotlib
$ python3 -m pip install pillow
開発環境(IDE)のインストール
開発環境として、IDLE と Geany を入れたいと思います。どちらも比較的シンプルなIDEです。
$ sudo apt install idle3
特に問題なくインストールできます。デスクトップからアイコンで実行したいので、ファイルマネージャーで/usr/share/applicationsからアイコンをコピーしてデスクトップに貼り付けます。


貼り付けたときは、アイコンとして表示されませんが、ダブルクリックして起動して、信頼できるよと教えてあげると、ちゃんとアイコンの形に変わります。

続いて Geany をインストールします。
$ sudo apt install geany
IDLE3 と同じ要領でデスクトップにアイコンをコピーします。
起動までは、簡単に出来ましたが、メニューがデスクトップの最上位に表示されてかなり使いにくいです。なので各アプリケーションにメニュー表示するように設定を変更します。

システム設定から外観を選択します。

外観の挙動でウィンドウメニューを「ウィンドウのタイトルバーの中」に、メニューの表示を「常に表示」に変更します。

以下のような表示に変わります。

これにて Python3 開発環境の構築が完了です。
おまけ)Python3 のバージョンを 3.11.1 にしてみた
実際に出来るのかどうかという意味でやってみましたが、最終的には、matplotlib がGUIを使えず断念した話です。どうしてもパッケージ管理でインストールされているバージョンが最強で、自分でコンパイルしても他のライブラリが追従してくれません。なので冒頭にあるようにRaspiOSのようにNVIDIAがイメージOSをアップデートしてくれることが最短なのですが、おそらくAIで使用するPythonのバージョンが未だに2系が多いということを考えたら無理そうですね。
一応、実験としてPython-3.11.1をインストールしてみました。ここで実行したコマンドは、以下のページに載っています。(そのままなのでそちらを見ても同じです)
まずは、ビルドに必要な依存ファイルをインストールします。
$ sudo apt update
$ sudo apt install build-essential libbz2-dev libdb-dev \
libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
libncursesw5-dev libsqlite3-dev libssl-dev \
zlib1g-dev uuid-dev tk-dev
ソースファイルをダウンロードして展開します。
$ wget https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz
$ tar xJf Python-3.11.1.tar.xz
ビルドしてインストールします。一応、最適化オプションをオンにしてみました。
$ cd Python-3.11.1/
$ ./configure --enable-optimizations
$ make
# sudo make install
これでpython3が3.6.9から3.11.1に変わります。ですが、ライブラリ等が追従しておらず、すぐにはまともに使うことが出来ませんでした。また、機会があれば調べてみたいと思います。
Jetson Nano のケースをつくってみる
ThingiverseでJetson Nano のケースを探したらカッコいいのが見つかったので印刷してみました。
綺麗に印刷出来たので、ケースに納めて使っています。



さぁ、これでディープラーニングの勉強を初めていきます。
以上
コメント