TensorRT运行TensorFlow和Python的TensorRT“ Hello World” 踩坑记录

安装tensorRT之后,官网有很多小的sample,也就是使用的案例,可以按照教程运行一下这些案例来入门如何使用tensorRT。我再使用其自带的sample时,发现也有一些小问题,这里记录一下运行的过程和遇到的一些问题以及解决方法。

环境:

docker中的Ubuntu18.04(虽然是容器,但是这里使用的操作和普通机器也没有区别,使用普通机器的也可以参考)
conda 10.0.130.
tensorRT6.0.15-cuda10.0
tensorflow-gpu 1.14

1.首先是sample的介绍

https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-601/tensorrt-sample-support-guide/index.html
我安装的是tensorRT6.0.1.5,这里是官网6.0.1的sample介绍。官网介绍上说使用tnsorRT时 “网络可以直接从NVCaffe导入,也可以通过UFF或ONNX格式从其他框架导入。也可以通过实例化各个图层并直接设置参数和权重,使用C ++或Python API以编程方式创建它们。”

我的理解是,一般会将各种框架如tensorflow训练得到的模型存储处理后,转换为tensorRT规定的几种格式,然后将转换后的文件使用tensorRT解析推理。这些案例就是各种不同的导入文件,不同框架的使用的sample,可以用它来学习如何使用tensorRT。
这里我打算用tensorflow使用tensorrt,因此选择的sample是26,一个使用tensorflow训练的小网络,从训练模型到存储模型,到转换存储文件再使用tensorRT推理的sample。

“Hello World” For TensorRT Using TensorFlow And Pythonend_to_end_tensorflow_mnistAn end-to-end sample that trains a model in TensorFlow and Keras, freezes the model and writes it to a protobuf file, converts it to UFF, and finally runs inference using TensorRT.

点击跳转名字到介绍https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-601/tensorrt-sample-support-guide/index.html#end_to_end_tensorflow_mnist

可以看到这个sample是在安装tensorRT时已经下载过了,位置在  /usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist

从里面的readme文件中可以看到使用介绍。

2.end_to_end_tensorflow_mnist

按照readme里的介绍理解sample的内容,以及如何执行文件。执行步骤如下:

2.0 检查是否安装好所有需要的包

在这个sample文件夹中有requirements.txt文件,文件中是需要安装的python包的名字。使用pip list 检查下自己是否安装了这里需要的包,如果有哪个包没有,pip安装即可。

这里稍微注意一下,readme里说可以用指令python3 -m pip install -r requirements.txt安装所有需要的依赖,但是如果这么安装的话,会自动安装最新版本的依赖。tensorflow-gpu一般大家都已经装好,如果这么安装,新版本可能会覆盖你之前安装版本。

之前安装tensorRT的时候有说明,如果要使用python3 需要   sudo apt-get install python3-libnvinfer-dev

如果要使用tensorflow,需要  sudo apt-get install uff-converter-tf

如果想运行需要ONNX graphsurgeon的示例,或者为自己的项目使用Python模块,需要  sudo apt-get install onnx-graphsurgeon

忘记自己是否装了的,可以用指令 dpkg -l | grep TensorRT   查看

这里根据自己的需求确认自己装了这些包,反正pip安装很方便,建议都装了。

2.1.首先在文件夹下使用指令创建文件夹models,用于存储训练结果。

root@yf-jupyter-2pkqf:/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist# mkdir models

2.2 然后运行model.py训练模型存储模型

root@yf-jupyter-2pkqf:/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist# python model.py

执行后可以看到训练的结果,acc值等。

训练完成之后可以在models文件夹下看到训练并经过tensorRT frozen的模型文件 lenet5.pb。看完记得回到end_to_end_tensorflow_mnist目录下。

root@yf-jupyter-2pkqf:/usrc/tensorrt/samples/python/end_to_end_tensorflow_mnist# cd models
root@yf-jupyter-2pkqf:/usrc/tensorrt/samples/python/end_to_end_tensorflow_mnist/models# ls
lenet5.pb

2.3 转换pb文件为uff文件

使用指令convert-to-uff models/lenet5.pb 将pb文件转换为uff文件。

root@yf-jupyter-2pkqf:/usrc/tensorrt/samples/python/end_to_end_tensorflow_mnist/models# convert-to-uff models/lenet5.pb
bash: convert-to-uff: command not found

这里出现错误显示command not found。这里之前已经使用指令sudo apt-get install uff-converter-tf 安装了包,但是显示没有这个命令。

这里参照https://forums.developer.nvidia.com/t/convert-to-uff-command-not-found/116782解决。执行以下指令

UFF_PATH="$(python -c 'import uff; print(uff.__path__[0])')"
chmod +x ${UFF_PATH}/bin/convert_to_uff.py
ln -sf ${UFF_PATH}/bin/convert_to_uff.py /usr/local/bin/convert-to-uff

完成后就没有这个问题了。这时再执行上面的命令,就会将pb文件转换为uff文件。可以在models文件夹下面看到。看完记得回到end_to_end_tensorflow_mnist目录下。

root@yf-jupyter-2pkqf:/usrc/tensorrt/samples/python/end_to_end_tensorflow_mnist# cd models
root@yf-jupyter-2pkqf:/usrc/tensorrt/samples/python/end_to_end_tensorflow_mnist/models# ls
lenet5.pb  lenet5.uff

2.4 执行sample.py文件

然后python运行sample.py文件。报错Could not find 2.pgm. Searched in data paths: ['/usrc/tensorrt/data/mnist']

root@yf-jupyter-2pkqf:/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist# python sample.py
Traceback (most recent call last):
  File "sample.py", line 112, in <module>
    main()
  File "sample.py", line 103, in main
    case_num = load_normalized_test_case(data_paths, pagelocked_buffer=inputs[0].host)
  File "sample.py", line 87, in load_normalized_test_case
    [test_case_path] = common.locate_files(data_paths, [str(case_num) + ".pgm"])
  File "/usr/src/tensorrtmples/python/end_to_end_tensorflow_mnist/../common.py", line 129, in locate_files
    raise FileNotFoundError("Could not find {:}. Searched in data paths: {:}".format(filename, data_paths))
FileNotFoundError: Could not find 2.pgm. Searched in data paths: ['/usr/src/tensorrt/data/mnist']

这里的解决方法参照https://github.com/NVIDIA/TensorRT/issues/165 运行 generate_pgms.py  生成缺的这个文件。

root@yf-jupyter-2pkqf:/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist# cd /usr/src/tensorrt/data/mnist
root@yf-jupyter-2pkqf:/usr/src/tensorrt/data/mnist# ls
LegacyCalibrationTable  generate_pgms.py  lenet5_custom_pool.uff      mnist.caffemodel  mnist_lenet.caffemodel  mnistgie.wts
README.md               lenet5.uff        lenet5_custom_pool.uff.txt  mnist.onnx        mnist_mean.binaryproto
deploy.prototxt         lenet5.uff.txt    lenet5_mnist_frozen.pb      mnist.prototxt    mnistapi.wts
root@yf-jupyter-2pkqf:/usr/src/tensorrt/data/mnist# python generate_pgms.py
Traceback (most recent call last):
  File "generate_pgms.py", line 48, in <module>
    main()
  File "generate_pgms.py", line 36, in main
    data = load_mnist_data(args.dataset)
  File "generate_pgms.py", line 9, in load_mnist_data
    with open(filepath, "rb") as f:
FileNotFoundError: [Errno 2] No such file or directory:'/usr/src/tensorrt/data/mnist/train-images-idx3-ubyte'

然后又会报错, No such file or directory:'/usr/src/tensorrt/data/mnist/train-images-idx3-ubyte'。

这里参照https://github.com/carpedm20/DCGAN-tensorflow/issues/196 解决。

Go to here https://github.com/Manuel4131/GoMNIST/tree/master/data
and download the mnist data.
Copy the mnist data to ./data/mnist/ (If the directory doesn't exist, create by yourself.)
(Use gzip -d command to uncompress the data first)

https://github.com/Manuel4131/GoMNIST/tree/master/data上下载文件train-images-idx3-ubyte.gz 和 train-labels-idx1-ubyte.gz 上传到目录/usr/src/tensorrt/data/mnist/ 并用gzip -d 指令解压。

root@yf-jupyter-2pkqf:~# cp train-images-idx3-ubyte.gz /usr/src/tensorrt/data/mnist/
root@yf-jupyter-2pkqf:~# cp train-labels-idx1-ubyte.gz /usr/src/tensorrt/data/mnist/
root@yf-jupyter-2pkqf:~# cd /usr/src/tensorrt/data/mnist/
root@yf-jupyter-2pkqf:/usr/src/tensorrt/data/mnist# ls
LegacyCalibrationTable  lenet5.uff                  lenet5_mnist_frozen.pb  mnist_lenet.caffemodel  train-images-idx3-ubyte.gz
README.md               lenet5.uff.txt              mnist.caffemodel        mnist_mean.binaryproto  train-labels-idx1-ubyte.gz
deploy.prototxt         lenet5_custom_pool.uff      mnist.onnx              mnistapi.wts
generate_pgms.py        lenet5_custom_pool.uff.txt  mnist.prototxt          mnistgie.wts
root@yf-jupyter-2pkqf:/usr/src/tensorrt/data/mnist# gzip -d train-images-idx3-ubyte.gz
root@yf-jupyter-2pkqf:/usr/src/tensorrt/data/mnist# gzip -d train-labels-idx1-ubyte.gz

此时再执行python generate_pgms.py 就能成功了。

解决完后回到/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist 目录下执行sample.py文件就能看到使用tensorRT做了一次推理的结果了

root@yf-jupyter-2pkqf:/usr/src/tensorrt/data/mnist# cd /usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist/
root@yf-jupyter-2pkqf:/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist# ls
README.md  model.py  models  requirements.txt  sample.py
root@yf-jupyter-2pkqf:/usr/src/tensorrt/samples/python/end_to_end_tensorflow_mnist# python sample.py
Test Case: 8
Prediction: 8

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值