MACaQ의 2단계 헤시안 정제(Hessian Refinement)를 패치 없이 모든 GGUF에 적용해 봤는데, 양자화 성능이 13% 향상됨
I noticed the 2 Hessian Refinement of MACaQ can be applied to any GGUF without any patches ... and tried it. 13% better quants
핵심 요약
MACaQ 논문의 헤시안 기반 양자화 기법을 활용해 별도 패치 없이 GGUF 모델의 성능을 개선한 사례 공유.
- 성능 향상 — 헤시안 정제 적용으로 KL 발산 13% 감소 및 벤치마크 성능 개선
- 범용성 — 별도의 추론 소프트웨어 패치 없이 기존 GGUF 모델에 즉시 적용 가능
- 최적화 기법 — 레이어별 손실 측정 및 가중치 보정을 통한 정밀도 복구
- 추가 연구 — 기존 llama.cpp 호환 개선안과의 결합 가능성 및 exllama3와의 비교 논의
TLDR: Qwen3.8-27B UD_4_XL 양자화 버전인데, unsloth보다 KL 발산이 13.23% 낮음(내 작은 테스트셋 기준이고, 5090 하나로 돌려본 거라 더 테스트해 볼 사람은 해보셈). LiveCodeBench 벤치마크에서는 기술적으로 4% 더 나은 성능을 보여줌(데이터 포인트가 하나라 아주 신뢰할 순 없음). 속도는 똑같고 open-webui에서 써보니까 "느낌"은 더 좋음.
https://huggingface.co/christophedevriese/Qwen3.8-27B-Hessian-Refined-GGUF
Google/Deepmind 논문에서 제안한 변경 사항들을 통합한 MACaQ 논문을 보니까, 거기서 쓰는 3가지 구성 요소 중 1번이랑 2번만 적용해도 KLD는 15% 이상 좋아지고, 일부 벤치마크에서는 성능이 5% 향상되는데 손해 보는 건 아예 없더라. 그냥 GGUF 파일만 바꾸면 됨. 여기 나온 수치들은 5090 하나로 4시간 정도 최적화해서 뽑아낸 최대치지, 이론상 가능한 최대치는 아님. 그러니까 15%보다 더 나올 수도 있겠지만, 너무 큰 기대는 안 하는 게 좋을 듯.
이건 추론 소프트웨어 패치할 필요 없이 텍스트 모델, 이미지 모델, 심지어 whisper까지... 다 적용 가능함. 그냥 GGUF 파일 바꾸면 끝임.
unsloth 팀 누군가가 이거 보고 자기네 모델 전체에 적용해 줬으면 하는 게 내 꿈임(아니면 B300 머신 하루 이틀만 빌려주든가).
화웨이가 쓴 트릭이랑 그 효과에 대한 짧은 논의:
- Hessian 기반 양자화 선택: 모든 레이어를 다르게 압축하고, 압축으로 인한 "손상"을 측정함. 특정 레벨에서 발생하는 손상을 확인한 뒤, 동일한 압축률을 유지하면서 손상을 최소화하는 압축 레이어 조합을 찾아내는 방식임.
사용자 입장에서는 그냥 공짜임. 추가 연산 필요 없고(오히려 아주 조금 줄어듦), VRAM도 더 안 먹음(200바이트 정도 줄어듦). llama.cpp 업데이트도 필요 없고, UD_4_XL이 돌아가던 곳이면 어디든 똑같이 돌아가는데 성능만 더 좋음.
- 샘플 데이터(위키피디아에서 가져옴)를 기반으로 여러 레이어에 걸쳐 누적된 오차를 보정하기 위해 가중치를 직접 수정하는 또 다른 Hessian 최적화 방식으로, 잃어버린 정밀도를 일부 복구함. 난 여기서 더 좋은 결과가 나온 Google/Deepmind 버전의 프로세스를 사용했음.
이것도 사용자한테는 완전 공짜임. 그냥 양자화된 GGUF 파일이 BF16 원본에 더 가까워지게 만드는 것뿐임. 사용자들은 그냥 쓰면 됨.
- 랜덤 하다마르 변환(Hadamard transform) + 스케일링: 이건 3D 기하학에서 쓰는 트릭인데, 모든 값을 거의 동일하게 만든 다음 추가 스케일링 팩터를 써서 양자화 압축 효율을 최적화하는 방식임(엄밀히 말하면 3D는 아니고 n=2048인 nD지만, 2D 이상에서도 적용됨). 이건 추론 성능을 약간 깎아먹음(그리고 커널을 다시 짜야 하는데 생각보다 훨씬 빡셈. 뭐 20% 정도 느려져도 상관없다면 쉽겠지만, 며칠 밤낮 고민하면서 삽질하면 0.8% 수준까지 줄일 수 있음).
이것도 아주 좋긴 한데, Google 버전이 더 낫긴 함. 근데 그게 진짜 문제는 아님.
이 변환도 압축에 도움을 주긴 하는데(사실 NVFP4가 하려는 거랑 비슷한데 이게 더 나음), 추론할 때 추가 단계가 필요함(추론 과정을 잘 설계 안 하면 2단계가 필요한데, 한 단계는 가중치에 미리 "구워버릴" 수 있음). 즉, llama.cpp를 포함해서 모델을 돌릴 모든 곳에 패치가 필요하다는 뜻임(mlx는 작동 방식 덕분에 추론 소프트웨어 업데이트 없이 mlx 버전을 만들 수 있긴 함. 하지만 GGUF 기반 추론 소프트웨어는 업데이트가 필수임).


