Files
variet_llm/.planning/reports/20260411-session-report.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

177 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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, 보조 옵션) 정리
**변경 내역:**
```diff
- --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와 병행 불가
**변경 내역:**
```diff
- --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](../../config/engine_models.json) — balanced & fast 역할 최종 확정
- [docs/v3_balanced_retuning_log.md](../../docs/v3_balanced_retuning_log.md) — **신규**
- [docs/v3_fast_retuning_log.md](../../docs/v3_fast_retuning_log.md) — **신규**
- [.planning/phases/01-llm-tuning/VERIFICATION.md](../phases/01-llm-tuning/VERIFICATION.md) — balanced † + fast ‡ 재튜닝 주석
- [.planning/STATE.md](../STATE.md) — Recent Decisions / Session Continuity 갱신
- [scripts/test_ts_ratios.py](../../scripts/test_ts_ratios.py) — 신규 유틸
- [scripts/bench_long.py](../../scripts/bench_long.py) — 신규 유틸 (긴 프롬프트 벤치)
- [scripts/bench_short.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
1. **`/commit`** — 변경사항 4개 + 삭제 기록 커밋
2. Phase 01 재튜닝 종료, Phase 06(Hermes Agent) 완료 상태 유지
3. (향후) 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**