Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History

README.md

Developer Tools Examples

This directory contains examples of BundledProgram and ETDump generation.

Directory structure

examples/devtools
├── scripts # Python scripts to illustrate export workflow of bundled program.
├── executor_runner # Contains an example for both BundledProgram to verify ExecuTorch model, and generate ETDump for runtime results.
├── CMakeLists.txt # Example CMakeLists.txt for building executor_runner with Developer Tools support.
├── build_example_runner.sh # A convenient shell script to build the example_runner.
├── test_example_runner.sh # A convenient shell script to run the example_runner.
└── README.md # Current file

BundledProgram

We will use an example model (in torch.nn.Module) and its representative inputs, both from models/ directory, to generate a BundledProgram(.bpte) file using the script. Then we will use devtools/example_runner to execute the .bpte model on the ExecuTorch runtime and verify the model on BundledProgram API.

  1. Sets up the basic development environment for ExecuTorch by Setting up ExecuTorch from GitHub.

  2. Using the script to generate a BundledProgram binary file by retreiving a torch.nn.Module model and its representative inputs from the list of available models in the models/ dir.

cd executorch # To the top level dir# To get a list of example models
python3 -m examples.devtools.scripts.export_bundled_program -h
# To generate a specific `.bpte` model
python3 -m examples.devtools.scripts.export_bundled_program -m mv2 # for MobileNetv2# This should generate ./mv2_bundled.bpte file, if successful.
  1. Once we have the BundledProgram binary (.bpte) file, then let's run and verify it with ExecuTorch runtime and BundledProgram APIs using the devtools/example_runner.
cd executorch
./examples/devtools/build_example_runner.sh
./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --output_verification

ETDump

Getting Started

After exporting a BundledProgram, runtime profiling and debug data can be collected in an ETDump. An ETDump is a buffer containing data generated by hooks within the ExecuTorch runtime. We offer an example runner that accepts a BundledProgram (.bpte) and runs a single iteration over the first method defined.

Running the program will generate an ETDump file (.etdp) at the location specified by --etdump_path.

 ./cmake-out/examples/devtools/example_runner --bundled_program_path mv2_bundled.bpte --etdump_path mv2_etdump.etdp

Parsing ETDump

Once an ETDump has been generated, it can be viewed using the CLI inspector. This will print a tabular view of the data recorded in the ETDump.

 python3 -m devtools.inspector.inspector_cli --etdump_path mv2_etdump.etdp

ETDump C++ API

ETDump profiling can also be used in a custom C++ program. ETDumpGen is an implementation of the abstract EventTracer class. Include the header file located at devtools/etdump/etdump_flatcc.h. To initialize the ETDump generator, construct it before loading the method from the program.

 executorch::etdump::ETDumpGen etdump_gen;
Result<Method> method =
program->load_method(method_name, &memory_manager, &etdump_gen);

Since the EventTracer hooks are embedded within the runtime, profiling and debug data will be automatically recorded.

Once execution has completed, finalize the ETDump buffer. This returns an etdump_result, a struct with the finalized buffer and its size.

 etdump_result result = etdump_gen.get_etdump_data();
if (result.buf != nullptr && result.size > 0) {
FILE* f = fopen(FLAGS_etdump_path.c_str(), "w+");
fwrite((uint8_t*)result.buf, 1, result.size, f);
fclose(f);
free(result.buf);
}