← Gritz World Engine
brief

llama.cpp 의 오프로드와 메모리 매핑 양자화로 에서 토큰 구현하기

핵심 요약

Llama.cpp 는 GGUF 메모리 매핑을 기반으로 하이브리드 오프로드(핵심 레이어는 GPU, KV‑cache 는 CPU) 로 16GB GPU 에서 8k 토큰 컨텍스트를 지원하며, 전체 CPU 오프로드로는 7B 모델의 GPU 사용량을 12GB 에서 1GB 이하로 줄이고, GPTQ 코드북 256 개 양자화로 KV‑cache 메모리를 약 4 배 압축한다.

이 글의 핵심 주장과 근거

핵심 주장
llama.cpp의 CPU 오프로딩 메커니즘은 GPU VRAM이 KV-cache 전체를 수용할 수 없을 때 세그먼트를 CPU RAM로 이전하여 OOM 발생을 방지하며, K-블롭 블록 단위 이전으로 오버헤드를 최소화한다.
출처: [1] llama.cpp KV-cache Implementation
핵심 주장
llama.cpp는 GGUF 파일을 mmap으로 열어 OS 페이지 캐시를 통해 Demand Paging을 구현하며, 전체 파일을 메모리에 적재하지 않고 접근된 페이지만 물리 메모리에 로드
출처: [1] llama.cpp GitHub Repository [2] GGUF 사양 문서
핵심 주장
GGUF의 K-블롭 구조는 KV-cache 텐서를 레이어 단위로 분리 저장하여 각 레이어의 K 텐서와 V 텐서를 독립적으로 양자화하고 접근 가능
출처: [1] GGUF 사양 문서
KV-cache 양자화는 키-밸류 캐시 텐서를 K-양자화 방식으로 압축하여 긴 컨텍스트 추론 시 메모리 공간을 크게 절감하며 16GB RAM 환경에서 7B~13B 모델 실행을 가능하게 함
출처: [1] KV cache quantization in llama.cpp
llama.cpp는 GGUF 포맷의 양자화 모델을 C/C++로 직접 추론하는 경량 런타임으로, CPU 오프로딩과 메모리 매핑을 네이티브 지원
출처: [1] llama.cpp GitHub Repository
PagedAttention은 KV-cache를 64토큰 단위 블록으로 관리하여 불연속 메모리 공간을 논리적으로 연속 처리하므로 물리 메모리 파ragmentation 문제를 해결한다
출처: [1] llama.cpp GitHub Repository
llama.cpp의 슬라이딩 윈도우 컨텍스트는 오래된 토큰을 강제 배출하여 100만 토큰 규모에서는 초기 대화의 의도와 핵심 결정 사항이 손실될 수 있다.
출처: [1] llama.cpp Context Chunking

GGUF 의 메모리 매핑 구조: 효율적인 로딩과 오프로드의 기반

GGUF(GPT-Generated Unified Format) 는 Llama.cpp 가 사용하는 모델 포맷으로, 메모리 매핑을 통해 모델 가중치를 효율적으로 로드하고 관리한다. 이 포맷은 CPU 와 GPU 간 데이터 이동을 최적화하기 위해 설계되었으며, 특히 오프로드 전략을 구현하는 데 핵심적인 역할을 한다. GGUF 파일 내부에는 모델 아키텍처 정보, 양자화된 가중치, 메타데이터가 체계적으로 구조화되어 있어 런타임에 필요한 부분만 선택적으로 메모리에 로드할 수 있다. 이러한 설계로 인해 Llama.cpp 는 시스템 메모리 제약 내에서 최대한의 성능을 발휘하면서도 유연한 오프로드 전략을 구현할 수 있다.

하이브리드 오프로드: GPU 와 CPU 의 최적 분업 전략

하이브리드 오프로드는 Llama.cpp 가 제공하는 가장 균형 잡힌 성능 최적화 전략으로, 계산 집약적인 핵심 트랜스포머 레이어는 GPU 에 유지하면서 메모리 사용량이 큰 KV‑cache 만 CPU 로 이동시킨다. 이 방식은 16GB GPU 메모리를 가진 환경에서 최대 8k 토큰 컨텍스트를 지원할 수 있게 해주며, 긴 문서 분석이나 복잡한 대화 맥락 처리에 적합하다. 핵심 레이어가 GPU 에 남아있기 때문에 추론 속도는 크게 저하되지 않으면서도, KV‑cache 의 CPU 이동으로 인해 전체 메모리 사용량이 획기적으로 감소한다. 이는 제한된 GPU 자원을 가진 환경에서 긴 컨텍스트를 필요로 하는 작업을 수행할 때 가장 실용적인 해결책이다.

전체 CPU 오프로드: 저사양 환경에서의 대규모 모델 실행

전체 CPU 오프로드 모드는 GPU 의 도움을 전혀 받지 않고 모든 연산을 CPU 로 처리하는 방식으로, 7B 모델의 경우 GPU 메모리 사용량을 약 12GB 에서 1GB 이하로 감소시킨다. 이 방식은 GPU 가 있더라도 메모리 제약으로 인해 모델을 로드할 수 없는 상황에서 유용하며, 심지어 GPU 가 아예 없는 환경에서도 대규모 언어 모델을 실행할 수 있게 해준다. 물론 추론 속도는 GPU 가속 모드에 비해 현저히 느려지지만, 최근 CPU 의 성능 향상과 Llama.cpp 의 최적화로 인해 실용적인 수준까지 개선되었다. 특히 양자화된 모델과 결합하면 저사양 노트북이나 임베디드 환경에서도 7B 급 모델을 실행하는 것이 가능해진다.

KV‑cache 양자화: 긴 컨텍스트를 위한 메모리 압축 기술

KV‑cache 는 트랜스포머 모델이 긴 시퀀스를 처리할 때 이전 토큰의 키와 값 벡터를 저장하는 메모리로, 컨텍스트 길이가 길어질수록 기하급수적으로 증가한다. Llama.cpp 는 GPTQ 코드북 256 개를 사용한 양자화 기법으로 이 메모리 사용량을 약 4 배 줄일 수 있다. 이 기술은 KV‑cache 의 정밀도를 일부 희생하면서도 모델의 출력 품질에는 거의 영향을 주지 않는 수준에서 압축을 수행한다. 결과적으로 동일한 GPU 메모리로 더 긴 컨텍스트를 처리할 수 있게 되며, 8k 토큰 이상의 긴 문서 분석이나 장기간 대화 맥락 유지가 가능해진다. > 이 주제의 전체 맥락 방향성은 **바이브코딩에서 오픈클로까지** 원본 글에 세밀하게 정리되어 있습니다. 더 깊게 탐구하고 싶다면 관련 내부 대표 문서(Pillar/Entity)를 참조하세요.

자주 묻는 질문

하이브리드 오프로드와 전체 CPU 오프로드 중 어떤 것을 선택해야 하나요?

GPU 가 있고 충분한 메모리(16GB 이상) 가 있다면 하이브리드 오프로드를 추천한다. 추론 속도는 빠르면서 긴 컨텍스트 처리가 가능하다. 반면 GPU 메모리가 부족하거나 CPU 만 사용하는 환경이라면 전체 CPU 오프로드를 선택해야 한다.

KV‑cache 양자화가 모델 성능에 미치는 영향은 무엇인가요?

GPTQ 코드북 256 개로 압축하면 메모리 사용량이 약 4 배 줄어들지만, 정밀도 일부 손실로 인해 매우 미세한 품질 저하가 발생할 수 있다. 그러나 실제 응용에서는 거의 차이가 느껴지지 않을 정도로 최소화되어 있으며, 긴 컨텍스트 처리 가능성이라는 이점이 훨씬 크다.

7B 모델을 전체 CPU 오프드로 실행할 때 속도는 얼마나 느려지나요?

GPU 가속 모드에 비해 현저히 느려지지만, 최근 CPU 최적화와 양자화 기술로 인해 실용적인 수준까지 개선되었다. 구체적인 속도는 CPU 성능과 모델 양자화 정도에 따라 다르며, 일반적으로 초당 3~10 토큰 정도의 생성 속도를 기대할 수 있다.

8k 토큰 컨텍스트를 지원하려면 어떤 하드웨어가 필요한가요?

하이브리드 오프로드 방식을 사용하면 16GB GPU 메모리로 8k 토큰을 처리할 수 있다. KV‑cache 양자화를 함께 적용하면 더 적은 메모리에서도 가능해지며, 전체 CPU 오프로드라면 RAM 이 충분하다면 GPU 없이도 실행 가능하다.

관련 분석

GGUF의 K-블롭 구조와 페이지 정렬 기반 선택적 적재 메커스트림환경의 혁명 양자화와 -블롭 메모리 구조가 가능하게 한 실시간 로컬 추론llama.cpp의 GGUF 포맷은 4비트~8비트 K-Quant 양자화 체계와 OS 요구 페이징을 결합해 7B~13B 파라미터 규모의 대형 언어 모델을 일반 개발자의 16GB RAM PC에서 클라우드 의존 없이 실시환경에서 로컬 추론을 물리적으로 가능하게 하는 - 양자화의 작동 원리GGUF K-Quant 양자화 체계는 모델 가중치를 K-크기 블록 단위로 압축하여 16GB RAM 환경에서도 7B~13B 파라미터 규모의 언어 모델을 실행할 수 있게 한다. Q4_K_M 양자화 시 7B 모델은 약 4양자화 실전 가이드 메모리-품질 트레이드오프 완전 해부16GB RAM 환경에서 GGUF KQuant 양자화 유형별 실제 메모리 사용량과 품질 차이를 분석한 결과, 7B 모델 기준 Q4_K_M 은 약 4.6~5.5GB, Q5_K_S 는 5.5~6.5GB, Q8_0 은 8GGUF K-Quant에서 모델을 실행하는 양자화의 기술적 원리GGUF 형식의 K-Quant 양화 체계는 파라미터당 약 0.55바이트(Q4_K_M)만 사용하여 7B 모델 가중치를 3.9GB 로 축소하고, 메모리 매핑 로딩과 결합해 실제 RAM 에서 5~6GB 만 점유하도록 한다