Take’s diary

Macとマイコンに関すること--ワクワクの製作日記

Jetson Xavier を動かしてみた。

JETSON XAVIER(ザビエル)が来た

今回は発売間もないザビエルを手に入れたので、簡単なテストやインストール結果などを書くことにします。若くは無いので開封の儀は、止めておきます。

 本体は、プレゼン写真で見る限りエンジニアリングプラスチックかと思っていましたが、アルミダイキャスト製でずっしりと重い立派なものでした(ノートパソコン1個分ですからトーゼン)。性能に関してはメーカーの資料を見て下さい。内部eMMC容量以外は現状不満の無い内容です。CPUは最大8個すべて2.2Gで動きます。

f:id:TAKEsan:20180913141710j:plain

f:id:TAKEsan:20180913141710j:plain   f:id:TAKEsan:20180913141759j:plain

 USBCが2カ所付いているのでいろいろなものが接続できそうです。TX2と違ってWIFIが付いていないのですがUSBドングルでなんとかなりそう。

 直ぐに始められるというキャッチが頭に入ってたので、ケーブル類をつないで、パワースイッチを入ればなんとかなると思ってました。しばらくすると何やらコマンド画面が出てきて、インストーラを実行しないとダメとか....。表示通りコマンドを入力して、

f:id:TAKEsan:20180913142257j:plain

 

少し待つと、UBUNTU18.04画面が現れます。反応が異様に鈍い...。

 中をよく調べると、初期状態ではCUDAも何もかも入っていない。スイッチオンではUbuntu18.04が動くだけでした。やっぱり...と思いながら、気持ちを入れ直して、いつものJetpacインストールを行います。経験上、OSもすべて上乗せし直したした方が良いようです。jetpacのバージョンは4です。

Jetson Download Center | NVIDIA Developer

 ここからJetpack4.0とインストールガイドをダウンロードしますが、NVIDIAのユーザー登録が必要です。

 基本は今まで書いたのとほぼ同じ。

NVIDIA JETSON TX1 を動かしてみた!! - Take’s diary

 インストール用には、母艦接続用USBケーブルを差して(一番上の写真が接続場所です)母艦Ubuntu(今回はIntel i7 6700k+GTX1080ti)と接続します。母艦は16.04でもOKでしたが、OpenCV3.3.1でないとエラーになります。3.4の方はダウングレードする必要があります(他に方法があると思いますが)。フォースリカバリーモードにする方法も前と同じです。

.............30分前後時間が必要。

Jetpacインストールが終わったらまず最初にやっておくこと。

 ザビエルもTX2も、省エネ型とかMAXパワーとかいろいろなCPUモードで動きます。モード切替方法は大切だと思うのですが、マニュアルには詳細な説明が無いようです。最強モードにするにもこつが必要。

まずCPUとGPUのクロックを最大にします。

home へ行き

sudo nvpmodel -m 0

sudo ./jetson_clocks.sh

sudo ./jetson_clocks.sh -show    で変更内容が確認できます。

--showは別ですが、前2行を続けて実行しないとダメみたいでした。続けないと上手く変更できません。マニュアルに書いてあるjetson_clocksを実行しただけでは、最大になりません。

 sudo nvpmodel コマンドは -m 0 ~ -m 6 まで指定できて、クロックの最大設定やコアの優先が決まります。./jetson_clocks.sh -showで「自分の目で」現在の設定内容を確認しましょう。表示内容を見れば納得です。

 jetson_clocks.shを実行した後はファンが比較的大きな音で強力に回り出します。静音化対策はしていないよう....。

CPUはあまり早くない。

 早速いつものメインCPUの体感速度がわかるPythonを実施すると、6秒程度。これはTX2から30%程度のアップにとどまっています。ちなみに母艦Intel i7+GTX1080tiでは3.2秒前後なので、私の母艦の半分程度のスピードです。まーTX2のクロックアップ分と考えた方が良さそうです。それにしてもUnuntu18.04はとろい。まだ公開したてだからしょうがないっちゃーしょうが無い。みんなで寄付が必要ですねー。

 経験上以下のソースだけでCPUメインコアの速度が分かります(私には...。OSの体感スピードが、出てきた数値とほぼ比例。)。test.pyかなんかで以下のソースを保存して下さい。その場合実行はpython test.pyです。

************************************************************************************************

def fib(n):

    if n <= 1: return n

    else: return fib(n-2) + fib(n-1)

 

def entry_point(argv):

    a = time.time()

 

    result = fib(36)

    timespan = time.time() - a

    print (result)

    print (timespan)

 

    return 0

 

def target(*args):

    return entry_point, None

 

if __name__ == "__main__":

    import sys

    entry_point(sys.argv)

*************************************************************************************************

ザビエルの売りはGPU

 16ビット浮動小数点と、整数演算が小型の割にとても早いとのことですが、発表している数値は理論値に近いと思われます。これを直感的に体感するにはどうしたら良いか?。ありました。Darknetです。ただしこの方の公開しているものです。

github.com

 ここでインストールするDarknetは以前のV2.0も最新のV3.0も簡単に変更できる上に、ザビエルの売りである16ビット浮動小数点演算の指定や、soファイルの作成も可能で、標準のDarknetより早くなるようです。

 キモはMakefileの変更で、以下のようにします。CPU、CUDNN、CUDNN_HALF、

OPENCV、LIBSOはすべて1、CUDAアーキテクチャはsm62に変更します。で、普通にmake -j8であっという間にコンパイル完了。ザビエルはCPUコアが8つなので、-j8が指定できます。

f:id:TAKEsan:20180913202530p:plain

    上の画像では ARCH= の部分コメントの#マークを外してませんが、外すことを忘れずに!!

 でスピードはどうなの?

 以下のDarknet設定は、すべて16bit浮動小数点です。つまりCUDNN_HALF=1。

yoloは入力画像の大きさ設定で、認識スピードや認識率が大きく変化します。設定はyolov2.cfg又はyolov3.cfgの最初の方を変更します。

f:id:TAKEsan:20180913202023p:plain

上図で(この場合はyolov3.weight)widthとheightの数値を変えます。この数値は32の倍数ならなんとかなるようですが、自分のWEBカメラの設定以下である必要ありです。

コマンドは、

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 0

です。yolov2の場合は3を2に変更するだけでした。yolov2.weightsとyolov3.weightsファイルが必要ですが、ファイルダウンロード方法は

YOLO: Real-Time Object Detection

を参考にして下さい。ちなみにcoco.dataとcfgファイルはDarknetに入ってます。

まず母艦でyoloV3から。

 私の母艦環境はIntel i7 6700k+GTX1080ti+Ubuntu16.04です。yolov3.cfgの入力画像の面大きさ設定が416x416、608x608の場合は、どちらも30fps出てます。やっぱ早いですね。ちなみに608x608の方は認識率がかなり高くなります。以下左416x416が、右が608x608です。

f:id:TAKEsan:20180913151037p:plain   f:id:TAKEsan:20180913151111p:plain

        608x608の認識が良いことが分かると思います。

次にザビエル

f:id:TAKEsan:20180913152016p:plain f:id:TAKEsan:20180913152940p:plain

 ザビエルではyolov3.weightを使って入力画像416x416が16.1fps、608x608が9.1fpsでした。ちなみにTX2では4.4fpsと2.3fpsだったので、ザビエルはTX2の3倍以上早いことになります。右上のターミナル画面はCPUとGPUの現在設定画像です(sudo ./jetson_clock.sh --show)。

 ザビエルはここでも私の母艦の丁度半分くらいのスピードになってます。

ソフト起動時は認識画像が最大になり、ザビエルやTX2は、表示スピードがかなり鈍ります。一旦画像を消すと上写真の様な小さな画像に切り替わり、本来のスピードで表示するようになります。表示ルーチンの改良が必要のようです。

調子に乗ってyolov2ではどうなのかですが....。

f:id:TAKEsan:20180913152728p:plain  f:id:TAKEsan:20180913152754p:plain

 なんとザビエルは416x416の方は29.5fps 、608x608で15.5 fpsでした。TX2ではおのおの9.5fps、 5.2fps なのでここでも約3倍速くなりました。入力画像を608x608にするとYolo2でも認識しているものはyolo3とあまり変わらなくなるのが上画像で分かると思います。ただし細かい部分はやはりyolo3でしょうか。でもyolo3の15fps前後っていうのは魅力的ですねー。以下の動画でも確認出来ると思いますがほぼパーフェクト!!。実際ザビエルでリアルタイム画像認識している様子です。(HARF_CUDNN,yolov3,入力画像412x412)

               www.youtube.com

 AI画像認識は、いままで試して見て、デカいコンピューターを使っても現実的ではありません。気軽に持ち運びできないからです。適度に小さいものはそれなりに遅くなる。TX2がそうでした。これは新しい時代が来たって感じです。

さらにダメ押し

 CUDAのサンプルでsmoke paticlesってのがあるんですが、驚くなかれザビエルでは60fps!! 母艦でも60fps。TX2では30FPSでした。以下ザビエルの動画です。左上の60fpsって表示見えます?

           youtu.be

openFrameworksは動くか?

 ザビエルはROSに焦点を絞ってる気配がありますが、私の場合はいつもここから始まります。openFremeworks0.10.0が動きました!!。インストール方法は前の記事と同じ

takesan.hatenablog.com

 

ですが、Tessだけは再コンパイルが必要でした。tess2.aのダウンロードは以下のアドレス、

Takesan - Google ドライブ 

 この中でkiss&tess.zipを選択して下さい。openFramworks/libの中のkisstessを入れ替えます。openFrameworksでビルドしたものは60fpsが最大ですが、特に負荷の高いものなどは確実に早くなりましたし、マルチで動かしてもスピードが落ちません。ネッ。

    youtu.be

結論

 問題はGPUの使い方に尽きると思います。なので一般向けではありません。つまり普通にUbuntuマシンとして使ったら、TX2と変化があまり感じられないと言うこと。ザビエルのGPUを使った今回のAI体感では、i7+GTX1080tiよりは50%スピードダウンするがTX2の3倍速いってことが結論。いろいろなデータを調べるとGTX1060クラスメモリー容量の多いグラフィックボードを積んだ消費電力の小さなパソコンが、手のひらに乗ったというような事になるのですが、そうするとTX2では最初から諦めていた学習も可能なわけで....。

 今回は、あくまでも他人様のソフトで検証してます。これからさらに最適化すればすごいことになりそう....!!。あとはopenFrameworksにDarknetを入れるだけですが、これがなかなかできない。

 

                          では、また.....。