使用執行提供者(Execution Providers)構建 ONNX Runtime

目錄

執行提供者共享庫

oneDNN、TensorRT、OpenVINO™、CANN 和 QNN 提供者被構建為共享庫,而不是靜態連結到主 onnxruntime 中。這使得它們只在需要時才被載入,並且如果提供者的依賴庫未安裝,onnxruntime 仍能正常執行,只是無法使用該提供者。對於非共享庫提供者,必須存在提供者的所有依賴項才能載入 onnxruntime。

構建檔案

在 Windows 上,共享提供者庫將命名為“onnxruntime_providers_*.dll”(例如 onnxruntime_providers_openvino.dll)。在 Unix 上,它們將命名為“libonnxruntime_providers_*.so”。在 Mac 上,它們將命名為“libonnxruntime_providers_*.dylib”。

還有一個共享庫,共享提供者依賴於它,名為 onnxruntime_providers_shared(應用上述相同的命名約定)。

注意:不建議將這些庫放置在系統位置或新增到庫搜尋路徑(如 Unix 上的 LD_LIBRARY_PATH)。如果系統上安裝了多個版本的 onnxruntime,這可能會導致它們找到錯誤的庫並導致未定義行為。

載入共享提供者

共享提供者庫由 onnxruntime 程式碼載入(不要在客戶端程式碼中載入或依賴它們)。註冊共享或非共享提供者的 API 是相同的,不同之處在於共享提供者將在執行時將其新增到會話選項時載入(透過呼叫 C API 中的 OrtSessionOptionsAppendExecutionProvider_OpenVINO 或 SessionOptionsAppendExecutionProvider_OpenVINO)。如果共享提供者庫無法載入(如果檔案不存在,或者其依賴項不存在或不在路徑中),則將返回錯誤。

onnxruntime 程式碼將在 onnxruntime 共享庫所在的位置(或靜態連結到靜態庫版本的可執行檔案)查詢提供者共享庫。


CUDA

先決條件

  • 安裝 CUDAcuDNN
    • ONNX Runtime 的 CUDA 執行提供者是使用 CUDA 12.x 和 cuDNN 9 構建和測試的。有關更多版本資訊,請檢視此處
    • CUDA 安裝路徑必須透過 CUDA_HOME 環境變數或 --cuda_home 引數提供。安裝目錄應包含 binincludelib 子目錄。
    • 必須將 CUDA bin 目錄的路徑新增到 PATH 環境變數中,以便找到 nvcc
    • cuDNN 安裝路徑必須透過 CUDNN_HOME 環境變數或 --cudnn_home 引數提供。在 Windows 中,安裝目錄應包含 binincludelib 子目錄。
    • cuDNN 8.* 需要 ZLib。請按照 cuDNN 8.9 安裝指南 在 Linux 或 Windows 中安裝 zlib。
    • 在 Windows 中,必須將 cuDNN bin 目錄的路徑新增到 PATH 環境變數中,以便找到 cudnn64_8.dll。

構建說明

Windows

.\build.bat --use_cuda --cudnn_home <cudnn home path> --cuda_home <cuda home path>

Linux

./build.sh --use_cuda --cudnn_home <cudnn home path> --cuda_home <cuda home path>

Dockerfile 可在此處獲取。

構建選項

要指定 GPU 架構(參見計算能力),您可以附加引數,例如 --cmake_extra_defines CMAKE_CUDA_ARCHITECTURES=80;86;89

使用 --cmake_extra_defines onnxruntime_USE_CUDA_NHWC_OPS=ON,CUDA EP 可以用額外的 NHWC 運算子編譯。此選項預設不啟用,因為支援的 NHWC 運算子數量較少。

另一個非常有用的 CMake 構建選項是構建時支援 NVTX(--cmake_extra_defines onnxruntime_ENABLE_NVTX_PROFILE=ON),這將使用 Nsight Systems 啟用更簡單的效能分析,並將 CUDA 核心與其實際 ONNX 運算子關聯起來。

--enable_cuda_line_info--cmake_extra_defines onnxruntime_ENABLE_CUDA_LINE_NUMBER_INFO=ON 將啟用 NVCC 生成裝置程式碼的行號資訊。這在您在 CUDA 核心上執行 Compute Sanitizer 工具時可能會有所幫助。

如果您的 Windows 機器安裝了多個版本的 CUDA,並且您想使用舊版本 CUDA,則需要附加引數,例如 --cuda_version <cuda version>

當您的構建機器擁有大量 CPU 核心但記憶體少於 64 GB 時,可能會出現記憶體不足錯誤,例如 nvcc error : 'cicc' died due to signal 9。解決方案是使用引數 --parallel 4 --nvcc_threads 1 限制並行 NVCC 執行緒的數量。

關於舊版本 ONNX Runtime、CUDA 和 Visual Studio 的說明

  • 根據您使用的 CUDA、cuDNN 和 Visual Studio 版本之間的相容性,您可能需要顯式安裝早期版本的 MSVC 工具集。
  • 對於舊版本 ONNX Runtime 和 CUDA,以及 Visual Studio
    • CUDA 10.0 已知與 14.11 到 14.16 的工具集(Visual Studio 2017 15.9)相容,並且應繼續與未來的 Visual Studio 版本相容。
    • CUDA 9.2 已知與 14.11 MSVC 工具集(Visual Studio 15.3 和 15.4)相容
      • 要安裝 14.11 MSVC 工具集,請參見此頁面
      • 要在更高版本的 Visual Studio 2017 中使用 14.11 工具集,您有兩種選擇
        1. 在執行構建指令碼之前,透過執行 vcvarsall.bat 設定 Visual Studio 環境變數以指向 14.11 工具集。例如,如果您有 VS2017 Enterprise,x64 構建將使用以下命令 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64 -vcvars_ver=14.11 為方便起見,.\build.amd64.1411.bat 將執行此操作,並且可以與 .\build.bat 以相同的方式使用。例如,` .\build.amd64.1411.bat –use_cuda`

        2. 或者,如果您有 CMake 3.13 或更高版本,您可以透過 --msvc_toolset 構建指令碼引數指定工具集版本。例如,.\build.bat --msvc_toolset 14.11

  • 如果您的 Windows 機器上安裝了多個 CUDA 版本,並且您正在使用 Visual Studio 構建,CMake 將使用它在 BuildCustomization 資料夾中找到的最高版本 CUDA 的構建檔案。例如,C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\BuildCustomizations。如果您想使用早期版本構建,則必須暫時從該目錄中刪除更高版本的“CUDA x.y.*”檔案。

TensorRT

有關 TensorRT 執行提供者的更多資訊,請參閱此處

先決條件

  • 遵循CUDA 執行提供者說明安裝 CUDA 和 cuDNN,並設定環境變數。
  • 遵循TensorRT 安裝說明
    • ONNX Runtime 的 TensorRT 執行提供者是使用 TensorRT 10.9 構建和測試的。
    • TensorRT 安裝路徑必須透過 --tensorrt_home 引數提供。
    • ONNX Runtime 預設使用 tensorrt_home 中的 TensorRT 內建解析器
    • 要改用開源的 onnx-tensorrt 解析器,請在下面的構建命令中新增 --use_tensorrt_oss_parser 引數。
      • 開源 onnx-tensorrt 解析器的預設版本在 cmake/deps.txt 中指定。
      • 要指定不同版本的 onnx-tensorrt 解析器
        • 選擇您偏好的 onnx-tensorrt 提交;
        • 使用下載的 onnx-tensorrt zip 檔案執行 sha1sum 命令以獲取 SHA1 雜湊
        • 使用更新的 onnx-tensorrt 提交和雜湊資訊更新 cmake/deps.txt
      • 請確保 cmake/deps.txt 中指定的 TensorRT 內建解析器/開源 onnx-tensorrt **版本匹配**,如果啟用 --use_tensorrt_oss_parser
        • 例如,如果將 tensorrt_home 分配給 TensorRT-10.9 內建二進位制檔案的路徑,並且 cmake/deps.txt 中指定了 onnx-tensorrt 10.9-GA 分支,則版本匹配。

[致 ORT 1.21/1.22 開源解析器使用者]

  • ORT 1.21/1.22 連結到 onnx-tensorrt 10.8-GA/10.9-GA,這需要新發布的 onnx 1.18。
    • 在構建 ORT 1.21/1.22 時,有一個臨時修復方案來預覽 onnx-tensorrt 10.8-GA/10.9-GA
      • cmake/deps.txt 中的 onnx 行替換為 onnx;https://github.com/onnx/onnx/archive/e709452ef2bbc1d113faf678c24e6d3467696e83.zip;c0b9f6c29029e13dea46b7419f3813f4c2ca7db8
      • 下載此檔案作為原始檔案,並將其儲存到 cmake/patches/onnx/onnx.patch(不要從瀏覽器複製/貼上,因為它可能會更改換行符型別)
      • 使用上述 trt 相關標誌(包括 --use_tensorrt_oss_parser)構建 ORT
    • onnx 1.18 受最新 ORT 主分支支援。請 checkout 主分支並使用 --use_tensorrt_oss_parser 構建 ORT-TRT,以啟用對 onnx 1.18 的完全 OSS 解析器支援。

構建說明

Windows

# to build with tensorrt built-in parser
.\build.bat --config Release --parallel  --cmake_extra_defines 'CMAKE_CUDA_ARCHITECTURES=native' --cudnn_home <path to cuDNN home> --cuda_home <path to CUDA home> --use_tensorrt --tensorrt_home <path to TensorRT home> --cmake_generator "Visual Studio 17 2022"

# to build with specific version of open-sourced onnx-tensorrt parser configured in cmake/deps.txt
.\build.bat --config Release --parallel  --cmake_extra_defines 'CMAKE_CUDA_ARCHITECTURES=native' --cudnn_home <path to cuDNN home> --cuda_home <path to CUDA home> --use_tensorrt --tensorrt_home <path to TensorRT home> --use_tensorrt_oss_parser --cmake_generator "Visual Studio 17 2022" 

Linux

# to build with tensorrt built-in parser
./build.sh --config Release --parallel --cmake_extra_defines 'CMAKE_CUDA_ARCHITECTURES=native' --cudnn_home <path to cuDNN e.g. /usr/lib/x86_64-linux-gnu/> --cuda_home <path to folder for CUDA e.g. /usr/local/cuda> --use_tensorrt --tensorrt_home <path to TensorRT home>

# to build with specific version of open-sourced onnx-tensorrt parser configured in cmake/deps.txt
./build.sh --config Release --parallel --cmake_extra_defines 'CMAKE_CUDA_ARCHITECTURES=native' --cudnn_home <path to cuDNN e.g. /usr/lib/x86_64-linux-gnu/> --cuda_home <path to folder for CUDA e.g. /usr/local/cuda> --use_tensorrt --use_tensorrt_oss_parser --tensorrt_home <path to TensorRT home> --skip_submodule_sync

Dockerfile 說明可在此處獲取。

注意 使用 TensorRT 8.X 和 --use_tensorrt_oss_parser 構建需要額外的標誌 –cmake_extra_defines onnxruntime_USE_FULL_PROTOBUF=ON


NVIDIA Jetson TX1/TX2/Nano/Xavier/Orin

構建說明

這些說明適用於最新的 JetPack SDK

  1. 在 Jetson 主機上克隆 ONNX Runtime 倉庫

    git clone --recursive https://github.com/microsoft/onnxruntime
    
  2. 指定 CUDA 編譯器,或將其位置新增到 PATH 中。

    1. JetPack 5.x 使用者可以升級到最新的 CUDA 版本,而無需更新 JetPack 版本或 Jetson Linux BSP(板級支援包)。

      1. 對於 JetPack 5.x 使用者,ONNX Runtime 1.17 及更高版本要求安裝 CUDA>=11.8 和 GCC>9.4。

      2. 請檢視此官方部落格以獲取 CUDA 升級說明(CUDA 12.2 已在 Jetson Xavier NX 上的 JetPack 5.1.2 中驗證)。

        1. 如果 /usr/local/cuda-12.2/compat 下沒有 libnvcudla.sosudo apt-get install -y cuda-compat-12-2 並將 export LD_LIBRARY_PATH="/usr/local/cuda-12.2/lib64:/usr/local/cuda-12.2/compat:$LD_LIBRARY_PATH" 新增到 ~/.bashrc 中。
      3. 請檢視此處以獲取計算能力資料表。

    2. 如果 nvcc 不在 PATH 中,CMake 無法自動找到正確的 nvccnvcc 可以透過以下方式新增到 PATH

      export PATH="/usr/local/cuda/bin:${PATH}"
      

      export CUDACXX="/usr/local/cuda/bin/nvcc"
      
    3. 更新 TensorRT 庫

      1. Jetpack 5.x 支援到 TensorRT 8.5。Jetpack 6.x 配備 TensorRT 8.6-10.3。

      2. Jetpack 6.x 使用者可以從 TensorRT SDK 網站下載最新的適用於 jetpack 的 TensorRT 10 TAR 包。

      3. 請檢視此處以獲取所有 ONNX Runtime 版本之間的 TensorRT/CUDA 支援矩陣。

  3. 在 Jetpack 主機上安裝 ONNX Runtime 構建依賴項

    sudo apt install -y --no-install-recommends \
      build-essential software-properties-common libopenblas-dev \
      libpython3.10-dev python3-pip python3-dev python3-setuptools python3-wheel
    
  4. 構建 ONNX Runtime 需要 Cmake。請在此處檢視所需的最低 CMake 版本。從 https://cmake.org/download/ 下載並新增 cmake 可執行檔案到 PATH 以使用它。

  5. 構建 ONNX Runtime Python wheel

    1. 構建支援 CUDA 和 TensorRT 的 onnxruntime-gpu wheel(如有必要,更新 CUDA/CUDNN/TensorRT 庫的路徑)

      ./build.sh --config Release --update --build --parallel --build_wheel \
      --use_tensorrt --cuda_home /usr/local/cuda --cudnn_home /usr/lib/aarch64-linux-gnu \
      --tensorrt_home /usr/lib/aarch64-linux-gnu
      

​ 注意

  • 預設情況下,onnxruntime-gpu wheel 檔案將捕獲在 path_to/onnxruntime/build/Linux/Release/dist/ 下(構建路徑可以透過在上述構建命令中新增 --build_dir 後跟自定義路徑來自定義)。

  • 在構建命令中附加 --skip_tests --cmake_extra_defines 'CMAKE_CUDA_ARCHITECTURES=native' 'onnxruntime_BUILD_UNIT_TESTS=OFF' 'onnxruntime_USE_FLASH_ATTENTION=OFF' 'onnxruntime_USE_MEMORY_EFFICIENT_ATTENTION=OFF' 以選擇退出可選功能並減少構建時間。

  • 對於部分 Jetson 裝置(如 Xavier 系列),更高的功耗模式涉及更多的核心(最多 6 個)進行計算,但在構建 ONNX Runtime 時會消耗更多資源。如果發生 OOM 並且系統掛起,請在構建命令中設定 --parallel 1

TensorRT-RTX

有關 NV TensorRT RTX 執行提供者的更多資訊,請參閱此處

先決條件

  • 遵循CUDA 執行提供者說明安裝 CUDA 並設定環境變數。
  • 從 nvidia.com 安裝 TensorRT for RTX(TODO:可用時新增連結)

構建說明

build.bat --config Release --parallel 32 --build_dir _build --build_shared_lib --use_nv_tensorrt_rtx --tensorrt_home "C:\dev\TensorRT-RTX-1.1.0.3" --cuda_home "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9" --cmake_generator "Visual Studio 17 2022" --use_vcpkg 將 –tensorrt_home 和 –cuda_home 替換為 CUDA 和 TensorRT-RTX 安裝的正確路徑。

oneDNN

有關 oneDNN(以前稱為 DNNL)的更多資訊,請參閱此處

構建說明

DNNL 執行提供者可以為 Intel CPU 或 GPU 構建。要為 Intel GPU 構建,請安裝 Intel SDK for OpenCL Applications 或從 Khronos OpenCL SDK 構建 OpenCL。將 OpenCL SDK 路徑作為 dnnl_opencl_root 傳遞給構建命令。安裝最新的 GPU 驅動程式 - Windows 圖形驅動程式Linux 圖形計算執行時和 OpenCL 驅動程式

對於 CPU

Windows

.\build.bat --use_dnnl

Linux

./build.sh --use_dnnl

對於 GPU

Windows

.\build.bat --use_dnnl --dnnl_gpu_runtime ocl --dnnl_opencl_root "c:\program files (x86)\intelswtools\sw_dev_tools\opencl\sdk"

Linux

./build.sh --use_dnnl --dnnl_gpu_runtime ocl --dnnl_opencl_root "/opt/intel/sw_dev_tools/opencl-sdk"

構建 Python Wheel

OneDNN EP 構建支援使用 –build_wheel 標誌為 Windows 和 Linux 構建 Python wheel

.\build.bat --config RelWithDebInfo --parallel --build_shared_lib --cmake_generator "Visual Studio 16 2019" --build_wheel --use_dnnl --dnnl_gpu_runtime ocl --dnnl_opencl_root "C:\Program Files (x86)\IntelSWTools\system_studio_2020\OpenCL\sdk"


OpenVINO

有關 OpenVINO™ 執行提供者的更多資訊,請參閱此處

先決條件

  1. 從 Intel® Distribution of OpenVINO™TM Toolkit Release 2024.3 安裝 OpenVINO™ 離線/線上安裝程式,適用於相應的作業系統和目標硬體

    有關詳細說明,請遵循文件

2024.5 是當前推薦的 OpenVINO™ 版本。OpenVINO™ 2024.5 是最低 OpenVINO™ 版本要求。

  1. 使用特定後續說明配置目標硬體
    • 要配置 Intel® Processor Graphics(GPU),請遵循以下說明:WindowsLinux
  2. 透過執行 setupvars 指令碼初始化 OpenVINO™ 環境,如下所示。這是必需的步驟
    • 對於 Windows
       C:\<openvino_install_directory>\setupvars.bat
      
    • 對於 Linux
       $ source <openvino_install_directory>/setupvars.sh
      

      注意: 如果您正在使用 dockerfile 來使用 OpenVINO™ Execution Provider,在 dockerfile 中 sourcing OpenVINO™ 將不可能。您必須明確設定 LD_LIBRARY_PATH 以指向 OpenVINO™ 庫的位置。請參考我們的dockerfile

構建說明

Windows

.\build.bat --config RelWithDebInfo --use_openvino <hardware_option> --build_shared_lib --build_wheel

注意:預設的 Windows CMake Generator 是 Visual Studio 2019,但您也可以透過向 .\build.bat 傳遞 --cmake_generator "Visual Studio 17 2022" 來使用更新的 Visual Studio 2022。

Linux

./build.sh --config RelWithDebInfo --use_openvino <hardware_option> --build_shared_lib --build_wheel
  • --build_wheel 在 dist/ 資料夾中建立 python wheel 檔案。從原始碼構建時啟用它。
  • --use_openvino 在 ONNX Runtime 中構建 OpenVINO™ 執行提供者。
  • <hardware_option>:指定構建 OpenVINO™ 執行提供者的預設硬體目標。這可以在執行時透過另一個選項動態覆蓋(有關動態裝置選擇的更多詳細資訊,請參閱OpenVINO™-ExecutionProvider)。以下是不同 Intel 目標裝置的選項。

請參閱Intel GPU 裝置命名約定,以在整合和獨立 GPU 共存的情況下指定正確的硬體目標。

硬體選項 目標裝置
CPU 英特爾® CPU
GPU 英特爾® 整合顯示卡
GPU.0 英特爾® 整合顯示卡
GPU.1 英特爾® 獨立顯示卡
NPU 英特爾® 神經網路處理器單元
HETERO:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... 上述所有英特爾® 晶片
MULTI:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... 上述所有英特爾® 晶片
AUTO:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... 上述所有英特爾® 晶片

為 HETERO 或 Multi 或 AUTO 裝置構建指定硬體目標

HETERO:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... DEVICE_TYPE 可以是此列表中的任何裝置['CPU', 'GPU', 'NPU']

有效的 HETERO 或 MULTI 或 AUTO 裝置構建應至少指定兩個裝置。

Example's: HETERO:GPU,CPU or AUTO:GPU,CPU or MULTI:GPU,CPU

停用子圖分割槽功能

  • 構建 ONNX Runtime 中的 OpenVINO™ 執行提供者時停用子圖分割槽。

  • 啟用此選項後。完全支援的模型在 OpenVINO 執行提供者上執行,否則它們將完全回退到預設的 CPU EP。

  • 要在構建時啟用此功能。使用 --use_openvino <hardware_option>_NO_PARTITION

Usage: --use_openvino CPU_FP32_NO_PARTITION or --use_openvino GPU_FP32_NO_PARTITION or
       --use_openvino GPU_FP16_NO_PARTITION 

有關 OpenVINO™ 執行提供者的 ONNX 層支援、拓撲支援和啟用的 Intel 硬體的更多資訊,請參閱文件 OpenVINO™-ExecutionProvider


QNN

有關 QNN 執行提供者的更多資訊,請參閱此處

先決條件

  • 安裝 Qualcomm AI Engine Direct SDK (Qualcomm Neural Network SDK) Linux/Android/Windows

  • 安裝 cmake-3.28 或更高版本。

  • 安裝 Python 3.10 或更高版本。
  • 簽出原始碼樹

     git clone --recursive https://github.com/Microsoft/onnxruntime.git
     cd onnxruntime
    
  • 安裝 ONNX Runtime Python 依賴項。
     pip install -r requirements.txt
    

構建選項

  • --use_qnn [QNN_LIBRARY_KIND]:構建 QNN 執行提供者。QNN_LIBRARY_KIND 是可選的,用於指定是構建 QNN 執行提供者為共享庫(預設)還是靜態庫。
    • --use_qnn--use_qnn shared_lib:將 QNN 執行提供者構建為共享庫。
    • --use_qnn static_lib:將 QNN 執行提供者構建為靜態庫並連結到 ONNX Runtime 中。這是 Android 構建所必需的。
  • --qnn_home QNN_SDK_PATH:Qualcomm AI Engine Direct SDK 的路徑。
    • Windows 示例:--qnn_home 'C:\Qualcomm\AIStack\QAIRT\2.31.0.250130'
    • Linux 示例:--qnn_home /opt/qcom/aistack/qairt/2.31.0.250130
  • --build_wheel:啟用 Python 繫結並構建 Python wheel。
  • --arm64:交叉編譯為 Arm64。
  • --arm64ec:交叉編譯為 Arm64EC。Arm64EC 程式碼以原生效能執行,並與在 Windows on Arm 裝置上同一程序中在模擬下執行的 x64 程式碼互操作。請參閱 Arm64EC 概述

執行 python tools/ci_build/build.py --help 以獲取所有可用構建選項的說明。

構建說明

Windows (原生 x86-64 或原生 Arm64)

.\build.bat --use_qnn --qnn_home [QNN_SDK_PATH] --build_shared_lib --build_wheel --cmake_generator "Visual Studio 17 2022" --config Release --parallel --skip_tests --build_dir build\Windows

注意

  • 並非所有 Qualcomm 後端(例如 HTP)都支援在原生 x86-64 構建上執行模型。有關更多資訊,請參閱 Qualcomm SDK 後端文件
  • 即使 Qualcomm 後端不支援在 x86-64 上執行,QNN 執行提供者也可能能夠為 Qualcomm 後端生成編譯後的模型

Windows (Arm64 交叉編譯目標)

.\build.bat --arm64 --use_qnn --qnn_home [QNN_SDK_PATH] --build_shared_lib --build_wheel --cmake_generator "Visual Studio 17 2022" --config Release --parallel --build_dir build\Windows

Windows (Arm64EC 交叉編譯目標)

.\build.bat --arm64ec --use_qnn --qnn_home [QNN_SDK_PATH] --build_shared_lib --build_wheel --cmake_generator "Visual Studio 17 2022" --config Release --parallel --build_dir build\Windows

Windows (Arm64X 交叉編譯目標)

使用 build_arm64x.bat 指令碼構建 Arm64X 二進位制檔案。Arm64X 二進位制檔案捆綁了 Arm64 和 Arm64EC 程式碼,使 Arm64X 與 Windows on Arm 裝置上的 Arm64 和 Arm64EC 程序相容。請參閱 Arm64X PE 檔案概述

.\build_arm64x.bat --use_qnn --qnn_home [QNN_SDK_PATH] --build_shared_lib --cmake_generator "Visual Studio 17 2022" --config Release --parallel

注意

  • 不要指定 --build_dir 選項,因為 build_arm64x.bat 設定了特定的構建目錄。
  • 上述命令將 Arm64X 二進位制檔案放置在 .\build\arm64ec-x\Release\Release\ 目錄下。

Linux (x86_64)

./build.sh --use_qnn --qnn_home [QNN_SDK_PATH] --build_shared_lib --build_wheel --config Release --parallel --skip_tests --build_dir build/Linux

Android (交叉編譯)

請參考為 Android 構建 OnnxRuntime

# on Windows
.\build.bat --build_shared_lib --android --config Release --parallel --use_qnn static_lib --qnn_home [QNN_SDK_PATH] --android_sdk_path [android_SDK path] --android_ndk_path [android_NDK path] --android_abi arm64-v8a --android_api [api-version] --cmake_generator Ninja --build_dir build\Android

# on Linux
./build.sh --build_shared_lib --android --config Release --parallel --use_qnn static_lib --qnn_home [QNN_SDK_PATH] --android_sdk_path [android_SDK path] --android_ndk_path [android_NDK path] --android_abi arm64-v8a --android_api [api-version] --cmake_generator Ninja --build_dir build/Android

DirectML

有關 DirectML 執行提供者的更多資訊,請參閱此處

Windows

.\build.bat --use_dml

注意

DirectML 執行提供者支援為 x64 和 x86 架構構建。DirectML 僅在 Windows 上受支援。


Arm 計算庫

有關 ACL 執行提供者的更多資訊,請參閱此處

構建說明

您必須首先按照文件中所述,為您的平臺構建 Arm Compute Library 24.07。有關為基於 Arm® 的裝置構建的資訊,請參見此處

build.sh 新增以下選項以啟用 ACL 執行提供者

--use_acl --acl_home=/path/to/ComputeLibrary --acl_libs=/path/to/ComputeLibrary/build

Arm NN

有關 Arm NN 執行提供者的更多資訊,請參閱此處

先決條件

  • 支援的後端:i.MX8QM Armv8 CPU
  • 支援的 BSP:i.MX8QM BSP
    • 安裝 i.MX8QM BSP:source fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-aarch64-toolchain-4*.sh
  • 設定構建環境
source /opt/fsl-imx-xwayland/4.*/environment-setup-aarch64-poky-linux
alias cmake="/usr/bin/cmake -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake"
  • 有關為基於 Arm 的裝置構建的資訊,請參見此處

構建說明

./build.sh --use_armnn

Relu 運算子預設設定為使用 CPU 執行提供者以獲得更好的效能。要使用 Arm NN 實現,請使用 –armnn_relu 標誌構建

./build.sh --use_armnn --armnn_relu

批歸一化運算子預設設定為使用 CPU 執行提供者。要使用 Arm NN 實現,請使用 –armnn_bn 標誌構建

./build.sh --use_armnn --armnn_bn

要在正常環境之外使用庫,您可以透過提供 –armnn_home 和 –armnn_libs 引數來定義 Arm NN 主目錄和構建目錄的路徑來設定自定義路徑。Arm Compute Library 主目錄和構建目錄也必須可用,如果需要,可以使用 –acl_home 和 –acl_libs 分別指定。

./build.sh --use_armnn --armnn_home /path/to/armnn --armnn_libs /path/to/armnn/build  --acl_home /path/to/ComputeLibrary --acl_libs /path/to/acl/build

RKNPU

有關 RKNPU 執行提供者的更多資訊,請參閱此處

先決條件

  • 支援平臺:RK1808 Linux
  • 有關為基於 Arm 的裝置構建的資訊,請參見此處
  • 使用 gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu 而不是 gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf,並修改 tool.cmake 中的 CMAKE_CXX_COMPILER & CMAKE_C_COMPILER
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)

構建說明

Linux

  1. 下載 rknpu_ddk 到任意目錄。

  2. 構建 ONNX Runtime 庫並測試

     ./build.sh --arm --use_rknpu --parallel --build_shared_lib --build_dir build_arm --config MinSizeRel --cmake_extra_defines RKNPU_DDK_PATH=<Path To rknpu_ddk> CMAKE_TOOLCHAIN_FILE=<Path To tool.cmake> ONNX_CUSTOM_PROTOC_EXECUTABLE=<Path To protoc>
    
  3. 在 RK1808 開發板上部署 ONNX runtime 和 librknpu_ddk.so

     libonnxruntime.so.1.2.0
     onnxruntime_test_all
     rknpu_ddk/lib64/librknpu_ddk.so
    

AMD Vitis AI

有關 Vitis AI 執行提供者的更多資訊,請參閱此處

Windows

從 Visual Studio Developer Command Prompt 或 Developer PowerShell,執行以下命令

.\build.bat --use_vitisai --build_shared_lib --parallel --config Release

如果您希望利用 Python API,請包含 --build_wheel 標誌

.\build.bat --use_vitisai --build_shared_lib --parallel --config Release --build_wheel

您還可以透過 cmake_extra_defines 引數指定 CMAKE_INSTALL_PREFIX 來覆蓋安裝位置。例如:

.\build.bat --use_vitisai --build_shared_lib --parallel --config Release --cmake_extra_defines CMAKE_INSTALL_PREFIX=D:\onnxruntime

Linux

目前,Linux 支援僅限於 AMD Adapable SoC。請參考此處的 SoC 目標指南。


AMD MIGraphX

有關 MIGraphX 執行提供者的更多資訊,請參閱此處

先決條件

  • 安裝 ROCm
    • ONNX Runtime 的 MIGraphX 執行提供者是使用 ROCm6.3.1 構建和測試的。
  • 安裝 MIGraphX
    • MIGraphX 安裝路徑必須透過 --migraphx_home parameter 提供。

構建說明

Linux

./build.sh --config <Release|Debug|RelWithDebInfo> --parallel --use_migraphx --migraphx_home <path to MIGraphX home>

Dockerfile 說明可在此處獲取。

構建 Python Wheel

./build.sh --config Release --build_wheel --parallel --use_migraphx --migraphx_home /opt/rocm

然後可以在 ./build/Linux/Release/dist 中找到 python wheels(*.whl)。


AMD ROCm

有關 ROCm 執行提供者的更多資訊,請參閱此處

先決條件

  • 安裝 ROCm
    • ONNX Runtime 的 ROCm 執行提供者是使用 ROCm6.3.1 構建和測試的。

構建說明

Linux

./build.sh --config <Release|Debug|RelWithDebInfo> --parallel --use_rocm --rocm_home <path to ROCm home>

Dockerfile 說明可在此處獲取。

構建 Python Wheel

./build.sh --config Release --build_wheel --parallel --use_rocm --rocm_home /opt/rocm

然後可以在 ./build/Linux/Release/dist 中找到 python wheels(*.whl)。


NNAPI

在 Android 平臺上使用 NNAPI 是透過 NNAPI 執行提供者(EP)實現的。

有關更多詳細資訊,請參閱 NNAPI 執行提供者文件。

適用於 Android 的預構建 ONNX Runtime Mobile 包包含 NNAPI EP。

如果執行 ONNX Runtime 的自定義構建,則必須在構建時啟用對 NNAPI EP 或 CoreML EP 的支援。

建立支援 NNAPI EP 的最小構建

請參閱說明以設定構建所需的 Android 環境。Android 構建可以在 Windows 或 Linux 上進行交叉編譯。

設定所有必要的元件後,請遵循建立自定義構建的說明,並進行以下更改

  • --minimal_build 替換為 --minimal_build extended 以啟用對在執行時動態建立核心的執行提供者的支援,這是 NNAPI EP 所需的。
  • 新增 --use_nnapi 以在構建中包含 NNAPI EP

啟用 NNAPI EP 的構建命令示例

Windows 示例

<ONNX Runtime repository root>.\build.bat --config MinSizeRel --android --android_sdk_path D:\Android --android_ndk_path D:\Android\ndk\21.1.6352462\ --android_abi arm64-v8a --android_api 29 --cmake_generator Ninja --minimal_build extended --use_nnapi --disable_ml_ops --disable_exceptions --build_shared_lib --skip_tests --include_ops_by_config <config file from model conversion>

Linux 示例

<ONNX Runtime repository root>./build.sh --config MinSizeRel --android --android_sdk_path /Android --android_ndk_path /Android/ndk/21.1.6352462/ --android_abi arm64-v8a --android_api 29 --minimal_build extended --use_nnapi --disable_ml_ops --disable_exceptions --build_shared_lib --skip_tests --include_ops_by_config <config file from model conversion>`

CoreML

在 iOS 和 macOS 平臺上使用 CoreML 是透過 CoreML EP 實現的。

有關更多詳細資訊,請參閱 CoreML 執行提供者文件。

適用於 iOS 的預構建 ONNX Runtime Mobile 包包含 CoreML EP。

建立支援 CoreML EP 的最小構建

請參閱說明以設定構建所需的 iOS 環境。iOS/macOS 構建必須在 Mac 機器上執行。

設定所有必要的元件後,請遵循建立自定義構建的說明,並進行以下更改

  • --minimal_build 替換為 --minimal_build extended 以啟用對在執行時動態建立核心的執行提供者的支援,這是 CoreML EP 所需的。
  • 新增 --use_coreml 以在構建中包含 CoreML EP

XNNPACK

在 Android/iOS/Windows/Linux 平臺上使用 XNNPACK 是透過 XNNPACK EP 實現的。

有關更多詳細資訊,請參閱 XNNPACK 執行提供者文件。

適用於 Android 的預構建 ONNX Runtime 包(onnxruntime-android)包含 XNNPACK EP。

適用於 iOS 的預構建 ONNX Runtime Mobile 包,在 CocoaPods 中的 onnxruntime-connxruntime-objc,包含 XNNPACK EP。(帶 XNNPACK 的 onnxruntime-objc 包將從 1.14 版開始提供。)

如果執行 ONNX Runtime 的自定義構建,則必須在構建時啟用對 XNNPACK EP 的支援。

構建用於 Android

建立支援 XNNPACK EP 的最小構建

請參閱說明以設定構建所需的 Android 環境。Android 構建可以在 Windows 或 Linux 上進行交叉編譯。

設定所有必要的元件後,請遵循建立自定義構建的說明,並進行以下更改

  • --minimal_build 替換為 --minimal_build extended 以啟用對在執行時動態建立核心的執行提供者的支援,這是 XNNPACK EP 所需的。
  • 新增 --use_xnnpack 以在構建中包含 XNNPACK EP
啟用 XNNPACK EP 的構建命令示例

Windows 示例

<ONNX Runtime repository root>.\build.bat --config MinSizeRel --android --android_sdk_path D:\Android --android_ndk_path D:\Android\ndk\21.1.6352462\ --android_abi arm64-v8a --android_api 29 --cmake_generator Ninja --minimal_build extended --use_xnnpack --disable_ml_ops --disable_exceptions --build_shared_lib --skip_tests --include_ops_by_config <config file from model conversion>

Linux 示例

<ONNX Runtime repository root>./build.sh --config MinSizeRel --android --android_sdk_path /Android --android_ndk_path /Android/ndk/21.1.6352462/ --android_abi arm64-v8a --android_api 29 --minimal_build extended --use_xnnpack --disable_ml_ops --disable_exceptions --build_shared_lib --skip_tests --include_ops_by_config <config file from model conversion>`

如果您不介意 MINIMAL 構建,可以使用以下命令為 Android 構建 XNNPACK EP:Linux 示例

./build.sh --cmake_generator "Ninja" --android  --android_sdk_path /Android --android_ndk_path /Android/ndk/21.1.6352462/ --android_abi arm64-v8a --android_api 29 --use_xnnpack

構建用於 iOS(從 1.14 版開始可用)

構建 iOS 包需要 Mac 機器。請首先遵循此指南設定環境。

建立支援 XNNPACK EP 的最小構建

設定所有必要的元件後,請遵循建立自定義構建的說明,並進行以下更改

  • --minimal_build 替換為 --minimal_build extended 以啟用對在執行時動態建立核心的執行提供者的支援,這是 XNNPACK EP 所需的。
  • 新增 --use_xnnpack 以在構建中包含 XNNPACK EP
<ONNX Runtime repository root>./build.sh --config <Release|Debug|RelWithDebInfo|MinSizeRel> --use_xcode \
           --ios --ios_sysroot iphoneos --osx_arch arm64 --apple_deploy_target <minimal iOS version> --use_xnnpack --minimal_build extended --disable_ml_ops --disable_exceptions --build_shared_lib --skip_tests --include_ops_by_config <config file from model conversion>

構建用於 Windows

<ONNX Runtime repository root>.\build.bat --config <Release|Debug|RelWithDebInfo> --use_xnnpack

構建用於 Linux

<ONNX Runtime repository root>./build.sh --config <Release|Debug|RelWithDebInfo> --use_xnnpack

CANN

有關 CANN 執行提供者的更多資訊,請參閱此處

先決條件

  1. 請遵循文件,安裝適用於相應作業系統和目標硬體的 CANN 工具包,以獲取詳細說明。

  2. 透過執行以下指令碼初始化 CANN 環境。

    # Default path, change it if needed.
    source /usr/local/Ascend/ascend-toolkit/set_env.sh
    

構建說明

Linux

./build.sh --config <Release|Debug|RelWithDebInfo> --build_shared_lib --parallel --use_cann

注意

  • CANN 執行提供者支援為 x64 和 aarch64 架構構建。
  • CANN 執行提供者目前僅支援 Linux。

Azure

有關 Azure 執行提供者的更多詳細資訊,請參閱此處

先決條件

對於 Linux,在構建之前,請

  • 在系統中安裝 openssl dev 包,對於 redhat 是 openssl-dev,對於 ubuntu 是 libssl-dev。
  • 如果系統安裝了多個 openssl dev 版本,請將環境變數“OPENSSL_ROOT_DIR”設定為所需版本,例如
set OPENSSL_ROOT_DIR=/usr/local/ssl3.x/

構建說明

Windows

build.bat --config <Release|Debug|RelWithDebInfo> --build_shared_lib --build_wheel --use_azure

Linux

./build.sh --config <Release|Debug|RelWithDebInfo> --build_shared_lib --build_wheel --use_azure