본문 바로가기
C.W.K.
Stream
Lesson 04 of 07 · published

양자화

~8 min · advanced

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

가중치를 줄이고 추론을 빠르게

학습된 모델은 보통 가중치를 32비트 부동소수점으로 저장해. 양자화는 더 적은 비트로 같은 가중치를 표현하는 방법이야. float32 대신 int8을 쓰면 모델 크기가 약 4배 줄고, 정수 연산이 저렴하며 메모리로 옮길 바이트도 1/4이어서 추론이 빨라질 수 있어. 특히 원시 FLOP보다 메모리 대역폭과 초기 실행 크기가 중요한 가장자리 장치, 모바일, 서버리스 환경에서 가치가 커.

Keras 3에서는 한 번의 호출로

Keras 3는 별도 도구나 그래프 내보내기 없이 model.quantize('int8')로 모델을 제자리 변환해. Keras 3.11 이상의 'int4'는 품질이 견딜 수 있을 때 약 8배 압축까지 노릴 수 있고, type_filter=['Dense']를 사용하면 안전한 레이어 유형만 양자화하고 민감한 부분은 전체 정밀도로 남길 수 있어.

PTQ와 QAT

quantize()는 이미 학습된 가중치만 바꾸고 다시 학습하지 않는 학습 후 양자화(PTQ)를 수행해. 비용이 거의 없고 int8에서는 정확도 손실이 보통 약 0.5% 미만이야. 특히 int4에서 손실이 너무 크다면 학습 중 저정밀도 반올림을 흉내 내 모델이 적응하도록 하는 양자화 인식 학습(QAT)으로 넘어가. PTQ에서 시작하고 측정값이 요구할 때만 QAT를 사용해. 손실은 고정된 수치가 아니라 자료와 과제에 따라 달라지므로 직접 평가해야 해.

Code

제자리 PTQ: int8, int4, 선택적 양자화·python
# Int8 quantization (4x smaller, faster inference)
model.quantize("int8")

# Int4 quantization (8x smaller, Keras 3.11+)
model.quantize("int4")

# Selective quantization (exclude specific layers)
model.quantize("int8", type_filter=["Dense"])  # Only Dense layers

External links

Exercise

작은 MNIST 분류기를 학습해 정확도와 디스크 크기를 기록해. 한 복사본에는 model.quantize("int8"), 새 복사본에는 model.quantize("int4")를 적용하고 각각 정확도와 크기를 다시 재. 정확도와 압축률의 관계를 그리고 int4의 추가 압축이 더는 가치가 없는 지점을 찾아.
Hint
변환 전후에 model.save()로 파일 크기를 비교하고 매번 같은 시험 세트로 평가해야 정확도를 공정하게 비교할 수 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.