当前位置:   article > 正文

Jetson系列TensorRT .onnx转.trt/.engine_tensorrt转 engine需要 很久

tensorrt转 engine需要 很久

一、环境配置

Jetson系列加速器如Nano、Xavier在刷机之后是自动安装了TensorRT的,通过如下命令可以检查是否安装成功:

dpkg -l | grep TensorRT

成功显示:

但是可能一开始在conda环境里加载不出来,是因为没有配置好环境。

首先找到tensor.so的位置:

sudo find / -iname "tensorrt.so"

我的位置在这里:

然后进入自己创建的conda用户环境里(/usr/local/archiconda3/envs/pytorch/lib/python3.6/site-packages)建立软连接:

ln -s /usr/lib/python3.6/dist-packages/tensorrt/tensorrt.so tensorrt.so

现在import tensorrt就不会有问题了:

文件转换还需要用到trtexec这个文件,我找了好久原来在这里:

当然它还是无法直接使用的,要在.bashrc文件里添加一下环境变量:

export PATH=/usr/src/tensorrt/bin:$PATH

 记得source一下。

现在环境就基本配置好啦!

二、文件转换

在.onnx目录下运行:

.onnx转.trt

  1. import os
  2. import tensorrt as trt
  3. import sys
  4. TRT_LOGGER = trt.Logger(trt.Logger.WARNING)
  5. runtime = trt.Runtime(TRT_LOGGER)
  6. model_path = 'XXX.onnx'
  7. engine_file_path = "XXX.trt"
  8. EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) # batchsize=1
  9. builder = trt.Builder(TRT_LOGGER)
  10. network = builder.create_network(EXPLICIT_BATCH)
  11. parser = trt.OnnxParser(network,TRT_LOGGER)
  12. #with trt.Builder(TRT_LOGGER) as builder, builder.create_network(EXPLICIT_BATCH) as network, trt.OnnxParser(network,TRT_LOGGER) as parser:
  13. builder.max_workspace_size = 1 << 28
  14. builder.max_batch_size = 1
  15. print(network)
  16. if not os.path.exists(model_path):
  17. print('ONNX file {} not found.'.format(model_path))
  18. exit(0)
  19. print('Loading ONNX file from path {}...'.format(model_path))
  20. #with open(model_path, 'rb') as model:
  21. model = open(model_path, 'rb')
  22. print('Beginning ONNX file parsing')
  23. if not parser.parse(model.read()):
  24. print('ERROR: Failed to parse the ONNX file.')
  25. for error in range(parser.num_errors):
  26. print('parser.get_error(error)', parser.get_error(error))
  27. #不加下面两行,生成的engine为None
  28. last_layer = network.get_layer(network.num_layers - 1)
  29. network.mark_output(last_layer.get_output(0))
  30. network.get_input(0).shape = [1, 3, 680, 680] #此处记得修改成自己的inputsize
  31. print('Completed parsing of ONNX file')
  32. engine = builder.build_cuda_engine(network)
  33. with open(engine_file_path, "wb") as f:
  34. f.write(engine.serialize())
  35. print('save trt success!!')

.onnx转.engine

trtexec --onnx=XXX.onnx --saveEngine=XXX.trt

可以在后面添加--int8或者--fp16指定精度。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/423903
推荐阅读
相关标签
  

闽ICP备14008679号