(1강) 최적화 소개 및 강의 개요
Last updated
Last updated
전자기기 등에 올라가서 사용되는 AI 기술
스마트폰, 애플워치, IoT 기기 등
Power, RAM Memory, Storage, Computing power등의 제한이 있음
한 요청의 소요시간, 단위 시간당 처리가능한 요청수가 제한된다.
같은 자원으로 더 적은 latency와 더 큰 throughput이 된다면 더 좋다!
모델 학습에 들어가는 연산이 3, 4개월마다 두배로 증가해왔음.
2012 -> 2018 300,000배가 증가함
모델의 연구와는 별개로, 산업에 적용되기 위해서 거쳐야하는 과정
요구조건(하드웨어종류, latency제한, 요구throughput, 성능)들간의 trade-off를 고려하여 모델경량화/최적화를 수행
네트워크 구조 관점
Efficient Architecture Design(+AutoML; Neural Architecture Search(NAS))
Network Pruning - 학습된 네트워크의 중요도가 낮은 파라미터를 제거해보자!
Knowledge Distillation - 작은 규모로 전달해서 사용해보자
Matrix/Tensor Decomposition - 작은 Mat, Tensor를 사용해보자
Hardware 관점
Network Quantization - float32 가 아닌 더 작은 타입으로 사용하기
Network Compiling - 네트워크 자체를 컴파일하는 과정
매년 쏟아져 나오는 블록 모듈들
각 모듈 블록마다 특성이 다름(성능, 파라미터수, 연산횟수, ...)
원의 크기: 파라미터 갯수
x: 연산횟수, y: accuracy
x값이 작은 것이 경량화에 특화된 모듈들을 디자인 하는 것.
software 1.0: 사람이 짜는 모듈
사람이 명백한 과정을 주어주고 작성을 하는 것.
software 2.0: 알고리즘이 찾는 모듈
사람이 목적을 제시해주면 그걸 동작하게하는 모델을 찾고 네트워크를 학습하는 알고리즘
사람의 직관보다 상회하는 성능의 모듈들을 찾아낼 수 있다!
중요도가 낮은 파라미터를 제거하는 것
좋은 중요도를 정의, 찾는 것이 주요 연구토픽 중 하나 (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에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법
학습된 큰 네트워크를 작은 네트워크의 학습 보조로 사용하는 방법
soft targets(soft outputs)에는 ground truth보다 더 많은 정보를 담고 있음
(e.g. 특정상황에서 레이블 간의 유사도 등등)
자동차와 자전거가 있다. 앞에 있는 차가 자전거를 싣고 있다면 혼동이 생길 수 있다. 여기서 teacher 모델을 사용하게 되면 soft하게 label이 표현 가능하다.
연산
Student network와 ground truth label의 cross-entropy
teacher network와 student network의 inference결과에 대한 KLDloss로 구성
하나의 Tensor를 작은 tensor들의 operation들의 조합(합, 곱)으로 표현하는 것
Cp decomposition: rank 1 vector들의 outer product의 합으로 tensor를 approximation
일반적인 float32 데이터타입의 Network의 연산과정을 그보다 작은 크기의 데이터타입 (e.g.float16,int8,…)으로 변환하여 연산을 수행
Quantization Error가 발생할 수 있다. (Dequantize시 정확히 일치한 값이 나오지 않음)
효과
사이즈: 감소
성능: 약간하락
속도: Hardware 지원 여부 및 사용 라이브러리에 따라 다름(향상추세)
Int8 quantization 예시 (CPU inference, 속도는 pixel2 스마트폰에서 측정됨)
학습이 완료된 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)
경량화의 일련의 과정을 경험해보는 것! 경량화, 최적화는 넓은 분야이며, 특정 주제들은 구체적이고 지엽적이기 마련이다. 다양한 분야를 경험하기에 broad한 topic을 준비.
AutoML
Matix / Tensor Decomposition
Network Quantization
Network Compliling
최적화라는 성능의 효율을 향상시키는 것에 관심이 많았기에 흥미로은 기법들이 눈에 보였다. 재밋을것 같은 과정!
는 large teacher network의 출력을 smoothing(soften)하는 역할을 한다.
는 두 loss의 균형을 조절하는 파라미터다.