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

Posted

技术标签:

【中文标题】TensorRT - TensorFlow 反序列化失败,verifyHeader 中出现序列化错误【英文标题】:TensorRT - TensorFlow deserialization fails with Serialization Error in verifyHeader 【发布时间】:2020-01-27 15:26:18 【问题描述】:

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

张量流 2.0.0 (tf.__version__) Python 3.6 (!python --version) TensorRT 6.0.1 (!dpkg -l | grep nvinfer) cuda 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 引擎?

【问题讨论】:

我也有同样的问题。你能说说你是怎么解决这个问题的吗?提前致谢。 @CognitiveRobot 如果您真的想将 TF2.X 模型移植到 C++ TensorRT 环境中,我发现最直接的方法是将您的 TF 模型转换为 onnx,然后解析 onnx 以构建一个TRT 引擎。 只有在不量化模型时才可以转换为 ONNX...ONNX 模型在 TensorRT 中还不能量化... 【参考方案1】:

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

【讨论】:

我已经从完全相同的 docker 容器调用构建、保存和读取。

以上是关于TensorRT - TensorFlow 反序列化失败,verifyHeader 中出现序列化错误的主要内容,如果未能解决你的问题,请参考以下文章

TensorRT 和 TensorFlow 2

带有 TensorRT 的 C++ Tensorflow API

TensorRT模型部署实战,英伟达平台,C++ 和python对比(包含源码)

TensorRT模型部署实战,英伟达平台,C++ 和python对比(包含源码)

TensorFlow:使用 Python 确定 tensorRT 功耗

TensorFlow Lite、TensorFlow-TRT 和 TensorRT 之间的主要区别是啥?