Closed jungae-park closed 2 years ago
음. 에러가 나는구나. 대략적인 성능이라도 빠르게 확인이 되면 좋기는 하겠다. 혹시 에러 메시지가 조금 자세하게 나온게 있거나, core dump 된걸 gdb 로 디버깅 해보면 대략적인 에러 이유는 알수 있지 않을까 싶네.
네 교수님 에러 메시지가 자세하게 나온게 없어서 core dump를 디버깅해보겠습니다.
TensorRT 모델로 변환 후 추론 과정에서 발생한 메시지(에러 메시지 포함)를 다시 확인하였습니다. https://encouraging-lantern-5d1.notion.site/error-message-cc0753f5e9fe41cb8492db4eab6e0740
메시지 하단에 tensorRT version에 대한 내용이 있어서, jetson xavier에서 제공하는 tensorRT 버전과 맞지 않아서 생긴 이슈로 추정하고 jetson xavier에서 제공하는 TensorRT 버전을 확인해보았습니다.
jetpack 4.6 기준 tensorrt 8.0.1 기본https://developer.nvidia.com/embedded/jetpack-sdk-46
현재 xavier에서 tensorrt version check
root@ubuntu:~# jetson_release
- NVIDIA Jetson AGX Xavier [16GB]
* Jetpack 4.6.2 [L4T 32.7.2]
* NV Power Mode: MAXN - Type: 0
* jetson_stats.service: active
- Libraries:
* CUDA: 10.2.300
* cuDNN: 8.2.1.32
* TensorRT: 8.2.1.8
* Visionworks: 1.6.0.501
* OpenCV: 4.1.1 compiled CUDA: NO
* VPI: ii libnvvpi1 1.2.3 arm64 NVIDIA Vision Programming Interface library
* Vulkan: 1.2.70
에러 관련 참고 자료
그래서 버전 관련해서 생긴 이슈였는지 조금 더 살펴보면서 진행해보려고 합니다.
응 좋은 생각이다. 둘중에 맞추기 편한 쪽으로 버전을 맞춰서 해보자 (가급적이면 최신 버전이면 좋겠고)
기존에 사용하던 이미지가 nvidia 공홈에서 제공해주는 tensorflow만 포함된 이미지였고, TensorRT가 포함되지 않아 에러가 발생한 것으로 추정하였습니다. 그래서 host와 동일한 버전의 TensorRT가 포함된 docker image를 nvidia 공홈에서 확인하여 이미지를 받았고, container를 실행하였으나 로그 메시지를 남기지 않고 컨테이너가 stop 되었습니다. https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-tensorrt
tensorrt가 포함된 docker image의 dockerfile이 있는지 확인해보고 있으며, 컨테이너가 stop된 이유에 대해서도 확인중에 있습니다.
CNN+TensorRT 로 양자화는 빠르게 될줄 알았는데 안그런가보네..TensorRT 를 xavier 에서 구동하는 기초적인 예제 같은건 돌려봤어? 하나씩 차근 차근 하는게 낫지 않을까 싶고, 가능하면 새로운 xavier 에 깔끔하게깔아서 해봐도 좋고. 환경 구성을 이야기 해줘도 도움이 될테고. 널리 알려진 기본적인 tutorial 은 잘 동작해야할거 같아.
TensorRT를 xavier 에서 구동하는 기초적인 예제도 환경이 구성되어야 돌릴 수 있기는 합니다. 컨테이너를 사용하지 않고, xavier에 바로 설치해서 되면 좋지만 안될 경우 꼬일 수 있어서 컨테이너를 띄워 실험을 진행했었습니다. 기본적으로 알려진 튜토리얼을 다시 찾아서 좀 더 확인해보겠습니다.
짧게 검색해봐도 간단한 설치 및 컨테이너 활용하는 블로그가 많이있는데. 에러가 나나보네. 깨끗한 환경에서 해보는것도 좋을것 같아. 1대만 있는건 아니니.
네 전달해주신 예제도 확인을 했었는데, amd64 기준의 docker image를 사용하여 컨테이너를 띄워 확인한 것으로 알고있습니다. 저희는 arm64 기반의 docker image를 사용하였음에도 이슈가 있어, 말씀하신대로 우선 host에서 tensorrt를 설치하고 간단한 예제를 돌려보겠습니다.
추후에 컨테이너에서 다시 실험을 진행해야 할 때는 따로 dockerfile을 구성해야할 수도 있을 것 같습니다.
[xavier host]
[xavier container-기존 docker image 사용(arm64+tensorflow2.5+python3.6)]
[xavier container - 새로운 docker image 사용(arm64+tensorrt 8.2.1+python3.8)]
따라서 jetpack 4.6 기준 장비에서 python, TensorRT, tensorflow 버전을 모두 맞추는 것이 꽤나 이슈가 있을 것으로 예상 아래와 같이 각 환경에서 맞춰야하는 라이브러리 버전이 명시되어 있기도 하였음 https://docs.nvidia.com/deeplearning/tensorrt/container-release-notes/rel_21-12.html 최소한의 작업으로 코드 실행을 빠르게 해보려고 하였지만, 하나씩 맞춰서 진행할 필요도 있어 보임 그리고 다른 xavier or nano 장비에서 tensorrt 추론 작업에 대한 글을 찾아보았지만 특별하게 참고할 수 있는 것이 없었음
기존 실험을 계속 xavier 장비에서 tensorrt 모델로 convert 후 추론을 진행하였었는데, Segmentation fault 오류가 어떤 이유로 생긴 것인지 확인하기 위해 다른 엣지 장비 (tx2, nano) 에서도 작업을 진행해보았습니다.
***** TRT-quantization matric *****
user_batch_size = 1
accuracy = 0.93
model_load_time = 175.3601644039154
dataset_load_time = 0.7383546829223633
inference_time = 51.67811322212219
inference_time(avg) = 0.045756250143051146
IPS = 4.3902610773239905
IPS(inf) = 21.85493778169378
[MobileNet V1 model TRT-FP16 convert 후 batch size 1 추론]
***** TRT-quantization matric *****
user_batch_size = 1
accuracy = 0.93
model_load_time = 177.70844507217407
dataset_load_time = 0.7184529304504395
inference_time = 62.83537316322327
inference_time(avg) = 0.05922599053382874
IPS = 4.1448626401608255
IPS(inf) = 16.884479111055466
[MobileNet V1 model TRT-INT8 convert 후 batch size 1 추론]
***** TRT-quantization matric *****
user_batch_size = 1
accuracy = 0.93
model_load_time = 174.71600461006165
dataset_load_time = 0.7275948524475098
inference_time = 9.51267671585083
inference_time(avg) = 0.0051897487640380855
IPS = 5.406674982038836
IPS(inf) = 192.68755492162035
따라서 기존 사용하고 있던 docker image, convert 및 추론 코드에는 문제가 없었던 것 같고, xavier 장비에서 실행이 안되어 오류가 있었던 것은 필요한 라이브러리가 모두 설치되지 않아서 그런 것이 아닌가 하는 생각이 들었습니다. 왜냐하면 tx2 장비에 jetpack 설치를 수동으로 한 후 추론이 되었기 때문입니다. 그리고 nano 장비에서의 경우는 다른 에러 메시지 없이 killed 되어 메모리를 많이 사용되고 있는 것으로 확인되어 메모리 사용을 어떻게 하고 있는지 살펴보면 이유를 좀 더 찾을 수 있을 것 같습니다.
오케이 좋은 발견을 했네. TX2 에서 TRT 진행이 되는구나. TX2 에서 이전에 다른 방식으로 양자화한 결과가 있었나? 내 기억에 다른 방식의 양자화는 Xavier 에서만 진행이 되었던것 같은데.. 한번 확인을 해줄래? TRT 설정이 어려운듯 하니 모든 장치에서 하기보다 하나 정도 장비를 정해두고 TRT 와 다른 방식의 양자화 진행시 성능을 비교해보면 좋을것 같아.
그리고 실험결과중에 마지막에 이야기한 MobileNetV1 INT8 의 경우 IPS(inf) 가 매우 높은데 확인해봐야 할것 같아.
네 교수님 tx2에서는 이전에 다른 방식으로 양자화한 결과는 없었고, yolo v5 video 추론을 tflite로 양자화하여 tx1, tx2, xavier, nano 장비에서 실험한 내용은 있습니다. 이때 양자화 실험을 진행하긴 하였지만 결과가 미흡했던 것으로 기억합니다. TRT 추론이 tx2 장비에서 진행이 잘되니, 아래와 같이 tx2 장비에서 TRT 추론과 tflite 추론시 성능 비교를 진행해보는 것이 좋을 것 같습니다.
그리고 Mobilenet V1 INT8 TRT 추론시 IPS(Inf)가 높은 것도 확인해보겠습니다.
응 정애야 좋은 생각이다. 하나씩 진행을 해보자. tx2 에 yolov5 비교 좋은 생각이다. 이게 성공하면 다른 모델로 확장해가는 방향이 좋겠다.
tx2 장비에서 yolo v5 모델 기준으로 trt 와 tflite 추론을 비교해보려고 합니다.
Yolo V5 model TRT convert & inference
model 추론시 아래와 같은 에러 메시지 발생하여 확인중에 있음
AttributeError: 'NoneType' object has no attribute 'num_bindings'
Yolo V5 model tflite convert & infernece
따라서 현재 양자화가 가능한 모델을 기준으로 추론을 진행해서 결과값을 먼저 정리해보고, 추가로 양자화가 필요한 모델에 대해서는 조금 더 살펴보려고 합니다.
trt 와 tflite 의 양자화 비교에서는 굳이 배치 추론은 추가하지 않는건 어떨까? 배치 추론까지 다해서 실험을 하면 좋기는 하겠는데, 벌써부터 이런 저런 이슈가 있는듯 하니 우선은 2개 시스템의 양자화 성능 비교에 촛점을 맞추면 어떨까 싶은 생각이야.
mobilenet v1, v2, inception v3 모델에 대해 batch size 1 기준으로 TRT 추론을 완료하였습니다.
전체적으로 INT8인 경우 추론 성능이 너무 좋아 무슨 이유로 좋은지 좀 더 알아봐야하고, inception v3 - TRT (INT8) 인 경우는 memory limite으로 인해 killed 되어 어디서 메모리를 사용하고 있는지 확인이 필요해 보입니다.
후에, 3개의 모델에 대해서 tflite 추론 성능도 살펴볼 예정입니다.
응 정애야 잘 진행했네. 그런데 FP32 의 경우는 원본 모델인거야? TensorRT 로 quantization 했다고 하면서 FP32 라고 하니까 이게 원본 모델인지 헷길리네. 추론을 진행한 전체 이미지의 갯수는 어떻게 되지? INT8 에서의 정확도도 꽤나 높은데 실제 데이터를 사용해서 정확도를 측정한건지 아니면 일부 데이터로만 측정한건지 확인해주면 좋겠다.
FP32인 경우도 원본 Tensorflow 모델을 float32로 TRT convert 되도록 진행하였습니다. 추론을 진행한 이미지는 imagenet tfrecord dataset 1000장을 사용하였습니다.
Mobilenet V1, V2, Inception V3 (FP32, FP16, INT8) tflite 모델에 대한 추론도 진행해보았습니다. (imagenet raw 1000장 사용)
궁금한점은 "FP32인 경우도 원본 Tensorflow 모델을 float32로 TRT convert 되도록 진행하였습니다." 이렇게 했을때 TRT convert 한것과 하지 않은것의 (원본 FP32) 성능 차이가 조금 있어? tflite 는 gpu 를 사용하지 못하는건 지금까지 계속 그랬던거야? 처음 듣는 이야기인것 같아서. 이전에 우리가 양자화 실험 했을때도 엣지 gpu 를 사용하지 않았던거야?
tx2 장비에서 mobilenet v1, v2, inception v3 TF-fp32 원본 모델 추론 성능과 TRT-FP32 추론 성능을 비교해보면 아래와 같습니다.
정확도 측면에서는 같고, 추론 성능은 조금 더 좋아졌습니다.
그리고 이전에 tflite 추론 실험을 yolo v5-video 추론만 진행을 했었는데, 이때 gpu를 사용하고 있었는지 메시지를 따로 기록해 두지 않아 gpu 사용 유무에 대해 확인을 할 수 가 없습니다. 하지만 그때도 값이 장비와 양자화에 마다 특이점을 찾을 수 없어서 이상하다고 생각했는데, 그게 cpu를 사용해서 그랬지 않았나 싶습니다. 다른 mobilenet v1, v2, incepction v3 모델은 tflite 추론 실험을 진행한적이 없기도 합니다. gpu를 사용하면서 tflite 추론 진행 사례를 다시 찾아보겠습니다.
아. 그랬구나. tflite 를 이용한 양자화 실험을 거의 안했구나. 원본 모델과 trt fp32 결과 확인 해보니 좋다. 이걸 가지고 내일 조금 더 이야기를 나눠보자.
해당 이슈도 지난번 미팅 때 pause 되어 필요 시 다시 이슈 생성 하겠습니다.