Q4_K_M vs Q8_0: 로컬 LLM 양자화, 어디서 타협할 것인가

로컬에서 LLM을 돌려본 사람이라면 한 번쯤 파일 목록 앞에서 멈칫한 경험이 있을 것이다. Q4_K_M, Q5_K_S, Q8_0… 이름만 봐서는 무엇이 좋은지 직관적으로 와닿지 않는다. 다운로드 크기를 보면 두 배 가까이 차이가 나고, 그렇다고 무작정 큰 파일을 받자니 VRAM이나 RAM이 버텨줄지 걱정이 앞선다. 결국 품질을 얼마나 포기해야 메모리를 아낄 수 있는지, 그 거래 비율을 이해하는 것이 핵심이다.

양자화가 하는 일

원래 신경망 가중치는 32비트 부동소수점(FP32) 혹은 16비트(FP16, BF16)로 저장된다. 70억 개(7B)짜리 모델이라면 FP16 기준으로도 약 14GB가 된다. 양자화(quantization)는 이 수치들을 더 낮은 비트 정밀도로 줄이는 과정이다. 4비트로 압축하면 같은 7B 모델이 약 4~5GB로 내려오고, 8비트면 약 7~8GB 수준이 된다.

중요한 건 단순히 비트 수를 줄이는 게 아니라 어떤 방식으로 줄이느냐다. 초기의 Q4_0, Q8_0 같은 포맷은 블록 단위로 균일하게 스케일을 적용하는 방식이었고, 이후 등장한 K-quant 계열(Q4_K_M, Q5_K_S 등)은 레이어와 텐서의 중요도에 따라 비트를 차등 배분하는 방식으로 발전했다.

GGUF 포맷의 명명 규칙을 이해하면 파일명이 훨씬 읽기 쉬워진다. Q4_K_M에서 Q4는 4비트 양자화를 뜻하고, K는 K-quant 방식(블록 내 하위 양자화 포함), M은 Medium 크기 변형을 의미한다. S(Small)이면 조금 더 공격적으로 압축하고, L(Large)이면 조금 여유 있게 남긴다. Q8_0의 경우 0은 추가 메타데이터 없이 단순 선형 양자화임을 나타낸다.

Q4_K_M과 Q8_0의 실제 차이

Q8_0은 품질 손실이 거의 없다는 말이 많다. 실제로 perplexity(낮을수록 좋음) 수치로 보면, 미압축 FP16 대비 Q8_0의 차이는 0.01~0.05 수준으로 사실상 구별하기 어렵다. Q4_K_M은 그보다 조금 크게, 같은 기준으로 0.1~0.3 정도의 perplexity 상승을 보이는 경우가 많다. 수치만 보면 작아 보이지만, 복잡한 추론이나 코드 생성 같은 작업에서는 이 차이가 틀린 답변이나 논리 비약으로 드러날 수 있다.

양자화 7B 모델 크기(약) FP16 대비 perplexity 증가 주 사용처
FP16 ~14 GB 기준(0) GPU 서버, 비교 기준
Q8_0 ~7.7 GB 0.01~0.05 품질 우선, VRAM 여유
Q6_K ~6.0 GB 0.05~0.1 균형형
Q4_K_M ~4.8 GB 0.1~0.3 일반 용도
Q3_K_M ~3.7 GB 0.3~0.6 메모리 제한 환경

파일 크기 차이만 보면, Q4_K_M은 Q8_0의 약 60% 수준이다. 16GB RAM 환경이라면 Q8_0은 7B 모델을 간신히 올리는 수준인 반면, Q4_K_M으로는 여러 모델을 동시에 로드하거나 컨텍스트 창을 더 넉넉하게 잡을 수도 있다.

데이터 압축과 품질 손실 분석

이미지 출처: Unsplash

작업에 따른 선택 기준

코딩이나 수학적 추론, 복잡한 논증이 필요한 작업이라면 Q8_0 또는 Q6_K를 쓰는 게 낫다. 이런 작업은 토큰 하나의 확률 분포 차이가 답변 전체의 정확도를 좌우하는 경우가 많아서, 소폭의 품질 손실도 의외로 크게 느껴진다. 특히 긴 코드 블록을 생성하거나 다단계 수식을 따라가는 경우라면, Q4_K_M의 약간 뭉툭해진 가중치가 엉뚱한 방향으로 논리를 이어붙이는 경향이 있다.

반면 일반적인 대화, 문서 요약, 간단한 질의응답이라면 Q4_K_M으로 충분하다. 사람이 자연어로 대화하는 상황에서는 모델이 정확히 다음 토큰을 맞추지 못해도 전달하려는 의미는 이미 충분히 전달된다. 이 경우 메모리를 아껴 더 큰 컨텍스트 길이를 확보하는 쪽이 실용적으로는 더 나은 선택이 되기도 한다.

메모리가 정말 빠듯한 상황 — 예를 들어 8GB RAM 환경에서 13B급 모델을 돌려야 한다거나, 저사양 GPU에서 실험적으로 모델을 띄워봐야 할 때 — 에는 Q3_K_M도 현실적인 선택지다. perplexity 손실이 제법 크지만, 그나마 K-quant 방식 덕분에 중요 레이어를 조금 더 보존하기 때문에 같은 비트 수의 구형 포맷보다는 낫다.

IQ 양자화라는 새로운 흐름

최근에는 IQ(Importance Matrix) 양자화라는 접근이 주목받고 있다. 이는 모델의 가중치 전체를 균일하게 압축하는 대신, 먼저 중요도 행렬(importance matrix)을 계산해 영향력이 큰 가중치에는 더 높은 비트를, 영향력이 작은 가중치에는 더 낮은 비트를 배분한다. 결과적으로 같은 파일 크기에서 기존 K-quant보다 유의미하게 낮은 perplexity를 달성할 수 있다.

IQ4_XS, IQ3_M 같은 형태로 불리며, llama.cpp 계열 프로젝트에서 점차 지원 범위를 넓히고 있다. 아직 모든 모델이나 모든 런타임에서 완벽하게 지원되지는 않아서 호환성 확인이 필요하지만, 같은 VRAM 예산 안에서 최대한 품질을 끌어올리고 싶다면 눈여겨볼 만한 선택지다.

결국 Q4_K_M과 Q8_0의 선택은 단순히 “품질 대 속도”의 문제가 아니라, 내가 어떤 작업을 얼마나 자주 하는지, 그리고 가진 하드웨어가 얼마나 여유 있는지에 대한 현실적인 판단이다. 로컬 LLM 생태계가 성숙하면서 양자화 기법도 빠르게 정교해지고 있다. IQ 계열 포맷이 자리를 잡고 툴체인 지원이 확대되면, 지금처럼 비트 수에 따라 크게 타협하지 않아도 되는 시점이 머지않아 올 것이다. 그때까지는 자신의 워크플로를 잘 파악하고 포맷을 고르는 것이 가장 실용적인 접근이다.


출처

댓글 남기기