728x90
반응형

에러 :

AttributeError: 'NoneType' object has no attribute 'serialize'

 

 

 

이 에러는 말 그대로 TensorRT Engine 이 Serialize 되지 않는 문제인데, 다음과 같은 이유 때문에 Serialize 되지 않는 것이다. 

 

 

- builder.create_network() 함수에서 나온 network 가 노드들을 완전하게 포함하고 있지 않아서 생기는 문제

- Input 부터 Output 까지 필요한 노드들을 포함하고 있지 않기 때문에 아래와 같은 에러가 발생

- [TensorRT] ERROR: Network must have at least one output 

- Output Node 를 찾을 수 없어서 Output 이 인식이 안되는 것

- 그래서 반환할 engine 이 없다고 나오는 것

 

 

즉, 변환하고자 하는 Onnx 모델 또는 Pytorch 모델에 "지원되지 않는 레이어 목록"이 포함되어 있기 때문에 TensorRT 를 위한 Network 를 제대로 생성 할 수 없는 것이다. 이는 TensorRT 또는 Onnx 에서 지원하지 않는 레어어가 있기 때문에

Onnx Node 들이 중간에 끊겨버려서 Output Node 를 찾지 못하여 TensorRT Engine 생성이 되지 않는 것이다. 

 

중간에 노드가 끊겼다는 사실은 아래와 같이 TensorRT의 (Onnx 모델을 인식한) network 의 레이어 갯수를 출력해보고, 

print("network.num_layers", network.num_layers)

 

Onnx 변환 시 Graph 를 프린트하여 노드 갯수를 파악함으로써 이 두가지를 비교하여 알아 볼 수 있다. 

 

 

아무튼, 

 

이럴 경우에는, 지원되지 않는 레이어를 대체하여 모델을 설계하거나, custom layer 를 만들어야한다.

 

 

 

 

 

 

하지만 아주 드문 경우인 Output 이 한 개인 경우에 한하여, Onnx 를 인식한 TensorRT의 network.num_layers 의 수와 Onnx 의 Node 수가 일치한다면 단순히 TensorRT 의 Network 가 Output 데이터를 인식 할 수 없을 때 생기는 문제이므로 아래와 같이 해결 할 수 있다.

 

builder.build_cuda_engine(network) 를 호출하기 전에 아래 코드 한줄을 추가하여 해결

 

network.mark_output(network.get_layer(network.num_layers - 1).get_output(0))

 

API 를 이용하여 수동으로 플래그를 지정하여야함

 

 

참고자료 1 : https://devtalk.nvidia.com/default/topic/1064287/tensorrt/typeerror-build_cuda_engine-incompatible-function-arguments/

 

https://devtalk.nvidia.com/default/topic/1064287/tensorrt/typeerror-build_cuda_engine-incompatible-function-arguments/

 

devtalk.nvidia.com

참고자료 2 : https://devtalk.nvidia.com/default/topic/1045064/tensorrt/onnx-and-tensorrt-error-network-must-have-at-least-one-output/

 

https://devtalk.nvidia.com/default/topic/1045064/tensorrt/onnx-and-tensorrt-error-network-must-have-at-least-one-output/

 

devtalk.nvidia.com

 

 

 

잘못된 답변 : https://forums.developer.nvidia.com/t/onnx-and-tensorrt-error-network-must-have-at-least-one-output/68295/27

참고자료 : 
https://github.com/NVIDIA/TensorRT/issues/273
https://github.com/NVIDIA/TensorRT/issues/305
https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html
3.2.1. Creating A Network Definition From Scratch Using The Python API

728x90
반응형