P-stage4 [day12] (9강) 모델최적화기법(3); Quantization 실습
과거의 것들/AI Tech boostcamp

P-stage4 [day12] (9강) 모델최적화기법(3); Quantization 실습

수업내용

(9강) 모델최적화기법(3); Quantization 실습

PTQ는 사전에 바꾸는거고, QAT는 일단 float으로 학습시킨 후에 나중에 int로 바꾸는 거다.

저렇게 표기하긴 하지만 library마다 표기 방식이 다르니까 유의하자.

 

구글에서 제공한 flowset. 정말 보기 좋은 듯.

[5]“8-BitInferencewithTensorRT.”2017GTCSanJose,gputechconf2017.smarteventscloud.com/connect/sessionDetail.ww?SESSION_ID=105897.

Full integer quantization은 NVIDIA에서 잘 수행한 예시가 있는데 자세한건 pdf와 위 링크를 보자. 이론과 다른점은 bias가 없어도 성능에 별 영향 없다고 해서 빼고, 최대 최소를 int의 최대 최소가 아니라 threshold를 적용해서 clip하고, threshold를 사용할 경우 그 기준점을 정해야 하는데 float으로 했을 때와 int로 했을 때의 차이를 KL divergence로 계산하여 이 값이 최소가 되도록 하는 구간을 bin을 이용해서 찾는다.. 는 내용이다.

Forward 시엔 해도 되지만 미분불가능한 영역이 backward 할 땐 생기니 기울기가 1일 거라고 복원해서 수행.

결국 QAT가 가장 좋은 듯. 학습을 더 하는거니까. 하지만 Dynamic → PTQ → QAT 순으로 해야할 것들이 많아지고 제약도 많아져서 가끔은 그냥 안돌아가는 것도 있음.

실습 방법은.. pytorch에 있는 요구사항 다 들어주자.

Quantization - PyTorch 1.8.1 documentation

Quantization Operation coverage - PyTorch 1.8.1 documentation

PTQ는 모델 앞뒤로 layer 추가하고 관련 설정도 진행한다.

QAT는 설정만 잘 해주자. 하지만 GPU는 아직 지원안되서 CPU로 학습해야 하는데, 너무 느리니까 fine tuning을 사용하는 데다가 epoch도 3,4 이상 돌면 그에따른 weight를 freeze 해준다.