Skip to main content
  1. Posts/

【施工中】torch2trt 学习笔记

Table of Contents
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

前言
#

偶然发现了 torch2trt 的模型转换方案,思路是直接将pytorch op映射到TensorRT的python api. 在pytorch进行每个op forward的时候,tensorrt也相应往network上添加op. 这里会先涉及torch2trt的使用,后面会补充这个转换工具的代码学习

使用torch2trt
#

torch2trt pytorch可以直接安装,但是torchvision根据 pytorch-for-jetson-version-1-6-0-now-available 中的说法,需要编译安装

1git clone  https://github.com/pytorch/vision 

然后切换到tag v0.7.0 执行

1sudo python3 setup.py  install 

可以正常安装

然后报错: ModuleNotFoundError: No module named ’termcolor'

尝试 sudo apt install python3-termcolor 后解决

接下来尝试trt samples中的 /python/network_api_pytorch_mnist 发现安装pycuda报错找不到cuda.h的头文件 参考 pycuda installation failure on jetson nano 执行了如下命令后成功:

1export LIBRARY_PATH=/usr/local/cuda/targets/aarch64-linux/lib/:$LIBRARY_PATH
2export CPATH=/usr/local/cuda/include:$CPATH 

然后尝试使用TensorRT python api对一个engine file 做inference的时候,报错: pycuda._driver.LogicError: explicit_context_dependent failed: invalid device context - no currently active context? 在 import pycuda.autoinit 后解决

然后在尝试修改inference的input时报错: pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument 参考pycuda._driver.LogicError: cuMemcpyHtoDAsync failed: invalid argument 发现原因是numpy的类型不太对,修改为:

1 inputs[0].host = inp.astype(np.float32)

就可以了

接下来是在plan文件前面加签名 一开始用了numpy.tobytes() 。。发现每个字符占了4byte..与c++的caffe-tensorrt行为不一致 后来尝试 c = bytes(header,‘utf-8’) + model_data 问题似乎解决

torch2trt源码分析
#

Related

Jetson Nano踩坑记录

·8 mins
写在前面 # 主要是需要在jetson nano做模型转换,来记录下踩的坑 目前有两条路径,一条是我们现有的转换路径,也就是pytorch->onnx(->caffe)->trt的路径 在这条路径上踩了比较多的坑,最终暂时放弃,最直接的原因是cudnn8.0升级接口发生改动,编译caffe遇到较多问题 这里其实仍然采用了两条平行的路径,一条是直接在nano上构建环境,另外一种是基于docker(包括构建交叉编译环境用于加快编译速度)