使用执行提供程序构建 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 是相同的,区别在于共享提供程序将在运行时加载,当提供程序添加到会话选项时(通过调用 OrtSessionOptionsAppendExecutionProvider_OpenVINO 或 C API 中的 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,可以编译带有附加 NHWC ops 的 CUDA EP。由于支持的 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 安装路径必须通过 --tensorrt_home 参数提供。
    • 默认情况下,ONNX Runtime 使用来自 tensorrt_homeTensorRT 内置解析器
    • 要改用开源 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.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.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' 以选择退出可选功能并减少构建时间。

  • 对于 Xavier 系列等部分 Jetson 设备,更高功率模式涉及更多内核(最多 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"

构建 Phython 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.3 是当前推荐的 OpenVINO™ 版本。OpenVINO™ 2023.3 是最低 OpenVINO™ 版本要求。

  1. 使用特定的后续说明配置目标硬件
    • 要配置 Intel® 处理器显卡 (GPU),请按照以下说明操作:WindowsLinux
  2. 通过运行 setupvars 脚本初始化 OpenVINO™ 环境,如下所示。这是一个必需的步骤
    • 对于 Windows
       C:\<openvino_install_directory>\setupvars.bat
      
    • 对于 Linux
       $ source <openvino_install_directory>/setupvars.sh
      

      注意: 如果您正在使用 dockerfile 来使用 OpenVINO™ 执行提供程序,则无法在 dockerfile 中获取 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,但您也可以通过将 --cmake_generator "Visual Studio 17 2022" 传递给 .\build.bat 来使用较新的 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 设备命名约定

硬件选项 目标设备
CPU Intel® CPU
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 代码以本机性能运行,并且可以与在 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 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 开发人员命令提示或开发人员 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 Adaptable 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 说明可在此处获得。

构建 Phython Wheel

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

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


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 说明可在此处获得。

构建 Phython Wheel

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

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


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