NEMO 양자화 프레임워크: 정수 전용 딥러닝 배포를 위한 완전한 가이드
초록
본 보고서는 PyTorch 기반 NEMO 프레임워크의 네 가지 DNN 표현(FullPrecision, FakeQuantized, QuantizedDeployable, IntegerDeployable)을 정의하고, 특히 정수 전용 배포를 위한 양자화 흐름을 수학적으로 정형화한다. PACT 양자화, STE 기반 학습, 배치 정규화 양자화, 재양자화 기법 등을 상세히 설명한다.
상세 분석
본 논문은 DNN 양자화를 레이어 단위로 정형화함으로써 실제 하드웨어에 정수 연산만으로 모델을 실행할 수 있는 경로를 제시한다. 먼저 FullPrecision 표현을 “정상적인” 실수 기반 네트워크로 정의하고, Linear 연산(컨볼루션·완전 연결)과 Batch‑Normalization, 비선형 Activation을 순차적인 연산 체인으로 모델링한다. 여기서 Linear 연산은 ϕ = b + h·w·x 형태로 기술되며, 편향 b는 필요 시 다른 연산에 흡수될 수 있음을 명시한다.
FakeQuantized 표현은 양자화된 값 집합을 사용하되, 실제 연산은 실수 텐서 위에서 수행한다. PACT‑like 양자화 방식을 채택해 ReLU와 같은 활성화 함수에 클리핑 상한 β와 양자화 스텝 ε를 도입하고, STE(직선 근사법)를 통해 역전파 시 실수 그래디언트를 그대로 사용한다. 이때 양자화 함수 Q는 단조·구간별 상수이며, 정수 이미지 q = Q(t) 로 정의된다.
QuantizedDeployable 단계에서는 모든 연산이 양자화된 입력을 받아 양자화된 출력을 생성하도록 변환한다. Batch‑Normalization 파라미터도 양자화되고, Linear 연산의 가중치는 b_w = ⌊w/ε_w⌉·ε_w 로 고정된다. 이 과정에서 ε를 네트워크 전체에 전파(set_deployment)함으로써 각 레이어가 동일한 스케일을 공유하도록 만든다.
IntegerDeployable 단계는 실제 정수 연산만으로 추론이 가능하도록 모든 파라미터와 중간 텐서를 정수 이미지로 교체한다. 여기서는 PACT_IntegerAct와 같은 정수 전용 활성화 함수를 사용하고, 재양자화(requantization) 기법을 적용한다. 재양자화는 두 양자화 공간 Z_a, Z_b 사이의 스케일 비율 ε_a/ε_b 를 근사하기 위해 큰 정수 D(보통 2^d)를 도입하고, 비트 시프트 연산으로 구현한다. 오류는 1/D 이하로 제한될 수 있음을 증명한다.
논문은 또한 Linear 연산의 정수화 결과 b_ϕ 를 ε_w·ε_x 로 정의하고, 정수 이미지 Q(ϕ) = ∑ Q(w)·Q(x) 로 표현한다. 이는 실제 연산 시 정수 곱셈과 누적을 통해 구현 가능함을 의미한다. 전체 흐름은 net = nemo.transform.quantize_pact → net.harden_weights() → net.set_deployment → net = nemo.transform.integerize_pact 로 요약된다. 현재 구현은 float32 기반이므로 GPU에서 정수 전용 연산 효율은 제한적이며, 향후 전용 하드웨어 지원이 필요함을 언급한다.
핵심 인사이트는 (1) 양자화와 재양자화를 명확히 구분하고 수학적으로 정의함으로써 정확도 손실을 최소화할 수 있다는 점, (2) STE를 활용한 양자화‑인식 학습이 실수 기반 그래디언트와 호환되어 기존 학습 파이프라인을 크게 변경하지 않아도 된다는 점, (3) 정수 전용 배포를 위해서는 배치 정규화와 활성화 함수까지 모두 양자화된 형태로 변환해야 하며, 이를 위한 파라미터 클리핑과 스케일 전파가 필수적이라는 점이다. 이러한 설계는 임베디드·모바일 환경에서 메모리와 연산 비용을 크게 절감하면서도 정확도를 유지하는 실용적인 솔루션을 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기