본문 바로가기

가슴으로 이해하는/경량화, Quantization

딥러닝 모델 Quantization이란

1. Quantization이란

- 32-bit floating point 기반 값/연산을 8-bit integer 등의 적은 bit 기반으로 변환하는 것

 

2. Why

- 이렇게 하면 이것들을 저장할 때 약 75%의 메모리 감소, inference 시 연산에 필요한 자원도 감소 !

- 구체적으로, 캐쉬 사용 효율성 up, RAM 접근에서의 병목 현상 방지, 가용 DSP 칩 더 확보 등 

 

 

3. How

- 각 layer의 min, max 값을 저장하고 각각의 소수 값을 정해진 일정 범위 안에서 가장 가까운 실수로 mapping해서 2^8 (=256) 개의 8-bit integer로 나타냄

- 일정 범위라는 것은 int8, uint8, int32, int16, uint16 등 뭔지에 따라 다르게 정해지는 것 같음

 

 

4. 종류

1) Dynamic quantization

- training 후 모델 weight들을 quantization하고

- activation에 대해서는 부동 소수점 형태로 저장해놨다가 inference할때 quantize하고 완료후 다시 dequantize해서 저장

 

2) Static quantization

- weight와 activation 모두 사전 양자화

- context-switching overhead 줄이기 위해 activation과 그전 layer를 합치는 fusion 수행

 

3) Quantization-aware training

- training 시 fake quantization module을 두어서 중간 중간 simulation을 할 수 있고

- fake quantization module은 clamping, rounding 수행

- training 완료 시 모듈에 저장된 scale, zero poinr 등의 값들로 int8로 모델 변환 가능

- 다른 방법보다 accuracy 더 잘나옴

 

 

 

참고자료

link1 link2

 

텐서플로우에서의 양자화 (Quantize) 시키는 방법

[이글은 https://www.tensorflow.org/performance/quantization 의 내용을 한글로 번역/의역한 내용입니다. 주관적 의견이 첨가되었으니 잘못된 해석이 있다면 지적하여 주시면 감사하겠습니다.] 뉴럴넷 이 처

itteckmania.blogspot.com