見出し画像

量産型 Jetson nano モジュールと J101 マザーボードの組み合わせを動かせるようにする(にゃおメモ)

一応完成
読みやすいよう編集しなおすかも

Jetson nano 量産module + reComputer J101の組み合わせでは公式情報によるとUbuntuの母艦からOSを内部のemmcにフラッシュする必要がある
開発機向けのドキュメントにあるSDカード直接は不可能
最初にemmcにOSをフラッシュして起動したのちにその構成をSDカードにコピーし、コンフィギュレーションファイルを書き換えてSDカードから起動できるようにスイッチする必要がある

https://wiki.seeedstudio.com/Flash_System_on_SD_card/#change-sd-card-io-speed
https://wiki.seeedstudio.com/reComputer_J1010_J101_Flash_Jetpack/#flashing-jetpack-os-via-command-line

・まずUbuntuで動く母艦を準備(MacはUbuntu化するもの(母艦)としないもの、2台必要)
・母艦からJetson nanoのemmcへJetPackをフラッシュする
・SDカードからの起動設定をしてSDカードからJetPackで起動できるようにする
・AI系のソフトがプレインストールされているJetCardをインストールしなおす:←これは出来なかったので次善の策を講じた

MacのUbuntu専用機化

UbuntuからOSを導入するためMacをUbuntu専用機にする(MacOSとその他の元々入っている情報は消去する)
Ubuntuは最新の22.04.1LTSではJetson nanoのSDK managerが使用できないため18.04LTSを導入する

最新OSでは駄目な理由:NVIDIA SDK managerは現在母艦のUbuntuのバージョンが16.04/18.04/20.04の場合のみサポートされている
https://nullptr.jp/2022/04/23/ubuntu-22-04-lts-released/

Ubuntu18.04.06LTS(UbuntuにしないMacにダウンロードする)
https://releases.ubuntu.com/18.04.6/?_ga=2.3478137.837589919.1666156442-662296676.1666156442

MacへのUbuntuのインストール:以下のサイトの手順に従って行う
https://dezanari.com/mac-ubuntu-usb-install/

USBメモリをMacに刺して、ダウンロードしたUbuntu18.04.6LTSのディスクイメージをEtcherでUSBメモリにフラッシュする
(マイクロSDでは出来ないので注意)

これをUbuntu専用機化(母艦化)するMacに刺してオプションを押しながら起動
2つディスクイメージが出てきたのでとりあえず左を選択して起動
起動したUbuntuのデスクトップでInstall Ubuntuをクリック

言われるとおりに手続き
WiFi接続は後で
「グラフィックと・・・」にチェックを入れる
「ディスクを削除してUbuntuをインストール」を選んでクリーンインストール

色々終わったら再起動
起動は電源ボタン長押し

デスクトップが出てきたらネットワークに接続する
DNSを接続しているネットワークのものに直す(そのままでは変なアドレスになっている)

NVIDIA SDK managerの準備

まずwebブラウザを開いてNVIDIAアカウントを作る

NVIDIA SDK managerをダウンロード
https://developer.nvidia.com/nvidia-sdk-manager

Terminalを起動(右クリックで起動メニューが出てくる)して以下のコマンドを入力

sudo apt-get update #(ここでエラーが出るならDNSがおかしい)
sudo apt-get upgrade
sudo apt-get update
sudo apt install ダウンロードしたファイルのフルパス(コピペ)

sdkmanagerと入力してプロンプトが帰ってくればOK
SDKマネージャーが起動するのでログイン
いまは確認だけなのでこのままSDKマネージャー終了
次回からはコマンドをたたくだけでマネージャーが起動す

jetson nanoの準備

J101ボードのFC RECピンとGNDピンをジャンパーで短絡する

電源を入れてUSBで母艦につなぐ
母艦のTerminalから lsusb というコマンドを入力してNVIDIAのデバイスが検出されることを確認する

sdkmanagerと入力してSDKマネージャーを起動する
ターゲットデバイスを選択(開発キットではないものを選ぶ)

次の画面でHost Machineのチェックを外す
OSは4.6.1を選ぶ
ライセンスに同意のチェックを付ける
16Gしか内部メモリがないので不要なシステムは入れない方が良い
ちなみに全部入れると0.5Gだけしかメモリ領域は残らない
OSフラッシュだけを選択して実行
(これは後ほどSDカードに記憶領域を換装する)
言われるとおりに操作するとダウンロードとインストールが開始されるので待つ
一回止まったら「Manual SetUp - Jetson Nano」を選んでJetson nano用のユーザーネームとパスワードを入力

!注意!USBケーブルによってはエラーでフラッシュが出来ないのでいいやつを使うこと

電源を切りジャンプワイヤーを取り除く
モニター・キーボード・マウスをつなげて起動・WiFiにつなげる
ここからは以下のURLを参考にしてJetson nano側での作業になる

https://wiki.seeedstudio.com/Flash_System_on_SD_card

ターミナルまたはテキストエディタを起動して、上のURLのStep4までをコピペで行う

完了したら再起動する

OSをコピーするためのSDカードの準備

ターミナルを起動して以下のコマンドを入力(コピーツールのダウンロード)

git clone https://github.com/limengdu/bootFromUSB

SDカードをJ101のカードスロットに挿入し、なんか適当にやってdisk toolを用いてSDカードをext4フォーマットで初期化する
ターミナルで以下のコマンドを入力(OSをSDカードにコピーする)

cd bootFromUSB
./copyRootToUSB.sh -p /dev/mmcblk1p1

ターミナルで以下を入力(extlinux.confの権限を無双にする)

sudo chmod 777 /boot/extlinux/extlinux.conf

その後root直下のbootディレクトリ(/boot)にある「extlinux.conf」(上で書き込み可能にしたファイル)の「root=/dev/mmcblk0p1」(emmc:2カ所ある)をテキストエディタを使って「root=/dev/mmcblk1p1」(SDカード)に書き換える

再起動する
無事再起動できればSDカードから起動する 

この段階でSDカードからJetPackでJetson nanoを動かせている
一応ここまででJetson nanoは使用可能になっているが、OSがJetPackなのでJetCardに換装したい

JetCardのインストール

https://faboplatform.github.io/JetracerDocs/sd/05.jetcard/
上のURLを参考にして以下のコマンドをターミナルで実行し、JetCardのインストールを試みる

#残りのJetPack componentsをインストールする
#SDK managerでインストールしたのがコア部分の場合cuda等の必須コンポーネントが含まれていないのでSDカードに対象コンポーネントをインストールする
#参考:https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html

ターミナルで以下を入力実行

sudo apt update
sudo apt install nvidia-jetpack

#ここまではうまくいく

ここから先はうまくいかない

#JetCardのダウンロード
cd $HOME
git clone https://github.com/NVIDIA-AI-IOT/jetcard
cd jetcard
#インストールスクリプトの修正
cat install.sh | sed 's/sudo -H python3 setup.py install --plugins/sudo -H python3 setup.py install/g' > install_batch.sh
#権限の修正
chmod 755 install_batch.sh
#インストールスクリプトの実行
./install_batch.sh

うまくいかない 
JetCardのインストールはどうやっても途中で止まる
JetPackのまま環境構築すべきかも

JetPackで駆動している状態でリモートからの接続

リモートからのssh接続
jetson nanoのターミナルで以下を入力

hostname -I

これでIPがわかるのでリモート側で以下のコマンドを打つとログインできる

ssh user_name@XXX.XXX.XX.XX

なお
user_name=ユーザー名
XXX.XXX.XX.XX=IPアドレス
パスワードを聞かれるので入力すればログインできる

この状態で必要な環境を構築することにする

JetPackのコンポーネントをインストールした段階ですでに入っているもの
・OpenCV

JetCardにあるけれどJetPackにないものをインストール

・TensorFlow

#NVIDIAのドキュメントに沿ってやってみるのが良さそう(GPUに対応しているから)
https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html

ターミナルで以下を実行

sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
#pip3は入っていたのでアップグレードだけ実行
sudo pip3 install -U pip testresources setuptools==49.6.0
sudo pip3 install -U --no-deps numpy==1.19.4 future==0.18.2 mock==3.0.5 keras_preprocessing==1.1.2 keras_applications==1.0.8 gast==0.4.0 protobuf pybind11 cython pkgconfig packaging
sudo env H5PY_SETUP_REQUIRES=0 pip3 install -U h5py==3.1.0

#コマンド内の「v46」はJetPack 4.6用という意味 #バージョンは

sudo apt show nvidia-jetpack

で調べる

v1.x系をインストールするには<2を付ける(v2系でよいなら付けない)
https://konchangakita.hatenablog.com/entry/2020/12/04/220000
https://developer.download.nvidia.com/compute/redist/jp/v46 'tensorflow<2'

sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 'tensorflow<2'



・PyTorch

(不完全に入ってるっぽいので一応以下をやる)
#NVIDIAの方法でやってみるのがいいと思われる(GPUに対応しているから)
https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html

ターミナルから以下のコマンドを入力

sudo apt-get -y install autoconf bc build-essential g++-8 gcc-8 clang-8 lld-8 gettext-base gfortran-8 iputils-ping libbz2-dev libc++-dev libcgal-dev libffi-dev libfreetype6-dev libhdf5-dev libjpeg-dev liblzma-dev libncurses5-dev libncursesw5-dev libpng-dev libreadline-dev libssl-dev libsqlite3-dev libxml2-dev libxslt-dev locales moreutils openssl python-openssl rsync scons python3-pip libopenblas-dev;

#v461以下はJetPack4.1.x系向けのもの(とおもわれるもの)を指定している #(参照)https://developer.download.nvidia.cn/compute/redist/jp/
export

TORCH_INSTALL=https://developer.download.nvidia.cn/compute/redist/jp/v461/pytorch/torch-1.11.0a0+17540c5+nv22.01-cp36-cp36m-linux_aarch64.whl
python3 -m pip install --upgrade pip; python3 -m pip install aiohttp numpy=='1.19.4' scipy=='1.5.3' export "LD_LIBRARY_PATH=/usr/lib/llvm-8/lib:$LD_LIBRARY_PATH"; python3 -m pip install --upgrade protobuf; python3 -m pip install --no-cache $TORCH_INSTALL

#ただ、PyTorchネイティブの方が用途によっては良いかもしれない
#その場合は以下を参照(試していない)
https://pytorch.org/blog/running-pytorch-models-on-jetson-nano/

・入れない

・Jupyter Lab server
基本的にはcronを通じてスクリプトで動かしたいのでとりあえず不要

・USB deviceモード
sshでつながれば不要(ヘッドレスでインストールするのには必要だけど結局出来ていないので意味なし)

これで一応JetCard駆動と同じような感じになったはず(Jupyter Labは無いが元々使わないつもりだったのでOK)


いいなと思ったら応援しよう!