コンテンツへスキップ

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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

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

Jetson Nano – Run From USB Drive

NVIDIA Jetson Nano B01 の電源セレクター

NVIDIA Jetson Nanoを導入する人は、機械学習などの推論デバイスとして、Jetson Nanoの主な利用目的だと思います。

Jetson Nanoには、2系統の電源入力が選べ、マイクロUSB経由での給電か、ACアダプターからの給電が選択可能です。

  • マイクロUSBコネクターからの給電。最大2A
  • ACアダプターからの給電。最大4A

推論デバイス用途で利用する際は、CUDAコアをフルに稼働させたいと思いますので、その際は、マイクロUSBからの給電では、電力不足に陥るので、ACアダプターからの給電となります。ACアダプターは、以下の仕様となります。

  • 5V/4A DC
  • 電源ジャックは外径5.5mmφ、内径2.1mmφでセンター+

電源セレクターのジャンパーピン

以前のモデルのNVIDIA Jetson Nano A01の際は、利用する電源を選択するセレクター(Power Select Header (J48))に、自分で準備したジャンパーピンを用いてショートさせる必要がありました。

モデルチェンジ版のNVIDIA Jetson Nano B01には、写真のようにジャンパーピンが付属しておりました。
セレクターをショートさせずに付属しているので、アダプター利用時には、ジャンパーピンを用いて、J48をショートさせて、電源アダプター給電を利用します。

created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

NVIDIA Jetson Nano 追加

機械学習向けシングルボードコンピューターNVIDIA Jetson Nano、追加導入しました。
新しいラインナップなどが出ていないか、調べると、マイナーチェンジを行ったみたいです。

大きな違いはないですが、ボードから変わっているので、見えない安定性なども向上していることを期待してしまいます。

created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

NVIDIA Jetson Nano A02 と B01 違い

  • カメラコネクターが一つから二つに追加
    • カメラコネクターの追加(J49)
    • カメラコネクターの場所変更(J13)
  • ボタンヘッダー削除 (J40)
  • シリアルボードヘッダーの削除 (J44)
  • 入力電源選択の場所を変更 (J48)

NVIDIA Jetson Nano B01 仕様

GPU128-core Maxwell
CPUQuad-core ARM A57 @ 1.43 GHz
Memory4 GB 64-bit LPDDR4 25.6 GB/s
StoragemicroSD (not included)
Video Encoder4K @ 30 | 4x 1080p @ 30 | 9x 720p @ 30 (H.264/H.265)
Video Decoder4K @ 60 | 2x 4K @ 30 | 8x 1080p @ 30 | 18x 720p @ 30|(H.264/H.265)
Camera2 x MIPI CSI-2 DPHY lanes
ConnectivityGigabit Ethernet, M.2 Key E
DisplayHDMI 2.0 and eDP 1.4
USB4 x USB 3.0, USB 2.0 Micro-B
OthersGPIO, I2C, I2S, SPI, UART
Mechanical100 mm x 80 mm x 29 mm
created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

NVIDIA Jetson NanoへのGoogle Home Notifier導入は、  こちら

google-tts-apiからHOYA社のVoice Text Web APIへ

Google Home Notifierは、テキストをgoogle-tts-apiを用いて、音声変換を実施しております。十分に内容は把握できますし、実利用には支障はないのですが、HOYA社より優れたWeb APIが公開されているので、HOYA社のVoice Text Web APIを用いた音声に変更を実施します。HOYA株式会社 VoiceText Web API

  1. HOYA社Voice Text Web APIの利用登録
  2. 「voicetext」のインストール
  3. google-home-notifierソースコード修正

前提条件

導入手順

1.HOYA社Voice Text Web APIの利用登録

HOYA株式会社 VoiceText Web APIの「無料利用登録」より利用登録を実施して下さい。利用登録後に、API KEYがメールで送付されて来ます。

2.「voicetext」のインストール

以下のコマンドで、「voicetext」をインストールします。

3.google-home-notifierソースコード修正

「google-home-notifier.js」ファイルの修正

以下を参考に2箇所追加および1箇所コメントアウト(削除)を実施します。

「VoiceTextWriter.js」ファイルの新規作成

  • 「@APIKEY@」を利用登録時に受信したAPIKEYに変更
  • 「@WEBPAHT@」にWEBサーバの公開フォルダに格納する音声ファイルを指定
    例:/var/www/html/voice-text.wav
  • 「@URL@」にWEBサーバの音声ファイルへアクセスする際のURLを指定
    例:http://192.168.0.200/voice-text.wav

VoiceText Web APIマニュアルを参考に、speedやvolumeなどのオプション指定を変更して、好みの音声に変更して下さい。設定ファイル変更時には、Google Home Notifierの再起動が必要となります。

created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)
created by Rinker
¥11,550 (2020/08/08 08:45:26時点 楽天市場調べ-詳細)

NVIDIA Jetson Nano の動作温度

Raspberry Piを導入した際に、高負荷時の動作が遅かったので、温度を疑い、見事に高温からくるCPUクロック速度の制御が行われておりました。
参考記事:Raspberry Pi 熱対策 ファン導入

NVIDIA Jetson Nano導入時より温度の履歴を取得しておりました。

NVIDIA Jetson Nanoのセンサー情報取得

/sys/devices/virtual/thermal/thermal_zone[0-9]/type にセンサタイプ、
/sys/devices/virtual/thermal/thermal_zone[0-9]/temp に温度が記載されています。

それぞれの内容を調べたのですが、以下の説明しか入手出来なかったです。
とりあえず、CPU温度とGPU温度の履歴を収集しました。
AO: always on,
PLL: phase locking loop,
PMIC: power management IC,
Tdiode: temperature of thermal diode in chip,
Tboard: temperature of board read from a thermal diode on board.

CPU温度とGPU温度をDBへ保存する際に利用したPHPスクリプト

NVIDIA Jetson NanoのCPU温度・GPU温度の蓄積結果

平日の結果です。4回のめざましじゃんけんに合わせて、温度が高くなっています。
ただし、60℃以下ですし、ファンの導入は行っておりません。
Raspberry Piの発熱量と比べると非常に優秀です。

created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

Linux間のボリュームマウントNFS

今回は、Jetson NanoのUbuntuボリュームを、Intel NUCのUbuntuからマウントする方法を紹介します。

  1. ボリュームを提供するサーバー側にnfs-kernel-serverを導入および設定
  2. クライアント側にnfs-commonを挿入およびマウント

サーバー側:Ubuntu にnfs-kernel-server導入

Nvidia jetson NanoのUbuntuにNFSをインストールします。

共有したいボリュームを/etc/exportsに記載します。

クライアント側:Intel NUCにnfs-common導入

Intel NUCのUbuntuにNFSツールをインストールします。

マウントポイントとなるフォルダーを作成し、マウントコマンドでマウントを実行します。

created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)