关键要点
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
文件通常位于模型仓库的模型目录下,例如:
model_repository/
└── my_model
├── 1
│ └── model.savedmodel
└── config.pbtxt
- 文件格式:基于 Protocol Buffers 的文本格式,具体定义在 ModelConfig protobuf。
- 作用:通过解析
config.pbtxt
,Triton 了解模型的结构和运行需求,从而正确加载模型并处理推理请求。
主要配置项及其详细解释
以下是 config.pbtxt
中最重要的配置项及其原理:
1. name
- 描述:模型的名称。
- 原理:必须与模型仓库中的目录名一致,用于标识模型。
- 示例:
name: "my_model"
- 注意:如果未指定,Triton 将默认使用模型目录名。
2. platform
- 描述:指定模型的执行后端(backend)。
- 原理:Triton 支持多种后端,如 TensorFlow、ONNX Runtime、TensorRT 等。该字段告诉 Triton 如何加载和执行模型。
- 示例:
platform: "tensorflow_graphdef"
- 支持的平台:
tensorflow_graphdef
:TensorFlow SavedModel。onnxruntime_onnx
:ONNX 模型。tensorrt_plan
:TensorRT 引擎计划。python
:Python 自定义后端。- 其他:如
openvino
,pytorch_libtorch
等。
3. max_batch_size
- 描述:模型支持的最大批处理大小。
- 原理:定义了模型可以同时处理的请求数量。设置为 0 表示不支持批处理;设置为正整数表示支持批处理。
- 示例:
max_batch_size: 4
- 注意:批处理可以提高吞吐量,但可能增加延迟。需要根据模型和 workload 调整。
4. input
- 描述:定义模型的输入张量。
- 原理:每个输入张量必须指定名称、数据类型和形状。Triton 根据这些信息验证和处理推理请求。
- 示例:
input [ { name: "input0" data_type: TYPE_FP32 dims: [ -1, 224, 224, 3 ] } ]
- 字段解释:
name
:输入张量的名称。data_type
:数据类型,如TYPE_FP32
(浮点32位)、TYPE_INT32
(整数32位)等。dims
:张量的形状,-1
表示可变维度(通常用于批处理大小)。
5. output
- 描述:定义模型的输出张量。
- 原理:与输入类似,指定输出张量的名称、数据类型和形状,用于验证和返回推理结果。
- 示例:
output [ { name: "output0" data_type: TYPE_FP32 dims: [ -1, 1000 ] } ]
- 字段解释:同输入。
6. instance_group
- 描述:定义模型实例的数量和类型。
- 原理:Triton 可以通过多个实例并行处理请求,提高吞吐量。实例可以分配到 CPU 或 GPU。
- 示例:
instance_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 加载哪些版本。 - 示例:
version_policy: { all: {} }
- 支持的策略:
all
:加载所有版本。latest
:加载最新版本(可指定数量,如num_versions: 2
)。specific
:加载指定版本,如versions: [1, 3]
。
8. parameters
- 描述:后端特定的参数。
- 原理:用于传递特定于后端的配置,如 TensorFlow 的
visibility
或 ONNX 的execution_providers
。 - 示例:
parameters: [ { key: "visibility" value: { string_value: "public" } } ]
9. optimization
- 描述:模型优化策略。
- 原理:用于启用或禁用特定优化,如 TensorRT 的
execution_accelerators
。 - 示例:
optimization { execution_accelerators { name: "tensorrt" parameters { key: "max_workspace_size_bytes" value: { string_value: "1073741824" } } } }
10. scheduling
- 描述:请求调度策略。
- 原理:控制请求如何被调度,如队列策略或优先级。
- 示例:
scheduling { queue: "default" }
11. dynamic_batching
- 描述:动态批处理设置。
- 原理:启用动态批处理,Triton 会自动将请求合并成批次,提高吞吐量。
- 示例:
dynamic_batching { max_queue_delay_microseconds: 10000 }
12. label_filename
- 描述:分类模型的标签文件。
- 原理:用于将模型输出映射到标签名称。
- 示例:
label_filename: "labels.txt"
13. model_transaction_policy
- 描述:模型事务策略。
- 原理:设置为
decoupled
时,允许请求出-of-order 响应,提高并发性。 - 示例:
model_transaction_policy: { decoupled: true }
14. response_cache
- 描述:响应缓存设置。
- 原理:启用缓存以减少重复计算。
- 示例:
response_cache { enable: true }
15. model_warmup
- 描述:模型预热设置。
- 原理:在服务启动时预热模型,减少首次请求的延迟。
- 示例:
model_warmup { batch_size: 1 frequency: 10 }
16. cc_model_filenames
- 描述:根据 CUDA 计算能力选择模型文件。
- 原理:允许为不同硬件加载不同的模型优化版本。
- 示例:
cc_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 模型:
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
。