Я использую образ nvcr.io / nvidia / tenorflow: 19.12-tf2-py3 docker со следующей информацией времени выполнения:
- Tensorflow 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
Теперь, когда я пытаюсь десериализовать движок cuda с помощью TensorRT python API:
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, но uff, поставляемый в контейнере NVidia, несовместим с tenorflow 2.0.
Есть идеи, как десериализовать мой движок trt?