コンテンツへスキップ

NVIDIA Jetson Nano

VNCなどリモートからのグラフィカルログインに困っている方が、他にもいらっしゃるかなと思い、自分向けでもありますが、リモートデスクトップの利用方法、設定方法を残しておきます。

リモートデスクトップに必要なパッケージのインストール

xrdpとxfceをインストールします。

初期設定

xrdpとxfceの設定を行います。

/etc/xrdp/startwm.shファイルに以下の変更を行います。
ファイル下部の2行をコメントアウトし、「startxfce4」の1行を追加します。

リモートデスクトップ接続

Windowsパソコンより、リモートデスクトップクライアントより、NVIDIA Jetson Nanoにログインします。

created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

7000円以下NVIDIA Jetson Nano 2GB 開発者キット

関連記事:NVIDIA Jetson Nano B01 導入

NVIDIAの「Jetson Nano」に安価な2GBモデルが出ていました。
AIや機械学習のEdgeデバイスとしてシングルボードコンピューターを利用したい人は、この製品一択になるのではないでしょうか。
すごいとしか言いようがありません。

外出自粛の年末年始にAIを始めるのも良いと思います。

created by Rinker
NVIDIA
¥7,877 (2021/07/23 20:23:16時点 Amazon調べ-詳細)
created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

Jetson Nano B01との比較

十分の使用で半額。魅力的な製品です。

開発者キット
技術仕様
Jetson Nano B01
2G廉価版
価格(2020.12時点)1,5500円7,000円
GPU128 コア NVIDIA Maxwell™左同
CPUクアッドコア ARM A57 @ 1.43 GHz左同
メモリ4GB 64 ビット LPDDR4 25.6GB/秒2 GB 64 ビット LPDDR4 25.6 GB/秒
ストレージmicroSD (カードは含まれていません)左同
ビデオ エンコーダー4Kp30 | 4x 1080p30 | 9x 720p30 (H.264/H.265)左同
ビデオ デコーダー4Kp60 | 2x 4Kp30 | 8x 1080p30 | 18x 720p30 (H.264/H.265)左同
コネクティビティギガビット イーサネット、M.2 Key Eギガビット イーサネット、802.11ac ワイヤレス*
カメラ2x MIPI CSI-2 コネクタ1x MIPI CSI-2 コネクタ
ディスプレイHDMI と DPHDMI
USB4x USB 3.0, 1x USB 2.0 Micro-B1x USB 3.0 タイプ A、2x USB 2.0 タイプ A、1x USB 2.0 Micro-B
その他40 ピン ヘッダー (GPIO、I2C、I2S、SPI、UART)左同
12 ピン ヘッダー (電力および関連信号、UART)左同
4 ピン ファン ヘッダー左同
機械的構造100 mm x 80 mm x 29 mm左同
備考日本モデルWIFIなし
電源端子変更

次のJetson Nano C01 などでは、USB-Cも標準となり、Edgeデバイスとして先進的なアーキテクチャになって出てきそうですね。それにしても、大きさに機能、性能と美しすぎます。

このでJetson Nanoを、マイク音源に挟んで、ノイズキャンセルを実施してほしい。
そのためには、オーディオ端子やPCと外部接続して認識出来るようなインターフェースがほしいです。

Ubuntu 18.04.5 LTS に ffmpeg を導入

Jetson Nano の Ubuntu にffmpegをインストールします。
FFmpeg(エフエフエムペグ)は、動画と音声を記録・変換・再生するための非常に優秀なフリーソフトウェアです。マルチプラットフォームで利用できます。
コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能であり、バッチ処理にも向いています。

ffmpeg利用

ffmpegは、非常に多くの機能とオプションが準備されております。
以下のコマンドで、ヘルプの全体を見ることが出来ます。

今回は、めざましじゃんけんシステムの、めざましじゃんけん時の画像を用いて、AIによる画像認識結果を動画化しました。
その際に利用したコマンドは、以下となってます。

サンプル動画

ちょうど、めざましテレビでHELLOチャレンジが実施されていたので、
AIでめざましじゃんけんにチャレンジっていう感じで、Official髭男dismの「HELLO」を動画に組み合わせました。

#ハローチャレンジ

撮影テーマは「〇〇にチャレンジしよう!」

NVIDIA Jetson Nanoからのメール送信

NVIDIA Jetson Nanoの利用を開始すると、Jetson Nanoの各種プログラムからメール通知を利用したくなるケースがあります。
既に、同一環境内にSMTPサーバが導入済みである場合を全体として、Jetson NanoにSSMTPを導入し、Jetson Nanoからメール送信が出来るように設定します。
パッケージのアップデートやログのローテーション処理時のエラーなどもメール通知することが可能です。

以前の関連記事: Jetson Nano で SSMTP を利用してPHPからメール送信

ssmtpインストールおよび設定

ssmtpをインストールします。

ssmtp.confを編集。

  • mailhub=@@mail_server@@
    環境内のメールサーバを指定
  • rewriteDomain=miki-ie.com
    ドメイン名を指定
  • hostname=jetson01.miki-ie.com
    ホスト名を指定
  • FromLineOverride=YES
    メール送信元より、メールのFromを指定出来るように設定

created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

NVIDIA Jetson Nanoのセキュリティ対策

Ubuntuの自動アップデートを設定します。
再起動が必要な際は、指定した時間で再起動するように設定します。
自動アップデートの結果をメール送信するように設定します。

「unattended-upgrades」をインストールと有効化

「unattended-upgrades」をインストールします。

インストールした「unattended-upgrades」を有効化します。
以下のコマンドを実行し、表示される画面で<Yes>を選択します。

<Yes>を選択します。

 

「unattended-upgrades」設定

利用する設定ファイルは、以下の2つのファイルとなります。

  • /etc/apt/apt.conf.d/20auto-upgrades  : 自動アップデートとアップグレードを設定。
  • /etc/apt/apt.conf.d/50unattended-upgrades :詳細設定

「20auto-upgrades」設定

  • APT::Periodic::Update-Package-Lists "1";
    アップグレードの確認間隔
    Daily=1 / Every two days = 2 / Weekly = 7 / Every two weeks = 14 / Never = 0
  • APT::Periodic::Download-Upgradeable-Packages "1"
    セキュリティーアップデートがある場合の動作
    Download and install automatically = 1 / Download automatically = 1 / Display immediately = 0

「50unattended-upgrades」設定

以下の設定変更を加えました。

  • Unattended-Upgrade::Mail "aaa@bbbl.com";
    メール通知先の設定
  • Unattended-Upgrade::MailOnlyOnError "true";
    メール通知のタイミングをエラー発生時のみに変更
  • Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
    未使用となったカーネル関連パッケージの自動削除
  • Unattended-Upgrade::Remove-Unused-Dependencies "true";
    未使用となったパッケージの自動削除(apt-get autoremove)
  • Unattended-Upgrade::Automatic-Reboot "true";
    自動再起動が実施されるように設定(自動再起動ON)
  • Unattended-Upgrade::Automatic-Reboot-Time "02:00";
    再起動時の時間を指定

動作確認

以下のコマンドで、動作確認を実施しておきます。

created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

OPENCV 4.2の DNN が NVIDIA Cuda に対応

OpenCV の4.2より、OpenCVのdnnが、NVIDIA のGPUに対応していたようです。
しかも、NVIDIAのJetson Nanoでも利用可能でした。

とても驚きのトピックでした。
早速、NVIDA Jetson Nanoに導入し、YOLO / Darknet の推論を動作させてみました。
少し、導入に癖があったので、導入時のメモを公開しておきます。

Led by dlib’s Davis King, and implemented by Yashas Samaga, OpenCV 4.2 now supports NVIDIA GPUs for inference using OpenCV’s dnn module, improving inference speed by up to 1549%!

Pythonから、NVIDIA GPUのCUDAを用いた、OpenCVのDNNを利用する際のコードはBackendとTargetを以下のようにCUDAに設定します。

導入した環境

2020/08/20追記:
JetPack4.4とOPENCV4.4.0でインストールできました。

  • JetPack 4.3 (4.4では、OPENCVコンパイル時に、CuDNNがうまくコンパイルできず)
    Jetpack 4.3 Archive
  • OPENCV 4.3.0 (4.2.0でもインストール出来ました)
created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

導入方法

NVIDIA Jetson NanoのOpencvコンパイル用のスクリプトは、公式が公開したこともあり、各種エンハンスされ公開されています。
今回は、結構最近に公開されたとみられる、4.3.0向けのスクリプトを利用します。

Build OpenCV on Nvidia Jetson Nano

ポイントは、コンパイルオプションに以下を追加します。

  • WITH_CUDA
  • WITH_CUDNN

インストールスクリプト

コンパイルオプションを追加した、スクリプトを公開しておきます。

./Build_OpenCV.sh でインストールは完了します。
./Build_OpenCV.sh <version> で、指定したバージョンのOPENCVがインストール出来るようです。

実際にコンパイルした際の構成も公開しておきます。

NVIDIA CUDA: YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
NVIDIA GPU arch: 53 62 72 -- NVIDIA PTX archs:
cuDNN: YES (ver 7.6.3)

created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

参考サイト

前提条件

JetsonにJenkins向けユーザー作成

別にセットアップされた、Jenkinsシステムより、NVIDIA Jetson Nanoを管理対象と資するために、Jetson NanoにJenkinsから操作する用のユーザーを作成します。

  1. Jetson Nanoに新規ユーザー作成
  2. Jenkins向けユーザーのsudoコマンド設定 パスワード
  3. Jenkins向けユーザーでのGitHubからのPull設定

1. Jenkins向けユーザーを作成

NVIDIA Jetson NanoにJenkinsユーザーを作成します。

2. Jenkins向けユーザーのSudoコマンド設定

Jenkinsユーザーで、各種スクリプトを実行するので、sudoが簡単に実行出来るように設定します。
※ 全体的にパスワードなしでのsudoを許可しているので、利用するコマンドごとの設定や、各種設定ファイルのアクセス権などを環境に合わせて設定し、セキュリティ対策を行って下さい。

作成するjenkinsファイルへの記載内容

3. Jenkins向けユーザーでのGitHubからのPull設定

Jenkinsを利用して、Githubに新しいソースコードがコミットされた際に、Githubより新規ソースコードの通知をトリガーとして、Jenkinsのタスクを実行させます。

Githubへの新規コミットをトリガーに、ジャンケンシステムを構成するメインのIntel NUC Ubuntuサーバー、Raspberry Pi、NVIDIA Jetson Nanoに最新のソースコードが自動的にデプロイ(Pull)される環境を構築しました。
デプロイ前に、簡単なテストなども自動化することが出来ます。

設定には、Jenkinsユーザー向けのSSHキーをNVIDIA Jetson Nanoで作成し、作成したSSHキーをGithubに登録します。GithubにSSHキーが登録出来たら、NVIDIA Jetson NanoからGithubへのアクセスを確認します。

Jetson NanoでSSHキー作成

Jenkinsユーザー向けのSSHキーを作成します。
このSSHキーをGithubに登録します。
Githubに登録することにより、Jenkinsユーザーを用いて、Githubの操作が可能になります。

GithubへSSHキーの登録と接続確認

https://github.com/settings/keys で id_rsa.pub の内容を登録します。

NVIDIA Jetson NanoからGithubへ接続確認

最後に、対象のサーバーより接続確認を行います。

created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

SU コマンドの有効化

セキュリティ対策ですが、利用したくなる「su -」コマンド、最近のUbuntsなどのLinux OSでは、初期設定時にrootのパスワードを設定しないので、suコマンドは利用できない状態となります。

以下が、suコマンドを実施して、失敗した際の例です。

SU コマンド有効化(rootユーザーのパスワード設定)

SUコマンドが利用できるように、rootユーザーのパスワードを設定します。
sudo su コマンドは利用できるので、自分のアカウントパスワードを用いて、rootユーザに切り替えを行います。

rootユーザーになり、パスワードコマンドでパスワードを設定します。
この状態で、suコマンドでのrootユーザーへの変更は可能となります。

動作確認のため、rootユーザーから抜けて、su -コマンドを実行し、パスワード入力後にrootユーザーに変更されることを確認します。

 

Jetson Nanoに Tensorflow-gpu、Keras などを導入

NVIDIA Jetsonへの各種ツールインストールは、NVIDAより公開されているOSイメージを利用することで、一通りのツールは導入済みとなります。
JETSON NANO DEVELOPER KIT(JetPack)と呼ばれています。

  • NVIDIA提供のtensorflow-gpu
  • Keras
  • その他ツール
created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

導入パッケージのアップデート

インストールパッケージを最新にアップデートします。

各種パッケージ導入

NVIDIAが提供する、JetPackを導入してください。
(NVIDIAが提供するイメージを用いたOSを導入して下さい)
以前は、OpenCVなどをコンパイルして導入しておりましたが、JetPack 4.3では、必要そうなツールは、事前に導入済みでした。

JetPack 4.3 components:

  • L4T R32.3.1 (K4.9)
  • Ubuntu 18.04 LTS aarch64
  • CUDA 10.0
  • cuDNN 7.6.3
  • TensorRT 6.0.1
  • VisionWorks 1.6
  • OpenCV 4.1 (4.1.1)
  • Nsight Systems 2019.6
  • Nsight Graphics 2019.5
  • Nsight Compute 2019.3
  • SDK Manager 1.0.0

TensorFlow-GPU導入

NVIDIAの開発者コミュニティに記載されている内容で、インストールを行います。

https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html#install

  1. TensorFlow導入の前提ソフトウェアをインストールします。
  2. 導入済みのPip3コマンドを最新版に更新します。
  3. 前提となるPythonパッケージをPip3コマンドで導入します。
最後に、NVIDIAより公開されている媒体を用いて、tensorflow-gpuのインストールを実施します。

以下のパッケージ群が導入されます。

Successfully installed absl-py-0.9.0 astor-0.8.1 cachetools-4.1.0 google-auth-1.14.1 google-auth-oauthlib-0.4.1 google-pasta-0.2.0 grpcio-1.28.1 keras-preprocessing-1.1.0 markdown-3.2.1 oauthlib-3.1.0 opt-einsum-3.2.1 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-2.23.0 requests-oauthlib-1.3.0 rsa-4.0 scipy-1.4.1 six-1.14.0 tensorboard-2.1.1 tensorflow-2.1.0+nv20.4 tensorflow-estimator-2.1.0 termcolor-1.1.0 werkzeug-1.0.1 wrapt-1.12.1

keras導入

以下が、導入したTensorflowや、導入されているOpenCVのバージョン確認結果となります。
created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

Apache 2、PHP、DB関係モジュールを導入

apt installで必要なパッケージを導入します。

NVIDIA Jetson NanoのUSB接続のHDD/SSDルート構成

NVIDIA Jetson NanoのルートディスクをUSB接続したHDDやSSD構成にする方法の最新版です。/dev/sda1を/(ルート)ディレクトリ構成にします。

以前に、同様の記事を投稿しましたが、よりスマートな導入方法が公開されていましたので、今回は、そちらの方法で、USBブート構成を作成しました。
根本原因となっていたブートシーケンスの変更により、USBブートが可能になっております。

※ ブート時にSDカードへアクセスします。
よって、SDカードの利用も必要となります。

以前の記事: Jetson Nano DeveloperをUSB 接続HDD/SSDルート構成

  1. 通常のブート用SDカード作成
  2. USBルートディスク構成作成ツールをダウンロード
  3. USB接続HDD/SSDにデータコピー
  4. ブートシーケンス変更

通常のブート用SDカード作成

SDカードイメージダウンロード

以下のURLに従い、利用するOSの手順でSDカードを準備しJetson Nano Developer Kit SD Card Imageを作成すれば、SDカードを用いてJetson Nanoの起動は可能となります。Write Image to the microSD Card

(Windows)SDカードフォーマット

SDカードをフォーマットします。SD Memory Card Formatter for Windows Download

SDカードへOSイメージを焼き付け

EtcherでダウンロードしたSDカードイメージをSDカードにコピーします。

最新のSDカードイメージと同様のバージョンで、SDカード用とUSB接続のHDD/SSD用のイメージが公開されています。

USBルートディスク構成作成ツールをダウンロード

利用する外部接続のHDDやSSDを準備

  1. fdisk -l で状況を確かめます。
    % sudo fdisk -l
  2. パーティションを削除します(ここでは、/dev/sda1とします)。
    % sudo fdisk /dev/sda
    .....
    コマンド (mでヘルプ): d (削除コマンド)
    選択した領域 1 (/dev/sda1を削除指定)コマンド (m でヘルプ): w (書き込み)
  3. 新たにパーティションを作成します。
    % sudo fdisk /dev/sda
    ...
    コマンド (mでヘルプ): n (作成コマンド)
    コマンドアクション
    e 拡張
    p 基本パーティション (1-4)
    p
    パーティション番号 (1-4): 1
    ....... コマンド (m でヘルプ): w (書き込み)

    ここでは、基本パーティションを選んで、 パーティション番号1(つまり/dev/sda1)を作りました。

  4. フォーマットする。
    sudo mkfs.ext4 /dev/sda1

最後に、適当なマウントポイントにマウントしておきます。

Githubより必要ツールを導入

Githubに、rootOnUSBプロジェクトとして公開されております。

作成したSDカードで、Jetson Nanoを起動させ、Githubレポジトリをダウンロード(クローン)します。

USB接続HDD/SSDにデータコピー

ブートシーケンスにUSB接続を追加するツールを実行します。

次に、SDカードのルートディレクトリの内容を、利用するUSB接続のHDDやSSDにコピーを実施します。copyRootToUSB.sh というコマンドが準備されております。

copyRootToUSBコマンドリファレンス:

外部接続した、HDD/SSDのパーティションをオプションしてして、コマンド実行を実施しました。

このコマンドを実行する前に、/dev/sda1を適当な場所にマウントしておく必要があります。マウントしていないと、コマンドは失敗します。

ブートシーケンス変更

/boot/extlinux/extlinux.confファイルを変更し、ルート領域を外部USB接続のHDD/SSDに変更します。

  1. ブート時にUSBをロードするイメージファイルを登録します
  2. ブートするDiskパスをUUIDを用いて指定します

DiskのUUIDを調べるツールも、rootOnUSBより提供されています。

また、extlinux.confファイルのサンプルも、sample-extlinux.confとして、提供されています。

もとのextlinux.confファイルのバックアップを準備し、以下の変更を加えます。

USBファームウェアを読み込んだイメージがロードされます。

UUIDでルートディスクを指定します。

最後に再起動して、ルートフォルダーが、指定した外部接続のHDDやSSDになっていることを確認します。

created by Rinker
NVIDIA
¥19,350 (2021/07/23 10:58:01時点 Amazon調べ-詳細)

以下のサイトが情報源となります。詳細に書かれています。

Jetson Nano – Run From USB Drive