よくある質問
このドキュメントは、 Qualcomm® AI Hub Workbench でよくある質問やジョブの失敗理由の回答を目的としています。参考としてご利用いただき、 AI Hub Slack で気軽に質問してください。
一般
Qualcomm® AI Hub Workbench に送信されたモデルは実際のデバイス上で動作しますか?
はい、私たちは複数のデバイスファームを通じて数千の実際のデバイスをホストしています。 Qualcomm® AI Hub Workbench を使用して特定のデバイスでモデルを実行するとき、デバイスを取得し、OSとモデルを実行するために必要なすべてのフレームワークをインストールします。その後、Workbenchで提示されるすべてのメトリクスを捉えるためにそのデバイスでモデルを実行します。このプロセスが完了すると、デバイスを解放します。Workbenchに提出されたすべてのジョブに対してこのプロセスを繰り返します。利用可能なすべてのデバイスを確認するには、 qai-hub list-devices を実行してください。
Qualcomm® AI Hub Workbench 上でのデバイスプロビジョニングはどのように機能しますか?Workbench で複数のユーザーが同時に異なるデバイスでモデルを実行することは可能ですか?
はい。多くのデバイスがあり、すべてのデバイスでモデルを並行して実行できます。実際のデバイスが取得されると、そのデバイスには特定のモデルのみが実行されます。
はい、ユーザーがジョブを提出すると、各ジョブに対して別々のデバイスが取得され、正確なメトリクスが提供されます。
Qualcomm® AI Hub Workbench でジョブを送信するためのどのようにAPIトークンを設定すればよいですか?
Qualcomm MyAccountを作成したら、 Qualcomm® AI Hub Workbench にログインし、設定ページに移動してユニークなAPIトークンを取得します。詳細な手順については、このトピックに関する ハウツービデオ を見ることをお勧めします。
Qualcomm® AI Hub Workbench 上で自分のジョブを閲覧できるように、チームメンバーや他のチームのメンバーを追加するにはどうすればよいですか?
Qualcomm® AI Hub Workbench のジョブは自動的に組織と共有できます。チームに Workbench アカウントを持つ開発者を追加したい場合は、メールアドレスを記載して ai-hub-support@qti.qualcomm.com までメールを送信してください。
Qualcomm® AI Hub Workbench ジョブは組織外およびQualcommと共有してサポートを受けることもできます。ジョブの右上にある「Share」ボタンをクリックし、Workbenchユーザーのメールアドレスを指定すると、ジョブ(および関連するモデル資産)が共有されます。メールアドレスをジョブから削除することでアクセスを取り消すこともできます。
Qualcomm® AI Hub Workbench で最適化済みモデルはどこで見つけられますか?
以下の場所のいずれかにアクセスして、AI Hubで事前に最適化されたモデルを見つけることができます。現在150以上の最適化済みモデルが利用可能で、常に新しいモデルを追加しています。
Qualcomm® AI Hub Models, Qualcomm's Hugging Face, Qualcomm® AI Hub Models
Qualcomm® AI Hub Workbench 、Qualcomm® AI Hub Models 、 Qualcomm® AI Hub Apps の違いは何ですか?
Qualcomm® AI Hub には 3 つの側面があります。Qualcomm® AI Hub Workbench はオンデバイス AI のためのプラットフォームです。任意のモデルを持ち込み、任意のデバイスをターゲットにし、任意のランタイムを使用して、数分以内に最適化されたデプロイ可能なアセットを作成できます。 Qualcomm® AI Hub Models は、既にモデルをお持ちでない場合にモデル選択を支援するための事前最適化済みモデルです。さまざまな Qualcomm® デバイス上で Qualcomm® AI Hub Workbench で実行した各モデルのパフォーマンス指標を確認し、モデルアセットを簡単にダウンロードできます。 Qualcomm® AI Hub Apps は、モデルや Qualcomm® AI Hub Models をアプリケーションに統合し、 Qualcomm® AI Hub Workbench で達成された最適化パフォーマンスに一致する方法を学ぶためのサンプルアプリのセットです。
自分のモデルを持ち込んで Qualcomm® AI Hub Workbench で実行できますか?
はい。この機能は「Bring Your Own Model(BYOM)」と呼ばれることが多く、誰でも利用可能です!ただし、どのモデルが成功するかには既知の制限があります。モデルがコンパイルに失敗する理由は次のとおりです:
モデルが大きい(例:> 2GB)。
モデルがPyTorchでトレースに失敗する可能性があります。エラーメッセージに従ってモデルを変更してください:
モデルにブランチ(if/else)がある場合、
torch.jit.trace中にcheck_trace=Falseを設定すると問題が解決します。
LLM/GenAIモデルはすぐには動作しない可能性があります:
これらの大規模モデルは、デバイス上で効果的に動作させるために量子化が必要になることがよくあります。ガイドラインについては、 LLM tutorial を参照してください。
その他の変換問題:
変換が内部で失敗することがあります。不明なエラーメッセージ(例:内部デバイスエラー)が表示された場合はお知らせください。問題を迅速に調査するために最善を尽くします。サポートされるモデルは常に増え続けています!
コンパイルジョブが失敗した場合、提供された入力仕様がモデルと互換性があることを確認してください。
Qualcomm® AI Hub Workbench で最初のジョブを提出するには、how-to video on this topic の視聴をお勧めします。ジョブ提出時に問題が発生した場合は、ai-hub-support@qti.qualcomm.com までメールするか、AI Hub Slack でご連絡ください!調査できるように、必ず Job ID を含めてください。
HuggingFace のモデルで、Qualcomm® AI Hub Models に含まれていないものを試すことはできますか?
はい!これらは試すのに最適なモデルです。もし、ユースケースに適したモデルで当社のリストにないものがある場合は、<https://huggingface.co/models>__ を確認してモデルを選択してください。その後、必要なパッケージをインポートし、Qualcomm® AI Hub Workbench 上でコンパイルジョブを送信する前にモデルをトレースできます。ジョブ送信時の一般的なエラーについては以下をご覧ください。
実機上で Qualcomm® AI Hub Workbench を使って量子化されたモデルを実行できますか?
はい。Qualcomm® AI Hub Models にはいくつかの量子化済みモデルが掲載されており、モデル精度セクションでフィルタリングすることで、これらのモデルのパフォーマンスを確認できます。これらはすでにさまざまな Qualcomm デバイスで実行済みです。これらのモデルは AIMET で量子化されています。希望するモデルが見つからない場合は、独自のモデルを量子化してコンパイルし、その後 Qualcomm® AI Hub Workbench を介して実機で推論を実行できます。量子化には、 Qualcomm® AI Hub Workbench 上でジョブを送信して 量子化 を使用することを推奨します。これにより、非量子化の ONNX を入力として受け取り、量子化された出力を生成します。その後、量子化済みモデルを再コンパイルできます。
Qualcomm® AI Hub Workbench で特定のデバイスでモデルを実行するにはどうすればよいですか?
モデルを送信する際には、対象とするデバイスを指定する必要があります。利用可能なデバイスの一覧を取得するには qai-hub list-devices を実行してください。その後、デバイス名または属性のいずれかを指定してデバイスを選択できます。たとえば、device = hub.Device(attributes="qualcomm-snapdragon-845") は 845 チップを搭載した任意のデバイスで実行され、device=hub.Device("QCS6490 (Proxy)") は 6490 プロキシデバイス上でのみ実行されます。
デバイスファミリーやプロキシデバイスなどの特別なデバイスタイプについて詳しくは、Devices ページ <device-types> を参照してください。
AI Hub を使用する際の一般的な開発者ワークフローとは何ですか?
ステップ1:使用ケースに適したモデルを選択します。Qualcomm® AI Hub Models から選ぶか、独自のモデルを持ち込みます。
ステップ2:学習済みモデル(PyTorch、ONNX、AIMET量子化モデル)を指定されたデバイス用にコンパイルするためにコンパイルジョブを送信します(利用可能なデバイスを確認するにはqai-hub list-devicesを使用します)および desired target runtime。
ステップ3:クラウドにホストされている実際のデバイスでコンパイル済みモデルを実行し、パフォーマンスを分析するためにプロファイルジョブを送信します(例:レイテンシ目標、メモリ制限、希望する計算ユニットで実行されているかどうか)。ここで、モデルのパフォーマンスに関する豊富なメトリクス, レイヤーごとのタイミング、各レイヤーの可視化、読み込みおよび推論時間、ジョブが失敗した場合に重要なランタイムログ情報などを取得できます。
ステップ4:入力データをアップロードし、実際のデバイスで推論を実行し、出力結果をダウンロードするために推論ジョブを送信します。
ステップ5:オンデバイス出力に対して必要な後処理計算を行い、モデルの精度を確認します。
ステップ6: 最適化済みモデルをプログラムでダウンロードし、アプリケーションに統合します。モデルをアプリケーションに統合する際の参考として、 サンプルアプリ をご覧ください。
推論ジョブとプロファイルジョブでモデルのレイテンシーが異なるのはなぜですか?
プロファイルジョブを送信すると、指定されたデバイスで推論が100回実行されます。これは、アプリケーションに組み込む際に予想される所要時間を正確に把握するためです。最初の反復は、起動時間やキャッシュのウォームアップなどの理由で最も遅くなることがよくあります。プロファイルジョブ中に推論が実行される回数は、 max_profiler_iterations オプションでカスタマイズできます。一方、推論ジョブは指定されたデバイスで1回のみ実行されます。これは、モデルが数値的に同等であり、ダウンロードおよびデプロイ可能であることを確認するための精度計算を行うことが主な目的です。
Qualcomm® AI Hub Workbench を使用してモデルを実行し、最適化済みモデルをダウンロードしました。次は何をすればよいですか?
良い質問です!次のステップは、モデルアセットをアプリにバンドルし、ターゲットエッジデバイス(モバイル、IOT、コンピュートなど)に展開することです。これを行う方法についての サンプルアプリ がいくつかあり、さらに提供するために取り組んでいます。特に Qualcomm® AI Engine Direct を使用する場合の .bin ファイルの統合については、 これらのドキュメント をチェックしてください。私たちは、このトピックに関するサンプルアプリや情報を追加するために積極的に取り組んでいます。RB3 Gen 2に展開するIOT顧客向けには、 AI Hub Modelsからの最適化済みモデルと一緒にFoundries.ioを活用することをお勧めします。
AI Hubに公開されているモデルのライセンス条件は何ですか?これらのモデルをアプリに使用してユーザーにリリースできますか?
AI Hub Modelsは、事前に最適化されたオープンソースモデルのコレクションを紹介しています。各モデルのライセンスは、対応するモデルページに記載されています。
独自のモデルを持ち込んだ場合のライセンス条件はどうなりますか?これはQualcommの知的財産になりますか?
Qualcomm® AI Hub Workbench はデバイス用にモデルを最適化するためのプラットフォームです。"独自のモデルを持ち込む" 場合、AI Hubから得られるデプロイされたアセットは通常、モデルと同じ配布ライセンスを持ちます。それが独自の知的財産である場合、モデルはあなたのものとして配布できます。詳細は利用規約の一部として見つけることができます。
Qualcomm® AI Hub Workbench または Qualcomm® AI Hub Models を本番アプリケーションで使用する場合、またはモデルテストのために Qualcomm® AI Hub Workbench に統合する場合に料金が発生しますか?
Qualcomm® AI Hub Workbench 、私たちのプラットフォームは現在完全に無料で使用できます。モデルを送信し、コンパイルし、パフォーマンスをプロファイルして反復し、推論ジョブを送信して精度を確認し、アプリにバンドルするためのターゲットアセットをダウンロードすることをお勧めします。
私たちのモデルコレクションには、ライセンスに基づいて購入が必要な特定のモデルが含まれています。詳細についてはお問い合わせください。aihub.qualcomm.comで 'download now' と表示されているモデルは無料で使用できます。モデルページに記載されているライセンスを確認し、それに従って使用してください。
Qualcomm® AI Hub Workbench がクラウドでモデルを実行している場合、それは安全ですか?アップロードしたモデルを他のユーザーが見ることができますか?
Qualcomm® AI Hub Workbench を使用して行うすべての操作は、他のユーザーと明示的に共有しない限り、プライベートかつ安全に保護されます。これには、アップロードされたすべてのデータセットとモデル、 Qualcomm® AI Hub Workbench ジョブを通じて作成されたモデル、データセット、メトリクスが含まれます。ジョブ完了後、物理デバイスやその他のクラウドコンピューティング環境の一時ストレージから顧客の成果物は消去されます。他のユーザーがあなたの個人情報を見ることはできません。
Qualcommがデータを収集・使用する方法についての詳細は、Qualcomm privacy policy をご参照ください。ご不明な点がございましたら、email us までご連絡ください。
チームメンバーを組織に追加するにはどうすればよいですか?
各ユーザーには独自の組織があり、ユーザーのモデルとデータはその組織内で安全に保管され、アクセスはユーザー自身と組織に追加された人々に限定されます。AI Hubで組織に誰かを追加したい場合はお知らせください。そうすれば、彼らはあなたのジョブを見たり、逆も可能です。
特定のジョブに誰かを追加したい場合は、ジョブの右上にある共有ボタンを使用してそのメールアドレスを追加することをお勧めします。
AI Hubの変更点はどのようにわかりますか?
リリースノートは、Qualcomm® AI Hub Workbench 、Qualcomm® AI Hub Models 、 Qualcomm® AI Hub Apps について、公開され次第 AI Hub Slack に投稿しています! また、ドキュメント 内 でもご確認いただけます。
モデル形式
なぜ Qualcomm® AI Hub Models は一部のモデルに対して TensorFlow Lite の結果のみを提供するのですか?
事前に最適化された100以上のモデルのコレクションを見ると、モデルに応じて TensorFlow Lite または Qualcomm® AI Engine Direct の結果のみが表示される場合があります。両方のパスのパフォーマンス結果を提供するために取り組んでおり、その場合、TorchScript → TensorFlow Lite および TorchScript → Qualcomm® AI Engine Direct のドロップダウンが表示され、表示したいパフォーマンス数値を選択できます。さらに、 Compute Models を見ると、該当する場合、TorchScript → ONNX Runtime のパフォーマンス結果も表示されます。
どのパスをお勧めしますか?TensorFlow Lite、ONNX Runtime、または Qualcomm® AI Engine Direct?
モデルによっては、あるパスが他のパスよりも高速である既知の問題があります。私たちの継続的な目標は、これらの問題を追跡し、パス全体で解決することです。ほとんどのモデルでは、最適化するにつれて、ほぼ同じパフォーマンスを期待できます。最終的には、すべてのパスが同じQNNおよび同じハードウェアに導かれるため、基本的に異なることは何もありません。TensorFlow Lite は TensorFlow Lite Delegateを介してHexagon NPUにアクセスし、ONNX Runtime は ONNX 実行プロバイダーを介してHexagon NPUにアクセスし、Qualcomm® AI Engine Direct はもちろんHexagon NPUを活用します。
モバイルデバイスにデプロイするAndroid開発者には TensorFlow Lite、ラップトップにデプロイするWindows開発者には ONNX Runtime、およびSOC/オペレーティングシステムに応じて Qualcomm® AI Engine Direct をお勧めします。異なるランタイムを試し、ターゲットデバイスに最適なパフォーマンスを提供するパスを使用することを強くお勧めします。
ここでは、選択されたパスおよび指定されたランタイムに関係なく、QNNが使用され、該当する場合はHexagon NPUが活用されるアーキテクチャ図を示します。Workbenchは常に最適な計算ユニットでモデルを実行します。
どの Qualcomm® AI Engine Direct モデル形式を使用すべきですか?
Qualcomm® AI Engine Direct SDK は、デバイス上実行のために 2 つの形式をサポートしています: コンテキストバイナリ(.bin)とディープラーニングコンテナ(.dlc)です。これらには、ランタイム性能に影響を与える重要な違いがあります。
ディープラーニングコンテナ(DLC)は、SoC 非依存のネットワーク表現を含みます。通常、この OS 非依存形式は、デバイス固有の最適化を行う前段階として、QNN レベルでグラフデータ構造を構築するために使用されます。
コンテキストバイナリは、OS 非依存かつ HTP 固有の表現です。特定の SoC 向けにグラフを準備するために使用され(すなわち、特定の HTP 向けに Hexagon コンパイラを QNN から呼び出せるようにする)、その結果得られたデータ構造を保存します。Hexagon コンパイラは使用される HTP に関する前提条件を持つため、コンテキストバイナリは特定の HTP をターゲットとした場合にのみ最良の性能を発揮します。古いデバイス向けにビルドされたバイナリを新しいチップで使用できる場合もありますが、性能が低下する可能性があります。
最適なパフォーマンスを達成するために、
qnn-context-binary-generatorに正しいsoc_modelを指定してください。正しい値は、 Qualcomm® AI Engine Direct の Overview にあるサポートされているSnapdragonデバイスの表を参照することで見つけることができます。また、SDKのdocs/QNN/index.htmlにあり、Overviewリンクをたどることでも確認できます。また、 Qualcomm® AI Hub Workbench ランタイムログの上部近くに、 Qualcomm® SoCをターゲットにしたデバイスに関する情報が記載されています。
Qualcomm® AI Engine Direct モデル形式の概要
形式 |
バックエンド |
OSに依存しない |
SoCに依存しない |
読み込み時間 |
推論パフォーマンス |
|---|---|---|---|---|---|
ライブラリ |
任意 |
いいえ |
はい |
長い |
最適 |
DLC |
任意 |
はい |
はい |
長い [1] |
最適 |
コンテキストバイナリ |
HTP |
はい |
いいえ |
最速 |
最適 [2] |
プロキシデバイスから実際のハードウェアにアセットをデプロイできますか?
要約 -- TensorFlow Lite および ONNX Runtime アセットは問題ありませんが、QNNモデル形式には問題があるかもしれません。
過去には、AI Hub の Workbench および Models にプロキシデバイスが追加され、AI Hub でサポートされていない人気デバイスと同等の性能特性を持つ SoC 搭載デバイスへのプロファイリングや推論アクセスを提供する手段として利用されていました。例えば、RB3 Gen 2 に搭載されている QCS6490 は、複数のモバイルデバイスに採用されている SM7325 と本質的に同じチップです。これはベンチマークや精度評価に非常に有用ですが、QNN モデル形式を生成する際には課題が生じることがあります。
コンテキストバイナリはSoC固有です。プロキシデバイスをターゲットにすることで実際のデバイスで良好なパフォーマンスが得られると期待していますが、これは文書化された保証ではありません。
場合によっては、まったく異なるQNN SDKのフレーバーが使用されます。例えば、すべての自動車用プロキシデバイスはモバイルデバイスですが、すべてのCockpit、ADAS、およびFlexデバイスは、同じ世代の自動車用およびモバイルチップの違い(例:SA8295PのV68 HTPでのfp16サポート)を認識している特定の自動車用SDKの使用を必要とします。
幸いなことに、サードパーティのフレームワークは読み込み時に最適化を行うことでこれらの問題をすべて回避し、TensorFlow Lite および ONNX Runtime アセットをこの状況でデプロイするのに適した選択肢にします。
オプションの受け渡し
計算ユニットをどのように指定すればよいですか?
Qualcomm® AI Hub Workbench でジョブを送信する際は、オプション --compute_unit <units> を使用して、モデルを実行したいコンピュートユニットを指定してください。複数のコンピュートユニットを指定する場合は、カンマで区切ります。例: --compute_unit npu,cpu。 このトピックに関する ハウツー動画 をご覧いただくことをお勧めします。
ターゲットランタイムをどのように指定すればよいですか?
Qualcomm® AI Hub Workbench は、TensorFlow Lite、ONNX Runtime、および Qualcomm® AI Engine Direct (コンテキストバイナリおよび Qualcomm® Deep Learning Container)をターゲットランタイムとしてサポートしています。コンパイルジョブを送信する際に --target_runtime <runtime> オプションを使用してランタイムを指定してください。このトピックについては、ハウツー動画 を確認することをおすすめします。
NPUを活用していることをどのように確認すればよいですか?
各ターゲットランタイムには、利用可能なハードウェアを最大限に活用するための独自の戦略があります。パフォーマンスと機能のトレードオフがあります:NPUは最高のパフォーマンスを提供する傾向がありますが、計算できるものが最も制限されています。逆に、CPUはニューラルネットワーク推論に最適化されていませんが、任意の操作を実行できます。複数のハードウェアバックエンドをサポートするランタイムは、GPUまたはCPUにフォールバックする前に可能な限り多くのネットワークをNPUで実行します。
NPUの使用を有効にするには、ランタイムを(1)それを使用するように構成し、(2)ネットワークがサポートされていない操作やパラメータを使用しないようにする必要があります。
デフォルトでは、Qualcomm® AI Hub Workbench は、NPU を優先して使用し、その後 GPU や CPU にフォールバックするランタイムを構成します。NPU の使用を*必須*とするには、コンパイル/ランタイムオプション --compute_unit npu を指定してください。また、qnn_dlc などの QNN ターゲットランタイムの使用も検討してください。
NPUからレイヤーが外れる一般的な理由には、未対応のopや未対応のランク(rank)が含まれます。特に、ランクが ≥ 5の場合はサポートが制限されることがあります。このような状況が、異種ディスパッチをサポートするランタイム(例:TensorFlow Lite)で発生した場合、これらのレイヤーは単純にGPUまたはCPUにフォールバックされるべきです。場合によっては、ネットワーク全体がNPUから外れることもあります。これは、デバイス上でネットワークを準備する際に予期しないエラーが発生した場合に起こる可能性があります。そのような場合、ネットワークはGPUまたはCPU上で実行されます。このような事象が発生した場合は、AI Hub Slack にご連絡ください。こちらでジョブの確認をさせていただきます。
最適化オプションをどのように指定すればよいですか?
デフォルトでは、 Qualcomm® AI Hub Workbench は常にランタイムパフォーマンスのためにモデルを最適化します。時折、これが問題になることがあります。大規模なモデルは、Hexagonコンパイラが単に多くの作業を行うため、ジョブがタイムアウトする原因となることがあります。まれに、より高い最適化レベルが悪いコードを生成することがあります。そのような場合、最適化レベルを下げることが理にかなっているかもしれません。方法はターゲットランタイム環境によって異なります。
NPU をターゲットとする Qualcomm® AI Engine Direct (例:
--target_runtime=qnn_dlc --compute_unit all)の場合、--qnn_options=default_graph_htp_optimization_value=xを使用します。ここでxは1または2です。qnn_lib_*を使用する場合、Hexagon のコンパイルは デバイス上 で行われますが、qnn_context_binaryをターゲットとする場合は、モデル変換時に事前実行されます。NPUへの委任が成功した Qualcomm® AI Engine Direct に委任する TensorFlow Lite の場合(例:
--target_runtime=tflite)、--tflite_options=kHtpOptimizeForPrepareを使用します。これにより、QNN最適化レベルが1に設定されます。tfliteをターゲットにする場合、Hexagonコンパイルは常にデバイス上で行われます。
一般的なジョブの失敗と既知の問題
コンパイルジョブがopが欠落しているというエラーメッセージで失敗しました。どうすればよいですか?
ONNXからTensorflowへの変換中にエラーが発生しました:Op 'xx' はまだ実装されていません というエラーが発生した場合は、AI Hub Slack でお問い合わせください。opサポートの追加を優先することができるかもしれません(またはすでに進行中かもしれません)。そうでない場合、適用可能な場合は回避策を提供することができます。
ドキュメントに記載されているオプションを渡したにもかかわらずジョブが失敗しました。どうすればよいですか?
正しいジョブタイプ(例:コンパイル対プロファイル)にオプションを渡していることを確認してください。例えば、--quantize_full_type はコンパイルジョブオプションです。プロファイルジョブに渡すと失敗します。それでも問題が発生する場合は、AI Hub Slack でお問い合わせください。
Hugging Faceからのモデルが "DictConstruct" がサポートされていないために失敗しました。どうすればよいですか?
model.config.return_dict = False に設定することを推奨します。デフォルトは true です。Workbench は現在、辞書型の出力を自動的に処理できません。この対応はバックログに含まれています。その間の回避策として、辞書をタプルに変換するラッパーモジュールを作成する方法があります。
プロファイルジョブが「request feature arch with value [0-9]+ unsupported」というエラーで失敗しました。これは何を意味しますか?
このエラーは、コンテキストバイナリがターゲットデバイスがサポートするHexagonアーキテクチャの新しいバージョン用にビルドされた場合に表示されます。この問題を修正するには、プロファイリングまたは推論に使用されるデバイスでソースモデルを再コンパイルしてください。
プロファイルジョブがエラーコード3110で失敗しました。なぜですか?
このエラーは、モデルがデバイス用に準備できないことを意味します。これが発生する理由はいくつかあります:
Floatがサポートされていません。ノードのタイプでエラーコード3110で失敗しました。3110エラーは、ノードの入力または出力タイプがQNNバックエンドでサポートされていない場合に発生します。これは、適切に量子化されていないノードや、量子化されていないテンソルが通過する場合に発生し、エラーが発生します。この問題を修正するには、モデルを量子化(または再量子化)してください。オペレーター定義と制約は HTP Backend Op Definition Supplement で見つけることができます。
サポートされていないrankです。多くのopsは<5Dのみをサポートしています。一部は5Dをサポートしていますが、>5Dをサポートしているものはありません。
サポートされていないタイプ。多くのopsはすべてのタイプをサポートしていません。このエラーは[u]int32レイヤーで非常に一般的です。
プロファイルジョブが失敗しました。エラーコード: 1002 at location qnn_model.cc:167 onnxruntime::qnn::QnnModel::FinalizeGraphs。どうすればよいですか?
ランタイムログに有益な情報が含まれていない場合は、以下のオプションを使用して再度プロファイルすることを推奨します: --runtime_debug=true --max_profiler_iterations=1。これらの設定により、ランタイムログが問題の原因に関する追加情報を提供することがあります。
デプロイメント
なぜ私のモデルは Qualcomm® AI Hub Workbench よりもデバイス上で遅く動作するのですか?
Workbenchでは、モデルをできるだけ早く実行するための現実的な環境を作成しようとしています。開発者がユーザーインターフェースを持つアプリに最も頻繁にデプロイすることを前提としているため、プロファイラはそのように実装されています。デフォルトでは、可能な限り最高の電力設定で実行し、最速の推論を実現します。これらの選択の結果を見てみましょう。
スケジューリングの優先順位
Workbenchのプロファイラは、すべてのサポートされているモバイルおよび自動車デバイス上のAndroidアプリケーションです。これは、カーネルレベルで優先的なスケジューリングの恩恵を受けることを意味します。Androidは、応答性の高いユーザーインターフェースを提供するために、デフォルトでこれを行います。これには、 adb shell を介して実行される可能性のあるCLIツール, qnn-net-run を含む, にはこのポリシーが適用されません。これにより、GUIツールとCLIツールの間にパフォーマンスのギャップが生じます。65台の異なるAndroidデバイスでMobileNetV2を実行する試験では、CLIバージョンのプロファイラを使用した場合、実際のGUIを使用した場合と比較して 平均 [3] 9.7%の遅延が見られました。GUIアプリと同じスケジューリング優先度でCLIツールを実行するには、ルート権限で nice -n -10 YOUR_TOOL を使用します。
電源設定
デフォルトでは、 Qualcomm® AI Hub Workbench はすべてのモバイルデバイスで BURST 電源設定を要求します。これにより、通常の設定よりも実行速度が大幅に向上します。アプリでこれを有効にする手順は、使用するMLフレームワークによって異なります。 ONNX Runtime および TensorFlow Lite には、これを代わりに設定するオプションがあります。 Qualcomm® AI Engine Direct の場合、上記のページに記載されているように、電圧コーナーやその他のオプションを個別に設定する必要があります。
プロファイル設定
詳細なプロファイリングデータを収集すること(例:qnn-net-run --profiling_level detailed)は、かなりのオーバーヘッドを引き起こす可能性があります。ネットワークレイヤーの相対的なランタイムを比較する必要がある場合にのみ、これらの設定を使用してください。
その他の設定
AI Hub Workbenchがフレームワークのデフォルトからオーバーライドする設定(指定したものを含む)は、推論およびプロファイルジョブページの "Runtime Configuration" 設定にあります。特に fp16_relaxed_precision がデフォルトで有効になっていることに注意してください。
中央値:5.3%; 最小:-3.6%; 最大:58.0%。
HTPを使用しようとするとエラー 1008 が表示されるのはなぜですか?
エラー 1008 、別名 QNN_COMMON_ERROR_INCOMPATIBLE_BINARIES は、通常、HTPの初期化に失敗したことを示します。ほとんどの場合、HTP [4] 上で実行されるコードを含むライブラリが見つからないためです。ほとんどのプラットフォームでは、環境変数 ADSP_LIBRARY_PATH をデバイスのDSPアーキテクチャ [5] に対応するスケルファイルを含むディレクトリに設定する必要があります。詳細については、 このQNNチュートリアル をご覧ください。
それでも動作しません。私はWindowsを使用しています
確認すべき追加の事項が2つあります。
まず、スケルトンファイルは QnnHtp.dll と同じディレクトリにある必要があります。他のプラットフォームと同様に ADSP_LIBRARY_PATH が機能することを示唆するドキュメントを見たことがありますが、私たちの経験では、Windowsでは無視されることが多いです。
次に、Windowsでは、スケルトンと一緒に配布される .cat ファイルが利用可能である必要があります。スケルトンライブラリをアプリケーションの実行可能ディレクトリにコピーする際に、.cat ファイルを忘れないでください。
つまり、CPU上ではありません。これがWindowsで .so ファイルである理由です。
例:v68またはv75
自動車デバイスでHTPを使用するにはどうすればよいですか?
自動車用ゲストVMでHTPを使用するには、上記のように ADSP_LIBRARY_PATH を設定する以外に追加の手順が必要です。具体的には、これらのファイルは QNNホストからゲストVMの ADSP_LIBRARY_PATH 内のディレクトリにコピーする必要があります。通常、適切なスケルトンライブラリを含むディレクトリです。
/dspfw および /dsplib パーティションを持つターゲットの場合:
/dsplib/image/dsp/cdsp0/libc++.so.1/dsplib/image/dsp/cdsp0/libc++abi.so.1
/dspfw および /dsplib パーティションがないターゲットの場合:
/mnt/etc/images/cdsp0/libc++.so.1/mnt/etc/images/cdsp0/libc++abi.so.1
この内容でカバーされていない追加の質問がある場合は、AI Hub Slack にお問い合わせください。