-
Notifications
You must be signed in to change notification settings - Fork 687
triton 推理服务
栾鹏 edited this page Jun 27, 2022
·
1 revision
tensorrt:
nvcr.io/nvidia/tensorrtserver:19.05-py3
nvcr.io/nvidia/tritonserver:21.09-py3
注意:名称必须为model.onnx或者model.plan
<model-repository-path>/
<model-name>/
config.pbtxt
model-version/
model-file:model.plan/model.onnx
注意:不确定填的对不对,可以先不填,系统会自动识别
platform: "onnxruntime_onnx" # tensorrt_plan/pytorch_libtorch/onnxruntime_onnx/tensorflow_savedmodel
name: "resnet50"
max_batch_size: 0 # 启动动态批处理的话,按情况设定
input [
{
name: "your_input_name"
data_type: TYPE_FP32
format: FORMAT_NCHW
dims: [ 3, 224, 224 ]
reshape { shape: [ 1, 3, 224, 224 ] }
}
]
output [
{
name: "your_output_name"
data_type: TYPE_FP32
dims: [ 1000 ]
reshape { shape: [ 1, 1000 ] }
}
]
... 其他专门的优化参数
tritonserver --model-repository=<model-repository-path> --strict-model-config=false
获取自动生成配置
curl localhost:8000/v2/models/<模型名称>/config
建议使用tirton提供的客户端包。
pip3 install tritonclient[all]
pip3 install attrdict
tfserving、torchserver、onnxruntime、tensorrt
/v1/model/$model_name
/v1/model/$model_name/version/$version_name
/v2/health/ready 健康检查
pytorch模型转onnx模型
model.eval() # 设置模型为推理模式
dummy_input = torch.randn(1, 3, 224, 224) # 输入样本
export_onnx_file = "resnet50.onnx" # 目的ONNX文件名
torch.onnx.export(
model,dummy_input,export_onnx_file,
opset_version=13, # 转为onnx的版本
do_constant_folding=True, # 是否执行常量折叠优化
input_names=["input_name"], # 输入名
output_names=["output_name"], # 输出名
# dynamic_axes={
# "input":{0:"batch_size"}, # 批处理变量
# "output":{0:"batch_size"}
# },
dynamic_axes={'input_name': [2, 3], 'output_name': [2, 3]} # 动态size的输入输出的维度
)
tf模型转onnx模型
# pip install tensorflow-onnx tf2onnx
python -m tf2onnx.convert --saved-model ./saved_model --output ./live_deepfm_low.onnx --opset 13
在线查看模型结构:https://netron.app/
按照模型结构填写配置即可,主要是input和output信息
pytorch 模型加速,需要选择方法4保存TORCHSCRIPT模型
# # 方法1、保存完成的模型
# torch.save(model,'mnist.pt')
#
# # 方法2:保存网络参数
# PATH = './cifar_net.pth'
# torch.save(model.state_dict(), PATH)
#
# # 方法3:导出网络到ONNX
# dummy_input = torch.randn(1,1,28, 28).to(device)
# torch.onnx.export(model, dummy_input, "torch.onnx")
# 方法4:保存TORCHSCRIPT
# dummy_input = torch.randn(1,1,28, 28).to(device)
# traced_cell = torch.jit.trace(model, dummy_input)
# traced_cell.save("torchscript.pt")
torch script保存的模型,目前不提供输入和输出的端口的命名,因此在配置文件中,输入和输出端口的名字必须按照如下命名: "INPUT__0", "INPUT__1" and "OUTPUT__0", "OUTPUT__1"