새소식

딥러닝

[모델 경량화] 경량화란

  • -
부스트코스의 모델 경량화 강의를 듣고 정리하였습니다.

 

 

1. 경량화의 목적

1.1 On device AI

개발된 모델이 휴대폰이나 스마트 워치 등 IoT 기기들에서 돌아가게 된다면 여러 제약사항들이 존재한다.
경량화를 통해 아래와 같은 한계점들을 해소할 수 있다.

  • Power Usage (Battery)
  • RAM Memory Usage
  • Storage
  • Computing Power

 

1.2 AI on Cloud(Server)

배터리, 저장공간, 연산능력의 제약은 줄어드나, latency(한 요청의 소요 시간)와 throughput(단위 시간 당 처리 가능한 요청 수)의 제약이 존재한다.
경량화를 통해 같은 자원으로 적은 latency와 많은 throughput이 가능하다.

 

1.3 Computation as a key component of AI progress

연산량은 딥러닝 모델 개발의 Key Component이다.
AI 모델에 필요한 연산량은 3,4개월마다 두배 씩 증가해오고 있다.

  • 연산 측정 방법
    • FLOPs
      • VGG16
        • 1.2 M images * 74 epochs * 16G FLOPs * 2 add-multiply * 3 backward pass = 8524 PF
    • GPU times
      • 4 Titan Black GPU's * 15 days * 5.1 TFLOPS/GPU * 0.33 utilizations = 10,000 PF

 

경량화는 모델의 연구와는 별개로, 산업에 적용되기 위해서 거쳐야하는 과정이다.
요구조건들 간의 trade-off를 고려하여 모델 경량화/최적화를 수행한다.

 

 

2. 경량화 분야

2.1 경량화, 최적화의 종류

▮ 네트워크 구조 관점

1. Efficient Architecture Design (+AutoML)
더 효율적인 블록 모듈(예를 들어서 같은 성능이지만 더 적은 파라미터 수의 모듈)을 디자인 하는 것
e.g ) MobileNet, VGG 등

AutoML : 경량 모델을 사람이 디자인 하는 것이 아니라 최적화를 통해 경량 모델을 찾아보고자 하는 접근 방식
사람의 직관보다 상회하는 모델을 찾을 수 있다.

 

2. Network Pruning

가지치기
학습한 모델이 있을 때 중요도가 낮은 파라미터를 제거해서 사이즈를 줄여보고자 하는 것

좋은 중요도를 정의하고 찾는 것이 주요 연구 토픽 중 하나이다.
e.g ) L2 Norm이 크다거나 loss gradient가 크면 좋은 중요도라고 정의

크게 두 가지 세부 분야로 나뉘는데 구조적 가지치기와 비구조적 가지치기로 나뉜다.

https://www.researchgate.net/publication/348369008_Knowledge_from_the_original_network_restore_a_better_pruned_network_with_knowledge_distillation


- 구조적 가지치기(Structured pruning)
    - 파라미터를 그룹 단위(channel, filter, layer 등)로 pruning
    - Dense Computation에 최적화된 기법

- 비구조적 가지치기(Unstructured pruning)
    - 파라미터 각각을 독립적으로 pruning 하는 기법
    -  Pruning을 수행할 수록 네트워크 행렬이 Sparse 해짐
    - 구조적 Pruning과 달리 Sparse Computation에 최적화된 기법

 

3. Knowledge Distillation

학습된 큰 모델(Teacher Model)이 존재 할 때, 작은 모델(Student Model)에 지식을 전달하는 접근법이다.

https://intellabs.github.io/distiller/knowledge_distillation.html


두 모델의 Softmax Outputs KL Divergence로 distilllation loss를 계산해서 feature의 지식을 student에 전달한다.

1) Student network와 ground-truth label의 cross entropy
2) Teacher network와 Student network의 KLD loss
$T$는 large teacher network의 출력을 smoothing하는 역할
$ \alpha$는 두 loss의 균형을 조절하는 파라미터

Soft output이란?
hard label(groundtruth)의 경우 이미지 classfication을 예시로 두었을 때 이미지에 여러 사물이 들어있어도 groundtruth는 하나에 대한 정보만 담고 있기 때문에 그 이미지에 대한 정보를 많이 담고 있지 않다.
따라서 soft target을 적용하는 것이 groundtruth보다 더 많은 정보를 담고 있다고 말한다.

 

4. Matrix/Tensor Decomposition

학습된 모델이 있을 때 가중치들을 더 작은 단위의 벡터나 텐서의 곱과 합으로 표현하는 방법이다.
결국, 하나의 텐서를 작은 텐서들의 연산들의 조합(합, 곱)으로 표현하는 것을 의미한다.

수학적으론 복잡하나, 간단한 구현으로 좋은 효과를 볼 수 있다.

 

 하드웨어 관점

5. Network Quantization

일반적인 float32 데이터타입의 Network의 연산과정을 그보다 작은 크기의 데이터타입으로 변환하여 연산을 수행하는 것

  • 사이즈 감소
  • 성능은 약간 하락
  • 속도는 하드웨어 여부 및 라이브러리에 따라 다르지만 향상 추세

사실상 속도에 가장 큰 영향을 미치는 기법

 

6. Network Compiling

학습이 완료된 Network를 deploy하려는 타겟 하드웨어에서 inference가 가능하도록 compile하는 것

사실상 속도에 가장 큰 영향을 미치는 기법

e.g) TensorRT(NVIDA), TFlite(Tensorflow)

 

특정 연산들을 하나의 연산으로 fusion된 것으로 대체하는 방법
예를 들어 tensorflow의 경우 200개의 Rule이 정의되어 있다.
연산 과정이 줄어드니까 속도가 빨라진다고 볼 수 있다.

그러나 Framework와 하드웨어마다 지원되는 core, unit 수 등이 다르기 때문에 Layer fusion의 조합에 따라 성능 차이가 발생한다.

 


https://www.boostcourse.org/ai302

728x90
Contents