docker容器里访问gpu;onnx转tenorrt trt、engin、plan格式;triton加载推理tensorrt模型

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
docker容器里访问gpu;onnx转tenorrt trt、engin、plan格式;triton加载推理tensorrt模型_第1张图片

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模型
docker容器里访问gpu;onnx转tenorrt trt、engin、plan格式;triton加载推理tensorrt模型_第2张图片
在这里插入图片描述

3、triton加载推理tensorrt模型

***为了triton能正常推理tensorrt模型,所以上面的tensorrt容器版本要与推理的triton版本一致,这样通过tensorrt容器里的trtexec 转换得到的模型才能正常的的在triton容器上推理:

在这里插入图片描述

1)文件格式与config.pbtxt

docker容器里访问gpu;onnx转tenorrt trt、engin、plan格式;triton加载推理tensorrt模型_第3张图片
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

docker容器里访问gpu;onnx转tenorrt trt、engin、plan格式;triton加载推理tensorrt模型_第4张图片
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)

docker容器里访问gpu;onnx转tenorrt trt、engin、plan格式;triton加载推理tensorrt模型_第5张图片

你可能感兴趣的:(深度学习,docker,容器,运维)