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가 크면 좋은 중요도라고 정의
크게 두 가지 세부 분야로 나뉘는데 구조적 가지치기와 비구조적 가지치기로 나뉜다.
- 구조적 가지치기(Structured pruning) - 파라미터를 그룹 단위(channel, filter, layer 등)로 pruning - Dense Computation에 최적화된 기법
- 비구조적 가지치기(Unstructured pruning) - 파라미터 각각을 독립적으로 pruning 하는 기법 - Pruning을 수행할 수록 네트워크 행렬이 Sparse 해짐 - 구조적 Pruning과 달리 Sparse Computation에 최적화된 기법
3. Knowledge Distillation
학습된 큰 모델(Teacher Model)이 존재 할 때, 작은 모델(Student Model)에 지식을 전달하는 접근법이다.
두 모델의 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의 조합에 따라 성능 차이가 발생한다.