Deep Learning

Yolov5 Tflite 버전을 local desktop에서 돌리면 느려지는 이유

jinmc 2023. 2. 13. 17:59
반응형

Quantization을 하면서 여러가지 테스트를 하던 중, tflite 파일을 돌리니 그냥 .pt 파일을 돌릴 때보다 확연하게 느려지는 것을 발견하였습니다.

 

물론, 이 현상을 처음 발견한 것은 아닙니다. 하지만 예전에 발견했을 때에는, Nvidia gpu가 TFlite 를 지원하지 않는다는 포스팅을 보았기에, 

(참고자료 : https://forums.developer.nvidia.com/t/gpu-support-for-tflite/156477)

당연히 GPU를 사용하지 못하기 때문에 느리구나 생각했었는데, 이번에 테스팅을 해 보니깐, 같은 CPU를 사용할 때에도, 훨씬 느린것을 발견하였습니다. 같은 모델 사용 시에 .pt 파일 사용시 - 20~30 ms 소요, tflite 변환 모델의 경우 3000ms 정도 소요.

 

이정도로 많이 차이나는것이, 그리고 CPU는 Parallel 컴퓨팅을 하지 않는대도 불구하고 

차이가 많이 나는 것에 놀라움을 느끼고 찾아보니, 결국 다음과 같은 사실을 알게 되었습니다.

Yes, the current TensorFlow Lite op kernels are optimized for ARM processor (using NEON instruction set). If SSE is available, it will try to use NEON_2_SSE to adapt NEON calls to SSE, so it should be still running with some sort of SIMD. However we didn't put much effort to optimize this code path.

(참고자료 : https://stackoverflow.com/questions/54093424/why-is-tensorflow-lite-slower-than-tensorflow-on-desktop)

 

 

여기서 SIMD라는 말이 나오는데, SIMD는 보통 사용하는 SISD(Single Instruction Single Data)와는 다른 개념으로 

다음 포스팅에서 SISD와 SIMD의 차이를 보여줍니다.

 

 

(참고자료 : https://m.blog.naver.com/fs0608/221650925743)

 

그리고 TFLITE 포럼에서도, 비슷한 내용을 보았는데, 누가 이슈를 올렸고 그 이슈의 내용은, Int Tflite가 float Tflite보다 더 느리다고 합니다. (3~4 ms 대 8~9 ms) 그리고 다음과 같은 답변을 보았습니다.

 

(관련자료 : https://github.com/tensorflow/tensorflow/issues/21698#issuecomment-414764709)

This is likely because quantized int requires an arm neon to be faster than float. On a PC (which is what I assume you are running on, float is likely better). This is because quantized int relies on special instructions that have not been emphasized on intel x86_64.

 

실제로 테스트 해본 결과, int tflite 모델이 3000ms 가 걸리는 동안, float tflite 모델이 100ms(!) 가 되는 것을 확인했습니다. 그래서 데스크탑에서는 물론 tflite도 좋지 않지만, integer quantization이 CPU에서 맞는 연산을 지원하느냐도 중요하다라는 점을 확인하였습니다.

반응형