# CPU EP

This section demonstrates using [ONNX Runtime (ORT) with the CPU](https://onnxruntime.ai/docs/execution-providers/#onnx-runtime-execution-providers) as the execution provider (EP) on the Snapdragon X and X2 platforms.

## Prerequisites

- Python amd64 version 3.12.6
- Visual Studio Redistributable Version 14.44.35208 or above
- onnxruntime python package

Follow the steps in the Setup section to automatically download and install the prerequisites.

## Setup

This tutorial requires the following setup which takes approximately five minutes. For more information about the setup, see [ort_setup.ps1](https://raw.githubusercontent.com/quic/wos-ai/refs/heads/main/Scripts/ort_setup.ps1).

1. Open PowerShell in administrator mode and run the following commands to install the dependencies. You must run PowerShell in administrator mode to grant the elevated permissions required to automatically install the necessary applications and execute the PowerShell scripts.
2. Set `$DIR_PATH`. By default it is set to `C:\\WoS_AI` although you can change to your desired path.

$DIR_PATH  = "C:\WoS_AI"
        Copy to clipboard
3. Run the following command to download the setup script.

if (!(Test-Path $DIR_PATH\Downloads\Setup_Scripts)) {mkdir $DIR_PATH\Downloads\Setup_Scripts}
        Invoke-WebRequest -O ort_setup.ps1 https://raw.githubusercontent.com/quic/wos-ai/refs/heads/main/Scripts/ort_setup.ps1
        Move-Item -Path ".\ort_setup.ps1" -Destination $DIR_PATH\Downloads\Setup_Scripts -Force
        Copy to clipboard
4. If running scripts is disabled on the system, run the following command and enter ‘A’(Yes for all).

Set-ExecutionPolicy RemoteSigned
        Copy to clipboard
5. Run the following commands to install the dependencies for CPU EP.

    ORT-CPU setup:

cd $DIR_PATH
        Copy to clipboard

powershell -command "&{. .\Downloads\Setup_Scripts\ort_setup.ps1; ORT_CPU_Setup -rootDirPath $DIR_PATH}"
        Copy to clipboard

    The following dependencies are downloaded and installed:

> 
> 
> - Python amd64 version 3.12.6
>     - Model artifacts include mobilenet\_v2.onnx model and io\_utils.py for pre/post processing.
>     - Visual Studio Redistributable Version 14.44.35208
>     - Creates a virtual environment (SDX\_ORT\_CPU\_ENV) with the necessary libraries for the CPU EP.
>     - onnxruntime

Note

Please avoid installing any other ONNX Runtime variant in this environment. The setup.ps1 script has already installed the necessary ONNX Runtime. Installing a different variant may result in fetching the incorrect ONNX Runtime variant and could cause issues.
6. When setup is complete, the following folder structure is in `$DIR_PATH`:

![../../_images/folders_structure_ort.png](data:image/png;base64,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)
    - Downloads: This folder stores all the files required to complete the setup, such as Python installers, setup scripts, etc.
    - Python\_Env: This directory contains the virtual environment (SDX\_ORT\_CPU\_ENV) created for the EPs.
    - Debug\_Logs: This directory contains logs corresponding to setup.
    - Models: This directory holds model sub-directories and its respective artifacts(Ex: Mobilenet\_v2).

## ORT CPU tutorial

This tutorial shows how to use ORT CPU EP to run a classification model (Mobilenet\_v2) on the CPU.

1. Open a PowerShell and run the following commands to set `$DIR_PATH` and activate the Python virtual environment. Ensure that `$DIR_PATH` is the same as the one used during the setup.

${DIR_PATH} = "C:\WoS_AI"
        Copy to clipboard

powershell -NoExit -command "&{cd $DIR_PATH; . .\Downloads\Setup_Scripts\ort_setup.ps1; Activate_ORT_CPU_VENV -rootDirPath $DIR_PATH}"
        Copy to clipboard
2. Run the following to create the `ort_cpu.py` file in the working directory.

notepad.exe ort_cpu.py
        Copy to clipboard
3. Copy the following code into the `ort_cpu.py` file and save it. This example is for the MobileNet model. If you need to try the same example for a different model, use the existing Python virtual environment (SDX\_ORT\_CPU\_ENV) and handle the dependencies by providing the absolute path.

# File_name : ort_cpu.py
        
        import onnxruntime as ort
        import time
        import numpy as np
        #Qualcomm utility for pre-/postprocessing of input/outputs in model inference
        import io_utils
        
        # Step1: Runtime and model initialization
        onnx_model_path = "./mobilenet_v2.onnx"
        session = ort.InferenceSession(onnx_model_path, providers=['CPUExecutionProvider'])
        
        # Step2: Input/Output handling, Generate raw input
        # github repo for below artifact: https://github.com/quic/wos-ai/tree/main/Artifacts
        image_path = "https://raw.githubusercontent.com/quic/wos-ai/refs/heads/main/Artifacts/coffee_cup.jpg"
        raw_img = io_utils.preprocess(image_path)
        
        # Model input name
        input_name = session.get_inputs()[0].name
        
        # Step3: Model inferencing using preprocessed input.
        start_time = time.time()
        for i in range(10):
           prediction = session.run(None, {input_name: raw_img})
        end_time = time.time()
        execution_time = ((end_time-start_time) * 1000)/10
        
        # Step4: Output postprocessing
        io_utils.postprocess(prediction)
        print("Execution Time: ", execution_time, "ms")
        Copy to clipboard
4. Execute the `ort_cpu.py` Python script from the working directory.

python .\ort_cpu.py
        Copy to clipboard

    This script uses Python utilities to preprocess a specified .jpg image according to the model’s requirements and sends it to the CPU EP for inference. The results from the CPU EP inference are then processed to show the identified object’s class and probability, as illustrated in the following example.

![../../_images/ort_cpu_ep.png](data:image/png;base64,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)

Postprocessed output

Based on the inference results in the figure above, the model identified a “coffee mug” as an object in the input image, with a probability score of ~89.6%.

## FAQs

- **Which Python version is supported?**

> 
> 
> - ONNX Runtime for CPU EP isn’t supported by Python arm64 variant currently.
>     - ONNX Runtime CPU EP requires Python amd64 versions 3.8.10 to 3.12.x
>     - Tutorial examples validated with [python-3.12.6-amd64](https://www.python.org/ftp/python/3.12.6/python-3.12.6-amd64.exe)
- **How to run inference using C/C++?**

> 
> 
> - Run inference using this [C/C++ example](https://github.com/microsoft/onnxruntime-inference-examples/tree/main/c_cxx/fns_candy_style_transfer).
- **How to get more information about ONNX Runtime?**

> 
> 
> - See [Python | onnxruntime](https://onnxruntime.ai/docs/get-started/with-python.html#get-started-with-onnx-runtime-in-python) for more information.
- **Is Sklearn supported on Windows on Snapdragon?**

    - Currently, Sklearn ONNX is supported only on ORT CPU. For more details check [sklearn-onnx](https://onnx.ai/sklearn-onnx/tutorial_1_simple.html)
- **How to run any other model using ORT-CPU EP?**

> 
> 
> Below is the sample code:
> 
> 
> import onnxruntime as ort
>         import numpy as np
>         
>         # Step1: Runtime and model initialization
>         # Enter path to the model in the below
>         onnx_model_path = "path/to/model"
>         session = ort.InferenceSession(onnx_model_path, providers=['CPUExecutionProvider'])
>         
>         # Step2: Input/Output handling, Generate raw input
>         input_shape = session.get_inputs()[0].shape
>         input_data = np.random.random(input_shape).astype(np.float32)
>         
>         # Model input name
>         input_name = session.get_inputs()[0].name
>         
>         # Step3: Model inferencing using preprocessed input.
>         result = session.run(None, {input_name: input_data})
>         Copy to clipboard

## Next steps

- Now that you know how to run a model using the CPU EP, go back to [ONNX Runtime](https://docs.qualcomm.com/doc/80-62010-1/topic/ort.html#ort) or continue to the next section to try model inference with the [QNN Execution Provider](https://docs.qualcomm.com/doc/80-62010-1/topic/ort-qnn-ep.html#ort-qnn-ep).
- More information on ONNX Runtime can be found at [Microsoft ORT releases](https://github.com/microsoft/onnxruntime/releases/) and [How to build C++ App](https://github.com/microsoft/onnxruntime-inference-examples/blob/main/c_cxx/README.md#how-to-build).

Last Published: Jun 16, 2026

[Previous Topic
ONNX Runtime](https://docs.qualcomm.com/bundle/publicresource/80-62010-1/topics/ort.md) [Next Topic
QNN EP Non-ABI](https://docs.qualcomm.com/bundle/publicresource/80-62010-1/topics/ort-qnn-ep.md)