我正在使用以下运行时信息运行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引擎?
2条答案
按热度按时间sqxo8psd1#
如果引擎是在不同版本上创建和运行的,则可能会发生这种情况。TensorRT引擎在不同的TensorRT版本之间不兼容。Go to this reference for more info.
mzmfm0qo2#
对于未来的读者,如果你在同一台机器或同一个容器上构建和运行时遇到这个错误,你的tensorrt python包可能与你的系统包版本不同,请尝试以下命令签入python:
在终端中: