hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

JETSON XAVIER NXにJetpack 5.0.2をインストール

1年ぶりの更新で、またJETSONのバージョンアップネタです。
バージョンアップだけしている人みたいになってますが、ちゃんと仕事でJetsonで開発してます。まだデモ段階ですが。

それにしても、JETSON自体手に入りにくくなってしまいましたね。在庫のあるOrinは40万円弱くらいなので手の届かないところに行ってしまいました。お手軽にGPUが使える小さい子の登場はNano2リリースまでお預けかもしれないですね。


さてさて、今回のバージョンアップ、5.X系ですが、大がかりなアップデートということで、Jetson Nanoなどがサポート対象外になっています。そして、ブートローダが変わったみたいでアップデートする際にもひと手間かかるようになりました。

それがこちら。

docs.nvidia.com

これを実行しろと。

$ sudo flash_eraseall /dev/mtd0
$ sudo flashcp jetson-xavier-nx-devkit.spi.img /dev/mtd0

flash_eraseall。🙂
これは危険な気がします。
ということで、ちょっとネットを探してみると、、、

forums.developer.nvidia.com

ふむ。やっぱり消した後に電源落ちちゃって起動しなくなってる人がいますね。そういう場合は、母艦を用意してSDK Managerを使って復旧させるしかないようですね。
一応、母艦があれば失敗してもなんとかなりそうなことが分かったので、挑戦です。

指示に従って、Jetson_Xavier_NX_QSPI_35.1.gzをダウンロードします。
これを解凍すると、jetson-xavier-nx-devkit.spi.imgが出てきます。

ちょっと不安だったので、Linux上で解凍しました。
そしてNXを起動して上記のコマンドを実行。

nvidia@Jetson:~$ sudo flash_eraseall /dev/mtd0
[sudo] password for nvidia: 
flash_eraseall has been replaced by `flash_erase <mtddev> 0 0`; please use it
Erasing 64 Kibyte @ 1ff0000 -- 100 % complete 
nvidia@Jetson:~$ sudo flashcp jetson-xavier-nx-devkit.spi.img /dev/mtd0
nvidia@Jetson:~$ 

flashcp実行しても何もログ出てこないから不安になりますね(汗)
あとは前回と同じように手順通りにSDカードを用意して入れ替えます。
hellkite.hatenablog.com


起動するかどうか不安でしたが…

無事、起動しました!

GLSLでsamplerを使うときはTextureのImage Formatに注意

はい、タイトルそのまんまです。。

ドキュメントをよく読まずにハマる典型ですね。今回は、2日はまりました。。

So for samplers, floating-point samplers begin with "sampler". Signed integer samplers begin with "isampler", and unsigned integer samplers begin with "usampler". If you attempt to read from a sampler where the texture's Image Format doesn't match the sampler's basic format (usampler2D with a GL_R8I, or sampler1D with GL_R8UI, for example), all reads will produce undefined values.

Sampler (GLSL) - OpenGL Wiki

ちゃんと書いてあるっていうね。


RGB 3ch 8bitのテクスチャをusamplerで取得する場合、

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, pixel_width, pixel_height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);

ではなく、

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8UI, pixel_width , pixel_height, 0, GL_RGB_INTEGER, GL_UNSIGNED_BYTE, 0);

が、正しい。

DeepStream SDKを試すときは、JetPackのバージョンに注意!

さてさて、せっかく購入したJetson Xavier NX、使わないともったいないので使います。そして、月1ペースでここの更新ネタにしていきたいところです。
というわけで、本当は先月中にやろうと思っていたDeepStream SDKのサンプルの動作確認をしてみました。


目次

はじめに確認しておくこと


それは、使おうとしているSDKがJetPackのバージョンに対応しているか確認すること。
何も確認せずに手順通りに進めてみて、サンプル起動したら動かなかったです。

$ deepstream-app –c samples/configs/samples/configs/deepstream-app/source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

error while loading shared libraries: /usr/lib/aarch64-linux-gnu/libnvinfer.so.7: file too short

nvinfer.soは推論のPlugin*1で、TensorRT絡みでエラーになったのかなぁと思います。というより、DeepStream SDKのサイトにちゃんと対応バージョンが明記されていました。
NVIDIA NGC

今現在のバージョン、5.1だと以下の通り。

Prerequisites
Ensure these prerequisites are available on your system:

Jetson device running L4T r32.5.1
JetPack 4.5.1

ちなみに前回、インストールしたJetPackは最新の4.6でした。ライブラリのバージョンも見たら全然違いますね。NVIDIA関係のライブラリのバージョンやドライバのバージョンはちゃんとしないと動かないことが多いのでちゃんと確認しましょう。
まずは、JetPack 4.5.1のイメージを準備するところからやり直しです。

JetPack 4.5.1が見つからない

前回JetPackインストールしたときに参考にしたところを見ればいいかなと思ったら、古いバージョンのJetPackが見当たらなくて探し回りました。アーカイブサイトのリンクがあったから飛んでみたら今度は古すぎて…Googleの力を借りながら、あちこちリンクをたどった結果、ようやく見つけました。

developer.nvidia.com

前回と同じ手順でインストールします。手順は簡単ですが時間はかかりますね。

hellkite.hatenablog.com

DeepStream SDKをセットアップ

今回は、Dockerを使ってサンプルを動かしてみます。

xhost +

sudo docker run -it --rm --net=host --runtime nvidia  -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-5.1 -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/deepstream-l4t:5.1-21.02-samples

オプションの説明は、公式サイト*2を確認してください。初回はだいたい10分くらい起動に時間がかかります。2回目以降はすぐに起動します。
起動したら、サンプルアプリを実行してみます。

# deepstream-app –c samples/configs/samples/configs/deepstream-app/source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

今度はうまく動作しました!
このコンフィグファイルでは、サンプル動画で動きますが動画のライセンスがよくわからないのでスクショなしで^^;

まとめ

バージョンが合わないのは初歩的なミスでしたね。最初に何を検証したいのか計画してからJetPackを用意するようにしましょう。SDカードがいくつか欲しくなりますね。。
環境さえ合っていれば、すぐにDeepStream SDKが動作するので遊べそうです。


USB Webカメラを購入したので、次は、それ使って遊んでみようかなと思います。

追記

jtopを入れておくとライブラリのバージョンが一覧で確認できて便利です。

f:id:deis:20210906131318p:plain
jtop

インストール方法は、この辺を参考に。

qiita.com

JETSON XAVIER NXを買ってセットアップ

お久しぶりの更新です。この1年、ずっとCUDA関係の仕事をしていて(大変だったけど)充実していました。
最近、NVIDIAのDeepStream SDKというライブラリを使った仕事が始まったのですが、これがなかなか面白い。カメラの映像からAIを使った画像処理を手軽に実装することができます。これは、自宅で使っても面白いことができるんじゃないか、と思ってJETSONを購入してみました。

今回は、セットアップまでやってみました。

目次

購入しようとしたけど。。

Jetson Xavier NXが、どこにも売ってない!
JETSONに限りませんが、今の半導体不足、マイコンボードは品薄のようですね。実際仕事でもチップがないからという理由で開発が延期になったりで大変です。
Nanoは売ってるんですが、値段が上がっているうえに、画像処理をやってたらすぐに性能に不満が出てきそう *1
探し回った結果、なぜか秋月にほぼ定価で売られていたので購入しました。

買ったのは、Jetson Xavier NX DEVELOPER KITと128GBのMicro SDカードです。両方とも秋月で購入。

f:id:deis:20210825204543j:plain
Jetson Xavier NX

セットアップ

セットアップの方法は、公式サイトを見るのが一番確実。

developer.nvidia.com

SDカードのフォーマットも書き込みも、書いてある通り、SD Memory Card Formatter for WindowsとEtcherを利用。

f:id:deis:20210825204622p:plain
Etcher

順調順調…ん?

f:id:deis:20210825204626p:plain
エクスプローラ大量起動(見えてない)

なんかエクスプローラが起動して、大量にエラーが出た。。SDカードの書き込みが終わってWindowsが読めない形式になったところで自動認識しにいったのかな。。とりあえず、Etcherのステータスは正常終了なので、SDカードを引っこ抜きました。。

動作確認

SDカードの準備ができたので、さっそく箱から取り出します。

f:id:deis:20210825204549j:plain
開封の儀

あれ?3穴コンセント用のACアダプタしかついてない。。幸い、コンセントが用意できたので、今回は大丈夫。2穴コンセントしか用意できない場合は、事前に変換プラグを買っておいた方がいいですね。。

ACアダプタを接続するとすぐに電源が入るので、先にHDMIとキーボードとマウスを接続します。起動した後は、Ubuntuが起動するのを待ちます。すぐにGUIの画面が出てくるので安心ですね。
ひとまずシステムをアップデートしておきます。


初めからCUDAがインストールされていてサンプルも入っているので、動作を確認。

f:id:deis:20210825204633p:plain
CUDAの動作確認

無事、起動しました!

まとめ

ひとまず、まともに動作したので一安心です。同じJetsonでもTX2を初めて動作させたときは、なかなかうまく起動しなくて苦戦した記憶があるので。。
次はDeepStream SDKを試してみたいですね。

*1:仕事で使っているのが、Jetson AGX Xavierということもあって、レスポンスの差があるとストレスたまるかも、というのもある。が、さずがにAGXは買えない(^^;)

Ableton Live 10を購入しました

買い物系が続きます。DAWとしてAbleton Live 10を購入しました。Ableton Liveは以前使っていたDAWなんですが、5月20日までの期間限定でディスカウントされていたので、この機会にバージョンアップ。

www.ableton.com


作曲趣味から遠ざかっていたので最近DAWは使っていませんでした。でも、この巣ごもり期間、家でやれる趣味としてはいいかなと。
ReasonもVersion 11が出ていて、どちらにするか悩みました。こちらも以前から使っていたDAWです。

www.reasonstudios.com

こちらはラックを構築していくタイプのDAW。かなり癖が強くてケーブルを画面上で繋いでいくんですが、柔軟に音が作れるので好きなんです。こちらもゴールデンウィーク中にセールをやっていたようです。

色々検討した結果、Ableton Liveにしました。決め手になったのはポイントは、

  1. 巣ごもり期間が終わったらiPadでの作曲になるので書き出しに対応しているLiveの方が無駄がなさそう
    • 対応してるKORGのiPad向け作曲ソフトのGadget 2、Electribe Waveを持っているので
  2. 動画としてアップする際にLiveの方が映えそうw
  3. 音に合わせて映像を生成するのがLiveの方が簡単
    • 仕事でもopenFrameworksを使ったりしているのでMaxを使えばOSCで同期がとれるLiveなら楽しく遊べそう

とまぁ、他の人には全然参考にならない個人的な事情によりLiveにしました(^^;
ちなみにopenFrameworksっていうのは、プログラムで絵を書くためのライブラリソフトです。このブログでも過去に記事を書いたりしてました。

hellkite.hatenablog.com

最近Twitterで10分くらいで作った動画をちょこちょこあげたりしています。こちらも巣ごもり期間に始めました。

OSCというのは、Open Sound Controlっていう規格で、簡単な手続きでネットワーク越しにデータのやり取りができる代物です。例えば、曲の展開に合わせてopenFrameworksの映像を同期させる、みたいなことができます。・・・できるはずです。
話があちこちに飛びました。。
何はともあれ、せっかく買ったので、少し音方面もまた頑張りたいと思います(汗*1

*1:SoundCloudに久しぶりにログインしたら最後の投稿が5年前でしたw

Pythonデータサイエンスハンドブックを購入しました

2本続けて買った本の紹介になってしまいました。

Pythonは機械学習やDeepLearningのために使っていましたが、あまり基本を知らずに使っていて、サクサク使えるとは程遠い状態でした。


この本、実は無料で読めます。

Python Data Science Handbook | Python Data Science Handbook


英語です。高いなぁと思って、初めはサイトでGoogle翻訳を頼りにやっていましたが、これが結構分かりやすい。機械学習の章に入ったところで日本語版を購入しました。
この手の本は読むというより、自分に必要な部分に追記をしていって使える道具にしていくのが私の使い方です。なので、電子版より本として手元にあることが重要です。
まだサクサク使えるとは言えませんが、いろいろな用途に使うことができるのでそのうち慣れていくことを期待しています^^;

続きを読む

OpenGL 4.0シェーディング言語を購入しました

久しぶりの更新です。1年ぶり…と書こうと思ったら、2年近かった…最近時が過ぎるのが早すぎて怖いです。一応、無事にイキテマス。
さて、大変なことになってますが、せっかくのおうち時間、有効に使っていきたいですね。


さて、表題の通りです。OpenGLシェーディング言語を購入しました。


絶版みたいですね。Amazonのマーケットプレイスで購入しました。定価より高いのは仕方ないですね。届いたのは2012年10月25日発行の初版第1刷でした。
…売れなかったんだろうなぁ…
ちなみに、原書は改訂3版まで出ていてCompute Shaderに関する章が追加されているようです。一通り学習したら、そっちも購入してみようかなと思います。

今回購入を決めたのは、OpenGLを使ったサービスの仕事の話が近年増えてきたのと高解像度データを使うことが増えてGPUを使った演算をしないといけなくなってきてからです。CudaとGLSLがこれからの武器になるかなぁと思っています。
今更感がありますが、実際、ゲーム業界やCAD、CG界隈を除くとこの手の技術に精通している人はあまりいません。この歳で新しい技術を学べるのもプログラマのいいところですね。


…趣味でも使えそうだしね。映像作品とか定年後にやってみたいし!長生きしなきゃ!