Ubuntu Weekly Recipe

第563回 NVIDIA Jetson Nano Developer KitにUbuntuをインストールしよう!

この記事を読むのに必要な時間:およそ 7 分

Jetson Nanoのテスト

NVIDIAのイメージの便利な点は,JetPackが最初からインストールされていることです※6⁠。JetPackはJetson向けのカーネルモジュール・CUDA・Jetson向けの各種ライブラリ・各種開発ツール・サンプルコードがまとまっています。つまりJetPackが入っていれば,何か追加でインストールすることなくAI系のいろいろを試せる状態になっているということです。

※6
おそらく「Jetson向けのパッケージ」の意味だと思います。WordPressのプラグインとは関係ありません。

ということで,動作確認がてらサンプルコードをいくつかビルド・実行してみましょう。

CUDAのサンプルコード

CUDAのサンプルコードは「/usr/local/cuda-10.0/samples/」にインストールされています。そこでサンプルコードをあらかじめユーザーが読み書き可能な領域にコピーしておきます。

$ cp -a /usr/local/cuda-10.0/samples/ ~/

サンプルコードのトップディレクトリでmakeを実行すればひととおりビルドしてくれます。時間がかかるのが嫌なら,次の例のように個別にビルドしましょう。

まずは第456回でも試したように,CUDAの動作確認ツールでもある「deviceQuery」を動かしてみます。

$ cd ~/samples/1_Utilities/deviceQuery
$ make
$ ./deviceQuery
./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "NVIDIA Tegra X1"
  CUDA Driver Version / Runtime Version          10.0 / 10.0
  CUDA Capability Major/Minor version number:    5.3
  Total amount of global memory:                 3957 MBytes (4148756480 bytes)
  ( 1) Multiprocessors, (128) CUDA Cores/MP:     128 CUDA Cores
  GPU Max Clock rate:                            922 MHz (0.92 GHz)
  Memory Clock rate:                             13 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 262144 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 32768
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            Yes
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Compute Preemption:            No
  Supports Cooperative Kernel Launch:            No
  Supports MultiDevice Co-op Kernel Launch:      No
  Device PCI Domain ID / Bus ID / location ID:   0 / 0 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.0, CUDA Runtime Version = 10.0, NumDevs = 1
Result = PASS

期待通りに動いているようですね。ビルドしたバイナリはmake時に「~/sample/bin/aarch64/linux/release/」にもインストールされます。そちらに環境変数PATHを設定しておいてから,実行しても良いでしょう。

CUDAのサンプル:oceanFFT

oceanFFTはCUDAの高速フーリエ変換ライブラリcuFFTを利用して,海面をシミュレーションします。

$ cd ~/samples/5_Simulations/oceanFFT/
$ make
$ ./oceanFFT

図9 今がどんなに沈んでいても,きっと波のようにいつか浮くときがくるはず

画像

ひたすら海が波打つ様子を眺めて世の中の面倒なことを忘れたいものの,海に出かける気力はない時におすすめのサンプルです。

CUDAのサンプル:smorkeParticles

smorkeParticlesは体積をもった粒子をシミュレートすることにより,よりリアルな煙を表現します。

$ cd ~/samples/5_Simulations/smokeParticles/
$ make
$ ./smokeParticles

図10 うにょうにょ動いているのを見るだけで時間を忘れる

画像

「個性」の名の元に「他の奴らとは同じ生き方は嫌だ」って粋がっている粒子も,大局的に見ると結局みんなと同じ方向に向かっているんだねって感じたい時におすすめのサンプルです。

CUDAのサンプル:nbody

nbodyはランダムな初期値を元にN体計算を行います。

$ cd ~/samples/5_Simulations/nbody/
$ make
$ ./nbody

図11 初期設定に合わせてさまざまな動きをするN個の粒子たち

画像

あんなに一緒だった粒子たちが,ちょっとしたボタンのかけ違いで,あっという間に離れ離れになっていくさまを見て人付き合いの侘しさを感じたい時におすすめのサンプルです。

VisionWorksのサンプルコード

GPUを利用したより実践的なデモとして,自動運転や動画解析に使えるVisionWorksライブラリのサンプルコードもインストールされています。

まずはサンプルコードを適当なディレクトリにコピーしておきましょう。

$ /usr/share/visionworks/sources/install-samples.sh ~/visionworks/

VisionWorksのサンプル:ハフ変換

ハフ変換のサンプルは,与えられた動画に対してリアルタイムで輪郭抽出を行います。

$ cd ~/visionworks/VisionWorks-1.6-Samples/demos/hough_transform/
$ make
$ ~/visionworks/VisionWorks-1.6-Samples/bin/aarch64/linux/release/nvx_demo_hough_transform

図12 車のカメラから見える風景の輪郭をリアルタイムで抽出する様子

画像

人間は結局物事の外側だけを見て判断しているんだなってことがわかるデモです。

VisionWorksのサンプル:移動予測

移動予測のサンプルは,動画上で動く物体の「移動する方向を」画面上に表示します。

$ cd ~/visionworks/VisionWorks-1.6-Samples/demos/motion_estimation/
$ make
$ ~/visionworks/VisionWorks-1.6-Samples/bin/aarch64/linux/release/nvx_demo_motion_estimation

図13 犬の予期せぬ動きもばっちり追跡

画像

どんなに探してもウォーリーは見つからないデモです。

UARTへ接続する方法

公式イメージを使用する限りあまりお世話になることはないはずですが,せっかくなのでUARTからシリアルコンソールを取得する方法も紹介しておきましょう。

UARTのピンはJ44としてキャリアボードのほうに搭載されています。具体的にはUSBのポートが手前になるように配置したときの,左奥にある縦5本のピンです。奥から2本目がTX,3本目がRX,一番手前がGNDになっています。

たとえば3.3VのUSBシリアルコンバーターなどを利用できます。TX/RXが互い違いになるよう接続し,GNDも繋いだら,あとは起動するだけです。

あらかじめホストマシンでシリアルコンソールアプリケーションを起動しておきましょう。シリアルコンソールアプリケーションはscreen,minicom,kermit,cuなど好きなのを選んでください。次はscreenを使用した例です。

$ screen /dev/ttyUSB0 115200

dialoutグループに入っていたら,一般ユーザーの権限で/dev/ttyUSB0にアクセスできます。そうでないならsudoを使ってください。電源を入れるといろいろメッセージが流れるので,逐一内容を確認してみるのも良いでしょう。

コラム:4月14日は技術書典6!

再来週末の4月14日(日)に池袋のサンシャインシティで技術書の即売会である技術書典6が開催されます。

本連載の執筆陣も参加している「team zpn」も出展予定ですので、近隣の皆様はお誘い合わせの上、ぜひご来場ください。

技術書典6では、次のような本の頒布を予定しています。

  • うぶんちゅ! まがじん ざっぱ~ん♪ vol.9
  • うぶんちゅ! まがじん ざっぱ~ん♪ vol.8
    • Ubuntuを活用したあれやこれやを解説した合同誌
  • ざっクリわかるUbuntu 18.04 LTS Server
    • Ubuntu Serverの基本的な使い方がわかる本

頒布形態は物理冊子版とDRMのないPDF/EPUBセット版(電子書籍版)の2種類です。目次や金額等の詳細はサークルページをご確認ください。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。