Benchmarks: Tensorflow Lite on GPU

Taekmin Kim
6 min readJan 27, 2019

글을 읽기 전에 아래 동영상(Photo Wake-Up)을 먼저 재생해주세요!

Photo Wake-Up 데모 영상

Preface

다들 재미있게 보셨나요? 저는 영상을 접했을 때, 데모 영상이 정말 인상적이었고 관련 기술의 활용 가능성이 크다는 생각을 했습니다. 예를 들어, 해리포터의 움직이는 뉴스가 현실화될 수 있겠죠.

아쉽게도 현실 세계에서는 Photo Wake-Up 같은 딥러닝을 적용한 사례를 찾아보기 어렵습니다. 그 이유는, 딥러닝 기술을 실행하기 위해서는 고가의 컴퓨터가 필요하기 때문입니다.

조금은 아쉬운 성능이지만, 스마트폰에서 딥러닝(a.k.a 모바일 딥러닝)을 실행하는 방법이 있습니다. 저비용, 개인 정보 보호, 빠른 반응 속도 등 장점이 많기 때문에 꾸준히 연구되는 분야 중의 하나입니다.

딥러닝 기술 경량화, 딥러닝 최적화 하드웨어 설계 등 모바일 딥러닝을 현실화하기 위한 많은 방법이 있습니다. 이번 포스트에서는 그중에서 모바일 GPU를 활용하는 방법에 대해서 알아보고자 합니다.

Introduction

Tensorflow Lite는 모바일 딥러닝을 지원하는 딥러닝 프레임워크입니다. 모바일 딥러닝 개발에 필요한 모델 경량화, 벤치마크 툴 등 다양한 편의 기능을 제공하고 최근 버전에서 모바일 GPU를 지원하는 기능을 발표했습니다. Tensorflow 블로그에 따르면 CPU 대비 최대 20배까지 가속된다고 합니다.

Tensorflow Lite 벤치마크: CPU vs. GPU — Credit: Tensorflow 블로그

그렇다면 절대적인 속도(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 상에서 수행 속도를 측정했습니다.

구글 공식 DeepLab V3+ 벤치마크: CPU vs GPU

CPU 대비 약 2.5배 가속되는 것을 확인했습니다. 구글이 발표한 3.4배에는 미치지 못하지만 확연히 빨라진 성능을 체감할 수 있었습니다.

아마도 Apk에서 측정한 방법이 추가적인 오버헤드를 발생시키지 않았을까 생각하는데 GPU 벤치마크 툴이 나온다면 구글 벤치마크 결과와 비슷한 결과를 얻을 수 있지 않을까 기대합니다.

CPU에서는 1 프레임당 170~250ms의 시간이 소요되는데요. 얼마나 빠른지 감이 안오시나요? 아래 apk를 설치하고 폰에서 직접 데모를 확인해보세요.

DeepLab V3+ on Pixel 2

초당 4~5프레임을 처리하기 때문에 결과가 약간 밀리는 것을 확인할 수 있습니다.

Comparison on JejuNet

JejuNet on Pixel 2

작년 여름 딥러닝 제주 캠프에서 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
JejuNet CPU 벤치마크

Other Vision Tasks

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

여러 DNN의 CPU 벤치마크

구글이 제공한 코드 기반으로 데모를 바로 확인할 수 있는 안드로이드 앱을 빌드했습니다.

Conclusion

구글의 발표처럼 모바일 GPU를 사용하면 CPU보다 가속된다는 결과를 확인했습니다. 벤치마크 결과를 통해서 모바일 GPU의 가능성과 동시에 CPU의 Quantization, Multi-thread와의 비교에서는 한계도 확인할 수 있었습니다.

현재는 CPU 위주의 모바일 딥러닝이 대세지만 점점 더 많은 기기/앱들이 모바일 GPU를 활용하는 방향으로 발전하지 않을까 예상합니다. 간단한 실험이지만 모바일 딥러닝을 고려하는 분들에게 도움이 되었으면 좋겠습니다.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Responses (1)

Write a response

gpu 기반 테스트 가능한 코드가 공유 가능하실까요?
샘플로 작성을 시도중입니다. 뉴비라서 힘드네요

--