From bf06c93952ec6cb875e8252e3e64e03b300bc0ba Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 2 Sep 2026 22:30:07 -0500 Subject: [PATCH 01/16] feat(am62d-audioai): add config files and buildable doc skeleton Signed-off-by: JuneChul Roh --- configs/AM62DX/AM62DX_audioai_config.txt | 41 +++++++++++++++++++ configs/AM62DX/AM62DX_audioai_tags.py | 6 +++ configs/AM62DX/AM62DX_audioai_toc.txt | 5 +++ .../audioai/compile_evaluate_inspect.rst | 7 ++++ source/devices/AM62DX/audioai/index.rst | 20 +++++++++ .../devices/AM62DX/audioai/introduction.rst | 7 ++++ source/devices/AM62DX/audioai/model_zoo.rst | 7 ++++ source/devices/AM62DX/audioai/performance.rst | 7 ++++ source/devices/AM62DX/audioai/version.txt | 1 + 9 files changed, 101 insertions(+) create mode 100644 configs/AM62DX/AM62DX_audioai_config.txt create mode 100644 configs/AM62DX/AM62DX_audioai_tags.py create mode 100644 configs/AM62DX/AM62DX_audioai_toc.txt create mode 100644 source/devices/AM62DX/audioai/compile_evaluate_inspect.rst create mode 100644 source/devices/AM62DX/audioai/index.rst create mode 100644 source/devices/AM62DX/audioai/introduction.rst create mode 100644 source/devices/AM62DX/audioai/model_zoo.rst create mode 100644 source/devices/AM62DX/audioai/performance.rst create mode 100644 source/devices/AM62DX/audioai/version.txt diff --git a/configs/AM62DX/AM62DX_audioai_config.txt b/configs/AM62DX/AM62DX_audioai_config.txt new file mode 100644 index 000000000..49404d3c6 --- /dev/null +++ b/configs/AM62DX/AM62DX_audioai_config.txt @@ -0,0 +1,41 @@ +# General family replacement variables and configuration values for AM62D Audio AI build + +# This file is processed by Python scripts to define both replacement +# variable and configuration values for a device family build. +# For replacement variables, all variables should be listed on a single +# line, and all the variables should be listed on consecutive lines +# (i.e. no additional blank lines between the replacement variables). +# Similarly, all the configuration values should be listed on individual, +# consecutive lines (with no blank linues between the configuration values). +# +# Note that neither replacement variables nor configuration values may contain +# a colon (i.e. ":") in their name. However, values may contain colons. + +Replacement Variables +--------------------- +'__PART_FAMILY_NAME__' : 'AM62Dx' +'__PART_FAMILY_DEVICE_NAMES__' : 'AM62Dx' +'__PRODUCT_LINE_NAME__' : 'Sitara MPU' +'__SDK_FULL_NAME__' : 'Processor SDK Linux Audio AI AM62Dx' +'__SDK_SHORT_NAME__' : 'PSDK Audio AI' +'__SDK_DOWNLOAD_URL__' : '`AM62D-SDK-Download-page `__' +'__AUDIOAI_SDK_VERSION__' : '12.1' +'__TIDL_VERSION__' : '11_02_18_00' +'__TIDL_TOOLS_VERSION__' : '11.2.x' +'__MODELZOO_REPO_URL__' : 'https://bitbucket.itg.ti.com/projects/AUDIOAI-ALGO/repos/audioai-modelzoo' +'__TIDLRUNNER_REPO_URL__' : 'https://bitbucket.itg.ti.com/projects/EDGEAI-ALGO/repos/edgeai-tidlrunner' +'__TIDL_TOOLS_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidl-tools' +'__TARGET_VENV_PATH__' : '~/venv/modelzoo' +'__DATASET_AUDIO_CLS__' : 'UrbanSound8K' +'__DATASET_SPEECH_ENH__' : 'VoiceBank-DEMAND-16k' +'__MODEL_ID_VGGISH11__' : 'ac-0101' +'__MODEL_ID_YAMNET__' : 'ac-0201' +'__MODEL_ID_GCRN__' : 'ase-0201' +'__MODEL_ID_GTCRN__' : 'ase-0100' + +Configuration Values +-------------------- +'CONFIG_part_family' : 'AM62DX_family' +'CONFIG_part_variant' : 'AM62DX' +'CONFIG_sdk' : 'SITARA' + diff --git a/configs/AM62DX/AM62DX_audioai_tags.py b/configs/AM62DX/AM62DX_audioai_tags.py new file mode 100644 index 000000000..66d9fecca --- /dev/null +++ b/configs/AM62DX/AM62DX_audioai_tags.py @@ -0,0 +1,6 @@ +# Project name and HTML title +project = u'Audio AI SDK for AM62D' +html_title = 'Audio AI SDK for AM62D Documentation' + +# The master toctree document. +master_doc = 'devices/AM62DX/audioai/index' diff --git a/configs/AM62DX/AM62DX_audioai_toc.txt b/configs/AM62DX/AM62DX_audioai_toc.txt new file mode 100644 index 000000000..eb0fe05ae --- /dev/null +++ b/configs/AM62DX/AM62DX_audioai_toc.txt @@ -0,0 +1,5 @@ +devices/AM62DX/audioai/index +devices/AM62DX/audioai/introduction +devices/AM62DX/audioai/model_zoo +devices/AM62DX/audioai/compile_evaluate_inspect +devices/AM62DX/audioai/performance diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst new file mode 100644 index 000000000..9d575aa1b --- /dev/null +++ b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst @@ -0,0 +1,7 @@ +.. _audioai-compile-evaluate-inspect: + +############################ +Compile / Evaluate / Inspect +############################ + +Placeholder for the x86 compile, evaluate, and inspect workflow. diff --git a/source/devices/AM62DX/audioai/index.rst b/source/devices/AM62DX/audioai/index.rst new file mode 100644 index 000000000..abd48a647 --- /dev/null +++ b/source/devices/AM62DX/audioai/index.rst @@ -0,0 +1,20 @@ +.. _audioai-index: + +********************************************* +AM62D Audio AI Software Developer's Guide +********************************************* + +.. rubric:: Welcome to the AM62D Audio AI/DL Software Developer's Guide + +.. toctree:: + :maxdepth: 5 + :numbered: + + introduction + model_zoo + compile_evaluate_inspect + performance + ++--------------------------------+--------------------------------------------------------------------------------------------------+ +| .. Image:: /images/E2e.jpg | For technical support please post your questions at `http://e2e.ti.com `__. | ++--------------------------------+--------------------------------------------------------------------------------------------------+ diff --git a/source/devices/AM62DX/audioai/introduction.rst b/source/devices/AM62DX/audioai/introduction.rst new file mode 100644 index 000000000..315e2e504 --- /dev/null +++ b/source/devices/AM62DX/audioai/introduction.rst @@ -0,0 +1,7 @@ +.. _audioai-introduction: + +####################### +Introduction & Overview +####################### + +Placeholder for the AM62D Audio AI introduction and TVM + TIDL framework overview. diff --git a/source/devices/AM62DX/audioai/model_zoo.rst b/source/devices/AM62DX/audioai/model_zoo.rst new file mode 100644 index 000000000..f4aa9e608 --- /dev/null +++ b/source/devices/AM62DX/audioai/model_zoo.rst @@ -0,0 +1,7 @@ +.. _audioai-model-zoo: + +################## +Audio AI Model Zoo +################## + +Placeholder for the AM62D Audio AI Model Zoo on-target demos. diff --git a/source/devices/AM62DX/audioai/performance.rst b/source/devices/AM62DX/audioai/performance.rst new file mode 100644 index 000000000..829344546 --- /dev/null +++ b/source/devices/AM62DX/audioai/performance.rst @@ -0,0 +1,7 @@ +.. _audioai-performance: + +##################### +Performance Benchmark +##################### + +Placeholder for the AM62D Audio AI performance benchmark tables. diff --git a/source/devices/AM62DX/audioai/version.txt b/source/devices/AM62DX/audioai/version.txt new file mode 100644 index 000000000..9df24b162 --- /dev/null +++ b/source/devices/AM62DX/audioai/version.txt @@ -0,0 +1 @@ +12_01_00_00 From f1bd267df1523870f9770359e53b9e6bf3a272dc Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 2 Sep 2026 22:38:34 -0500 Subject: [PATCH 02/16] feat(am62d-audioai): add Section 1 introduction with TVM+TIDL diagram Signed-off-by: JuneChul Roh --- .../devices/AM62DX/audioai/introduction.rst | 99 +++++++++++++++++- source/images/audioai/tvm_tidl_flow.drawio | 86 +++++++++++++++ source/images/audioai/tvm_tidl_flow.png | Bin 0 -> 119800 bytes source/images/audioai/tvm_tidl_flow.svg | 4 + 4 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 source/images/audioai/tvm_tidl_flow.drawio create mode 100644 source/images/audioai/tvm_tidl_flow.png create mode 100644 source/images/audioai/tvm_tidl_flow.svg diff --git a/source/devices/AM62DX/audioai/introduction.rst b/source/devices/AM62DX/audioai/introduction.rst index 315e2e504..a8ba7b25e 100644 --- a/source/devices/AM62DX/audioai/introduction.rst +++ b/source/devices/AM62DX/audioai/introduction.rst @@ -4,4 +4,101 @@ Introduction & Overview ####################### -Placeholder for the AM62D Audio AI introduction and TVM + TIDL framework overview. +.. |tm| unicode:: U+2122 + +This guide documents the audio deep-learning (Audio AI/DL) models supported on +the |__PART_FAMILY_NAME__| platform in |__SDK_FULL_NAME__| |__AUDIOAI_SDK_VERSION__|. +It is written for embedded developers who want to run, compile, evaluate, and +benchmark the supported audio models on the AM62D — either out of the box on the +target with pre-compiled artifacts, or through the x86 compile/evaluate workflow. + +The remaining sections cover: + +- :ref:`Audio AI Model Zoo ` — out-of-box demos on the AM62D + target (inference scripts and Jupyter notebooks) using pre-trained models and + pre-compiled artifacts. +- :ref:`Compile / Evaluate / Inspect ` — the + x86 workflow built on ``edgeai-tidlrunner``: compile each model for the AM62D, + evaluate accuracy on a dataset, and inspect the compiled subgraphs. +- :ref:`Performance benchmark ` — latency and memory + methodology with per-model tables. + +******************** +Supported models +******************** + +Four models are supported, in two task families. Every model is delivered as an +`ONNX `__ graph and, except for GTCRN, is offloaded to the +C7x\ |tm| NPU through the TVM runtime (TVM-RT); GTCRN is the one model that runs +ARM-only. See :ref:`the framework overview ` below for what +that means. + +Audio analysis and classification +================================== + +**VGGish11** (model ID |__MODEL_ID_VGGISH11__|) + Audio-clip classification. Input is a log-mel patch of shape ``(1, 1, 64, 126)``; + output is ``(1, 10)`` class logits plus a ``(1, 512)`` embedding. Runs at 8-bit, + fully offloaded to the C7x\ |tm| NPU via TVM-RT (a single TIDL subgraph). + +**YAMNet** (model ID |__MODEL_ID_YAMNET__|) + Audio-event classification. Input is a log-mel patch of shape ``(1, 1, 96, 64)``; + output is ``(1, 521)`` class scores. Runs at 8-bit, fully offloaded to the + C7x\ |tm| NPU via TVM-RT (a single TIDL subgraph). + +Both classification models are evaluated on the |__DATASET_AUDIO_CLS__| dataset. + +Speech enhancement +================== + +**GCRN** (model ID |__MODEL_ID_GCRN__|) + Convolutional-recurrent speech enhancement (denoising) over a fixed 4-second + window. Input and output are complex spectrograms of shape ``(1, 2, 401, 161)``. + Runs at 16-bit and is offloaded to the C7x\ |tm| NPU via TVM-RT + (``tidl_offload: true``). + +**GTCRN** (model ID |__MODEL_ID_GTCRN__|) + Grouped temporal convolutional-recurrent speech enhancement. Input and output + are complex spectrograms of shape ``(1, 257, T, 2)`` with a dynamic time + dimension ``T``. Runs FP32 on the Arm core through the ONNX runtime + (``tidl_offload: false``) — it is the only supported model that is **not** + offloaded to the C7x\ |tm| NPU. + +Both speech-enhancement models are evaluated on the |__DATASET_SPEECH_ENH__| +dataset. + +.. _audioai-tvm-tidl: + +************************** +TVM + TIDL framework +************************** + +The AM62D audio models are compiled and deployed with **TI TVM**, TI's fork of +the `Apache TVM `__ deep-learning compiler. TI TVM +integrates **TIDL** (TI Deep Learning) as an accelerator backend so that the +layers TIDL supports execute with optimized C7x\ |tm| NPU performance, while any +remaining layers are covered by TVM's own C7x\ |tm| NPU code generation. The +result is a single deployable artifact in which the **entire model runs on the +C7x**\ |tm| **NPU**. + +Compilation runs on an x86 host and proceeds in stages: + +#. **Model import** — the ONNX graph is imported into TVM. +#. **Partitioning** — using the TIDL import API, the graph is split into + TIDL-supported subgraphs (compiled by the TIDL network compiler) and the + remaining operators (handled by TVM C7x\ |tm| NPU code generation). +#. **Artifact generation** — both parts are packaged into one TVM-RT deployable + artifact (``deploy_lib.so`` + ``deploy_graph.json`` + ``deploy_param.params``). + +At run time on the AM62D, the TVM runtime loads the artifact and dispatches the +offloaded subgraphs to TIDL-RT on the C7x\ |tm| NPU. + +.. figure:: ../../../images/audioai/tvm_tidl_flow.png + :scale: 55 % + :align: center + + TVM + TIDL compile-and-deploy flow for the AM62D audio models. Green blocks + are handled by TIDL; white blocks are handled by TVM. VGGish11, YAMNet, and + GCRN follow this offloaded path; GTCRN runs ARM-only on the ONNX runtime. + +.. TODO(WI-002): confirm the TVM + TIDL diagram concept with Anand Pathak before release. diff --git a/source/images/audioai/tvm_tidl_flow.drawio b/source/images/audioai/tvm_tidl_flow.drawio new file mode 100644 index 000000000..83b434ea0 --- /dev/null +++ b/source/images/audioai/tvm_tidl_flow.drawio @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/images/audioai/tvm_tidl_flow.png b/source/images/audioai/tvm_tidl_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5406f2f7682b7413a9265fe6c6e274d654066a GIT binary patch literal 119800 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 o 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

RSk8#NJoIAje- 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� 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 literal 127058 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

D35`ep2CUdAJM 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%0A(8MS+NIxyif-cVTcJCuu1YslYz-se;s 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�M93OUky0q1rI}k7G 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 HDWM4fUJuQ; diff --git a/source/images/audioai/tvm_tidl_flow.svg b/source/images/audioai/tvm_tidl_flow.svg index 5ca407e59..7d5920868 100644 --- a/source/images/audioai/tvm_tidl_flow.svg +++ b/source/images/audioai/tvm_tidl_flow.svg @@ -1,4 +1,4 @@ -
ONNX audio model
(YAMNet, VGGish11, GCRN)
Model import into TVM
Partitioning
TIDL import API
TVM C7x™ DSP
code generation
TIDL network compiler
TVM-RT deployable artifact
(deploy_lib.so + graph.json + params)
compile time (x86)
run time (AM62D)
TVM runtime
TIDL-RT
Arm® core
C7x™ NPU
TIDL unsupported ops
TIDL supported ops
Text is not SVG - cannot display
\ No newline at end of file +
ONNX audio model
Model import into TVM
Partitioning
TIDL import API
TVM C7™ DSP
code generation
TIDL network compiler
TVM-RT deployable artifact
(deploy_lib.so + graph.json + params)
compile time (x86)
run time (AM62D)
TVM runtime
TIDL-RT
C7™ NPU
TIDL unsupported ops
TIDL supported ops
Text is not SVG - cannot display
\ No newline at end of file From c0b64716835d9f49a88dd77b22272f7803003502 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Thu, 10 Sep 2026 22:37:40 -0500 Subject: [PATCH 08/16] docs(am62d-audioai): reconcile compile/eval/inspect with standalone AM62D setup Signed-off-by: JuneChul Roh --- .../audioai/compile_evaluate_inspect.rst | 153 +++++++----------- 1 file changed, 61 insertions(+), 92 deletions(-) diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst index b2a3de826..6556d933a 100644 --- a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst +++ b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst @@ -53,13 +53,16 @@ All commands are run from the repository root (``edgeai-tidlrunner/``) and take ``--config_path `` pointing at the per-model YAML. The same config file is reused across ``compile``, ``infer``, and ``evaluate``. +.. _audioai-am62d-setup: + ******************** Setup ******************** -Model compilation runs on an x86 PC (Ubuntu Linux recommended). The TIDL tools -used for compilation target Python 3.10, so create a dedicated Python 3.10 -environment. These steps assume `pyenv `__. +Model compilation runs on an x86 PC (Ubuntu Linux recommended). The AM62D audio +flow is self-contained: a single setup script installs the whole TVM toolchain +into a dedicated Python 3.10 environment. The TIDL tools target Python 3.10. +These steps assume `pyenv `__. **1. Clone the repository** (|__TIDLRUNNER_REPO_URL__|): @@ -68,36 +71,62 @@ environment. These steps assume `pyenv `__. $ git clone https://github.com/TexasInstruments/edgeai-tidlrunner.git $ cd edgeai-tidlrunner -**2. Create and activate the Python 3.10 environment.** +**2. Create and activate a dedicated Python 3.10 environment.** The AM62D flow +uses a release-candidate TVM wheel; keep it in its own venv (``tidlrunner-am62d``) +so it never clobbers a standard ``tidlrunner`` setup: .. code-block:: console $ pyenv install 3.10 - $ pyenv virtualenv 3.10 tidlrunner - $ pyenv activate tidlrunner + $ pyenv virtualenv 3.10 tidlrunner-am62d + $ pyenv activate tidlrunner-am62d -**3. Run the PC setup script.** This downloads the TIDL tools into -``tools/tidl_tools_package/`` and installs the runner: +**3. Run the AM62D setup script.** With the venv active, one script installs +everything this flow needs: .. code-block:: console - $ ./setup_runner_pc.sh + $ ./devices/setup_am62d.sh -The TIDL tools version is pinned by ``TIDL_TOOLS_VERSION`` inside -``setup_runner_pc.sh`` and can be overridden on the command line. **The tools -version used to compile must match the version on the target** — artifacts -compiled for a different TIDL version will not run: +It downloads the ARM GCC 15.2 and C7000 CGT 5.0.0.LTS cross-toolchains into +``tools/tidl_tools_package/bin/`` (skipped if already present), installs the +release-candidate x86 TVM wheel — which bundles the AM62D x86 TIDL tools *inside* +the package — and installs ``tidlrunner[pc,audio]``, ``tools``, ``onnxruntime``, +and ``tidl_onnx_model_optimizer``. The ``[audio]`` extra pulls in the audio +packages (``librosa``, ``soundfile``, ``scipy``, ``pesq``, ``pystoi``, +``scikit-learn``). No separate ``pip install`` is needed. + +**4. Source the env script once per shell.** TVM ``dlopen``\ s the TIDL runtime +(``libvx_tidl_rt.so``) before Python's own import runs, so the tool paths must be +live in the shell *before* ``tidlrunner-cli`` starts. Source — do **not** execute +— ``devices/am62d_env.sh`` once; every ``tidlrunner-cli`` command run afterward in +that shell picks the vars up: .. code-block:: console - $ TIDL_TOOLS_VERSION="11.2.x" ./setup_runner_pc.sh + $ source devices/am62d_env.sh -**4. Install the audio extras.** The audio pipelines need extra Python packages -(``librosa``, ``soundfile``, ``scipy``, ``pesq``, ``pystoi``, ``scikit-learn``): +It exports: -.. code-block:: console +.. list-table:: + :header-rows: 1 + :widths: 26 74 - $ pip install -e "tidlrunner[audio]" + * - Variable + - Value + * - ``TIDL_TOOLS_PATH`` + - ``/3rdparty/x86_tidl_tools/AM62D`` (resolved from the + active venv's installed ``tvm``) + * - ``LD_LIBRARY_PATH`` + - prepends ``TIDL_TOOLS_PATH`` so ``libvx_tidl_rt.so`` resolves + * - ``ARM64_GCC_PATH`` + - the aarch64 GNU toolchain installed by ``setup_am62d.sh`` under + ``tools/tidl_tools_package/bin/`` (override by exporting before sourcing) + * - ``CGT7X_ROOT`` + - the C7000 code-generation tools installed by ``setup_am62d.sh`` under + ``tools/tidl_tools_package/bin/`` (override by exporting before sourcing) + * - ``SOC`` + - ``am62d`` Datasets ======== @@ -120,76 +149,22 @@ The classification configs use UrbanSound8K **fold 10** (837 samples) as the test set; the speech-enhancement configs use the VoiceBank-DEMAND-16k test set (824 files). -.. _audioai-am62d-interim-setup: - -Interim AM62D TVM-RT compile path -================================= - -.. warning:: - - The AM62D C7\ |tm| NPU compile path for the three TVM-RT models (VGGish11, - YAMNet, GCRN) is currently an **interim feasibility flow**, not the - productized ``setup_runner_pc.sh`` / ``TIDL_TOOLS_VERSION`` download. It is - documented here for reproducibility and will be replaced before release. - -The three TVM-RT models compile through a **dedicated environment** -(``tidlrunner-am62d``) that has the release-candidate TVM wheel installed. That -wheel ships the x86 AM62D TIDL tools *inside* the package, so the AM62D compile -uses the wheel-bundled tools rather than the ones ``setup_runner_pc.sh`` -downloads. TVM ``dlopen``\ s the TIDL runtime before Python's own import runs, -so the tool paths must be exported into the environment *before* ``tidlrunner-cli`` -starts. A sourceable env script, ``devices/am62d_env.sh``, exports these into -the current shell once; every ``tidlrunner-cli`` command run afterward in that -shell picks them up. It exports: - -.. list-table:: - :header-rows: 1 - :widths: 26 74 - - * - Variable - - Value - * - ``TIDL_TOOLS_PATH`` - - ``/3rdparty/x86_tidl_tools/AM62D`` (resolved from the - active venv's installed ``tvm``) - * - ``LD_LIBRARY_PATH`` - - prepends ``TIDL_TOOLS_PATH`` so ``libvx_tidl_rt.so`` resolves - * - ``ARM64_GCC_PATH`` - - path to your aarch64 GNU toolchain (e.g. ````) - * - ``CGT7X_ROOT`` - - path to your C7000 code-generation tools (e.g. ````) - * - ``SOC`` - - ``am62d`` - -Activate the dedicated environment, then source the env script once per shell -before running ``tidlrunner-cli`` directly: +The reference ONNX models auto-download at compile time via ``.link`` files, so +fetching them ahead of time is optional. To pre-download all four: .. code-block:: console - $ pyenv activate tidlrunner-am62d - $ source devices/am62d_env.sh - $ tidlrunner-cli compile --config_path - -.. note:: - - GTCRN does **not** need this env script. It runs ARM-only through ONNX - Runtime (``tidl_offload: false``) and compiles under the standard - ``tidlrunner`` environment from steps 1–4. - -.. TODO: replace the interim ``devices/am62d_env.sh`` env script + - ``tidlrunner-am62d`` venv with the productized ``setup_runner_pc.sh`` / - ``TIDL_TOOLS_VERSION`` AM62D flow before release. Confirm the final tools - version string (artifact folder 11_02_18_00 vs. RC bundled tools 11.02.16.00). + $ bash examples/audio/scripts/download_audio_models.sh ******************** Compile and evaluate ******************** -Each model has one config that drives all stages. Three models compile to the -C7\ |tm| NPU through the TVM runtime; GTCRN is the ONNX-RT exception that runs -ARM-only. The three TVM-RT models below assume the AM62D env from -`Interim AM62D TVM-RT compile path`_ — ``pyenv activate tidlrunner-am62d`` -followed by ``source devices/am62d_env.sh`` — is already sourced in the -current shell. The final AM62D config paths are: +Each model has one config that drives all stages. All four run under the +``tidlrunner-am62d`` environment with ``devices/am62d_env.sh`` already sourced +(see `Setup`_). Three models compile to the C7\ |tm| NPU through the TVM runtime; +GTCRN runs ARM-only through ONNX Runtime (no C7\ |tm| NPU offload) but uses the +same environment. The AM62D config paths are: .. list-table:: :header-rows: 1 @@ -265,20 +240,15 @@ GTCRN (ONNX-RT, ARM-only) GTCRN has a dynamic time axis and TIDL-unsupported operators, so it runs on the Arm Cortex-A cores through ONNX Runtime (``tidl_offload: false``) — no C7\ |tm| NPU -offload and **no** AM62D wrapper. Run it directly under the standard -``tidlrunner`` environment: +offload. It uses the same ``tidlrunner-am62d`` environment as the other models; +it simply does not offload to the DSP: .. code-block:: console - $ pyenv activate tidlrunner $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gtcrn_dns3_config.yaml - $ tidlrunner-cli compile --config_path $CFG --target_device AM62D - $ tidlrunner-cli infer --config_path $CFG --target_device AM62D - $ tidlrunner-cli evaluate --config_path $CFG --target_device AM62D - -.. note:: - - + $ tidlrunner-cli compile --config_path $CFG + $ tidlrunner-cli infer --config_path $CFG + $ tidlrunner-cli evaluate --config_path $CFG ******************** Model Inspector @@ -317,8 +287,7 @@ Because GCRN now compiles with ``tidl_offload: true`` on AM62D, its inspector report shows a **real C7x DSP subgraph** rather than an all-Arm fallback: the Subgraphs tab lists a single offloaded subgraph (16-bit) with its layer mapping, and the Performance tab breaks that subgraph down by cycles and memory. -Generate it with the AM62D env sourced (see -`Interim AM62D TVM-RT compile path`_): +Generate it with the AM62D env sourced (see `Setup`_): .. code-block:: console From 319271f89fe10b1ecbe3a0945824bedfed2a9f1f Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Tue, 22 Sep 2026 18:43:21 -0500 Subject: [PATCH 09/16] docs(am62d-audioai): strip prompt symbol from copy button output Audio AI docs prefix every shell command with "$ "; configure copybutton to strip it so copied text is directly runnable. Signed-off-by: JuneChul Roh --- conf.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/conf.py b/conf.py index c84b2b8c9..12d9e51b8 100644 --- a/conf.py +++ b/conf.py @@ -261,6 +261,12 @@ FAMILY = os.environ.get("DEVFAMILY", "") OS = os.environ.get("OS", "") + +# Audio AI docs prefix every shell command with a "$ " prompt symbol; strip it +# from the copy-button output so copied text is directly runnable. +if OS == "audioai": + copybutton_prompt_text = "$ " + try: globals().update(importlib.import_module(f"configs.{FAMILY}.{FAMILY}_{OS}_tags").__dict__) except ModuleNotFoundError as exc: From db96350171b1a3f48958109130ef22afe8d165bc Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Tue, 22 Sep 2026 19:11:07 -0500 Subject: [PATCH 10/16] docs(am62d-audioai): update Introduction and Model Zoo sections Signed-off-by: JuneChul Roh --- .../devices/AM62DX/audioai/introduction.rst | 5 +- source/devices/AM62DX/audioai/model_zoo.rst | 113 ++++++++++++------ 2 files changed, 76 insertions(+), 42 deletions(-) diff --git a/source/devices/AM62DX/audioai/introduction.rst b/source/devices/AM62DX/audioai/introduction.rst index 2fb7c3fe1..839b1b9d1 100644 --- a/source/devices/AM62DX/audioai/introduction.rst +++ b/source/devices/AM62DX/audioai/introduction.rst @@ -125,7 +125,4 @@ offloaded subgraphs to TIDL-RT on the C7\ |tm| NPU. :align: center TVM + TIDL compile-and-deploy flow for the AM62D audio models. Green blocks - are handled by TIDL; white blocks are handled by TVM. VGGish11, YAMNet, and - GCRN follow this offloaded path; GTCRN runs ARM-only on the ONNX runtime. - -.. TODO(WI-002): confirm the TVM + TIDL diagram concept with Anand Pathak before release. + are handled by TIDL; white blocks are handled by TVM. diff --git a/source/devices/AM62DX/audioai/model_zoo.rst b/source/devices/AM62DX/audioai/model_zoo.rst index 401a589c5..db41f0963 100644 --- a/source/devices/AM62DX/audioai/model_zoo.rst +++ b/source/devices/AM62DX/audioai/model_zoo.rst @@ -53,12 +53,12 @@ What ships - Speech enhancement (|__DATASET_SPEECH_ENH__|) - |__MODEL_ID_GTCRN__| - Arm core (ONNX runtime, FP32) - - Notebook only + - Script + notebook -VGGish11, YAMNet, and GCRN each ship a pre-compiled artifact and run offloaded -to the C7\ |tm| NPU through the TVM runtime. GTCRN ships **no** compiled -artifact — it runs FP32 on the Arm core through the ONNX runtime and is -demonstrated in a notebook only. +VGGish11, YAMNet, and GCRN each ship a pre-compiled TVM-RT + TIDL artifact and +run offloaded to the C7\ |tm| NPU. GTCRN ships **no** compiled artifact — it +runs FP32 on the Arm core through the ONNX runtime, packaged as a plain ONNX +Runtime artifact. ******************** On-target setup @@ -66,7 +66,7 @@ On-target setup The steps below run on the AM62D target (aarch64), on the Linux command line of the Processor SDK rootfs. The notebooks and scripts run in a Python virtual -environment that reuses the TIDL-enabled TVM/ONNX runtime already present in the +environment that reuses the TIDL-enabled TVM runtime already present in the rootfs. **1. Clone the repository.** Clone the AudioAI ModelZoo repository @@ -78,35 +78,27 @@ rootfs. $ git clone https://github.com/TexasInstruments-Sandbox/audioai-modelzoo.git $ cd audioai-modelzoo -**2. Download the ONNX models.** Downloads the four model graphs into -``models/onnx/``: +**2. Download the model artifacts.** Downloads the three pre-compiled +TVM-RT + TIDL artifacts (VGGish11, YAMNet, GCRN) plus the GTCRN ONNX Runtime +artifact into ``model_artifacts//am62d/``: .. code-block:: console $ ./download_models.sh -y -**3. Download the compiled artifacts.** Downloads the three pre-compiled -TVM-RT + TIDL artifacts into ``model_artifacts/11_02_18_00/am62d/`` -(GTCRN has no artifact): - -.. code-block:: console - - $ ./download_artifacts.sh -y - -Both download scripts default to an interactive selection menu; the ``-y`` flag +The script defaults to an interactive selection menu; the ``-y`` flag downloads everything non-interactively. Add ``-l`` to print the source URLs without downloading. -**4. Create the virtual environment.** Creates the venv at +**3. Create the virtual environment.** Creates the venv at |__TARGET_VENV_PATH__| with ``--system-site-packages`` so the TIDL-enabled -runtime from the rootfs is visible, then verifies that -``TIDLExecutionProvider`` is available: +runtime from the rootfs is visible: .. code-block:: console - $ ./venv/setup_venv.sh + $ ./setup_venv.sh -**5. Activate the venv.** Activate it in every new shell before running the +**4. Activate the venv.** Activate it in every new shell before running the demos: .. code-block:: console @@ -117,9 +109,8 @@ demos: Inference script demos ********************** -Run each script from its own model directory in the activated venv. Three of -the four models ship a command-line script; GTCRN is demonstrated in a notebook -only (see :ref:`Jupyter notebook demos `). +Run each script from its own model directory in the activated venv. All four +models ship a command-line script. YAMNet (sound classification) ============================= @@ -203,7 +194,7 @@ the destination wav. Expected output (abridged): .. code-block:: text - Machine: aarch64 SOC: am62d TIDL_VER: 11_02_18_00 + Machine: aarch64 SOC: am62d TIDL_VER: ... Loading TVM + TIDL session... Running inference on noisy.wav (9.77s)... Wrote enhanced audio to sample_wav/enhanced.wav @@ -216,19 +207,54 @@ the destination wav. Expected output (abridged): Wrote benchmark report to sample_wav/gcrn-benchmark.md +GTCRN (speech enhancement) +========================== + +.. code-block:: console + + $ cd ~/tidl/audioai-modelzoo/inference/gtcrn_se + $ python3 gtcrn_infer_audio.py --input sample_wav/mix.wav + +Unlike the other three models, GTCRN has no TVM-RT + TIDL artifact — the script +loads the ONNX graph directly and runs it on ``CPUExecutionProvider`` (Arm +core, FP32). It writes the enhanced audio to ``enh_onnx.wav`` beside the input; +pass ``--output`` to change the destination wav. Expected output (abridged): + +.. code-block:: text + + Machine: aarch64 + Model: .../ase-0100_onnxrt_speech_enhancement_voicebank_demand_16k_gtcrn_dns3_onnx/model/gtcrn_dns3.onnx + Loading ONNX Runtime session... + Running inference on mix.wav (9.77s)... + Wrote enhanced audio to sample_wav/enh_onnx.wav + + GTCRN ONNX Runtime (CPU) benchmark (9.77s audio) + + block total (ms) + ------------------------ ---------- + pre-processing (STFT) ... + model inference ... + post-processing (iSTFT) ... + end-to-end ... + + Real-Time Factor (inference / audio) = 0.0700 + +GTCRN is already faster than real time on the Arm core, so it needs no NPU +offload. + .. _audioai-model-zoo-notebooks: ********************** Jupyter notebook demos ********************** -All four reference models — including GTCRN — have a Jupyter notebook demo. Start -Jupyter Lab from the activated venv: +All four reference models have a Jupyter notebook demo. Start Jupyter Lab from +the activated venv: .. code-block:: console $ cd ~/tidl/audioai-modelzoo - $ ./venv/jupyter_lab_venv.sh + $ ./jupyter_lab_venv.sh The launcher prints a highlighted access URL and pre-loads the four inference notebooks in tabs. Open the URL in a browser on a machine that can reach the @@ -259,19 +285,30 @@ The notebooks are: Compiled artifacts ******************** -``download_artifacts.sh`` places the pre-compiled TVM-RT + TIDL artifacts under -``model_artifacts/11_02_18_00/am62d/``: +``download_models.sh`` places the artifacts under +``model_artifacts//am62d/``. Each model gets its own directory, +named after its model ID, containing a ``model/`` folder (the trained ONNX +model) and, where applicable, an ``artifacts/`` folder (the compiled model +artifacts). VGGish11, YAMNet, and GCRN each get a pre-compiled TVM-RT + TIDL +artifact: - |__MODEL_ID_VGGISH11__| — ``ac-0101_tvmrt_audio_classification_urbansound8k_vggish11_onnx`` (VGGish11) - |__MODEL_ID_YAMNET__| — ``ac-0201_tvmrt_audio_classification_urbansound8k_yamnet_onnx`` (YAMNet) - |__MODEL_ID_GCRN__| — ``ase-0201_tvmrt_speech_enhancement_voicebank_demand_16k_gcrn_fixed_4sec_onnx`` (GCRN) -Each artifact directory holds the TVM-RT deployables (``deploy_lib.so``, -``deploy_graph.json``, ``deploy_param.params``) in both target (``.evm``, -aarch64) and host (``.pc``, x86) variants. The demo scripts and notebooks -select the ``.evm`` variant automatically on the target. +Each of those artifact directories' ``artifacts/`` folder holds the TVM-RT +deployables (``deploy_lib.so``, ``deploy_graph.json``, ``deploy_param.params``) +in both target (``.evm``, aarch64) and host (``.pc``, x86) variants. The demo +scripts and notebooks select the ``.evm`` variant automatically on the target. + +GTCRN (|__MODEL_ID_GTCRN__|) gets an ONNX Runtime artifact instead of a +compiled one: + +- |__MODEL_ID_GTCRN__| — ``ase-0100_onnxrt_speech_enhancement_voicebank_demand_16k_gtcrn_dns3_onnx`` (GTCRN) -GTCRN (|__MODEL_ID_GTCRN__|) ships **no** compiled artifact: it runs FP32 on the -Arm core through the ONNX runtime directly from its ONNX graph. These artifacts -are produced by the x86 workflow in +Its directory holds only the ``model/`` folder, with the ``gtcrn_dns3.onnx`` +graph — there is no ``artifacts/`` folder since no TIDL compilation is +involved. The demo script and notebook load the ONNX model directly with +``CPUExecutionProvider`` and run FP32 on the Arm core. Compiled TVM-RT + TIDL +artifacts for your own models are produced by the x86 workflow in :ref:`Compile / Evaluate / Inspect `. From 630cb1c9af82615a780310d3f2c0b63673f04fbe Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 23 Sep 2026 12:17:44 -0500 Subject: [PATCH 11/16] docs(am62d-audioai): Updated "Model Compile / Evaluate / Inspect" section. Signed-off-by: JuneChul Roh --- .../AM62DX/audioai/compile_evaluate_inspect.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst index 6556d933a..fa8ed0088 100644 --- a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst +++ b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst @@ -14,7 +14,7 @@ dataset — using **edgeai-tidlrunner**. It runs entirely on an Ubuntu x86 PC; nothing here touches the target. This is the workflow for *any* audio model, not just the reference models. The -four reference models below are worked examples; to bring your own model you +four reference models below are worked examples. To bring your own model you point the same ``tidlrunner-cli`` at your ONNX graph and a per-model YAML config, using a reference config as a starting template. Which operators offload to the C7\ |tm| NPU (vs. fall back to the Arm core) is determined by TIDL — see @@ -72,7 +72,7 @@ These steps assume `pyenv `__. $ cd edgeai-tidlrunner **2. Create and activate a dedicated Python 3.10 environment.** The AM62D flow -uses a release-candidate TVM wheel; keep it in its own venv (``tidlrunner-am62d``) +uses a TI TVM wheel; keep it in its own venv (``tidlrunner-am62d``) so it never clobbers a standard ``tidlrunner`` setup: .. code-block:: console @@ -90,7 +90,7 @@ everything this flow needs: It downloads the ARM GCC 15.2 and C7000 CGT 5.0.0.LTS cross-toolchains into ``tools/tidl_tools_package/bin/`` (skipped if already present), installs the -release-candidate x86 TVM wheel — which bundles the AM62D x86 TIDL tools *inside* +x86 TI TVM wheel — which bundles the AM62D x86 TIDL tools *inside* the package — and installs ``tidlrunner[pc,audio]``, ``tools``, ``onnxruntime``, and ``tidl_onnx_model_optimizer``. The ``[audio]`` extra pulls in the audio packages (``librosa``, ``soundfile``, ``scipy``, ``pesq``, ``pystoi``, @@ -146,11 +146,11 @@ sets. Download them from the repository root: They land under ``data/datasets/UrbanSound8K/`` and ``data/datasets/VoiceBank-DEMAND-16k/`` — the paths the model configs expect. The classification configs use UrbanSound8K **fold 10** (837 samples) as the -test set; the speech-enhancement configs use the VoiceBank-DEMAND-16k test set +test set; the speech-enhancement configs use the VoiceBank-DEMAND-16k **test** set (824 files). The reference ONNX models auto-download at compile time via ``.link`` files, so -fetching them ahead of time is optional. To pre-download all four: +fetching them ahead of time is **optional**. To pre-download all reference ONNX models: .. code-block:: console @@ -168,12 +168,12 @@ same environment. The AM62D config paths are: .. list-table:: :header-rows: 1 - :widths: 14 10 12 10 54 + :widths: 12 10 12 18 54 * - Model - Model ID - Runtime - - Bits + - Tensor Bits - Config path (relative to ``edgeai-tidlrunner/``) * - VGGish11 - |__MODEL_ID_VGGISH11__| @@ -188,7 +188,7 @@ same environment. The AM62D config paths are: * - GCRN - |__MODEL_ID_GCRN__| - TVM-RT - - 16 + - 16 (LSTM), FP32 (Enc/Dec) - ``data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml`` * - GTCRN - |__MODEL_ID_GTCRN__| From 6e9c9ad60b353dca5b8b65f09277a4e9c48ff9a5 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Thu, 8 Oct 2026 22:31:51 -0500 Subject: [PATCH 12/16] docs(am62d-audioai): switch build target to OS=edgeai and update model zoo URL Rename source/devices/AM62DX/audioai to edgeai and the AM62DX_audioai_* config files to AM62DX_edgeai_*. Point __MODELZOO_REPO_URL__ and the model zoo clone command to TexasInstruments/audioai-modelzoo. Signed-off-by: JuneChul Roh --- conf.py | 2 +- configs/AM62DX/AM62DX_audioai_toc.txt | 5 ----- .../{AM62DX_audioai_config.txt => AM62DX_edgeai_config.txt} | 2 +- .../AM62DX/{AM62DX_audioai_tags.py => AM62DX_edgeai_tags.py} | 2 +- configs/AM62DX/AM62DX_edgeai_toc.txt | 5 +++++ .../AM62DX/{audioai => edgeai}/compile_evaluate_inspect.rst | 0 source/devices/AM62DX/{audioai => edgeai}/index.rst | 0 source/devices/AM62DX/{audioai => edgeai}/introduction.rst | 0 source/devices/AM62DX/{audioai => edgeai}/model_zoo.rst | 2 +- source/devices/AM62DX/{audioai => edgeai}/performance.rst | 0 source/devices/AM62DX/{audioai => edgeai}/version.txt | 0 11 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 configs/AM62DX/AM62DX_audioai_toc.txt rename configs/AM62DX/{AM62DX_audioai_config.txt => AM62DX_edgeai_config.txt} (98%) rename configs/AM62DX/{AM62DX_audioai_tags.py => AM62DX_edgeai_tags.py} (76%) create mode 100644 configs/AM62DX/AM62DX_edgeai_toc.txt rename source/devices/AM62DX/{audioai => edgeai}/compile_evaluate_inspect.rst (100%) rename source/devices/AM62DX/{audioai => edgeai}/index.rst (100%) rename source/devices/AM62DX/{audioai => edgeai}/introduction.rst (100%) rename source/devices/AM62DX/{audioai => edgeai}/model_zoo.rst (99%) rename source/devices/AM62DX/{audioai => edgeai}/performance.rst (100%) rename source/devices/AM62DX/{audioai => edgeai}/version.txt (100%) diff --git a/conf.py b/conf.py index 12d9e51b8..5aa8837cf 100644 --- a/conf.py +++ b/conf.py @@ -264,7 +264,7 @@ # Audio AI docs prefix every shell command with a "$ " prompt symbol; strip it # from the copy-button output so copied text is directly runnable. -if OS == "audioai": +if OS == "edgeai" and FAMILY == "AM62DX": copybutton_prompt_text = "$ " try: diff --git a/configs/AM62DX/AM62DX_audioai_toc.txt b/configs/AM62DX/AM62DX_audioai_toc.txt deleted file mode 100644 index eb0fe05ae..000000000 --- a/configs/AM62DX/AM62DX_audioai_toc.txt +++ /dev/null @@ -1,5 +0,0 @@ -devices/AM62DX/audioai/index -devices/AM62DX/audioai/introduction -devices/AM62DX/audioai/model_zoo -devices/AM62DX/audioai/compile_evaluate_inspect -devices/AM62DX/audioai/performance diff --git a/configs/AM62DX/AM62DX_audioai_config.txt b/configs/AM62DX/AM62DX_edgeai_config.txt similarity index 98% rename from configs/AM62DX/AM62DX_audioai_config.txt rename to configs/AM62DX/AM62DX_edgeai_config.txt index fe538eb3d..c243a452e 100644 --- a/configs/AM62DX/AM62DX_audioai_config.txt +++ b/configs/AM62DX/AM62DX_edgeai_config.txt @@ -22,7 +22,7 @@ Replacement Variables '__AUDIOAI_SDK_VERSION__' : '12.1' '__TIDL_VERSION__' : '11_02_18_00' '__TIDL_TOOLS_VERSION__' : '11.2.x' -'__MODELZOO_REPO_URL__' : 'https://github.com/TexasInstruments-Sandbox/audioai-modelzoo' +'__MODELZOO_REPO_URL__' : 'https://github.com/TexasInstruments/audioai-modelzoo' '__TIDLRUNNER_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidlrunner' '__TIDL_TOOLS_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidl-tools' '__TARGET_VENV_PATH__' : '~/venv/modelzoo' diff --git a/configs/AM62DX/AM62DX_audioai_tags.py b/configs/AM62DX/AM62DX_edgeai_tags.py similarity index 76% rename from configs/AM62DX/AM62DX_audioai_tags.py rename to configs/AM62DX/AM62DX_edgeai_tags.py index 4e85bcd38..a6627eba2 100644 --- a/configs/AM62DX/AM62DX_audioai_tags.py +++ b/configs/AM62DX/AM62DX_edgeai_tags.py @@ -3,4 +3,4 @@ html_title = 'Audio AI for AM62D Documentation' # The master toctree document. -master_doc = 'devices/AM62DX/audioai/index' +master_doc = 'devices/AM62DX/edgeai/index' diff --git a/configs/AM62DX/AM62DX_edgeai_toc.txt b/configs/AM62DX/AM62DX_edgeai_toc.txt new file mode 100644 index 000000000..d69093766 --- /dev/null +++ b/configs/AM62DX/AM62DX_edgeai_toc.txt @@ -0,0 +1,5 @@ +devices/AM62DX/edgeai/index +devices/AM62DX/edgeai/introduction +devices/AM62DX/edgeai/model_zoo +devices/AM62DX/edgeai/compile_evaluate_inspect +devices/AM62DX/edgeai/performance diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/edgeai/compile_evaluate_inspect.rst similarity index 100% rename from source/devices/AM62DX/audioai/compile_evaluate_inspect.rst rename to source/devices/AM62DX/edgeai/compile_evaluate_inspect.rst diff --git a/source/devices/AM62DX/audioai/index.rst b/source/devices/AM62DX/edgeai/index.rst similarity index 100% rename from source/devices/AM62DX/audioai/index.rst rename to source/devices/AM62DX/edgeai/index.rst diff --git a/source/devices/AM62DX/audioai/introduction.rst b/source/devices/AM62DX/edgeai/introduction.rst similarity index 100% rename from source/devices/AM62DX/audioai/introduction.rst rename to source/devices/AM62DX/edgeai/introduction.rst diff --git a/source/devices/AM62DX/audioai/model_zoo.rst b/source/devices/AM62DX/edgeai/model_zoo.rst similarity index 99% rename from source/devices/AM62DX/audioai/model_zoo.rst rename to source/devices/AM62DX/edgeai/model_zoo.rst index db41f0963..bef874248 100644 --- a/source/devices/AM62DX/audioai/model_zoo.rst +++ b/source/devices/AM62DX/edgeai/model_zoo.rst @@ -75,7 +75,7 @@ rootfs. .. code-block:: console $ mkdir -p ~/tidl && cd ~/tidl - $ git clone https://github.com/TexasInstruments-Sandbox/audioai-modelzoo.git + $ git clone https://github.com/TexasInstruments/audioai-modelzoo.git $ cd audioai-modelzoo **2. Download the model artifacts.** Downloads the three pre-compiled diff --git a/source/devices/AM62DX/audioai/performance.rst b/source/devices/AM62DX/edgeai/performance.rst similarity index 100% rename from source/devices/AM62DX/audioai/performance.rst rename to source/devices/AM62DX/edgeai/performance.rst diff --git a/source/devices/AM62DX/audioai/version.txt b/source/devices/AM62DX/edgeai/version.txt similarity index 100% rename from source/devices/AM62DX/audioai/version.txt rename to source/devices/AM62DX/edgeai/version.txt From 0d748a16fe99d43da6ab43e8a8fa261a86bfe9e0 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Thu, 8 Oct 2026 22:44:26 -0500 Subject: [PATCH 13/16] docs(am62d-audioai): split Compile/Evaluate/Inspect into two sections Split into "Model Compile and Evaluate" (model_compile_evaluate.rst) and "Model Inspect" (model_inspect.rst). Update the toctree, the AM62DX edgeai toc config, labels, and cross-references in the other pages. Signed-off-by: JuneChul Roh --- configs/AM62DX/AM62DX_edgeai_toc.txt | 3 +- source/devices/AM62DX/edgeai/index.rst | 3 +- source/devices/AM62DX/edgeai/introduction.rst | 15 +++-- ...inspect.rst => model_compile_evaluate.rst} | 61 ++----------------- .../devices/AM62DX/edgeai/model_inspect.rst | 61 +++++++++++++++++++ source/devices/AM62DX/edgeai/model_zoo.rst | 4 +- source/devices/AM62DX/edgeai/performance.rst | 4 +- 7 files changed, 83 insertions(+), 68 deletions(-) rename source/devices/AM62DX/edgeai/{compile_evaluate_inspect.rst => model_compile_evaluate.rst} (78%) create mode 100644 source/devices/AM62DX/edgeai/model_inspect.rst diff --git a/configs/AM62DX/AM62DX_edgeai_toc.txt b/configs/AM62DX/AM62DX_edgeai_toc.txt index d69093766..0faa09f81 100644 --- a/configs/AM62DX/AM62DX_edgeai_toc.txt +++ b/configs/AM62DX/AM62DX_edgeai_toc.txt @@ -1,5 +1,6 @@ devices/AM62DX/edgeai/index devices/AM62DX/edgeai/introduction devices/AM62DX/edgeai/model_zoo -devices/AM62DX/edgeai/compile_evaluate_inspect +devices/AM62DX/edgeai/model_compile_evaluate +devices/AM62DX/edgeai/model_inspect devices/AM62DX/edgeai/performance diff --git a/source/devices/AM62DX/edgeai/index.rst b/source/devices/AM62DX/edgeai/index.rst index abd48a647..590e47335 100644 --- a/source/devices/AM62DX/edgeai/index.rst +++ b/source/devices/AM62DX/edgeai/index.rst @@ -12,7 +12,8 @@ AM62D Audio AI Software Developer's Guide introduction model_zoo - compile_evaluate_inspect + model_compile_evaluate + model_inspect performance +--------------------------------+--------------------------------------------------------------------------------------------------+ diff --git a/source/devices/AM62DX/edgeai/introduction.rst b/source/devices/AM62DX/edgeai/introduction.rst index 839b1b9d1..74681433c 100644 --- a/source/devices/AM62DX/edgeai/introduction.rst +++ b/source/devices/AM62DX/edgeai/introduction.rst @@ -23,9 +23,11 @@ The remaining sections cover: - :ref:`Audio AI Model Zoo ` — out-of-box demos on the AM62D target (inference scripts and Jupyter notebooks) using pre-trained models and pre-compiled artifacts. -- :ref:`Compile / Evaluate / Inspect ` — the - x86 BYOM workflow built on ``edgeai-tidlrunner``: compile a model for the AM62D, - evaluate accuracy on a dataset, and inspect the compiled subgraphs. +- :ref:`Model Compile and Evaluate ` — the + x86 BYOM workflow built on ``edgeai-tidlrunner``: compile a model for the AM62D + and evaluate accuracy on a dataset. +- :ref:`Model Inspect ` — analyze the compiled subgraphs + and per-layer behavior with Model Inspector. - :ref:`Performance benchmark ` — latency and memory methodology with per-model tables. @@ -37,10 +39,11 @@ The end-to-end path is the same for a reference model or your own model: #. **Obtain an ONNX model** — a reference graph shipped with the AudioAI ModelZoo, or your own exported ONNX. -#. **Compile** it for the C7\ |tm| NPU on an x86 host (:ref:`Compile / Evaluate / - Inspect `). +#. **Compile** it for the C7\ |tm| NPU on an x86 host (:ref:`Model Compile and + Evaluate `). #. **Evaluate** accuracy or audio-quality metrics on a dataset. -#. **Inspect** the compiled subgraphs and per-layer analysis. +#. **Inspect** the compiled subgraphs and per-layer analysis (:ref:`Model + Inspect `). #. **Run** on the AM62D target using the compiled artifact (:ref:`Audio AI Model Zoo `). #. **Benchmark** latency and memory (:ref:`Performance `). diff --git a/source/devices/AM62DX/edgeai/compile_evaluate_inspect.rst b/source/devices/AM62DX/edgeai/model_compile_evaluate.rst similarity index 78% rename from source/devices/AM62DX/edgeai/compile_evaluate_inspect.rst rename to source/devices/AM62DX/edgeai/model_compile_evaluate.rst index fa8ed0088..aca9420c4 100644 --- a/source/devices/AM62DX/edgeai/compile_evaluate_inspect.rst +++ b/source/devices/AM62DX/edgeai/model_compile_evaluate.rst @@ -1,8 +1,8 @@ -.. _audioai-compile-evaluate-inspect: +.. _audioai-compile-evaluate: -################################## -Model Compile / Evaluate / Inspect -################################## +########################### +Model Compile and Evaluate +########################### .. |tm| unicode:: U+2122 @@ -47,7 +47,7 @@ CLI — ``tidlrunner-cli`` — exposes the stages this section uses: speech-enhancement metrics. * - ``inspect`` - One-shot compile + inference + reference comparison that emits an - interactive HTML analysis report (see `Model Inspector`_). + interactive HTML analysis report (see :ref:`Model Inspect `). All commands are run from the repository root (``edgeai-tidlrunner/``) and take ``--config_path `` pointing at the per-model YAML. The same config file is @@ -249,54 +249,3 @@ it simply does not offload to the DSP: $ tidlrunner-cli compile --config_path $CFG $ tidlrunner-cli infer --config_path $CFG $ tidlrunner-cli evaluate --config_path $CFG - -******************** -Model Inspector -******************** - -``tidlrunner-cli inspect`` is a one-shot analysis pipeline: it compiles the -model for TIDL, runs inference, re-runs a non-TIDL reference for comparison, -computes per-layer signal-to-noise ratios, and emits a **self-contained -interactive HTML report** — no need to run ``compile`` and ``infer`` -separately. The report opens in any browser and lands at: - -.. code-block:: text - - work_dirs/compile////inspector/modelinspector.html - -The report has three tabs: - -- **Model Summary** — acceleration ratio (layers on the C7x DSP vs. Arm - fallback), input/output specs, and an interactive ONNX graph. -- **Subgraphs** — the TIDL subgraph(s) offloaded to the DSP, with per-layer - identity and a quantization analysis (INT8 vs. FP32 activation histograms and - scatter plots). -- **Performance** — *estimated* per-layer processing time, DSP cycle breakdown - (total / IO / kernel), memory usage (DDR / L2 / MSMC), and SNR metrics. - -.. note:: - - All Performance-tab numbers are **estimates** from the compiler, not - on-target measurements. Model Inspector requires TIDL tools **11.02 or - later** (earlier versions emit SVG subgraph files it cannot read). - -GCRN showcase — an offloaded DSP subgraph -========================================= - -Because GCRN now compiles with ``tidl_offload: true`` on AM62D, its inspector -report shows a **real C7x DSP subgraph** rather than an all-Arm fallback: -the Subgraphs tab lists a single offloaded subgraph (16-bit) with its layer -mapping, and the Performance tab breaks that subgraph down by cycles and memory. -Generate it with the AM62D env sourced (see `Setup`_): - -.. code-block:: console - - $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml - $ tidlrunner-cli inspect --config_path $CFG - -For contrast, running ``inspect`` on the GTCRN (ONNX-RT) config produces a -report with **no** DSP subgraph — every layer is Arm fallback — which is what a -non-offloaded model looks like in the inspector. GTCRN also runs with -``tidl_offload: false``, so its work directory uses a ``notidl`` segment in -place of the ```` shown in the path template above, e.g. -``work_dirs/compile/AM62D/notidl//...``. diff --git a/source/devices/AM62DX/edgeai/model_inspect.rst b/source/devices/AM62DX/edgeai/model_inspect.rst new file mode 100644 index 000000000..e7ae6b914 --- /dev/null +++ b/source/devices/AM62DX/edgeai/model_inspect.rst @@ -0,0 +1,61 @@ +.. _audioai-model-inspect: + +############# +Model Inspect +############# + +Model Inspector analyzes a model on the x86 host after (or instead of) the +:ref:`compile and evaluate ` flow. It uses the same +edgeai-tidlrunner installation and environment described in +:ref:`Setup `. + +******************** +Model Inspector +******************** + +``tidlrunner-cli inspect`` is a one-shot analysis pipeline: it compiles the +model for TIDL, runs inference, re-runs a non-TIDL reference for comparison, +computes per-layer signal-to-noise ratios, and emits a **self-contained +interactive HTML report** — no need to run ``compile`` and ``infer`` +separately. The report opens in any browser and lands at: + +.. code-block:: text + + work_dirs/compile////inspector/modelinspector.html + +The report has three tabs: + +- **Model Summary** — acceleration ratio (layers on the C7x DSP vs. Arm + fallback), input/output specs, and an interactive ONNX graph. +- **Subgraphs** — the TIDL subgraph(s) offloaded to the DSP, with per-layer + identity and a quantization analysis (INT8 vs. FP32 activation histograms and + scatter plots). +- **Performance** — *estimated* per-layer processing time, DSP cycle breakdown + (total / IO / kernel), memory usage (DDR / L2 / MSMC), and SNR metrics. + +.. note:: + + All Performance-tab numbers are **estimates** from the compiler, not + on-target measurements. Model Inspector requires TIDL tools **11.02 or + later** (earlier versions emit SVG subgraph files it cannot read). + +GCRN showcase — an offloaded DSP subgraph +========================================= + +Because GCRN now compiles with ``tidl_offload: true`` on AM62D, its inspector +report shows a **real C7x DSP subgraph** rather than an all-Arm fallback: +the Subgraphs tab lists a single offloaded subgraph (16-bit) with its layer +mapping, and the Performance tab breaks that subgraph down by cycles and memory. +Generate it with the AM62D env sourced (see :ref:`Setup `): + +.. code-block:: console + + $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml + $ tidlrunner-cli inspect --config_path $CFG + +For contrast, running ``inspect`` on the GTCRN (ONNX-RT) config produces a +report with **no** DSP subgraph — every layer is Arm fallback — which is what a +non-offloaded model looks like in the inspector. GTCRN also runs with +``tidl_offload: false``, so its work directory uses a ``notidl`` segment in +place of the ```` shown in the path template above, e.g. +``work_dirs/compile/AM62D/notidl//...``. diff --git a/source/devices/AM62DX/edgeai/model_zoo.rst b/source/devices/AM62DX/edgeai/model_zoo.rst index bef874248..b15ca952b 100644 --- a/source/devices/AM62DX/edgeai/model_zoo.rst +++ b/source/devices/AM62DX/edgeai/model_zoo.rst @@ -14,7 +14,7 @@ compiling anything yourself. Two demo front-ends are provided: standalone Python inference scripts and Jupyter notebooks. The same on-target runtime hosts your own compiled artifacts once you build them through the x86 flow. This section runs entirely **on the target**; the x86 compile/evaluate flow is covered -in :ref:`Compile / Evaluate / Inspect `. +in :ref:`Model Compile and Evaluate `. .. note:: @@ -311,4 +311,4 @@ graph — there is no ``artifacts/`` folder since no TIDL compilation is involved. The demo script and notebook load the ONNX model directly with ``CPUExecutionProvider`` and run FP32 on the Arm core. Compiled TVM-RT + TIDL artifacts for your own models are produced by the x86 workflow in -:ref:`Compile / Evaluate / Inspect `. +:ref:`Model Compile and Evaluate `. diff --git a/source/devices/AM62DX/edgeai/performance.rst b/source/devices/AM62DX/edgeai/performance.rst index 5df57681b..39a518d1c 100644 --- a/source/devices/AM62DX/edgeai/performance.rst +++ b/source/devices/AM62DX/edgeai/performance.rst @@ -11,7 +11,7 @@ reference |__PART_FAMILY_NAME__| Audio AI models. The same methodology (perfsim estimate + on-target measured) applies to any model you compile through the workflow. It is **not** an accuracy or audio-quality benchmark: model quality (classification accuracy, PESQ / STOI / SI-SDR) is measured by the ``evaluate`` -step in :ref:`Compile / Evaluate / Inspect `. +step in :ref:`Model Compile and Evaluate `. *********** Methodology @@ -133,4 +133,4 @@ Scope & Limitations This section does **not** assess model quality. Classification accuracy and speech-enhancement quality metrics are produced by ``tidlrunner-cli evaluate`` and documented in -:ref:`Compile / Evaluate / Inspect `. +:ref:`Model Compile and Evaluate `. From 95ea7ac35fa1dd7555e6b1269d661c1258087b1b Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Mon, 12 Oct 2026 13:50:24 -0500 Subject: [PATCH 14/16] docs(am62d-audioai): fix inspector path and Jupyter launcher description Signed-off-by: JuneChul Roh --- configs/AM62DX/AM62DX_edgeai_config.txt | 3 +-- source/devices/AM62DX/edgeai/model_inspect.rst | 8 ++++++-- source/devices/AM62DX/edgeai/model_zoo.rst | 8 ++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/configs/AM62DX/AM62DX_edgeai_config.txt b/configs/AM62DX/AM62DX_edgeai_config.txt index c243a452e..03cf3901c 100644 --- a/configs/AM62DX/AM62DX_edgeai_config.txt +++ b/configs/AM62DX/AM62DX_edgeai_config.txt @@ -6,7 +6,7 @@ # line, and all the variables should be listed on consecutive lines # (i.e. no additional blank lines between the replacement variables). # Similarly, all the configuration values should be listed on individual, -# consecutive lines (with no blank linues between the configuration values). +# consecutive lines (with no blank lines between the configuration values). # # Note that neither replacement variables nor configuration values may contain # a colon (i.e. ":") in their name. However, values may contain colons. @@ -38,4 +38,3 @@ Configuration Values 'CONFIG_part_family' : 'AM62DX_family' 'CONFIG_part_variant' : 'AM62DX' 'CONFIG_sdk' : 'SITARA' - diff --git a/source/devices/AM62DX/edgeai/model_inspect.rst b/source/devices/AM62DX/edgeai/model_inspect.rst index e7ae6b914..08d69f982 100644 --- a/source/devices/AM62DX/edgeai/model_inspect.rst +++ b/source/devices/AM62DX/edgeai/model_inspect.rst @@ -21,7 +21,11 @@ separately. The report opens in any browser and lands at: .. code-block:: text - work_dirs/compile////inspector/modelinspector.html + work_dirs/compile////inspect/modelinspector.html + +```` is the model's work directory, named after its model ID, +runtime, task, dataset, and model, e.g. +``ase-0201_tvmrt_speech_enhancement_voicebank_demand_16k_gcrn_fixed_4sec_onnx``. The report has three tabs: @@ -58,4 +62,4 @@ report with **no** DSP subgraph — every layer is Arm fallback — which is wha non-offloaded model looks like in the inspector. GTCRN also runs with ``tidl_offload: false``, so its work directory uses a ``notidl`` segment in place of the ```` shown in the path template above, e.g. -``work_dirs/compile/AM62D/notidl//...``. +``work_dirs/compile/AM62D/notidl//...``. diff --git a/source/devices/AM62DX/edgeai/model_zoo.rst b/source/devices/AM62DX/edgeai/model_zoo.rst index b15ca952b..e452a694f 100644 --- a/source/devices/AM62DX/edgeai/model_zoo.rst +++ b/source/devices/AM62DX/edgeai/model_zoo.rst @@ -256,15 +256,15 @@ the activated venv: $ cd ~/tidl/audioai-modelzoo $ ./jupyter_lab_venv.sh -The launcher prints a highlighted access URL and pre-loads the four inference -notebooks in tabs. Open the URL in a browser on a machine that can reach the -target and enter the token ``tidl`` when prompted: +The launcher prints a highlighted access URL. Open the URL in a browser on a +machine that can reach the target and enter the token ``tidl`` when prompted: .. code-block:: text Access URL: http://:8888/lab?token=tidl -The notebooks are: +Jupyter Lab opens with the GCRN notebook loaded. To run a different model, pick +its notebook from the file browser in the left sidebar. The notebooks are: .. list-table:: :header-rows: 1 From 880ba369df9ac89651e67306f301cc62340a0a82 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Tue, 13 Oct 2026 18:44:51 -0500 Subject: [PATCH 15/16] chore(am62d-audioai): stop tracking diagram sources and export script Signed-off-by: JuneChul Roh --- source/images/audioai/export-diagrams.sh | 18 ----- source/images/audioai/tvm_tidl_flow.drawio | 83 --------------------- source/images/audioai/tvm_tidl_flow.png | Bin 43683 -> 0 bytes 3 files changed, 101 deletions(-) delete mode 100755 source/images/audioai/export-diagrams.sh delete mode 100644 source/images/audioai/tvm_tidl_flow.drawio delete mode 100644 source/images/audioai/tvm_tidl_flow.png diff --git a/source/images/audioai/export-diagrams.sh b/source/images/audioai/export-diagrams.sh deleted file mode 100755 index 4638f5f65..000000000 --- a/source/images/audioai/export-diagrams.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -# Re-export every .drawio source in this directory to .png and .svg. -# Run after editing any .drawio file here. -# -# --svg-theme light is required: drawio's default (auto) emits CSS -# light-dark()/color-scheme, which makes the diagram invert colors -# under a dark OS/browser theme. Sphinx has no dark-mode support, so -# the exported SVG must stay pinned to the light palette. -set -euo pipefail -cd "$(dirname "$0")" - -DRAWIO=$(command -v drawio || echo /opt/drawio/drawio) - -for src in *.drawio; do - base="${src%.drawio}" - "$DRAWIO" --export --format png --embed-diagram --output "${base}.png" "$src" - "$DRAWIO" --export --format svg --svg-theme light --embed-diagram --output "${base}.svg" "$src" -done diff --git a/source/images/audioai/tvm_tidl_flow.drawio b/source/images/audioai/tvm_tidl_flow.drawio deleted file mode 100644 index 6f99ee07a..000000000 --- a/source/images/audioai/tvm_tidl_flow.drawio +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/images/audioai/tvm_tidl_flow.png b/source/images/audioai/tvm_tidl_flow.png deleted file mode 100644 index d528941f475fee6d950c2ac125defb4e23f05d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43683 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

RSk8#NJoIAje- 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� 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 From 0f63803cd39357d5d124f8fdcb0a0d819e86a82c Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Tue, 13 Oct 2026 18:44:51 -0500 Subject: [PATCH 16/16] docs(am62d-audioai): address PR review feedback on edgeai pages Trim the Vale vocabulary to the entries Vale needs, fix heading adornments and non-ASCII text, use isonum.txt and #. autonumbered steps, and replace the removed replacement variables with literal values. Signed-off-by: JuneChul Roh --- .../config/vocabularies/PSDK/accept.txt | 18 +-- .rstcheck.cfg | 2 +- configs/AM62DX/AM62DX_edgeai_config.txt | 10 -- source/devices/AM62DX/edgeai/index.rst | 4 +- source/devices/AM62DX/edgeai/introduction.rst | 68 ++++---- .../AM62DX/edgeai/model_compile_evaluate.rst | 146 +++++++++--------- .../devices/AM62DX/edgeai/model_inspect.rst | 16 +- source/devices/AM62DX/edgeai/model_zoo.rst | 106 ++++++------- source/devices/AM62DX/edgeai/performance.rst | 34 ++-- 9 files changed, 190 insertions(+), 214 deletions(-) diff --git a/.github/styles/config/vocabularies/PSDK/accept.txt b/.github/styles/config/vocabularies/PSDK/accept.txt index ac18fcc3b..ec68dd68d 100644 --- a/.github/styles/config/vocabularies/PSDK/accept.txt +++ b/.github/styles/config/vocabularies/PSDK/accept.txt @@ -1,17 +1,10 @@ Armbian -BYOM BeagleBone Broadcom -C7x -DDR Debian -GCRN -GMACs GStreamer -GTCRN Jacinto Khronos -NPU NXP ONNX OpenCL @@ -19,20 +12,15 @@ OpenGL OpenVX PVRCarbon PVRTune -RTF Sitara Skia Slint TFLite -TIDL TVM Trixie UniFlash -VGGish11 -VoiceBank Vulkan Weston -YAMNet Yocto Zink [Bb]ackplane @@ -45,15 +33,13 @@ Zink [Mm]ulticast [Rr]enderers? [Ss]carthgap +[Ss]ubgraphs? [Tt]oolchain -aarch64 balenaEtcher bdebstrap -edgeai fdisk +logits? mmdebstrap perfsim -pyenv -tidlrunner umount venv diff --git a/.rstcheck.cfg b/.rstcheck.cfg index 3c3e4dfd8..e867f2893 100644 --- a/.rstcheck.cfg +++ b/.rstcheck.cfg @@ -3,5 +3,5 @@ ignore_directives = ifconfig,graphviz,grid,grid-item,grid-item-card,card,dropdow # ignore the following languages because they require external compilers and # snippets in this repo depend on external code ignore_languages = c,cpp,c++ -ignore_substitutions = __PART_FAMILY_NAME__,__PART_FAMILY_DEVICE_NAMES__,__PRODUCT_LINE_NAME__,__SDK_BUILD_MACHINE__,__SDK_FULL_NAME__,__SDK_SHORT_NAME__,__SDK_INSTALL_FILE__,__SDK_INSTALL_DIR__,__SDK_DOWNLOAD_URL__,__LINUX_UBUNTU_VERSION_LONG__,__LINUX_UBUNTU_VERSION_SHORT__,__OPTEE_PLATFORM_FLAVOR__,__RTOS_UBUNTU_VERSION_LONG__,__WINDOWS_SUPPORTED_LONG__,__FEATURINGMATRIX__,__SYSFW_CORE_NAME__,__PCIE_BASE_ADDRESS__,__PCIE_DEVICE_ID__,__IMAGE_TYPE__,__SDK_OS_NAME__ +ignore_substitutions = __PART_FAMILY_NAME__,__PART_FAMILY_DEVICE_NAMES__,__PRODUCT_LINE_NAME__,__SDK_BUILD_MACHINE__,__SDK_FULL_NAME__,__SDK_SHORT_NAME__,__SDK_INSTALL_FILE__,__SDK_INSTALL_DIR__,__SDK_DOWNLOAD_URL__,__LINUX_UBUNTU_VERSION_LONG__,__LINUX_UBUNTU_VERSION_SHORT__,__OPTEE_PLATFORM_FLAVOR__,__RTOS_UBUNTU_VERSION_LONG__,__WINDOWS_SUPPORTED_LONG__,__FEATURINGMATRIX__,__SYSFW_CORE_NAME__,__PCIE_BASE_ADDRESS__,__PCIE_DEVICE_ID__,__IMAGE_TYPE__,__SDK_OS_NAME__,__AUDIOAI_SDK_VERSION__,trade ignore_messages = (Hyperlink target.*is not referenced\.) diff --git a/configs/AM62DX/AM62DX_edgeai_config.txt b/configs/AM62DX/AM62DX_edgeai_config.txt index 03cf3901c..9520fbd15 100644 --- a/configs/AM62DX/AM62DX_edgeai_config.txt +++ b/configs/AM62DX/AM62DX_edgeai_config.txt @@ -22,16 +22,6 @@ Replacement Variables '__AUDIOAI_SDK_VERSION__' : '12.1' '__TIDL_VERSION__' : '11_02_18_00' '__TIDL_TOOLS_VERSION__' : '11.2.x' -'__MODELZOO_REPO_URL__' : 'https://github.com/TexasInstruments/audioai-modelzoo' -'__TIDLRUNNER_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidlrunner' -'__TIDL_TOOLS_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidl-tools' -'__TARGET_VENV_PATH__' : '~/venv/modelzoo' -'__DATASET_AUDIO_CLS__' : 'UrbanSound8K' -'__DATASET_SPEECH_ENH__' : 'VoiceBank-DEMAND-16k' -'__MODEL_ID_VGGISH11__' : 'ac-0101' -'__MODEL_ID_YAMNET__' : 'ac-0201' -'__MODEL_ID_GCRN__' : 'ase-0201' -'__MODEL_ID_GTCRN__' : 'ase-0100' Configuration Values -------------------- diff --git a/source/devices/AM62DX/edgeai/index.rst b/source/devices/AM62DX/edgeai/index.rst index 590e47335..1617e815e 100644 --- a/source/devices/AM62DX/edgeai/index.rst +++ b/source/devices/AM62DX/edgeai/index.rst @@ -1,8 +1,8 @@ .. _audioai-index: -********************************************* +######################################### AM62D Audio AI Software Developer's Guide -********************************************* +######################################### .. rubric:: Welcome to the AM62D Audio AI/DL Software Developer's Guide diff --git a/source/devices/AM62DX/edgeai/introduction.rst b/source/devices/AM62DX/edgeai/introduction.rst index 74681433c..ec75cc579 100644 --- a/source/devices/AM62DX/edgeai/introduction.rst +++ b/source/devices/AM62DX/edgeai/introduction.rst @@ -1,16 +1,16 @@ +.. include:: + .. _audioai-introduction: ####################### Introduction & Overview ####################### -.. |tm| unicode:: U+2122 - This guide walks through the workflow for developing and deploying audio deep-learning (Audio AI/DL) models on the |__PART_FAMILY_NAME__| platform, using |__SDK_FULL_NAME__| |__AUDIOAI_SDK_VERSION__|. It is written for embedded developers who want to run, compile, evaluate, and benchmark audio models on the -AM62D — either out of the box on the target with pre-compiled artifacts, or +AM62D - either out of the box on the target with pre-compiled artifacts, or through the x86 compile/evaluate workflow. Four **reference models** serve as worked examples throughout the guide, but the @@ -20,15 +20,15 @@ bring-your-own-model (BYOM) flow that accepts any supported `ONNX The remaining sections cover: -- :ref:`Audio AI Model Zoo ` — out-of-box demos on the AM62D +- :ref:`Audio AI Model Zoo ` - out-of-box demos on the AM62D target (inference scripts and Jupyter notebooks) using pre-trained models and pre-compiled artifacts. -- :ref:`Model Compile and Evaluate ` — the +- :ref:`Model Compile and Evaluate ` - the x86 BYOM workflow built on ``edgeai-tidlrunner``: compile a model for the AM62D and evaluate accuracy on a dataset. -- :ref:`Model Inspect ` — analyze the compiled subgraphs +- :ref:`Model Inspect ` - analyze the compiled subgraphs and per-layer behavior with Model Inspector. -- :ref:`Performance benchmark ` — latency and memory +- :ref:`Performance benchmark ` - latency and memory methodology with per-model tables. ******************** @@ -37,9 +37,9 @@ Development workflow The end-to-end path is the same for a reference model or your own model: -#. **Obtain an ONNX model** — a reference graph shipped with the AudioAI ModelZoo, +#. **Obtain an ONNX model** - a reference graph shipped with the AudioAI ModelZoo, or your own exported ONNX. -#. **Compile** it for the C7\ |tm| NPU on an x86 host (:ref:`Model Compile and +#. **Compile** it for the C7\ |trade| NPU on an x86 host (:ref:`Model Compile and Evaluate `). #. **Evaluate** accuracy or audio-quality metrics on a dataset. #. **Inspect** the compiled subgraphs and per-layer analysis (:ref:`Model @@ -48,80 +48,80 @@ The end-to-end path is the same for a reference model or your own model: (:ref:`Audio AI Model Zoo `). #. **Benchmark** latency and memory (:ref:`Performance `). -******************** +**************** Reference models -******************** +**************** Four reference models are provided across two task families, as worked examples of the workflow. Each is delivered as an `ONNX `__ graph and, -except for GTCRN, is offloaded to the C7\ |tm| NPU through the TVM runtime +except for GTCRN, is offloaded to the C7\ |trade| NPU through the TVM runtime (TVM-RT); GTCRN is the one that runs ARM-only. See :ref:`the framework overview ` below for what that means. The same flow accepts your own ONNX model, and more reference models will be added over time. Audio analysis and classification -================================== +================================= -**VGGish11** (model ID |__MODEL_ID_VGGISH11__|) +**VGGish11** (model ID ``ac-0101``) Audio-clip classification. Input is a log-mel patch of shape ``(1, 1, 64, 126)``; output is ``(1, 10)`` class logits plus a ``(1, 512)`` embedding. Runs at 8-bit, - fully offloaded to the C7\ |tm| NPU via TVM-RT (a single TIDL subgraph). + fully offloaded to the C7\ |trade| NPU via TVM-RT (a single TIDL subgraph). -**YAMNet** (model ID |__MODEL_ID_YAMNET__|) +**YAMNet** (model ID ``ac-0201``) Audio-event classification. Input is a log-mel patch of shape ``(1, 1, 96, 64)``; output is ``(1, 521)`` class scores. Runs at 8-bit, fully offloaded to the - C7\ |tm| NPU via TVM-RT (a single TIDL subgraph). + C7\ |trade| NPU via TVM-RT (a single TIDL subgraph). -Both classification models are evaluated on the |__DATASET_AUDIO_CLS__| dataset. +Both classification models are evaluated on the UrbanSound8K dataset. Speech enhancement ================== -**GCRN** (model ID |__MODEL_ID_GCRN__|) - Convolutional-recurrent speech enhancement (denoising) over a fixed 4-second +**GCRN** (model ID ``ase-0201``) + Convolutional-recurrent speech enhancement (noise suppression) over a fixed 4-second window. Input and output are complex spectrograms of shape ``(1, 2, 401, 161)``. - Runs at 16-bit and is offloaded to the C7\ |tm| NPU via TVM-RT + Runs at 16-bit and is offloaded to the C7\ |trade| NPU via TVM-RT (``tidl_offload: true``). -**GTCRN** (model ID |__MODEL_ID_GTCRN__|) +**GTCRN** (model ID ``ase-0100``) Grouped temporal convolutional-recurrent speech enhancement. Input and output are complex spectrograms of shape ``(1, 257, T, 2)`` with a dynamic time dimension ``T``. Runs FP32 on the Arm core through the ONNX runtime - (``tidl_offload: false``) — it is the only supported model that is **not** - offloaded to the C7\ |tm| NPU. + (``tidl_offload: false``) - it is the only supported model that is **not** + offloaded to the C7\ |trade| NPU. -Both speech-enhancement models are evaluated on the |__DATASET_SPEECH_ENH__| +Both speech-enhancement models are evaluated on the VoiceBank-DEMAND-16k dataset. .. _audioai-tvm-tidl: -************************** +******************** TVM + TIDL framework -************************** +******************** The AM62D audio models are compiled and deployed with **TI TVM**, TI's fork of the `Apache TVM `__ deep-learning compiler. The target -accelerator is the **C7**\ |tm| **NPU** — TI's Neural Processing Unit, which +accelerator is the **C7**\ |trade| **NPU** - TI's Neural Processing Unit, which combines the **C7x DSP** with the **Matrix Multiplication Accelerator (MMA)** (referred to as *C7x+MMA* in older documentation). TI TVM integrates **TIDL** (TI Deep Learning) as an accelerator backend: TIDL-supported layers are offloaded to the MMA, while TVM generates **C7x DSP** code for any remaining layers. Because the MMA and the C7x DSP together make up -the C7\ |tm| NPU, the result is a single deployable artifact in which the -**entire model runs on the C7**\ |tm| **NPU**. +the C7\ |trade| NPU, the result is a single deployable artifact in which the +**entire model runs on the C7**\ |trade| **NPU**. Compilation runs on an x86 host and proceeds in stages: -#. **Model import** — the ONNX graph is imported into TVM. -#. **Partitioning** — using the TIDL import API, the graph is split into +#. **Model import** - the ONNX graph is imported into TVM. +#. **Partitioning** - using the TIDL import API, the graph is split into TIDL-supported subgraphs (compiled by the TIDL network compiler) and the remaining operators (handled by TVM C7x DSP code generation). -#. **Artifact generation** — both parts are packaged into one TVM-RT deployable +#. **Artifact generation** - both parts are packaged into one TVM-RT deployable artifact (``deploy_lib.so`` + ``deploy_graph.json`` + ``deploy_param.params``). At run time on the AM62D, the TVM runtime loads the artifact and dispatches the -offloaded subgraphs to TIDL-RT on the C7\ |tm| NPU. +offloaded subgraphs to TIDL-RT on the C7\ |trade| NPU. .. figure:: ../../../images/audioai/tvm_tidl_flow.svg :width: 80 % diff --git a/source/devices/AM62DX/edgeai/model_compile_evaluate.rst b/source/devices/AM62DX/edgeai/model_compile_evaluate.rst index aca9420c4..d3a04f26c 100644 --- a/source/devices/AM62DX/edgeai/model_compile_evaluate.rst +++ b/source/devices/AM62DX/edgeai/model_compile_evaluate.rst @@ -1,34 +1,34 @@ +.. include:: + .. _audioai-compile-evaluate: -########################### +########################## Model Compile and Evaluate -########################### - -.. |tm| unicode:: U+2122 +########################## The :ref:`Audio AI Model Zoo ` runs *pre-compiled* artifacts on the |__PART_FAMILY_NAME__| target. This section covers the **x86 host workflow** that produces those artifacts: how to compile an audio model for -the C7\ |tm| NPU, run host-emulation inference, and measure accuracy against a -dataset — using **edgeai-tidlrunner**. It runs entirely on an Ubuntu x86 PC; +the C7\ |trade| NPU, run host-emulation inference, and measure accuracy against a +dataset - using **edgeai-tidlrunner**. It runs entirely on an Ubuntu x86 PC; nothing here touches the target. This is the workflow for *any* audio model, not just the reference models. The four reference models below are worked examples. To bring your own model you point the same ``tidlrunner-cli`` at your ONNX graph and a per-model YAML config, using a reference config as a starting template. Which operators offload to the -C7\ |tm| NPU (vs. fall back to the Arm core) is determined by TIDL — see +C7\ |trade| NPU (vs. fall back to the Arm core) is determined by TIDL - see `edgeai-tidl-tools `__ for the authoritative list of supported operators. -******************** +***************** edgeai-tidlrunner -******************** +***************** edgeai-tidlrunner is a bring-your-own-model (BYOM) command-line wrapper over the core `edgeai-tidl-tools `__ compilation stack. A single YAML config per model drives every stage, and one -CLI — ``tidlrunner-cli`` — exposes the stages this section uses: +CLI - ``tidlrunner-cli`` - exposes the stages this section uses: .. list-table:: :header-rows: 1 @@ -55,78 +55,78 @@ reused across ``compile``, ``infer``, and ``evaluate``. .. _audioai-am62d-setup: -******************** +***** Setup -******************** +***** Model compilation runs on an x86 PC (Ubuntu Linux recommended). The AM62D audio flow is self-contained: a single setup script installs the whole TVM toolchain into a dedicated Python 3.10 environment. The TIDL tools target Python 3.10. These steps assume `pyenv `__. -**1. Clone the repository** (|__TIDLRUNNER_REPO_URL__|): +#. **Clone the repository** (https://github.com/TexasInstruments/edgeai-tidlrunner): -.. code-block:: console + .. code-block:: console - $ git clone https://github.com/TexasInstruments/edgeai-tidlrunner.git - $ cd edgeai-tidlrunner + $ git clone https://github.com/TexasInstruments/edgeai-tidlrunner.git + $ cd edgeai-tidlrunner -**2. Create and activate a dedicated Python 3.10 environment.** The AM62D flow -uses a TI TVM wheel; keep it in its own venv (``tidlrunner-am62d``) -so it never clobbers a standard ``tidlrunner`` setup: +#. **Create and activate a dedicated Python 3.10 environment.** The AM62D flow + uses a TI TVM wheel; keep it in its own venv (``tidlrunner-am62d``) + so it never clobbers a standard ``tidlrunner`` setup: -.. code-block:: console + .. code-block:: console - $ pyenv install 3.10 - $ pyenv virtualenv 3.10 tidlrunner-am62d - $ pyenv activate tidlrunner-am62d + $ pyenv install 3.10 + $ pyenv virtualenv 3.10 tidlrunner-am62d + $ pyenv activate tidlrunner-am62d -**3. Run the AM62D setup script.** With the venv active, one script installs -everything this flow needs: +#. **Run the AM62D setup script.** With the venv active, one script installs + everything this flow needs: -.. code-block:: console + .. code-block:: console - $ ./devices/setup_am62d.sh + $ ./devices/setup_am62d.sh -It downloads the ARM GCC 15.2 and C7000 CGT 5.0.0.LTS cross-toolchains into -``tools/tidl_tools_package/bin/`` (skipped if already present), installs the -x86 TI TVM wheel — which bundles the AM62D x86 TIDL tools *inside* -the package — and installs ``tidlrunner[pc,audio]``, ``tools``, ``onnxruntime``, -and ``tidl_onnx_model_optimizer``. The ``[audio]`` extra pulls in the audio -packages (``librosa``, ``soundfile``, ``scipy``, ``pesq``, ``pystoi``, -``scikit-learn``). No separate ``pip install`` is needed. + It downloads the ARM GCC 15.2 and C7000 CGT 5.0.0.LTS cross-toolchains into + ``tools/tidl_tools_package/bin/`` (skipped if already present), installs the + x86 TI TVM wheel - which bundles the AM62D x86 TIDL tools *inside* + the package - and installs ``tidlrunner[pc,audio]``, ``tools``, ``onnxruntime``, + and ``tidl_onnx_model_optimizer``. The ``[audio]`` extra pulls in the audio + packages (``librosa``, ``soundfile``, ``scipy``, ``pesq``, ``pystoi``, + ``scikit-learn``). No separate ``pip install`` is needed. -**4. Source the env script once per shell.** TVM ``dlopen``\ s the TIDL runtime -(``libvx_tidl_rt.so``) before Python's own import runs, so the tool paths must be -live in the shell *before* ``tidlrunner-cli`` starts. Source — do **not** execute -— ``devices/am62d_env.sh`` once; every ``tidlrunner-cli`` command run afterward in -that shell picks the vars up: +#. **Source the env script once per shell.** TVM ``dlopen``\ s the TIDL runtime + (``libvx_tidl_rt.so``) before Python's own import runs, so the tool paths must be + live in the shell *before* ``tidlrunner-cli`` starts. Source (do **not** execute) + ``devices/am62d_env.sh`` once; every ``tidlrunner-cli`` command run afterward in + that shell picks the vars up: -.. code-block:: console + .. code-block:: console - $ source devices/am62d_env.sh + $ source devices/am62d_env.sh -It exports: + It exports: -.. list-table:: - :header-rows: 1 - :widths: 26 74 - - * - Variable - - Value - * - ``TIDL_TOOLS_PATH`` - - ``/3rdparty/x86_tidl_tools/AM62D`` (resolved from the - active venv's installed ``tvm``) - * - ``LD_LIBRARY_PATH`` - - prepends ``TIDL_TOOLS_PATH`` so ``libvx_tidl_rt.so`` resolves - * - ``ARM64_GCC_PATH`` - - the aarch64 GNU toolchain installed by ``setup_am62d.sh`` under - ``tools/tidl_tools_package/bin/`` (override by exporting before sourcing) - * - ``CGT7X_ROOT`` - - the C7000 code-generation tools installed by ``setup_am62d.sh`` under - ``tools/tidl_tools_package/bin/`` (override by exporting before sourcing) - * - ``SOC`` - - ``am62d`` + .. list-table:: + :header-rows: 1 + :widths: 26 74 + + * - Variable + - Value + * - ``TIDL_TOOLS_PATH`` + - ``/3rdparty/x86_tidl_tools/AM62D`` (resolved from the + active venv's installed ``tvm``) + * - ``LD_LIBRARY_PATH`` + - prepends ``TIDL_TOOLS_PATH`` so ``libvx_tidl_rt.so`` resolves + * - ``ARM64_GCC_PATH`` + - the aarch64 GNU toolchain installed by ``setup_am62d.sh`` under + ``tools/tidl_tools_package/bin/`` (override by exporting before sourcing) + * - ``CGT7X_ROOT`` + - the C7000 code-generation tools installed by ``setup_am62d.sh`` under + ``tools/tidl_tools_package/bin/`` (override by exporting before sourcing) + * - ``SOC`` + - ``am62d`` Datasets ======== @@ -137,14 +137,14 @@ sets. Download them from the repository root: .. code-block:: console - $ # UrbanSound8K (~5.6 GB) — sound classification (VGGish11, YAMNet) + $ # UrbanSound8K (~5.6 GB) - sound classification (VGGish11, YAMNet) $ bash examples/audio/scripts/download_urbansound8k.sh - $ # VoiceBank-DEMAND-16k (~2 GB) — speech enhancement (GCRN, GTCRN) + $ # VoiceBank-DEMAND-16k (~2 GB) - speech enhancement (GCRN, GTCRN) $ python3 examples/audio/scripts/download_voicebank_demand.py They land under ``data/datasets/UrbanSound8K/`` and -``data/datasets/VoiceBank-DEMAND-16k/`` — the paths the model configs expect. +``data/datasets/VoiceBank-DEMAND-16k/`` - the paths the model configs expect. The classification configs use UrbanSound8K **fold 10** (837 samples) as the test set; the speech-enhancement configs use the VoiceBank-DEMAND-16k **test** set (824 files). @@ -162,8 +162,8 @@ Compile and evaluate Each model has one config that drives all stages. All four run under the ``tidlrunner-am62d`` environment with ``devices/am62d_env.sh`` already sourced -(see `Setup`_). Three models compile to the C7\ |tm| NPU through the TVM runtime; -GTCRN runs ARM-only through ONNX Runtime (no C7\ |tm| NPU offload) but uses the +(see `Setup`_). Three models compile to the C7\ |trade| NPU through the TVM runtime; +GTCRN runs ARM-only through ONNX Runtime (no C7\ |trade| NPU offload) but uses the same environment. The AM62D config paths are: .. list-table:: @@ -176,22 +176,22 @@ same environment. The AM62D config paths are: - Tensor Bits - Config path (relative to ``edgeai-tidlrunner/``) * - VGGish11 - - |__MODEL_ID_VGGISH11__| + - ``ac-0101`` - TVM-RT - 8 - ``data/configs/samples/models/audio/audio_classification/urbansound8k/vggish11_tvmrt_config.yaml`` * - YAMNet - - |__MODEL_ID_YAMNET__| + - ``ac-0201`` - TVM-RT - 8 - ``data/configs/samples/models/audio/audio_classification/urbansound8k/yamnet_tvmrt_config.yaml`` * - GCRN - - |__MODEL_ID_GCRN__| + - ``ase-0201`` - TVM-RT - 16 (LSTM), FP32 (Enc/Dec) - ``data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml`` * - GTCRN - - |__MODEL_ID_GTCRN__| + - ``ase-0100`` - ONNX-RT - FP32 - ``data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gtcrn_dns3_config.yaml`` @@ -199,7 +199,7 @@ same environment. The AM62D config paths are: VGGish11 (TVM-RT, 8-bit) ======================== -Runs on the C7\ |tm| NPU (``tidl_offload: true``): +Runs on the C7\ |trade| NPU (``tidl_offload: true``): .. code-block:: console @@ -223,7 +223,7 @@ YAMNet (TVM-RT, 8-bit) GCRN (TVM-RT, 16-bit) ===================== -GCRN is C7\ |tm| NPU-offloaded at 16-bit (``tidl_offload: true``, fixed 4-second +GCRN is C7\ |trade| NPU-offloaded at 16-bit (``tidl_offload: true``, fixed 4-second input): .. code-block:: console @@ -239,7 +239,7 @@ GTCRN (ONNX-RT, ARM-only) ========================= GTCRN has a dynamic time axis and TIDL-unsupported operators, so it runs on the -Arm Cortex-A cores through ONNX Runtime (``tidl_offload: false``) — no C7\ |tm| NPU +Arm Cortex-A cores through ONNX Runtime (``tidl_offload: false``) - no C7\ |trade| NPU offload. It uses the same ``tidlrunner-am62d`` environment as the other models; it simply does not offload to the DSP: diff --git a/source/devices/AM62DX/edgeai/model_inspect.rst b/source/devices/AM62DX/edgeai/model_inspect.rst index 08d69f982..67b5fd91e 100644 --- a/source/devices/AM62DX/edgeai/model_inspect.rst +++ b/source/devices/AM62DX/edgeai/model_inspect.rst @@ -9,14 +9,14 @@ Model Inspector analyzes a model on the x86 host after (or instead of) the edgeai-tidlrunner installation and environment described in :ref:`Setup `. -******************** +*************** Model Inspector -******************** +*************** ``tidlrunner-cli inspect`` is a one-shot analysis pipeline: it compiles the model for TIDL, runs inference, re-runs a non-TIDL reference for comparison, computes per-layer signal-to-noise ratios, and emits a **self-contained -interactive HTML report** — no need to run ``compile`` and ``infer`` +interactive HTML report** - no need to run ``compile`` and ``infer`` separately. The report opens in any browser and lands at: .. code-block:: text @@ -29,12 +29,12 @@ runtime, task, dataset, and model, e.g. The report has three tabs: -- **Model Summary** — acceleration ratio (layers on the C7x DSP vs. Arm +- **Model Summary** - acceleration ratio (layers on the C7x DSP vs. Arm fallback), input/output specs, and an interactive ONNX graph. -- **Subgraphs** — the TIDL subgraph(s) offloaded to the DSP, with per-layer +- **Subgraphs** - the TIDL subgraph(s) offloaded to the DSP, with per-layer identity and a quantization analysis (INT8 vs. FP32 activation histograms and scatter plots). -- **Performance** — *estimated* per-layer processing time, DSP cycle breakdown +- **Performance** - *estimated* per-layer processing time, DSP cycle breakdown (total / IO / kernel), memory usage (DDR / L2 / MSMC), and SNR metrics. .. note:: @@ -43,7 +43,7 @@ The report has three tabs: on-target measurements. Model Inspector requires TIDL tools **11.02 or later** (earlier versions emit SVG subgraph files it cannot read). -GCRN showcase — an offloaded DSP subgraph +GCRN showcase - an offloaded DSP subgraph ========================================= Because GCRN now compiles with ``tidl_offload: true`` on AM62D, its inspector @@ -58,7 +58,7 @@ Generate it with the AM62D env sourced (see :ref:`Setup `): $ tidlrunner-cli inspect --config_path $CFG For contrast, running ``inspect`` on the GTCRN (ONNX-RT) config produces a -report with **no** DSP subgraph — every layer is Arm fallback — which is what a +report with **no** DSP subgraph - every layer is Arm fallback - which is what a non-offloaded model looks like in the inspector. GTCRN also runs with ``tidl_offload: false``, so its work directory uses a ``notidl`` segment in place of the ```` shown in the path template above, e.g. diff --git a/source/devices/AM62DX/edgeai/model_zoo.rst b/source/devices/AM62DX/edgeai/model_zoo.rst index e452a694f..a95d7a725 100644 --- a/source/devices/AM62DX/edgeai/model_zoo.rst +++ b/source/devices/AM62DX/edgeai/model_zoo.rst @@ -1,11 +1,11 @@ +.. include:: + .. _audioai-model-zoo: ################## Audio AI Model Zoo ################## -.. |tm| unicode:: U+2122 - The AudioAI ModelZoo delivers out-of-box audio deep-learning demos that run directly on the |__PART_FAMILY_NAME__| target. Each reference model ships as an `ONNX `__ graph plus, where applicable, a pre-compiled @@ -21,9 +21,9 @@ in :ref:`Model Compile and Evaluate `. The models in this repository are made available for experimentation and development. They are not intended for deployment in production. -******************** +********** What ships -******************** +********** .. list-table:: :header-rows: 1 @@ -35,75 +35,75 @@ What ships - On target - Demo * - VGGish11 - - Sound classification (|__DATASET_AUDIO_CLS__|) - - |__MODEL_ID_VGGISH11__| - - C7\ |tm| NPU (TVM-RT + TIDL, 8-bit) + - Sound classification (UrbanSound8K) + - ``ac-0101`` + - C7\ |trade| NPU (TVM-RT + TIDL, 8-bit) - Script + notebook * - YAMNet - - Sound classification (|__DATASET_AUDIO_CLS__|) - - |__MODEL_ID_YAMNET__| - - C7\ |tm| NPU (TVM-RT + TIDL, 8-bit) + - Sound classification (UrbanSound8K) + - ``ac-0201`` + - C7\ |trade| NPU (TVM-RT + TIDL, 8-bit) - Script + notebook * - GCRN - - Speech enhancement (|__DATASET_SPEECH_ENH__|) - - |__MODEL_ID_GCRN__| - - C7\ |tm| NPU (TVM-RT + TIDL, 16-bit) + - Speech enhancement (VoiceBank-DEMAND-16k) + - ``ase-0201`` + - C7\ |trade| NPU (TVM-RT + TIDL, 16-bit) - Script + notebook * - GTCRN - - Speech enhancement (|__DATASET_SPEECH_ENH__|) - - |__MODEL_ID_GTCRN__| + - Speech enhancement (VoiceBank-DEMAND-16k) + - ``ase-0100`` - Arm core (ONNX runtime, FP32) - Script + notebook VGGish11, YAMNet, and GCRN each ship a pre-compiled TVM-RT + TIDL artifact and -run offloaded to the C7\ |tm| NPU. GTCRN ships **no** compiled artifact — it +run offloaded to the C7\ |trade| NPU. GTCRN ships **no** compiled artifact - it runs FP32 on the Arm core through the ONNX runtime, packaged as a plain ONNX Runtime artifact. -******************** +*************** On-target setup -******************** +*************** The steps below run on the AM62D target (aarch64), on the Linux command line of the Processor SDK rootfs. The notebooks and scripts run in a Python virtual environment that reuses the TIDL-enabled TVM runtime already present in the rootfs. -**1. Clone the repository.** Clone the AudioAI ModelZoo repository -(|__MODELZOO_REPO_URL__|): +#. **Clone the repository.** Clone the AudioAI ModelZoo repository + (https://github.com/TexasInstruments/audioai-modelzoo): -.. code-block:: console + .. code-block:: console - $ mkdir -p ~/tidl && cd ~/tidl - $ git clone https://github.com/TexasInstruments/audioai-modelzoo.git - $ cd audioai-modelzoo + $ mkdir -p ~/tidl && cd ~/tidl + $ git clone https://github.com/TexasInstruments/audioai-modelzoo.git + $ cd audioai-modelzoo -**2. Download the model artifacts.** Downloads the three pre-compiled -TVM-RT + TIDL artifacts (VGGish11, YAMNet, GCRN) plus the GTCRN ONNX Runtime -artifact into ``model_artifacts//am62d/``: +#. **Download the model artifacts.** Downloads the three pre-compiled + TVM-RT + TIDL artifacts (VGGish11, YAMNet, GCRN) plus the GTCRN ONNX Runtime + artifact into ``model_artifacts//am62d/``: -.. code-block:: console + .. code-block:: console - $ ./download_models.sh -y + $ ./download_models.sh -y -The script defaults to an interactive selection menu; the ``-y`` flag -downloads everything non-interactively. Add ``-l`` to print the source URLs -without downloading. + The script defaults to an interactive selection menu; the ``-y`` flag + downloads everything non-interactively. Add ``-l`` to print the source URLs + without downloading. -**3. Create the virtual environment.** Creates the venv at -|__TARGET_VENV_PATH__| with ``--system-site-packages`` so the TIDL-enabled -runtime from the rootfs is visible: +#. **Create the virtual environment.** Creates the venv at + ~/venv/modelzoo with ``--system-site-packages`` so the TIDL-enabled + runtime from the rootfs is visible: -.. code-block:: console + .. code-block:: console - $ ./setup_venv.sh + $ ./setup_venv.sh -**4. Activate the venv.** Activate it in every new shell before running the -demos: +#. **Activate the venv.** Activate it in every new shell before running the + demos: -.. code-block:: console + .. code-block:: console - $ source ~/venv/modelzoo/bin/activate + $ source ~/venv/modelzoo/bin/activate ********************** Inference script demos @@ -120,7 +120,7 @@ YAMNet (sound classification) $ cd ~/tidl/audioai-modelzoo/inference/yamnet_sc $ python3 yamnet_infer_audio.py --audio-file samples/miaow_16k.wav -The script preprocesses the audio into log-mel patches, runs each patch through +The script converts the audio into log-mel patches, runs each patch through the TVM-RT + TIDL session, and averages the per-patch scores. For the bundled ``miaow_16k.wav`` clip the top classes are cat/animal sounds. Expected output (abridged): @@ -161,7 +161,7 @@ VGGish11 (sound classification) $ cd ~/tidl/audioai-modelzoo/inference/vggish11_sc $ python3 vggish_infer_audio.py --audio-file sample_wav/139951-9-0-9.wav -The bundled clip is |__DATASET_AUDIO_CLS__| class 9 (street music). Expected +The bundled clip is UrbanSound8K class 9 (street music). Expected output (abridged): .. code-block:: text @@ -215,7 +215,7 @@ GTCRN (speech enhancement) $ cd ~/tidl/audioai-modelzoo/inference/gtcrn_se $ python3 gtcrn_infer_audio.py --input sample_wav/mix.wav -Unlike the other three models, GTCRN has no TVM-RT + TIDL artifact — the script +Unlike the other three models, GTCRN has no TVM-RT + TIDL artifact - the script loads the ONNX graph directly and runs it on ``CPUExecutionProvider`` (Arm core, FP32). It writes the enhanced audio to ``enh_onnx.wav`` beside the input; pass ``--output`` to change the destination wav. Expected output (abridged): @@ -281,9 +281,9 @@ its notebook from the file browser in the left sidebar. The notebooks are: * - YAMNet - ``inference/yamnet_sc/yamnet_inference.ipynb`` -******************** +****************** Compiled artifacts -******************** +****************** ``download_models.sh`` places the artifacts under ``model_artifacts//am62d/``. Each model gets its own directory, @@ -292,22 +292,22 @@ model) and, where applicable, an ``artifacts/`` folder (the compiled model artifacts). VGGish11, YAMNet, and GCRN each get a pre-compiled TVM-RT + TIDL artifact: -- |__MODEL_ID_VGGISH11__| — ``ac-0101_tvmrt_audio_classification_urbansound8k_vggish11_onnx`` (VGGish11) -- |__MODEL_ID_YAMNET__| — ``ac-0201_tvmrt_audio_classification_urbansound8k_yamnet_onnx`` (YAMNet) -- |__MODEL_ID_GCRN__| — ``ase-0201_tvmrt_speech_enhancement_voicebank_demand_16k_gcrn_fixed_4sec_onnx`` (GCRN) +- ``ac-0101`` - ``ac-0101_tvmrt_audio_classification_urbansound8k_vggish11_onnx`` (VGGish11) +- ``ac-0201`` - ``ac-0201_tvmrt_audio_classification_urbansound8k_yamnet_onnx`` (YAMNet) +- ``ase-0201`` - ``ase-0201_tvmrt_speech_enhancement_voicebank_demand_16k_gcrn_fixed_4sec_onnx`` (GCRN) Each of those artifact directories' ``artifacts/`` folder holds the TVM-RT -deployables (``deploy_lib.so``, ``deploy_graph.json``, ``deploy_param.params``) +deployment artifacts (``deploy_lib.so``, ``deploy_graph.json``, ``deploy_param.params``) in both target (``.evm``, aarch64) and host (``.pc``, x86) variants. The demo scripts and notebooks select the ``.evm`` variant automatically on the target. -GTCRN (|__MODEL_ID_GTCRN__|) gets an ONNX Runtime artifact instead of a +GTCRN (``ase-0100``) gets an ONNX Runtime artifact instead of a compiled one: -- |__MODEL_ID_GTCRN__| — ``ase-0100_onnxrt_speech_enhancement_voicebank_demand_16k_gtcrn_dns3_onnx`` (GTCRN) +- ``ase-0100`` - ``ase-0100_onnxrt_speech_enhancement_voicebank_demand_16k_gtcrn_dns3_onnx`` (GTCRN) Its directory holds only the ``model/`` folder, with the ``gtcrn_dns3.onnx`` -graph — there is no ``artifacts/`` folder since no TIDL compilation is +graph - there is no ``artifacts/`` folder since no TIDL compilation is involved. The demo script and notebook load the ONNX model directly with ``CPUExecutionProvider`` and run FP32 on the Arm core. Compiled TVM-RT + TIDL artifacts for your own models are produced by the x86 workflow in diff --git a/source/devices/AM62DX/edgeai/performance.rst b/source/devices/AM62DX/edgeai/performance.rst index 39a518d1c..2a1471f27 100644 --- a/source/devices/AM62DX/edgeai/performance.rst +++ b/source/devices/AM62DX/edgeai/performance.rst @@ -1,12 +1,12 @@ +.. include:: + .. _audioai-performance: ##################### Performance Benchmark ##################### -.. |tm| unicode:: U+2122 - -This section reports **inference performance** — latency and memory — for the +This section reports **inference performance** - latency and memory - for the reference |__PART_FAMILY_NAME__| Audio AI models. The same methodology (perfsim estimate + on-target measured) applies to any model you compile through the workflow. It is **not** an accuracy or audio-quality benchmark: model quality @@ -30,17 +30,17 @@ confused: - Produced by the TIDL performance simulator during ``compile``. The compiler writes a ``result.yaml`` per model under its work directory; the ``perfsim`` latency, GMAC count, and estimated DDR transfer are - read directly from it. This is a *static estimate* for the C7\ |tm| - NPU subgraph — it does not include Arm-side pre/post-processing or + read directly from it. This is a *static estimate* for the C7\ |trade| + NPU subgraph - it does not include Arm-side pre/post-processing or runtime overhead. * - **on-target measured** - Wall-clock latency timed on the AM62D target while running the :ref:`Model Zoo ` inference scripts. For the streaming speech-enhancement models it is also expressed as a - **real-time factor (RTF)** = processing time ÷ audio duration; RTF < 1 + **real-time factor (RTF)** = processing time / audio duration; RTF < 1 means the model keeps up with real-time audio. -Only models compiled for the C7\ |tm| NPU (TVM-RT + TIDL) have a perfsim +Only models compiled for the C7\ |trade| NPU (TVM-RT + TIDL) have a perfsim estimate. GTCRN runs FP32 on the Arm core through the ONNX runtime and has no TIDL subgraph, so perfsim does not apply to it. @@ -65,25 +65,25 @@ Per-model results - GMACs - DDR transfer *(estimated)* * - VGGish11 - - |__MODEL_ID_VGGISH11__| + - ``ac-0101`` - 8-bit - 5.235 ms - 1.1515 - 10.73 MB * - YAMNet - - |__MODEL_ID_YAMNET__| + - ``ac-0201`` - 8-bit - 1.990 ms - 0.0692 - 3.55 MB * - GCRN - - |__MODEL_ID_GCRN__| + - ``ase-0201`` - 16-bit - TBD - TBD - TBD * - GTCRN - - |__MODEL_ID_GTCRN__| + - ``ase-0100`` - FP32 (Arm) - N/A - N/A @@ -94,7 +94,7 @@ above). GCRN is compiled at 16-bit but its ``result.yaml`` is not yet captured, so its perfsim figures are **TBD**. GTCRN is Arm-only (no TIDL subgraph), so perfsim is **N/A**. -On-target measured latency and RTF for all four models are **TBD** — to be +On-target measured latency and RTF for all four models are **TBD** - to be filled in from the Model Zoo inference scripts on the AM62D EVM: .. list-table:: @@ -106,15 +106,15 @@ filled in from the Model Zoo inference scripts on the AM62D EVM: - Measured latency - RTF * - VGGish11 - - C7\ |tm| NPU + - C7\ |trade| NPU - TBD - - — (clip classifier) + - - (clip classifier) * - YAMNet - - C7\ |tm| NPU + - C7\ |trade| NPU - TBD - - — (clip classifier) + - - (clip classifier) * - GCRN - - C7\ |tm| NPU + - C7\ |trade| NPU - TBD - TBD * - GTCRN

+9H`;Gi3bd6m_(3~EL|(Nz-OTHMc6 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 literal 0 HcmV?d00001 diff --git a/source/images/audioai/tvm_tidl_flow.svg b/source/images/audioai/tvm_tidl_flow.svg new file mode 100644 index 000000000..d218e2f56 --- /dev/null +++ b/source/images/audioai/tvm_tidl_flow.svg @@ -0,0 +1,4 @@ + + + +
ONNX audio model
(YAMNet, VGGish11, GCRN)
Model import into TVM
Partitioning
TIDL import API
TVM C7x™ NPU
code generation
TIDL network compiler
TVM-RT deployable artifact
(deploy_lib.so + graph.json + params)
compile time (x86)
run time (AM62D)
TVM runtime
TIDL-RT
C7x™ NPU
unsupported ops
supported ops
Text is not SVG - cannot display
\ No newline at end of file From 4c1c7d14be12cb43b28b7b56bd20ea5f91401975 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 2 Sep 2026 22:46:21 -0500 Subject: [PATCH 03/16] feat(am62d-audioai): add Section 2 Audio AI Model Zoo on-target demos Signed-off-by: JuneChul Roh --- source/devices/AM62DX/audioai/model_zoo.rst | 271 +++++++++++++++++++- 1 file changed, 270 insertions(+), 1 deletion(-) diff --git a/source/devices/AM62DX/audioai/model_zoo.rst b/source/devices/AM62DX/audioai/model_zoo.rst index f4aa9e608..337ab1918 100644 --- a/source/devices/AM62DX/audioai/model_zoo.rst +++ b/source/devices/AM62DX/audioai/model_zoo.rst @@ -4,4 +4,273 @@ Audio AI Model Zoo ################## -Placeholder for the AM62D Audio AI Model Zoo on-target demos. +.. |tm| unicode:: U+2122 + +The AudioAI ModelZoo delivers out-of-box audio deep-learning demos that run +directly on the |__PART_FAMILY_NAME__| target. Each supported model ships as an +`ONNX `__ graph plus, where applicable, a pre-compiled +TVM-RT + TIDL artifact, so you can reproduce inference on the AM62D without +compiling anything yourself. Two demo front-ends are provided: standalone +Python inference scripts and Jupyter notebooks. This section runs entirely +**on the target**; the x86 compile/evaluate flow is covered in +:ref:`Compile / Evaluate / Inspect `. + +.. note:: + + The models in this repository are made available for experimentation and + development. They are not intended for deployment in production. + +******************** +What ships +******************** + +.. list-table:: + :header-rows: 1 + :widths: 18 26 14 14 28 + + * - Model + - Task + - Model ID + - On target + - Demo + * - VGGish11 + - Sound classification (|__DATASET_AUDIO_CLS__|) + - |__MODEL_ID_VGGISH11__| + - C7x\ |tm| NPU (TVM-RT + TIDL, 8-bit) + - Script + notebook + * - YAMNet + - Sound classification (|__DATASET_AUDIO_CLS__|) + - |__MODEL_ID_YAMNET__| + - C7x\ |tm| NPU (TVM-RT + TIDL, 8-bit) + - Script + notebook + * - GCRN + - Speech enhancement (|__DATASET_SPEECH_ENH__|) + - |__MODEL_ID_GCRN__| + - C7x\ |tm| NPU (TVM-RT + TIDL, 16-bit) + - Script + notebook + * - GTCRN + - Speech enhancement (|__DATASET_SPEECH_ENH__|) + - |__MODEL_ID_GTCRN__| + - Arm core (ONNX runtime, FP32) + - Notebook only + +VGGish11, YAMNet, and GCRN each ship a pre-compiled artifact and run offloaded +to the C7x\ |tm| NPU through the TVM runtime. GTCRN ships **no** compiled +artifact — it runs FP32 on the Arm core through the ONNX runtime and is +demonstrated in a notebook only. + +******************** +On-target setup +******************** + +The steps below run on the AM62D target (aarch64), on the Linux command line of +the Processor SDK rootfs. The notebooks and scripts run in a Python virtual +environment that reuses the TIDL-enabled TVM/ONNX runtime already present in the +rootfs. + +**1. Clone the repository.** Clone the AudioAI ModelZoo repository +(|__MODELZOO_REPO_URL__|): + +.. code-block:: console + + $ mkdir -p ~/tidl && cd ~/tidl + $ git clone https://github.com/TexasInstruments-Sandbox/audioai-modelzoo.git + $ cd audioai-modelzoo + +**2. Download the ONNX models.** Downloads the four model graphs into +``models/onnx/``: + +.. code-block:: console + + $ ./download_models.sh -y + +**3. Download the compiled artifacts.** Downloads the three pre-compiled +TVM-RT + TIDL artifacts into ``model_artifacts/11_02_18_00/am62d/`` +(GTCRN has no artifact): + +.. code-block:: console + + $ ./download_artifacts.sh -y + +Both download scripts default to an interactive selection menu; the ``-y`` flag +downloads everything non-interactively. Add ``-l`` to print the source URLs +without downloading. + +**4. Create the virtual environment.** Creates the venv at +|__TARGET_VENV_PATH__| with ``--system-site-packages`` so the TIDL-enabled +runtime from the rootfs is visible, then verifies that +``TIDLExecutionProvider`` is available: + +.. code-block:: console + + $ ./venv/setup_venv.sh + +**5. Activate the venv.** Activate it in every new shell before running the +demos: + +.. code-block:: console + + $ source ~/venv/modelzoo/bin/activate + +********************** +Inference script demos +********************** + +Run each script from its own model directory in the activated venv. Three of +the four models ship a command-line script; GTCRN is demonstrated in a notebook +only (see :ref:`Jupyter notebook demos `). + +YAMNet (sound classification) +============================= + +.. code-block:: console + + $ cd ~/tidl/audioai-modelzoo/inference/yamnet_sc + $ python3 yamnet_infer_audio.py --audio-file samples/miaow_16k.wav + +The script preprocesses the audio into log-mel patches, runs each patch through +the TVM-RT + TIDL session, and averages the per-patch scores. For the bundled +``miaow_16k.wav`` clip the top classes are cat/animal sounds. Expected output +(abridged): + +.. code-block:: text + + ====================================================================== + YAMNET INFERENCE SUMMARY + ====================================================================== + + Audio File: miaow_16k.wav + Artifacts: ac-0201_tvmrt_audio_classification_urbansound8k_yamnet_onnx + Audio Duration: 6.73 seconds + Number of Patches: 7 + + ====================================================================== + TOP 10 PREDICTIONS (averaged across all patches): + ====================================================================== + Rank Score Class + ---------------------------------------------------------------------- + 1 ... Cat + 2 ... Animal + ... + ====================================================================== + PERFORMANCE METRICS: + ====================================================================== + Inference Time (all patches): 17.53 ms total | 7 patches + RTF = 0.0026 (0.018s / 6.73s) + ====================================================================== + +A second sample, ``samples/speech_whistling2.wav``, is also included. + +VGGish11 (sound classification) +=============================== + +.. code-block:: console + + $ cd ~/tidl/audioai-modelzoo/inference/vggish11_sc + $ python3 vggish_infer_audio.py --audio-file sample_wav/139951-9-0-9.wav + +The bundled clip is |__DATASET_AUDIO_CLS__| class 9 (street music). Expected +output (abridged): + +.. code-block:: text + + ====================================================================== + VGGISH11 INFERENCE SUMMARY + ====================================================================== + + Audio File: 139951-9-0-9.wav + Artifacts: ac-0101_tvmrt_audio_classification_urbansound8k_vggish11_onnx + Audio Duration: 4.00 seconds + Top Class: Street music (Class 9) - Score: ... + + Performance: + Inference: 8.88 ms + Throughput: RTF = 0.0022 (0.009s / 4.00s) + ====================================================================== + +GCRN (speech enhancement) +========================= + +.. code-block:: console + + $ cd ~/tidl/audioai-modelzoo/inference/gcrn_se + $ python3 gcrn_infer_audio.py --input sample_wav/noisy.wav + +The script writes the enhanced audio to ``enhanced.wav`` beside the input and a +per-block timing report to ``gcrn-benchmark.md``. Pass ``--output`` to change +the destination wav. Expected output (abridged): + +.. code-block:: text + + Machine: aarch64 SOC: am62d TIDL_VER: 11_02_18_00 + Loading TVM + TIDL session... + Running inference on noisy.wav (9.77s)... + Wrote enhanced audio to sample_wav/enhanced.wav + + GCRN TVM+TIDL benchmark (3 chunk(s), 9.77s audio) + + block total (ms) per-chunk (ms) + ... + Real-Time Factor (inference / audio) = 3.9500 + + Wrote benchmark report to sample_wav/gcrn-benchmark.md + +.. _audioai-model-zoo-notebooks: + +********************** +Jupyter notebook demos +********************** + +All four models — including GTCRN — have a Jupyter notebook demo. Start Jupyter +Lab from the activated venv: + +.. code-block:: console + + $ cd ~/tidl/audioai-modelzoo + $ ./venv/jupyter_lab_venv.sh + +The launcher prints a highlighted access URL and pre-loads the four inference +notebooks in tabs. Open the URL in a browser on a machine that can reach the +target and enter the token ``tidl`` when prompted: + +.. code-block:: text + + Access URL: http://:8888/lab?token=tidl + +The notebooks are: + +.. list-table:: + :header-rows: 1 + :widths: 22 40 + + * - Model + - Notebook + * - GCRN + - ``inference/gcrn_se/gcrn_inference.ipynb`` + * - GTCRN + - ``inference/gtcrn_se/gtcrn_inference.ipynb`` + * - VGGish11 + - ``inference/vggish11_sc/vggish_inference.ipynb`` + * - YAMNet + - ``inference/yamnet_sc/yamnet_inference.ipynb`` + +******************** +Compiled artifacts +******************** + +``download_artifacts.sh`` places the pre-compiled TVM-RT + TIDL artifacts under +``model_artifacts/11_02_18_00/am62d/``: + +- |__MODEL_ID_VGGISH11__| — ``ac-0101_tvmrt_audio_classification_urbansound8k_vggish11_onnx`` (VGGish11) +- |__MODEL_ID_YAMNET__| — ``ac-0201_tvmrt_audio_classification_urbansound8k_yamnet_onnx`` (YAMNet) +- |__MODEL_ID_GCRN__| — ``ase-0201_tvmrt_speech_enhancement_voicebank_demand_16k_gcrn_fixed_4sec_onnx`` (GCRN) + +Each artifact directory holds the TVM-RT deployables (``deploy_lib.so``, +``deploy_graph.json``, ``deploy_param.params``) in both target (``.evm``, +aarch64) and host (``.pc``, x86) variants. The demo scripts and notebooks +select the ``.evm`` variant automatically on the target. + +GTCRN (|__MODEL_ID_GTCRN__|) ships **no** compiled artifact: it runs FP32 on the +Arm core through the ONNX runtime directly from its ONNX graph. These artifacts +are produced by the x86 workflow in +:ref:`Compile / Evaluate / Inspect `. From 6f1644787c22474474ebab6030716d333eab8830 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 2 Sep 2026 22:53:24 -0500 Subject: [PATCH 04/16] feat(am62d-audioai): add Section 3 compile/evaluate/inspect workflow Signed-off-by: JuneChul Roh --- .../audioai/compile_evaluate_inspect.rst | 315 +++++++++++++++++- 1 file changed, 314 insertions(+), 1 deletion(-) diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst index 9d575aa1b..5e1fb57cc 100644 --- a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst +++ b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst @@ -4,4 +4,317 @@ Compile / Evaluate / Inspect ############################ -Placeholder for the x86 compile, evaluate, and inspect workflow. +.. |tm| unicode:: U+2122 + +The :ref:`Audio AI Model Zoo ` runs *pre-compiled* artifacts +on the |__PART_FAMILY_NAME__| target. This section covers the **x86 host +workflow** that produces those artifacts: how to compile each audio model for +the C7x\ |tm| NPU, run host-emulation inference, and measure accuracy against a +dataset — using **edgeai-tidlrunner**. It runs entirely on an Ubuntu x86 PC; +nothing here touches the target. + +******************** +edgeai-tidlrunner +******************** + +edgeai-tidlrunner is a bring-your-own-model (BYOM) command-line wrapper over the +core `edgeai-tidl-tools `__ +compilation stack. A single YAML config per model drives every stage, and one +CLI — ``tidlrunner-cli`` — exposes the stages this section uses: + +.. list-table:: + :header-rows: 1 + :widths: 18 82 + + * - Command + - What it does + * - ``compile`` + - Imports the ONNX graph, quantizes and partitions it, and writes the + deployable TIDL/TVM-RT artifacts. + * - ``infer`` + - Runs the compiled model on the x86 host (PC emulation) to check output + correctness before deploying to the target. + * - ``evaluate`` + - Runs the compiled model over a dataset and reports accuracy or + speech-enhancement metrics. + * - ``inspect`` + - One-shot compile + inference + reference comparison that emits an + interactive HTML analysis report (see `Model Inspector`_). + +All commands are run from the repository root (``edgeai-tidlrunner/``) and take +``--config_path `` pointing at the per-model YAML. The same config file is +reused across ``compile``, ``infer``, and ``evaluate``. + +******************** +Setup +******************** + +Model compilation runs on an x86 PC (Ubuntu Linux recommended). The TIDL tools +used for compilation target Python 3.10, so create a dedicated Python 3.10 +environment. These steps assume `pyenv `__. + +**1. Clone the repository** (|__TIDLRUNNER_REPO_URL__|): + +.. code-block:: console + + $ git clone https://bitbucket.itg.ti.com/scm/edgeai-algo/edgeai-tidlrunner.git + $ cd edgeai-tidlrunner + +**2. Create and activate the Python 3.10 environment.** + +.. code-block:: console + + $ pyenv install 3.10 + $ pyenv virtualenv 3.10 tidlrunner + $ pyenv activate tidlrunner + +**3. Run the PC setup script.** This downloads the TIDL tools into +``tools/tidl_tools_package/`` and installs the runner: + +.. code-block:: console + + $ ./setup_runner_pc.sh + +The TIDL tools version is pinned by ``TIDL_TOOLS_VERSION`` inside +``setup_runner_pc.sh`` and can be overridden on the command line. **The tools +version used to compile must match the version on the target** — artifacts +compiled for a different TIDL version will not run: + +.. code-block:: console + + $ TIDL_TOOLS_VERSION="11.2.x" ./setup_runner_pc.sh + +**4. Install the audio extras.** The audio pipelines need extra Python packages +(``librosa``, ``soundfile``, ``scipy``, ``pesq``, ``pystoi``, ``scikit-learn``): + +.. code-block:: console + + $ pip install -e "tidlrunner[audio]" + +Datasets +======== + +Accuracy evaluation needs the reference datasets. Compilation alone can run on +random data (for latency-only measurement), but ``evaluate`` requires the real +sets. Download them from the repository root: + +.. code-block:: console + + $ # UrbanSound8K (~5.6 GB) — sound classification (VGGish11, YAMNet) + $ bash examples/audio/scripts/download_urbansound8k.sh + + $ # VoiceBank-DEMAND-16k (~2 GB) — speech enhancement (GCRN, GTCRN) + $ python3 examples/audio/scripts/download_voicebank_demand.py + +They land under ``data/datasets/UrbanSound8K/`` and +``data/datasets/VoiceBank-DEMAND-16k/`` — the paths the model configs expect. +The classification configs use UrbanSound8K **fold 10** (837 samples) as the +test set; the speech-enhancement configs use the VoiceBank-DEMAND-16k test set +(824 files). + +.. _audioai-am62d-interim-setup: + +Interim AM62D TVM-RT compile path +================================= + +.. warning:: + + The AM62D C7x\ |tm| compile path for the three TVM-RT models (VGGish11, + YAMNet, GCRN) is currently an **interim feasibility flow**, not the + productized ``setup_runner_pc.sh`` / ``TIDL_TOOLS_VERSION`` download. It is + documented here for reproducibility and will be replaced before release. + +The three TVM-RT models compile through a **dedicated environment** +(``tidlrunner-am62d``) that has the release-candidate TVM wheel installed. That +wheel ships the x86 AM62D TIDL tools *inside* the package, so the AM62D compile +uses the wheel-bundled tools rather than the ones ``setup_runner_pc.sh`` +downloads. TVM ``dlopen``\ s the TIDL runtime before Python's own import runs, +so the tool paths must be exported into the environment *before* ``tidlrunner-cli`` +starts. A small wrapper, ``agent_ws/am62d-run.sh``, does this and then runs the +command you pass it. It exports: + +.. list-table:: + :header-rows: 1 + :widths: 26 74 + + * - Variable + - Value + * - ``TIDL_TOOLS_PATH`` + - ``/3rdparty/x86_tidl_tools/AM62D`` (resolved from the + active venv's installed ``tvm``) + * - ``LD_LIBRARY_PATH`` + - prepends ``TIDL_TOOLS_PATH`` so ``libvx_tidl_rt.so`` resolves + * - ``ARM64_GCC_PATH`` + - path to your aarch64 GNU toolchain (e.g. ````) + * - ``CGT7X_ROOT`` + - path to your C7000 code-generation tools (e.g. ````) + * - ``SOC`` + - ``am62d`` + +Activate the dedicated environment, then prefix each TVM-RT command with the +wrapper (the whole ``tidlrunner-cli`` invocation is passed as one quoted +argument): + +.. code-block:: console + + $ pyenv activate tidlrunner-am62d + $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path " + +.. note:: + + GTCRN does **not** use this wrapper. It runs ARM-only through ONNX Runtime + (``tidl_offload: false``) and compiles under the standard ``tidlrunner`` + environment from steps 1–4. + +.. TODO(WI-004): replace the interim ``agent_ws/am62d-run.sh`` wrapper + + ``tidlrunner-am62d`` venv with the productized ``setup_runner_pc.sh`` / + ``TIDL_TOOLS_VERSION`` AM62D flow before release. Confirm the final tools + version string (artifact folder 11_02_18_00 vs. RC bundled tools 11.02.16.00). + +******************** +Compile and evaluate +******************** + +Each model has one config that drives all stages. Three models compile to the +C7x\ |tm| NPU through the TVM runtime; GTCRN is the ONNX-RT exception that runs +ARM-only. The final AM62D config paths are: + +.. list-table:: + :header-rows: 1 + :widths: 14 10 12 10 54 + + * - Model + - Model ID + - Runtime + - Bits + - Config path (relative to ``edgeai-tidlrunner/``) + * - VGGish11 + - |__MODEL_ID_VGGISH11__| + - TVM-RT + - 8 + - ``data/configs/samples/models/audio/audio_classification/urbansound8k/vggish11_tvmrt_config.yaml`` + * - YAMNet + - |__MODEL_ID_YAMNET__| + - TVM-RT + - 8 + - ``data/configs/samples/models/audio/audio_classification/urbansound8k/yamnet_tvmrt_config.yaml`` + * - GCRN + - |__MODEL_ID_GCRN__| + - TVM-RT + - 16 + - ``data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml`` + * - GTCRN + - |__MODEL_ID_GTCRN__| + - ONNX-RT + - FP32 + - ``data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gtcrn_dns3_config.yaml`` + +VGGish11 (TVM-RT, 8-bit) +======================== + +Runs on the C7x\ |tm| NPU (``tidl_offload: true``). Use the AM62D wrapper: + +.. code-block:: console + + $ CFG=data/configs/samples/models/audio/audio_classification/urbansound8k/vggish11_tvmrt_config.yaml + $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path $CFG" + $ bash agent_ws/am62d-run.sh "tidlrunner-cli infer --config_path $CFG" + $ bash agent_ws/am62d-run.sh "tidlrunner-cli evaluate --config_path $CFG" + +``evaluate`` reports top-1 / top-5 / macro-F1 over UrbanSound8K fold 10. + +YAMNet (TVM-RT, 8-bit) +====================== + +.. code-block:: console + + $ CFG=data/configs/samples/models/audio/audio_classification/urbansound8k/yamnet_tvmrt_config.yaml + $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path $CFG" + $ bash agent_ws/am62d-run.sh "tidlrunner-cli infer --config_path $CFG" + $ bash agent_ws/am62d-run.sh "tidlrunner-cli evaluate --config_path $CFG" + +GCRN (TVM-RT, 16-bit) +===================== + +GCRN is C7x\ |tm|-offloaded at 16-bit (``tidl_offload: true``, fixed 4-second +input). Same wrapper flow: + +.. code-block:: console + + $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml + $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path $CFG" + $ bash agent_ws/am62d-run.sh "tidlrunner-cli infer --config_path $CFG" + $ bash agent_ws/am62d-run.sh "tidlrunner-cli evaluate --config_path $CFG" + +``evaluate`` reports PESQ / STOI / SI-SDR over the VoiceBank-DEMAND-16k test set. + +GTCRN (ONNX-RT, ARM-only) +========================= + +GTCRN has a dynamic time axis and TIDL-unsupported operators, so it runs on the +Arm Cortex-A cores through ONNX Runtime (``tidl_offload: false``) — no C7x\ |tm| +offload and **no** AM62D wrapper. Run it directly under the standard +``tidlrunner`` environment: + +.. code-block:: console + + $ pyenv activate tidlrunner + $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gtcrn_dns3_config.yaml + $ tidlrunner-cli compile --config_path $CFG --target_device AM62D + $ tidlrunner-cli infer --config_path $CFG --target_device AM62D + $ tidlrunner-cli evaluate --config_path $CFG --target_device AM62D + +.. note:: + + The shipped ``gtcrn_dns3_config.yaml`` sets ``target_device: AM62A``; because + the model is ARM-only, execution is device-independent. Passing + ``--target_device AM62D`` keeps its work directory under the AM62D tree, + consistent with the other three models. + +******************** +Model Inspector +******************** + +``tidlrunner-cli inspect`` is a one-shot analysis pipeline: it compiles the +model for TIDL, runs inference, re-runs a non-TIDL reference for comparison, +computes per-layer signal-to-noise ratios, and emits a **self-contained +interactive HTML report** — no need to run ``compile`` and ``infer`` +separately. The report opens in any browser and lands at: + +.. code-block:: text + + work_dirs/compile////inspector/modelinspector.html + +The report has three tabs: + +- **Model Summary** — acceleration ratio (layers on the C7x\ |tm| DSP vs. Arm + fallback), input/output specs, and an interactive ONNX graph. +- **Subgraphs** — the TIDL subgraph(s) offloaded to the DSP, with per-layer + identity and a quantization analysis (INT8 vs. FP32 activation histograms and + scatter plots). +- **Performance** — *estimated* per-layer processing time, DSP cycle breakdown + (total / IO / kernel), memory usage (DDR / L2 / MSMC), and SNR metrics. + +.. note:: + + All Performance-tab numbers are **estimates** from the compiler, not + on-target measurements. Model Inspector requires TIDL tools **11.02 or + later** (earlier versions emit SVG subgraph files it cannot read). + +GCRN showcase — an offloaded DSP subgraph +========================================= + +Because GCRN now compiles with ``tidl_offload: true`` on AM62D, its inspector +report shows a **real C7x\ |tm| DSP subgraph** rather than an all-Arm fallback: +the Subgraphs tab lists a single offloaded subgraph (16-bit) with its layer +mapping, and the Performance tab breaks that subgraph down by cycles and memory. +Generate it through the AM62D wrapper: + +.. code-block:: console + + $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml + $ bash agent_ws/am62d-run.sh "tidlrunner-cli inspect --config_path $CFG" + +For contrast, running ``inspect`` on the GTCRN (ONNX-RT) config produces a +report with **no** DSP subgraph — every layer is Arm fallback — which is what a +non-offloaded model looks like in the inspector. From 6cf0df019a93d0662f80c8151fe4956d0f2c4eef Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 2 Sep 2026 22:56:20 -0500 Subject: [PATCH 05/16] feat(am62d-audioai): add Section 4 performance benchmark tables Signed-off-by: JuneChul Roh --- source/devices/AM62DX/audioai/performance.rst | 130 +++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/source/devices/AM62DX/audioai/performance.rst b/source/devices/AM62DX/audioai/performance.rst index 829344546..0e28fdcd7 100644 --- a/source/devices/AM62DX/audioai/performance.rst +++ b/source/devices/AM62DX/audioai/performance.rst @@ -4,4 +4,132 @@ Performance Benchmark ##################### -Placeholder for the AM62D Audio AI performance benchmark tables. +.. |tm| unicode:: U+2122 + +This section reports **inference performance** — latency and memory — for the +four |__PART_FAMILY_NAME__| Audio AI models. It is **not** an accuracy or +audio-quality benchmark: model quality (classification accuracy, PESQ / STOI / +SI-SDR) is measured by the ``evaluate`` step in +:ref:`Compile / Evaluate / Inspect `. + +*********** +Methodology +*********** + +Two independent figures are reported for each model, and they must not be +confused: + +.. list-table:: + :header-rows: 1 + :widths: 22 78 + + * - Figure + - How it is obtained + * - **perfsim estimate** + - Produced by the TIDL performance simulator during ``compile``. The + compiler writes a ``result.yaml`` per model under its work directory; + the ``perfsim`` latency, GMAC count, and estimated DDR transfer are + read directly from it. This is a *static estimate* for the C7x\ |tm| + NPU subgraph — it does not include Arm-side pre/post-processing or + runtime overhead. + * - **on-target measured** + - Wall-clock latency timed on the AM62D target while running the + :ref:`Model Zoo ` inference scripts. For the + streaming speech-enhancement models it is also expressed as a + **real-time factor (RTF)** = processing time ÷ audio duration; RTF < 1 + means the model keeps up with real-time audio. + +Only models compiled for the C7x\ |tm| NPU (TVM-RT + TIDL) have a perfsim +estimate. GTCRN runs FP32 on the Arm core through the ONNX runtime and has no +TIDL subgraph, so perfsim does not apply to it. + +.. note:: + + The perfsim values below are read from ``result.yaml`` and are labelled + *estimated (perfsim)*. On-target measured latency and RTF are marked **TBD** + until measured on the AM62D EVM. + +***************** +Per-model results +***************** + +.. list-table:: + :header-rows: 1 + :widths: 16 12 12 20 14 26 + + * - Model + - Model ID + - Precision + - perfsim latency *(estimated)* + - GMACs + - DDR transfer *(estimated)* + * - VGGish11 + - |__MODEL_ID_VGGISH11__| + - 8-bit + - 5.235 ms + - 1.1515 + - 10.73 MB + * - YAMNet + - |__MODEL_ID_YAMNET__| + - 8-bit + - 1.990 ms + - 0.0692 + - 3.55 MB + * - GCRN + - |__MODEL_ID_GCRN__| + - 16-bit + - TBD + - TBD + - TBD + * - GTCRN + - |__MODEL_ID_GTCRN__| + - FP32 (Arm) + - N/A + - N/A + - N/A + +VGGish11 and YAMNet are compiled and have ``result.yaml`` perfsim values (shown +above). GCRN is compiled at 16-bit but its ``result.yaml`` is not yet captured, +so its perfsim figures are **TBD**. GTCRN is Arm-only (no TIDL subgraph), so +perfsim is **N/A**. + +On-target measured latency and RTF for all four models are **TBD** — to be +filled in from the Model Zoo inference scripts on the AM62D EVM: + +.. list-table:: + :header-rows: 1 + :widths: 20 20 30 30 + + * - Model + - On target + - Measured latency + - RTF + * - VGGish11 + - C7x\ |tm| NPU + - TBD + - — (clip classifier) + * - YAMNet + - C7x\ |tm| NPU + - TBD + - — (clip classifier) + * - GCRN + - C7x\ |tm| NPU + - TBD + - TBD + * - GTCRN + - Arm core + - TBD + - TBD + +RTF is reported only for the streaming speech-enhancement models (GCRN, GTCRN); +VGGish11 and YAMNet classify a whole clip, so a real-time factor is not +meaningful for them. + +******** +Non-goal +******** + +This section does **not** assess model quality. Classification accuracy and +speech-enhancement quality metrics are produced by ``tidlrunner-cli evaluate`` +and documented in +:ref:`Compile / Evaluate / Inspect `. From 0db7cfb3629579fa44c5e99d32d9e6d962392dbe Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 2 Sep 2026 23:01:40 -0500 Subject: [PATCH 06/16] feat(am62d-audioai): integrate navigation, cross-links, and full build Signed-off-by: JuneChul Roh --- .../config/vocabularies/PSDK/accept.txt | 18 ++++++++++++++++++ configs/AM62DX/AM62DX_audioai_config.txt | 4 ++-- configs/AM62DX/AM62DX_audioai_tags.py | 4 ++-- .../audioai/compile_evaluate_inspect.rst | 8 ++++---- source/devices/AM62DX/audioai/performance.rst | 6 +++--- source/images/audioai/tvm_tidl_flow.drawio | 16 +++++++++++----- source/images/audioai/tvm_tidl_flow.png | Bin 119800 -> 127058 bytes source/images/audioai/tvm_tidl_flow.svg | 2 +- 8 files changed, 41 insertions(+), 17 deletions(-) diff --git a/.github/styles/config/vocabularies/PSDK/accept.txt b/.github/styles/config/vocabularies/PSDK/accept.txt index 9611e6dcb..ac18fcc3b 100644 --- a/.github/styles/config/vocabularies/PSDK/accept.txt +++ b/.github/styles/config/vocabularies/PSDK/accept.txt @@ -1,10 +1,17 @@ Armbian +BYOM BeagleBone Broadcom +C7x +DDR Debian +GCRN +GMACs GStreamer +GTCRN Jacinto Khronos +NPU NXP ONNX OpenCL @@ -12,15 +19,20 @@ OpenGL OpenVX PVRCarbon PVRTune +RTF Sitara Skia Slint TFLite +TIDL TVM Trixie UniFlash +VGGish11 +VoiceBank Vulkan Weston +YAMNet Yocto Zink [Bb]ackplane @@ -34,8 +46,14 @@ Zink [Rr]enderers? [Ss]carthgap [Tt]oolchain +aarch64 balenaEtcher bdebstrap +edgeai fdisk mmdebstrap +perfsim +pyenv +tidlrunner umount +venv diff --git a/configs/AM62DX/AM62DX_audioai_config.txt b/configs/AM62DX/AM62DX_audioai_config.txt index 49404d3c6..fe538eb3d 100644 --- a/configs/AM62DX/AM62DX_audioai_config.txt +++ b/configs/AM62DX/AM62DX_audioai_config.txt @@ -22,8 +22,8 @@ Replacement Variables '__AUDIOAI_SDK_VERSION__' : '12.1' '__TIDL_VERSION__' : '11_02_18_00' '__TIDL_TOOLS_VERSION__' : '11.2.x' -'__MODELZOO_REPO_URL__' : 'https://bitbucket.itg.ti.com/projects/AUDIOAI-ALGO/repos/audioai-modelzoo' -'__TIDLRUNNER_REPO_URL__' : 'https://bitbucket.itg.ti.com/projects/EDGEAI-ALGO/repos/edgeai-tidlrunner' +'__MODELZOO_REPO_URL__' : 'https://github.com/TexasInstruments-Sandbox/audioai-modelzoo' +'__TIDLRUNNER_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidlrunner' '__TIDL_TOOLS_REPO_URL__' : 'https://github.com/TexasInstruments/edgeai-tidl-tools' '__TARGET_VENV_PATH__' : '~/venv/modelzoo' '__DATASET_AUDIO_CLS__' : 'UrbanSound8K' diff --git a/configs/AM62DX/AM62DX_audioai_tags.py b/configs/AM62DX/AM62DX_audioai_tags.py index 66d9fecca..4e85bcd38 100644 --- a/configs/AM62DX/AM62DX_audioai_tags.py +++ b/configs/AM62DX/AM62DX_audioai_tags.py @@ -1,6 +1,6 @@ # Project name and HTML title -project = u'Audio AI SDK for AM62D' -html_title = 'Audio AI SDK for AM62D Documentation' +project = u'Audio AI for AM62D' +html_title = 'Audio AI for AM62D Documentation' # The master toctree document. master_doc = 'devices/AM62DX/audioai/index' diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst index 5e1fb57cc..0cde3f574 100644 --- a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst +++ b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst @@ -1,8 +1,8 @@ .. _audioai-compile-evaluate-inspect: -############################ -Compile / Evaluate / Inspect -############################ +################################## +Model Compile / Evaluate / Inspect +################################## .. |tm| unicode:: U+2122 @@ -57,7 +57,7 @@ environment. These steps assume `pyenv `__. .. code-block:: console - $ git clone https://bitbucket.itg.ti.com/scm/edgeai-algo/edgeai-tidlrunner.git + $ git clone https://github.com/TexasInstruments/edgeai-tidlrunner.git $ cd edgeai-tidlrunner **2. Create and activate the Python 3.10 environment.** diff --git a/source/devices/AM62DX/audioai/performance.rst b/source/devices/AM62DX/audioai/performance.rst index 0e28fdcd7..67fd1355d 100644 --- a/source/devices/AM62DX/audioai/performance.rst +++ b/source/devices/AM62DX/audioai/performance.rst @@ -125,9 +125,9 @@ RTF is reported only for the streaming speech-enhancement models (GCRN, GTCRN); VGGish11 and YAMNet classify a whole clip, so a real-time factor is not meaningful for them. -******** -Non-goal -******** +******************* +Scope & Limitations +******************* This section does **not** assess model quality. Classification accuracy and speech-enhancement quality metrics are produced by ``tidlrunner-cli evaluate`` diff --git a/source/images/audioai/tvm_tidl_flow.drawio b/source/images/audioai/tvm_tidl_flow.drawio index 83b434ea0..2c5246eb2 100644 --- a/source/images/audioai/tvm_tidl_flow.drawio +++ b/source/images/audioai/tvm_tidl_flow.drawio @@ -19,7 +19,7 @@ - + @@ -51,8 +51,11 @@ + + + - + @@ -64,10 +67,10 @@ - + - + @@ -79,7 +82,10 @@ - + + + + diff --git a/source/images/audioai/tvm_tidl_flow.png b/source/images/audioai/tvm_tidl_flow.png index 6b5406f2f7682b7413a9265fe6c6e274d654066a..a5a7d3b8c05b6cd3c61d832cdefa8d0e2506c88d 100644 GIT binary patch delta 88687 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%0AE>bY^+ku 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
DAsRmw4vm=I` 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 x>;DIG68XO?1Dl|m+1w -
ONNX audio model
(YAMNet, VGGish11, GCRN)
Model import into TVM
Partitioning
TIDL import API
TVM C7x™ NPU
code generation
TIDL network compiler
TVM-RT deployable artifact
(deploy_lib.so + graph.json + params)
compile time (x86)
run time (AM62D)
TVM runtime
TIDL-RT
C7x™ NPU
unsupported ops
supported ops
Text is not SVG - cannot display
\ No newline at end of file +
ONNX audio model
(YAMNet, VGGish11, GCRN)
Model import into TVM
Partitioning
TIDL import API
TVM C7x™ DSP
code generation
TIDL network compiler
TVM-RT deployable artifact
(deploy_lib.so + graph.json + params)
compile time (x86)
run time (AM62D)
TVM runtime
TIDL-RT
Arm® core
C7x™ NPU
TIDL unsupported ops
TIDL supported ops
Text is not SVG - cannot display
\ No newline at end of file From 283617cc38f1bdea4a07bf49373ec9c1ac0153d6 Mon Sep 17 00:00:00 2001 From: JuneChul Roh Date: Wed, 9 Sep 2026 16:41:13 -0500 Subject: [PATCH 07/16] docs(am62d-audioai): reframe as BYOM workflow and fix C7 NPU terminology Signed-off-by: JuneChul Roh --- .../audioai/compile_evaluate_inspect.rst | 87 ++++++++++-------- .../devices/AM62DX/audioai/introduction.rst | 79 ++++++++++------ source/devices/AM62DX/audioai/model_zoo.rst | 23 ++--- source/devices/AM62DX/audioai/performance.rst | 19 ++-- source/images/audioai/export-diagrams.sh | 18 ++++ source/images/audioai/tvm_tidl_flow.drawio | 21 ++--- source/images/audioai/tvm_tidl_flow.png | Bin 127058 -> 43683 bytes source/images/audioai/tvm_tidl_flow.svg | 2 +- 8 files changed, 150 insertions(+), 99 deletions(-) create mode 100755 source/images/audioai/export-diagrams.sh diff --git a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst index 0cde3f574..b2a3de826 100644 --- a/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst +++ b/source/devices/AM62DX/audioai/compile_evaluate_inspect.rst @@ -8,11 +8,19 @@ Model Compile / Evaluate / Inspect The :ref:`Audio AI Model Zoo ` runs *pre-compiled* artifacts on the |__PART_FAMILY_NAME__| target. This section covers the **x86 host -workflow** that produces those artifacts: how to compile each audio model for -the C7x\ |tm| NPU, run host-emulation inference, and measure accuracy against a +workflow** that produces those artifacts: how to compile an audio model for +the C7\ |tm| NPU, run host-emulation inference, and measure accuracy against a dataset — using **edgeai-tidlrunner**. It runs entirely on an Ubuntu x86 PC; nothing here touches the target. +This is the workflow for *any* audio model, not just the reference models. The +four reference models below are worked examples; to bring your own model you +point the same ``tidlrunner-cli`` at your ONNX graph and a per-model YAML config, +using a reference config as a starting template. Which operators offload to the +C7\ |tm| NPU (vs. fall back to the Arm core) is determined by TIDL — see +`edgeai-tidl-tools `__ for +the authoritative list of supported operators. + ******************** edgeai-tidlrunner ******************** @@ -119,7 +127,7 @@ Interim AM62D TVM-RT compile path .. warning:: - The AM62D C7x\ |tm| compile path for the three TVM-RT models (VGGish11, + The AM62D C7\ |tm| NPU compile path for the three TVM-RT models (VGGish11, YAMNet, GCRN) is currently an **interim feasibility flow**, not the productized ``setup_runner_pc.sh`` / ``TIDL_TOOLS_VERSION`` download. It is documented here for reproducibility and will be replaced before release. @@ -130,8 +138,9 @@ wheel ships the x86 AM62D TIDL tools *inside* the package, so the AM62D compile uses the wheel-bundled tools rather than the ones ``setup_runner_pc.sh`` downloads. TVM ``dlopen``\ s the TIDL runtime before Python's own import runs, so the tool paths must be exported into the environment *before* ``tidlrunner-cli`` -starts. A small wrapper, ``agent_ws/am62d-run.sh``, does this and then runs the -command you pass it. It exports: +starts. A sourceable env script, ``devices/am62d_env.sh``, exports these into +the current shell once; every ``tidlrunner-cli`` command run afterward in that +shell picks them up. It exports: .. list-table:: :header-rows: 1 @@ -151,22 +160,22 @@ command you pass it. It exports: * - ``SOC`` - ``am62d`` -Activate the dedicated environment, then prefix each TVM-RT command with the -wrapper (the whole ``tidlrunner-cli`` invocation is passed as one quoted -argument): +Activate the dedicated environment, then source the env script once per shell +before running ``tidlrunner-cli`` directly: .. code-block:: console $ pyenv activate tidlrunner-am62d - $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path " + $ source devices/am62d_env.sh + $ tidlrunner-cli compile --config_path .. note:: - GTCRN does **not** use this wrapper. It runs ARM-only through ONNX Runtime - (``tidl_offload: false``) and compiles under the standard ``tidlrunner`` - environment from steps 1–4. + GTCRN does **not** need this env script. It runs ARM-only through ONNX + Runtime (``tidl_offload: false``) and compiles under the standard + ``tidlrunner`` environment from steps 1–4. -.. TODO(WI-004): replace the interim ``agent_ws/am62d-run.sh`` wrapper + +.. TODO: replace the interim ``devices/am62d_env.sh`` env script + ``tidlrunner-am62d`` venv with the productized ``setup_runner_pc.sh`` / ``TIDL_TOOLS_VERSION`` AM62D flow before release. Confirm the final tools version string (artifact folder 11_02_18_00 vs. RC bundled tools 11.02.16.00). @@ -176,8 +185,11 @@ Compile and evaluate ******************** Each model has one config that drives all stages. Three models compile to the -C7x\ |tm| NPU through the TVM runtime; GTCRN is the ONNX-RT exception that runs -ARM-only. The final AM62D config paths are: +C7\ |tm| NPU through the TVM runtime; GTCRN is the ONNX-RT exception that runs +ARM-only. The three TVM-RT models below assume the AM62D env from +`Interim AM62D TVM-RT compile path`_ — ``pyenv activate tidlrunner-am62d`` +followed by ``source devices/am62d_env.sh`` — is already sourced in the +current shell. The final AM62D config paths are: .. list-table:: :header-rows: 1 @@ -212,14 +224,14 @@ ARM-only. The final AM62D config paths are: VGGish11 (TVM-RT, 8-bit) ======================== -Runs on the C7x\ |tm| NPU (``tidl_offload: true``). Use the AM62D wrapper: +Runs on the C7\ |tm| NPU (``tidl_offload: true``): .. code-block:: console $ CFG=data/configs/samples/models/audio/audio_classification/urbansound8k/vggish11_tvmrt_config.yaml - $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path $CFG" - $ bash agent_ws/am62d-run.sh "tidlrunner-cli infer --config_path $CFG" - $ bash agent_ws/am62d-run.sh "tidlrunner-cli evaluate --config_path $CFG" + $ tidlrunner-cli compile --config_path $CFG + $ tidlrunner-cli infer --config_path $CFG + $ tidlrunner-cli evaluate --config_path $CFG ``evaluate`` reports top-1 / top-5 / macro-F1 over UrbanSound8K fold 10. @@ -229,22 +241,22 @@ YAMNet (TVM-RT, 8-bit) .. code-block:: console $ CFG=data/configs/samples/models/audio/audio_classification/urbansound8k/yamnet_tvmrt_config.yaml - $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path $CFG" - $ bash agent_ws/am62d-run.sh "tidlrunner-cli infer --config_path $CFG" - $ bash agent_ws/am62d-run.sh "tidlrunner-cli evaluate --config_path $CFG" + $ tidlrunner-cli compile --config_path $CFG + $ tidlrunner-cli infer --config_path $CFG + $ tidlrunner-cli evaluate --config_path $CFG GCRN (TVM-RT, 16-bit) ===================== -GCRN is C7x\ |tm|-offloaded at 16-bit (``tidl_offload: true``, fixed 4-second -input). Same wrapper flow: +GCRN is C7\ |tm| NPU-offloaded at 16-bit (``tidl_offload: true``, fixed 4-second +input): .. code-block:: console $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml - $ bash agent_ws/am62d-run.sh "tidlrunner-cli compile --config_path $CFG" - $ bash agent_ws/am62d-run.sh "tidlrunner-cli infer --config_path $CFG" - $ bash agent_ws/am62d-run.sh "tidlrunner-cli evaluate --config_path $CFG" + $ tidlrunner-cli compile --config_path $CFG + $ tidlrunner-cli infer --config_path $CFG + $ tidlrunner-cli evaluate --config_path $CFG ``evaluate`` reports PESQ / STOI / SI-SDR over the VoiceBank-DEMAND-16k test set. @@ -252,7 +264,7 @@ GTCRN (ONNX-RT, ARM-only) ========================= GTCRN has a dynamic time axis and TIDL-unsupported operators, so it runs on the -Arm Cortex-A cores through ONNX Runtime (``tidl_offload: false``) — no C7x\ |tm| +Arm Cortex-A cores through ONNX Runtime (``tidl_offload: false``) — no C7\ |tm| NPU offload and **no** AM62D wrapper. Run it directly under the standard ``tidlrunner`` environment: @@ -266,10 +278,7 @@ offload and **no** AM62D wrapper. Run it directly under the standard .. note:: - The shipped ``gtcrn_dns3_config.yaml`` sets ``target_device: AM62A``; because - the model is ARM-only, execution is device-independent. Passing - ``--target_device AM62D`` keeps its work directory under the AM62D tree, - consistent with the other three models. + ******************** Model Inspector @@ -287,7 +296,7 @@ separately. The report opens in any browser and lands at: The report has three tabs: -- **Model Summary** — acceleration ratio (layers on the C7x\ |tm| DSP vs. Arm +- **Model Summary** — acceleration ratio (layers on the C7x DSP vs. Arm fallback), input/output specs, and an interactive ONNX graph. - **Subgraphs** — the TIDL subgraph(s) offloaded to the DSP, with per-layer identity and a quantization analysis (INT8 vs. FP32 activation histograms and @@ -305,16 +314,20 @@ GCRN showcase — an offloaded DSP subgraph ========================================= Because GCRN now compiles with ``tidl_offload: true`` on AM62D, its inspector -report shows a **real C7x\ |tm| DSP subgraph** rather than an all-Arm fallback: +report shows a **real C7x DSP subgraph** rather than an all-Arm fallback: the Subgraphs tab lists a single offloaded subgraph (16-bit) with its layer mapping, and the Performance tab breaks that subgraph down by cycles and memory. -Generate it through the AM62D wrapper: +Generate it with the AM62D env sourced (see +`Interim AM62D TVM-RT compile path`_): .. code-block:: console $ CFG=data/configs/samples/models/audio/speech_enhancement/voicebank_demand_16k/gcrn_fixed_4sec_tvmrt_config.yaml - $ bash agent_ws/am62d-run.sh "tidlrunner-cli inspect --config_path $CFG" + $ tidlrunner-cli inspect --config_path $CFG For contrast, running ``inspect`` on the GTCRN (ONNX-RT) config produces a report with **no** DSP subgraph — every layer is Arm fallback — which is what a -non-offloaded model looks like in the inspector. +non-offloaded model looks like in the inspector. GTCRN also runs with +``tidl_offload: false``, so its work directory uses a ``notidl`` segment in +place of the ```` shown in the path template above, e.g. +``work_dirs/compile/AM62D/notidl//...``. diff --git a/source/devices/AM62DX/audioai/introduction.rst b/source/devices/AM62DX/audioai/introduction.rst index a8ba7b25e..2fb7c3fe1 100644 --- a/source/devices/AM62DX/audioai/introduction.rst +++ b/source/devices/AM62DX/audioai/introduction.rst @@ -6,11 +6,17 @@ Introduction & Overview .. |tm| unicode:: U+2122 -This guide documents the audio deep-learning (Audio AI/DL) models supported on -the |__PART_FAMILY_NAME__| platform in |__SDK_FULL_NAME__| |__AUDIOAI_SDK_VERSION__|. -It is written for embedded developers who want to run, compile, evaluate, and -benchmark the supported audio models on the AM62D — either out of the box on the -target with pre-compiled artifacts, or through the x86 compile/evaluate workflow. +This guide walks through the workflow for developing and deploying audio +deep-learning (Audio AI/DL) models on the |__PART_FAMILY_NAME__| platform, using +|__SDK_FULL_NAME__| |__AUDIOAI_SDK_VERSION__|. It is written for embedded +developers who want to run, compile, evaluate, and benchmark audio models on the +AM62D — either out of the box on the target with pre-compiled artifacts, or +through the x86 compile/evaluate workflow. + +Four **reference models** serve as worked examples throughout the guide, but the +workflow is not limited to them: the same compile/evaluate/inspect flow is a +bring-your-own-model (BYOM) flow that accepts any supported `ONNX +`__ model. More reference models will be added over time. The remaining sections cover: @@ -18,20 +24,37 @@ The remaining sections cover: target (inference scripts and Jupyter notebooks) using pre-trained models and pre-compiled artifacts. - :ref:`Compile / Evaluate / Inspect ` — the - x86 workflow built on ``edgeai-tidlrunner``: compile each model for the AM62D, + x86 BYOM workflow built on ``edgeai-tidlrunner``: compile a model for the AM62D, evaluate accuracy on a dataset, and inspect the compiled subgraphs. - :ref:`Performance benchmark ` — latency and memory methodology with per-model tables. ******************** -Supported models +Development workflow ******************** -Four models are supported, in two task families. Every model is delivered as an -`ONNX `__ graph and, except for GTCRN, is offloaded to the -C7x\ |tm| NPU through the TVM runtime (TVM-RT); GTCRN is the one model that runs -ARM-only. See :ref:`the framework overview ` below for what -that means. +The end-to-end path is the same for a reference model or your own model: + +#. **Obtain an ONNX model** — a reference graph shipped with the AudioAI ModelZoo, + or your own exported ONNX. +#. **Compile** it for the C7\ |tm| NPU on an x86 host (:ref:`Compile / Evaluate / + Inspect `). +#. **Evaluate** accuracy or audio-quality metrics on a dataset. +#. **Inspect** the compiled subgraphs and per-layer analysis. +#. **Run** on the AM62D target using the compiled artifact + (:ref:`Audio AI Model Zoo `). +#. **Benchmark** latency and memory (:ref:`Performance `). + +******************** +Reference models +******************** + +Four reference models are provided across two task families, as worked examples +of the workflow. Each is delivered as an `ONNX `__ graph and, +except for GTCRN, is offloaded to the C7\ |tm| NPU through the TVM runtime +(TVM-RT); GTCRN is the one that runs ARM-only. See :ref:`the framework overview +` below for what that means. The same flow accepts your own +ONNX model, and more reference models will be added over time. Audio analysis and classification ================================== @@ -39,12 +62,12 @@ Audio analysis and classification **VGGish11** (model ID |__MODEL_ID_VGGISH11__|) Audio-clip classification. Input is a log-mel patch of shape ``(1, 1, 64, 126)``; output is ``(1, 10)`` class logits plus a ``(1, 512)`` embedding. Runs at 8-bit, - fully offloaded to the C7x\ |tm| NPU via TVM-RT (a single TIDL subgraph). + fully offloaded to the C7\ |tm| NPU via TVM-RT (a single TIDL subgraph). **YAMNet** (model ID |__MODEL_ID_YAMNET__|) Audio-event classification. Input is a log-mel patch of shape ``(1, 1, 96, 64)``; output is ``(1, 521)`` class scores. Runs at 8-bit, fully offloaded to the - C7x\ |tm| NPU via TVM-RT (a single TIDL subgraph). + C7\ |tm| NPU via TVM-RT (a single TIDL subgraph). Both classification models are evaluated on the |__DATASET_AUDIO_CLS__| dataset. @@ -54,7 +77,7 @@ Speech enhancement **GCRN** (model ID |__MODEL_ID_GCRN__|) Convolutional-recurrent speech enhancement (denoising) over a fixed 4-second window. Input and output are complex spectrograms of shape ``(1, 2, 401, 161)``. - Runs at 16-bit and is offloaded to the C7x\ |tm| NPU via TVM-RT + Runs at 16-bit and is offloaded to the C7\ |tm| NPU via TVM-RT (``tidl_offload: true``). **GTCRN** (model ID |__MODEL_ID_GTCRN__|) @@ -62,7 +85,7 @@ Speech enhancement are complex spectrograms of shape ``(1, 257, T, 2)`` with a dynamic time dimension ``T``. Runs FP32 on the Arm core through the ONNX runtime (``tidl_offload: false``) — it is the only supported model that is **not** - offloaded to the C7x\ |tm| NPU. + offloaded to the C7\ |tm| NPU. Both speech-enhancement models are evaluated on the |__DATASET_SPEECH_ENH__| dataset. @@ -74,27 +97,31 @@ TVM + TIDL framework ************************** The AM62D audio models are compiled and deployed with **TI TVM**, TI's fork of -the `Apache TVM `__ deep-learning compiler. TI TVM -integrates **TIDL** (TI Deep Learning) as an accelerator backend so that the -layers TIDL supports execute with optimized C7x\ |tm| NPU performance, while any -remaining layers are covered by TVM's own C7x\ |tm| NPU code generation. The -result is a single deployable artifact in which the **entire model runs on the -C7x**\ |tm| **NPU**. +the `Apache TVM `__ deep-learning compiler. The target +accelerator is the **C7**\ |tm| **NPU** — TI's Neural Processing Unit, which +combines the **C7x DSP** with the **Matrix Multiplication Accelerator (MMA)** +(referred to as *C7x+MMA* in older documentation). + +TI TVM integrates **TIDL** (TI Deep Learning) as an accelerator backend: +TIDL-supported layers are offloaded to the MMA, while TVM generates **C7x DSP** +code for any remaining layers. Because the MMA and the C7x DSP together make up +the C7\ |tm| NPU, the result is a single deployable artifact in which the +**entire model runs on the C7**\ |tm| **NPU**. Compilation runs on an x86 host and proceeds in stages: #. **Model import** — the ONNX graph is imported into TVM. #. **Partitioning** — using the TIDL import API, the graph is split into TIDL-supported subgraphs (compiled by the TIDL network compiler) and the - remaining operators (handled by TVM C7x\ |tm| NPU code generation). + remaining operators (handled by TVM C7x DSP code generation). #. **Artifact generation** — both parts are packaged into one TVM-RT deployable artifact (``deploy_lib.so`` + ``deploy_graph.json`` + ``deploy_param.params``). At run time on the AM62D, the TVM runtime loads the artifact and dispatches the -offloaded subgraphs to TIDL-RT on the C7x\ |tm| NPU. +offloaded subgraphs to TIDL-RT on the C7\ |tm| NPU. -.. figure:: ../../../images/audioai/tvm_tidl_flow.png - :scale: 55 % +.. figure:: ../../../images/audioai/tvm_tidl_flow.svg + :width: 80 % :align: center TVM + TIDL compile-and-deploy flow for the AM62D audio models. Green blocks diff --git a/source/devices/AM62DX/audioai/model_zoo.rst b/source/devices/AM62DX/audioai/model_zoo.rst index 337ab1918..401a589c5 100644 --- a/source/devices/AM62DX/audioai/model_zoo.rst +++ b/source/devices/AM62DX/audioai/model_zoo.rst @@ -7,13 +7,14 @@ Audio AI Model Zoo .. |tm| unicode:: U+2122 The AudioAI ModelZoo delivers out-of-box audio deep-learning demos that run -directly on the |__PART_FAMILY_NAME__| target. Each supported model ships as an +directly on the |__PART_FAMILY_NAME__| target. Each reference model ships as an `ONNX `__ graph plus, where applicable, a pre-compiled -TVM-RT + TIDL artifact, so you can reproduce inference on the AM62D without +TVM-RT + TIDL artifact, so you can reproduce these examples on the AM62D without compiling anything yourself. Two demo front-ends are provided: standalone -Python inference scripts and Jupyter notebooks. This section runs entirely -**on the target**; the x86 compile/evaluate flow is covered in -:ref:`Compile / Evaluate / Inspect `. +Python inference scripts and Jupyter notebooks. The same on-target runtime hosts +your own compiled artifacts once you build them through the x86 flow. This +section runs entirely **on the target**; the x86 compile/evaluate flow is covered +in :ref:`Compile / Evaluate / Inspect `. .. note:: @@ -36,17 +37,17 @@ What ships * - VGGish11 - Sound classification (|__DATASET_AUDIO_CLS__|) - |__MODEL_ID_VGGISH11__| - - C7x\ |tm| NPU (TVM-RT + TIDL, 8-bit) + - C7\ |tm| NPU (TVM-RT + TIDL, 8-bit) - Script + notebook * - YAMNet - Sound classification (|__DATASET_AUDIO_CLS__|) - |__MODEL_ID_YAMNET__| - - C7x\ |tm| NPU (TVM-RT + TIDL, 8-bit) + - C7\ |tm| NPU (TVM-RT + TIDL, 8-bit) - Script + notebook * - GCRN - Speech enhancement (|__DATASET_SPEECH_ENH__|) - |__MODEL_ID_GCRN__| - - C7x\ |tm| NPU (TVM-RT + TIDL, 16-bit) + - C7\ |tm| NPU (TVM-RT + TIDL, 16-bit) - Script + notebook * - GTCRN - Speech enhancement (|__DATASET_SPEECH_ENH__|) @@ -55,7 +56,7 @@ What ships - Notebook only VGGish11, YAMNet, and GCRN each ship a pre-compiled artifact and run offloaded -to the C7x\ |tm| NPU through the TVM runtime. GTCRN ships **no** compiled +to the C7\ |tm| NPU through the TVM runtime. GTCRN ships **no** compiled artifact — it runs FP32 on the Arm core through the ONNX runtime and is demonstrated in a notebook only. @@ -221,8 +222,8 @@ the destination wav. Expected output (abridged): Jupyter notebook demos ********************** -All four models — including GTCRN — have a Jupyter notebook demo. Start Jupyter -Lab from the activated venv: +All four reference models — including GTCRN — have a Jupyter notebook demo. Start +Jupyter Lab from the activated venv: .. code-block:: console diff --git a/source/devices/AM62DX/audioai/performance.rst b/source/devices/AM62DX/audioai/performance.rst index 67fd1355d..5df57681b 100644 --- a/source/devices/AM62DX/audioai/performance.rst +++ b/source/devices/AM62DX/audioai/performance.rst @@ -7,10 +7,11 @@ Performance Benchmark .. |tm| unicode:: U+2122 This section reports **inference performance** — latency and memory — for the -four |__PART_FAMILY_NAME__| Audio AI models. It is **not** an accuracy or -audio-quality benchmark: model quality (classification accuracy, PESQ / STOI / -SI-SDR) is measured by the ``evaluate`` step in -:ref:`Compile / Evaluate / Inspect `. +reference |__PART_FAMILY_NAME__| Audio AI models. The same methodology (perfsim +estimate + on-target measured) applies to any model you compile through the +workflow. It is **not** an accuracy or audio-quality benchmark: model quality +(classification accuracy, PESQ / STOI / SI-SDR) is measured by the ``evaluate`` +step in :ref:`Compile / Evaluate / Inspect `. *********** Methodology @@ -29,7 +30,7 @@ confused: - Produced by the TIDL performance simulator during ``compile``. The compiler writes a ``result.yaml`` per model under its work directory; the ``perfsim`` latency, GMAC count, and estimated DDR transfer are - read directly from it. This is a *static estimate* for the C7x\ |tm| + read directly from it. This is a *static estimate* for the C7\ |tm| NPU subgraph — it does not include Arm-side pre/post-processing or runtime overhead. * - **on-target measured** @@ -39,7 +40,7 @@ confused: **real-time factor (RTF)** = processing time ÷ audio duration; RTF < 1 means the model keeps up with real-time audio. -Only models compiled for the C7x\ |tm| NPU (TVM-RT + TIDL) have a perfsim +Only models compiled for the C7\ |tm| NPU (TVM-RT + TIDL) have a perfsim estimate. GTCRN runs FP32 on the Arm core through the ONNX runtime and has no TIDL subgraph, so perfsim does not apply to it. @@ -105,15 +106,15 @@ filled in from the Model Zoo inference scripts on the AM62D EVM: - Measured latency - RTF * - VGGish11 - - C7x\ |tm| NPU + - C7\ |tm| NPU - TBD - — (clip classifier) * - YAMNet - - C7x\ |tm| NPU + - C7\ |tm| NPU - TBD - — (clip classifier) * - GCRN - - C7x\ |tm| NPU + - C7\ |tm| NPU - TBD - TBD * - GTCRN diff --git a/source/images/audioai/export-diagrams.sh b/source/images/audioai/export-diagrams.sh new file mode 100755 index 000000000..4638f5f65 --- /dev/null +++ b/source/images/audioai/export-diagrams.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Re-export every .drawio source in this directory to .png and .svg. +# Run after editing any .drawio file here. +# +# --svg-theme light is required: drawio's default (auto) emits CSS +# light-dark()/color-scheme, which makes the diagram invert colors +# under a dark OS/browser theme. Sphinx has no dark-mode support, so +# the exported SVG must stay pinned to the light palette. +set -euo pipefail +cd "$(dirname "$0")" + +DRAWIO=$(command -v drawio || echo /opt/drawio/drawio) + +for src in *.drawio; do + base="${src%.drawio}" + "$DRAWIO" --export --format png --embed-diagram --output "${base}.png" "$src" + "$DRAWIO" --export --format svg --svg-theme light --embed-diagram --output "${base}.svg" "$src" +done diff --git a/source/images/audioai/tvm_tidl_flow.drawio b/source/images/audioai/tvm_tidl_flow.drawio index 2c5246eb2..6f99ee07a 100644 --- a/source/images/audioai/tvm_tidl_flow.drawio +++ b/source/images/audioai/tvm_tidl_flow.drawio @@ -3,7 +3,7 @@ - + @@ -19,7 +19,7 @@ - + @@ -45,17 +45,14 @@ - + - + - - - - - + + @@ -82,11 +79,5 @@ - - - - - - diff --git a/source/images/audioai/tvm_tidl_flow.png b/source/images/audioai/tvm_tidl_flow.png index a5a7d3b8c05b6cd3c61d832cdefa8d0e2506c88d..d528941f475fee6d950c2ac125defb4e23f05d35 100644 GIT binary patch literal 43683 zcmd?RWmH^E)GpXS0>Kjq5IiKfJA@7vEVy+;@Zbb@w?Kg4!QI`pad-E|-Q63P+j+nH z-fzvFnYCut{pQb|^XG7=s&h`&*;VyC&)&NO733r^(TLCh005@sS5YMZ0O=C|fY|s7 z5&j=-uW32};Kg@W&^LPvX9-(fYZF;314DBFz&ZISQNu2Y_ie8rCdX31k@t&ufx8Ju z;G_Y6Qgx#h5G_(zgM#f#*NEpG=}%UIwXP&ytRDxTyPl+9@d~B{V>_<0FL*@L%Co$n z9ztMV{$#xccwJwLR7q2sbS>yf+H~A(DpF7BT}f>8YnkyTmL4BFoT60! z?6(U~)uG?(Xf|mnVy*E$8Wnjd6;G&p%q;p%dwt}T98NH9A?#D&n0X}@R6grSd9!S@ z6XtosXHDm)z+XVv=P2D#EqT9vXT7-jxFy{Iojt>5q2OJC7A<~IA*y=tbh(YIu?{R4 zbJEZ+J62xes)@?njNdi_bb=`>*mNH*Y9QJVM5!~vdxiO>%8xj6!BNl~ z*=>Ff{pa|fIiG&dE#C){)ArftZ+x7Cejxm`9_%FDINKayEw5&0B5HJrM^|BzR30j_ zPmw|N^mTp)OCbuW?p7GyKq}-QJ%3x%H+4_dcZ;yV+q+3geU;w|n^xioVpU_E$O=3I z;IcQ?P-8prvYjG^F}Ct$CP9{S5>=OD7QIjXU;@$?l(xQbA;{?>KCBPQ#@C%_dJd(jL-+zIfnZtv{VwJ@=DQY)FE&Lu-pr%U+g83IO*P?&!YeIx8 zw7zM2HQ&I(&9ug%k^_PEonOH}cqXsOZgNvkd9rw{&=pgDD1vWk(4Wxq4=F1egn(Xu&(X@&`0>-heOc6#MaZ@%-hrLqB|K z7+sDgvmiEBm$wYd!mnv<-zulNmkN|z!pOtWcckit?OUSVL~}k*l#O%Qf>j^e@G8h( zc$l7elP0Xa;(C{wp%7&3NHFz;?^^$4tK|PWfP+)L*Czqn_&5T?*N%O8o#8itoDD6`@XQBLff+Xx+U$jc=<&1jlc45Z+U5o2xSK-*wkG*fT$Wo~Lg4gpeN5b6_{T1%@3#6X0_nH~z*x7%X z006H6lA^*O=j6jB6iwV2B$U%Q;a3#DnrnYEMl_TBc3UgNt#yDvpoJwGW+jk$zQSpB z)g`xJw{=8=SG2!<`j*}NUb8>-zJ3XTJga;@y?#6mjB9lIc(!%kczw)lUau(!U)2EK zv9m7#i7N2J#KgqFz(82|rvfb{fU{@gjFXddzQ*EUYbz%&PXdtM&o)+yJZ4Z>SSXjm zhxg{q8p!t!4Wy*>0l=xEs2GuwlJe)z>v!+Ig6G#d18@N*>V2jFS>uhKP#NmU(NXL- zn2DtH)kjN>aou{u@oc^TAzVEifC-L7I9ZHTPMYT(oevSG1gJU3l*OUk=6q8U5g_|Y z4KtlCIy(B-uU{d=JYfJ%4Ky?~P?5EQf`W<)K7x0yPcib?TV}0>&Ew-Rd@hsYe7?i2 zEwOGcc-xnM+kW=Ao9gcm1aNv?U0scjkHfo)c07kL_7;90c=uijT}VI;3I*VAOaJ$6 zg=ybrBE3~dE~MUQ@dn7EdZhmyqD#MGWcW!)2VUjB;__tQWp}IK<9#BbX<@!ugCk+} zf!?oTN1tkgwfGjDGJy|nYARO?i;8C9eo7)dPAn(D%_?KD$h#jlsIMYbhIyoExbBEf@2HVlEEj1I57aY51kI@|$i&LoyBm$NeT5PXM7bIDN z2G_}63d%C1``hBAEjLu31b1sto;UoUnj1y>s9%s*qa{8&KrWly(o{^{xApm){1IBn z?5P|Y{p_n1RmZt8@+k3va4rA9>9pFI<122y&K_|;rD28QIMw>|`#{9DUSC-N;3-Td z`jdXom$ZZhM;07!-RJEn)`i^Pi9w6NREqpmdLD~OB7g|3#Rmg@8* zrbAJu->I@3a~s@EZM6qBx|9rgfXb%dK+z66mVacRb(jUgqMBSEtyG!wsEhjPrH_{y zqQLZ34rk>YlRv5xle2e8GP9`q>z-MKM<=?6mlKc(Z!XGeC+F`CI!b9LX)Uxok8-$`B!7ZQdTtyGre@ry%3g#&u}FRMX4WLddf*v)1dhEUM9oUTfqFE$pHjf zhbcA5O%5(AqmKewT8&hnu;pMW<#k`Bx^8Vg0vm@k?cUQrjQk=S5!rbh&qp}izS{Ck zyKyA`?69(2(sHELBbPj8*Jmt&bws=jHG90J0sRah-~l!|0Bt@#+>K*maUWeRdS2DU z;3zIXyh&Z^8NtTH*7)4wb}d;XrR}8y04yWSLjkKNhSdB7MM;o}^%lO!{>dMPj9*<+ zzkV&+&vWn8;dx%nSUF62Y>+)Lnzlw5(p@P9dd+QA`6ZP;u;q<+9Jw3Iop>6+Zi_pw zy)5heO+jsF@^465+-C>lC9Lc04eq48+ zD~bv)P9o2k+G=^`#uQ_BGbad_+rYvk;jCz0E;3}Nhh&P3?p^e;M7dA@+V(?P%HcEM zkvZ7+I=)LTrMEL?BE4KX(-A!QQc~0zgsL;5HY<2~N~}ucskbyjE39zpH@#1CmR!NV z1hi`9GstB?0NmukmruZnIDJ$xWnprwzT$)B*5_k8is;{o_VyBh z&d}6Pc{w>$rG<>rp06Wv_|K!{AT0SS`HIDPx@>!DaO1W9{#&R`;QXFN@ablQMI(&u zHu?U#;}xJyFaW+NdW|-vaJ142&{yn2BO*JDu{Y2UNsDy|dr8=wvG0^79Cx<83+|8jI{Zy+j?a~tPvJzvR3pJhM@G-EaA2zOTN4e} z*@U9VIO)=Zj_9vunHicNBKqnM88(Ng)VLjb zT=A4eIFfTDRB}t_2~+QV`wS*{N~<+#l~iWf**ObuIS8L&L3Btfv-qz7r#yfD+8}DN zo9uDP^JB->rw#&RXGuQ|uWyM3EBfZxMXJ*5F31Pm&p1xbG0$1+GjSZ&+oQgrRRm=~ z(6uJ>a`pFpkM*bCYvs!nWUFLBgYJ+(iXWJK%;Z{&1S7VM)@wJ|D@+LjnaXOGYe zTI!P!EAxe*6f&GBwR=uB`nqqUJsm>Vp$rhy$-=s1e(TGdGu)nVa-J`-1gc7bk4%6E zLF*PGKob(R(|GREnXkav{>_-xR~FeY-rb3cq(Fn~esp9|xNawwJbxU8nekn?hQm7M zpyJdw*nJs7O27>Fm>;QH^MiFq+RQQGS&^MgD`8QO_F3}f+ypRhx}ezvcao#(yAj#L z#VVoG$B`T@Gje>p7lu@z({o$9Z%w)_pX?%O*G4ju3e1h^Lu~|-*s3mmS+&m4n$ggz zJx+3eIn?&R)Hfbln0J~VBA;z0#biFxNz!8-8(j!#x_3)A;xKk?waUGX=(ejaRPt1B z89x~$6<_2jtDebQi9gxnvYpQyMR5~osyyI%j^_A?|2k40zJX9oR~in!0yG)#jHDba zHS+uzd3(dx*&|;KjiwQh?_-FlhLPPJ-03W;|Co|BqMdDYVjl+;dgvXE3&)imu0#6= zzWK8L4oe6vN^!9eraIy-ofhv=!6GG*IbL=f^LXI-*rc=A=i7ZWHYW}G)6QdRR;<`a z`+?QrvgXZVs|N!;_ngBG&q~PQ*E&;X$C7!-iRFhs{4O^N?b)4`YWmd}Lj_=yZ*?#S zjyjLW?F;k%;+Gd1#7T~))(Qr1#2h;1j;{(`EyO)0U}`2pCg$qIW$nbC+UcEUv(sW0 zh4m>_kTZtPTu5ibwxgU1wMFy2lj(4?C(OtQwbSY9+4eryNmN^NRvcfgOKpW#i+jD-^Aj8gy%1rJ!v#2x=E^43cs{x!j(r$P zMt9;Q1H!nV6a?=~%g4 zA5#H_3BdtNOG^cJGJy1g_eBVt5zEbPRo{wBG-}toxJ<(G@wp1G1`I0y1G9d?_zR2E zB|%`YR)hWCbcqINP;{Zj!ok5ICOY~RAXM>9C|`r~<*uTMNq$rmt`CvWq=*WViK&{J zny|1i9AQqWro-{`=}LcJA1f>C`_q-RGiM?qBKV7gXapJr5CmSq$JFGLrj}M`2YekB zLif3V{vG38bTv%)$-4!KGr7^`NhJD3U){l&ggb&F@@1Mb~7l8CRdL|}P*6#pVepy*sLW0_TerBfa)uGyc z1OUKkXQGPay&Z~X;OXf(1;88MCof=oWeON$hks+Csu|h@XdVy18y^54)x>7;HH=Vr zS>)d`X@#`Wv3z6z6GkNwp!x;u4d&mXj=x3d!a1BC9v+;9@IQUs908n=?Cfj?)zTL) zUKkh|#m2_s0En`P=n7uINd~ml%Zr1918#9xaH6pXQc-!jTCf619n4i3muWZWmkC`? zBMd7B;7*N;IXmCLJL&H3zCDy60!aTs0XM^xvX;A`&NW7j8jSy7MogM@e~4zQf8Zi` zQ~!e7L}K4O#LSHR%~blQ%>5(y)XewAG~n{4_IKp+&i#{?CTKd9ztJ21F<-b!98!u& z%4ZLsySz@A>HXngSxEy3DGS4m6>V*8joUqsM?i|;Yw9;eE#N%&ffb$sKkmP>UwecPkxCm{QhP3Pj0sI*HLd?mW2g> zs&!etgs`8Jp;m1meOV_CUA*X=>IRlJJCGIZ_T-r9eYz#K9iKq;Xac(M+$A-;!+w)3 zg)Pf_L5g{4OuyC&@T^N+F{bPuEg8xStrsbemOjrfG%nQdA|e9DUVAo@0``BSMIs$9 zf5b-L_PVI|6<_+f*xjsAy40X-$$hF7`@V?wRTG{%eQfhBuL5R=&c2*PRPsZwg2wuOJEb?kZK#+9i}y9>zghsXv-v$lb9qF?XCb`vWXXl{?&9=Y z+Div3Wy7oOVT}{Yui^x%H~??|zt9HHRW5}SH%!xIlXW8F?g#j|eUgIA(h)Y$FVAp#WU@QxF?KA=^!uKe0mz_V z&OKVhzM67RIO5FJVv(P8s47it$?f!8QA|~B5gz#cCu-5+Y5#(U570+Ib-be z>(c~YZ6|yRj_ml5wgb7?H83ou!`=25?FkyRMYIgCKiVA8kGQP+osJ^!+^|jBy!dia zRiAcpq_c5*DS`yF6?V{~_{ zZEl8D9_@6TBp;2B99HSbDPx*+RF7S88wJ;3^xT+q8ACt$Ql8{Hg$(9_?$9DVPU+s<=ca#cxovfJy^`dolJaMrP7x>GYH&~4I z3nCjmZ;ExS(kM7){FfUiRv@q$FU<_`po=st$J$3dXzK4jfL6JhM`H_|{``?eUw-7P zlg%Z&ej*X z@j?f}FEyTPaqQQ7JaQ-6RZrmu5-MbOmUj@*@dyWLzpzQm&Mp7tCFJ;nP!O9 z+EbUZ(-%*zi;Ds?o+EU*hr0W#l~TTDrTdZ2ug}3e1h;cKXv2+9?+>G&w{o&lMpEjP zG}8a*JHXB>xQJ`Cma9zeouqLG3{X^tv349##n&l^fQ1X^Wp?C|A}Z);%ep{@d0tuE__P;k`ea1wzLZfh+*{dc2dhWD{}iDDEw z?o}>psYPCv4=xL5gBNb6t;tn)C!_jVu?6O5dtcK&-eXPWE_2*FCSH>s6pj`o6{fSf zE6nIig!L8bTda>uOJ)VwQvv{1a0v^5d8%=LqfS89@K#cEFJM#W)6DS3T#B|k3pZ0i@D1m130&y|%G#b!&%ymd(?AnsHwrn|#BGJVShT*<)V zxK2Zz=0x>q`{7ky<>Fhwz2ufC^T~!uy!|=8Y^BW0?hO*az3VTL4|T!5VrX%*Jc^N;3S4Czo1u8~xO)g&;H$JwHkEz7Kz@!Md5g*?yXKH9W<++!m z>T7CWwI!hB?~Irf@vF|?(UtROZ`v~urGX;LKxRMSo^q>l!1c+zTlz`esKY1Byvi4z zBCh1iEf2FLl@Tq+F954d|GfIy5FeI({-P`0!Lre4oIYW)8v3>q373A0t*)Eh@lUQ5 zn|qlP{VbJRD9?chwWmeTiD{==>jR49@SF6Du`=WbSL@UA0_nV4YX4-lr+cWNmAm-M z&*vwiB-$4aW{}e9MOg5T)3bX_3bKaP$olXSwP!{2(#+gx$1%9yKP_ZWkGTQ*o!J5m z*)XoLf^5nY?_Y#5teX`EDtE>)ty~^0(%C&S3J~+H--{`KRoQeBBultm;93TfZ#G~h zXMY;CQ>J_#lDFd3D7{x`m0W?%9AA`FF(*a80eJK1F=^C<0NUJYEEZ}Cl=E=rH%#O0 z&ulkY=kP(#ImT(aDGTgociSN)Daj?F5Oud3m`zxn3l%-Z=wsBV*Zr}bK+@@DaRAH_ zv&rUG@ypYu-{7JKp_~0V2&{5%aB1SXS7nCq(~z;5%8Uowo~!U!&w!rKaaS*WK0Qzp zn(ly-x8G>Ht6uE@VWZ&EifF*UDy=bsbh_eOXqn3(hFO94&cOsJnMv1~P2$5kK;sul z!qKqe9;|~m1n!TXGC|;gjMnD{P%X8j4VSF@=XvNdZFWgf056a&&cyz#+6|I7zBmmn zjbZj}uXNlWQ`dnQk%)B8&R1!ffji z;S*9{Nv7UunR}>>4AtYHJt_^2M$P}K3glr{SVf{U-bbn5i zd=^hYYNE6UvI*fk+uOzz7X-kwPf?NCw{P!$dg;!6-H|BSN%_X+(-z==hcOoYSA2jU z9&7G!mP2M_bzWvrgbVNv{|mM`u@Nmq5CNxW!sN97RD$DR_<4)~UiP=m|JzH>mw0$F z6B9~^V-Jd43IB;#$7W_mhlb$rR!3YM8Jva+;KYLi=iJqe4ZGWOLwM~Jpwmcqx8J{T zxTU3qMm|-PhnCX`MA~Az6_l1n{x2uRz`)2atMx-C!13M=DeQ#9=IsALSViH&i#)$4 z45~^+4?}*0T<9 zSAB)xn`>+*6w1ZO7yJ}QQ=HZG2FhTfBRp-p!j{HLy zQU8N5-u}ZS{~?Uh3gqMe$t7Qdq$X!(B(mVNlC{nlMMzm%N~*zjOG-#c2>#K3{GdZf zXDf_|lxow~)_%Od=HcM@c*;V#L#Y|cX9wJtGSXE~$p6(Q;X8`ATSV-l?r^-rz6k2| zc@X()7<}f5DZ$FI1#blD{ekscN~`{M!`@LBZ#N z7zX(FgwIiYsGS4^Ee+^|)e5;gK9{zWUtTe@w3GvwvL?tB`oX@9m2M{ga!T<7wB6Ub zU0dqt=v3zm+etvzC`9~k?(cD(dEAh=%}h+v#W1zSpePQQkc%~mm5R@QHKJG8*e7#U zGzcb7aPsZrG!Yia4`pQ>`!5#>FK1#$+vfZ{e*CO|9@b<%d$qgL{KLg08yst zOEAxJ1#1%g`Ks#bL0AeVg!zdf_lPZx?24#-LTe7766b5T!wjwe@_BgbmJS%Rw>;Er zFn1DqRDNj)lNZq7^Y}9e9A=DrsZ*~v2dT~VF+aL&Uld@-yPt>iV3Ekc@J2)JS;^Kk zBzY3`kIvU=+Kkfg_%8?dfN~I?bsTT}-dvco&P7eA_(1m$Ad(a8pe_?H&%n6N2?s{D zao7lzi1usMF$t(g(K+mzp#uE^{zHWt@siOkChOIc0L#(BOC4 zcOK&oKm9l7{F4q2&?gE1&bgGuu6PNlnm&AS zsi1x4c!w_p5XxE&8oEU*_KDn~!uc`$E*5!3A#QMk^;J}ney%QE>Ch-nYyquVf(gWd z^>|9$WAG}!h`nP>1;RSHdb;vdziu-Hah?wv%Du61Me3Aq*<)qqGuk4qB=TLTmlfo| zboip~vYXnHn4kt!5493)ZkRZ)&ZJKuTLFO;`@6digxU^Qal&GQGUUKN>~2p#!trm^ zdLgmn(KN(yX0q06rMPceB3wIu;?{0IUx165eqWJ95qf=kI;FCvpr7iGav@`Z+j(n@ zIP|X;U}=XjAMGa|*iF@5dt!Q9U2AiyN0e_w^I7U&QthEZs!xthB{%F8R9v}v73w{t zq^7~c;%2918j{Zn6VB`#PxiW&`y=yxbE!QgPw415dWp|rYQ4g+W3eqCL)9&7wb4oH z9Z?D&M0E#xM68_lYso9#U}B^*nMS5`wO*YN*ICv=YQgQoN$h2J)CCgin8;xjf5m9N z7oND&+_biYHN|E?`a{P)stin=YLb1lwAss_Xce8r*hyoebl4Ilz0(X?Dithh3>Oq6t_D52i^0@rX7$-icoh)d|6}!d0C-R z)-d?%P~ZSA>H&V&>O0fIJ3T|2nI5!W=%#+zlv=+7?Wz0|k4b~Of$F=|c@!YL&234|+&*rT ztp?Z4ys;&ynVHKB?CM16H3c#bavO14+XZgrkHcQE@R7gWo(yU}5B6Ns+vvcFsL-cj zacPoCcC%ekG*+E~aUfsxrV*Cn6GbV}ztwKF?gcM!)+}tI6Qag}gVV4M=9#pIJ7UOBgJD(|52yF23V8lGoz=>BUuO>}ScN%z5mzJvVE+ z!ky&qD7Reg&=OLY@6bbQ?dyDoMlQVmrobiAMTtXV_G%!cA>{DHH%p>!H<$xyA^y7V z!hZ5p^-jyMdoS(Kqukm%rTFvQLM3c&Rg_`0@?<9M{_#9&+_IsvGU0J?ehb&RKv62o zq|gNWibN#cC2A*b2S=~8XOeRBq)Po`q2_Xi+e+79$qMb zlG#`ajf!Mj&o(X;y8s z09RyIu2nicGamQh%39*p-glA5LC^%})K*Mv;KWDEUi3vbJ{6}7_S>Ef6eq1X@pLQ= zZd=*7;tu;;2HCf_IrS+7YB(lWrUF*astZx&l+=_5^`a44)E^ObHNW3Q+18XRe6gP; znGTk>xw)t!?9hvJr5JJios}Nb64}<@7SSg?B7W?q!t5EFW@t81k&+t~p`;~%8Y+kv znIMMA3Xv+1P&Cx`6zeZy;Nspj>M-0g5{$5c*_~%mb&Zcy$GMs-WK?V9rLn}V>T zW2m&l=Scs=NWRthcg$ihyuFFNIOk!%FZ3E392wd7b{G03SLO#>pn-Q~Xk;hkTG@03 zg^_15E-b0+Eu3Acn>qgqeA$p>O9OrF^sw(TH@+kCH0gh5=H;RP&PO&*)>{< zz9>JDB95zNL`fU?g+4>T=vTX5WkEP~M4akZv)H#+nHtab+T)iOkHxjZ&J7m~+~ zl58o*DpN*D5)l;2$yN3Q+)sVIEuty4CbeKBd+`z)78#QlATVTaUrzCyYy-qDSu7vx zO8n?ta4OZNg;=&)j@NtVZewXPyW_E4KwH56>SGb@qx-BP;_zz;VOja_qK|Wl*bXz$ zlEUBU{W30W5e2#C-+(c9lZw+fMMjplIszrS7Q5ZLuTyP_Iq*`8*%|UOc?(!WS-F5U zws{i?rEkT0>$^eS+OwFm3K`hjs5KWpPJ3 zSJ#topafY4l0|Nnq*-zMWRTnO{J5Lfl^tnVF2ty}&-xUnv)w^HJIDCLQ(tLhi^;Gq z_FlDPUvOkhw{S3XS?LXd@y@~C^>cgeM-gG^1Sa$_{wS7+<-oZaZL5g5M@_fEFJ!7I zbWESf>hnPAs@hL_T84PHQ|Z32p`3kg!R0wM;8J@NN}6zH)Tp)>zJf+b!A)2Dte8%o z9r2Uygi?7dlZH58l^^Z}U6?9R?w1HR^%!TXH9MKj9nYvQOsEP^F&!IDdJ~Sj^oY;+ zZYhDbpm9!vm5|YFCk)>ey7Fkw#bGQBHMSX5Z*<~N*-`)GU}BLzKMfU0PKlT1Y;c{m zfrh#_kxX5d{GUXSIMv6PPAKQqnY}{37F*Q8V!MP+y3p(Z*>Xy?Gb6ryQB*Ckb$d6a z{rf_Ly-5y(_0gxP;ok|7T6$2sN|XZ|`cVf>K~=;usBt0jVEd4TL7t>i0%sm?Rp?LB zp9GHD8f9f=@&c6m`ZR;g?&pj=x!Hv+_3Dwa1Q(3gKm0;KL6sYJnFXzNhkavR!89Kn zKhyUWBt`U9q3N6DO+Rjl)4a_c&{lKQ?Z3E5j?XNl|G*^O7b?jpRfeTn8I--aYwTBW zzHbQ1RX7-sXCFIQlpB2i-qu2osTpk}(|4$)j3=z2b>E5*y+M7BQ^TgpG@ zQ9`mm@aKK`_AT2T3-$S;VEd@#HAzce{zL>cA!tn2G-`p#XSn6KOU@(pd22d7iMJ#HfJ72Fwr@*f zb-8d{CavYA7Jw+Mbo5LpL;>1bU%zRjI{Q=$iWgfY{~KW7%-~@M^sqw&Jg4TfvlK