読者です 読者をやめる 読者になる 読者になる

Take’s diary

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

Jetson TX2 ってどうなんだろ?

随分休んでしまいました。

 このブログをきっかけにwiwaoさんと知り合いになって、今年のメイカーフェアに参加申請することになりました。トイドローンに取り付けたLEPTONサーモカメラ画像をiPhoneで確認しようというものです。LEPTON1動画の大幅なスピードアップだけではなく、その4倍画素数の多いLEPTON3でもWROOM02で画像配信が実現できました。休んでいたのはこのため。審査が通ったらwiwaoさんと相談しながら随時このブログに紹介していきたいと思っています。とても面白いものになりましたので、乞うご期待!!。

TX1の記事をたくさん書いてきたので、

 メーカーが2倍早くなったというTX2がどうなったのか、アメリカからすぐに取り寄せて試してみたかったのですが、日本国内発売を待つまでは、技適に通ってるかどうか判断できないので、ガマンしてました。

 正式に国内で販売開始されていたので、間髪入れず手配。すぐに自宅に届きました。現在は再入荷待ちのようです。

f:id:TAKEsan:20170508122623j:plain

 電源を入れればlinuxが起動されますが、このままでは何も入ってません。Jetpacをフルスペックで再インストーする必要ありです。再インストール方法は、去年の私の記事を参考にすればとりたてて問題ありませんでした。 

 技適は?....。

外箱に明記されてました。

f:id:TAKEsan:20170508122615j:plain

TX2の目玉は

 2スレッドのCPUが追加されて、2種類のCPUが合計6スレッドとして動くという、日本人が食いつきそうなフォルクスワーゲンTSIツインターボみたいなシステム!!。その他では内部SSDSRAMの拡張などが目玉です。

f:id:TAKEsan:20170508123413p:plain

          システムモニターを確認すると、CPUが6つもある!!

 でも、使って見てOSがまだ不安定気味。外付けSSDにはOSをインストールしないで(途方も無いインストールの時間的リスクが伴うので)単純にOSが安定するまで持っているSSDを外部記憶装置として使うことにしました。内部SSDが拡張されたことで、ある程度のライブラリをインストールしても、特に容量的な問題が起きません。頻繁に読み書きする必要のある開発環境等は外付けSSDで作業すれば、当面内部SSDの基本寿命にはほとんど影響がないと思います。

 ディープラーニングにおいてGPUのメモリはかなり重要な要素で、TX1では実行できない場面が数多くあったのですが、今回の基本メモリ8Gは大きな進歩です。(TX1、TX2とも基本メモリをCPUと共用しているのでこれが倍になったということは、よほど大きな画像やデータを使わない限りTX2で消化できる様になることを意味します)GTX1080でもGPUメモリは8Gなんですから。ただしGPUに関してはメモリ以外ハードにスペック上の進化がないので、基本性能の差は感じません。Pascal世代の最適化されたライブラリがまだ存在しないようです。これはメーカーの動向待ちです。

 今までTX1やUbuntuメインマシンで、様々なディープラーニングフレームワーク上っ面だけ試して見ましたが、それぞれ応用するには、かなりの学習時間が必要だと自分的には結論づけました。

 TX2でアマチュアがデープラーニングを応用するには、TensorRTと開発環境の一つであるOF(Openframeworks)が実現できて、メインマシンで学習環境(DIGITS)が実行可能なら、現時点ではほとんど問題ない様に思えます。OFでTensorRTが動けば、画像描画ソフトを作る上で、スピードの遅いPyCaffeをわざわざ使う場面が思い当たりません。

私が必要なTX2の環境構築は今までの作業経験から以下に絞られます。

  • OpenFrameWorksのインストー
  • TenterRT(jetson-infarens)のインストー
  • ZED ステレオカメラSDKのインストー
  • 念のため標準Caffeのインストー
  • OpenCVは新たにインストールしない。(プレインストールされるOpenCVTegra利用)

 これが実現できて、TX1より実行スピードが少しでも上がれば、現段階では必要十分なのですが、全て実現できました。

 CPUのスピードアップを実感するためには、TX1と同じようにhomeからsudo ./Jetson_clocks.shを実行します。

6個全てのCPUクロックが2.38GHzになりGPUクロックも最大になります。簡単なPythonのCPUテストを行うと。

      Intel Joule  12秒

      TX1     11.5秒(JETSON_CLOCKS実行)   

      TX2     8.3秒  (        〃     )

      iMac    4.7秒  (Intel Core  i7    3.4Mhz )

f:id:TAKEsan:20170508122614p:plain

上記の簡単なPYthonプログラムを使ってスピードテスト。あくまでも簡易的なテストですが、経験上1コアでのCPUスピードの目安がわかります。

となりました。TX1よりクロックスピードの差分くらいは確実に早いようですが、まだまだホストマシンからは差があるようです。ただしOFをインストールしてサンプルを実行するとホストマシンとほぼ遜色なくなります。これはGPUを含めたトータル性能で、iMacクラスと肩を並べるレベルになっていると見て良いかとは思います。ただメーカーの言っているTX1の2倍早くなったとは、どこを指してスピードが2倍なのかとてもでした。でも早くなったのでウレシイ....。メモリー関連なら2倍なのは理解できるんですが。

TensorRTライブラリサンプルは、

 JETPAC 3.0ではTensorRTはV1.0のままなので Jetson-inferenceサンプルをを実行させても、USB WEB Cameraを使う限り、各アプリのフレームレイトの改善はほとんど(1フレームくらいは上がる)ありません。ということはCPUのスピード向上分も改善されてません。メーカーは何を考えてるんでしょうね?売り込みの目玉部分のアピールができてませんでした。

 外付けWebCAMERAのビデオ番号が、

 またまた使いにくいvideo1になってしまいました。拡張ボードに付属するカメラがVideo0です。今までOpenCV等を利用してvideo0で動いていたソースはそのままだと画面が真っ暗になります。したがってプログラムソース上の設定を全て変更する必要があります。Linuxの上級者で、Video0と1をOS上で変更できる方は別ですが、リスクを伴うので、ソース側を変更するのが一番無難。ちなみにOFでは setup() の中に 

   vidGrabber.setDeviceID(1); を追加するだけです。

  (vidGrabbeはofVideoGrabberで変数宣言がしてあるものとする)

 拡張ボード付属のビデオカメラについては、大きな基盤の片隅に付いていて、移動が困難なので、実用性はゼロに近いと思ってるのは私だけでしょうか?あくまでもテスト用です。TX2のフォーラムでもこのカメラに固執する方がいますが、意味のないことだと思います。

 ZEDステレオカメラに関しては、

 TX2に対応できる様になってました。今まで外付けGPUのついたWINDOWSでしか実現しなかったZEDfuが現実的なスピードで動作できます。GPUクロックアップされたハードを使い切っているZEDのソフト開発者がすばらしいんでしょうね。この辺りにもメーカー側と真面目なサードパーティの温度差を感じます。ただ、TX2版のZEDfuはリアルタイムテクスチャー貼り付けは出来ていない様です。

f:id:TAKEsan:20170508122611p:plain

  ZEDはZEDfu(3Dモデル作成アプリ)が実行可能になった!!。上記写真はそれを実行させているところ。CPUは6コア全てを使用している。

 OpenFrameWorksのインストールは、

 Openframeworksは、前回インストールが成功したTX1版を利用してgruw3の再コンパイルだけで動いちゃいました。ソースをつけます。TX2でビルドしたアプリの安定感とスピードは、さすがにCPUのスピードが上がっただけのことはあり、文句のつけようがありません。

 前回の記事通りにインストールできます。一応TX1で動作確認済みのOFとTX2用にコンパイル済みglfwフォルダをダウンロード可能にしておきました。

of_v0.9.8.zip ------->TX1用のOpenframeworks

glfw.zip         ------->of_v0.9.8/libs の中のglfwを解凍したフォルダで入れ替え

(5/11  glfw.zipの中に余計なファイルが入ってました。glfw.zzzzフォルダは消してから入れ替えてください)

詳しいインストール方法は、以下のページの下の方を確認してください。

takesan.hatenablog.com

インストールできない場合は、コメントに書き込んでください。

TensorRTの応用は、

 jetson-infarensはここからダウンロードしてインストールします。

GitHub - dusty-nv/jetson-inference: Guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and Jetson TX1/TX2.

問題なく動きました。説明も機能もかなり拡張された様です。

 jetson-infarensはTensorRT(16ビット浮動小数点に特化したJetsonに関するディープラーニング用のライブラリ)が実行できるNVIDIAが公開のデープラーニングの唯一の例題とライブラリ群です。これをOFで動かすことで手軽にディープラーニングが実現できます。以前TX1用に書いたOF上でTenter RTが動くソースが全て実行できましたので、興味のある方は以前の記事を確認してください。スピードは最大で30%程度上がっていました。これは単純にCPUスピードの差だけだと思われます。依然としてメーカー側で提示しているサンプルアプリと同じ動作ソースを実行すると、私の作ったものの方が表示スピード性能が良い様です。

f:id:TAKEsan:20170508122608p:plain

OFで以前作ったObject Detectを使って人体認識するソースを動かしているところ。TX2では11.2FPS出ている。(TX1では7.8FPSくらい)

 標準Caffeのインストールは

 JETSON-HACKSのスクリプトが一番簡単です。たった3行のコマンドとrun testだけで済んでしまいます。

www.jetsonhacks.com

内部的にTegraOpenCVを使っているので、事前にOpenCVのインストールが必要ありません。その他この記事の中に書いてありますが、

  • sudo nvpmodel -m 1 (Max-Q)
  • sudo nvpmodel -m 2 (Max-P)
  • sudo nvpmodel -m 0 (Max-N)

で、3種類のCPUクロックと消費電力が指定できるようで、 -m 0が最大になるようですが、このコマンドだけではjetson_clock.shとは異なりファンが回らないので、CPUの温度上昇には注意する必要があります。

 最後に、

 JetPac3.0は、去年の今頃のTX1の時の様にあまり安定していません。今後のバージョンアップで確実に良くなると思います。ただ、CPUを最高スペックに設定した後のUbuntuの使い勝手は前にも増してスルスルでした。TX1で完結するアプリを作る場合は、わざわざクロスコンパイル環境の構築は必要ない様です。

 

 

                      ということで今回はおしまい。