Benchmarks: Tensorflow Lite on GPU
글을 읽기 전에 아래 동영상(Photo Wake-Up)을 먼저 재생해주세요!
Preface
다들 재미있게 보셨나요? 저는 영상을 접했을 때, 데모 영상이 정말 인상적이었고 관련 기술의 활용 가능성이 크다는 생각을 했습니다. 예를 들어, 해리포터의 움직이는 뉴스가 현실화될 수 있겠죠.
아쉽게도 현실 세계에서는 Photo Wake-Up 같은 딥러닝을 적용한 사례를 찾아보기 어렵습니다. 그 이유는, 딥러닝 기술을 실행하기 위해서는 고가의 컴퓨터가 필요하기 때문입니다.
조금은 아쉬운 성능이지만, 스마트폰에서 딥러닝(a.k.a 모바일 딥러닝)을 실행하는 방법이 있습니다. 저비용, 개인 정보 보호, 빠른 반응 속도 등 장점이 많기 때문에 꾸준히 연구되는 분야 중의 하나입니다.
딥러닝 기술 경량화, 딥러닝 최적화 하드웨어 설계 등 모바일 딥러닝을 현실화하기 위한 많은 방법이 있습니다. 이번 포스트에서는 그중에서 모바일 GPU를 활용하는 방법에 대해서 알아보고자 합니다.
Introduction
Tensorflow Lite는 모바일 딥러닝을 지원하는 딥러닝 프레임워크입니다. 모바일 딥러닝 개발에 필요한 모델 경량화, 벤치마크 툴 등 다양한 편의 기능을 제공하고 최근 버전에서 모바일 GPU를 지원하는 기능을 발표했습니다. Tensorflow 블로그에 따르면 CPU 대비 최대 20배까지 가속된다고 합니다.

그렇다면 절대적인 속도(latency, ms)는 얼마나 나올까요? 평소 관심있게 보고있는 Semantic Segmentation 네트워크인 DeepLab V3+의 CPU, GPU 수행 속도를 비교했습니다.
Comparison of DeepLab V3+ on CPU vs GPU
구글이 공개한 DeepLab V3+를 구글 픽셀 2의 CPU(Big Core)와 GPU에서 수행한 결과입니다. GPU는 현재 공식적으로 제공되는 벤치마크 툴이 없기 때문에 안드로이드 Apk 상에서 수행 속도를 측정했습니다.

CPU 대비 약 2.5배 가속되는 것을 확인했습니다. 구글이 발표한 3.4배에는 미치지 못하지만 확연히 빨라진 성능을 체감할 수 있었습니다.
아마도 Apk에서 측정한 방법이 추가적인 오버헤드를 발생시키지 않았을까 생각하는데 GPU 벤치마크 툴이 나온다면 구글 벤치마크 결과와 비슷한 결과를 얻을 수 있지 않을까 기대합니다.
CPU에서는 1 프레임당 170~250ms의 시간이 소요되는데요. 얼마나 빠른지 감이 안오시나요? 아래 apk를 설치하고 폰에서 직접 데모를 확인해보세요.

- [다운로드] deeplab_v3_257_on_cpu.apk
- [안내] GPU 버전은 기기 테스트 후 업로드 예정입니다.
초당 4~5프레임을 처리하기 때문에 결과가 약간 밀리는 것을 확인할 수 있습니다.
Comparison on JejuNet

작년 여름 딥러닝 제주 캠프에서 Real-Time Segmentation on Mobile Devices 프로젝트를 진행하면서 어떻게 하면 빠르게 할 수 있을까 많은 고민을 했습니다. 당시에는 모바일 GPU를 사용하기 어려웠기+몰랐기 때문에 CPU 위주로 이런저런 경량화를 시도했고 18fps라는 결과물(왼쪽 데모)을 얻었습니다.
JejeNet이 궁금하시다면 github.com/tantara/JejuNet을 참고하세요!
GPU를 사용한다고 하더라도 8bits Quantization + Multi-thread보다는 1.5~2배 정도 느린 것을 확인할 수 있습니다.
- GPU: 약 100ms
- 8bits Q. + M. Thread: 약 60ms

Other Vision Tasks
구글이 모바일 GPU 기능을 발표하면서 모바일 환경에서 자주 쓰이는 4가지 네트워크를 함께 공개했습니다. Image Classification(MobileNet V1), Object Detection(SSD), Semantic Segmentation(DeepLab V3+), Pose Estimation(PoseNet)입니다. 아래는 각 네트워크를 Pixel 2의 CPU에서 벤치마크한 결과입니다. 각 네트워크의 세부 결과는 링크에서 확인해주세요.

구글이 제공한 코드 기반으로 데모를 바로 확인할 수 있는 안드로이드 앱을 빌드했습니다.
- Classification: MobileNet V1 [다운로드] mobilenet_v1_1.0_224_on_gpu.apk
- Segmenttion: DeepLab V3+ [다운로드] deeplab_v3_257_on_cpu.apk
Conclusion
구글의 발표처럼 모바일 GPU를 사용하면 CPU보다 가속된다는 결과를 확인했습니다. 벤치마크 결과를 통해서 모바일 GPU의 가능성과 동시에 CPU의 Quantization, Multi-thread와의 비교에서는 한계도 확인할 수 있었습니다.
현재는 CPU 위주의 모바일 딥러닝이 대세지만 점점 더 많은 기기/앱들이 모바일 GPU를 활용하는 방향으로 발전하지 않을까 예상합니다. 간단한 실험이지만 모바일 딥러닝을 고려하는 분들에게 도움이 되었으면 좋겠습니다.