【问题标题】:TensorRT - TensorFlow deserialization fails with Serialization Error in verifyHeaderTensorRT - TensorFlow 反序列化失败,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 中还不能量化...

标签: python tensorflow tensorrt nvidia-docker


【解决方案1】:

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

【讨论】:

  • 我已经从完全相同的 docker 容器调用构建、保存和读取。
猜你喜欢
  • 2011-12-02
  • 2021-08-28
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多