結論
Android上でPytorchのモデルを動かすには現時点(2024/9)では、Pytorch Mobileが適切なようです。
PyTorch Executorとは
PyTorch Executorは、モバイルや組み込みデバイス向けに最適化されたPyTorchのサブセットで、以下のような特徴があります:
主な特徴
-
ポータビリティ: スマートフォンから組み込みシステム、マイクロコントローラーまで幅広いプラットフォームに対応
-
生産性: PyTorchのツールチェーンやSDKを使って、モデル作成からデバッグ、デプロイメントまで一貫して開発可能
-
パフォーマンス: 軽量なランタイムとハードウェア(CPU、NPU、DSPなど)の能力を最大限に活用
パフォーマンスと安定性
-
メモリ使用量が少なく、動的メモリフットプリントが小さいため、PyTorch Mobileと比較して優れたパフォーマンスとポータビリティを実現
-
コアランタイムライブラリはカーネルやバックエンドなしで50kB未満とコンパクト
-
実行オーバーヘッドが低く、オペレーションあたりマイクロ秒からナノ秒オーダーの処理が可能
-
メモリ管理が効率的で、定数テンソルは.pteファイルデータを直接参照し、コピーを回避
-
バックエンドデリゲートを使用して、アーキテクチャ固有の最適化や異種アーキテクチャの活用が可能
開発ツール
-
プロファイリング機能を提供し、モデルのロード時間、オペレータレベルの実行時間、推論の全体実行時間などを測定可能
-
実行されたオペレータをPythonコードの該当行にリンクバックできるユニークな機能あり
-
デバッグやプロファイリングのためのSDKとツールチェーンを提供
ただし、一部のユーザーからは特定のモデル(MobileNet V3など)でPyTorch Mobileよりも遅いケースが報告されており、使用するモデルや設定によってはさらなる最適化が必要な可能性があります。全体としては、ExecuTorchは軽量で効率的なランタイムを提供し、幅広いデバイスでの推論に適していると言えます。
このページは、PyTorchのExecuTorchフレームワークを使用してAndroidデモアプリを構築する方法について説明しています。以下に主要なポイントを解説します:
ExecuTorch Android Demo Appの要約
https://pytorch.org/executorch/stable/demo-apps-android.html
ExecuTorchは、モバイルや組み込みデバイス向けに最適化されたPyTorchのサブセットです。このガイドでは、画像セグメンテーションタスク用のモデルを使用したAndroidデモアプリの構築方法を説明しています。ExecuTorchを使用してAndroidアプリに機械学習モデルを組み込む方法を示す実践的なガイドとなっています。
主要なステップ
-
環境設定:
- Android NDKのダウンロードとインストール
- 対応OS: CentOS, macOS Ventura (M1/x86_64)
- Qualcomm HTP使用時は追加の要件あり
-
モデルのエクスポート:
- XNNPACKバックエンド用またはQualcomm Hexagon NPU用にモデルをエクスポート
- 生成されたモデルファイルをアプリのassetsディレクトリにコピー
-
ランタイムのビルド:
- XNNPACKまたはQualcomm Hexagon NPU用のExecuTorchランタイムライブラリをビルド
- CMakeを使用してビルド
- JNIラッパーを含む
libexecutorch_jni.so
を生成
-
デバイスへのデプロイ:
- ビルドしたライブラリとモデルファイルをアプリのディレクトリ構造に配置
- Qualcomm HTP使用時は追加のライブラリが必要
-
アプリの実行:
- Android Studioでプロジェクトを開く
- アプリをビルドして実行
技術的ポイント
- ExecuTorchは、モバイルデバイス上で効率的に動作するように最適化されています。
- XNNPACKとQualcomm Hexagon NPUの2つのバックエンドオプションが提供されています。
- JNIを使用してネイティブライブラリをJavaコードから呼び出しています。
- CMakeを使用してクロスコンパイルを行い、Android用のライブラリを生成しています。
引用:
[1] https://pytorch.org/executorch/stable/llm/getting-started.html
[2] https://pytorch.org/tutorials/recipes/recipes/benchmark.html
[3] https://pytorch.org/executorch/stable/intro-how-it-works
[4] https://pytorch.org/executorch/stable/runtime-overview.html
[5] https://pytorch.org/executorch/stable/intro-overview.html
[6] https://www.exxactcorp.com/blog/Deep-Learning/pytorch-1-7-0-now-available
[7] https://pytorch.org/executorch/stable/sdk-profiling.html
[8] https://github.com/pytorch/executorch/issues/4005