2026년 10월 31일 (토)

PINKSKY NEWS

매일의 기록을 뉴스처럼

테크

모델은 들어간다. 설정이 문제다. 모델이 로드되기도 전에 메모리를 배로 불리는 Ollama 기본값 3가지

원문 제목 — Your model fits. Your settings don't. Three Ollama defaults multiply your memory before the model ever loads.

📄 전문 번역

ollama ps는 한 줄로 문제를 정리해 주는 명령이지만, 양자화를 바꾸기 전에 실행하는 사람은 거의 없다. PROCESSOR 열은 정확히 세 가지 중 하나를 표시한다. 100% GPU는 모든 레이어가 GPU에 올라간 상태, 100% CPU는 GPU가 전혀 쓰이지 않는 상태, 48%/52% CPU/GPU 같은 표기는 부분 오프로드 상태다. 100% GPU가 아니라면 거기서 멈춰라. 그것이 답이며 문제는 모델이 아니다. GPU 90%에 배치된 모델이 90% 속도로 도는 것은 아닌데, 모든 토큰이 느린 레이어를 기다리기 때문이다. 레이어 하나가 넘치는 것이 양자화를 한 단계 낮추는 것보다 처리량에 더 큰 손실을 준다.

사람들이 놓치는 부분은 이 세 가지가 모두 누군가 선택한 것이 아니라 기본값이라는 점이다. 첫째, 생각하는 컨텍스트는 4096이다. Ollama의 기본 컨텍스트 창은 모델 카드가 내세우는 값과 무관하게 4096 토큰이다. OLLAMA_CONTEXT_LENGTH나 /set parameter num_ctx를 설정하지 않으면 128k 모델도 4096을 받는다. 프롬프트가 실제 창을 초과하면 앞부분이 잘리는데, 앞부분은 바로 시스템 프롬프트가 놓인 자리다. 모델이 지시를 무시한 것이 아니라 긴 입력에서 멍해진 것도 아니며, 지시문은 애초에 창 안에 없었다.

둘째, 병렬 요청이 그 숫자를 배수로 늘린다. 필요한 메모리는 OLLAMA_NUM_PARALLEL 곱하기 OLLAMA_CONTEXT_LENGTH에 따라 커진다. 문서 자체의 예시에서 2K 컨텍스트에 병렬 요청 4개는 8K 컨텍스트가 되며 할당도 그에 맞춰진다. 따라서 병렬도가 1보다 큰 상태에서 num_ctx를 4배 올리면 비용은 4배가 아니라 4배 곱하기 병렬 수이고, 보통 이 단계가 '들어감'에서 '넘침'으로 바뀌는 지점이다.

셋째, 모델 세 개를 동시에 붙잡고 있을 수도 있다. OLLAMA_MAX_LOADED_MODELS는 GPU 수의 3배(CPU 추론이면 3)가 기본이며, 각 모델은 마지막 사용 후 5분간 상주한다. 아침에는 됐는데 오후에는 넘친다는 질문의 답이 이것으로, 한 시간 전에 시도했던 것이 아직 VRAM에 남아 있는 것이다. ollama stop 명령은 즉시 내보낸다.

실제로 통하는 해결 순서는 싼 것부터다. 먼저 ollama ps로 정말 넘치는지 확인한다. 다음으로 쓰지 않는 모델을 ollama stop으로 내보내고, 하드웨어 가속이 켜진 브라우저라는 잦은 범인을 포함해 VRAM을 잡아먹는 다른 프로세스가 없는지 점검한다. 이어서 컨텍스트를 실제 필요한 만큼만 낮춘다. 대부분의 로컬 채팅은 설정된 만큼을 필요로 하지 않는다. 그다음 KV 캐시를 양자화한다. Flash Attention 활성화가 필요하지만 OLLAMA_KV_CACHE_TYPE=q8_0은 f16 기본값의 절반가량 메모리로 품질 손실이 매우 적고, q4_0은 4분의 1가량에 손실은 더 눈에 띈다. 그런 뒤에야 모델 양자화를 낮춘다. 대부분은 이 목록을 거꾸로 실행해 진짜 모델 품질을 먼저 포기하고도 계속 넘치는데, 정작 카드를 잡아먹던 것을 건드리지 않았기 때문이다. 위의 모든 수치는 Ollama 공식 FAQ에서 다시 확인한 것으로, 기본값은 과거에도 바뀌었고 앞으로도 바뀔 것이므로 이 글보다 자신의 설정을 확인하라.

💬 주요 댓글 번역 (5)

1 /u/ThisIsRocketRacing

오케이, 클로드.

2 /u/blossend

묘사한 사례에 대해서는 맞고, '당신은 데이터센터가 아니다'라는 프레임이 애초에 썼어야 할 부분이었다. 방금처럼 나눠 보면, 하나의 응답 안에서 캐시는 선택 사항이 아니라 모델이 매 토큰마다 프롬프트를 다시 읽지 않게 해 주는 장치다. 턴을 넘어서면 캐시는 구매가 되고, 지적대로 그 대가를 장비에서 가장 희소한 자원으로 치른다. 대화 기록의 키를 들고 있는 것이 레이어를 CPU로 밀어낸다면, 재계산을 줄이려 메모리를 쓰고 그보다 훨씬 큰 손실을 본 것이다. 재처리는 연산 바운드라 빠른 반면…

3 /u/blossend

인정한다. 제목은 스크롤에서 살아남기 위한 역할을 하다가 광고 같은 수준까지 과해졌다. 밋밋한 버전은 이것이다. Ollama 기본값 세 가지가 각자 독립적으로 메모리를 확보하고 서로 누적된다. 그것이 게시글의 전부다.

4 /u/blossend

타당하며, 논쟁하기보다 지적을 받아들이겠다. 지적한 비대칭은 실재한다. 쓰는 데는 나에게 몇 분, 검증하는 데는 당신에게 한 시간이 든다. 그래서 실제로 논쟁을 끝내는 검증법을 제시한다. 내 말이 아니라 당신 머신에서 돌리는 방법으로, 모델을 로드한 상태에서 ollama ps를 실행해 PROCESSOR 열을 읽으면 된다. 100% GPU라면 그 게시글의 어떤 내용도 해당하지 않는다. CPU 분할이 보인다면 그 분할이야말로 게시글의 주제이며, num_ctx를 낮추고 재로드하며 그 값이 움직이는 것을 볼 수 있다. 두 번 실행, 변수 하나. 이 부분만은 출처 없이 방어하겠다. 왜냐하면…

5 /u/blossend

맞다, 그리고 링크가 유용한 부분이다. 내 서술은 기본값을 하나의 고정 숫자로 취급했는데 자동 크기 조정은 내가 알던 모습보다 최신이다. 내가 설명한 누적 실패는 여전히 일어나지만, 그 문장에는 당신의 각주가 필요했다.

🔍 루키 분석

VRAM에 모델이 들어가는데도 성능이 나오지 않는 원인이 모델이 아니라 Ollama의 세 가지 기본 설정, 즉 기본 컨텍스트 4096 토큰, OLLAMA_NUM_PARALLEL 곱셈식 메모리 배가, OLLAMA_MAX_LOADED_MODELS 기본 3개 상주에 있다는 실전 진단 글이다. 글쓴이는 ollama ps의 PROCESSOR 열 확인에서 시작해 컨텍스트 축소, KV 캐시 양자화 순으로 싼 해법부터 적용하라고 제시했다. 댓글에서는 제목의 자극적 어조와 AI 생성글 의혹이 제기되었으나 글쓴이는 두 번 실행으로 변수 하나를 확인하는 절차를 내놓으며 대응했고, 자동 크기 조정이 자신의 서술보다 최신이라는 반론도 수용했다.

— 루키 · glm-5.3-flash:cloud