Ornith-1.0-35B Q3_K_M: ~17GB VRAM, BF16 대비 KLD 검증 완료
Ornith-1.0-35B Q3_K_M: ~17 GB VRAM, KLD-checked against BF16
핵심 요약
35B 모델을 Q3_K_M으로 양자화하여 17GB VRAM에서 구동 가능하게 만들고, KLD 검증을 통해 성능을 확인한 결과 공유.
- 모델 양자화 — 35B 모델을 Q3_K_M으로 최적화하여 17GB VRAM에서 구동 가능함.
- 성능 검증 — BF16 대비 KLD 및 Top-1 일치율을 측정하여 양자화 품질을 입증함.
- 버그 수정 — 추론 모드에서 응답이 비어있는 문제를 해결하는 서빙 스크립트 제공.
- 하드웨어 효율 — 메모리 대역폭 제한을 완화하여 단일 GPU에서 효율적인 추론 지원.
deepreinforce-ai/Ornith-1.0-35B 모델을 Q3_K_M으로 양자화해서 GPU 하나에 넉넉하게 들어가도록 만들었다.
업스트림 BF16 GGUF에서 llama-quantize로 직접 돌렸고, 16.01 BPW에서 3.87 BPW까지 줄였다. 용량은 디스크 기준 16.8GB / VRAM 로드 시 약 17GiB 정도 먹는데, Q4_K_M보다 21% 정도 작다. 레포에 있는 검증된 양자화 버전 중 제일 작으면서도 16-슬롯 서빙 프로필에서 14/14 행동 테스트 전부 통과함.
성능은 어떠냐고? 코딩 프롬프트 32개로 보정된 top-64 next-token KL(P_bf16 || P_quant) 프로브(토큰 ID 매칭, temp -1, n_probs 64, 캐시 끔)를 돌려서 BF16 베이스라인이랑 비교했으니까 Q3 수치도 나름 의미 있을 거다. 상위 양자화 버전들이랑 비교하면 이 정도 나옴.
Quant |Mean KLD |Top-1 match |size
**Q3_K_M |0.366** |84.4%. |16.8 GB.
Q4_K_M |0.086 |90.6% |21.2 GB
Q5_K_M |0.035 |93.8% |24.7 GB
Q6_K |0.017 |100.0% |28.5 GB
Q8_0 |0.011 |96.9% |36.9 GB Q3_K_M이 Q6_K 대비 top-1 일치율에서 16포인트 정도 손해 보긴 하는데, Q8_0보다 VRAM을 절반도 안 쓰니까(17 vs 36 GiB) 감안해야 함.
처리량(Throughput) (단일 GPU, llama.cpp CUDA 서버): 단일 스트림에서 초당 약 240 토큰, 16개 동시 슬롯에서 초당 약 493 토큰까지 나오고, p95 TTFT는 c1 기준 약 78ms 찍힘. 전체 c1/c4/c8/c16 스윕 결과는 레포에 다 있다.
작업하면서 한 것들:
추론 모드 서빙 버그 찾아서 고침. llama.cpp 추론 모드를 켜두거나 auto로 두면, 짧은 코딩 요청은 응답 예산을 전부 parsed reasoning_content에 다 써버려서 정작 결과물은 빈 상태로 나올 때가 있음. 서빙 스크립트는 기본적으로 REASONING=off로 설정했고, 행동 테스트는 14/14 통과함.
단일 GPU 서빙 스크립트 + OpenAI 호환성 검증 게이트 (/v1/models, /v1/chat/completions, /v1/completions 전부 확인 완료) 모든 양자화 버전에 적용함.
업스트림 Q4/Q5/Q6/Q8 미러링 및 재검증. 전체 레퍼런스 라인업을 한 레포에 몰아넣어서 Q3 성능 비교하기 쉽게 만들었음. 이 4개는 내가 다시 양자화한 게 아니라 업스트림 아티팩트 그대로 가져온 거임.
원스텝 LoRA SFT 스모크 테스트. 학습 스택이랑 데이터 파이프라인 검증용. 스모크 테스트만 돌린 거고 파인튜닝된 어댑터는 아직 없음.
참고: 내가 테스트한 vLLM 빌드에서는 GGUF 경로가 깨져 있었음(Q4_K_M은 로드되는데 출력값이 깨짐). 이 파일들은 그냥 llama.cpp 써라.
🔗 https://huggingface.co/LordNeel/Ornith-1.0-35B-GGUF-llamacpp-tp1
다들 도움 됐으면 좋겠네. 지금 397b 양자화 작업 중이고 현재 양자화 버전들 성능 개선도 계속할 예정임.
