TensorRT - Десериализация TensorFlow завершается с ошибкой сериализации в verifyHeader - PullRequest
0 голосов
/ 27 января 2020

Я использую образ 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?

1 Ответ

1 голос
/ 15 февраля 2020

Если движок создавался и работал на разных версиях, это может произойти. Двигатели TensorRT не совместимы между различными версиями TensorRT. Go по этой ссылке для получения дополнительной информации.

...