Who is this for?

This is an advanced topic for machine learning developers who want to export a vision-language-action model to ExecuTorch for inference on an Arm CPU.

What will you learn?

Upon completion of this Learning Path, you will be able to:

  • Export SmolVLA from PyTorch to ExecuTorch, and lower the model to run on Arm CPU using the XNNPACK backend.
  • Run the FP32 ExecuTorch model on Arm CPU and validate its output against the PyTorch model.
  • Export a model to ExecuTorch with eligible linear weights quantized to INT8.
  • Compare outputs and latency between the FP32 and INT8 models running on the Arm CPU.

Prerequisites

Before starting, you will need the following:

  • An AArch64 Ubuntu system with at least 20 GB of free storage. This Learning Path was tested on NVIDIA’s DGX Spark
  • Familiarity with Python, PyTorch, and the Linux command-line

Summary

AI-assisted

This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
You’ll convert the SmolVLA vision-language-action model from PyTorch to ExecuTorch, lower it to XNNPACK for Arm CPU inference, and validate the FP32 result against the original model. First, you’ll generate deterministic inputs, export the FP32 components, and run them through a native orchestrator. Then, you’ll quantize eligible operations to INT8 with TorchAO and reuse the same inputs to compare model outputs, latency, and .pte sizes.

Frequently asked questions

AI-assisted

These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
How do I validate the exported FP32 model?
Run python scripts/prepare_inputs.py and python scripts/validate_pte.py. Confirm that the output reports Accuracy gate passed and points to the FP32 validation report.
Where are the FP32 artifacts saved, and how can I change the location?
The artifacts are saved under artifacts/fp32 when you use the default configuration. To change the location, set SMOLVLA_ARTIFACTS_DIR to an absolute path and use the same location for the FP32 benchmark.
How do I reuse the same inputs for both FP32 and INT8 comparisons?
Generate deterministic inputs with the provided script and note the saved input-suite path. Pass that path to the INT8 pipeline with --input-suite, or set the SMOLVLA_INPUT_SUITE environment variable to use it.
How do I confirm that the INT8 pipeline succeeded?
Run the pipeline script and confirm that it ends with [8/8] Native accuracy gate passed. The script stores the artifacts in artifacts/int8. Use --output-dir to choose another location.
How do I validate the native runner against the PyTorch model?
Run ./scripts/run_runner.sh, then run python scripts/validate_runner.py. Confirm that the output says Native split orchestrator output matches the full PyTorch reference.
Next