AI
✓팩트검증✓코드검증validate.py발행 · 유의

[기획: AI 트렌드] 5.9GB라던 27B 모델, 본가 llama.cpp가 읽게 된 형식은 약 7.2GB였다

2026.10.12·읽기 12분

9월에 발표된 모델이 10월 11일에야 본가에서 돌게 됐다

10월 11일, llama.cpp에 Bonsai 2 27B를 돌리는 코드가 합쳐졌습니다. llama.cpp는 AI 언어 모델을 내 컴퓨터에서 돌리게 해 주는 공개 실행기입니다. 외부 개발자가 코드 변경을 제안하는 요청을 PR이라고 합니다. 관리자가 PR을 받아들여 본 코드에 합치는 일은 머지라고 합니다. 이번 PR은 모델을 만든 PrismML 소속 개발자가 냈습니다. 같은 날 이 변경을 담은 새 빌드도 사전 릴리스로 공개됐습니다.

모델 자체는 9월 17일에 이미 발표돼 있었습니다. AI 모델의 지식은 학습으로 얻은 수많은 숫자에 담기는데, 이 숫자들을 가중치라고 합니다. 보통은 가중치 하나하나를 정밀한 소수로 적습니다. 발표 보도(검색 요약으로 확인)에 따르면 이 모델은 다릅니다. 가중치를 -1, 0, +1 세 값 가운데 하나로 적는 3진 가중치를 썼습니다.

가중치를 더 적은 비트로 줄여 저장하는 일을 양자화라고 합니다. 이 모델처럼 거의 끝까지 줄인 모델은 극저비트 모델이라고 부릅니다. PrismML은 이렇게 해서 모델 파일을 5.9GB에 담았다고 내세웠습니다.

그런데 PrismML은 저장소 설명 문서(README)에 단서를 달아 두었습니다. 손대지 않은 llama.cpp로는 이 파일들을 돌릴 수 없다는 것입니다. 돌리려면 PrismML이 따로 고친 llama.cpp가 필요했습니다. 이렇게 원 프로젝트의 코드를 복제해 따로 고친 갈래를 포크라고 합니다. 원 프로젝트는 이 글에서 본가라고 부릅니다. 적어도 본가가 목표로 삼은 2비트급 형식에서는, 발표 뒤 본가에서 돌아가기까지 막혀 있던 것이 가중치 파일이 아니었습니다.

1,024칸 회전과 512칸에서 멈춘 GPU 커널

이 모델은 아다마르(Hadamard) 회전이라는 계산을 씁니다. 숫자 1,024개를 한 묶음으로 잡고, 칸마다 묶음 전체의 값을 정해진 부호로 더해 넣는 계산입니다. 유난히 큰 값이 하나 있어도 그 크기가 모든 칸으로 고르게 퍼집니다. 물감 한 방울이 물 전체에 풀리는 것과 비슷합니다. 회전 자체가 파일을 줄이지는 않습니다. 다만 값이 고르게 펴져 있으면 적은 비트로 줄일 때 잃는 정보가 줄어듭니다. 이 모델의 파일은 이 회전을 전제로 만들어져 있습니다. 그래서 실행기가 모델을 돌리는 도중에 같은 회전을 맞춰 걸어 줘야 합니다. 이 계산을 모르는 실행기는 회전된 숫자를 그대로 읽는 셈입니다.

PR 토론에서 PrismML 밖의 한 참여자는 커널 폭의 차이를 짚었습니다. 커널은 그래픽 처리 장치(GPU)에서 특정 계산을 빠르게 해 주는 작은 프로그램입니다. 이 참여자에 따르면 본가의 Vulkan·CUDA용 고속 변환 커널은 512칸 묶음에서 멈춰 있었습니다. 1,024칸 회전을 쓰는 이 모델에 맞추려면 넓혀야 했던 부분으로 보입니다. 머지된 변경의 설명에는 회전용 데이터 처리와 변환 도구의 회전 설정도 들어 있습니다.

PR이 빠지면 어떻게 되는지는 PrismML 소속인 PR 작성자가 숫자로 보여 줬습니다. 기준은 퍼플렉시티(PPL)입니다. 모델이 다음 단어를 고를 때 얼마나 헷갈리는지를 잰 수치로, 낮을수록 덜 헷갈립니다. 작성자는 위키백과 글을 모은 시험용 글 모음 wikitext-2로 쟀습니다. 회전 처리가 들어가기 전의 본가로 같은 모델을 돌리자 PPL은 약 126만이었습니다. 다음 단어를 아무렇게나 찍는 것보다도 나쁜 수준으로, 출력이 무너졌다는 뜻입니다. PrismML의 README에도 같은 경고가 있습니다. 손대지 않은 본가에서 일부 형식은 열리기는 해도 알아볼 수 없는 출력이 나올 수 있다는 것입니다.

리뷰에서 오간 세부 쟁점까지는 우리가 확인하지 못했습니다. 머지 이틀 전 리뷰어 ggerganov가 수정을 요청한 뒤 승인했습니다. 머지 당일에는 리뷰어 CISC가 승인하고 머지했습니다. 그래도 PR이 더한 변경에는 회전 처리가 들어 있었고, PR이 빠진 본가에서는 출력이 깨졌습니다. 우리는 막고 있던 것이 본가 실행기의 회전 처리였다고 봅니다.

PrismML의 포크로는 발표 때부터 이 모델을 돌릴 수 있었습니다. PR의 시험 파일 이름 끝에도 「prism-fork-required」가 붙어 있습니다. PrismML의 포크가 필요하다는 뜻입니다. 그러니 이 글에서 막혀 있었다고 한 것은 본가 llama.cpp에서의 실행입니다. 모델 지원이 본가에 들어가면 사용자는 그 형식에 한해 PrismML의 실행기를 따로 받지 않아도 됩니다.

본가가 받아들인 것은 2비트급 형식이었다

PR 작성자가 PR을 넣은 본가로 시험한 파일은 2비트급 형식으로 만든 것입니다. 앞에서 PrismML이 열리기는 해도 출력이 깨질 수 있다고 적은 바로 그 형식입니다. PrismML이 README에서 본가 지원의 목표로 밝힌 공식 형식도 이것입니다. PR 작성자의 댓글에 따르면 이 파일은 약 7.2GB로, PrismML이 내세운 크기보다 큽니다.

PrismML이 내세운 크기는 포크에서 쓰는 더 작은 저장 형식 기준입니다. 가중치 하나에 평균 몇 비트를 쓰는지를 bpw라고 합니다. PrismML은 이 형식이 1.75 bpw라고 밝혔습니다. 이 형식을 본가에 넣는 PR은 따로 올라와 있습니다. 우리가 확인한 머지 당일에도 이 PR은 머지되지 않은 채 열려 있었습니다.

본가에 이미 있던 3진 형식으로는 안 되는 이유도 PrismML 측이 올린 그 PR에 적혀 있습니다. 배율은 저장한 수를 실제 크기로 바꿀 때 곱하는 수입니다. 기존 형식은 배율 하나를 쓰는 단위가 이 모델의 두 배입니다. 그래서 한 단위 안에 배율이 다른 두 무리가 들어가는데, 기존 형식에는 배율을 두 개 담을 자리가 없습니다. 그래서 기존 형식으로는 이 모델을 손실 없이 담을 수 없습니다.

PrismML의 데모가 기본으로 내려받는 파일도 이 작은 저장 형식이 아닙니다. README에 따르면 데모의 기본 형식은 용량이 더 드는 대신 입력 처리가 빠릅니다. 크기를 줄인 성과를 지우자는 말은 아닙니다. PrismML의 설명대로라면 본가에서 돌아가는 파일도 압축 전 원래 모델보다는 훨씬 작습니다. 우리가 짚는 것은 PrismML이 내세운 숫자와 본가에서 돌아가는 파일의 크기가 다르다는 점입니다.

형식 이름 · 본가가 받아들인 2비트급 형식 = Q2_0 · PrismML이 내세운 작은 저장 형식 = PTQ1_0, 별도 PR #29672(미머지) · 본가에 원래 있던 3진 형식 = TQ1_0 · 데모의 기본 형식 = PQ2_0

1.0001로 잴 수 있는 것과 없는 것

PR 작성자는 PR을 넣은 본가가 PrismML 포크와 거의 같은 결과를 낸다고 보고했습니다. 근거는 앞의 같은 시험용 글 모음으로 잰 두 수치입니다. 하나는 PPL 비로, PR을 넣은 본가의 PPL을 포크의 PPL로 나눈 수입니다. 애플 칩용 Metal 환경에서 이 비는 1.0001로, 사실상 같았습니다. 다른 하나는 본가와 포크가 가장 유력한 다음 단어로 같은 것을 고른 비율로, 99.98%였습니다. 엔비디아 GPU용 CUDA 환경에서는 차이가 조금 더 벌어졌지만, 두 수치 모두 1과 100%에 가까웠습니다. 모두 PrismML 소속 작성자가 직접 잰 수치입니다.

이 두 수치로 알 수 있는 것은 본가가 포크와 같은 계산을 하느냐입니다. 비교 대상은 포크입니다. 압축한 이 모델이 압축 전 원래 모델보다 얼마나 나빠졌는지는 이 수치에 들어 있지 않습니다. 그래서 PPL 비는 구현이 같다는 증거일 뿐, 압축 전 모델과 성능이 같다는 증거는 아닙니다.

우리가 연 원문 안에서 이 모델의 품질을 무언가와 견준 근거는 두 가지입니다. 하나는 PrismML이 README에 적은 한 줄입니다. 원래 모델이 가진 「지능」의 98.2%를 유지한다는 주장입니다. README에는 이 수치를 어떤 시험 문제 세트, 즉 벤치마크로 쟀는지 보여 주는 표가 없습니다. 다른 하나는 PrismML 밖의 한 참여자가 PR 댓글에 올린 소규모 시험입니다.

이 사람은 이 모델과, 발표 보도에 따르면 이 모델의 바탕인 Qwen 모델을 더 높은 비트로 줄인 파일을 견줬습니다. wikitext로 잰 PPL은 이 모델이 10.29, 비교 모델이 7.43이었습니다. 이 모델이 더 헷갈렸다는 뜻입니다. 같은 말을 맴돌거나 사실을 지어낸 답도 더 많았습니다. 시험한 본인은 그래픽 메모리를 덜 쓰고 더 낮은 비트로 줄인 파일이니 예상 범위라고 평했습니다. 한 사람의 시험으로 이 모델의 품질을 판정할 수는 없습니다. 그래서 우리는 품질을 미결로 둡니다.

머지 이후 확인할 것

본가가 받아들인 것은 이 모델의 여러 형식 가운데 하나입니다. 확인할 것은 셋입니다.

  • 더 작은 저장 형식의 머지. PrismML이 내세운 크기의 형식을 넣는 별도 PR이 머지되는지 봅니다. 그 전까지 본가에는 그 형식이 없습니다.
  • README의 문면. 본가 지원 현황을 적은 README 문면은 머지 전에 확인한 PR 상태를 기준으로 합니다. 머지 뒤 이 문면이 고쳐지는지 봅니다.
  • PrismML과 무관한 품질 시험. 지금 품질 근거는 PrismML의 주장과 한 사람의 소규모 시험뿐입니다. 더 많은 과제로 잰 독립 시험이 나오는지 봅니다.

우리는 이런 극저비트 모델의 배포가 파일을 공개한 날 끝나지 않는다고 봅니다. 실행기가 그 형식을 읽게 되는 날 끝납니다. 이 모델에서 그날은 발표보다 늦게 왔습니다. 그날 본가가 읽게 된 파일도 PrismML이 내세운 크기는 아니었습니다. 우리는 「오픈웨이트를 발표한 날, 내려받을 가중치는 없었다」에서 발표일과 가중치 공개일이 다르다고 봤습니다. 이번에는 가중치 공개일 뒤에도, 본가 실행기가 그 파일을 읽게 되는 날이 하나 더 있었습니다. 작은 파일로 큰 모델을 돌린다는 소식을 보면, 그 파일을 어느 실행기가 읽는지부터 확인하면 됩니다.

유의"루틴 6회차 · 캐스케이드 ①(GitHub 1차 직접 열람) · 직접 열람 도메인 = github.com뿐(HF·prismml.com·arXiv ENOTFOUND · 백서 PDF 추출 실패 · WebFetch 요약 모델 경유) · 벤더 자기보고(f4·f7)·제3자 단일(f9)·발표일 검색요약 경유(f10) · README 업스트림 상태는 09-25 문면 · 델타 R2 should-fix 2 미반영(L15 [f3] 표지 · L19 「아무렇게나 찍는 것보다도 나쁜」 원장 밖 전제) · nit 6 미반영 · planner·reviser 메인 수행(스폰 상한 8) · factcheck R1·lens-return 체크포인트가 리바이저 뒤 기록돼 source_sha가 수정본(판정 대상은 r0 76b8016bf107) · 예산 45분 초과(writer 22분) · pm 추가: L29 PR
출처
  1. 기준일 = 2026년 10월 12일 오전(한국 시간).
  2. 이번 정리에서 우리가 직접 연 원문은 GitHub에 있는 llama.cpp의 PR 두 건과 릴리스 페이지, PrismML 데모 저장소의 README뿐입니다. Hugging Face 모델 페이지와 PrismML 웹사이트는 접속하지 못했고, 백서는 텍스트를 추출하지 못해 읽지 못했습니다. 모델 발표 내용은 보도 원문을 열지 못해 검색 결과에 실린 요약을 거쳐 확인했습니다. 원문은 요약 모델을 거쳐 내용을 돌려주는 웹 열람 도구(WebFetch)로 읽어서, 핵심 문장은 인용으로 대조했지만 문단 전문은 한 줄씩 맞춰 보지 못했습니다. PR 작성자의 검증 수치와 README의 크기·품질 주장은 PrismML 측의 자기보고이고, 제3자 품질 시험은 한 사람의 소규모 시험입니다. README의 본가 지원 현황은 2026년 9월 25일에 확인한 PR 상태 기준입니다.
  3. 이해관계: Refract는 글을 분석하고 쓰는 엔진으로 Anthropic의 Claude를 씁니다. 이 글이 다룬 두 PR은 개발과 시험에 Anthropic의 Claude Code를 썼다고 밝혔습니다.
  4. 머지(2026-10-11)·작성자·시험 파일과 크기·회전 묶음 폭에 관한 댓글·작성자 검증 수치(wikitext-2)·리뷰 경과·제3자 품질 시험·Claude Code 사용 공개 — 직접 열람 ggml-org/llama.cpp PR #29600
  5. 같은 날 빌드 b11556(사전 릴리스) — 직접 열람 llama.cpp 릴리스 b11556
  6. 작은 저장 형식(PTQ1_0)·1.75 bpw·기존 3진 형식(TQ1_0)의 한계·미머지 상태(2026-10-11 열람)·Claude Code 사용 공개 — 직접 열람 ggml-org/llama.cpp PR #29672
  7. 5.9GB·1.75 bpw·데모 기본 형식(PQ2_0)·98.2% 주장·손대지 않은 llama.cpp의 실행 불가 문면과 본가 지원 계획 — 직접 열람 PrismML-Eng/Bonsai-demo README
  8. 모델 발표(2026-09-17)·3진 가중치·바탕 모델·포크 실행기 필요 — 보도 원문 미열람, 검색 요약 경유 SiliconANGLE(2026-09-18)
  9. 우리 이전 글 오픈웨이트를 발표한 날, 내려받을 가중치는 없었다
이 글은 AI와 함께 다차원으로 분석, 검증하고 집필자가 검수했습니다.