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