Models & Algorithms•SOTAAZ Lab••EN

결정 모델은 얼마나 줄여도 될까: decider-4b를 BF16부터 Q2_K까지 llama.cpp로 재 봤습니다

공개 결정 모델 decider-4b를 GGUF 다섯 단계로 줄여 가며 TREC 질문 500개에 돌렸습니다. GPU 메모리는 BF16 10.4GiB에서 Q2_K 4.4GiB까지 줄었고, 정확도 차이는 어느 단계에서도 검출되지 않았습니다. 확률은 달라졌습니다. 로그 손실은 Q4_K_M에서 조금 좋아졌고 Q8_0(아주 조금), Q3_K_M, Q2_K에서는 나빠졌습니다. Q2_K는 답의 13%가 바뀌었고, Q3_K_M은 확률 0.9를 넘는 답이 40%에서 23%로 줄었습니다. Q4_K_M은 메모리를 절반으로 줄였고, 정확도 차이는 검출되지 않았으며 로그 손실은 좋아졌습니다.

결정 모델은 얼마나 줄여도 될까: decider-4b를 BF16부터 Q2_K까지 llama.cpp로 재 봤습니다

결정 모델은 얼마나 줄여도 될까: decider-4b를 BF16부터 Q2_K까지 llama.cpp로 재 봤습니다

결정 모델은 판단할 내용과 답이 정해진 질문을 받아 답마다 확률을 돌려줍니다. 이 모델을 쓰는 이유는 결국 그 확률입니다. 확률이 높으면 애플리케이션이 처리하고, 낮으면 사람에게 넘깁니다. 그러니 작은 GPU에 맞추려고 양자화할 때 봐야 할 것은 정답을 여전히 고르는지만이 아닙니다. 확률이 여전히 같은 뜻인지도 봐야 합니다.

decider-4b는 4B 크기의 공개 결정 모델이고, llama.cpp용 공식 GGUF 파일이 있습니다. 원저자는 큰 회귀 세트에서 BF16, Q8_0, Q4_K_M의 정확도, 로그 손실, 보정 오차를 이미 공개했습니다. Q4_K_M은 144,226행 중 97.06%에서 bf16 가중치와 같은 답을 냈습니다(GGUF 카드). 파일을 고르는 입장에서는 두 가지가 빠져 있습니다. Q4보다 작은 단계와, 단계마다 메모리를 실제로 얼마나 아끼는지입니다. 저희는 이 두 가지를 쟀습니다. 원저자가 이름을 밝힌 학습 데이터 목록에 없는 과제를 썼고, Decision-1 글에서 쓴 "이름이 정의와 어긋나는 선택지" 시험도 함께 했습니다.

먼저 말씀드리고 싶은 발견은 파일 크기가 아닙니다. 정확도 차이는 어느 단계에서도 검출되지 않았지만, 같은 0.9 기준에서 Q3_K_M이 받아들인 답은 23.2%로 BF16의 40.2%보다 적었습니다. 사람이 맡을 질문이 60%에서 77%로 늘어난다는 뜻입니다. 양자화는 메모리만이 아니라 사람이 처리할 일의 양도 바꿨습니다.

측정 방법

  • 파일

- 공식 파일: decider-4b v2.1의 BF16, Q8_0, Q4_K_M GGUF입니다. 받은 파일의 체크섬이 저장소와 일치합니다.

- 저희가 만든 파일: Q3_K_M과 Q2_K입니다. 공식 BF16 파일을 llama.cpp 4da6337의 llama-quantize 기본 설정으로 줄였고, importance matrix는 쓰지 않았습니다. 원저자가 만든 파일이 아닙니다.

  • 실행 환경: decider-ai 1.6.0과 llama-cpp-python 0.3.36(CUDA)으로 A100 한 장에 모든 층을 올렸습니다. 컨텍스트는 모든 단계에서 4,096으로 같습니다. GPU 메모리는 모델을 올리고 첫 질문에 답한 뒤 프로세스가 쓴 양입니다.
  • 데이터: TREC 질문 500개(답 종류 6가지)이고, 선택지마다 이름과 정의를 붙였습니다. decider-ai 1.6.0 소스(decider/data/core.py)의 공개 과제 구성에서 trec은 학습에서 뺀(held-out) 과제로, 아래에서 한 번 쓰는 ag_news는 학습 과제로 지정돼 있습니다. decider 자체의 미세조정에 무엇을 썼는지를 말해 줄 뿐이고, decider가 바탕으로 삼은 기반 모델이 TREC를 본 적이 없다는 뜻은 아닙니다.
  • 주 지표(채점 전에 정함): 작은 파일 네 개 각각을 BF16과 비교한 정확도와 로그 손실(NLL)입니다. 모두 비교 8개라 p값을 Holm 방법으로 한꺼번에 보정했습니다. 함께 적은 95% 구간은 일반 부트스트랩 구간이고, 다중 비교 보정을 하지 않은 값입니다. 보정 뒤에도 남는 차이만 차이로 보고, 방향은 어느 쪽이든 적습니다.
  • 판정 없이 보고한 것: 보정 오차(ECE), 최고 확률이 맞은 답과 틀린 답을 얼마나 잘 가르는지(AUROC), 0.9를 넘는 답의 비율, 그리고 BF16과 답이 달라진 비율입니다.

GPU를 다른 작업과 함께 써서 속도는 재지 않았습니다.

결과

다섯 파일(BF16, Q8_0, Q4_K_M, Q3_K_M(저희가 만듦), Q2_K(저희가 만듦))을 세 칸으로 비교한 그림입니다. GPU 메모리는 10.4, 6.8, 5.1, 4.7, 4.4GiB입니다. BF16 대비 로그 손실 변화(95% 구간 포함)는 Q8_0 +0.002, Q4_K_M −0.022, Q3_K_M +0.037, Q2_K +0.060입니다. BF16과 답이 달라진 비율은 0.2%, 1.2%, 3.2%, 13.2%입니다.
파일디스크 크기GPU 메모리BF16 대비 아낀 메모리정확도(변화, 95% 구간)로그 손실(변화, 95% 구간)BF16과 달라진 답
BF168.42GB10.4GiB—86.4%0.387—
Q8_04.48GB6.8GiB3.7GiB(35%)86.2%(−0.2, −0.6에서 0.0)0.389(+0.002, +0.001에서 +0.003)1개(0.2%)
Q4_K_M2.71GB5.1GiB5.3GiB(51%)86.4%(0.0, −1.0에서 +1.0)0.365(−0.022, −0.031에서 −0.015)6개(1.2%)
Q3_K_M(저희가 만듦)2.26GB4.7GiB5.8GiB(55%)86.0%(−0.4, −2.0에서 +1.2)0.425(+0.037, +0.022에서 +0.051)16개(3.2%)
Q2_K(저희가 만듦)1.92GB4.4GiB6.1GiB(58%)85.6%(−0.8, −3.8에서 +2.2)0.447(+0.060, +0.021에서 +0.099)66개(13.2%)

디스크 크기는 GB(10⁹바이트), GPU 메모리는 GiB(2³⁰바이트)입니다. 정확도 변화의 단위는 %p입니다.

정확도는 어느 단계에서도 차이가 검출되지 않았습니다. BF16 대비 변화는 −0.2, 0.0, −0.4, −0.8%p였습니다. 다만 Q2_K의 95% 구간이 −3.8에서 +2.2%p라서, 질문 500개로는 몇 %p 정도의 손실까지는 배제할 수 없습니다.

로그 손실은 양쪽으로 움직였습니다. p값을 Holm 방법으로 보정한 뒤의 판정입니다(구간은 보정 전).

  • Q8_0은 0.0017 나빠졌습니다(구간 0.0006-0.0028). 실제 차이지만 아주 작습니다.
  • Q4_K_M은 0.022 좋아졌습니다(구간 −0.031에서 −0.015).
  • Q3_K_M은 0.037 나빠졌습니다(0.022-0.051).
  • Q2_K는 0.060 나빠졌습니다(0.021-0.099).

Q4_K_M이 BF16보다 좋게 나온 것은 질문 500개에서 잰 결과입니다. 양자화가 원래 도움이 된다고 기대할 근거는 아닙니다. 원저자 표에서도 Q4_K_M의 로그 손실은 학습 과제 쪽 행에서는 조금 나빠지고, 학습하지 않은 과제 쪽 행에서는 조금 좋아졌습니다.

답이 달라졌다고 틀린 답이 된 것은 아닙니다. Q2_K는 66개의 답이 바뀌었습니다. 그중 28개는 Q2_K가 맞고 BF16이 틀렸고, 32개는 반대였고, 6개는 둘 다 틀렸습니다. 답이 많이 바뀌었는데도 정확도가 거의 그대로인 이유입니다. 하지만 BF16의 동작에 맞춰 조정해 둔 파이프라인이라면, 정확도와 상관없이 결정의 13%가 바뀌는 것 자체가 변화입니다. Q4_K_M에서는 6개가 바뀌었고 3개씩 양쪽으로 갈렸습니다. 저희의 일치율(Q8_0 99.8%, Q4_K_M 98.8%)은 원저자의 99.31%, 97.06%와 데이터도 규모도 달라서 비교하지 않습니다.

"0.9가 넘으면 바로 처리"는 어떻게 되나

파일0.9 이상인 답그중 틀린 답(건수, 95% 구간)ECE
BF1640.2%201개 중 3개(0.5-4.3%)0.054
Q8_039.4%197개 중 3개(0.5-4.4%)0.049
Q4_K_M39.8%199개 중 3개(0.5-4.3%)0.070
Q3_K_M23.2%116개 중 0개(0.0-3.2%)0.086
Q2_K31.0%155개 중 2개(0.4-4.6%)0.098

구간은 Wilson 95% 구간입니다.

Q3_K_M에서 0.9에 이른 답은 23.2%로, BF16의 40.2%보다 적었습니다(차이 −17.0%p, 구간 −20.4에서 −13.6). 받아들인 116개에서는 틀린 답을 관찰하지 못했습니다. 다만 그렇다고 안전하다는 뜻은 아니고, 116개라 구간이 3.2%까지 열려 있습니다. 분명한 비용은 따로 있습니다. 0.9 규칙을 쓰면 질문의 60%가 아니라 77%가 사람에게 넘어갑니다. 임계값은 그대로 두고 파일만 바꾸면, 정확도가 같아도 사람이 맡을 일의 양이 달라집니다.

BF16 대비 ECE 변화는 Q3_K_M +0.032(구간 0.006-0.058), Q2_K +0.044(0.014-0.068)이고, Q8_0(−0.006)과 Q4_K_M(+0.016)은 구간이 0을 포함합니다. 이 숫자들은 보고용이고 판정이 아닙니다. 사전에 정한 판정은 정확도와 로그 손실에만 적용합니다.

이름이 정의와 어긋날 때

Decision-1 글에서 쓴 뒤바뀐 선택지도 모든 파일에 넣었습니다. 정의마다 다른 범주의 이름을 붙였고, 정답은 언제나 정의가 뜻하는 범주입니다.

파일뒤바꿈 정확도이름을 따름뒤바꿈 AUROC선택지 순서를 뒤집었을 때 바뀐 답
BF1670.6%23.6%0.69911
Q8_071.0%23.2%0.69712
Q4_K_M77.4%16.4%0.76110
Q3_K_M68.8%23.6%0.60813
Q2_K66.2%23.6%0.63341

모든 파일이 이름보다 정의를 더 많이 따랐고, 모든 파일이 정상 라벨보다 정확도가 떨어졌습니다(−9.0에서 −19.4%p). 양자화한 파일이 BF16보다 이름을 더 많이 따르지는 않았습니다. 선택지 순서를 뒤집으면 모든 파일에서 답이 몇 개씩 바뀌었는데, Q2_K에서 가장 많이 바뀌었습니다. 500개 중 41개였고, 다른 파일은 10-13개(BF16은 11개)였습니다. AG News 기사 제목 200개에서 라벨을 뒤바꿨을 때도 Q2_K의 정확도는 80.0%로, BF16의 90.0%보다 낮았습니다.

어떤 파일을 쓸까

이 절은 위 표를 보고 내린 저희 판단이고, 사전에 정한 판정이 아닙니다.

  • Q4_K_M은 GPU 메모리를 10.4GiB에서 5.1GiB로 절반 넘게 줄였습니다. 이 과제에서는 정확도 차이가 검출되지 않았고 로그 손실은 좋아졌습니다. 0.9를 넘은 답은 39.8%로 BF16의 40.2%와 0.4%p 차이였고, 구간(−2.4에서 +1.6)이 0을 포함합니다. 저희라면 이 파일부터 쓰겠습니다.
  • Q8_0은 아끼는 메모리가 더 적고, 이번 측정에서는 Q4_K_M보다 나은 점이 보이지 않았습니다.
  • Q3_K_M과 Q2_K는 메모리를 0.4-0.7GiB 더 아낍니다. 그 대가로 로그 손실이 나빠졌습니다. Q3_K_M은 0.9를 넘는 답이 크게 줄었고, Q2_K는 답 여덟 개 중 하나가 바뀌었습니다. 선택지 순서를 뒤집었을 때 바뀐 답도 Q2_K는 41개로, BF16의 11개보다 많았습니다. 메모리가 그만큼 빠듯하다면, 바꾸기 전에 정답을 아는 사례로 임계값을 다시 확인하시기 바랍니다.

한계

  • 과제 하나, 질문 500개, 파일마다 한 번씩 돌렸습니다. 같은 요청을 다시 돌린 결과는 모든 파일에서 확률까지 똑같았습니다.
  • 저희가 만든 Q3_K_M과 Q2_K는 importance matrix 없이 llama-quantize 기본 설정으로 만든 파일입니다. 더 공들여 만든 저비트 파일은 결과가 다를 수 있습니다.
  • GPU 메모리에는 CUDA 컨텍스트가 포함되고, 컨텍스트 크기(여기서는 4,096)에 따라 달라집니다.
  • TREC는 짧은 6지선다 과제입니다. 입력이 길거나 선택지가 많은 질문은 양자화에 다르게 반응할 수 있습니다.

계획서, 스크립트, 파일 체크섬, 모든 답은 아래 재현 패키지에 있습니다.

이 글의 자료

재현 패키지

이 글의 하네스, 원 로그, 결과 CSV를 묶었습니다. 로그인 없이 받을 수 있고, GPU 없이 표의 숫자를 다시 계산하는 명령이 README에 있습니다.

decision-quant-repro.zip · 2,683 KB

받기