PR

人工知能① Jetson Nano で開発環境を準備する
Jetson Nano のセットアップとPython開発環境構築の話、躓きながらも何とか構築完了した。

人工知能

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 のケースを探したらカッコいいのが見つかったので印刷してみました。

綺麗に印刷出来たので、ケースに納めて使っています。

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

以上

コメント

タイトルとURLをコピーしました