使用执行提供程序构建 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 11.8、12.2 和 cuDNN 8.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 工具集,请参阅此页面
      • 要将 14.11 工具集与更高版本的 Visual Studio 2017 一起使用,您有两种选择
        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.8 构建和测试。
    • 必须通过 --tensorrt_home 参数提供 TensorRT 安装路径。
    • ONNX Runtime 默认使用 TensorRT 内置解析器tensorrt_home
    • 要改用开源的 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.0 开源解析器用户]

  • ORT 1.21.0 链接到 onnx-tensorrt 10.8-GA,后者需要即将发布的 onnx 1.18。
    • 以下是构建 ORT 1.21.0 时在 onnx-tensorrt 10.8-GA(或更新版本)上预览的临时修复方法
      • cmake/deps.txt 中的 onnx 行替换为 onnx;https://github.com/onnx/onnx/archive/f22a2ad78c9b8f3bd2bb402bfce2b0079570ecb6.zip;324a781c31e30306e30baff0ed7fe347b10f8e3c
      • 此文件下载为原始文件,并将其保存到 cmake/patches/onnx/onnx.patch(不要从浏览器复制/粘贴,因为可能会改变换行符类型)
      • 使用上述 trt 相关标志(包括 --use_tensorrt_oss_parser)构建 ORT 1.21.0

构建说明

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.so:请运行 sudo 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 无法自动找到正确的 nvcc。可以通过以下方式将 nvcc 添加到 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.com.cn/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

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),请按照以下说明进行操作:Windows, Linux
  2. 通过运行 setupvars 脚本初始化 OpenVINO™ 环境,如下所示。这是必需的步骤
    • 对于 Windows
       C:\<openvino_install_directory>\setupvars.bat
      
    • 对于 Linux
       $ source <openvino_install_directory>/setupvars.sh
      

      注意: 如果您使用 dockerfile 来使用 OpenVINO™ 执行提供程序,则无法在 dockerfile 内 source OpenVINO™。您需要显式设置 LD_LIBRARY_PATH 指向 OpenVINO™ 库的位置。请参阅我们的 dockerfile

构建说明

Windows

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

注意:默认的 Windows CMake 生成器是 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 目标设备的选项。

在集成 GPU 和独立 GPU 共存的情况下,请参阅Intel GPU 设备命名约定来指定正确的硬件目标。

硬件选项 目标设备
CPU Intel® CPUs
GPU Intel® 集成显卡
GPU.0 Intel® 集成显卡
GPU.1 Intel® 独立显卡
NPU Intel® 神经网络处理器单元
HETERO:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... 上述所有 Intel® 芯片
MULTI:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... 上述所有 Intel® 芯片
AUTO:DEVICE_TYPE_1,DEVICE_TYPE_2,DEVICE_TYPE_3... 上述所有 Intel® 芯片

为 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 神经网络 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 代码以原生性能运行,并且可以在 Arm 版 Windows 设备上与在同一进程中模拟运行的 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 Compute Library

有关 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

默认情况下,Batch Normalization 运算符设置为使用 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_home 参数 提供 MIGraphX 安装路径。

构建说明

Linux

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

Dockerfile 说明可参见此处

构建 Python Wheel

./build.sh --config Release --build --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 --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 包,onnxruntime-connxruntime-objcCocoaPods 中,包含 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