TensorRT - TensorFlow反序列化失败,verifyHeader中出现序列化错误

kt06eoxx  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(572)

我正在使用以下运行时信息运行nvcr.io/nvidia/tensorflow:19.12-tf2-py3 docker映像:

  • tensorflow 2.0.0(tf.__version__
  • Python 3.6(!python --version
  • 张紧器RT 6.0.1(!dpkg -l | grep nvinfer
  • 库达10.2

我在TensorFlow 2.0中构建了一个模型,并将其转换+保存到目录:

1/
├── assets/
|   └── trt-serialized-engine.TRTEngineOp_0
├── variables/
|   ├── variables.data-00000-of-00002
|   ├── variables.data-00001-of-00002
|   └── variables.index
└── saved_model.pb

现在,当我尝试使用TensorRT python API反序列化cuda引擎时:

import tensorrt as trt
TRT_LOGGER = trt.Logger(trt.Logger.VERBOSE)

serialized_engine = './tmp/unet-FP32/1/assets/trt-serialized-engine.TRTEngineOp_0'
# serialized_engine = './tmp/unet-FP32/1/saved_model.pb'

trt_runtime = trt.Runtime(TRT_LOGGER)

with open(serialized_engine, 'rb') as f:
    engine = trt_runtime.deserialize_cuda_engine(f.read())

我收到以下错误消息:

[TensorRT] ERROR: ../rtSafe/coreReadArchive.cpp (31) - Serialization Error in verifyHeader: 0 (Magic tag does not match)
[TensorRT] ERROR: INVALID_STATE: std::exception
[TensorRT] ERROR: INVALID_CONFIG: Deserialize the cuda engine failed.

我在完全相同的机器上,在完全相同的Docker容器中进行保存和加载。我假设'trt-serialized-engine.TRTEngineOp_0'包含实际的序列化模型是错误的吗?
我也尝试过用uff-parserm来做这件事,但是NVidia容器中附带的uff与tensorflow 2.0不兼容。
有什么想法如何反序列化我的trt引擎?

sqxo8psd

sqxo8psd1#

如果引擎是在不同版本上创建和运行的,则可能会发生这种情况。TensorRT引擎在不同的TensorRT版本之间不兼容。Go to this reference for more info.

mzmfm0qo

mzmfm0qo2#

对于未来的读者,如果你在同一台机器或同一个容器上构建和运行时遇到这个错误,你的tensorrt python包可能与你的系统包版本不同,请尝试以下命令签入python:

import tensorrt as trt
trt.__version__

在终端中:

dpkg -l | grep TensorRT

相关问题