zoukankan      html  css  js  c++  java
  • Mxnet模型转换ONNX,再用tensorrt执行前向运算

    环境:ubuntu16.04
    
    tensorrt版本:5.1.5.0
    
    cuda版本:9.0
    
    GPU:1080Ti
    
    Mxnet版本:1.3.1
    
    cudnn:7.3.1
    
    1、tensorrt安装:
    
    https://github.com/NVIDIA/TensorRT
    
    tensorrt的不同版本:
    
    https://developer.nvidia.com/nvidia-tensorrt-download
    
    tensorrt python版的安装参考:
    
    https://blog.csdn.net/zong596568821xp/article/details/86077553
    
    官网参考:
    
    https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html
    
    其实看官网安装tensorrt很简单
    
     
    
    2、安装ONNX_TensorRT:
    
    这里才是重点,由于mxnet模型不能直接在tensorrt上直接进行前向运算,所以需要先将mxnet模型转换为onnx模型,再用tensorrt对onnx模型进行前向运算,即模型转换:mxnet->onnx  tensorrt使用onnx完成计算。
    
    首先要安装ONNX_TensorRT,开始踩坑(真是太坑了!!)
    
    ONNX_TensorRT:
    
    主要步骤看官方教程
    
    https://github.com/onnx/onnx-tensorrt
    
    第一个坑:cmake找不到cuda编译器。cmake3.15.1和3.11.1均无法找到cuda的编译器,最后安装的3.9.0成功找到编译器(期间改了无数遍环境变量各种折腾,就是找不到)
    
    由于ONNX_TensorRT需要依赖protobuf和tensorrt,tensorrt前面已经装好了,现在安装protobuf:
    
    https://github.com/protocolbuffers/protobuf
    
    源码安装和pypi两种都做了,原因是两者安装完以后cmake编译时均找不到protobuf,后来更改了third_party下的CMake.lists中233行
    
    COMMAND ${ONNX_PROTOC_EXECUTABLE} ARGS ${PROTOC_ARGS}改为
    
    COMMAND ${Protobuf_PROTOC_EXECUTABLE} ARGS ${PROTOC_ARGS}
    
    Protobuf_PROTOC_EXECUTABLE为定义好的环境变量名称来找到/usr/local/bin/protoc(这一步弄了两天终于编译过了)
    
    第二个大坑:
    
    mxnet模型转换为onnx模型和tensorrt读取onnx模型并创建engine:
    
    mxnet在定义网络时(以下均为symbol情形)尽量将所有函数参数确定,不要用默认参数(及时它们相同),否则容易报错。
    
    期间遇到的问题:
    
    1、BatchNorm下attribute含有spatial,而onnx貌似不支持这一属性(本人也不太清楚spatial具体作用),在转换时注掉spatial=0
    
    2、tensorrt读取onnx模型时发现不支持3d卷积操作,tensorrt支持的onnx operator:
    
    https://github.com/onnx/onnx-tensorrt/blob/master/operators.md
    
    3、源码安装的mxnet(1.3)版本转换onnx时deconv不支持,到
    
    https://github.com/apache/incubator-mxnet/tree/fd34dc5f847192dfd522555afdf13be1eb67b72b/python/mxnet/contrib/onnx
    
    下替换文件。
    
    4、tensorrt调用onnx model时maxpool报错,暂不支持ospet10版本的maxpool。有些操作可以通过转换版本实现,转换版本方法:
    
    https://github.com/onnx/onnx/blob/master/onnx/version_converter.py
    
    最后是onnx安装:
    
    pypi安装即可:
    
    pip3 install onnx
  • 相关阅读:
    妙用Telnet快速收发电子邮件(转载)
    windows server 2003如何安装IIS,配置IIS,让iis支持aspx(收集)
    T7400等DELL工作站及服务器的Windows server 2003系统安装——解决“找不到安装在计算机上的硬盘驱动器 安装无法继续,要退出请按F3”问题
    PostgresSQL连接认证设置(收集)
    安装PostgreSQL :Problem running postinstall (收集)
    UltiDev Cassini Web Server介绍
    配置Lumisoft Mail Server给外网邮箱发消息
    mysql命令行常用命令(收集)
    SQL复制数据表及表结构
    解决lumisoft mail server使用中的错误“550 5.7.1 Unable to relay for xxx”
  • 原文地址:https://www.cnblogs.com/cloudrivers/p/12129681.html
Copyright © 2011-2022 走看看