基于nvidiatriton的模型工程化实践

基于nvidiatriton的模型⼯程化实践移动视频会议
什么是triton inference server?
它的前⾝是nvidia的tensorRT,triton在具备tensorRT的基础上,增加了主流的TF,pytorch,onnx等模型的推理部署⽀持。是⼀款⾮常好的推理模型部署服务。
模型部署及优化实践
pytorch模型部署
pytorch模型需要提供jit之后的模型。
件夹层次为:
model_name/
1/model.pt
config.pbtxt
只需要将上述⽂件夹拷贝到triton server⾥的models⽂件夹即可⽣效(可以配置triton监听⽂件夹变化,如果变化⾃动重启)。config.pbtxt是这次讲解的重点,也是部署时最需要学习的地⽅。
以下是具体实例:
#this MUST be the same name with the outside folder
name: "ibuddha_chitchat"
# pytorch
platform: "pytorch_libtorch"
# you should limit this ,or else the graphic card
max_batch_size: 64
input [
{
#pytorch output this 0,1,2 silly name by default
name: "INPUT__0"
#int64 or int32, must be the same as the model define
data_type: TYPE_INT64
#dynamic sequence len, means you can input text len from 1 to 510 typically, or else you should put a fix value here    dims: [-1]
},
{
name: "INPUT__1"
data_type: TYPE_INT64
dims: [-1]
},
{
name: "INPUT__2"
data_type: TYPE_INT64
dims: [-1]
}
]
output [
{
#pytorch silly default name
书名号的用法name: "OUTPUT__0"
data_type: TYPE_FP32
dims: [13088]
}
]
# output only one which has bigger version
version_policy: { latest {num_versions: 1}}
#version_policy: { all {}}
# enable dynamic will improve your performance greatly
dynamic_batching {
}
# enable this will make your inference faster
parameters: {
key: "INFERENCE_MODE"
value: {
string_value:"true"
}
}
# disable this. It is slower than default in my test
#parameters: {
#key: "ENABLE_NVFUSER"
#    value: {
#    string_value:"true"
#    }
#}
#pytorch model only run in graphic card 0 by default
instance_group [
{
count: 1
kind: KIND_GPU
gpus: [ 0 ]
}
]
1代表版本号(建议从1...N,0⽆效)
model.pt为约定名字
name为模型名字,要求与外层的⽂件夹名字⼀致,因此外⾯的⽂件夹必须改为ibuddha_chitchat。
ibuddha_chitchat/
1/model.pt
config.pbtxt
pytorch模型的platform为:pytorch_libtorch
徐四民
这个实例采⽤的是动态batching,也是官⽅推荐的优化⽅式。
dynamic_batching {}
使能动态batch会⾮常有效的提⾼推理的系统效率。
max_batch_size 需要设置合适,太⼤会导致显卡显存爆(triton显存爆可能导致triton挂且⽆法⾃动重启)(注意:dynamic_batching⽣效时,这个选项才有效)
input代表模型的输⼊
pytorch的bert,典型的名字为INPUT__0..INPUT__2
数据类型到底是TYPE_INT64还是TYPE_INT32,需要根据模型训练使⽤的数据类型定,同样是bert,有的是INT64有的是INT32,但3个INPUT都会是相同类型(⽬前没有到具体规律)
dims: [-1]
代表动态sequence,表⽰输⼊的⽂本长度不需要是⼀个固定值。
注意,由于这⾥是动态batching,所以第⼀个维度的-1可以省略不写。
(如果不是动态batching,则dims: [N, -1])
output和input的格式⼀样
这⾥实例由于是GPT模型,会返回整句话中每个位置的13088个vocab的概率(浮点型)(后处理会选择概率最⾼的那个token作为输出(实际会复杂些))。
version_policy⽤来控制版本
实例的写法是只会有⼀个版本,triton⾃动选择数字最⼤的那个。
如果需要所有版本都输出,可以写如下:
version_policy: { all {}}
instance_group
count为1代表只有1个实例
KIND_GPU顾名思义是运⾏在GPU(也可以配置运⾏在CPU)
gpus: [0] 代表只运⾏在显卡0上
注意:pytorch模型⽬前有⼀个缺陷,只能固定在某个显卡上,默认都是显卡0(有可以不限制显卡0,可运⾏在多个显卡的,还请告知⼀下作者)
onnx模型部署
整个过程和pytorch⾮常类似,这⾥只说差异点:
模型统⼀约定名字为
config.pbtxt的编写中:
platform: onnxruntime_onnx
由于pytorch转onnx,可以配置input_names,所以建议给团队约定的名字,便于维护:input_ids, attention_mask, token_type_ids
实例的output,由于是返回句⼦的平均向量,因此直接是⼀个768长度的浮点数数组。onnx模型也可以动态转为tensorRT,是不是能更快,需要各位⾃⼰实测。
name: "sps_sbert_onnx"
#onnx model
platform: "onnxruntime_onnx"
max_batch_size: 32
#recommend use the same name in your team, input_ids, attention_mask, token_type_ids
input [
{
name: "input_ids"
data_type: TYPE_INT64
dims: [-1]
},
{
name: "attention_mask"
data_type: TYPE_INT64
dims: [-1]
},
函数信号发生器设计{
name: "token_type_ids"
data_type: TYPE_INT64
dims: [-1]
}
]
output [
{
本钢女老板张晓芳
#recommend to use meaningful name
name: "vector"
data_type: TYPE_FP32
dims: [768]
}
]
#version_policy: { all {}}
version_policy: { latest {num_versions: 1}}
dynamic_batching { }
#you should test whether this can be faster
雅安市委书记徐孟加#change onnx
optimization { execution_accelerators {
gpu_execution_accelerator : [ { name : "tensorrt" } ]
}}
tensorflow模型部署
tensorflow模型推荐采⽤saved_model格式
将saved_model⽂件夹拷贝到版本⽂件夹中,命名为:model.savedmodel
1/model.savedmodel

本文发布于:2024-09-20 17:27:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/453264.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   件夹   部署   需要   名字   显卡   显存   约定
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议