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>
7.5 KiB
GSD Session Report
Generated: 2026-04-11 Project: Variet LLM (2+0 GPU 로컬 AI 어시스턴트) Milestone: v1.1 — OpenClaude CLI Integration (Phase 01 유지보수)
Session Summary
Duration: Single session (2026-04-11)
Phase Progress: Phase 01 — 재튜닝 완료 (balanced + fast 갱신)
Plans Executed: 0 (정규 plan 실행 없음, 유지보수 세션)
Commits Made: 0 (미커밋, 세션 후 /commit 예정)
Files Changed: 5 신규/수정 + 2 삭제
Session Type
유형: Ad-hoc 유지보수 세션 (scheduled plan 외)
범위: Phase 01(LLM Tuning) 재검증 — balanced(Qwen3.5-35B-A3B), fast(Gemma 4 26B-A4B) 두 역할 재튜닝
이전 세션들에서 엔진 구성/플래그가 drift되어 원래 측정치(61.62 / 74.65 t/s) 재현이 어려운 상태였음. 실측 기반으로 설정 재확정.
Work Performed
1. balanced 역할 (Qwen 3.5 35B-A3B) 재튜닝
주요 발견:
- Gemma4 커뮤니티에선 잘 안 알려진 Gated Delta Net (SSM/Mamba) 하이브리드 구조로 40레이어 중 10개만 full attention. KV 캐시 초기 추정 5GB → 실제 1.4GB
- GPU 0은 PCIe 3.0 x4 슬롯 (3.94 GB/s), GPU 1은 PCIe 4.0 x16 (31.5 GB/s) — 1/8 비대칭
- Pipeline Parallelism 수동 OFF 불가, VRAM 초과 시 자동 fallback
- 이전 drift된 설정들(mmproj-F16.gguf placeholder, 보조 옵션) 정리
변경 내역:
- --mmproj models/mmproj-F16.gguf (drift 상태)
+ --mmproj models/mmproj-F16.gguf (의도적)
+ --no-mmproj-offload (CPU 오프로드)
- -ub 128 → -ub 256 (prefill +78%)
- -ts 0.5,0.5 → -ts 0.48,0.52 (PP 활성화 가능, 14/16 layer split)
- (remove) --mlock --poll 50 --prio 3 (영향 0.04 t/s)
- measured_tps: 61.62 → 64.16
실측 결과:
- Text 짧은 프롬프트: 64.16 t/s (+4.1% vs 레퍼런스)
- Text 긴 프롬프트 prefill: 1,157 t/s (vs 이전 649 t/s, +78%)
- Vision CPU 인코딩: 6.4초 (640×640)
2. fast 역할 (Gemma 4 26B-A4B) 재튜닝
주요 발견:
- 30레이어 중 5개만 full attention (매 6번째). SWA와 interleave
- Phase 01 측정치 74.65 t/s는 단일 GPU 기준 (archive 로그
found 1 CUDA devices확인) - mmproj GPU 적재 가능성 검증 →
-ts 0.43,0.57에서 안정 동작 확인 - Speculative Decoding (E2B draft) 실험: +14% gen 이득 vs 복잡성/cold start 페널티 → 채택 안 함
- Run 1 cold start: 49.68 t/s (기본 72 대비 -31%)
- Tokenizer 불일치 경고 (E2B vs 26B)
- mmproj와 병행 불가
변경 내역:
- --cache-type-k/v f16 → q8_0 (VRAM 2.5GB 절약, mmproj 수용)
+ --mmproj models/gemma-4-26B-mmproj-F16.gguf (다운로드 + GPU 적재)
- -ts (default) → -ts 0.43,0.57 (13/17 split)
- (remove) --mlock --poll 50 --prio 3 -t 6 -tb 6
- measured_tps: 74.65 → 72.04
실측 결과:
- Text 짧은 프롬프트: 71.89 t/s (BEST 72.91)
- Text 긴 프롬프트 prefill: 1,672 t/s, gen 66.67 t/s
- Vision GPU 인코딩: ~1초 (640×640) — CPU 대비 ~12배 빠름
3. Speculative Decoding 실험 (채택 안 함)
Gemma 4 E2B draft model 다운로드 후 검증:
- 다운로드:
mmproj-F16.gguf(Qwen3.5용, 858MB),gemma-4-26B-mmproj-F16.gguf(1.19GB),gemma-4-E2B-it-Q4_K_M.gguf(2.9GB) - Draft acceptance rate: 82% (일반 텍스트 기준)
- Gen 속도 BEST: 86.18 t/s (+18% vs 72.04)
- Gen 평균 (Run 1 제외): 82.18 t/s (+14%)
- 결정: 채택 안 함 — cold start -31%, 복잡성 5+ flag, mmproj 비호환
- 세션 마지막 E2B 파일 삭제 (3.8 GB 회수)
4. 파일 변경 내역
신규/수정:
- config/engine_models.json — balanced & fast 역할 최종 확정
- docs/v3_balanced_retuning_log.md — 신규
- docs/v3_fast_retuning_log.md — 신규
- .planning/phases/01-llm-tuning/VERIFICATION.md — balanced † + fast ‡ 재튜닝 주석
- .planning/STATE.md — Recent Decisions / Session Continuity 갱신
- scripts/test_ts_ratios.py — 신규 유틸
- scripts/bench_long.py — 신규 유틸 (긴 프롬프트 벤치)
- scripts/bench_short.py — 신규 유틸 (짧은 프롬프트 + 비전 벤치)
삭제:
models/gemma-4-E2B-it-Q4_K_M.gguf(2.9 GB)models/gemma-4-E2B-mmproj-F16.gguf(940 MB)
Outcomes
Phase 01 재검증 결과
| 역할 | 이전 | v3 (2026-04-11) | 차이 | 비고 |
|---|---|---|---|---|
| fast (Gemma 4 26B) | 74.65 | 71.89 | -3.7% | Vision GPU 추가 |
| balanced (Qwen 3.5 35B) | 61.62 | 64.16 | +4.1% | prefill +78% |
| deep-coder | 16.0 | 16.0 | — | 변경 없음 |
| deep-logic | 16.7 | 16.7 | — | 변경 없음 |
| ultra | 8.95 | 8.95 | — | 변경 없음 |
하드웨어 제약 문서화
- GPU 0 PCIe 3.0 x4 bottleneck 공식 진단 (Gen 속도 상한 원인)
- Pipeline Parallelism 자동 fallback 동작 이해 (수동 제어 불가)
- Gemma 4 E2B PLE (Per-Layer Embeddings) 구조로 2.9 GB 파일이 GPU 1.4 GB만 점유
속도 테스트 방법론 개선
- Python
time.time()기반 HTTP 왕복 측정 → llama.cpp 내부timings필드 사용으로 정확도 향상 - 긴 프롬프트(3,100 tok) vs 짧은 프롬프트(170 tok) 이원 측정
scripts/bench_short.py,scripts/bench_long.py재사용 가능 벤치 유틸 확립
Decisions Made
| 결정 | 근거 |
|---|---|
balanced -ub 256 -ts 0.48,0.52 --no-mmproj-offload 확정 |
실측 스윕 결과 PP 활성화 스윗스팟 |
fast -ub 512 -ts 0.43,0.57 q8_0 mmproj GPU 확정 |
Vision GPU 이득 12배 + VRAM 안정 |
| Speculative Decoding 채택 안 함 | +14% 이득 vs 복잡성/cold-start/mmproj 비호환 |
| fast KV f16 → q8_0 전환 | mmproj 수용 공간 확보, 품질 손실 미미 |
--mlock/--poll 50/--prio 3/-t/-tb 제거 (두 역할 모두) |
실측 영향 오차 범위, 전용 추론기 환경 |
| E2B draft 모델 파일 삭제 | 미채택, 3.8 GB 디스크 회수 |
Blockers / Concerns
없음. Phase 01 재튜닝 완료. Phase 06(Hermes Agent)은 이미 완료 상태, 세션 진입 시점과 무관.
알려진 구조적 제약
- GPU 0 PCIe 3.0 x4 병목: Gen 속도 62-72 t/s 상한의 주원인. 소프트웨어로 해결 불가, 하드웨어 재구성 필요
- Pipeline Parallelism 수동 OFF 불가: VRAM 초과 시 자동 fallback.
-np 1단일 사용자 환경에선 PP 실질 이득 없음 - llama.cpp
--main-gpu가 mmproj 위치 제어 안 됨: 이 빌드에서 확인, 항상 CUDA0에 로드
Next Actions
/commit— 변경사항 4개 + 삭제 기록 커밋- Phase 01 재튜닝 종료, Phase 06(Hermes Agent) 완료 상태 유지
- (향후) milestone v1.1 남은 작업
/gsd-resume-work로 복귀
Token Usage Estimate
대략치: 본 세션은 대규모 벤치마크 반복이 많았고, 긴 로그 파일 반복 그렙 및 설정 파일 수차례 편집이 포함되어 컨텍스트 상당량 소모.
- 파일 편집: ~15회
- 스크립트 작성: 3개 (test_ts_ratios, bench_short, bench_long)
- 벤치마크 반복: ~40회 (configs × runs)
- 서버 재기동: ~25회
- 검색/진단 쿼리: ~30회
예상 token: 매우 높음 (벤치 로그와 config 파일 반복 읽기)
Report sealed: 2026-04-11