NVIDIA Jetson Nano 2GB 開発者キットのセットアップをしてみた。
Contents
Jetson Nano開発者キット
NVIDIAのJetson Nanoにメモリが2GByte(今までは4GByte)の廉価版のモデルが発売された。
今までのJetson Nano 開発者キット B01は大体12,000円~15,000で発売されていたが2GB版の価格は7,000円前後とかなり安くなっている。
またメモリが2GBしか無いのでDeep Learningの学習が「メモリ不足でDeep Learningの学習が実行できないのでは?」との不安もあったがswap領域を拡大することにより(後述)学習速度は多少低下するがResNet-18で問題なく学習が終了した。
Jetson Nano 2GB 開発者キットのセットアップまでを記事にして残しておく。
尚、セットアップが終了したら以下の記事を参考に機械学習を試してみて欲しい。
- NVIDIAの「Jetson Nanoによる入門コース」をやってみた。
- NVIDIAのJetson Nanoで「ディープ・ラーニングによる画像分類」をやってみた
- NVIDIAのJetson Nanoで物体の検知をやってみた
外観
Jetson Nano 2GBの外観は以下の通り。
前面は左から、
- MIPI CSI-2カメラコネクタ(ラズパイ用カメラが接続可能)
- USB Type-C電源供給用コネクタ(以前の4GB版はDCジャック)
- HDMI出力(モニター接続用)
- USB3.0×1
- USB2.0×2
- Gigabit Ethernet port(有線LAN)※無線LANは標準では装備されていない
- micro USB Type-B(パソコンと接続するとsshで操作が出来るのでモニター、キーボード等が不要になる)
- 40ピン拡張ヘッダー
裏面にはmicroSDカードスロットがあり、OSやJupyterLabのプロジェクトをインストールしたSDカードをここに差し込む。
用意したもの
Jetson Nano 2GB 開発者キット
NVIDIAのJetson Nano 2GB 開発者キット本体。
SDカード
起動用のSDカード。
Jetson Nonoのページでは32GB以上との指定だったが学習用の写真を保存するので容量に余裕が欲しかったので64GBを準備した。
無線LAN子機
Jetson Nano 2GBにはRaspberry Pi等とは異なり無線LANチップがデフォルトでは搭載されておらず有線でのLAN接続になる。
しかし有線LANでの接続は色々と不便なのでTP-LINK社のドングル型のWi-Fi子機を用意した。
物によってはJetson Nanoでの認識に手こずるWi-Fi子機もあるようだが、このドングルは指しただけで認識してくれた。
WEBカメラ
学習用の写真や映像を撮影するためにUSB接続のロジクールのWEBカメラを購入した。
Jetson NanoのUSBコネクタに差し込むだけで認識してくれて性能と価格のバランスが良い機種だと思う。
またラズパイのカメラモジュールもCSI-2コネクタに接続可能になっているのでいずれ試してみようようと思う。
マウス・キーボード
一番最初のセットアップの際にマウスとキーボードを使用した。
その後はパソコンからssh(やVNC)で接続をするのでキーボードやマウスは不要になるので暫定的に以前に購入していたEwinのミニキーボードを使用した。
同型のモノは既に販売終了となってしまっているが後継機が出ている。
モニター
一番最初のセットアップの際にモニターを使用した。
その後はsshで接続するのでモニター不要になるのでラズパイ用の7インチモニターを一時的に代用した。
自分が持っているモニターはもう販売していないので後継の機種のモニターへのリンクをはっておく。
USB Type-C
電源供給用のUSB Type-Cケーブルが必要となる。
ケーブルにオン/オフのスイッチがついていると便利なのでRaspberry Pi 4Bのセットに付いてきたケーブルを代用している。
micro USB Type-B
パソコンとmicro USB Type-B(パソコン側はType-A)ケーブルで接続をするとJetson Nano側に自動的に192.168.55.1のアドレスが割り当てられるのでパソコンからsshで接続することができる。
データ転送が出来るタイプのケーブルが必要になる。
環境
尚、当方のパソコン側の環境は以下の通りである。
OS | Windows10 Home バージョン1903 |
本体 | DELL G7 15 7588 |
CPU | CoreTM i7-8750H |
起動SDカードの作成
最初にmicroSDカードにOS及び各種開発キットをセットアップする。
ファイルのダウンロード
こちらのページにアクセスしてJetson Nanoのデベロパーズキットを取得するのだが、後ほどDockerコンテナの所で使用するのでインストールするJetPackのバージョンを控えておく。
2021年1月に4.5がリリース予定と書いてあるが現時点(2020年12月)では4.4.1となっていた。
下の方にスクロールしてFor Jetson Nano 2GB Developer Kitの「Download the SD Card Image」ボタンをクリックしてjetson-nano-2gb-jp441-sd-card-image.zipをダウンロードする。
なお、ファイルサイズは6GBあるのでそこそこ時間がかかる。
SDカードへの書き込み
こちらのページを参考にしてダウンロードしたファイルをmicroSDカードに書き込む。
自分の場合はWindows10なのでWindowsページを参考にしたのだがSD Card Formtterでフォーマットしてbalena Etcherで書き込む手順になっていた。
カードリーダーにSDカードをセットしてパソコンに接続する。
SD Card Formatterを起動するとIドライブとして認識されたのでクイックフォーマットでフォーマットを行う。
尚、SD Card Formatterの入手&インストール方法については以前のこちらの記事を参照して欲しい。
データ消去の確認メッセージが表示されるので「はい」をクリックする。
下記のメッセージが表示されてフォーマットが終了した。
続いてbalena Etcherを起動して「Select image」ボタンをクリックして先程ダウンロードしたファイル(jetson-nano-2gb-jp441-sd-card-image.zip)を選択する。
尚、balena Etcherのインストールについては以前の記事を参照して欲しい。
ドライブを確認して(自分の場合はIドライブ)「Flash!」ボタンでファイルをSDカードに書き込む。
数分後にFlash Complete!のメッセージが表示されれば書き込み終了となる。
初期設定
Etcherで書き込んだSDカードでJetson Nano 2GBを起動する。
- microSDカードを背面のスロットに挿入する
- HDMIコネクタでモニターに接続する
- キーボード・マウスを接続する
- Ethernetポートで有線LANに接続する(初回起動時はWi-Fiドングルは使用しなかったが最初からWi-Fiでも大丈夫だったのかも知れない)
- USB Type-Cコネクタを電源に接続してスイッチオンにする
ユーザライセンス
ユーザライセンスが表示されるので内容を確認して”I accept the terms of these licenses”にチェックをして「Continue」をクリックする。
言語とキーボードの設定
言語は日本語を選択して「続ける」をクリックした。
しかしこの後もJetson Nano上で日本語を使用することは殆どないのでEnglishでも問題はないと思う。
キーボードレイアウトは日本語、日本語(かな)を選択して「続ける」をクリックした。
ゾーンの選択
日本語を選択したのでデフォルトのゾーンでTokyoが選択されているので「続ける」をクリックする。
コンピューター情報の設定
- 名前
- コンピューター名
- ユーザ名
- パスワード
を入力して”自動的にログインをする”を選択して「続ける」をクリックする。
パーティションサイズの設定
アプリケーションのパーティションサイズを設定する。
設定可能な最大サイズの60335MBを設定して「続ける」をクリックする。
SWAPファイルの設定
“Create SWAP File(Recommended)”を選択して「続ける」をクリックする。
この設定によりメモリのSWAP領域が5GB確保される。
メモリが2GBの廉価版なのでSWAP領域を確保しないとPyTorchでGPUを使ってのDeep Learningの学習の際にメモリ不足で処理が終了しない。
以上で初期設定が終了してOSが起動する。
パッケージアップデート
以下のコマンドでパッケージのアップデートを行った。
sudo apt-get update
sudo apt-get upgrade
無線LANの設定
ここまでは有線LANで設定を行ったが無線LANも使用できるようにしておきたい。
購入したTP-LINKのWi-FiのドングルをUSBポートに差し込むと自動的に認識するのでデスクトップの右下のコンピュータのアイコンをクリックして現れる一覧から該当のSSIDを選択する。
パスワードを入力して「Connect」ボタンをクリックするとWi-Fi接続される。
以上でデスクトップでの操作は終了となる。
以降はモニター、キーボード、マウスは不要でパソコンからのsshやJupyterLabでの操作が中心になる。
sshでの接続
まずパソコンとJetson Nano 2GBをUSB Type-B(パソコン側はType-A)ケーブルで接続する。
するとJetson Nanoには自動的に192.168.55.1のIP Addressが割り当てられるのでWindows10でPowerShellを起動してssh接続する。
ssh ログイン名@192.168.55.1
ログイン名は上記で設定したユーザ名を指定してパスワードを入力すれば接続される。
ちなみにOSはUbuntu18.04.5 LTSであることが分かる。
SWAP領域の確認
SWAP領域の設定状況を以下のコマンドで確認する。
free -m
メモリが約2GB、Swapが5GB確保されていると表示された。
NVIDIAのサイトでは4GBの確保の方法が載っていたが5GBあるのでひとまずSwap領域は十分と判断する。
Dockerコンテナの実行
作業用ディレクトリの作成
ホームディレクトリに作業用ディレクトリを作成する。
mkdir -p ~/nvdli-data
shellファイルの作成
Dockerコンテナを実行するためのshellファイル(docker_dli_run.sh)を作成する。
echo "sudo docker run --runtime nvidia -it --rm --network host \
--volume ~/nvdli-data:/nvdli-nano/data \
--device /dev/video0 \
nvcr.io/nvidia/dli/dli-nano-ai:v2.0.1-r32.4.4" > docker_dli_run.sh
上記のコマンドの”dli-nano-ai:v2.0.1-r32.4.4″のバージョンの部分(4.4)は最初に選択したJetPackに応じたバージョンを記入する。
作成したシェルファイルに実行権限を付加する。
chmod +x docker_dli_run.sh
Dockerコンテナを実行する
./docker_dli_run.sh
初回は必要なファイルがダウンロードされるので時間がかかる。
コンテナが実行されると192.168.55.1:8888で”JupyterLab to start”のメッセージが表示される。
JupyterLab
ログイン
ブラウザから192.168.55.1:8888に接続すると下記のJupyterLabのログインページが表示されるのでパスワードは”dlinano”で接続する。
ログインすると以下のページが表示される。
幾つかディレクトリが表示されている。
Classification | 画像分類のプロジェクトが格納されている カメラに写った映像から親指を上げているか下げているかを分類するプロジェクトなど |
data | データの格納ディレクトリ コンテナ非起動時の~/nvdli-data/と同じディレクトリであり、ここに保存したデータはコンテナの外からもアクセス可能だが他のディレクトリに格納したファイルはコンテナ終了時に消えてしまう また–volumeオプションでコンテナを起動すれば他のディレクトリもマウントすることが出来る |
hello_camera | カメラの接続テスト用プロジェクト |
images | 画像ファイルが格納される |
regression | 回帰のプロジェクトが格納されている カメラに写っている顔のパーツ(右目、左目、鼻)の位置を推定して動きに合わせて追随するプロジェクトなど |
Classificationとregressionのプロジェクトの内容については別の記事で紹介したい。
カメラの動作確認
ロジクールのWEBカメラをJetson NanoのUSBポートに接続して暫く待つと自動的に認識するのでJupyterLabにてhell_cameraをクリックする。
usb_camera.jpynbを選択する。
新しいタブでノートブックが開くので少し下にスクロールして1行目のビデオデバイスを一覧表示するコマンド、
!ls -ltrh /dev/video*
にカーソルを合わせて実行ボタン(上部の三角のボタン)をクリックするか、Shift+Enterでも実行できる。
カメラが認識されれば先程のコマンドの下にlsの結果が表示される。
/dev/video0はUSBカメラなので正しく認識されている。
続いて上から順番に実行して、5番目のセンテンスを実行すると実際の撮影が行われる。
Tipsとして紹介されていたのが表示された画像を自分の好きな位置に追加表示するテクニック。
画像の上で右クリック、表示されたメニューから”Create New View for Output”を選択する。
新しくViewとして表示されるのでドラッグ・アンド・ドロップで好きな位置に移動させる。
この後で演習でウィジェットを常に横に並べて表示したい事があるのでこの技は覚えておいた方が良いと思う。
USBカメラの動作確認は以上で終了とする。
動画
セットアップの様子については以下の動画を参照して欲しい。
最後に
以上で今回の記事は終了とする。
次回以降でClassificationなどのプロジェクトについて書いてみたいと思う。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
いつも拝見させていただいております。jetson nanoのセットアップで参考にさせて頂いていますが、DOCKERコンテナを実行した後、下記のようなエラーになってしまい、jupyterlabまでたどり着けません。最新版でも4.4でも同じ症状です。アクセス権限が引っかかっているような気がしますが、もしお分かりでしたら教えてください。よろしくお願いいたします。
エラーメッセージ:
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: error adding seccomp filter rule for syscall clone3: permission denied: unknown.
fumiさん こんにちは。
下記のリンクは参考にならないでしょうか?
https://github.com/containerd/containerd/issues/6203
上記のリンク先の danpodeanu氏の 11月9日(9 Nov)のコメントによると、nvidia-container-toolkit 1.5.1-1の問題のようです。
対策は「nvidia-container-toolkit 1.6.0」をインストールするか「Unutuを20.04.2にダウングレードする」とあります。
また、ここでも議論されている様です。
https://issueexplorer.com/issue/NVIDIA/nvidia-container-runtime/157
こちらの環境では試していないので解決できるかどうかは分からないのですが、参考までに。