모듈 8에서 세계 최전선의 인프라(프리필·디코드 분리)를 구경했습니다. 그 글의 원문은 정직하게 이렇게 선을 긋습니다 — "GPU 한두 장 규모에는 통합 서빙이 여전히 정답"이라고. 그럼 우리는 구경만 하면 될까요? 아닙니다. 그 최전선 기술 중 세 가지는 이미 우리 책상 규모로 내려앉았습니다. 로컬 모델 연구의 흐름이 어디로 가는지, 우리가 지금 쓸 수 있는 건 무엇인지 정리합니다. (2026년 하반기 기준)
로컬 모델 연구의 질문이 달라지고 있습니다. 예전 질문은 "내 장비에 어떤 모델이 들어가나"였습니다 — 모델 무게와 KV 캐시를 더해 메모리에 맞추는 것(모듈 3의 산정법). 그 산정법은 여전히 유효하지만, 최전선이 보여준 새 질문이 하나 얹혔습니다:
또 하나의 인식 전환 — KV 캐시(읽어둔 내용의 메모장)는 "메모리 남는 자리"가 아니라 1급 자산이라는 것. 대규모 업계는 이 메모장을 전담 창고에 보관하고 재활용하는 시스템까지 만들었습니다. 우리 규모에서도 이 메모장을 어떻게 다루느냐가 아래 세 카드의 공통 열쇠입니다.
업무용 AI 요청은 앞부분이 반복됩니다. 시스템 지시문(역할·규칙)은 매번 같고, 같은 규정 문서를 붙여 여러 질문을 하는 일도 흔합니다. 프리픽스 캐싱(prefix caching)은 그 겹치는 앞부분의 읽기 결과(KV 캐시)를 보관해뒀다가 재활용하는 기술입니다 — 겹치는 만큼 프리필(읽기)을 통째로 건너뜁니다.
쓰기(디코드)가 느린 이유는 한 글자 만들 때마다 모델 전체를 메모리에서 다시 읽기 때문이었습니다(모듈 2). 투기 디코딩(speculative decoding)은 이 병목을 영리하게 우회합니다 — 작고 빠른 모델이 다음 몇 글자를 미리 추측(초안)하고, 큰 모델이 그 초안을 한 번에 검증합니다. 맞으면 여러 글자를 한 번의 메모리 왕복으로 확정하고, 틀리면 그 지점부터 큰 모델이 직접 씁니다.
--model-draft)으로 같은 원리를 쓸 수 있습니다 — 예: 26B 주력 옆에 1B급 초안 모델을 붙이는 구성.VRAM이 부족할 때 모델 일부를 일반 메모리(RAM)로 내리는 오프로딩은 모듈 1에서 배웠습니다. 같은 일을 KV 캐시에도 할 수 있습니다 — 당장 안 쓰는 대화의 메모장을 RAM으로 내려두고, 필요할 때 다시 올리는 것. 대규모 업계는 이걸 SSD까지 계층화한 전용 창고 시스템(Mooncake 등, 모듈 8)으로 키웠고, 우리 규모에서는 llama.cpp의 옵션으로 원시적 형태를 쓸 수 있습니다.
| 카드 | 무엇을 아끼나 | 우리 환경에서 | 발동 조건 |
|---|---|---|---|
| 프리픽스 캐싱 | 읽기(프리필) 반복 | 지금 바로 — 프롬프트 앞부분 고정 설계만 하면 자동 | 같은 지시문·문서를 반복 사용하는 업무(우리 태스크 전부) |
| 투기 디코딩 | 쓰기(디코드) 왕복 | 가능 — 단 초안 모델의 VRAM 비용과 교환 | 긴 출력이 많고 VRAM에 여유가 생겼을 때, 벤치 후 |
| KV 오프로딩 | VRAM 자리 | 예비 카드 — RAM 넉넉, 속도와 교환 | 동시 사용자가 늘어 KV가 모자랄 때 |
공통점이 보이시나요. 셋 다 "어떤 모델이냐"가 아니라 "어떻게 돌리느냐"의 기술입니다. 로컬 모델 연구의 무게중심이 모델 고르기에서 운영 설계로 옮겨가고 있다는 것 — 이것이 이번 모듈의 진짜 요지이고, 하드웨어까지 이 방향으로 갑니다(차세대 칩은 읽기용과 쓰기용을 아예 따로 설계합니다, 모듈 8 참조). 장비가 낡아도 운영 설계는 배울 수 있고, 그 설계 감각은 어떤 장비로 갈아타도 따라갑니다.
--model-draft, 캐시 관련 플래그) 설명과 vLLM 블로그의 automatic prefix caching 글. · 옵션 이름과 동작은 버전에 따라 바뀝니다 — 우리 서버 도커 이미지 기준으로 확인 후 사용하세요.