블로그로 돌아가기

문제 해결가이드

로컬 LLM이 VRAM 부족? gputaskman으로 가중치와 KV 캐시 보기

Ollama 또는 llama.cpp 모델이 실패하거나 느려질 때 GPU 메모리를 무엇이 채우는지, 어떤 설정을 바꿔야 하는지, 언제 API가 더 간단한지 알아보세요.

작성자: CheapTokens Team 게시됨읽는 시간 7분

가중치, KV 캐시, 연산 버퍼로 나뉜 GPU 메모리를 보여주는 터미널
이 페이지의 내용
  1. 실제로 VRAM을 채우는 것
  2. gputaskman 설치하고 프로세스별로 보기
  3. 가중치, KV 캐시, 버퍼: 숫자는 어디서 오나
  4. 어떤 손잡이를 돌릴까
  5. 작동하지 않으면
  6. 호스팅 모델이 더 간단한 해결책일 때

어제는 로컬 모델이 잘 로드되었는데 오늘은 로드 중에 크래시가 나거나 속도가 매우 느려졌고, 바꾼 것이라고는 컨텍스트 길이뿐입니다. 흔한 원인은 KV 캐시이며, gputaskman이라는 무료 터미널 도구를 사용하면 추측에 맡기지 않고 이를 확인할 수 있습니다.

일반적인 GPU 모니터는 VRAM이 얼마나 찼는지 알려줍니다. 그것은 "무엇"이지 "왜"가 아닙니다. gputaskman의 README(2026년 11월 5일 확인)는 스스로를 "GPU가 얼마나 찼는지뿐 아니라 GPU 내부에 무엇이 있는지를 보여주는 htop"이라고 소개합니다. 초기 단계의 실험적이고 MIT 라이선스 프로젝트이므로, 판결이 아니라 편리한 렌즈로 취급하세요.

실제로 VRAM을 채우는 것#

VRAM을 여행 가방이라고 생각해 보세요. 세 가지가 들어갑니다:

  • 가중치: 모델 자체입니다. 주어진 모델과 양자화에 대해 크기가 고정됩니다.
  • KV 캐시: 대화에 대한 모델의 단기 기억입니다. 컨텍스트가 커질수록 함께 커집니다.
  • 연산 버퍼: 런타임이 작업하는 동안 필요한 임시 공간입니다.

사람들이 "모델이 안 들어간다"고 말할 때, 흔히 의미하는 것은 가중치는 들어가지만 그 위에 요청한 캐시가 들어가지 않았다는 것입니다. 이 구분이 해결책을 결정하며, 바로 이것이 일반 모니터가 숨기는 부분입니다.

사례 선택하기

무엇이 보이나요?

로드 단계에서 바로 실패

가중치만으로, 또는 가중치에 컨텍스트 길이에 대한 캐시를 더한 것이 여유 VRAM보다 큽니다. 더 작은 양자화나 더 작은 모델을 선택하거나 컨텍스트를 줄이세요.

로드된 후 컨텍스트를 올리자 느려짐

KV 캐시가 커져서 작업의 일부가 더 이상 VRAM에 들어가지 않을 가능성이 높습니다. 프로세스 뷰와 분할이 이를 확인해 줄 것입니다. 먼저 컨텍스트 길이를 낮추세요. 가장 저렴한 조정 손잡이입니다.

예전엔 되었는데 지금은 실패

다른 프로세스가 VRAM을 가져갔습니다: 게임, 하드웨어 가속이 켜진 브라우저, 두 번째 모델 서버 등입니다. 모델을 건드리기 전에 프로세스별 뷰를 확인하세요.

gputaskman 설치하고 프로세스별로 보기#

README에는 세 가지 진입 방법이 나옵니다: 포터블 Windows ZIP, uv run --locked gputaskman로 실행하는 클론, 또는 Python 3.11+ 가상 환경 안에서의 pip입니다. README가 설명하는 플랫폼은 다음과 같습니다:

  • NVIDIA 또는 AMD GPU가 있는 Windows 10/11 64비트 (Releases 페이지에 x64 및 ARM64 ZIP 제공);
  • NVIDIA GPU가 있는 Linux 및 WSL (glibc 2.35+; WSL은 Windows 호스트 카운터를 읽을 수 있음);
  • macOS는 Apple Silicon에서 소스 클론으로만 가능하며 포터블 빌드는 없음.

Windows ZIP은 서명되지 않았습니다. 공식 저장소의 Releases 페이지인 github.com/shanselman/gputaskman에서만 다운로드하세요. 프로젝트가 젊고 옵션이 바뀔 수 있으므로 README의 정확한 명령을 복사하세요.

실행되면 이 문제에 중요한 두 가지 뷰가 있습니다:

  1. 장치 뷰: VRAM 사용량, GPU 활동, PCIe, 온도, 전력, 클럭 및 기록 차트. "무언가 급증했나?"를 보기에 좋습니다.
  2. 프로세스 뷰: 프로세스별 로컬 GPU 메모리, GPU 접근 가능 시스템 RAM, 엔진 활동 및 감지된 런타임(CUDA, HIP, Vulkan, Direct3D, ggml, ONNX Runtime).

프로세스 뷰에서 모델 서버(Ollama라면 번들 러너)를 찾으세요. 그런 다음 목록의 나머지를 확인하세요. 브라우저나 게임이 몇 기가바이트를 차지하고 있다면, 모델을 건드리지 않고도 답을 찾은 것입니다.

가중치, KV 캐시, 버퍼: 숫자는 어디서 오나#

모델 인스펙터는 가능한 경우 아키텍처, 양자화 및 버퍼 크기를 보여줍니다. 한 가지 주의할 점이 중요합니다: README에 따르면 가중치, KV 캐시 및 연산 버퍼는 호환되는 로깅이 활성화된 경우 런타임의 로드 로그에서 가져옵니다. llama.cpp의 경우 로깅을 켜고 직접 llama-server를 시작하세요(--log-file server.log -lv 4; README에 따르면 버퍼 크기에는 레벨 4가 필요합니다). Ollama의 경우 gputaskman은 사용 가능하면 Ollama의 server.log을 사용합니다. 그렇지 않으면 GGUF 메타데이터와 컨텍스트 크기로부터 llama.cpp 스타일 배치를 가정한 추정치입니다. 단일 프로세스 내부의 모델별 KV 회계는 아직 지원되지 않습니다.

로그 파일로 llama-server 시작하기
gputaskman이 추정치 대신 로그에서 버퍼 크기를 얻는 방법

따라서 추정 분할은 "대략"으로, 로그 기반 분할은 "런타임이 보고한 것"으로 읽으세요. Ollama의 경우 README에 따르면 번들 러너가 감지되고, GGUF 블롭은 Ollama의 매니페스트에서 이름이 지정되며, 사용 가능하면 server.log이 사용됩니다. LM Studio 지원은 부분적입니다: 모델은 해당 폴더에서 이름이 지정되고 로컬 API를 통해 프로브되지만, 이는 엔드 투 엔드가 아닌 픽스처 응답으로 테스트되었습니다.

두 스냅샷을 JSON으로 저장하고 diff 명령으로 비교할 수도 있습니다. "4K에서 16K 컨텍스트로 갈 때 무엇이 바뀌었나?"에 답하는 깔끔한 방법입니다: 스냅샷 하나를 찍고, 설정을 바꾸고, 다시 로드하고, 또 하나를 찍으세요.

빠른 확인

모델은 로드되지만 컨텍스트 길이를 올린 후 느려집니다. 무엇을 먼저 확인해야 하나요?

정답 보기

정답: KV 캐시

가중치는 컨텍스트 길이에 따라 변하지 않지만 KV 캐시는 변합니다. 컨텍스트 길이를 낮추면 즉시 줄어듭니다.

어떤 손잡이를 돌릴까#

분할을 읽으면 그림뿐 아니라 결정이 나옵니다.

가중치가 큰 조각일 때. 더 작은 양자화나 더 작은 모델로 옮기세요. 가중치를 줄이는 유일한 지렛대입니다. 그 뒤의 메모리 계산이 궁금하면 125B 모델이 16GB GPU에서 실행될 수 있을까?를 참고하세요.

KV 캐시가 큰 조각일 때. 컨텍스트를 줄이세요. Ollama에서는 세션에서 바로 시도할 수 있습니다:

text
ollama run <your-model>
>>> /set parameter num_ctx 8192

8192은 예시 값일 뿐입니다. 작업에 실제로 필요한 값을 고르세요(Ollama 문서 기준 명령, 2026년 11월 5일 확인).

나중에 llama.cpp에서 양자화된 캐시를 사용할 때 프롬프트 처리에서 이상한 느려짐이 보이면, q5_1 KV 캐시에 대한 이 수정이 다음 단계입니다. 컨텍스트 윈도우가 애초에 무엇을 담는지 알아보려면 컨텍스트 윈도우란 무엇인가?를 읽어 보세요.

다른 프로세스가 큰 조각일 때. 그것을 닫거나 통합 GPU에서 실행하세요. 모델에 대해 바꿀 것은 없습니다.

체크리스트

모델을 탓하기 전에

작동하지 않으면#

  • 분할이 이상해 보임. 추정치인지(호환되는 로드 로그 없음) 확인하세요. llama.cpp의 경우 --log-file server.log -lv 4로 llama-server를 실행하고 모델을 다시 로드하세요. Ollama의 경우 gputaskman은 존재하면 server.log을 사용합니다. 거기서 추정치 라벨은 정상입니다.
  • LM Studio가 세부 정보를 덜 보여줌. 위에서 말했듯 지원이 부분적입니다.
  • NVIDIA 또는 AMD GPU가 없음. 이 도구는 로컬 GPU 워크로드만 다룹니다. CPU 전용, NPU 전용 및 클라우드 워크로드는 범위 밖입니다.
  • macOS. 소스 클론에서 실행하세요. 포터블 빌드는 없습니다.

호스팅 모델이 더 간단한 해결책일 때#

큰 문서를 요약하는 것처럼 한 작업에 긴 컨텍스트가 필요한데 GPU에는 짧은 컨텍스트로만 모델이 들어간다고 해 봅시다. 계속 튜닝할 수도 있고, VRAM을 그림에서 빼버릴 수도 있습니다. 그런 작업에는 CheapTokens가 DeepSeek-V4-Flash를 제공합니다: 380K 컨텍스트, 답변당 최대 32,768 출력 토큰, 하루 중 언제든 하나의 가격, OpenAI 호환 API를 통해. GLM-5.3-Flash는 390K 컨텍스트와 최대 8,192 출력 토큰을 가집니다.

호출은 일반적인 OpenAI 형식입니다(키를 환경 변수에 넣으세요):

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Summarize this document: ..."}]}'

설정 세부 사항은 문서에 있습니다. 결정을 위한 경험칙: 작업이 카드가 담을 수 있는 것보다 더 많은 컨텍스트나 더 큰 모델을 계속 요구하고, 프로세스 뷰에서 VRAM이 이미 상당히 사용 중이라면, 그 작업은 API로 보내고 작고 빠른 작업은 로컬에 두세요. DeepSeek을 로컬에서 실행할까, API를 사용할까?에서 그 트레이드오프를 더 깊이 다룹니다.

각 60,000 입력 토큰과 1,000 출력 토큰인 큰 문서 100개를 요약한다고 해 봅시다(380K 윈도우 안에 충분히 들어감). 오늘의 비용은 다음과 같습니다:

모델 요청당 100회 요청 OpenRouter, 100회 요청
GLM-5.3-Flash $0.0012 $0.124 $0.209
DeepSeek-V4-Flash $0.001 $0.10 $0.434
MiniMax-M2.7 $0.0032 $0.315 $3.78

요청당 입력 60,000개 및 출력 1,000개 토큰입니다. 100만 토큰당 가격은 현재 기준이며 당사 요금제에 따라 함께 변경됩니다. OpenRouter 열은 동일한 작업량에 대한 참고 가격을 보여줍니다.

그 숫자 기준으로 문서당 $0.001이 그러한 호출 하나의 실시간 가격이며, 입력과 출력을 합쳐 총계로 보면 OpenRouter보다 낮습니다.

비용 계산기

나만의 배치: 토큰과 요청 수 바꾸기

요청당 입력 토큰: 60,000 · 요청당 출력 토큰: 1,000 · 일일 요청 수: 100

모델일일월간
GLM-5.3-Flash$0.124$3.72
DeepSeek-V4-Flash$0.10$3.00
MiniMax-M2.7$0.315$9.45