# 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**
