Q8 양자화된 Qwen2.5-27B 모델로 32GB VRAM에서 100K 컨텍스트 달성 시도
요약
32GB VRAM 환경에서 Qwen2.5-27B Q8 양자화 모델을 사용하여 100K 컨텍스트 길이를 확보하기 위한 실험적 시도를 다룹니다. KV 캐시 양자화와 특정 옵션 설정을 통해 제한된 메모리 내에서 컨텍스트 길이를 극대화하는 방법을 공유합니다.
핵심 포인트
- Q8 양자화 모델 사용 시 Q5/Q6보다 높은 성능 체감
- KV 캐시 양자화(Q8_0)를 통한 VRAM 효율화
- 32GB VRAM에서 약 95K 컨텍스트 구현 성공
- -b 및 -ub 옵션 활용 시 약 100MB VRAM 절약 가능
튜토리얼이라기보다는, 32GB VRAM 환경에서 Qwen2.5-27B 모델의 Q8 양자화 버전을 사용하여 더 높은 컨텍스트 (Context) 길이를 확보하려 했던 저의 시도를 공유하는 글입니다.
면책 조항: 심층적인 연구는 아닙니다. 대중적인 의견은 Qwen이 모델 양자화 (Quantization)에 더 관대하다고 하지만, 제 경험은 다릅니다. 이를 뒷받침할 정량적인 데이터는 없으며, 단지 몇 가지 개인 프로젝트(규모가 아주 크지는 않지만 몇 주 동안 작업해 온 것들)를 '바이브 코딩 (vibe coding)'하는 데 사용하며 느낀 개인적인 경험일 뿐입니다.
배경: 저는 Q8 양자화에서 약 60K 컨텍스트를 쉽게 실행할 수 있었고, (순전히 주관적인 경험이지만) Q6나 Q5보다 성능이 더 좋다는 것을 발견했습니다. 하지만 Q5와 비양자화 KV 캐시 (unquantized kv)를 사용하면 128K 컨텍스트를 쉽게 확보할 수 있었기에, Q8로 어디까지 밀어붙일 수 있는지 확인해보고 싶었습니다.
시스템: 5090 및 64GB 시스템 RAM. 헤드리스 (headless) Ubuntu가 실행 중인 원격 서버.
몇 번의 시행착오 끝에 다음과 같은 방법이 작동한다는 것을 알아냈습니다. 참고 사항:
- VRAM이 거의 한계치에 도달해 있으며, 긴 코딩 컨텍스트의 경우 공간 확보를 위해 컨텍스트 길이를 약간 줄여야 할 수도 있습니다.
- 제가 사용 중인 벤치마크는 단순히 토큰 추론 속도 (token inference speed)만을 위한 것입니다. 그 이상은 아닙니다.
- -b 및 -ub 옵션을 사용하면 VRAM을 약 100MB 정도 절약하는 데 도움이 됩니다.
Option 1: 95K context, KV: Q8_0 and Q8_0, 시작 시 VRAM: 230MB, 벤치마크 후 VRAM: 90MB
bash build/bin/llama-server \ -m ~/myp/models/bartowski_Qwen_Qwen3.6-27B-Q8_0.gguf \ --temp 0.6 \ --top_p 0.95 \ --top_k 20 \ --min_p 0.0 \ --repeat-penalty 1.0 \ --presence-penalty 0.0 \ -c 95000 \ -t 16 \ -ngl 99 \ --flash-attn on \ --host 0.0.0.0 --port 8080 \ --no-mmproj \ --spec-type draft-mtp \ --spec-draft-n-max 4 \ --parallel 1 \ -kvo \ -ctk q8_0 \ -ctv q8_0 \ -b 1024 \ -ub 256
Aggregate: {
``` python3 mtp_bench.py code_python pred= 192 draft= 181 acc= 145 rate=0.801 tok/s=142.0 code_cpp pred= 192 draft= 220 acc= 136 rate=0.618 tok/s=119.8 explain_concept pred= 192 draft= 246 acc= 128 rate=0.520 tok/s=105.1 summarize pred= 192 draft= 176 acc= 146 rate=0.830 tok/s=146.0 qa_factual pred= 192 draft= 202 acc= 140 rate=0.693 tok/s=128.8 translation pred= 192 draft= 245 acc= 129 rate=0.526 tok/s=106.0 creative_short pred= 192 draft= 248 acc= 128 rate=0.516 tok/s=104.7 stepwise_math pred= 192 draft= 197 acc= 141 rate=0.716 tok/s=131.2 long_code_review pred= 192 draft= 220 acc= 135 rate=0.614 tok/s=116.1
Aggregate: { "n_requests": 9, "total_predicted": 1728, "total_draft": 1935, "total_draft_accepted": 1228, "aggregate_accept_rate": 0.6346, "wall_s_total": 15.84 } ```
Option 3: 115K context, KV: Q8_0 and Q4_0, VRAM when starting: 290MB, VRAM after bench: 150MB.
build/bin/llama-server \ -m ~/myp/models/bartowski_Qwen_Qwen3.6-27B-Q8_0.gguf \ --temp 0.6 \ --top_p 0.95 \ --top_k 20 \ --min_p 0.0 \ --repeat-penalty 1.0 \ --presence-penalty 0.0 \ -c 115000 \ -t 16 \ -ngl 99 \ --flash-attn on \ --host 0.0.0.0 --port 8080 \ --no-mmproj \ --spec-type draft-mtp \ --spec-draft-n-max 4 \ --parallel 1 \ -kvo \ -ctk q8_0 \ -ctv q4_0 \ -b 1024 \ -ub 256
``` python3 mtp_bench.py code_python pred= 192 draft= 186 acc= 144 rate=0.774 tok/s=138.7 code_cpp pred= 192 draft= 183 acc= 145 rate=0.792 tok/s=142.6 explain_concept pred= 192 draft= 215 acc= 136 rate=0.633 tok/s=119.7 summarize pred= 192 draft= 175 acc= 146 rate=0.834 tok/s=145.9 qa_factual pred= 192 draft= 196 acc= 141 rate=0.719 tok/s=131.6 translation pred= 192 draft= 230 acc= 133 rate=0.578 tok/s=113.1 creative_short pred= 192 draft= 229 acc= 133 rate=0.581 tok/s=113.1 stepwise_math pred= 192 draft= 181 acc= 145 rate=0.801 tok/s=142.3 long_code_review pred= 192 draft= 213 acc= 137 rate=0.643 tok/s=120.2
Aggregate: { "n_requests": 9, "total_predicted": 1728, "total_draft": 1808, "total_draft_accepted": 1260, "aggregate_accept_rate": 0.6969, "wall_s_total": 14.93 }
제출자: /u/BitGreen1270
[링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기