본문으로 건너뛰기

© 2026 Molayo

Reddit요약2026. 06. 15. 09:41

llama.cpp NVFP4/MXFP6 GGUF 양자화 도구 소개

요약

llama.cpp를 위한 NVFP4 및 MXFP6 GGUF 양자화 도구인 'advanced-quantizer-tool'을 소개합니다. 이 도구는 KLD 평가와 RSF 기술을 통해 모델 성능 손실을 최소화하며 최적의 양자화 블렌딩을 생성합니다.

핵심 포인트

  • NVFP4 및 MXFP6 형식을 GGUF로 직접 생성 가능
  • KLD 기반의 반복적 평가를 통한 정밀한 텐서 처리
  • RSF(Refined Scale Fitting) 기술로 양자화 성능 향상
  • 오차에 따라 텐서를 상위 형식으로 승격하는 Tensor promotion 지원
  • Blackwell 아키텍처를 위한 MXFP6 CUDA 구현체 포함

안녕하세요 여러분, 제가 작업한 것을 공유하고 싶었습니다. 작년에 llama.cpp를 위한 NVFP4 커널을 작성하기 시작했고, NVFP4 GGUF를 양자화할 수 있는 기능이 필요해서 이 프로젝트는 NVFP4 양자화기(quantizer)로 시작되었습니다. 이후 훨씬 더 크게 발전했습니다. 개선하는 데 도움이 될 만한 지원을 받고 싶습니다. 이것을 advanced-quantizer-tool (MIT license)라고 부릅니다. 이것은 NVFP4 및 MXFP6 모델을 GGUF로 직접 생성하는 데 사용됩니다. 하지만 훨씬 더 많은 것을 할 수 있습니다. 제가 이 도구로 만든 최신 모델들은 다음과 같습니다: Qwen3.6-27B-NVFP4-MTP-GGUF (version 3, 4-June-2026) 및 Qwopus3.6-27B-v2-MTP-NVFP4-GGUF. 저는 HF에 이전 개정판을 가진 몇 가지 다른 모델들을 가지고 있는데, 현재 양자화기만큼 좋지는 않지만 변환된 GGUF보다는 낫습니다. 평가 벤치마크는 매우 훌륭했고 성능이 아주 좋았습니다. 이 도구가 특별한 점은 다음과 같습니다: 기본 아이디어는 소스 BF16 GGUF, imatrix 데이터, 그리고 logits KLD 파일을 사용하는 것입니다. 그런 다음 양자화 방법을 검색하여 소스 모델과 비교했을 때 어떻게 유지되는지 확인합니다. 미리 정해진 요구 사항/메트릭, imatrix 및 kld 데이터를 기반으로 모든 후보와 양자화 유형을 평가하여 여러 방법을 하나의 최종 파일에 통합하는 최적의 최종 블렌딩을 만듭니다. 또한 제가

NVFP4 가중치(weight) 및 입력 텐서 스케일(scale)을 정확하게 생성합니다. 데이터셋을 위해 선택된 코퍼스(corpus) 입력을 대상으로 전체 모델에 대한 KLD(Kullback-Leibler Divergence) 평가를 반복 수행합니다. 민감한 텐서(예: 임베딩(embeddings), MTP/NextN 텐서, QKV, gate/up 쌍, 전문가(experts), 헤드 그룹(head groups)과 같이 관련된 그룹화된 텐서 등)를 보수적으로 처리합니다. 레시피(recipes), 원장(ledgers), RSF/후보 보고서(candidate reports)를 지원하며, 매니페스트(manifests), 체크포인트 키(checkpoint keys), 최종 텐서 할당 맵(final tensor assignment maps) 및 히스토그램(histograms)을 작성합니다. (Jack Cook, Junxian Guo, Guangxuan Xiao, Yujun Lin, Song Han이 개발한) 모델 내 6 대비 4 NVFP4의 뛰어난 개선 사항을 통합합니다. 다양한 기타 양자화 아이디어(AWQ 등)가 포함되어 있습니다. RSF (Refined Scale Fitting): RSF는 imatrix 가중 재구성 오차(reconstruction error)를 측정하고, 근처의 스케일 승수(scale multipliers)를 탐색하여 더 나은 격자 적합(lattice fit)을 선택합니다. 원래 저는 이를 NVFP4/MXFP6를 위해 수행했으나, 동일한 아이디어를 Q2/Q3/Q4/Q5/Q6 K 양자화에 적용했기 때문에 해당 양자화 성능도 향상됩니다. 텐서 승격 (Tensor promotion): 모든 것을 NVFP4(또는 지정된 형식)로 시작한 다음, 가중치 점수(weighted score)를 사용하여 남은 오차가 크기/속도 손실을 정당화할 때 최종 단계에서 텐서를 상위 형식으로 승격(up-promote)합니다. MXFP6 미래: Blackwell은 현재 MXFP6에 대한 네이티브 하드웨어 스케일링을 지원하지만, 아직 이를 위한 실제 커널(kernels)이 작성되지 않았고 관련 모델도 없었습니다. 그래서 저는 저에게 매우 잘 작동하는 완전한 MXFP6 CUDA 구현체를 작성했습니다. 저는 몇 가지 혼합형 NVFP4/MXFP6 모델을 게시한 적이 있는데(도구의 최신 개선 사항이 적용되기 전에 제작되었으므로 새 버전은 훨씬 더 나을 것입니다), 단 몇 개의 '취약한' 텐서만 NVFP4에서 MXFP6로 승격시켜도 모델 품질이 크게 향상된다는 것을 발견했습니다. 최신 MXFP6 커널은 모델이 모두 MXFP6일 때(예상대로 크기가 더 크기 때문에) 여전히 NVFP4보다 느리지만, 많은 발전을 이루었으며 최신 CUDA 빌드는 이제 거의 완성 단계에 있습니다. 양자화 오차 측면에서 MXFP6 품질은 NVFP4보다 우수합니다. 소량의 MXFP6 레이어를 포함한 NVFP4 모델은 (적어도 Blackwell에서는) 눈에 띄게 느려지지 않으며 모델 크기도 거의 증가하지 않습니다.

양자화 깊이 프리셋 (Quantization Depth Presets): 선택 가능한 세 가지 기본 모드가 있습니다. Fast: 더 작은 깊이 탐색, 가벼운 RSF 작업, 더 빠른 후보 필터링을 수행합니다. normal: 실제 진지한 실행을 위해 의도된 기본값입니다. 더 나은 GPU 리소스가 필요할 수 있으며, 속도는 더 느립니다. Deep: 개선된 검증을 포함하여 강도 높고, 더 넓으며, 철저한 탐색을 수행합니다. 이는 매우 느립니다. B200과 같은 대형 Blackwell GPU에서 이것이 어떻게 작동할지 정말 궁금합니다. RTX 5090에서 Qwen3.5-0.8B에 대한 모드 비교: 모드, 크기, 양자화 시간, 평균 PPL(Q), 평균 KLD, 99.9% KLD, RMS Δp, 동일한 top p. normal: 431.25 MiB, 35:48.81, 21.348164, 0.120205, 1.629277, 8.491%, 80.468%, 0.019304. deep: 432.18 MiB, 57:53.39, 21.017407, 0.100507, 1.245584, 7.672%, 81.869%, 0.016312. 셀렉터 단계 (selector stage)는 첫 번째 KLD 데이터로부터 평가되는 빠른 프록시 에러 (proxy error)를 사용하여 후보 정책들을 비교하고, 이를 캐싱한 다음, KLD 가드 (KLD guards)를 통해 텐서 승자를 찾습니다. 그 후 최종 텐서 후보 목록을 검토하며, 최종적으로 각 레이어를 최적의 최종 후보로 패치 (patch)합니다. CUDA 및 llama.cpp에 의해 구동됩니다. KLD 및 무거운 평가 작업은 가능한 한 CUDA를 사용하며, 최대한 많은 작업을 디바이스 (device) 내에서 유지하고 호스트/디바이스 간 복사를 줄이도록 설계되었습니다. 모델은 VRAM 내에서 반복적으로 패치되므로 디스크에는 단 한 번만 기록됩니다. 매 평가마다 레이어를 사용 가능한 각 후보 유형으로 재양자화 (requantizes)한 다음 KLD/PPL을 다시 확인하며, 이 과정은 메모리 내에서만 수행됩니다. 호스트 측 작업은 속도를 높이기 위해 병렬 CPU 워커 (parallel CPU workers)를 사용하며, 최대 스레드 수를 지정할 수 있습니다. 최종 GGUF 쓰기는 맨 마지막에만 수행됩니다. 이 도구는 사용 가능한 VRAM을 기반으로 KLD 평가에 사용할 n_seq를 결정하며, 디스크에 재사용 가능한 체크포인트 (checkpoints)를 기록하므로, 긴 실행 시간 동안 중단했다가 다시 시작하여 재개할 수 있습니다. 소스 KLD/BF16을 사용할 수 있다면, 이전에 양자화된 기존 GGUF 모델을 필요에 따라 편집하고 더욱 개선할 수 있습니다. 이는 또한 새로운 imatrix 파일을 사용하여 일종의 파인튜닝 (finetuning)을 수행하는 다른 방식으로도 사용될 수 있습니다. 저는 이를 더 정의된 방식으로 별도로 수행하는 것을 조사하고 있습니다.

연구를 위한 모듈화: 이 설계는 양자화(quantization)를 수행할 때 후보군(candidates)과 양자화 정책/기술(quantization policies/techniques)을 선택 사항으로 도입합니다. 하지만 새로운 것을 추가하는 것은 매우 쉽습니다. 만약 NVFP4(또는 다른 유형)를 양자화하는 더 나은 방법이 개발되거나 연구하고자 한다면, 새로운 방법론을 일반적인 C 또는 C++ 함수로 작성하여 정책(policies)과 후보군(candidates)에 추가하기만 하면 됩니다. 나머지 양자화, ppl/kld 처리, imatrix, 추론(inference), 백엔드 처리 등은 일반적인 llama.cpp와 동일합니다. 따라서 새로운 양자화 기술이나 방법론을 쉽게 테스트하고 비교할 수 있습니다. 이를 통해 실제 모델을 빠르게 제작하고 실제 환경에서 어떻게 작동하는지 확인할 수 있습니다. 텍스트 기반의 UI 위저드(wizard)가 있지만, 아직 완성되거나 완벽한 상태는 아니며 주요 초점도 아니었습니다. 저는 AI 코더가 이를 활용할 수 있도록 다양한 SKILLS/AGENTS MD 파일을 생성했습니다. 원하는 것을 정확히 말하면, MD 지침을 통해 무엇을 해야 할지 알게 될 것입니다. 하지만 이 모든 작업은 여전히 명령줄(command line)에서 수행할 수 있습니다.

알려진 문제점: CLI 플래그나 정의(defines)로 노출된 옵션과 파라미터가 너무 많아 이해하기 상당히 복잡합니다. 코드와 옵션의 상당 부분은 여전히 NVFP4가 유일한 양자화 대상이라고 가정하고 있습니다. 다양한 함수와 후보군 로직은 비대해진 AI 코드로부터 추가적인 인간의 정리가 필요합니다. ETA/진행 상황 보고가 완벽하지 않으며, 특히 후반부의 selector eval 단계에서는 상당히 오해의 소지가 있을 수 있습니다.

문서 개선 필요: 기능 구현이 완료되면 전체 프로세스가 더 단순화되어야 이점이 있을 것입니다. 중복된 후보군 로직을 제거하고 줄임으로써 속도를 훨씬 더 최적화할 수 있습니다. Qwen3.6-27B를 위한 딥 서치(deep search) 최적화 작업에 제 컴퓨터로 약 17시간이 소요되었습니다. 모델은 훌륭하지만, 이 방식은 너무 느립니다.

여러 개의 GPU로는 테스트하지 않았습니다 [저는 이 모든 과정을 단일 5090으로만 수행했습니다]. 어떤 후보를 우선적으로 선택할지 결정하기 위한 셀렉터 가이드(selector guidance)로서 "어떤 지표가 가장 중요한가"에 대한 점수 및 가중치 값은 저보다 이 분야를 더 잘 아는 분들에 의해 더 잘 조정될 수 있을 것입니다. 저는 이것이 모두에게 유용한 도구가 되고, NVFP4 및 MXFP6를 개선하는 데 도움이 되기를 희망합니다. PR(Pull Request)이나 이 도구를 더 개선하는 데 도움을 주시는 것은 언제나 환영합니다! /u/ElectronicStranger53가 r/LocalLLaMA에 제출함 [link] [comments]

AI 자동 생성 콘텐츠

본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0