[Boostcamp AI Tech] [모델 최적화] 17주차 Day 2 학습 기록

bluegun·2021년 11월 23일
0

AI Tech 2기 활동

목록 보기
75/87

요약

강의 내용

  • 경량화 : On-device로 낮은 사양의 기기에서 모델을 돌릴 수 있게 하거나, 비슷한 성능을 더 적은 자원으로 사용할 수 있게 함.
  • 경량화 종류 : AutoML, Pruning, KD, Quantization...

피어세션

  • 최종 프로젝트 역할 분담 -> 나는 모델 컴포팅에 집중하기로 함.
  • 인도 EDA 및 데이터 전처리 후에 이번 주는 모델 최적화 대회에 집중하기로 함.

멘토링

  • real-time으로 구현하기 위해선 대형 서버에서 통신하는 걸론 힘들고 On-device를 하는 게 맞다.
  • ONNX에 대해 알아두자.
  • 현업 기준으론 고객의 요구사항에 맞게 어떻게든 돌아가는 게 중요하므로, 데이터를 잘 정제하거나 괜찮은 부분만 학습하게 하는 등 트릭을 잘 생각해보자.

강의 내용

경량화

경량화 목적

  • On-device : 스마트폰 등 기기 위에서 모델을 사용할 수 있게 함.
  • AI on cloud : 같은 자원으로 더 적은 latency, 더 큰 throughput 가능
  • 기본적으로 현대로 올수록 모델의 파라미터 수가 기하급수적으로 증가

경량화, 최적화 종류

  • 네트워크 구조 관점
    • Efficient Architecture Design(EfficientNet, MobileNet, AutoML, NAS)
    • Network Pruning(중요도가 낮은 파라미터 제거)
    • Knowledge Distillation
    • Matrix/Tensor Decomposition
  • Hardware 관점
    • Network Quantization
    • Network Compiling

피어 세션

멘토님의 주간 피드백에서 모델링, 모델 컨버팅, 클라이언트 개발로 역할 분담을 하는 걸 추천하셨고 팀원들도 이견이 없어 이 중 하나의 역할을 맡기로 정하였고, 나는 모델 컨버팅 파트를 맡기로 했다. 모델링은 그래도 어느정도 해봤고 모델 컨버팅을 할 줄 아는게 큰 도움이 될 것 같아서 먼저 하고 싶다고 말했다.

현재 하고있는 데이터 EDA 및 label별 분류 작업이 끝나고 나서 어떤 걸 할지도 대략적으로 정하였다. 난 일단 ONNX나 최적화 기법들 관련해 공부하고, 임의의 모델로 실습해보면서 실제 학습된 모델이 생길 때까지 준비를 해야겠다.

이 정도 사항만 정하고, 모델 최적화 대회에 집중하기로 하였다. 강의도 있고 최종 프로젝트에 도움이 되는 사항도 많아서 열심히 하는 게 좋다고 판단하였다. 내일까지 코드를 읽고 분석해 얘기할 것 같다.

멘토링

피어 세션 때 얘기하면서 팀원 모두가 확신이 없던 부분이 어떤 플랫폼이나 디바이스를 사용할 지에 대한 여부였다. On-device로 하는 방법이 가장 이상적이지만, 우리가 아직 모르는 문제로 인해 불가능해진다면 웹 서버에 모델을 구축해놓고 네트워크 통신을 통해 구현을 할 수도 있을 것 같고, 이 경우 어느 정도까지의 성능을 기대할 수 있는지 감이 오지 않아 질문드렸다.
이에 대해 멘토님께서 답변하시기를, 네트워크 통신 자체가 지연속도가 크게보면 100~200ms 또는 그 이상으로 존재하기 때문에, 이상적으로 5 fps정도의 속도를 갖게 되고, 이는 일반적으로 30 fps 이상이 기준인 real-time 처리에 한참 못 미치는 속도라고 하셨다. 만약 real-time을 포기한다면 서버도 사용할 수 있을 것이며, 이때도 최대한 속도를 올리기 위해서 모델의 경량화와 최적화가 잘 이루어져야 한다고 하셨다.

그 외에 ONNX나 TFLite 데모를 갖고 실습해보며 준비하기를 권장하셨고(ONNX를 추천하신 이유는 우리 팀이 Pytorch를 사용하기 때문이고, TFLite가 레퍼런스가 가장 많은 편이기 때문이라고 하셨다.), 모델 학습에 사용할 만한 트릭을 여러 가지 소개해주셨다. 예를 들어 속도 향상을 위해 image를 여러 개의 patch로 쪼개어 그 영역 안에서 segmentation을 진행하고, 나중에 이들을 합쳐 결과를 내는 식으로 하게되면, patch들의 조합으로 여러 이미지를 만들 수 있어 데이터 수의 향상, 작은 영역만 잘 segmentation하면 되므로 좀 더 원하는 대로 학습할 수 있고, GPU를 잘 사용할 수 있을 경우 patch로 나누는 게 병렬처리로 더 빠른 연산이 가능할 수 있다고 하셨다. 이 부분은 아직 생소해 좀 더 조사해보고 판단하면 좋을 것 같다.

0개의 댓글