Files
variet_llm/docs/v3_fast_retuning_log.md
Variet-Worker 0dee779a73 refactor(phase-01): v3 retune fast & balanced roles
fast (Gemma 4 26B-A4B):
- Enable mmproj GPU loading (vision ~1s, 12x faster than CPU)
- KV f16 → q8_0 (save ~2.5 GB VRAM for mmproj)
- Tensor split 0.5,0.5 → 0.43,0.57 (13/17 layers)
- Remove --mlock/--poll/--prio/-t/-tb (no measurable impact)
- measured_tps 74.65 → 71.89 (trade 3.7% speed for vision)

balanced (Qwen 3.5 35B-A3B):
- Tensor split 0.5,0.5 → 0.48,0.52 (enables pipeline parallelism)
- Ubatch 128 → 256 (prefill +78%: 649 → 1,157 t/s)
- mmproj + --no-mmproj-offload (CPU vision, VRAM headroom)
- Remove useless flags same as fast
- measured_tps 61.62 → 64.16 (+4.1%)

Other:
- Document full retuning in docs/v3_{fast,balanced}_retuning_log.md
- Session report at .planning/reports/20260411-session-report.md
- Add bench utilities: bench_short/bench_long/test_ts_ratios
- Speculative decoding (E2B draft) experimented but rejected
  (+14% gen vs -31% cold start + tokenizer mismatch + mmproj conflict)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 14:55:27 +09:00

6.7 KiB
Raw Permalink Blame History

v3 — Fast Role Retuning Log (Gemma 4 26B-A4B)

Date: 2026-04-11 Target role: fast (Gemma 4 26B-A4B Q4_K_M) Goal: 레퍼런스 measured_tps: 74.65 재검증 및 vision 지원 추가 Result: Text 71.89 t/s + Vision GPU 인코딩 ~1초 + VRAM 여유 ~2 GB Status: 확정


1. 재튜닝 동기

  • 기존 fast 설정(f16 KV, --prio/--mlock/--poll 등)이 Phase 01 시점 단일 GPU 기준으로 튜닝됐음
  • 듀얼 GPU 환경 + 비전 지원 추가 필요
  • balanced 재튜닝과 동일한 기준으로 재검증

2. Gemma 4 26B-A4B 아키텍처 실측 데이터

architecture:  gemma4
file size:     15.63 GiB (Q4_K_M, 5.32 BPW)
n_layer:       30
n_head_kv:     [8,8,8,8,8,2, 8,8,8,8,8,2, 8,8,8,8,8,2, 8,8,8,8,8,2, 8,8,8,8,8,2]
n_expert:      128 (8 active)
n_ctx_train:   262144 (256K native)

핵심 구조: 매 6번째 레이어만 full attention (n_head_kv=2), 나머지 25개는 SWA (Sliding Window Attention). KV 캐시는 5 full attention 레이어만 큰 공간 차지.

KV 캐시 실측 비교

컨텍스트 f16 q8_0 q4_0
Full attention (5 layers) 5,120 MiB 2,720 MiB ~1,360 MiB
SWA (25 layers, 1,536 cells) 300 MiB 159 MiB ~80 MiB
총계 5,420 MiB 2,879 MiB ~1,440 MiB

3. VRAM 배치 (-ts 0.43,0.57)

13/17 레이어 분할:

Model:     CUDA0 7,146 / CUDA1 8,857 MiB
KV q8_0:   CUDA0 1,088 / CUDA1 1,632 (FA) + CUDA0 ~70 / CUDA1 ~90 (SWA)
mmproj:    1,138 MiB (CUDA0, --mmproj-offload 기본)
Compute:   CUDA0 ~820 / CUDA1 ~528 (PP fallback)
Overhead:  ~300 MiB per GPU

합계:      GPU0 10,924 MiB (여유 1,192) / GPU1 11,230 MiB (여유 881)

4. -ts 비율 스윕 결과

-ts 분할 CUDA0 model CUDA1 model 결과
0.5,0.5 15/15 8,177 7,826 mmproj OOM
0.47,0.53 14/16 7,708 8,295 mmproj OOM
0.43,0.57 13/17 7,146 8,857 최적
0.4,0.6 12/18 6,676 9,327 vision decode crash (CUDA1 OOM)

0.43,0.57이 mmproj + 양쪽 GPU 여유의 스윗 스팟.


5. -ub / -b 스윕 결과

짧은 프롬프트(170 tok) vs 긴 프롬프트(3,100 tok) 양쪽 측정:

설정 Prompt 읽기 Gen 쓰기 VRAM 여유 (G0/G1)
ub 128 74.95 (-ts 0.5)
ub 256 1,429 67 411/539
ub 512 (확정) 1,672 66.67 1,192/881
ub 768 1,695 65.94 761/603
ub 1024 init OOM
ub 2048 init OOM

-ub 512가 스윗 스팟. 더 크게 해도 이득 마진 작음 (1.3%) + VRAM 위험 증가.


6. KV 캐시 양자화 비교

KV Text (short) Text (long gen) VRAM 여유
f16 (초기) 73.43 t/s 298/427
f16 + mmproj CPU 73.67 266/427
q8_0 73.20 1,321/1,925
q8_0 + mmproj GPU 71.89 66.67 1,192/881

q8_0 전환으로 VRAM 2.5 GB 추가 확보 → mmproj GPU 장착 가능. 품질 손실 미미.


7. Vision 인코딩 (mmproj GPU)

640×640 JPEG 고양이 이미지, 3회 반복:

단계 시간 비고
이미지 인코딩 (GPU) ~1,000 ms 283 토큰, 280 t/s
생성 후속 72 t/s Text와 동일
per-image 총 시간 ~2.4초 1s encode + 1.4s gen

CPU 오프로드 대비 ~12배 빠름 (Config 2 mmproj CPU: 12.4초). GPU 장착 가치 있음.


8. Speculative Decoding 실험 (채택 안 함)

Draft 모델 gemma-4-E2B-it-Q4_K_M.gguf 사용한 추측 디코딩 실험:

항목 결과
Gen 평균 (5회) 75.68 t/s (Run 1 49.68 포함)
Gen BEST 86.18 t/s (+18%)
Gen Run 2-5 평균 82.18 (+14%)
Cold start (Run 1) 49.68 t/s (-31% vs baseline)
Acceptance rate 82% (일반 텍스트)
Tokenizer 불일치 경고
mmproj 호환 추가 튜닝 필요

결론: 채택 안 함. 이유:

  1. +14% 이득 vs 복잡성 폭증 (flag +5개, draft 모델 관리)
  2. Cold start -31% 페널티 — idle 후 첫 응답 느림 (Hermes Agent 사용 패턴 상극)
  3. mmproj 추가하려면 draft 제거해야 함
  4. tokenizer 불일치 오버헤드 상시 발생
  5. acceptance rate 워크로드 의존 (한국어/코드는 더 낮을 것)

9. 제거된 옵션

옵션 제거 이유
--prio 3 전용기, 경쟁 없음
--mlock mmap 페이지 잠금 불필요
--poll 50 -np 1 단일 요청 환경
-t 6 / -tb 6 -ngl 999 풀 GPU 오프로드라 무의미

balanced 재튜닝과 동일한 검증 거침. Text 속도 영향 오차 범위.


10. 최종 확정 옵션

{
  "fast": {
    "display_name": "Gemma 4 26B (Fast)",
    "model_path": "models/gemma-4-26B-A4B-it-Q4_K_M.gguf",
    "measured_tps": 72.04,
    "args": [
      "--mmproj",        "models/gemma-4-26B-mmproj-F16.gguf",
      "-ngl",            "999",
      "-c",              "262144",
      "-np",             "1",
      "-fa",             "on",
      "--cache-type-k",  "q8_0",
      "--cache-type-v",  "q8_0",
      "-ub",             "512",
      "-b",              "2048",
      "-ts",             "0.43,0.57"
    ]
  }
}

11. 최종 실측 성능

Text 추론

시나리오 Prompt t/s Gen t/s
짧은 프롬프트 (170 tok, 5회) 71.89 (BEST 72.91)
긴 프롬프트 (3,100 tok, 3회) 1,672 66.67

Vision 추론 (GPU mmproj)

단계 시간/속도
이미지 인코딩 (640×640) ~1,000 ms
이미지 토큰 수 283
생성 속도 72 t/s

VRAM 최종

GPU 0  10,924 MiB (여유 1,192 MiB)  Gen3 x4
GPU 1  11,230 MiB (여유   881 MiB)  Gen4 x16

12. Phase 01 대비

항목 Phase 01 v3 재튜닝
측정치 74.65 t/s 71.89 t/s
차이 -2.76 (-3.7%)
GPU 구성 단일 듀얼 (비대칭 PCIe)
mmproj 없음 GPU 지원
KV f16 q8_0
VRAM 여유 2,073 MiB

약 3.7% 속도 손실 대신 Vision 기능 확보. 비대칭 PCIe (GPU0 x4) 구조에서 듀얼 GPU로 돌리는 비용. 단일 GPU로 돌아가려면 --cpu-moe + -ngl 조정 필요하지만 현재 검증 안 됨.


13. Speculative Decoding 관련 정리

E2B 드래프트 모델(gemma-4-E2B-it-Q4_K_M.gguf, 2.9 GB) 및 mmproj(gemma-4-E2B-mmproj-F16.gguf, 940 MB) 파일은 최종 채택 안 됨. 세션 중 실험 후 삭제 권장 (총 3.8 GB 디스크 회수).


Document sealed: 2026-04-11