ONNX Runtime 后端#
Triton 后端用于 ONNX Runtime。您可以在 后端仓库 中了解有关 Triton 后端的更多信息。在 问题页面 上提问或报告问题。
使用最新的 cmake 在本地目录中构建和安装。通常,您需要构建适当的 ONNX Runtime 实现作为构建的一部分。您可以通过指定 ONNX Runtime 版本和您想要与后端一起使用的 Triton 容器版本来完成此操作。您可以在与您感兴趣的 Triton 版本匹配的分支的 build.py 顶部的 TRITON_VERSION_MAP 中找到特定 Triton 版本中使用的版本组合。例如,要为 Triton 23.04 构建 ONNX Runtime 后端,请使用 r23.04 分支的 build.py 中的 TRITON_VERSION_MAP 中的版本。
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/install -DTRITON_BUILD_ONNXRUNTIME_VERSION=1.14.1 -DTRITON_BUILD_CONTAINER_VERSION=23.04 ..
$ make install
生成的 install/backends/onnxruntime 目录可以作为 /opt/tritonserver/backends/onnxruntime 添加到 Triton 安装中。
以下必需的 Triton 仓库将被拉取并在构建中使用。默认情况下,每个仓库都将使用“main”分支/标签,但可以 使用列出的 CMake 参数来覆盖。
triton-inference-server/backend: -DTRITON_BACKEND_REPO_TAG=[tag]
triton-inference-server/core: -DTRITON_CORE_REPO_TAG=[tag]
triton-inference-server/common: -DTRITON_COMMON_REPO_TAG=[tag]
您可以使用 -DTRITON_ENABLE_ONNXRUNTIME_TENSORRT=ON 将 TensorRT 支持添加到 ONNX Runtime 后端。您可以使用 -DTRITON_ENABLE_ONNXRUNTIME_OPENVINO=ON -DTRITON_BUILD_ONNXRUNTIME_OPENVINO_VERSION=<version> 添加 OpenVino 支持,其中 <version> 是要使用的 OpenVino 版本,应与上述 TRITON_VERSION_MAP 条目匹配。因此,要构建同时支持 TensorRT 和 OpenVino 的版本
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/install -DTRITON_BUILD_ONNXRUNTIME_VERSION=1.14.1 -DTRITON_BUILD_CONTAINER_VERSION=23.04 -DTRITON_ENABLE_ONNXRUNTIME_TENSORRT=ON -DTRITON_ENABLE_ONNXRUNTIME_OPENVINO=ON -DTRITON_BUILD_ONNXRUNTIME_OPENVINO_VERSION=2021.2.200 ..
$ make install
具有 TensorRT 优化的 ONNX Runtime#
TensorRT 可以与 ONNX 模型结合使用,以进一步优化性能。要启用 TensorRT 优化,您必须适当地设置模型配置。TensorRT 有多种优化可用,例如计算精度和工作区大小的选择。优化参数及其描述如下。
precision_mode
: 用于优化的精度。允许的值为“FP32”、“FP16”和“INT8”。默认值为“FP32”。max_workspace_size_bytes
: 模型在执行期间可以临时使用的最大 GPU 内存。默认值为 1GB。int8_calibration_table_name
: 指定 INT8 校准表名称。当 precision_mode=="INT8" 且模型不包含 Q/DQ 节点时适用。如果为具有 Q/DQ 节点的模型提供校准表,则 ORT 会话创建将失败。int8_use_native_calibration_table
: 要使用的校准表。允许的值为 1(使用本机 TensorRT 生成的校准表)和 0(使用 ORT 生成的校准表)。默认为 0。**注意:最新的校准表文件需要复制到 trt_engine_cache_path 才能进行推理。校准表特定于模型和校准数据集。每当生成新的校准表时,应清理或替换路径中的旧文件。trt_engine_cache_enable
: 启用引擎缓存。trt_engine_cache_path
: 指定引擎缓存路径。
要探索更多参数的用法,请关注下表并查看 ONNX Runtime 文档 以获取详细信息。
请链接到 CMake 中最新的 ONNX Runtime 二进制文件或从 ONNX Runtime 的 main 分支 构建,以启用最新的选项。
ONNX Runtime 和 Triton ONNXRuntime 后端之间的参数映射#
Triton 模型配置中的键 |
Triton 模型配置中的值 |
ONNX Runtime 中对应的 TensorRT EP 选项 |
类型 |
---|---|---|---|
max_workspace_size_bytes |
例如:“4294967296” |
trt_max_workspace_size |
int |
trt_max_partition_iterations |
例如:“1000” |
trt_max_partition_iterations |
int |
trt_min_subgraph_size |
例如:“1” |
trt_min_subgraph_size |
int |
precision_mode |
“FP16” |
trt_fp16_enable |
bool |
precision_mode |
“INT8” |
trt_int8_enable |
bool |
int8_calibration_table_name |
trt_int8_calibration_table_name |
string |
|
int8_use_native_calibration_table |
例如:“1”或“true”、“0”或“false” |
trt_int8_use_native_calibration_table |
bool |
trt_dla_enable |
trt_dla_enable |
bool |
|
trt_dla_core |
例如:“0” |
trt_dla_core |
int |
trt_engine_cache_enable |
例如:“1”或“true”、“0”或“false” |
trt_engine_cache_enable |
bool |
trt_engine_cache_path |
trt_engine_cache_path |
string |
|
trt_engine_cache_prefix |
trt_engine_cache_prefix |
string |
|
trt_dump_subgraphs |
例如:“1”或“true”、“0”或“false” |
trt_dump_subgraphs |
bool |
trt_force_sequential_engine_build |
例如:“1”或“true”、“0”或“false” |
trt_force_sequential_engine_build |
bool |
trt_context_memory_sharing_enable |
例如:“1”或“true”、“0”或“false” |
trt_context_memory_sharing_enable |
bool |
trt_layer_norm_fp32_fallback |
例如:“1”或“true”、“0”或“false” |
trt_layer_norm_fp32_fallback |
bool |
trt_timing_cache_enable |
例如:“1”或“true”、“0”或“false” |
trt_timing_cache_enable |
bool |
trt_timing_cache_path |
trt_timing_cache_path |
string |
|
trt_force_timing_cache |
例如:“1”或“true”、“0”或“false” |
trt_force_timing_cache |
bool |
trt_detailed_build_log |
例如:“1”或“true”、“0”或“false” |
trt_detailed_build_log |
bool |
trt_build_heuristics_enable |
例如:“1”或“true”、“0”或“false” |
trt_build_heuristics_enable |
bool |
trt_sparsity_enable |
例如:“1”或“true”、“0”或“false” |
trt_sparsity_enable |
bool |
trt_builder_optimization_level |
例如:“3” |
trt_builder_optimization_level |
int |
trt_auxiliary_streams |
例如:“-1” |
trt_auxiliary_streams |
int |
trt_tactic_sources |
例如:“-CUDNN,+CUBLAS”; |
trt_tactic_sources |
string |
trt_extra_plugin_lib_paths |
trt_extra_plugin_lib_paths |
string |
|
trt_profile_min_shapes |
例如:“input1:dim1xdimd2…,input2:dim1xdim2…,…“ |
trt_profile_min_shapes |
string |
trt_profile_max_shapes |
例如:“input1:dim1xdimd2…,input2:dim1xdim2…,…“ |
trt_profile_max_shapes |
string |
trt_profile_opt_shapes |
例如:“input1:dim1xdimd2…,input2:dim1xdim2…,…“ |
trt_profile_opt_shapes |
string |
trt_cuda_graph_enable |
例如:“1”或“true”、“0”或“false” |
trt_cuda_graph_enable |
bool |
trt_dump_ep_context_model |
例如:“1”或“true”、“0”或“false” |
trt_dump_ep_context_model |
bool |
trt_ep_context_file_path |
trt_ep_context_file_path |
string |
|
trt_ep_context_embed_mode |
例如:“1” |
trt_ep_context_embed_mode |
int |
模型配置文件中指定这些参数的部分将如下所示
.
.
.
optimization { execution_accelerators {
gpu_execution_accelerator : [ {
name : "tensorrt"
parameters { key: "precision_mode" value: "FP16" }
parameters { key: "max_workspace_size_bytes" value: "1073741824" }}
parameters { key: "trt_engine_cache_enable" value: "1" }}
]
}}
.
.
.
具有 CUDA 执行提供程序优化的 ONNX Runtime#
当为 ORT 启用 GPU 时,将启用 CUDA 执行提供程序。如果还启用了 TensorRT,则 CUDA EP 被视为回退选项(仅适用于 TensorRT 无法执行的节点)。如果未启用 TensorRT,则 CUDA EP 是执行模型的主 EP。ORT 启用了 CUDA EP 的配置选项,以根据特定模型和用户场景进一步优化。有多种优化可用,请参阅 ONNX Runtime 文档 以获取更多详细信息。要启用 CUDA EP 优化,您必须适当地设置模型配置
optimization { execution_accelerators {
gpu_execution_accelerator : [ {
name : "cuda"
parameters { key: "cudnn_conv_use_max_workspace" value: "0" }
parameters { key: "use_ep_level_unified_stream" value: "1" }}
]
}}
已弃用的参数#
以下所示的指定这些特定参数的方式已弃用。为了向后兼容,仍然支持这些参数。请使用上述方法来指定参数。
cudnn_conv_algo_search
: CUDA 卷积算法搜索配置。可用选项为 0 - EXHAUSTIVE(使用 cudnnFindConvolutionForwardAlgorithmEx 进行昂贵的详尽基准测试)。这也是默认选项,1 - HEURISTIC(使用 cudnnGetConvolutionForwardAlgorithm_v7 的轻量级启发式搜索),2 - DEFAULT(使用 CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM 的默认算法)gpu_mem_limit
: CUDA 内存限制。要使用所有可能的内存,请传入 maximum size_t。默认为 SIZE_MAX。arena_extend_strategy
: 用于扩展内存区域的策略。可用选项为:0 = kNextPowerOfTwo,1 = kSameAsRequested。默认为 0。do_copy_in_default_stream
: 标志,指示是否需要在 CUDA EP 中与计算流相同的流上进行复制。可用选项为:0 = 使用单独的流进行复制和计算,1 = 使用相同的流进行复制和计算。默认为 1。
在模型配置文件中,指定这些参数将如下所示
.
.
.
parameters { key: "cudnn_conv_algo_search" value: { string_value: "0" } }
parameters { key: "gpu_mem_limit" value: { string_value: "4294967200" } }
.
.
.
具有 OpenVINO 优化的 ONNX Runtime#
OpenVINO 可以与 ONNX 模型结合使用,以进一步优化性能。要启用 OpenVINO 优化,您必须如下所示设置模型配置。
.
.
.
optimization { execution_accelerators {
cpu_execution_accelerator : [ {
name : "openvino"
} ]
}}
.
.
.
使用 ONNX Runtime 的其他优化选项#
有关何时使用这些选项以及对它们的期望的详细信息,请访问 此处
模型配置选项#
intra_op_thread_count
: 设置用于并行化节点内执行的线程数。值为 0 表示 ORT 将选择一个默认值,即核心数。inter_op_thread_count
: 设置用于并行化图执行(跨节点)的线程数。如果启用顺序执行,则忽略此值。值为 0 表示 ORT 将选择一个默认值,即核心数。execution_mode
: 控制图中的运算符是顺序执行还是并行执行。通常,当模型有许多分支时,将此选项设置为 1,即“并行”将为您提供更好的性能。默认为 0,即“顺序执行”。level
: 指的是图优化级别。默认情况下,所有优化都已启用。允许的值为 -1、1 和 2。-1 指的是 BASIC 优化,1 指的是基本优化加上扩展优化(如融合),2 指的是禁用所有优化。请在此处找到详细信息。
optimization {
graph : {
level : 1
}}
parameters { key: "intra_op_thread_count" value: { string_value: "0" } }
parameters { key: "execution_mode" value: { string_value: "0" } }
parameters { key: "inter_op_thread_count" value: { string_value: "0" } }
命令行选项#
线程池#
当 intra 和 inter op threads 设置为 0 或大于 1 的值时,默认情况下 ORT 为每个会话创建线程池。这可能并非在所有情况下都是理想的,因此 ORT 也支持全局线程池。当启用全局线程池时,ORT 创建 1 个全局线程池,该线程池由每个会话共享。使用后端配置来启用全局线程池。当启用全局线程池时,还应通过后端配置提供 intra 和 inter op num threads 配置。模型配置中提供的配置值将被忽略。
--backend-config=onnxruntime,enable-global-threadpool=<0,1>, --backend-config=onnxruntime,intra_op_thread_count=<int> , --backend-config=onnxruntime,inter_op_thread_count=<int>
默认最大批大小#
default-max-batch-size 值用于 自动完成 期间的 max_batch_size,当未找到其他值时。假设服务器启动时未使用 --disable-auto-complete-config
命令行选项,则在以下条件下,onnxruntime 后端会将模型的 max_batch_size 设置为此默认值
自动完成已确定模型能够进行批量请求。
模型配置中的 max_batch_size 为 0,或者模型配置中省略了 max_batch_size。
如果 max_batch_size > 1 且未提供 调度器,则将使用动态批处理调度器。
--backend-config=onnxruntime,default-max-batch-size=<int>
default-max-batch-size
的默认值为 4。