ライブラリについて理解を深める方法の1つは、ライブラリを移植してみることです。 そして、こういうインタフェースだったら使いやすいのにと思うように書き換えてみることです。 移植先のボード(CPU、GPU, OS,言語、ライブラリのバージョンなど)で動作するようにすることです。 移植先の特有のデータ形式に変換しdeployすることです。 pytorch のモデルから、TensorRTのモデルに変換する事で、どれくらい速くなるのかを試します。 画像サイズによって処理の時間がどう変化するのかを確かめます。 手元にある3Dカメラとの組合せで動作するを確認することは、arXivの論文では見つけられないことを見つけることになります。
NVIDIAのGPUのあるPCから、NVIDIAのJetson AGX Orinに移植するのも立派な移植です。 Dockerfileを書きながら、移植を行いましょう。 Dockerfile の記述、pyproject.toml の記述で、依存性が明確にできます。 自動化テストも書いておきましょう。
Jetsonのhost環境のjetpack の変更(インストール作業)を行なったのちに、動作を確認します。 Docker環境で開発しているのであれば、
FROM nvcr.io/nvidia/l4t-pytorch:r35.2.1-pth2.0-py3
の行を書き換えればOKなはずです。
Cuda デバイスへの移植の際に実行速度を早めるためには、オリジナルのモデルをTensorRTのモデルに変換する。 このことによって、実行速度が改善する。
https://github.com/NVIDIA-AI-IOT/torch2trt
Intelの提供しているOpenVinoの枠組みは、複数の種類のIntelデバイスへのdeployが可能である。 対象: インテル製の CPU や GPU、VPU、FPGA OpenVinoのすばらしい点は、GPUなどをもっていないマルチコアのIntel CPUでも実行できるという点にある。
mediapipeのopenvinoへの実装例では、手のランドマークの検出が、ノートパソコンのCPUでも応答性よく動作する点にある。
https://docs.openvino.ai/2024/openvino-workflow/model-preparation/convert-model-to-ir.html
https://docs.openvino.ai/2024/ovms_docs_mediapipe.htmlo
- 既存のフレームワーク(例:Pytorch、TensorRT)の使い方に詳しくなります。
- cuda関連も含めて、機械学習系のライブラリはだいぶ癖があります。
- 例:いっけん使っていないように見えるimport 文だが、消すと動作しなくなるスクリプトとかがある。
import pycuda.autoinit
with torch.no_grad():