参考:https://www.jianshu.com/p/8f38a63b86cc
安装:
apt install nvidia-container-runtime
验证运行tensorrt容器(暴露 --gpus ):
docker run -it --gpus all -v /data/loong/triton_test/model_repository/clip_onnx/1:/share nvcr.io/nvidia/tensorrt:20.09-py3 bash
直接进入容器里:
nvidia-smi 可以访问
***1)转换还是在上面的tensorrt容器里,/usr/src/tensorrt/bin目录下,
2)因为输入是动态可变维度,需要指定minShapes(最小),optShapes(默认一个,可以随意在最大最小范围内),maxShapes(最大)
3)engin与plan等同,可以直接更改文件后缀格式就行
./trtexec --onnx=/share/model_orgin.onnx --saveEngine=/share/model_orgin.engin --minShapes=input:1x1 --optShapes=input:1x8 --maxShapes=input:1x512
注:model_orgin.onnx 这里的onnx文件是个bert模型
***为了triton能正常推理tensorrt模型,所以上面的tensorrt容器版本要与推理的triton版本一致,这样通过tensorrt容器里的trtexec 转换得到的模型才能正常的的在triton容器上推理:
config.pbtxt
**因为tensorrt不支持int64,上面转换的时候已经变成int32
name: "clip_trt" # 模型名,也是目录名
platform: "tensorrt_plan" # 模型对应的平台,本次使用的是torch,不同格式的对应的平台可以在官方文档找到
max_batch_size : 0 # 一次送入模型的最大bsz,防止oom
input [
{
name: "input" # 输入名字,对于torch来说名字于代码的名字不需要对应,但必须是__的形式,注意是2个下划线,写错就报错
data_type: TYPE_INT32 # 类型,torch.long对应的就是int64,不同语言的tensor类型与triton类型的对应关系可以在官方文档找到
dims: [ 1,-1] # -1 代表是可变维度,虽然输入是二维的,但是默认第一个是bsz,所以只需要写后面的维度就行(无法理解的操作,如果是[-1,-1]调用模型就报错)
}
]
output [
{
name: "output" # 命名规范同输入
data_type: TYPE_FP32
dims: [1,512]
}
]
2)运行triton
docker run --rm --gpus all -p8000:8000 -p8001:8001 -p8002:8002 -v/data/loong/triton_test/model_repository:/models nvcr.io/nvidia/tritonserver:20.09-py3 tritonserver --model-repository=/models
import requests
import numpy as np
if __name__ == "__main__":
request_data = {
"inputs": [{
"name": "input",
"shape": [1,10],
"datatype": "INT32",
"data": [[101,23, 235,25,678,562, 671, 1372, 4344, 102]]
}],
"outputs": [{"name": "output"}]
}
res = requests.post(url="http://localhost:8000/v2/models/clip_trt/versions/1/infer",json=request_data).json()
print(res)