
요즘 Hacker News 같은 데 올라오는 벤치마크 점수들 보면 기가 막혀서 말이 안 나온다. 점수는 팍팍 오르는데, 실제 써보면 이전만도 못한 instruction following을 보여주는 모델들이 수두룩하다. 내가 현역일 때는 이런 날림 작업은 상상도 못 했지. 다들 숫자 놀음에만 미쳐서 본질은 잊어버린 모양이야.
Q4_K_M 양자화, 그놈의 잘려나간 히든딤
문제의 핵심은 Llama 계열 모델의 Q4_K_M 양자화 방식에서 튀어나온다. 특히 Llama 2 7B 모델의 gguf 파일에서 두드러졌던 현상인데, 특정 히든 디멘션이 너무 과하게 잘려나가면서 모델의 핵심 기능이 망가지는 거다. 이게 단순히 '조금 줄어들었네?' 수준이 아니거든.
이게 무슨 말이냐면, RoPE (Rotary Position Embeddings) theta 값에 기반한 위치 인코딩 정보를 처리하는 데 필수적인 연산들이 꼬이기 시작한다는 거다. 특히 qk_prod 같은 어텐션 메커니즘의 핵심 부분에서 미묘하게 데이터 손실이 발생하면, 모델은 자기가 뭘 들었는지조차 헷갈려 하기 시작해.
벤치마크는 속이고, 실제 추론은 박살 나고
내가 직접 Llama 2 13B fp16 모델이랑 이걸 Q4_K_M으로 양자화한 gguf 파일을 돌려봤다. 벤치마크 점수는 (놀랍게도!) 거의 비슷하게 나온다. 아니, 어떤 마이크로 벤치는 더 잘 나오기도 해. 그런데 막상 복잡한 멀티턴 대화나, 특정 형식에 맞춰 출력을 요구하는 instruction following 태스크를 주면?
완전히 다른 결과가 나온다. fp16 모델은 시키는 대로 척척 해내는데, Q4_K_M 버전은 헛소리를 늘어놓거나, 형식을 무시하고 지 마음대로 떠들어댄다. 마치 뇌의 일부를 도려낸 환자 같달까. 이 현상은 특히 2023년 말에서 2024년 초에 llama.cpp와 관련된 특정 커밋에서 더 심해진 케이스도 있었다. 결국 KV cache quantization 같은 최적화랍시고 건드린 부분에서 부작용이 터진 거지.
요즘 것들의 '최적화'라는 허울
이런 현상을 보면 내가 늘 하던 말이 생각난다. "요즘 것들은 숫자만 볼 줄 알지, 그 숫자가 뭘 의미하는지는 모른다." Q4_K_M이 분명 메모리 효율성은 좋지. 하지만 그 과정에서 모델의 인지 능력 자체가 저하되는 걸 간과해버린 거다.
아마 나처럼 짬밥 먹은 사람들은 알 거다. LLM 추론 품질은 단순히 벤치마크 점수로만 판단할 수 있는 게 아니라는 걸. 특히 복잡한 instruction을 얼마나 정확하게 따라오느냐가 진짜 실력인데, 이런 버그들은 그걸 정면으로 부정하는 꼴이지. 결국 이런 식으로 양자화된 모델들은 실제 프로덕션 환경에선 쓸모가 없다. 눈 가리고 아웅하는 짓거리일 뿐이야.