【发布时间】: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