모델 가중치를 32비트 부동소수점에서 8비트, 4비트 정수 등 낮은 정밀도로 변환해 메모리와 연산 비용을 줄이는 기법. 큰 모델을 소비자 장치에서 실행할 수 있게 한다.
큰 언어 모델은 숫자 수십억 개로 이루어진 거대한 표라고 생각하면 된다. 원래 이 숫자 하나하나를 아주 정밀하게(float32, 4바이트) 저장하는데, 그러면 모델 하나를 올리는 데만 웬만한 그래픽카드 메모리가 통째로 필요하다. 그런데 사진을 고해상도 원본 대신 적당히 압축한 JPG로 저장해도 눈으로 보기엔 큰 차이가 없듯이, 모델의 숫자들도 정밀도를 좀 깎아도 대답 품질은 거의 유지된다. 이렇게 숫자를 낮은 정밀도로 바꿔 모델을 가볍게 만드는 게 양자화다.
숫자 하나를 4바이트에서 1바이트(int8)로 줄이면 모델 크기가 4분의 1이 되고, 4비트로 줄이면 8분의 1까지 작아진다. 그 덕분에 데이터센터급 장비가 있어야 돌아가던 모델을 노트북이나 게이밍 그래픽카드 한 장으로 실행할 수 있게 된다. 정밀도를 극단적으로(2비트 같은) 낮추면 복잡한 추론에서 티가 나기 시작하지만, 4비트 정도까지는 대화하면서 차이를 느끼기 어려운 수준이다.
가장 쉬운 길은 로컬 실행 도구를 쓰는 것이다. ollama run으로 모델을 받으면 이미 양자화된 버전이 자동으로 내려온다. 직접 파일을 고를 때는 허깅페이스에서 Q4_K_M이나 Q5_K_M 같은 이름이 붙은 GGUF 파일을 받는데, 이 형식은 llama.cpp 계열 도구가 쓰는 로컬 표준이라 CPU만으로도 돌릴 수 있다. 이름의 숫자가 비트 수라 클수록 무겁고 정확하다.
서버에서 서비스를 돌릴 때는 이야기가 달라진다. vLLM 같은 추론 엔진에 AWQ나 GPTQ로 양자화한 모델을 올리면 GPU 메모리가 남아, 그만큼 한 번에 더 많은 요청을 묶어 처리(배치)할 수 있어 처리량이 올라간다. 파인튜닝할 때도 bitsandbytes로 4비트 로딩을 해두고 그 위에 LoRA 어댑터만 학습하는 방식(QLoRA)을 쓰면, 큰 모델을 작은 장비에서도 미세조정할 수 있다.
양자화 방법은 크게 두 갈래다. 대부분은 사후 학습 양자화(PTQ)로, 이미 다 학습된 모델을 나중에 눌러 담는 방식이라 빠르고 부담이 없다. GPTQ는 소량의 예시 데이터로 오차를 보정하고, AWQ는 출력에 크게 영향을 주는 중요한 숫자들만 골라 정밀도를 지켜줘서 손실을 더 줄인다. 반대로 양자화 인지 학습(QAT)은 학습하는 동안 미리 낮은 정밀도를 겪게 해서 더 튼튼하게 만드는 방식인데, 정확도는 더 좋지만 다시 학습해야 해서 비용이 크다. 그래서 개발자가 실무에서 만나는 건 거의 PTQ다. 다만 정밀도를 무작정 낮추면 원래 학습으로 지운 정보가 되살아나는 등 예상 못한 부작용이 생길 수 있어, 어느 비트까지 내릴지는 용도에 맞게 시험해보고 정하는 게 좋다.