AI

【AI入門】NVIDIAのJetsonNanoを動かしてみた

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア
NVIDIAのJetsonNanoを動かす方法を知りたい。


2019年4月にJetsonNanoを予約、
到着し開封、
OSをインストールしてUbuntu18起動、
C++のAIデモ動画を表示するところまでをご紹介します。

当時の予約販売状況

physical Computing Labで3/20から予約販売してたので開始早々注文。
4/3に「本体入荷したがACアダプタがまだ入荷してない
ACアダプタなし(後で配送)なら本体はすぐ送付可能、
ACアダプタ待つなら4/下旬配送予定になるがどうするか?

と連絡あり。
迷わず「本体のみで良いので、すぐ送ってください」と回答。
4/5発送。
4/6到着。
5V/4AのACアダプタは普通にAmazonに売ってましたが、買ったら負けなので我慢。

開封

ACアダプタが無く、動かせないから箱をあけて中を確かめるのみ。
立派な箱ですね。

厳重にくるまれてました。
剥がすの大変。

簡単なケーブル接続の説明書。

本体です。上から見るとこんな感じ。
ヒートシンクがゴツい。

横からみるとこんな感じ。
SDは逆側に挿さります。

裏側はこんな感じ。

オプション品も箱入りです。

Ethernetケーブル。
industrialグレードなSDカード。

ACアダプタ

ACアダプタが到着。
さらにACアダプタで動かす場合ジャンパーピンが必要になるとメールで連絡があり
追加で郵送されてきました。

Physical Computing Labのロゴが印刷されてます。
5V/4Aですね。

ACアダプタを使うために必要なジャンパーピンの設定箇所が説明された資料。

指示書通りに挿しました。

そういえば箱についてたボードの説明書。
なんとなく写真に撮りました
(この説明書はACアダプタではなくUSB給電の前提で書いてますね)。

SDKの作り方

まずNVIDIAのブログ
Jetsonであらゆる人がAIコンピューティングの利用が可能に
というページを起点にデータ収集します。

①Jetson Nano Developer Kit

Jetson Nano Developer Kitに飛びます。
するとこんなの出てくるので「Get Started>」をクリック。

Get Started>」はざっくり6つのパートに分かれています。

Introduction
基板の外観とキットに同梱された部品の説明。

Prepare for Setup
microSDは16GBのUHS-1が最小構成。
microUSB給電は5V-2A供給。
5V-2.5Aがより優れている(あれ、5V/4Aじゃなくて良いの?)。

Write Image to the microSD Card
Jetson Nano Developer Kit SD Card ImageからSDカードイメージをダウンロード(5.3GBありました)。
WindowsはSD Memory Formatter for Windows(SD association純正)を使うこと。
Windows/Linuxから書くときにEtcherというツールを使うこと
(MACは読んでません)。

Setup and First Boot
ペーパースタンドに基板を乗せろとある。
たしかにこんなのついてた。

で、イメージを書き込んだmicroSDを挿して、
ディスプレイ、キーボード、マウスと繋ぎ、microUSB給電すると電源ON。
最初のブート時にEULAの許諾、
ランゲージ、キーボードレイアウト、タイムゾーン、
ユーザ名、パスワード、PC名、を入れてログイン。
するとこんなカッチョいい画面が出るみたい。

Next Steps
Jetson Nano Developer Kit User Guide(2020年7月7日リンク切れ)、
NVIDIA Jetson Developer Zone
、 
NVIDIA Jetson Forums
から情報収集せよ。
Hello AI World
Jet Botなどのデモをやってみよ

Troubleshooting
電源とディスプレイに関する注意書き

②JetPack 4.2

JetPack 4.2
Jetson Nano Developer Kit(SDイメージ)
Jetson AGX Xavier, TX2, and Nano Developer Kits(SDK)がダウンロードできますが、SDイメージはGet Startedで入手済みなので
SDKだけダウンロードすればよいです。

SDカードを作る

あらかじめ前の項で
SDカードイメージ(Jetson Nano Developer Kit SD Card Image)、
SDカードフォーマッター(SD Memory Formatter for Windows)、
書き込みツール(Etcher)がダウンロードされている前提で話を進めます。

キットに付いてきた工業用グレードのSDカード。
まず色がカッコいい。

SDカードフォーマッター
(SD Card Formatter 5.0.1 Setup.exe)のインストーラを実行すると
以下の画面が表示されるので「Next」をクリック。

「I accept…」を選択して
「Next」をクリック。

「Next」をクリック。

「Install」をクリック。

インストールが終わると以下の画面が表示されるので
「Finish」をクリック。

SDフォーマッターが立ち上がる。
SDカード(32GB)がEドライブとして認識されているので
「クイックフォーマット」が選択された状態で「フォーマット」をクリック。

警告画面が表示されるので「はい」をクリック。

一瞬でフォーマットが終わります。

フォーマット結果が表示されるので「はい」をクリック。

Dイメージ書き込みツール(balenaEtcher-Portable-1.5.29-x64.exe)
を実行すると以下の画面が出てくるので
「Select Image」をクリック。

あらかじめ展開しておいた
SDイメージ(jetson-nano-sd-r32.1-2019-03-18.img)を選択します。

「Select drive」をクリック。

Eドライブを選択して「Continue」をクリック。
※ドライブ名は環境によって変わります。

「Flash」をクリック。

書き込み中の画面。

ベリファイ画面。
※この画面に到達しない場合、
SDリーダライタが古いかもしれません。

書き込み完了画面。

SDリーダライタが古い場合

書き込み時に
「//./physicaldrive2 EIO: i/o error, write」とか「\\.\PhysicalDrive2: ETIMEOUT: connection timed out, write」というエラーが出る場合、
SDリーダライタが古いかもしれません。

この2つのSDリーダライタで書くとエラーが出ました。

書き込みエラーの例。

Transcend USB 3.0 Super Speed カードリーダー (SD/SDHC UHS-I/SDXC UHS-I/microSDXC UHS-I 対応) ブラック 2年保証 TS-RDF5Kを試したら一発OK。
書き込みエラーが出る場合お試しください。

起動

電源投入直後。

ブートメッセージ。

ライセンス許諾。

日本語を選択。

東京を選択。

ユーザ名とか入力。

設定反映中。

リブートしてログイン画面。

デスクトップ。

Ubuntu18.04 LTSですね。
ARMv8アーキテクチャ。64bit。
グラフィックはNVIDIA Tegra X1。

デモの実行

①ログイン
イメージを作って起動すれば、
ユーザ名、パスワード(インストール時に決めたもの)でログインできます。

②サンプル実行

$ cd /usr/local/cuda-10.0/samples/5_Simulations/oceanFFT
$ sudo make(ビルドにそこそこ時間かかる)
$ ./oceanFFT

ウネウネ動きます。
リアルタイムにFFT(高速フーリエ変換)を計算させてるってこと?

$ cd /usr/local/cuda-10.0/samples/5_Simulations/particles
$ sudo make(ビルドにそこそこ時間かかる)
$ ./particles

$ cd /usr/local/cuda-10.0/samples/5_Simulations/smokeParticles
$ sudo make(ビルドにそこそこ時間かかる)
$ ./smokeParticles

煙がモワーッと動きます。
これを計算でやってるのか…。
すごいですね。

$ cd /usr/local/cuda-10.0/samples/5_Simulations/fluidsGL
$ sudo make(ビルドにそこそこ時間かかる)
$ ./fluidsGL

流体です。
クリックしたところに渦ができます。
コード読みたい。

$ cd /usr/local/cuda-10.0/samples/5_Simulations/fluidsGLES
$ sudo make(ビルドにそこそこ時間かかる)
$ ./fluidsGLES

同じく流体。
何が違うのかイマイチわかりません。
コード(cpp)があるので今度比較してみます。

$ cd /usr/local/cuda-10.0/samples/5_Simulations/nbody
$ sudo make(ビルドにそこそこ時間かかる)
$ ./nbody

N-body(多体)シミュレーション
恒星と惑星の間の万有引力の相互作用など、系が複数あるときの物理学。
正直わけわからん
N-body simulation多体問題、あたりを読みながら理解します。

$ cd /usr/local/cuda-10.0/samples/5_Simulations/nbody_opengls
$ sudo make(ビルドにそこそこ時間かかる)
$ ./nbody_opengls

N-body(多体)シミュレーションのOpen GL版?
これもコードみないと前のデモとの違いがイマイチわかりません。

まとめ

ブートさせてから約1か月放置してましたが、
デモを動かしたらまたモチベーションが復活しました。
いきなり数学的な話は難しいからサンプル動かしつつ、中身見つつ、
Jetson Nanoを弄ろうと思います。

私はプログラムにログを仕込み、
動作を理解しないと納得しない性分なので、
自作ロガーを仕込み解析してみます。

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。
error: Content is protected !!