server: 체크포인트 생성 수정 (llama.cpp PR #22929)
server: fix checkpoints creation by jacekpoplawski · Pull Request #22929 · ggml-org/llama.cpp
핵심 요약
에이전트 코딩 시 발생하는 불필요한 전체 컨텍스트 재처리 문제를 해결하여 llama.cpp의 응답성을 개선한 PR.
- 컨텍스트 재처리 — 에이전트가 대화 기록을 수정할 때 발생하는 전체 컨텍스트 재처리 문제를 해결함.
- 응답성 개선 — 불필요한 재처리를 방지하여 에이전트 코딩 작업의 속도와 반응성을 높임.
- 체크포인트 생성 — 변경된 부분만 처리하도록 최적화하여 성능 저하를 최소화함.
에이전트 코딩을 위해 로컬 모델을 사용한다고 상상해 보세요.
아이디어를 논의하고(50k 토큰), '구현해 줘'라고 말합니다. 에이전트는 파일을 읽고, 쓰고, 명령어를 실행하며 20k 토큰을 추가로 생성하고 코드가 준비됩니다. 그다음 프롬프트로 '고마워'라고 입력하면... 아무 일도 일어나지 않고, '무언가'를 기다려야 합니다.
무슨 일이 벌어지고 있냐면, opencode 같은 일부 도구들이 똑똑하게 행동하려고 컨텍스트를 최적화합니다. 이 과정에서 대화 기록의 일부를 수정하죠. 운이 좋으면 llama.cpp는 그 지점부터 다시 처리하면 되지만, 최악의 경우 전체 컨텍스트(70k 토큰)를 다시 처리해야 해서 '전체 프롬프트 재처리 강제 실행 중...'이라는 메시지를 보게 됩니다.
이걸 피하려고 저는 opencode에서 pi로 갈아탔습니다. pi가 마법 같은 기능을 가져서가 아니라, 그런 식으로 컨텍스트를 다시 쓰지 않기 때문입니다.
또 다른 문제는 모델이 똑똑하게 군답시고 컨텍스트에서 추론 과정을 제거하는 경우입니다. 운이 좋으면 llama.cpp는 마지막 실행분(20k 토큰)만 다시 처리하면 되지만, 최악의 경우 다시 전체(70k)를 재처리해야 합니다.
이걸 피하려면, 최소한 Qwen 3.6에서는 '생각 보존(preserve thinking)' 기능을 켜면 됩니다.
이 PR의 목표는 최악의 상황(전체 프롬프트 재처리)을 피하고, llama.cpp가 실제로 변경된 부분만 재처리하는 최선의 상황에 가깝게 만드는 것입니다. 저는 이 코드를 약 2주 동안 사용해 봤는데, 제 생각에 에이전트 코딩이 이제 훨씬 더 반응이 빨라졌습니다.

