1、docker容器里访问gpu,docker安装tenorrt
参考: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 可以访问
容器里torch也可以访问gpu 
2、onnx转tenorrt trt、engin、plan格式
***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模型
3、triton加载推理tensorrt模型
***为了triton能正常推理tensorrt所以上面的模型tensorrt容器版本要推理triton版本一致,所以通过tensorrt容器里的trtexec 转换模型可以正常triton容器推理:
1)文件格式及config.pbtxt
config.pbtxt **因为tensorrt不支持int64.上述转换已成为int32
name: "clip_trt" # 模型名,也是目录名 platform: "tensorrt_plan" # 这次使用了模型对应的平台torch,在官方文档中可以找到不同格式对应的平台 max_batch_size : 0 # 最大的一次送入模型bsz,防止oom input [ { name: "input" # 输入名字,对于torch代码中的名称不需要对应,但必须是<name>__<index>注意两条下划线的形式,写错报错 data_type: TYPE_INT32 # 类型,torch.long对应的就是int不同语言的64tensor类型与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 3)http访问 trt_infer.py
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)