22.04.28 구글 우동혁 박사님 - 리소스 제한 환경에서 딥러닝 적용 Challenge 세미나

2022. 4. 28. 14:05카테고리 없음

가장 큰 머신러닝 - privacy , on-deivce에서 유저 데이터를 많이 다루는.. 해당 디바이스에서만 사용하고 다른 데로 전송하지 않아 안전..

latency - 유저 interactive app , 자율주행차, 100ms 등으로 머신러닝 추론시 시간이 많이 걸리면 critical하다. 카메라에서 얼굴 detection 등에서도 33ms 안에 처리를 해야하기 때문에 edge device에서도 머신러닝을 해야한다.

offline - 여행갔을때 번역.. 머신러닝이 offline으로 될 수도 있게?

 

-> on device로 머신러닝을 진행할 수 있게 하는 연구를 진행하자.

 

 

Edge TPU 

TrueVoice - 화상 회의 시스템, 백그라운드 노이즈를 머신러닝이 알아서 suppress = reduction해준다. (카페소리.. 찻잔소리 등?) 딱 목소리만 깔끔하게 들리게

 

Google Tensor - SoC

Real Tone - 우동혁 박사님 피셜 가장 뿌듯하셨다. 얼굴을 detect 하는 것 자체가 어려운 부분이다. 어떻게 카메라가 포커스를 자동으로 조정할지 등등.. 중요한 일인데

얼굴에 빛이 잘 안나오고 그랬는데, 얼굴을 detect 해서 얼굴의 피부를 잘 살려서 사진이 잘 나오게 해줬다.

모든 사람들을 fair하게 detect하기 위해 머신러닝 모델을 improve 했다.

Magic Eraser

CNN 에 관련된, computer vision은 이미 연구가 잘 되는 중.

 

Live Translate - 한 언어에서 다른 언어로 번역. ASR, Translate, TTR 기술이 하나의 앱에 들어갔다. 

deploy 하는 게 쉽지 않았다. training된 모델을 device에 올리는 데 있어서 performance 등을 지키는 게 어려웠다.

근데 on-device 연구를 할 때 난관들이 있다.

 

iPhone에도 deploy하고 싶다. 

Dynamic job : 카메라를 킬 때는 어디가 바쁘고.. 어디로 도는지

precision이 다른 하드웨어들이 각각 다르기 때문에 

사람들이 사용하는 기기들과 특성이 다 다르다.. Heterogeneity

Performance Protability

iPhone에서 했을 때는 잘 돌아갔는데 뭐 구형 전화기에서 했을 때는 잘 안되는 문제가 있을 수도 있고,

high end에서는 잘 돌아가는데 low end에서는 잘 안돌아가고 그러면 유저들이 싫어할 수 있다.

 

Energy Efficiency Portability

핸드폰이 너무 뜨거워지고.. 그런 문제가 있을 수 있다. 근데 이건 예전부터 있던 문제기도 한다.

근데 머신러닝을 하다보니 다음과 같은 문제가 있다

 

Functional Protability - 모델을 아무리 잘 만들어놔도 device에 따라 성능이 다르게 나올 수 있다.?

long tail of accuracy loss? 

segmentation 하는 예제 - quantization 을 했는데 bitmap 결과에서 fp32가 confidence가 없었던 희미한 부분은 

quantization을 완료하고 나니 

Debuggability / Interpretability - 결과가 안좋아.. 그럼 뭐가(어플리케이션인지, 프레임워크인지..) 잘못됐는지 ? 확인을 하기가 어려운..

debugging : 하드웨어에서 돌아간 결과가 실제 우리 기대치에 맞는지 계속 확인.. 

0이 기대됬느데 1이 나오고 2가 기대됬는데 3이 나오고.. 이런 것들을 debugging 하는 게 어렵다...

머신러닝 모델 - 굉장히 다양한 인풋을 넣고 generalize하는건데, 이런 잘못된 오차들을 줄이는 것이 중요하구나...

ReLU의 clipping같은 것 때문에 뭐가 잘못됬는지 알기 어렵기도 하다.

 

그럼 우리가 해야되는 것은?

1. performance 나 power관점에서 어떻게 해야 쉽게 portable 해질까..

게이밍같은 건 GPU, resolution 등을 잘 조절해서 동일한 게임인데 high end, low end에서 유저들이 만족스럽게 즐길 수 있게 하는 게 잘 나와있는데 머신러닝도 그게 될지.

2. 어떻게 하면 functional(기기마다 성능이 다른..) 문제를 어떻게 줄일 것인가? 

최정욱 교수님 질문 - Line Translation 딥러닝 모델이 많이 들어간다( 전처리, 후처리 ASR, TTR, Translation등등) 

최적화를 어떻게 진행하신 거냐?

 

-> data center와 ondevice 부서가 달랐다. batch를 빌드하는 게 다르다. 어떻게 하면 audio frame의 버퍼링을 동시에 해서 / 머신러닝 모델의 파라미터가 너무 많아 DRAM에 가지고 있는게 부담.. 이걸 어떻게 가지고 있을 것이냐..

 

TPU 아키텍쳐의 변경보다는 시스템 측면에서 최적화를 진행했는데, 그럼 컴파일러를 통해 했나 아니면 hand optimization을 했나?

-> 컴파일러를 사용했다. 우리에게 큰 문제는 tranditional 한 컴파일러가 있는데 아직은 standard한 게 없어서 ecosystem을 잡기가 어렵다.. 

 

quantization 할 때 사실 정확도의 기준이 애매하다.. 좋고 나쁘고의 평가를 하기가 힘든 모델들을 최적화할 때 기준이 있을까?

-> domain에 따라 다른 것 같다. classification, detection 등등.. Top5, Top1 정확도가 1~2프로 다르다 해도 어느정도 수용가능.

근데 segmentation 과 같은 분야는 한두 픽셀 차이인데 실제 유저입장에서는 큰 문제가 될 수도 있고

뭐 음성처리였으면 그걸 판단하는 metric을 찾기가 어렵기도 하다... 사람들에게 설문조사하는 식으로 하기도 한다.

기준이 아직은 없는 분야도 있다. 

 

혹시 on-device 환경에 성공적으로 deploy한 모델 중에 가장 큰 모델이 얼마나 큰 모델인지 알 수 있을까요?

-> 모바일에서도 큰 모델을 많이 쓴다. CNN같은 경우는 computation , 자연어처리는 파라미터가 크다.. 그런 애들은 Flash drive를 많이 쓴다.. DRAM에 있던 애들이 쫓겨나간다.. 등등 

 

오늘 말씀하신 건 inference 에서 최적화를 말씀하신 거 같은데 training에서도 최적화를 한 건가?

-> 구글에서는 privacy가 중요하고 customize된 training도 많이 하고 있는데, 

 

대규모의 training은 inference보다 연산이 복잡하기에, ondevice에서 training이 되려면 어떻게 하느냐?

-> training은 precision도 달라야 하고, alllignment도 중요하고, training을 실제로 돌려보면 메모리 footprint가 너무 크다는 문제가 제일 크다. long live한 tensor들이 DRAM에 게속 있어야하기 때문에 힘들다. 

 

edge device에서 continous learning을 하는 경우가 있나요?

-> 키보드 앱은 training을 하고 있다... 유저 데이터를 올리지 않고, 낮에 데이터를 모았다가 밤에 training해서? weight gradient만 데이터센터에 올리고, 새로운 weight을 deploy

 

debugging 문제... 왜 중간에 있는 문제를 바로 잡지 못했나?

-> 시간이 오래 걸리니까 한번 다 debugging을 하고 그 다음 bisecting을 한다