0. 측정 기준

세 모델 모두 x86환경에서 측정된 결과이며 연산 속도는 time의 process_time을 사용하였다. 연산속도 측정 기준은 다음과 같다.

모델 측정기준
Pytorch image -> model -> output
TensorRT image -> model -> output
TensorRT Engine image -> Stream(GPU) -> output

Pytorch와 TensorRT는 model에 이미지를 넣어 output이 나오는 시간을, TensorRT Engine은 host_input을 device에 넘겨주어 output을 다시 host_output으로 받아오기 까지의 시간을 측정하였다.



1. 연산속도

다음은 동일 환경에서 서로 다른 Test 이미지 500장을 돌린 결과이며, 각 이미지 당 연산하는데 걸린 시간을 그래프에 표현해보았다. 단위는 ms이다.

분석 결과, Pytorch는 이미지 당 평균 약 120ms, TensorRT Engine은 약 40ms, TensorRT는 약 5ms의 연산 속도를 기록하였다. TensorRT Engine은 Pytorch대비 약 3배, TensorRT는 약 24배의 연산 속도 개선을 확인할 수 있었다. 연산 속도의 표준 편차는 기존 모델인 Pytorch가 1.95ms로 가장 작았고 TensorRT가 5.32ms, TensorRT Engine이 8.77ms로 가장 컸다.

  • 결과
모델 평균 연산속도 표준편차
Pytorch 120ms 1.95ms
TensorRT 5ms 5.32ms
TensorRT Engine 40ms 8.77ms



2. Confidence Loss

선별된 투기 행위 이미지 200장에 대한 각 모델들의 추론 결과이다. pytorch와 tensorRT는 연산 방법의 차이(FP32 & FP16)로 인한 미세한 오차를 제외하고 거의 동일한 confidence를 출력하였다. engine은 원본 pytorch의 추론을 따라가는 경향을 보이긴 하지만, TensorRT에 비해 큰 편차를 보인다.

  • 결과
모델 Confidence Loss 표준편차
Pytorch - -
TensorRT 거의 없음 원본 모델과 동일
TensorRT Engine 경향성은 있으나 loss 존재 원본 모델보다 큼



3. File 크기

  • Pytorch

  • TensorRT

  • TensorRT Engine

파일 크기는 TensorRT Engine, TensorRT, Pytorch 순으로 크다. TensorRT Engine이 원본 pytorch 모델에 비해 70MB정도 용량을 절약하였지만, 드라마틱한 차이는 아니다. 실제 추론 작업에서는 별 차이를 느끼지 못할 것 같다.

  • 결과
모델 용량
Pytorch 153MB
TensorRT 118MB
TensorRT Engine 79.5MB



4. 정리

분석 결과 TensorRT는 원본 모델의 confidence를 오차 없이 따라가면서, 연산 속도를 평균 24배 개선시킬 수 있음을 확인하였다. Engine 파일은 연산속도를 개선시킬 수 있긴 하지만, confidence에서 loss가 발생한다는 단점이 존재하였다. 따라서 x86 환경에서는 Pytorch 모델을 TensorRT 모델로 변환하여 사용하는 것이 가장 유리하다고 판단된다.

모델 연산속도 연산속도 편차 confidence loss confidence 편차 용량
Pytorch 느림 매우 낮음 - - 보통
TensorRT 매우 빠름 보통 거의 없음 원본 모델과 동일 보통
TensorRT Engine 빠름 경향성은 있으나 loss 존재 원본 모델보다 큼 작은편



ARM 환경에서는 아직 테스트를 해보지 못했지만, 차장님께서 해당환경에서는 engine파일이 TensorRT보다 추론속도가 더 빠를 가능성이 있다고 하셨다. 나중에 기회가 된다면 ARM 환경에서도 테스트를 해봐야겠다.

댓글남기기