• 使用TensorRT 和 Triton 在Jetson NX上的模型部署


    Jetson因为是基于arm的与传统基于x86的主机或服务器的模型部署略有差别,但基本类似,主要分为三步

    • 模型转换为onnx
    • 生成基于TensorRT的推理引擎
    • 使用Triton完成部署

    1、模型转换为onnx

    首先可以将pytorch或其他框架训练好的模型转换为onnx格式用于后续的部署。pytorch中有onnx类可以将模型直接导出为onnx格式,以yolov6为例,用法如下:

    1. torch.onnx.export(model, img, f, verbose=False, opset_version=13,
    2. training=torch.onnx.TrainingMode.EVAL,
    3. do_constant_folding=True,
    4. input_names=['images'],
    5. output_names=['num_dets', 'det_boxes', 'det_scores', 'det_classes']
    6. if args.end2end else ['outputs'],
    7. dynamic_axes=dynamic_axes)

    使用以下命令可以将模型导出为onnx格式:

    python export_onnx.py --weights ./outputs/yolov6.pth

    更多配置,可以参考yolov6导出中的相关参数

    完成以上后,可以得到onnx格式的模型文件。

    2、生成基于TensorRT的推理引擎

    在Jetson上安装arm版的TensorRT后可以使用trtexec将onnx模型文件生成推理引擎,具体安装方法可以参考 ,安装完成后在 /usr/src/ 下会有一个/tensorrt文件夹, 使用以下命令,可以生成推理引擎:

    /usr/src/tensorrt/bin/trtexec --onnx=yolov6.onnx --fp16 --workspace=4096 --saveEngine=yolov6-fp16.engine

    执行结束后会保存一个推理引擎,并且得到类似如下的性能结果报告:

    1. [11/12/2022-17:04:55] [I] === Performance summary ===
    2. [11/12/2022-17:04:55] [I] Throughput: 47.1886 qps
    3. [11/12/2022-17:04:55] [I] Latency: min = 21.2761 ms, max = 21.8617 ms, mean = 21.4982 ms, median = 21.4636 ms, percentile(99%) = 21.7831 ms
    4. [11/12/2022-17:04:55] [I] Enqueue Time: min = 1.04932 ms, max = 2.34424 ms, mean = 1.34331 ms, median = 1.27527 ms, percentile(99%) = 2.00671 ms
    5. [11/12/2022-17:04:55] [I] H2D Latency: min = 0.408203 ms, max = 0.515991 ms, mean = 0.436084 ms, median = 0.427795 ms, percentile(99%) = 0.515137 ms
    6. [11/12/2022-17:04:55] [I] GPU Compute Time: min = 20.8496 ms, max = 21.4231 ms, mean = 21.045 ms, median = 21.0016 ms, percentile(99%) = 21.3416 ms
    7. [11/12/2022-17:04:55] [I] D2H Latency: min = 0.0112305 ms, max = 0.019043 ms, mean = 0.0170788 ms, median = 0.0170898 ms, percentile(99%) = 0.0185547 ms
    8. [11/12/2022-17:04:55] [I] Total Host Walltime: 3.05159 s
    9. [11/12/2022-17:04:55] [I] Total GPU Compute Time: 3.03048 s
    10. [11/12/2022-17:04:55] [I] Explanations of the performance metrics are printed in the verbose logs.
    11. [11/12/2022-17:04:55] [I]
    12. &&&& PASSED TensorRT.trtexec [TensorRT v8401] # /usr/src/tensorrt/bin/trtexec --onnx=yolov6.onnxh --fp16 --workspace=4096 --saveEngine=yolov6-fp16.engine

    3、使用Triton完成部署

    在上一步中使用TensorRT得到推理引擎后,可以使用Triton进行进一步的部署。 Jetson版的Triton Server安装可以参考 Triton Inference Server Support for Jetson and JetPack

    安装完成后,配置模型即可完成部署,更多信息可参考 Triton Model Configuration Documentation,在本次部署中设置简单配置过程如下:

    1. # Create folder structure
    2. $ mkdir -p triton-deploy/models/pe/1/
    3. $ touch triton-deploy/models/pe/config.pbtxt
    4. # Place model
    5. $ mv pe-fp16.engine triton-deploy/models/pe/1/model.plan

    执行以上命令后,配置文件的目录格式如下:

    1. $ tree triton-deploy/
    2. triton-deploy/
    3. └── models
    4. └── pe
    5. ├── 1
    6. │ └── model.plan
    7. └── config.pbtxt
    8. 3 directories, 2 files

    可以构建好模型文件的目录和配置文件,目录格式如上。并将上一步中得到的推理引擎复制到相应目录下作为model.plan, 同时需要配置config.pbtxt, 一个简单的示例配置文件config.pbtxt可以设置如下:

    1. name: "pe"
    2. platform: "tensorrt_plan"
    3. max_batch_size: 1
    4. dynamic_batching { }

    完成以上配置后,即可使用tritonserver进行部署:

    ./tritonserver2.27.0-jetpack5.0.2/bin/tritonserver --model-repository=triton-deploy/models --backend-directory=/home/nvidia/Downloads/tritonserver2.27.0-jetpack5.0.2/backends --backend-config=tensorrt,version=8

    部署成功后结果如如下图所示,可以使用pytritonclient访问8001端口进行推理推理调用

    1. +-------+---------+--------+
    2. | Model | Version | Status |
    3. +-------+---------+--------+
    4. | pe | 1 | READY |
    5. +-------+---------+--------+
    6. W1121 10:34:52.037176 47570 metrics.cc:354] No polling metrics (CPU, GPU, Cache) are enabled. Will not poll for them.
    7. I1121 10:34:52.037548 47570 tritonserver.cc:2264]
    8. +----------------------------------+------------------------------------------------------------------+
    9. | Option | Value |
    10. +----------------------------------+------------------------------------------------------------------+
    11. | server_id | triton |
    12. | server_version | 2.27.0 |
    13. | server_extensions | classification sequence model_repository model_repository(unload |
    14. | | _dependents) schedule_policy model_configuration system_shared_m |
    15. | | emory cuda_shared_memory binary_tensor_data statistics trace log |
    16. | | ging |
    17. | model_repository_path[0] | triton-deploy/models |
    18. | model_control_mode | MODE_NONE |
    19. | strict_model_config | 0 |
    20. | rate_limit | OFF |
    21. | pinned_memory_pool_byte_size | 268435456 |
    22. | cuda_memory_pool_byte_size{0} | 67108864 |
    23. | response_cache_byte_size | 0 |
    24. | min_supported_compute_capability | 5.3 |
    25. | strict_readiness | 1 |
    26. | exit_timeout | 30 |
    27. +----------------------------------+------------------------------------------------------------------+
    28. I1121 10:34:52.044596 47570 grpc_server.cc:4819] Started GRPCInferenceService at 0.0.0.0:8001
    29. I1121 10:34:52.045703 47570 http_server.cc:3474] Started HTTPService at 0.0.0.0:8000
    30. I1121 10:34:52.088336 47570 http_server.cc:181] Started Metrics Service at 0.0.0.0:8002

    以上,完成了模型在Jetson NX上的部署工作。

  • 相关阅读:
    中微爱芯74逻辑兼容替代TI/ON/NXP工规品质型号全
    手撸俄罗斯方块(五)——游戏主题
    ArGIS Engine专题(12)之GP模型集成Python脚本实现影像切片服务自动发布
    cy5-紫杉醇,cy5- taxol, cy5标记紫杉醇
    【 OpenGauss源码学习 —— 列存储(CStore)(一)】
    (附源码)python云顶之弈数据分析系统 毕业设计451545
    【蓝桥杯选拔赛真题25】python输出指定数据 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
    原论文一比一复现 | 更换 RT-DETR 主干网络为 【ResNet-50】【ResNet-101】【ResNet-152】| 对比实验必备
    IO 能够保证在确定的时间回来吗?
    Java8实战-总结22
  • 原文地址:https://blog.csdn.net/o3279/article/details/127981993