.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "tutorials/sdk-integration-tutorial.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_tutorials_sdk-integration-tutorial.py: Using the ExecuTorch SDK to Profile a Model ======================== **Author:** `Jack Khuu `__ .. GENERATED FROM PYTHON SOURCE LINES 16-26 The `ExecuTorch SDK <../sdk-overview.html>`__ is a set of tools designed to provide users with the ability to profile, debug, and visualize ExecuTorch models. This tutorial will show a full end-to-end flow of how to utilize the SDK. Specifically, it will: 1. Generate the artifacts consumed by the SDK (`ETRecord <../sdk-etrecord>`__, `ETDump <../sdk-etdump.html>`__). 2. Create an Inspector class consuming these artifacts. 3. Utilize the Inspector class to analyze the model. .. GENERATED FROM PYTHON SOURCE LINES 28-47 Prerequisites ------------- To run this tutorial, you’ll need to install ExecuTorch. Set up a conda environment. To set up a conda environment in Google Colab:: !pip install -q condacolab import condacolab condacolab.install() !conda create --name executorch python=3.10 !conda install -c conda-forge flatbuffers Install ExecuTorch from source. If cloning is failing on Google Colab, make sure Colab -> Setting -> Github -> Access Private Repo is checked:: !git clone --branch v0.1.0 https://{github_username}:{token}@github.com/pytorch/executorch.git !cd executorch && bash ./install_requirements.sh .. GENERATED FROM PYTHON SOURCE LINES 49-61 Generate ETRecord (Optional) ---------------------------- The first step is to generate an ``ETRecord``. ``ETRecord`` contains model graphs and metadata for linking runtime results (such as profiling) to the eager model. This is generated via ``executorch.sdk.generate_etrecord``. ``executorch.sdk.generate_etrecord`` takes in an output file path (str), the edge dialect model (``EdgeProgramManager``), the ExecuTorch dialect model (``ExecutorchProgramManager``), and an optional dictionary of additional models In this tutorial, the mobilenet v2 example model is used to demonstrate. .. GENERATED FROM PYTHON SOURCE LINES 61-97 .. code-block:: default import copy import torch from executorch.examples.models.mobilenet_v2 import MV2Model from executorch.exir import ( EdgeCompileConfig, EdgeProgramManager, ExecutorchProgramManager, to_edge, ) from executorch.sdk import generate_etrecord from torch.export import export, ExportedProgram # Generate MV2 Model model: torch.nn.Module = MV2Model() aten_model: ExportedProgram = export( model.get_eager_model().eval(), model.get_example_inputs(), ) edge_program_manager: EdgeProgramManager = to_edge( aten_model, compile_config=EdgeCompileConfig(_check_ir_validity=True) ) edge_program_manager_copy = copy.deepcopy(edge_program_manager) et_program_manager: ExecutorchProgramManager = edge_program_manager.to_executorch() # Generate ETRecord etrecord_path = "etrecord.bin" generate_etrecord(etrecord_path, edge_program_manager_copy, et_program_manager) .. rst-class:: sphx-glr-script-out .. code-block:: none Downloading: "https://download.pytorch.org/models/mobilenet_v2-7ebf99e0.pth" to /var/lib/ci-user/.cache/torch/hub/checkpoints/mobilenet_v2-7ebf99e0.pth 0%| | 0.00/13.6M [00:00`__ and ``DataFrames``. These mediums give users the ability to perform custom analysis about their model performance. Below are examples usages, with both ``EventBlock`` and ``DataFrame`` approaches. .. GENERATED FROM PYTHON SOURCE LINES 177-186 .. code-block:: default # Set Up import pprint as pp import pandas as pd pd.set_option("display.max_colwidth", None) pd.set_option("display.max_columns", None) .. GENERATED FROM PYTHON SOURCE LINES 187-189 If a user wants the raw profiling results, they would do something similar to finding the raw runtime data of an ``addmm.out`` event. .. GENERATED FROM PYTHON SOURCE LINES 189-202 .. code-block:: default for event_block in inspector.event_blocks: # Via EventBlocks for event in event_block.events: if event.name == "native_call_addmm.out": print(event.name, event.perf_data.raw) # Via Dataframe df = event_block.to_dataframe() df = df[df.event_name == "native_call_addmm.out"] print(df[["event_name", "raw"]]) print() .. GENERATED FROM PYTHON SOURCE LINES 203-206 If a user wants to trace an operator back to their model code, they would do something similar to finding the module hierarchy and stack trace of the slowest ``convolution.out`` call. .. GENERATED FROM PYTHON SOURCE LINES 206-232 .. code-block:: default for event_block in inspector.event_blocks: # Via EventBlocks slowest = None for event in event_block.events: if event.name == "native_call_convolution.out": if slowest is None or event.perf_data.p50 > slowest.perf_data.p50: slowest = event if slowest is not None: print(slowest.name) print() pp.pprint(slowest.stack_traces) print() pp.pprint(slowest.module_hierarchy) # Via Dataframe df = event_block.to_dataframe() df = df[df.event_name == "native_call_convolution.out"] if len(df) > 0: slowest = df.loc[df["p50"].idxmax()] print(slowest.event_name) print() pp.pprint(slowest.stack_traces) print() pp.pprint(slowest.module_hierarchy) .. GENERATED FROM PYTHON SOURCE LINES 233-235 If a user wants the total runtime of a module, they can use ``find_total_for_module``. .. GENERATED FROM PYTHON SOURCE LINES 235-239 .. code-block:: default print(inspector.find_total_for_module("L__self___features")) print(inspector.find_total_for_module("L__self___features_14")) .. rst-class:: sphx-glr-script-out .. code-block:: none 0.0 0.0 .. GENERATED FROM PYTHON SOURCE LINES 240-242 Note: ``find_total_for_module`` is a special first class method of `Inspector <../sdk-inspector.html>`__ .. GENERATED FROM PYTHON SOURCE LINES 244-258 Conclusion ---------- In this tutorial, we learned about the steps required to consume an ExecuTorch model with the ExecuTorch SDK. It also showed how to use the Inspector APIs to analyze the model run results. Links Mentioned ^^^^^^^^^^^^^^^ - `ExecuTorch SDK <../sdk-overview.html>`__ - `ETRecord <../sdk-etrecord>`__ - `ETDump <../sdk-etdump.html>`__ - `Inspector <../sdk-inspector.html>`__ .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 20.215 seconds) .. _sphx_glr_download_tutorials_sdk-integration-tutorial.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: sdk-integration-tutorial.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: sdk-integration-tutorial.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_