文章目录
简介
Triton支持多种类型的模型,包括TensorFlow, PyTorch, ONNX, TensorRT, Python等,在实际部署时我们可能会用到其中的一种或多种模型。而且任何深度学习模型部署框架都需要解决三方面的问题。
- 管理多种类型的模型。
- 控制模型的版本,加载和卸载。
- 配置模型的输入和输出
上面的问题Triton都已提供了相应的解决方案。具体来说,Triton是通过配置文件来管理模型的版本、输入输出、支撑后端等功能。因此在部署前需要做好的两件事是准备好模型文件model.xx
和写好配置文件config.pbtxt
。
模型仓库配置
在上一节中,使用docker参数-v ${PWD}/model_repository:/models
映射进来一个文件夹,这个文件夹作为模型仓库,用来存放我们所有的模型和配置。
整个模型仓库的结构应该如下
models
├── test1(模型名称)
│ ├── 1(版本号)
│ │ └── model.py(模型文件)
│ └── config.pbtxt(配置文件)
├── test2(模型名称)
│ ├── 1(版本号)
│ │ └── model.pt(模型文件)
│ ├── 2(版本号)
│ │ └── model.pt(模型文件)
│ └── config.pbtxt(配置文件)
其中模型名称,版本号(不支持小数点.来划分大小版本)和模型后缀名model.xx
根据实际情况进行修改。从目录就可以看出,Triton通过模型名称来控制选择的模型,并且通过版本号控制模型版本,对于输入输出和其他功能,都放在了配置文件中。接下来重点介绍,配置文件config.pbtxt
的书写。
最小配置文件config.pbtxt
配置文件config.pbtxt
中需要指明模型需要的信息。下面用torch后端做个演示样例。更多的信息见官方模型配置指南。
name: "test2"
backend: "pytorch"
max_batch_size: 16
input [
{
name: "INPUT_0"
data_type: TYPE_UINT8
dims: [ -1 ]
}
]
output [
{
name: "OUTPUT_0"
data_type: TYPE_FP32
dims: [ 3, 256, 256 ]
}
]
一个配置文件最少需要设置backend/platform
、max_batch_size
、input
和 output
属性。
name
: 可选参数。如果指明了模型名称,则模型名称必须和文件夹名字保持一致,不一样的话会报错。max_batch_size
: 可选参数。模型支持最大的batch尺寸,如果不支持batch,应该设置为0。缺省为0(这里虽然说可以不写,但是建议写上)。backend
:和platform
填其中一个。支持后端的有tensorrt、pytorch、onnxruntime、tensorflow、python、openvino、dali、fil等后端。同时,也可以自定义后端。platform
:和backend
填其中一个。这个参数的作用是检查模型的类别,例如tensorflow有多种保存格式,GraphDef格式和SavedModel格式,对应的platform为tensorflow_graphdef和tensorflow_savedmodel。input
:必填。输入队列,在每个输入中需要指明输入数据的名称name,输入类型data_type
和输入尺寸dims
。output
:必填。输出队列,和输入队列一样。
input/output参数详解
name
这个参数是对传输的变量进行命名,主要作用是和客户端通信,方便操作。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 |