Auto-fit vs 튜닝된 MoE 오프로드: 564 → 1330 pp tok/s, 디코딩 속도 유지 (Qwen3.6-35B-A3B Q6 / RTX 3090)
Auto-fit vs tuned MoE offload: 564 → 1330 pp tok/s, unchanged decode (Qwen3.6-35B-A3B Q6 / RTX 3090)
핵심 요약
MoE 모델의 전문가 레이어를 CPU로 일부 오프로드하여 VRAM을 확보하고, 배치 사이즈를 늘려 프롬프트 처리 속도를 2.36배 향상했습니다.
- MoE 오프로드 — 일부 전문가 레이어를 CPU로 옮겨 VRAM 확보함
- 배치 사이즈 최적화 — 확보된 VRAM으로 -b와 -ub 값을 대폭 상향함
- 성능 향상 — 프롬프트 처리 속도가 2.36배 빨라졌으며 디코딩 속도는 유지됨
- 실험적 접근 — 진화적 탐색(LEVI)을 통해 최적의 설정을 도출함
세 줄 요약: 24GB RTX 3090에서 64K 컨텍스트 돌리려고 Qwen3.6-35B-A3B Q6 모델 쓰는데, MoE 전문가 레이어 8개를 CPU로 넘기니까 VRAM 확보돼서 -b는 512에서 1024로, -ub는 128에서 512로 올릴 수 있었음.
프롬프트 처리 속도(PP)는 2.36배 빨라졌고, 생성 속도(TG)는 오차 범위 내에서 그대로임.
| Benchmark | Auto-fit baseline | Tuned | Result |
|---|---|---|---|
| PP4K | 564.5 tok/s | 1330.0 tok/s | 2.36× |
| TG4K | 97.4 tok/s | 97.7 tok/s | Within noise |
| TG32K | 81.6 tok/s | 84.0 tok/s | Within noise |
이건 4K 프롬프트로 측정한 PP랑, 4K/32K 컨텍스트 깊이에서 측정한 TG 결과임. 설정값은 64K 컨텍스트 요구사항에 맞춰서 잡은 거지, 64K 깊이에서 처리량 벤치마크 돌린 게 아님.
처음엔 auto-fit 써서 적당한 설정값부터 찾았음. 결과적으로 -b 512 -ub 128이 나왔고, 비교하기 편하게 아래 베이스라인 명령어에 박아놨음.
튜닝된 설정은 MoE 전문가 가중치 8개 레이어를 일부러 CPU로 넘긴 거임:
-ot 'blk\.(1[2-9])\.ffn_.*_exps\.weight=CPU' \
-b 1024 -ub 512 -ngl 41
이건 복합적인 설정 결과임. CPU 오프로드로 VRAM을 비우고, 그 확보된 메모리를 더 큰 배치/마이크로 배치에 써서 프리필(prefill) 속도를 올린 거임. CPU 오프로드 자체가 성능을 높여준다는 단편적인 소리가 아님.
전체 재현 방법
베이스라인(auto-fit 설정 재현):
llama-bench \
-m Qwen3.6-35B-A3B-UD-Q6_K.gguf \
-fitt 1024 -fitc 65536 \
-t 7 -b 512 -ub 128 \
-fa on -ctk q8_0 -ctv q8_0 -mmp 1 \
-p 4096 -n 64 -r 2 \
-d 4096,32768
튜닝 버전:
llama-bench \
-m Qwen3.6-35B-A3B-UD-Q6_K.gguf \
-t 7 -b 1024 -ub 512 -ngl 41 \
-fa on -ctk q8_0 -ctv q8_0 -mmp 1 \
-ot 'blk\.(1[2-9])\.ffn_.*_exps\.weight=CPU' \
-p 4096 -n 64 -r 2 \
-d 4096,32768
환경
- 모델:
unsloth/Qwen3.6-35B-A3B-GGUF - 양자화:
Qwen3.6-35B-A3B-UD-Q6_K.gguf, 27.3 GiB - SHA-256:
4fe53b148b46f9b88830e2a3055c5b15c3a4d1e3ddc9a1384a108d8b9d59f043 - GPU: RTX 3090, 24 GiB


