(1강) 최적화 소개 및 강의 개요
1. Introduction(경량화)
1.1. 경량화의 목적
1) On device AI
전자기기 등에 올라가서 사용되는 AI 기술
- 스마트폰, 애플워치, IoT 기기 등 
- Power, RAM Memory, Storage, Computing power등의 제한이 있음 
2) AI on cloud (or Server)
- 한 요청의 소요시간, 단위 시간당 처리가능한 요청수가 제한된다. 
- 같은 자원으로 더 적은 latency와 더 큰 throughput이 된다면 더 좋다! 
3) Computation as a key component of AI progress

- 모델 학습에 들어가는 연산이 3, 4개월마다 두배로 증가해왔음. 
- 2012 -> 2018 300,000배가 증가함 
경량화는?
- 모델의 연구와는 별개로, 산업에 적용되기 위해서 거쳐야하는 과정 
- 요구조건(하드웨어종류, latency제한, 요구throughput, 성능)들간의 trade-off를 고려하여 모델경량화/최적화를 수행 
1.2. 경량화 분야 소개
경량화, 최적화의 대표적인 종류
- 네트워크 구조 관점 - Efficient Architecture Design(+AutoML; Neural Architecture Search(NAS)) 
- Network Pruning - 학습된 네트워크의 중요도가 낮은 파라미터를 제거해보자! 
- Knowledge Distillation - 작은 규모로 전달해서 사용해보자 
- Matrix/Tensor Decomposition - 작은 Mat, Tensor를 사용해보자 
 
- Hardware 관점 - Network Quantization - float32 가 아닌 더 작은 타입으로 사용하기 
- Network Compiling - 네트워크 자체를 컴파일하는 과정 
 
Efficient Architecture Design
- 매년 쏟아져 나오는 블록 모듈들 
- 각 모듈 블록마다 특성이 다름(성능, 파라미터수, 연산횟수, ...) 

- 원의 크기: 파라미터 갯수 
- x: 연산횟수, y: accuracy 
- x값이 작은 것이 경량화에 특화된 모듈들을 디자인 하는 것. 
Efficient Architecture Design; AutoML, Neural Architecture Search
- software 1.0: 사람이 짜는 모듈 - 사람이 명백한 과정을 주어주고 작성을 하는 것. 
- software 2.0: 알고리즘이 찾는 모듈 - 사람이 목적을 제시해주면 그걸 동작하게하는 모델을 찾고 네트워크를 학습하는 알고리즘 


- 사람의 직관보다 상회하는 성능의 모듈들을 찾아낼 수 있다! 
Network Pruning (찾은 모델 줄이기)
- 중요도가 낮은 파라미터를 제거하는 것 
- 좋은 중요도를 정의, 찾는 것이 주요 연구토픽 중 하나 (e.g.L2norm이 크면, loss gradient 크면 등등) 
- 크게 structured/unstructured pruning으로 나뉘어짐 

- Structured pruning - 파라미터를 그룹 단위로 pruning 하는 기법들을 총칭(그룹: channel / filter, layer 등) 
- Dense computation에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법 
- 중요도(channel scaling factors)가 낮은 파라미터를 제거해주는 것! 
 

- UnStructured pruning - 파라미터 각각을 독립적으로 pruning하는 기법 
- Pruning을 수행할수록 네트워크 내부의 행렬이 점차 희소(sparse)됨 
- Structured Pruning과 달리 sparse computation에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법 
 

Knowledge distillation
- 학습된 큰 네트워크를 작은 네트워크의 학습 보조로 사용하는 방법 
- soft targets(soft outputs)에는 ground truth보다 더 많은 정보를 담고 있음 - (e.g. 특정상황에서 레이블 간의 유사도 등등) - 자동차와 자전거가 있다. 앞에 있는 차가 자전거를 싣고 있다면 혼동이 생길 수 있다. 여기서 teacher 모델을 사용하게 되면 soft하게 label이 표현 가능하다. 

- 연산 - Student network와 ground truth label의 cross-entropy 
- teacher network와 student network의 inference결과에 대한 KLDloss로 구성 
 

- 는 large teacher network의 출력을 smoothing(soften)하는 역할을 한다. 
- 는 두 loss의 균형을 조절하는 파라미터다. 
Matrix / Tensor decomposion
- 하나의 Tensor를 작은 tensor들의 operation들의 조합(합, 곱)으로 표현하는 것 
- Cp decomposition: rank 1 vector들의 outer product의 합으로 tensor를 approximation 

Network Quantization
- 일반적인 float32 데이터타입의 Network의 연산과정을 그보다 작은 크기의 데이터타입 (e.g.float16,int8,…)으로 변환하여 연산을 수행  
- Quantization Error가 발생할 수 있다. (Dequantize시 정확히 일치한 값이 나오지 않음) 
- 효과 - 사이즈: 감소 
- 성능: 약간하락 
- 속도: Hardware 지원 여부 및 사용 라이브러리에 따라 다름(향상추세) 
- Int8 quantization 예시 (CPU inference, 속도는 pixel2 스마트폰에서 측정됨) 
 

Network Compiling🌟
- 학습이 완료된 Network를 deploy하려는 target hardware에서 inference가 가능하도록 compile하는것(+최적화가 동반) 
- 사실상 속도에 가장 큰 영향을 미치는 기법 
- e.g.TensorRT(NVIDIA), Tflite(Tensorflow), TVM(apache),… 
- 각 compile library마다 성능차이가 발생 

컴파일 라이브러리에 따라 성능에 차이가 있다.
- Compile과정에서, layer fusion(graph optimization)등의 최적화가 수행됨 
- 예를들어 tf의 경우 200개의 rule이 정의되어 있음 

- Framework와 hardware backends사이의 수 많은 조합 
- HW마다 지원되는 core, unit수, instruction set, 가속 라이브러리 등이 다름 
- Layer fusion의 조합에 따라 성능차이가 발생(동일회사의 hw임에도) 


- AutoML로graph의좋은fusion을찾아내자 
- e.g.AutoTVM(Apache) 

2. 강의 목표, 구성
경량화의 일련의 과정을 경험해보는 것! 경량화, 최적화는 넓은 분야이며, 특정 주제들은 구체적이고 지엽적이기 마련이다. 다양한 분야를 경험하기에 broad한 topic을 준비.
- AutoML 
- Matix / Tensor Decomposition 
- Network Quantization 
- Network Compliling 

최적화라는 성능의 효율을 향상시키는 것에 관심이 많았기에 흥미로은 기법들이 눈에 보였다. 재밋을것 같은 과정!
Last updated
Was this helpful?
