# CPU EP

Phần này trình bày cách dùng [ONNX Runtime (ORT) với CPU](https://onnxruntime.ai/docs/execution-providers/#onnx-runtime-execution-providers) làm bộ cung cấp thực thi (EP) trên nền tảng Snapdragon X.

## Thiết lập

Mở PowerShell ở chế độ quản trị viên và chạy các lệnh sau để cài đặt phần phụ thuộc. Thiết lập này là bắt buộc đối với hướng dẫn này và mất khoảng 5 phút. Để biết thêm thông tin về việc thiết lập, hãy xem [ort_setup.ps1](https://raw.githubusercontent.com/quic/wos-ai/refs/heads/main/Scripts/ort_setup.ps1).

1. Thiết lập $DIR\_PATH (mặc định là `C:\WoS_AI`), người dùng có thể thay đổi đường dẫn mong muốn.

$DIR_PATH  = "C:\WoS_AI"
        Copy to clipboard
2. Chạy lệnh sau để tải xuống tập tin mã lệnh thiết lập. Nếu đã tải xuống, bạn có thể bỏ qua bước này.

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
3. Chạy lệnh sau để cài đặt phần phụ thuộc cho CPU EP.

    Thiết lập ORT-CPU:

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

    Các phần phụ thuộc sau được tải xuống và cài đặt:

> 
> 
> - Python amd64 phiên bản 3.12.6
>     - Các cấu phần phần mềm của mô hình bao gồm mô hình mobilenet\_v2.onnx và io\_utils.py cho quy trình tiền/hậu xử lý.
>     - Visual Studio Redistributable phiên bản 14.44.35208
>     - Tạo môi trường ảo (SDX\_ORT\_CPU\_ENV) với các thư viện cần thiết cho CPU EP.
>     - onnxruntime phiên bản 1.20.1

Ghi chú

    1. Vui lòng tránh cài đặt bất kỳ phiên bản onnxruntime nào khác trong môi trường này. Tập lệnh setup.ps1 đã cài đặt onnxruntime cần thiết. Việc cài đặt một phiên bản khác có thể dẫn đến việc tìm nạp phiên bản onnxruntime không chính xác và có thể gây ra sự cố.
    2. Nếu tính năng chạy tập lệnh bị vô hiệu hóa trên hệ thống, hãy chạy lệnh sau như bên dưới và nhập "A" (Có cho tất cả).

Set-ExecutionPolicy RemoteSigned
        Copy to clipboard
4. Khi thiết lập hoàn tất, $DIR\_PATH có cấu trúc thư mục như sau:

![../../_images/folders_structure_ort.png](data:image/png;base64,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)
    - Downloads: Thư mục này lưu trữ tất cả các tệp cần thiết để hoàn tất thiết lập, chẳng hạn như trình cài đặt Python, tập lệnh thiết lập, v.v.
    - Python\_Env: Thư mục này chứa môi trường ảo (SDX\_ORT\_CPU\_ENV) được tạo cho các EP.
    - Debug\_Logs: Thư mục này chứa các log tương ứng với thiết lập.
    - Models: Thư mục này chứa các thư mục con của mô hình và các cấu phần phần mềm tương ứng (ví dụ: Mobilenet\_v2).

## Hướng dẫn ORT CPU

Hướng dẫn này cho biết cách dùng ORT CPU EP để chạy mô hình phân loại (Mobilenet\_v2) trên CPU.

1. Mở PowerShell và chạy các lệnh sau để thiết lập $DIR\_PATH và kích hoạt môi trường ảo Python. Đảm bảo rằng $DIR\_PATH giống với $DIR\_PATH được dùng trong quá trình thiết lập.

${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. Chạy lệnh sau để tạo tệp ort\_cpu.py trong thư mục làm việc.

notepad.exe ort_cpu.py
        Copy to clipboard
3. Sao chép mã sau vào tệp *ort\_cpu.py* rồi lưu lại. Ví dụ này dành cho mô hình MobileNet. Nếu bạn cần thử cùng một ví dụ cho một mô hình khác, hãy dùng môi trường ảo Python hiện có (SDX\_ORT\_CPU\_ENV) và xử lý phần phụ thuộc bằng cách cung cấp đường dẫn tuyệt đối.

# 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. Thực thi tập lệnh Python *ort\_cpu.py* từ thư mục làm việc.

python .\ort_cpu.py
        Copy to clipboard

    Tập lệnh này dùng các tiện ích Python để xử lý trước một hình ảnh .jpg được chỉ định theo yêu cầu của mô hình và gửi đến CPU EP để suy luận. Sau đó, kết quả từ suy luận CPU EP được xử lý để hiển thị lớp và xác suất của đối tượng đã xác định, như được minh họa trong ví dụ sau.

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

Đầu ra hậu xử lý

Dựa trên kết quả suy luận trong hình trên, mô hình đã xác định "coffee mug" là một đối tượng trong hình ảnh đầu vào, với điểm xác suất là ~89,6%.

## Các bước tiếp theo

Bây giờ bạn đã biết cách chạy mô hình bằng CPU EP, hãy quay lại [ONNX Runtime](https://docs.qualcomm.com/doc/80-62010-1VI/topic/ort.html#ort) hoặc chuyển sang phần tiếp theo để thử suy luận mô hình bằng [QNN Execution Provider](https://docs.qualcomm.com/doc/80-62010-1VI/topic/ort-qnn-ep.html#ort-qnn-ep).

## Thông tin chi tiết

Có thể tìm thêm thông tin về ONNX Runtime tại đây.

- [Microsoft ORT releases](https://github.com/microsoft/onnxruntime/releases/)
- [Cách để build C++ App](https://github.com/microsoft/onnxruntime-inference-examples/blob/main/c_cxx/README.md#how-to-build)

## Câu hỏi thường gặp

- **Phiên bản Python nào được hỗ trợ?**

> 
> 
> - Phiên bản Python arm64 hiện không hỗ trợ ONNX Runtime cho CPU EP.
>     - ONNX Runtime CPU EP yêu cầu Python amd64 phiên bản 3.8.10 đến 3.12.x
>     - Ví dụ hướng dẫn được xác thực bằng [python-3.12.6-amd64](https://www.python.org/ftp/python/3.12.6/python-3.12.6-amd64.exe)
- **Làm cách nào để chạy suy luận bằng C/C++?**

> 
> 
> - Chạy suy luận bằng [ví dụ C/C++](https://github.com/microsoft/onnxruntime-inference-examples/tree/main/c_cxx/fns_candy_style_transfer) này.
- **Làm cách nào để biết thêm thông tin về ONNX Runtime?**

> 
> 
> - Hãy xem [Python | onnxruntime](https://onnxruntime.ai/docs/get-started/with-python.html#get-started-with-onnx-runtime-in-python) để biết thêm thông tin.
- **Sklearn có được hỗ trợ trên Windows trên Snapdragon không?**

    - Hiện tại, Sklearn ONNX chỉ được hỗ trợ trên CPU ORT. Để biết thêm chi tiết, hãy xem [sklearn-onnx](https://onnx.ai/sklearn-onnx/tutorial_1_simple.html)
- **Làm cách nào để chạy bất kỳ mô hình nào khác bằng ORT-CPU EP?**

> 
> 
> Dưới đây là mã mẫu:
> 
> 
> 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

Last Published: Dec 16, 2025

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