メインコンテンツまでスキップ

診断とデバッグ

グラフレポート​

GraphReport は、構造化された診断情報を記録します。

  • パイプライン文字列(再現用)
  • 標準的なerror_code(機械によるトリアージ)
  • repro_note(人間による要約+ヒント)
  • ノードレポートと所有要素名
  • バスのメッセージとエラーの詳細
  • オプションのフロー/タイミングカウンタ

エラーが発生した場合、NeatError は、ログに記録したり、シリアライズしたりできる GraphReport を含みます。

エラー分類​

フレームワークのエラーには、安定したコードファミリーが使用されます。

エラーコード意味一般的な解決策
misconfig.pipeline_shapeノードの順序/形状に関する制約違反パッシュ型パイプラインでは、最初にInput()を、プル型パイプラインでは最後にOutput()を配置するようにしてください。
misconfig.capsフレームワークの caps-override または隣接するノードの契約の不一致caps_override と宣言されたノードの契約を一致させる
misconfig.input_shape入力テンソル/フレーム/サンプルの形状またはデータ型が、モデルの要件と一致しません。期待される形状とデータ型を指定するか、モデルの前処理を設定してください。
misconfig.runtime_abi_mismatchNeatとランタイムプラグインが互換性のないABIを使用していますバージョンが一致するNeat Libraryとランタイムをインストールしてください
misconfig.graph_element_nameカスタム要素に固定のノード名を割り当てることはできませんカスタム要素に、固定で一意の名前を付けてください
misconfig.input_capacity入力画像が、前処理の入力容量を超えていますinput_max_width / input_max_height を大きくするか、モデル処理の前に画像を縮小してください
misconfig.media_caps隣接するGStreamerステージでは、互換性のないメディア機能が要求されています。フォーマット、解像度、フレームレートを調整するか、変換を挿入してください。
misconfig.media_formatステージでサポートされていないメディア形式が使用されていますサポートされている形式を設定するか、形式変換を挿入してください
misconfig.tensor_dtype_missingテンソルコントラクトにdtype/フォーマットがありません。上流のコントラクトでサポートされているテンソルのdtypeを宣言してください。
misconfig.option_out_of_range現在のテンソルに対して、選択されたステージオプションが無効です。診断で示されている範囲内の値を選択してください。
build.parse_launchgst_parse_launch の失敗は、それ以上の詳細な分類ができません。詳細については、添付されているレポートでパーサーのコンテキストを確認してください。
build.pipeline_syntaxカスタム GStreamer フラグメントの構文が無効です。フラグメントを修正し、検証します。 gst-launch-1.0
build.plugin_missing必要な GStreamer 要素またはコーデックプラグインがインストールされていませんインストールまたは置き換えを行い、gst-inspect-1.0 で確認してください
build.property_invalid要素のプロパティが不明または無効ですプロパティ名と値を確認してください。gst-inspect-1.0 を使用して確認します。
runtime.pullより具体的な根本原因が特定されないまま、プル操作が失敗しました。添付のレポートと、最初に発生した上流のエラーを確認してください。
runtime.element_failedより具体的なマッピングがないため、あるステージが失敗しました。報告されたステージとその上流の入力を修正します。
runtime.output_timeout観測タイムアウト内にカーネルが完了しませんでした。完了または検証済みのデバイス復旧まで、対象バッファを保持してください。
runtime.unexpected_eosパイプラインが、必要な出力が生成される前にEOS(End of Stream)に到達しました。ソースからの早期EOSと、十分な入力が供給されているかを確認してください。
io.parseJSONまたはステージ構成の解析/スキーマの処理に失敗しました構成の構文と必須フィールドを検証してください
io.openグラフの保存/読み込みファイルのオープン/読み込み/書き込みに失敗しましたパスの存在、アクセス権、およびストレージの状態を確認してください
io.file_not_found入力ファイルが存在しませんパスを修正し、ファイルがDevKitに存在することを確認してください
io.permission_deniedファイルまたはデバイスが読み取り可能ではありません所有者/権限を修正してください
io.rtsp_connection_failedRTSPソースに接続できませんURL、接続可能性、サーバー、および認証情報を確認してください
io.camera_not_found要求されたカメラは利用できません利用可能なカメラを選択するか、デフォルトのカメラを使用してください
io.model_not_found要求されたモデルアーカイブが存在しませんモデルのパスを修正し、インストールされていることを確認してください
io.source_ended入力ソースが通常終了に達しました入力の停止、または追加の入力の提供をお願いします
codec.invalid_h264_stream入力に有効なH.264フレームが含まれていません完全なH.264ストリームを供給するか、コーデックを修正してください
codec.decode_failedストリームの受信後、デコーダーが失敗しましたコーデックと入力の整合性を確認してください
codec.encode_failed提供されたフレームのエンコードに失敗しました入力形式、解像度、およびエンコーダーの設定を確認してください
resource.memory_allocation_failed必要なメモリの割り当てに失敗しました。ワークロードのメモリ使用量を減らし、他のアプリケーションまたはパイプラインで使用されているメモリを解放してください。
resource.device_memory_exhaustedデバイスのDMA/CMA割り当てに失敗しました。同時ストリーム数、解像度、またはバッファリングを減らしてください。
resource.output_pool_exhaustedすべての出力バッファが使用中ですゼロコピー出力を解放するか、所有権のあるコピーを使用してください
resource.buffer_too_smallバッファーのサイズが、宣言されたペイロードよりも小さい正しいサイズ/ストライドを指定するか、必要なバイト数を割り当てる
resource.disk_fullストレージがいっぱいで書き込みに失敗しました空き容量を増やすか、別の保存先を選択してください
infra.dispatcher_unavailableアクセラレーターのランタイムを取得できません。他の処理を停止し、DevKitとの互換性を確認してください。
infra.accelerator_execution_failedアクセラレータがモデルのステージを実行できませんでした。パイプラインを再起動し、同時実行されるアクセラレータの処理量を減らしてください。
DispatcherUnavailableinfra.dispatcher_unavailable の古い表記ハンドラーを標準のインフラストラクチャコードに移行する
internal.plugin_failureユーザーが対応できるような分類なしに、プラグインがエラーを起こしました。エラーレポートを記録し、サポートに連絡してください。

PullError.code は、同じ分類(例外パスだけでなく)を使用します。 C++およびPythonの定数名と、以前の粗いコードに一致するアプリケーションの移行ガイダンスについては、エラーコードカタログ を参照してください。

プロダクションメッセージでは、意図的に GStreamer の内部構造を省略します。プラグインのデバッグの詳細度を上げると、生のGErrorドメイン/コード、要素ファクトリ、メッセージ、および構造化されたプラグインの詳細が追加されます。URIユーザー情報、auth、playback-token、hdnts、stream-key、および tkn を含む、認識された認証情報とURLの秘密パラメータは、どちらかの形式で保存する前に削除されます。レポートに表示されるパイプライン文字列、ノードフラグメント、再現コマンド、およびシリアライズされたJSONは、内部で保持されている実行可能なパイプラインを変更せずに削除されます。

プログラムによる処理​

#include "pipeline/ErrorCodes.h"
#include "pipeline/NeatError.h"

try {
auto run = graph.build(input);
simaai::neat::Sample out;
simaai::neat::PullError perr;
const auto st = run.pull(500, out, &perr);
if (st == simaai::neat::PullStatus::Error) {
if (perr.code == simaai::neat::error_codes::kMediaCaps) {
// Fix the incompatible upstream/downstream media contract.
} else {
// Handle another specific code, including future codes, or report it.
}
}
} catch (const simaai::neat::NeatError& e) {
if (e.report().error_code == simaai::neat::error_codes::kPluginMissing) {
// Install or replace the missing GStreamer component.
}
}

デバッグ用設定(環境)​

重要な環境変数(詳細はアーキテクチャを参照):

  • SIMA_GST_DOT_DIR: 失敗したテストのグラフをDOT形式で出力します。
  • SIMA_GST_BOUNDARY_PROBES:境界フローカウンタ
  • SIMA_GST_ELEMENT_TIMINGS:要素ごとのタイミング
  • SIMA_GST_FLOW_DEBUG:要素ごとのフローカウンタ
  • SIMA_GST_ENFORCE_NAMES: 名付け規則を強制する

NeatError::what() と GraphReport.repro_note に、編集された生の GStreamer コンテキストを追加するには、エラーが発生したコマンドの両方の変数を設定します。

SIMA_NEAT_VERBOSE_LEVEL=2 \
SIMA_NEAT_VERBOSE_TOPICS=gstreamer \
./your-neat-application

NEAT_LOG_LEVEL=debug は Neat Library の設定ではありません。通常の使用時には、詳細な出力を無効にしておいてください。これは、短い診断実行のために設計されており、認識された認証フィールドは削除されますが、デプロイ固有のパスやメディアのアドレスが含まれる場合があります。

デバッグワークフロー​

  1. まず、GraphReport.error_code を記録し、エラーの種類ごとに分類して集計します。
  2. 具体的な状況と組み込みのヒントを把握するために、GraphReport.repro_note を記録してください。
  3. パイプラインの説明テキスト:Graph::describe_backend() または last_pipeline()。
  4. 構造化された診断情報を取得します:MeasureReport::to_text() または NeatError::report()。
  5. GraphReport.bus を調べて、最初の端末で発生した ERROR の原因と詳細を確認してください。
  6. ランタイムが停止またはタイムアウトした場合、フローの停止箇所を特定するために、境界または要素プローブを有効にします。

推奨されるサポートバンドル:

  • error_code
  • repro_note
  • 完全なpipeline_string
  • 最初の3~5件の端末バスエラー(GraphReport.bus)
  • run/validate で使用される環境変数の上書き設定

顧客のグラフパフォーマンスに関するアーティファクト​

スループット、レイテンシー、電力に関するレポートを作成する際は、グラフ形式で出力される JSON 形式の使用を推奨します。

Run run = graph.build(RunOptions{});

TelemetryMonitor telemetry_monitor; // board power, temperatures, CPU usage, and memory
telemetry_monitor.start();
auto scope = run.start_measurement();
// run your normal push/pull loop here, then:
auto report = scope.stop();
Telemetry telemetry = telemetry_monitor.stop();
std::cout << report.to_text() << telemetry;

エクスポートは、スコープを明確に保ちます。

  • run.graph_metrics.throughput_fpsは、グラフ全体の主要な指標です。run.graph_metrics.powerは、非推奨のRunOptions::enable_board_power()を使用した場合にのみ値が設定されます。代わりにTelemetryMonitorを使用してください。
  • run.node_metrics[] には、ノード/プラグインの遅延のみが含まれており、ノード/プラグインの消費電力は意図的に含まれていません。
  • latency_semanticsとaggregationは、値がプログラム実行期間全体の値であるか、測定された特定の時間間隔における変化量であるかを示します。
  • plugin_metrics_unattributed[] は、正確に1つのノードにマッピングできなかったカーネル/プラグインの行を保持します。

測定対象のウィンドウについては、Run::start_measurement() を使用し、返された MeasureReport を run_to_json(run, report, ...) / save_run_json(run, report, ...) に渡します。測定ウィンドウノードの min_ms / max_ms は、ウィンドウローカルカウンターなしで累積最小/最大カウンターを正確に減算できないため、利用不可とマークされます。

補足:現在のDVTボードは、オプションの配線とJSONの形式を検証できますが、そのワット数測定値は数値的に信頼できるものとして扱われません。電力数値の検証には、SOMハードウェアを意図したプラットフォームとして使用してください。

よくある不具合とその修正方法​

症状考えられる原因解決策
missing ... pluginGStreamerプラグインが見つかりません。GST_PLUGIN_PATHを確認し、gst-inspect-1.0 <plugin>を実行してください。
appsink 'mysink' not found終端ノードがありません Output()Output が、実行/ビルド パイプラインの最後のノードになっていることを確認してください
caps_override is set; renegotiation disabledCapsロックが有効削除 caps_override または入力された大文字の状態を維持
tensor caps change not supportedランタイムにおけるテンソルの形状/データ型の変更テンソルの形状/データ型を安定した状態に保つ(再ネゴシエーションなし)

構造化されたプラグインのエラーと、それに対する具体的な解決策については、トラブルシューティング を参照してください。

プラットフォームのランタイム復旧​

Platform 3.0.0 では、利用できないディスパッチャーは調査すべきエラーです。従来のサービスを起動する要求ではありません。Core はディスパッチャーのエラーに応じて MLA メモリを初期化したり、リモートプロセッサーをリセットしたりしません。従来の復旧コードとスクリプトは削除されています。プラットフォームが承認する復旧手順を使用してください。

ドライバーが完了状態を不明と報告した場合は、その DMA バッファーと元のプールからの借用を保持してください。ファイル記述子を閉じること、アプリケーションを停止すること、サービスを再起動することは、ハードウェアによるメモリアクセスが停止した証拠にはなりません。障害情報を収集し、再試行の前にプラットフォームが承認する復旧手順を実行してください。

Core と Scheduler のパッケージを一致させる​

その Core リリース向けに選択された Scheduler パッケージ一式とともに Core をインストールしてください。Scheduler が対応する Runner、Kernels、Codecs、ファームウェアの依存関係を管理します。公開 C++ ABI が同じだけでは、ランタイムの互換性は保証されません。

build.sh が選択する公開済み依存関係を使用するか、--scheduler PATH で対応する完全な Scheduler DEB 一式を指定してください。ローカル依存関係を参照してください。

ボードを更新する場合は、Neat Library のインストールまたは更新に従って Core の完全なバンドルをインストールしてください。選択された Scheduler インストーラーがパッケージ一式を検証し、ファームウェアの有効化を管理します。検証に失敗した場合は、対応する Core/Scheduler バンドルを入手してください。記録を書き換えたり、互換性のないランタイムやファームウェアの個別パッケージを強制的にインストールしたりしないでください。