로컬 AI 실측 노트

Ollama KV 캐시 q8_0, 6GB에서 켜 봤더니: 8B는 40% 느려지고 4B는 메모리만 아꼈다

2026-09-27

긴 문서를 넣을 때 그래픽 메모리를 아끼는 방법으로 Ollama의 OLLAMA_KV_CACHE_TYPE=q8_0이 자주 추천됩니다. 문맥을 기억하는 공간(KV 캐시)을 8비트로 압축해서 크기를 약 절반으로 줄이는 설정입니다. GTX 1660 SUPER 6GB에서 실제로 켜 봤습니다.

결론부터 정리하면 이렇습니다.

한눈에 보는 결과

Ollama 0.34.4, num_ctx 16384, 모든 층을 그래픽카드에 올린 상태(num_gpu 99)입니다. 각 조건을 2번씩 쟀습니다.

모델 · KV 캐시 문서 읽는 시간 답 쓰는 속도 그래픽 메모리 공유 GPU 메모리
8B · 기본(f16) 약 3,500토큰 41.2~42.7초 19.6~20.2 tok/s 5,771~5,832MB 약 2,440~2,520MB
8B · q8_0 약 3,500토큰 44.4~45.5초 11.8~11.9 tok/s 5,771~5,775MB 약 1,350~1,360MB
8B · 기본(f16) 약 8,600토큰 125.1~128.6초 10.5~10.6 tok/s 5,769~5,771MB 약 2,510MB
8B · q8_0 약 8,600토큰 133.9~137.0초 5.6 tok/s 5,777MB 약 1,350~1,360MB
4B-instruct · 기본(f16) 약 8,600토큰 53.6~55.4초 50.9~51.0 tok/s 5,352MB 436MB
4B-instruct · q8_0 약 8,600토큰 57.5~58.9초 49.9~50.4 tok/s 4,369MB 436MB

테스트 환경과 방법

KV 캐시 설정은 Ollama를 끈 뒤, 서버를 띄우는 PowerShell 프로세스에만 환경 변수 OLLAMA_KV_CACHE_TYPE=q8_0을 주고 ollama serve로 다시 켜서 바꿨습니다(사용자·시스템 환경 변수는 건드리지 않음). 측정이 끝나면 환경 변수 없이 원래 Ollama 앱을 다시 켰습니다. Ollama FAQ에 따르면 KV 캐시 압축은 플래시 어텐션이 켜져 있을 때 적용되고, 플래시 어텐션은 지원되는 백엔드·장치에서 자동으로 켜집니다. 실제로 적용됐는지는 ollama ps의 모델 크기로 확인했습니다. 8B는 7.4GB에서 6.3GB로, 4B-instruct는 5.0GB에서 3.9GB로 줄어 표시됐습니다.

8B는 왜 느려졌을까

압축으로 문맥 공간이 줄어든 건 분명합니다. ollama ps 크기가 1.1GB 줄었고, 윈도우의 "공유 GPU 메모리" 사용량도 약 2,500MB에서 약 1,360MB로 줄었습니다. 그런데도 답 쓰는 속도는 40~47% 떨어졌습니다.

8B는 모델 파일만으로 6GB 카드가 거의 꽉 차서, 문맥 공간 상당 부분이 그래픽 메모리 밖(시스템 메모리)에 있는 것으로 보입니다(긴 문서 글 참고). 압축으로 그 양은 줄었지만 여전히 다 들어가지는 않았고, 압축된 값을 풀어 계산하는 비용이 더해져 더 느려졌을 가능성이 있습니다. 원인을 직접 확인한 것은 아닙니다.

참고로 같은 모델을 llama.cpp로 직접 돌렸을 때는 결과가 달랐습니다. 긴 문서 글에서 KV 캐시를 q8_0으로 압축하니 8,192토큰을 채운 상태의 생성 속도가 13.2에서 18.0 tok/s로 빨라졌습니다(다만 12,288토큰에서는 5.7 tok/s로 떨어졌습니다). llama-bench는 채울 토큰만큼만 문맥 공간을 잡고, Ollama는 num_ctx(16,384)만큼 미리 잡는다는 차이도 있습니다. 실행 도구와 메모리 배치 방식이 다르면 같은 압축도 결과가 달라질 수 있다는 뜻입니다. 효과가 있을지는 직접 재 보고 켜세요.

4B-instruct는 메모리만 아꼈다

4B-instruct는 모델 파일이 작아서 기본 설정에서도 문맥 공간이 대부분 그래픽 메모리 안에 들어갑니다. q8_0으로 압축하니 그래픽 메모리 사용량이 5,352MB에서 4,369MB로 약 980MB 줄었고, 답 속도는 약 50 tok/s로 거의 그대로였습니다. 문서 읽는 시간은 53.6~55.4초에서 57.5~58.9초로 조금 늘었습니다(측정 시각이 달라 참고용).

그래픽 메모리가 1GB 가까이 남으니, 4B로 긴 문서를 다루면서 브라우저나 다른 프로그램을 같이 띄워야 할 때는 켜 볼 만합니다. num_ctx를 더 키우는 데 쓸 수도 있지만, 이번에는 16,384까지만 재 봤습니다.

측정 중 찾은 함정: 남아 있는 llama-server.exe

처음 측정할 때는 q8_0이 약 2.3~2.8배나 느리게 나왔습니다. 확인해 보니 측정 직전 그래픽 메모리 사용량이 5,700MB를 넘은 경우가 있었고, nvidia-smi로 그래픽카드를 쓰는 프로세스를 보니 C:\Users\(사용자)\AppData\Local\Programs\Ollama\lib\ollama\llama-server.exe가 많을 때는 4개까지 떠 있었습니다.

이번에 쓴 Ollama는 모델을 llama-server.exe라는 별도 프로세스로 돌립니다. 측정 스크립트가 설정을 바꾸려고 ollama app과 ollama 프로세스를 PowerShell의 Stop-Process -Force로 강제 종료했는데, 그 아래에서 돌던 llama-server.exe는 함께 꺼지지 않고 남았습니다. 재시작할 때마다 하나씩 늘어서 4개가 됐고, 스크립트를 고친 뒤 다시 잴 때도 재시작 두 번 모두 하나씩 남아 있었습니다. 남은 프로세스는 불러온 모델을 그래픽 메모리에 들고 있던 것으로 보입니다. 이 프로세스들을 끄자 그래픽 메모리 사용량은 약 620MB로 돌아왔습니다. 위 표는 4B-instruct 기본값 한 줄을 빼면 모두 그 뒤에 다시 잰 값입니다.

6GB 그래픽카드라면

한계