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>
This commit is contained in:
Variet-Worker
2026-04-11 14:55:27 +09:00
parent 219985b9ce
commit 0dee779a73
9 changed files with 1135 additions and 80 deletions

View File

@@ -3,8 +3,8 @@ gsd_state_version: 1.0
milestone: v1.1
milestone_name: milestone
status: planning
last_updated: "2026-04-08T01:58:00.000Z"
last_activity: 2026-04-08
last_updated: "2026-04-11T10:30:00.000Z"
last_activity: 2026-04-11
progress:
total_phases: 3
completed_phases: 2
@@ -32,7 +32,7 @@ Last activity: 2026-04-08
## Completed Phases
- Phase 01 (LLM Tuning): 5개 모델 최적 설정 확정 (74.65 / 61.62 / 16.0 / 16.7 / 8.95 t/s)
- Phase 01 (LLM Tuning): 5개 모델 최적 설정 확정 (71.89‡ / 64.16† / 16.0 / 16.7 / 8.95 t/s) — † balanced / ‡ fast 2026-04-11 재튜닝
- Phase 02 (API Engine): Variet Engine v1.0 — FastAPI 프록시 + 핫스왑 + 503 보호
## Recent Decisions
@@ -43,6 +43,8 @@ Last activity: 2026-04-08
- Variet Engine: 단일 포트(8000) FastAPI 리버스 프록시.
- config/engine_models.json → 모든 설정의 Single Source of Truth.
- CLI-First 검증 전략: VS Code Extension 전 OpenClaude CLI로 에이전트 루프 먼저 검증.
- balanced 역할 v3 재튜닝 (2026-04-11): `-ub 256`, `-ts 0.48,0.52`, `--no-mmproj-offload`, 보조 옵션(mlock/poll/prio) 제거. 실측 61.62 → 64.16 t/s. prefill 649 → 1,157 t/s (+78%). 상세: `docs/v3_balanced_retuning_log.md`.
- fast 역할 v3 재튜닝 (2026-04-11): `cache-type q8_0`, `-ts 0.43,0.57`, `--mmproj` GPU 적재, 보조 옵션 제거. 실측 74.65 → 71.89 t/s (-3.7%). Vision GPU 지원 추가 (이미지 인코딩 ~1초). Speculative Decoding (E2B draft) 실험 후 채택 안 함. 상세: `docs/v3_fast_retuning_log.md`.
## Roadmap Evolution
@@ -58,6 +60,5 @@ None.
## Session Continuity
Last session: 2026-04-08T10:58:00+09:00
Stopped at: Phase 05 PLAN created, user will execute manually
Resume file: .planning/phases/05-vscode-extension-packaging/.continue-here.md
Last session: 2026-04-11T10:30:00+09:00
Stopped at: balanced 역할 v3 재튜닝 완료 — config/engine_models.json, docs/v3_balanced_retuning_log.md, Phase 01 VERIFICATION.md 증적 저장 완료. 다음 작업 선택 대기.

View File

@@ -4,16 +4,16 @@
| # | 모델 | 역할 | 실측 속도 | 컨텍스트 | GPU 구성 | 상태 |
|:-:|------|------|:--------:|:-------:|----------|:----:|
| 1 | Gemma 4 26B-A4B Q4_K_M | fast | 74.65 t/s | 256K | 듀얼 | ✅ |
| 2 | Qwen 3.5 35B-A3B Q4_K_M | balanced | 61.62 t/s | 256K | 듀얼 | ✅ |
| 1 | Gemma 4 26B-A4B Q4_K_M | fast | 71.89 t/s | 256K | 듀얼 | ✅ |
| 2 | Qwen 3.5 35B-A3B Q4_K_M | balanced | 64.16 t/s | 256K | 듀얼 | ✅ |
| 3 | Gemma 4 31B Dense Q4_K_M | deep-coder | 16.0 t/s | 192K | 듀얼 | ✅ |
| 4 | Qwen 3.5 27B Dense Q4_K_M | deep-logic | 16.7 t/s | 256K | 듀얼 | ✅ |
| 5 | Qwen 3.5 122B-A10B Q4_K_M | ultra | 8.95 t/s | 256K | GPU 1만 | ✅ |
## UAT 기준 달성 여부
- [x] Fast tier ≥ 70 t/s → **74.65 t/s**
- [x] Balanced tier ≥ 50 t/s → **61.62 t/s**
- [x] Fast tier ≥ 70 t/s → **71.89 t/s**
- [x] Balanced tier ≥ 50 t/s → **64.16 t/s**
- [x] Deep tier 안정 구동 → **16.0 / 16.7 t/s**
- [x] Ultra tier 구동 가능 → **8.95 t/s**
- [x] 모든 모델 VRAM 12GB x 2 이내 → ✅
@@ -21,3 +21,29 @@
## Phase Status: ✅ COMPLETE
완료 일시: 2026-04-07
---
**balanced 역할 재튜닝 (2026-04-11):**
이후 세션에서 `balanced` (Qwen3.5-35B-A3B) 설정을 실측 기반으로 재검증. 기존 Phase 01 튜닝은 단일 GPU 환경(`found 1 CUDA devices` 로그로 확인)에서 수행됐고, 이후 듀얼 GPU + mmproj 옵션 추가로 설정이 drift된 상태였음. v3 재튜닝 결과 **61.62 → 64.16 t/s** (+4.1%) 달성. 상세 과정/증적은 [`docs/v3_balanced_retuning_log.md`](../../../docs/v3_balanced_retuning_log.md) 참조.
**주요 변경점:**
- `-ub 128 → 256` (prefill +78%, 긴 프롬프트 3,100 tok 기준 649 → 1,157 t/s)
- `-ts 0.5,0.5 → 0.48,0.52` (compute buffer 여유 확보)
- `--mlock`, `--poll 50`, `--prio 3` 제거 (실측 영향 0.04 t/s)
- `--mmproj` + `--no-mmproj-offload` 추가 (비전 기능 유지 + VRAM 858 MiB 확보)
- GPU 0 PCIe 3.0 x4 슬롯 병목 진단 → Gen 속도 62 t/s 상한 원인 규명
---
**fast 역할 재튜닝 (2026-04-11):**
`fast` (Gemma 4 26B-A4B) 설정도 동일 세션에서 재검증. Phase 01 측정치 74.65는 단일 GPU 조건. 듀얼 GPU + vision 지원 추가 과정에서 **71.89 t/s**로 확정 (-3.7%). 상세 과정/증적은 [`docs/v3_fast_retuning_log.md`](../../../docs/v3_fast_retuning_log.md) 참조.
**주요 변경점:**
- `--cache-type-k/v: f16 → q8_0` (KV 절약 ~2.5 GB로 mmproj GPU 수용)
- `--mmproj models/gemma-4-26B-mmproj-F16.gguf` 신규 추가 (Vision 지원, GPU 적재)
- `-ts 0.43,0.57` (13/17 레이어 분할, mmproj 수용 공간 확보)
- `-ub 512 -b 2048` (유지, 스윗스팟 재확인)
- `--mlock`, `--poll 50`, `--prio 3`, `-t 6`, `-tb 6` 제거
- Speculative Decoding(E2B draft) 실험 후 **채택 안 함** — +14% 이득 vs 복잡성/cold start 페널티
- Vision GPU 인코딩 ~1초 (640×640 image, 283 tokens)

View File

@@ -0,0 +1,176 @@
# 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**