使用执行提供程序构建 ONNX Runtime
目录
- 执行提供程序共享库
- CUDA
- TensorRT
- NVIDIA Jetson TX1/TX2/Nano/Xavier/Orin
- oneDNN
- OpenVINO
- QNN
- DirectML
- Arm Compute Library
- Arm NN
- RKNPU
- AMD Vitis AI
- AMD MIGraphX
- AMD ROCm
- NNAPI
- CoreML
- XNNPACK
- CANN
- Azure
执行提供程序共享库
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
先决条件
- 安装 CUDA 和 cuDNN
- ONNX Runtime 的 CUDA 执行提供程序使用 CUDA 11.8、12.2 和 cuDNN 8.9 构建和测试。有关更多版本信息,请查看此处。
- CUDA 安装路径必须通过 CUDA_HOME 环境变量或
--cuda_home
参数提供。安装目录应包含bin
、include
和lib
子目录。 - CUDA
bin
目录的路径必须添加到 PATH 环境变量中,以便找到nvcc
。 - cuDNN 安装路径必须通过 CUDNN_HOME 环境变量或
--cudnn_home
参数提供。在 Windows 中,安装目录应包含bin
、include
和lib
子目录。 - 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 一起使用,您有两种选择
-
在运行构建脚本之前,通过运行 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` -
或者,如果您安装了 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
- 将 cmake/deps.txt 中的 onnx 行替换为
- 以下是构建 ORT 1.21.0 时在 onnx-tensorrt 10.8-GA(或更新版本)上预览的临时修复方法
构建说明
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。
-
在 Jetson 主机上克隆 ONNX Runtime 仓库
git clone --recursive https://github.com/microsoft/onnxruntime
-
指定 CUDA 编译器,或将其位置添加到 PATH 中。
-
JetPack 5.x 用户可以升级到最新的 CUDA 版本,而无需更新 JetPack 版本或 Jetson Linux BSP(板级支持包)。
-
对于 JetPack 5.x 用户,ONNX Runtime 1.17 及更高版本需要安装 CUDA>=11.8 和 GCC>9.4。
-
请查看这篇官方博客获取 CUDA 升级说明(CUDA 12.2 已在 Jetson Xavier NX 上的 JetPack 5.1.2 上验证通过)。
- 如果
/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
。
- 如果
-
有关计算能力数据表,请查看此处。
-
-
如果
nvcc
不在PATH
中,CMake 无法自动找到正确的nvcc
。可以通过以下方式将nvcc
添加到PATH
export PATH="/usr/local/cuda/bin:${PATH}"
或
export CUDACXX="/usr/local/cuda/bin/nvcc"
-
更新 TensorRT 库
-
Jetpack 5.x 支持最高 TensorRT 8.5。Jetpack 6.x 配备 TensorRT 8.6-10.3。
-
Jetpack 6.x 用户可以在 TensorRT SDK 网站上下载针对 jetpack 的最新 TensorRT 10 TAR 包。
-
有关所有 ONNX Runtime 版本中 TensorRT/CUDA 支持矩阵,请查看此处。
-
-
-
在 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
-
构建 ONNX Runtime 需要 Cmake。请查看此处所需的最低 CMake 版本。从 https://cmake.com.cn/download/ 下载并将 cmake 可执行文件添加到
PATH
中以使用它。 -
构建 ONNX Runtime Python wheel 包
-
构建支持 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™ 执行提供程序的更多信息,请参阅此处。
先决条件
- 从 Intel® Distribution of OpenVINO™TM Toolkit Release 2024.3 安装适用于相应操作系统和目标硬件的 OpenVINO™ 离线/在线安装程序
请参阅文档了解详细说明。
2024.5 是当前推荐的 OpenVINO™ 版本。OpenVINO™ 2024.5 是 OpenVINO™ 的最低版本要求。
- 按照具体后续说明配置目标硬件
- 通过运行 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
构建说明
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 或更高版本。
- 适用于 Windows Arm64 的 Python 3.12
- 适用于 Windows x86-64 的 Python 3.12
- 注意:Arm 版 Windows 通过仿真支持 x86-64 Python 环境。请确保 Arm64 Python 环境已激活,以便进行原生 Arm64 ONNX Runtime 构建。
-
检出源码树
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
- Windows 示例:
--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 (交叉编译)
# 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
- 安装 i.MX8QM BSP:
- 设置构建环境
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
-
将rknpu_ddk 下载到任意目录。
-
构建 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>
-
在 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-c
和 onnxruntime-objc
在 CocoaPods 中,包含 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 执行提供程序的更多信息,请参见此处。
先决条件
-
请按照文档中的详细说明,为适当的操作系统和目标硬件安装 CANN 工具包。
-
运行如下所示的脚本初始化 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