Jetson Nano Developer Kit を入手しました。Jetson Nano は Tegra X1 を搭載した SBC です。各種インターフェースを搭載した I/O ボードがセットになっています。そのため見た目は Raspberry Pi のような印象を受けますが、上に載ってる Compute Module のような小さいカードの方が本体です。

NVIDIA Jetson Nano

Nano は Jetson シリーズの中でも低価格で入手しやすくなっています。その代わり搭載されている Tegra X1 のアーキテクチャは少々古い世代のもので、GPU も GeForce でいえば 900 シリーズの Maxwell に相当します。また同じ X1 を使用している Jetson TX1 や SHILED TV (Android TV) よりも Shader Core 数が半減しています。公式ページに書かれている 472 GFLOPS は fp32 ではなく AI 向け fp16 のものです。

Tegra X1 Device CPU clock Shader GPU clock GPU fp32 GPU fp16
TX1/SHIELD TV A57 1.9GHz 256 sp 1000 MHz 512 GFLOPS 1024 GFLOPS
Jetson Nano A57 1.4GHz 128 sp 922 MHz 236 GFLOPS 472 GFLOPS

Tegra X1 には Cortex-A53 含めて CPU が 8 core 搭載されているのですが、過去の Tegra 同様省電力 core が見えない仕様のようです。8 core 同時稼働ができないため、実質 4 core 相当となっています。

Nano にはパフォーマンス重視の big core A57 が載っているので、同じ Quad core でも Little core のみだった Raspberry Pi 2/3 より CPU 性能は高くなります。ただし最近リリースされた Raspberry Pi 4 では big core (Coretex-A72) に置き換わったため、この点での優位性はなくなりました。

Device CPU core clock IA RAM 価格
Raspberry Pi 2(旧) Cortex-A7 Little 0.9 GHz ARMv7A 1GB $35
Raspberry Pi 2(新) Cortex-A53 Little 0.9 GHz ARMv8.0A 1GB $35
Raspberry Pi 3 Cortex-A53 Little 1.2 GHz ARMv8.0A 1GB $35
Raspberry Pi 3+ Cortex-A53 Little 1.4 GHz ARMv8.0A 1GB $35
Raspberry Pi 4 Cortex-A72 big 1.5 GHz ARMv8.0A 1-4GB $35-55
Jetson Nano DevKit Cortex-A57 big 1.4 GHz ARMv8.0A 4GB $99

似たようなボードのスペックをいくつかまとめてみました。より詳しい表は wiki の方に載せています。メモリ速度に結構違いがあります。

NPU/SBC

Device SoC CPU core clock RAM MEM B/W TPU/GPU
Jetson Nano Tegra X1 A57 x 4 1.4GHz 4GB 25.6GB/s 472 GF@fp16
Coral Dev Board NXPi.MX 8M A53 x 4 1.5GHz 1GB 12.8GB/s 4 TOPS@int
Raspberry Pi 4 BCM2711 A73 x 4 1.5GHz 4GB 9.6GB/s
Raspberry Pi 3+ BCM2837B0 A53 x 4 1.4GHz 1GB 3.6GB/s 28.8 GF@fp32
Dragonboard 410c Snapdragon410 A53 x 4 1.2GHz 1GB 4.2GB/s

OS は Ubuntu Desktop が用意されています。ARM で最初から GPU が有効なものはなかなか触れないので貴重です。OpenGL ES だけでなく OpenGL が使えますし、Vulkan、CUDA にも対応してます。

いつものように ARM 環境でコンパイル速度を調べようとしたのですが、clang の Version によって速度に違いがあることに気が付きました。あらためてデータを取り直してみました。clang の Version が上がるほどビルド速度が遅くなっているようです。

Device v3.5 v3.9 v4.0 v5.0 v6.0 v7.0 v8.0
PC Core i7-4790K -- -- -- -- 30 33 31
Pixel 3 SDM845 -- -- -- -- -- -- 35
Mac i7-3615QM -- -- -- -- -- 42 --
PC A10-7870K -- 64 69 70 74 79 69
Mac i5-3210M -- -- -- -- -- 98 --
ZenFone3 ZC553KL -- -- -- -- -- -- 97
Chromebook C101PA -- 96 95 -- -- -- --
Jetson Nano -- 108 113 113 118 125 121
PC Celeron J1900 -- 174 189 192 202 216 207
Chromebook 2955U -- 191 207 216 225 248 231
PC x7-Z8700 -- -- -- -- 274 304 297
Raspberry Pi 3B 148 194 -- -- 331 351 --
Raspberry Pi 2B 314 395 -- -- 752 820 --

・横軸は clang の Version。数値は秒で値が小さい方が高速。

Windows 上の WSL だと素の Linux より遅くなるため上の表からは除いてあります。wiki の方には WSL 含めたデータを載せています。ストレージ速度など、必ずしも条件が一定ではないので予めご了承ください。

Compile Benchmark

コンパイル時間は core 数や Thread 数が多い方が速くなります。Nano は 8 thread のハイエンドスマートフォンには敵いませんが、RAM も多いし big core なので Raspberry Pi 2/3 より数倍速く、Celeron (Atom) 搭載 PC と比べても半分近い時間でコンパイルが完了しています。

TensorFlow も普通に CUDA で動きます。PC と同じコードがそのまま走るので、メモリ容量の制限はあるものの学習も可能です。TensorFlow をソースからビルドしなおすことで、Python だけでなく C言語 API も使うことができました。


関連ページ
Compile Benchmark
Jetson Nano

関連エントリ
Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
Snapdragon 845 の浮動小数点演算速度
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較
ARM CPU の浮動小数点演算能力まとめ


普段使っている Note PC よりもハイエンドスマートフォンの方が性能が良いことが判明してから、Android を Note の代わりに活用する方法をいろいろ試しています。主な用途は外出時の議事録などのメモ取りとちょっとしたプログラミングです。

Android 上で root なしに利用できる開発環境として Termux と UserLAnd があります。

UserLAnd は Android 上に PC とほぼ同等の Linux 環境を構築可能で日本語入力もできます。その代わり proot のオーバーヘッドがありファイルアクセスが遅くなっています。また GUI が使えるものの GPU が使われておらず、PC と比べると画面描画は低速です。

Termux はファイルアクセスのオーバーヘッドがなく高速ですがパッケージがあまり多くありません。日本語入力にも非対応。

機能面では UserLAnd だけで済むのですが、速度面で少々難があるので工夫が必要です。下記はライブラリのコンパイル時間の比較です。

Google Pixel 3 (Android 9.0 Pie) Snapdragon 845
実行環境 Compiler Time (秒)
(1) Termux clang-7.0.1 32.6
(2) UserLAnd Debian + Termux VNC clang-7.0.1 34.5
(3) UserLAnd Ubuntu 18.04 SSH clang-6.0.0 72.9
(3) UserLAnd Debian Stretch VNC clang-3.8.1 220.4
(3) UserLAnd Debian Stretch SSH clang-3.8.1 219.0
Essential Phone PH-1 (Android 9.0 Pie) Snapdragon 835
実行環境 Compiler Time (秒)
(1) Termux clang-7.0.1 38.4
(2) UserLAnd Ubuntu + Termux VNC clang-7.0.1 40.5
(2) UserLAnd Debian + Termux VNC clang-7.0.1 41.7
(3) UserLAnd Debian Stretch VNC clang-3.8.1 423.6
(3) UserLAnd Debian Stretch VNC clang-4.0.1 456.9
(3) UserLAnd Ubuntu 18.04 VNC clang-6.0.0 95.6
(3) UserLAnd Arch SSH clang-7.0.1 107.0

・Time (秒) の値が小さい方が高速

(1) = Termux のコンソールから直接実行
(2) = UserLAnd から ssh で Termux に login して実行
(3) = UserLAnd 上で直接実行

Termux (1) が一番速く、UserLAnd 経由で Termux を利用した場合 (2) もほぼ速度が落ちずに済んでいます。

Termux と比べると UserLAnd は 2〜12倍くらい遅くなっています。かなりばらつきがあり Debian が極端ですが原因はわかっていません。

UserLAnd は Desktop アプリの利用や日本語入力などの環境として利用して、Termux でできる作業は Termux で行うのが効率良いことがわかります。

上の結果 (2) では Desktop 上の LXTerminal から Termux に ssh 接続していますが、ウィンドウ上の Terminal の描画は遅くなります。パフォーマンスが低いデバイスでは X11/VNC ではなく UserLAnd の SSH から Termux にログインすることをお勧めします。こちらの方が Terminal の描画は高速で、uim-fep の日本語入力が使えるようになります。


● Termux で日本語入力を行う方法

1. UserLAnd に任意の Distribution をインストールして日本語環境を設定
2. Termux 上で sshd を起動
3. ssh で Termux にログイン


● 1. UserLAnd の設定

4通りの方法を wiki にまとめました。

Ubuntu + SSH コンソールでの日本語入力 (uim-mozc)
Debian + SSH コンソールでの日本語入力 (uim-mozc)
Ubuntu + VNC デスクトップでの日本語入力 (fcitx-mozc)
Debian + VNC デスクトップでの日本語入力 (uim-mozc)

その他 UserLAnd 関連はこちら
Android の上の開発環境: UserLAnd


● 2. Termux の設定と sshd の起動

Termux では予め sshd を起動しておく必要があります。手順は下記の通り。ssh でログインするためにはパスワードの設定が必要です。

$ pkg update
$ pkg install openssh
$ passwd
パスワードの設定
$ sshd


● 3. Termux へのログイン

UserLAnd から Termux へのログイン方法。VNC (LXDE desktop) を使う場合は LXTerminal を使ってください。

$ ssh localhost -p 8022


●実際に使用してみて

Snapdragon 845 クラスのスマートフォンでは Ubuntu + VNC + Termux で十分だと感じます。議事録などのメモ用途で使う場合は、Bluetooth Keyboard があれば Note PC 代わりになりますし、外出時のコードの確認にも使えます。

どこでも作業空間を作り出せる Oculus Go も非常に魅力なのですが、VR にパワーが取られてしまい VNC は重くなります。テキストエディタの作業は SSH Console の方をお勧めします。もっとパワーのあるスタンドアロン機種や、ハイエンド機種 + GearVR/Daydream だったらもう少し快適な作業ができるかもしれません。


関連ページ
Android の上の開発環境: UserLAnd
Android の上の開発環境: Termux

関連エントリ
Android 9.0 と Bluetooth Keyboard による日本語入力
Android で動く Linux 環境 UserLAnd が XServer XSDL に対応
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd


いろんな OS の中で Linux 環境が使えるようになってきました。OS の中に同居し、Native なアプリと同時に Linux のソフトウエアも走らせられるようになっています。ハードウエアまるごとエミュレーションする仮想 PC とは異なります。RAM やストレージに境界はなく、カーネルをそのまま共有しつつシステムに間借りする形で動きます。

Windows WSL (Windows Subsystem for Linux)
Chrome OS Linux Apps, Crouton, Android Apps
Android UserLAnd



● Windows 10 WSL

複数の Distribution が用意されており、Microsoft Store からアプリとしてインストールできます。事前に WSL を有効化しておく必要があります。

(1) 設定→ 「アプリと機能」→「プログラムと機能」→「Windows の機能の有効化または無効化」
(2) 「Windows Subsystem for Linux」にチェックを入れて再起動。


● Chrome OS (Chromebook/Chromebox 等)

ChromeOS は Chrome Browser のための Platform です。普段 PC で Chrome ブラウザを使っているなら、Chrome OS に触ると大半の作業がブラウザで事足りることに気が付きます。利用できる Chrome アプリは限られているものの、必要なら Android や Linux アプリを使うことができます。アプリ選択の自由度は意外に高くなっています。

現在 Chrome OS デバイスで Linux を走らせる方法は複数あります。それぞれ複数の Distribution から選ぶことができます。(Linux Apps を除く)

公式に対応した Linux Apps は対応機種がまだ少ないですが、Developer mode に切り替える必要がないので非常に扱いやすくなりました。

インストール&起動方法で分けると下記の 3種類です。


(1) Native Install

 普通の PC と同じように Linux をゼロから install します。Gallium OS 他。

(2) Dualboot (ChrUbuntu)

 カーネルを流用して Linux を起動します。boot 時に選択します。(ChrUbuntu)

(3) Chrome OS と同居

 コンテナとして Chrome OS 上で動きます。Chrome OS と同時利用が可能。


さらに (3) の方法にも複数の選択肢ができました。

1. Crouton : chroot で Linux を install。古くから存在し多くのデバイスで利用可能。

2. Android Apps : Android アプリとして Linux 環境 (UserLAnd 等) を install

3. Linux Apps (crostini) : ChromeOS 公式の Linux 環境


2. および 3. は比較的新しい機種のみ対応しており、古い機種では使うことができません。

なお Crouton は Chrome OS 内に Linux Desktop を表示できますが、X11 の動作モードが 2種類あります。(sudo startsfce4 -X xiwi 等のオプションで切り替え)

・xiwi : Chrome OS のウィンドウの一つとして表示。ソフトウエア描画。

・xorg : 全画面を乗っ取ってしまうがハードウェアアクセラレーション対応。

下記画面は Crouton の xiwi で Linux Desktop を表示したものです。

{image}

GitHub: Crouton
GitHub: ChrUbuntu
Gallium OS


● Android

(UserLAnd) は Android アプリとして Linux 環境を install します。root 無しに利用可能で、複数の Distribution から選ぶことができます。現在は Arch, Debian, Kali, Ubuntu の 4種類用意されているようです。

アプリからは SSH Terminal, VNC の 2種類の接続方法を選ぶことができます。公式サイトにあるように X Server も使えます。

 1. アプリ install
 2. 任意の Distribution を選択 (Debian, Ubuntu 等)
 3. フォルダへのアクセス許可
 4. ユーザー名とパスワードの入力
 5. 利用方法の選択 (SSH or VNC) あとから変更可能
 6. 初回のみ ConnectBot or bVNC Free の install
 7. 6. で install した場合はアプリに戻ってもう一度選択すると起動


VNC 利用時の desktop install 手順。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install lxde
$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
$ cp /usr/bin/startlxde ~/.vnc/xstartup


VNC の解像度変更方法

"~/.vnc/tightvncserver.conf" を作成して下記のように任意の解像度を書き込む。この指定がない場合 1024x768 になっています。

$geometry = "1280x720"


2160x1080 や 1920x1080 等、スマートフォンで実解像度を指定すると小さすぎて文字が読めなくなる可能性があるので注意。↓ は ZenFone AR の画面です。

null

UserLAnd


関連エントリ
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Android/Linux MaruOS その4
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04


MaruOS 0.3 が Release されています。Windows 10 Mobile の Continuum 同様に外部モニタ接続で Linux Desktop が使えるのはもちろん、外部モニタなしでも使えるようになっています。それ以外にも Android 側が 6.0.1 になるなど色々改良されているようです。

maruos08.jpeg

Dashboard は設定画面から呼び出すことが出来ます。

maruos09.jpeg

これでいつでも Linux Desktop の起動と Shutdown が可能です。
Android 側に VNC や ssh client のアプリを入れておけば、端末単体でも Linux アプリケーションを利用することが出来ます。VNC server はデフォルトでは起動していないので、VNC を使う場合でも最初は ssh が必要です。

ただし以前はバグを利用して、端末本体に Native な Desktop 描画が出来ていたのですが、修正されているようです。


関連エントリ
Android/Linux MaruOS その3
Android/Linux MaruOS その2
Nexus 5 に Maru OS を入れてみた


コメントでも質問を頂いたので、もう少し詳しく書いてみます。
Maru OS は Windows 10 Mobile の Continuum のように、Android と Linux (Debian) Desktop が共存可能な OS となっています。

Linux on Android 等と違うのは、Android 環境を含めた Custom ROM として作られていることです。そのため既存の Android 環境に後付で install することは出来ず、Android OS 自体も置き換わります。

また端末単独で使うことを想定しておらず、外部の HDMI モニタ接続時のみ Desktop 環境が出現します。(前回のように端末側に Desktop が表示されることもあります)

Desktop 環境を使うためには、Bluetooth の Mouse や Keyboard と外部モニタを繋ぐための Slimport アダプタが必要です。

詳しくは 公式サイト を参照して下さい。
下記の内容は Nexus 5 と 0.2.3 の時点での内容となっています。


● Install 時にストレージ内容は消去されます

現時点の 0.2.3 が対応しているのは Nexus 5 だけとなっています。
インストーラがついているので手順は簡単ですが、ストレージのデータも OS も一旦全部消えます。Android 5.1.1 なので、Nexus 5 に提供されている公式の Android よりも古くなるのでご注意下さい。


● Play store は含まれていません

Android 側に含まれているアプリは最小限で Play Store など Google Apps がありません。FAQ で Google Apps の install 方法が提示されているので、その手順に従って追加する必要があるようです。


● HDMI モニタとの接続は Slimport です (Nexus 5)

Nexus 5 自体が HML に対応していないので HML アダプタは使えません。ご注意下さい。


● Maru Desktop Dashboard

外部モニタに接続して Desktop 環境がスタートすると、Android 側にも Maru Desktop Dashboard というアプリが起動します。ステータスバーのアイコンから呼び出せるので、Desktop 環境の Shutdown もここから行うことが出来ます。

HDMI ケーブルを抜いても、Maru Desktop Dashboard が起動している間は Desktop が残っています。移動先で再び HDMI に繋ぐと、そのままの状態で Desktop が復帰します。


● Desktop と Application

Desktop 環境は Debian 8 Jessie となっており apt (apt-get) でいろいろと install できます。
OpenGL ES ではなく OpenGL に対応しているためか、結構ソフトが動くようです。
使用している人の動画を見ると Blender も動いていることがわかります。
ただし GPU が使われていない (ソフトウエア描画) のでそれなりに低速です。


● Mouse, Keyboard のペアリング

Bluetooth デバイスのペアリングは Android 側の設定画面から行います。
マウスやキーボードで Android 側の UI は一切操作できず、Desktop 側の操作専用となります。
両方操作できてしまうと混乱するので当然かもしれません。


● Desktop 画面を本体に表示する

前回 の手順の詳細です。

1. 画面の回転を有効にしておく
2. もし起動しているなら Desktop を Shutdown しておく
3. HDMI モニタの電源を入れておく。
4. Slimport アダプタにモニタと繋がった HDMI をつなぐとステータスバーに Dashboard のアイコンが表示されるので、すぐにケーブルを抜く
5. 数秒後に Desktop が Android 本体の上半分に表示される
6. 隠れて見えないが上のタスクバーからスライドして通知領域を下に引き出す
7. Maru Deskto running の通知をタップして Maru Desktop Dashboard を開いた状態にする
8. 本体を横向きにして Desktop が全画面になる

Buletooth マウス・キーボードで操作できます。タッチ操作は出来ません。
電源の入った HDMI モニタを実際に繋がないと Desktop が起動しないようです。

Home ボタンを押すなど Maru Desktop Dashboard が裏側に回ると画面の回転が出来ないので、再び通知領域を引っ張って Maru Desktop running の通知を選択し、Dashboard 画面を開く必要があります。

電源ボタンを押しても (Sleep しても) 有効です。このまま持ち歩けますが、画面の上半分に常時 Desktop が表示されているので Android はほぼ使えなくなります。

終了させる場合は手探りです。Dashboard の右上あたりのボタンを OFF にしてから「SHUTDOWN」を選びます。

↓壁紙が似てるのでわかりにくいですが、上半分が Desktop です。
maruos_nexus5_01.jpeg

↓このように通知領域を引き出して Maru Desktiop running を開きます。
maruos_nexus5_02.jpeg


● VNC を使う

Android を併用しつつ本体で Desktop の内容を確認したいなら VNC を使う方法もあります。
Desktop 側で server を起動して Android で VNC client アプリを使います。
Bluetooth マウスやキーボードを使うと反応が遅れるので遅延が気になりますが、Android とすぐに切り替えできますしタッチパネルや仮想キーボードが使えるのは便利です。

遅延があるので、マウス・キーボードを使うならやはり上の直接描画の方が早くて快適です。


関連エントリ
Android/Linux MaruOS その2
Nexus 5 に Maru OS を入れてみた


| 次のページ(日付が古い方向)>>