Ollama GPU 메모리 점검, 컨텍스트·병렬 처리·KV 캐시를 조정하는 법
AI를 활용하여 생성한 이미지입니다.
Ollama가 느려졌을 때 모델 파일 크기만 줄이면 해결될 것 같지만, 실제로는 컨텍스트 길이와 KV 캐시, 동시에 처리하는 요청 수가 GPU 메모리를 함께 사용해요. 같은 모델이라도 짧은 질문 하나는 빠르고, 긴 문서와 여러 요청을 겹치면 갑자기 CPU로 일부가 밀리거나 대기열이 길어질 수 있습니다. 먼저 모델이 어디에 올라갔는지 확인하고, 그 다음 메모리 예산을 나눠야 해요.[2][3]
먼저 ollama ps로 현재 배치를 봐요
Ollama 문서는 ollama ps로 현재 모델이 메모리에 어떻게 올라가 있는지 확인하라고 안내해요. 모델 전체가 GPU에 올라갔는지, CPU와 GPU에 나뉘었는지, 여러 모델이 동시에 남아 있는지 이 출력에서 출발하면 됩니다.[2]
ollama ps
ollama run MODEL_NAME
# 별도 터미널에서 다시 확인
ollama ps
여기서 “GPU에 올라갔다”는 표시만 보고 충분하다고 판단하면 안 돼요. 긴 컨텍스트를 넣었을 때 KV 캐시가 추가로 필요하고, 병렬 요청을 허용하면 같은 구조가 여러 요청에 복제될 수 있어요. 모델을 바꾼 뒤에는 첫 응답 속도와 두 번째 요청의 대기 시간을 따로 봐야 합니다.
| 조정 항목 | 늘리면 좋아지는 점 | 메모리·품질 측면의 비용 |
|---|---|---|
| 컨텍스트 길이 | 더 긴 문서와 대화 이력을 한 번에 다뤄요. | 처리할 토큰과 KV 캐시가 늘어 메모리와 지연이 커져요.[1] |
| 병렬 처리 | 여러 요청을 동시에 처리할 수 있어요. | 동시에 사용하는 메모리가 늘고, 여유가 부족하면 요청이 대기해요.[2] |
| KV 캐시 정밀도 | 캐시 메모리를 줄일 수 있어요. | 정밀도와 모델별 동작을 확인해야 하고 전역 설정일 수 있어요.[2] |
컨텍스트 길이는 필요한 만큼만
컨텍스트 길이는 모델이 한 번에 메모리에 접근할 수 있는 토큰의 최대량이에요.[1] Ollama 문서는 환경 변수로 기본 길이를 바꿀 수 있다고 설명하고, 작업 종류에 따라 긴 컨텍스트가 필요한 경우를 따로 언급해요.[1][2] 문서 전체를 항상 긴 창으로 열어 두는 방식은 간단하지만, 짧은 질문까지 같은 메모리 비용을 부담하게 만들 수 있어요.
OLLAMA_CONTEXT_LENGTH=64000 ollama serve
위 값은 모든 작업에 그대로 적용할 정답이 아니에요. 긴 코드베이스나 에이전트 작업처럼 실제로 많은 문맥을 보내는 경우에만 올리고, 일반 질의응답은 더 작은 값으로 시작해 응답 지연과 메모리 사용을 비교하는 편이 낫습니다. 모델이 지원하는 최대 문맥과 Ollama가 사용하는 설정은 같은 개념이 아니므로, 모델 카드의 숫자만 보고 환경 변수를 크게 잡지 마세요.
병렬 요청이 메모리를 나눠 써요
Ollama FAQ는 GPU 추론에서 여유 VRAM이 충분하면 여러 요청을 처리할 수 있고, 새 요청을 수용할 메모리가 부족하면 대기열로 보낼 수 있다고 설명해요.[2] 테스트할 때는 요청 하나의 속도만 재지 말고, 동시에 두세 요청을 보냈을 때 첫 토큰 지연과 완료 시간, 메모리 변화를 함께 기록해야 해요.
개인용 Mac이나 단일 GPU에서 긴 컨텍스트를 쓰는 로컬 앱이라면 병렬 수를 낮추는 편이 전체 응답 시간을 안정시키는 경우가 많아요. 반대로 짧은 요청을 많이 처리하는 서버라면 컨텍스트를 줄이고 병렬 처리의 이점을 확인할 수 있어요. 어느 쪽이든 GPU 사용률만 높이는 것이 목표가 아니라, 실패 없이 끝나는 요청 비율과 실제 처리량을 봐야 합니다.
Flash Attention과 KV 캐시
Ollama FAQ는 Flash Attention이 켜진 상태에서 K/V 캐시를 양자화하면 메모리 사용량을 줄일 수 있다고 안내해요. 캐시 형식은 환경 변수로 지정하고 기본값은 f16이며, 설정은 전역 옵션으로 동작한다고 설명합니다.[2]
OLLAMA_KV_CACHE_TYPE=q8_0 ollama serve
캐시를 줄이는 설정은 긴 컨텍스트나 여러 동시 요청에서 여유를 만들 수 있지만, 모든 모델과 작업에서 같은 품질을 보장한다고 말할 수는 없어요. 변경 전후에 동일한 프롬프트와 평가 문항을 돌려 답변 누락, 숫자 오류, 도구 호출 실패가 늘지 않았는지 확인하세요. 캐시 정밀도 변경은 모델 파일을 다시 양자화하는 작업과 다르므로 두 작업을 섞어 기록하지 않는 게 좋습니다.
GPU 지원과 CPU 폴백을 분리해요
Ollama는 운영체제와 GPU 종류에 따라 하드웨어 지원 경로가 달라요. 공식 하드웨어 문서는 지원되는 GPU 가속과 드라이버 조건을 구분해 설명하고, GPU 라이브러리가 보고하는 메모리 정보에 따라 스케줄러가 모델 배치를 결정한다고 안내해요.[3] “GPU가 있다”는 사실만으로 전체 모델이 GPU에서 실행된다고 가정하면 안 되는 이유예요.
테스트 순서는 단순하게 잡을 수 있어요. 첫째, 모델 하나만 올린 상태에서 ollama ps를 확인해요. 둘째, 짧은 요청과 긴 요청의 차이를 기록해요. 셋째, 병렬 요청을 하나씩 늘려 대기열이 생기는 지점을 찾습니다. 넷째, 컨텍스트나 KV 캐시를 바꾼 뒤 같은 요청 세트를 다시 실행해요.
긴 프롬프트를 줄이는 것과 여러 GPU에 모델을 배치하는 것은 서로 다른 최적화예요. vLLM의 Prefix Caching과 Tensor Parallelism을 다룬 글처럼, 캐시 적중률과 병렬 처리량을 별도 지표로 기록하면 어느 설정이 병목을 줄였는지 더 분명해집니다. vLLM 캐시·병렬 처리 비교 글도 함께 읽어 보세요.
설정 변경을 되돌리는 방법
환경 변수로 서버를 시작했다면 새 터미널에서 값을 지우고 Ollama 서버를 다시 시작하면 돼요. 변경 전 설정과 실행 시각을 메모하고, 모델·컨텍스트·병렬 수를 한 번에 모두 바꾸지 마세요. 그래야 속도 저하가 모델 배치 때문인지, 캐시 때문인지, 요청량 때문인지 구분할 수 있어요.
로컬 AI는 최대 컨텍스트 숫자를 크게 적는 경쟁보다, 내 작업이 실제로 사용하는 문맥과 메모리 여유를 맞추는 작업에 가까워요. 긴 문서를 처리할 필요가 없는 사용자는 작은 창과 단일 요청으로 시작하고, 코드베이스나 에이전트처럼 긴 문맥이 필요한 경우에만 측정 결과를 근거로 확장하는 편이 안전합니다.
컨텍스트 예산을 요청 유형별로 나눠요
긴 컨텍스트를 설정하기 전에 실제 요청을 짧은 질의, 긴 문서 요약, 코드베이스 탐색, 도구를 여러 번 호출하는 작업으로 나눠 보세요. 각 요청이 보내는 입력 토큰과 출력 토큰, 재시도 횟수를 기록하면 어느 구간에서 메모리가 커지는지 알 수 있어요. Ollama 문서가 말하는 컨텍스트 길이는 모델이 접근할 수 있는 입력 문맥의 상한이지, 모든 요청이 그만큼의 품질이나 속도를 얻는다는 약속은 아닙니다.[1]
긴 문서를 넣을 때는 원문 전체를 매번 보내기보다 먼저 파일을 구간별로 나누고 필요한 부분만 다시 넣는 방법도 비교해 보세요. 컨텍스트를 크게 올리는 것이 검색·요약 파이프라인의 설계 문제를 대신 해결해 주지는 않아요. 긴 창이 필요한 작업과 그렇지 않은 작업을 같은 서버 설정으로 처리하면 짧은 요청까지 느려질 수 있습니다.
병렬 처리의 기준을 처리량으로 잡아요
두 요청을 동시에 처리했을 때 각각 조금 느려져도 전체 완료 시간이 줄어드는지, 아니면 GPU 메모리 부족 때문에 모두 늦어지는지 확인해야 해요. 같은 프롬프트 세트를 단일 요청과 동시 요청으로 각각 실행하고, 첫 토큰 지연·전체 응답 시간·오류 수를 비교하세요. Ollama FAQ는 여유 메모리가 부족하면 새 요청이 대기열에 들어갈 수 있다고 설명해요.[2]
서비스로 운영한다면 사용자별 긴 요청이 서로의 메모리 여유를 잠식하지 않도록 최대 동시 요청 수를 제한하고, 대기열이 길어졌을 때 짧은 요청을 먼저 처리할지 정책을 정해야 해요. 개인 작업에서는 병렬 수를 올리는 대신 모델을 하나만 상주시켜 예측 가능한 응답을 얻는 편이 더 나을 수 있습니다.
변경 전후를 같은 조건으로 비교해요
컨텍스트 길이, KV 캐시 형식, 병렬 수를 한 번에 바꾸면 결과를 해석할 수 없어요. 모델과 프롬프트, 입력 문서, 출력 길이 제한을 고정하고 한 항목만 바꾼 뒤 같은 횟수로 반복하세요. 숫자 계산, 긴 목록, JSON 형식처럼 오류를 쉽게 찾을 수 있는 검증 문항을 섞으면 속도만 보고 품질 저하를 놓치는 일을 줄일 수 있어요.[2][3]
GPU 메모리가 부족한 상태에서 무조건 더 큰 컨텍스트를 선택하지 마세요. 공식 문서에서 안내하는 하드웨어 지원 범위와 현재 시스템의 실제 배치가 다르면 CPU 폴백이나 대기열이 생길 수 있어요. 설정값보다 먼저 ollama ps와 작업별 지연을 기록하는 습관이 중요합니다.[2][3]