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 환경에서도 테스트를 해봐야겠다.
댓글남기기