关键要点
config.pbtxt
是 Triton Inference Server 的模型配置文件,定义模型的加载和服务方式。- 它包含模型名称、平台、输入输出张量、批处理策略等关键设置。
- 配置项如
max_batch_size
和instance_group
影响性能,dynamic_batching
可优化吞吐量。
什么是 config.pbtxt
?
config.pbtxt
是 Triton Inference Server 用来配置模型的文件,类似于模型的"说明书"。它告诉 Triton 如何加载模型、处理请求和返回结果。
主要配置项
- 模型名称和平台 :指定模型叫什么名字(如
my_model
),用什么技术运行(如 TensorFlow 或 ONNX)。 - 输入输出:定义模型需要什么数据(如图片或文本),输出是什么(如分类结果)。
- 批处理大小:决定一次能处理多少请求,越大吞吐量可能越高,但延迟可能增加。
- 实例组:设置模型运行在 CPU 还是 GPU,多少个实例并行工作。
- 动态批处理:自动合并小请求提高效率,适合高并发场景。
引言
在 Triton Inference Server 中,config.pbtxt
是模型配置的核心文件,基于 Protocol Buffers (protobuf) 的文本格式。它定义了模型的元数据、输入输出、批处理策略、实例分配等参数,确保模型能够高效加载和服务。本报告详细介绍 config.pbtxt
的配置项及其原理,帮助用户理解如何根据需求定制模型部署。
配置文件的结构和基本原理
config.pbtxt
文件通常位于模型仓库的模型目录下,例如:
arduino
model_repository/
└── my_model
├── 1
│ └── model.savedmodel
└── config.pbtxt
- 文件格式 :基于 Protocol Buffers 的文本格式,具体定义在 ModelConfig protobuf。
- 作用 :通过解析
config.pbtxt
,Triton 了解模型的结构和运行需求,从而正确加载模型并处理推理请求。
主要配置项及其详细解释
以下是 config.pbtxt
中最重要的配置项及其原理:
1. name
-
描述:模型的名称。
-
原理:必须与模型仓库中的目录名一致,用于标识模型。
-
示例 :
vbnetname: "my_model"
-
注意:如果未指定,Triton 将默认使用模型目录名。
2. platform
-
描述:指定模型的执行后端(backend)。
-
原理:Triton 支持多种后端,如 TensorFlow、ONNX Runtime、TensorRT 等。该字段告诉 Triton 如何加载和执行模型。
-
示例 :
vbnetplatform: "tensorflow_graphdef"
-
支持的平台 :
tensorflow_graphdef
:TensorFlow SavedModel。onnxruntime_onnx
:ONNX 模型。tensorrt_plan
:TensorRT 引擎计划。python
:Python 自定义后端。- 其他:如
openvino
,pytorch_libtorch
等。
3. max_batch_size
-
描述:模型支持的最大批处理大小。
-
原理:定义了模型可以同时处理的请求数量。设置为 0 表示不支持批处理;设置为正整数表示支持批处理。
-
示例 :
makefilemax_batch_size: 4
-
注意:批处理可以提高吞吐量,但可能增加延迟。需要根据模型和 workload 调整。
4. input
-
描述:定义模型的输入张量。
-
原理:每个输入张量必须指定名称、数据类型和形状。Triton 根据这些信息验证和处理推理请求。
-
示例 :
cssinput [ { name: "input0" data_type: TYPE_FP32 dims: [ -1, 224, 224, 3 ] } ]
-
字段解释 :
name
:输入张量的名称。data_type
:数据类型,如TYPE_FP32
(浮点32位)、TYPE_INT32
(整数32位)等。dims
:张量的形状,-1
表示可变维度(通常用于批处理大小)。
5. output
-
描述:定义模型的输出张量。
-
原理:与输入类似,指定输出张量的名称、数据类型和形状,用于验证和返回推理结果。
-
示例 :
yamloutput [ { name: "output0" data_type: TYPE_FP32 dims: [ -1, 1000 ] } ]
-
字段解释:同输入。
6. instance_group
-
描述:定义模型实例的数量和类型。
-
原理:Triton 可以通过多个实例并行处理请求,提高吞吐量。实例可以分配到 CPU 或 GPU。
-
示例 :
yamlinstance_group [ { count: 2 kind: KIND_GPU } ]
-
字段解释 :
count
:实例数量。kind
:实例类型,KIND_GPU
表示 GPU,KIND_CPU
表示 CPU。gpus
:指定特定 GPU(如gpus: [0, 1]
)。
7. version_policy
-
描述:定义加载模型的版本策略。
-
原理 :模型仓库中可以包含多个版本(如
1/
,2/
),该策略决定 Triton 加载哪些版本。 -
示例 :
cssversion_policy: { all: {} }
-
支持的策略 :
all
:加载所有版本。latest
:加载最新版本(可指定数量,如num_versions: 2
)。specific
:加载指定版本,如versions: [1, 3]
。
8. parameters
-
描述:后端特定的参数。
-
原理 :用于传递特定于后端的配置,如 TensorFlow 的
visibility
或 ONNX 的execution_providers
。 -
示例 :
cssparameters: [ { key: "visibility" value: { string_value: "public" } } ]
9. optimization
-
描述:模型优化策略。
-
原理 :用于启用或禁用特定优化,如 TensorRT 的
execution_accelerators
。 -
示例 :
cssoptimization { execution_accelerators { name: "tensorrt" parameters { key: "max_workspace_size_bytes" value: { string_value: "1073741824" } } } }
10. scheduling
-
描述:请求调度策略。
-
原理:控制请求如何被调度,如队列策略或优先级。
-
示例 :
arduinoscheduling { queue: "default" }
11. dynamic_batching
-
描述:动态批处理设置。
-
原理:启用动态批处理,Triton 会自动将请求合并成批次,提高吞吐量。
-
示例 :
cssdynamic_batching { max_queue_delay_microseconds: 10000 }
12. label_filename
-
描述:分类模型的标签文件。
-
原理:用于将模型输出映射到标签名称。
-
示例 :
vbnetlabel_filename: "labels.txt"
13. model_transaction_policy
-
描述:模型事务策略。
-
原理 :设置为
decoupled
时,允许请求出-of-order 响应,提高并发性。 -
示例 :
yamlmodel_transaction_policy: { decoupled: true }
14. response_cache
-
描述:响应缓存设置。
-
原理:启用缓存以减少重复计算。
-
示例 :
bashresponse_cache { enable: true }
15. model_warmup
-
描述:模型预热设置。
-
原理:在服务启动时预热模型,减少首次请求的延迟。
-
示例 :
yamlmodel_warmup { batch_size: 1 frequency: 10 }
16. cc_model_filenames
-
描述:根据 CUDA 计算能力选择模型文件。
-
原理:允许为不同硬件加载不同的模型优化版本。
-
示例 :
csscc_model_filenames { key: "7.5" value: "model_T4.plan" }
配置项之间的关系和使用原则
- 输入输出张量(input/output):必须准确匹配模型的实际输入输出,否则 Triton 将无法正确加载模型。
- 批处理(max_batch_size 和 dynamic_batching):结合使用可以优化吞吐量,但需要根据模型和 workload 调整。
- 实例组(instance_group):多实例可以提高并发性,但需要考虑资源限制(如 GPU 内存)。
- 版本策略(version_policy):在多版本管理中非常重要,确保 Triton 加载正确的模型版本。
- 优化策略(optimization):根据后端和硬件选择合适的优化设置。
- 缓存和预热(response_cache 和 model_warmup):适用于高并发或延迟敏感的场景。
数据类型支持表
以下是 Triton 支持的数据类型映射表,方便配置 data_type
:
Model Config | TensorRT | TensorFlow | ONNX Runtime | PyTorch | API | NumPy |
---|---|---|---|---|---|---|
TYPE_BOOL | kBOOL | DT_BOOL | BOOL | kBool | BOOL | bool |
TYPE_UINT8 | kUINT8 | DT_UINT8 | UINT8 | kByte | UINT8 | uint8 |
TYPE_UINT16 | DT_UINT16 | UINT16 | UINT16 | uint16 | ||
TYPE_UINT32 | DT_UINT32 | UINT32 | UINT32 | uint32 | ||
TYPE_UINT64 | DT_UINT64 | UINT64 | UINT64 | uint64 | ||
TYPE_INT8 | kINT8 | DT_INT8 | INT8 | kChar | INT8 | int8 |
TYPE_INT16 | DT_INT16 | INT16 | kShort | INT16 | int16 | |
TYPE_INT32 | kINT32 | DT_INT32 | INT32 | kInt | INT32 | int32 |
TYPE_INT64 | kINT64 | DT_INT64 | INT64 | kLong | INT64 | int64 |
TYPE_FP16 | kHALF | DT_HALF | FLOAT16 | FP16 | float16 | |
TYPE_FP32 | kFLOAT | DT_FLOAT | FLOAT | kFloat | FP32 | float32 |
TYPE_FP64 | DT_DOUBLE | DOUBLE | kDouble | FP64 | float64 | |
TYPE_STRING | DT_STRING | STRING | BYTES | dtype(object) | ||
TYPE_BF16 | kBF16 | BF16 |
示例配置
以下是一个典型的 config.pbtxt
示例,用于一个 TensorFlow 模型:
yaml
name: "my_model"
platform: "tensorflow_graphdef"
max_batch_size: 4
input [
{
name: "input0"
data_type: TYPE_FP32
dims: [ -1, 224, 224, 3 ]
}
]
output [
{
name: "output0"
data_type: TYPE_FP32
dims: [ -1, 1000 ]
}
]
instance_group [
{
count: 1
kind: KIND_GPU
}
]
dynamic_batching {
max_queue_delay_microseconds: 10000
}
- 解释 :
- 模型名为 "my_model",使用 TensorFlow 后端。
- 支持最大批处理大小为 4。
- 输入张量 "input0" 是 FP32 类型,形状为 [batch_size, 224, 224, 3]。
- 输出张量 "output0" 是 FP32 类型,形状为 [batch_size, 1000]。
- 运行一个 GPU 实例。
- 启用动态批处理,最大队列延迟为 10ms。
自动生成和自定义配置
- 自动生成 :Triton 支持自动完成配置(如输入输出形状),通过
--disable-auto-complete-config
禁用。默认max_batch_size
为 4,可通过--backend-config=default-max-batch-size=<int>
设置。 - 自定义配置 :使用
--model-config-name
选择自定义config.pbtxt
,如h100.pbtxt
。