모델 아키텍처 특정 동적 양자화 기법에 대한 진행 상황 - v1
요약
본 글은 모델의 양자화(quantization) 기술에 대한 연구 진행 상황을 공유합니다. 기존 RCO나 GSQ 같은 복잡한 기법 대신, 저렴하고 효율적인 근사치를 활용하여 텐서별 최적 양자화를 시도하는 방법론을 제시합니다. 이 과정은 민감도 분석과 국소 탐색(local search)을 반복하며 KL 발산을 최소화하는 방식으로 진행됩니다.
핵심 포인트
- 저비용의 RCO-lite 근사치를 통해 텐서별 최적 양자화를 시도함.
- 민감도 '곡선'을 만들어 어떤 텐서가 양자화에 가장 큰 영향을 받는지 추정합니다.
- 반복적인 국소 탐색과 검색 오류 복구 과정을 거쳐 모델의 정확도를 유지하며 크기를 줄입니다.
- 제시된 방법은 VRAM 사용에 보수적이며, 기존 방식 대비 높은 효율성을 기대할 수 있습니다.
여러분, 안녕하세요. 제가 새로운 수학이나 일부 양자화 기술의 최적화 자체에서 혁신적인 것을 발명하고 있는 것은 아니지만, 전반적으로 결과가 잘 나오고 있어서 매우 만족합니다. 제가 작업하는 것은 기본적으로 RCO(IST Austria dAS lAB의 양자화 방법)의 '저렴한 버전'입니다. 개념은 완전히 동일합니다: 전체 모델에 대한 task KL을 최적화하면서 바이트 예산 내에서 텐서별로 타입을 선택하는 것입니다. GSQ를 구현해 보았지만, 아직 기준선(baseline)을 능가하는 근사 방법을 가지고 있지는 않습니다. 이 방법의 핵심 원리를 가져와 더 저렴한 근사치로 만들고 가능한 한 많은 정확도를 되찾는 것이 목표입니다. 원래는 근사적인 GSQ-RCO 하이브리드를 만들 계획이었지만, GSQ에 대한 근사 모델 중 어느 것도 아직 기준선을 능가하지 못했습니다. 실제 적용 방법은 다음과 같습니다: 먼저 전체 정밀도(full precision) 모델로 시작하여 텐서별 'imatrix shape' 맵을 생성합니다. 이것이 개별 텐서의 민감도를 계산하는 것은 아니지만, 외삽법(extrapolation)을 통해 어떤 텐서가 양자화로 인해 가장 큰 영향을 받는지 근사할 수 있는 민감도 '곡선'을 만듭니다. 이를 통해 텐서별 최적 양자화를 위한 기준선 추정치를 얻습니다. 다음으로: 국소 탐색(local search)을 통한 반복적인 시행착오를 거칩니다. 기준선 추정치의 파일 크기를 가져와, 전체 모델 크기를 줄이기 위해 클래스별로 다른 정밀도를 대입합니다. 이때 근사 모델이 양자화에 가장 민감하다고 표시한 텐서부터 시작합니다. 작동하는 최적 버전이 파일 크기 제한 이하에 도달하면, 파일 크기를 거의 동일하게 유지하면서 변형된 대체(substitutions)를 시도합니다 (특정 텐서를 업그레이드하거나 다운그레이드하는 등 - 기본적으로 국소 탐색이 끝난 후의 허점을 찾는 것과 같습니다). 위 전체 과정(반복적인 국소 탐색 + 검색 오류 복구 [실제로는 오류가 아니라 제가 찾고 있는 단어가 없습니다])을 거치면서 모델은 양자화되고, KL 발산(KL divergence)이 이전 반복들과 비교 측정됩니다. KL 발산이 증가하는 것은 폐기합니다.
결과: 최적에 최대한 가깝게 반복된 근사 RCO 스타일 양자화(quant)입니다. 이것이 GSQ-RCO나 Unsloth의 동적 V3를 능가할 것이라고 기대하나요? 확실히 GSQ-RCO나 일반 RCO는 물론, unsloth 방식도 아닐 것입니다. 하지만 몇 가지 장점이 있습니다: 이 방법은 저렴하고 VRAM 사용에 매우 보수적입니다. 교사 모델(teacher model)은 토큰당 로그 확률(log probs)을 덤프하는 용도로 한 번만 로드하면 됩니다. 이는 GPU에서 빠르지만, 단지 한 번만 수행해야 하므로 약간의 인내심을 가지고 CPU에서도 할 수 있습니다. 그 이후 모든 단계는 imatrix 곡선 근사(approximation)에서 시작하여 후보들만을 GPU로 가져옵니다. 따라서 필요한 것은 근사 최종 양자화 크기(iterate를 위한 약간의 버퍼 포함, 아마 20~25% 더 많으면 최적일 것입니다)에 충분한 VRAM뿐입니다. 전체 과정은 무엇을 하느냐에 따라 몇 분에서 몇 시간이 걸립니다. 위에는 재현 가능한 유사 알고리즘(pseudo-algorithm) 접근 방식을 거의 문서화했지만, 관심 있는 사람이 있다면 더 나은 문서를 제공할 수 있습니다. Qwen 3.5 2B에 대한 초기 결과: imatrix를 사용한 llama.cpp IQ3_M - 999mb 대 imatrix를 사용한 RCO-lite - 1088mb [+89mb] 평균 KLD(Mean KLD) for IQ3_M: 0.098381 평균 KLD for RCO-lite dynamic mixture [+89mb]: 0.045162 -- 89mb 더 많은 크기 대비 거의 정확히 절반입니다. 평균 KLD for RCO-lite dynamic mixture [cap 1038, + 39mb]: 0.0793220 평균 KLD for RCO-lite dynamic mixture [cap 947, - 52 mb]: 0.090624 -- 여전히 IQ3_M 양자화보다 좋지만 52mb가 적습니다. 이것들을 초기 결과로 받아들이세요. 제 KLD 실행에 대한 정확한 +-를 문서화하는 것을 잊었지만, 범위는 일반적으로 i quant보다 낮았습니다. 이 알고리즘이 어떤 BPW(Byte Pair Width) 범위에서 가장 효과적으로 작동하는지 알아내기 위해 다양한 다른 크기 목표를 시도해야 하며, 이것은 단지 IQ3_M - IQ4_XS가 이 설계보다 더 나은 KLD를 가졌다는 것과 비교했을 뿐입니다. 더 많은 BPW이므로 정확한 추정치는 아니지만, 그다지 크게 차이는 아닙니다. 아직 IQ4_XS 크기 범위 내에 최적 모델을 맞추려고 시도하지 않았는데, 그것은 단지 제가 알아차린 것입니다.
Q3 및 Q2 범위가 이 부분에서 가장 큰 이점을 얻을 것이라고 생각합니다. 아직 더 높은 BPW 범위에서는 시도해보지 못했습니다. 현재 Q2 실험 중간 단계입니다. 또한: 저의 기준선(baseline) llama.cpp 양자화 모델들은 RCO-lite 양자화 모델들과 마찬가지로 imatrix에 대해 동일한 wikitext 세트를 사용해 보정되었으며, KL 다이버전스 계산에도 동일하게 제외된(held out) 세트가 사용되었습니다. 감사합니다. 제출자: /u/jjusko20 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기