• 用于ONNX的TensorRT后端


    用于ONNX的TensorRT后端

    解析ONNX模型以使用TensorRT执行。

    另请参阅TensorRT文档

    有关最近更改的列表,请参见changelog

    支持的TensorRT版本

    Master分支上的开发适用于具有完整维度和动态架构shape支持的TensorRT 7.2.1的最新版本。

    对于TensorRT的早期版本,请参考其各自的分支。

    完整尺寸+动态架构

    在具有动态架构支持的全维度模式下,构建INetwork对象,需要调用以下API:

    C ++

    const auto explicitBatch = 1U << static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);

    builder->createNetworkV2(explicitBatch)

    Python

    import tensorrt

    explicit_batch = 1 << (int)(tensorrt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)

    builder.create_network(explicit_batch)

    有关这些API用法的示例,请参见:

    支持的算子

    当前支持的ONNX算子,可在算子支持列表中找到。

    安装

    依存关系

    Dependencies

    编译

    对于在docker中进行构建,建议按照main(TensorRT存储库)[https://github.com/NVIDIA/TensorRT#setting-up-the-build-environment]中的说明使用和设置Docker容器,来构建onnx -tensorrt库。

    clone存储库后,可以通过运行以下命令,来构建解析器库和可执行文件:

    cd onnx-tensorrt

    mkdir build && cd build

    cmake .. -DTENSORRT_ROOT=<path_to_trt> && make -j

    // Ensure that you update your LD_LIBRARY_PATH to pick up the location of the newly built library:

    export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH

    可执行用法

    可以使用onnx2trt可执行文件,将ONNX模型转换为序列化的TensorRT引擎:

    onnx2trt my_model.onnx -o my_engine.trt

    ONNX模型也可以转换为人们可读的文本:

    onnx2trt my_model.onnx -t my_model.onnx.txt

    ONNX模型也可以通过ONNX的优化库(由dsandler添加)进行优化。要优化ONNX模型并输出新的模型,可使用它-m来指定输出模型名称,用-O指定以分号分隔的优化过程列表,进行应用:

    onnx2trt my_model.onnx -O "pass_1;pass_2;pass_3" -m my_model_optimized.onnx

    通过运行以下命令,查看更多所有可用的优化遍历:

    onnx2trt -p

    通过运行以下命令,查看更多用法信息:

    onnx2trt -h

    Python模块

    ONNX-TensorRT解析器的Python,绑定打包在随附的.whl文件中。用来安装

    python3 -m pip install <tensorrt_install_dir>/python/tensorrt-7.x.x.x-cp<python_ver>-none-linux_x86_64.whl

    TensorRT 7.2.1支持ONNX版本1.6.0。通过以下方式安装:

    python3 -m pip install onnx==1.6.0

    可以通过运行以下命令,来安装ONNX-TensorRT后端:

    python3 setup.py install

    ONNX-TensorRT Python后端使用

    可以在Python中如下使用ONNX的TensorRT后端:

    import onnx

    import onnx_tensorrt.backend as backend

    import numpy as np

     

    model = onnx.load("/path/to/model.onnx")

    engine = backend.prepare(model, device='CUDA:1')

    input_data = np.random.random(size=(32, 3, 224, 224)).astype(np.float32)

    output_data = engine.run(input_data)[0]

    print(output_data)

    print(output_data.shape)

    C ++库用法

    模型解析器库libnvonnxparser.so,在头文件中声明了其C ++ API:

    NvOnnxParser.h

    测试

    安装后(或在Docker容器内),可以按以下方式运行ONNX后端测试:

    仅实模型测试:

    python onnx_backend_test.py OnnxBackendRealModelTest

    所有测试:

    python onnx_backend_test.py

    可以使用-v标志,使输出更加详细。

    预训练模型

    在ONNX格式预先训练模式可以在找到ONNX Model Zoo

    https://github.com/onnx/onnx-tensorrt

    人工智能芯片与自动驾驶
  • 相关阅读:
    第19篇 2016年计划
    第18篇 我的中国梦
    Linux中文件实时同步
    Ansible Playbook
    Ansible简介及常用模块
    HTTP协议简单认识
    zabbix 分布式监控Proxy
    Zabbix中Agent自动注册
    Groovy基础语法
    Python文件操作
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14166229.html
Copyright © 2020-2023  润新知