CanRun

Ollama·LM Studio가 GPU를 안 쓸 때 — 100% GPU 확인과 오프로드 설정

CanRun · 2026년 10월 15일 업데이트

로컬 모델이 느리고 CPU만 바쁘다면, 먼저 모델이 어디에 올라갔는지 확인합니다. Ollama는 ollama ps의 PROCESSOR 열을, LM Studio는 GPU 오프로드 설정을 봅니다. PROCESSOR 열에 CPU와 GPU가 나뉘어 나오면 모델이 VRAM에 다 들어가지 않은 것입니다. 이때는 필요 메모리를 카드의 사용 가능 메모리와 비교하고, 컨텍스트·KV 캐시·양자화 순서로 줄입니다. VRAM에 다 들어가는 모델인데도 100% CPU로 나온다면 GPU를 못 잡았거나 쓰지 않게 설정된 것입니다. 이때는 드라이버나 백엔드 설정을 봐야 합니다.

먼저 모델이 어디에 올라갔는지 본다

ollama ps는 Ollama가 메모리에 올려 둔 모델을 보여 줍니다. Ollama FAQ에 따르면 PROCESSOR 열은 세 가지로 나옵니다. VRAM에 전부 올라가면 100% GPU, 시스템 메모리에만 있으면 100% CPU로 표시됩니다. 둘에 나뉘어 있으면 48%/52% CPU/GPU처럼 비율이 나옵니다. 같은 줄의 CONTEXT 열은 Ollama가 잡은 컨텍스트 길이입니다. Ollama는 한동안 쓰지 않은 모델을 내리므로, 모델이 올라가 있을 때 확인합니다. 얼마 뒤에 내릴지는 OLLAMA_KEEP_ALIVE로 정합니다.

서버 로그도 함께 봅니다. Windows에서는 %LOCALAPPDATA%\Ollama 폴더의 server.log입니다. macOS는 ~/.ollama/logs/server.log입니다. systemd로 돌리는 Linux에서는 journalctl -u ollama로 봅니다. 0.30부터 Ollama는 GGUF 모델을 llama.cpp 서버로 돌리고, 그 메시지를 같은 로그에 남깁니다. llama.cpp는 모델을 올릴 때 offloaded N/M layers to GPU 형태의 줄을 남깁니다. M은 모델의 층 수보다 하나 많습니다. 출력층도 한 층으로 세기 때문입니다.

LM Studio는 모델을 불러오는 화면에 GPU 오프로드 설정과 예상 메모리 사용량을 함께 보여 줍니다. 메모리가 모자랄 것 같으면 불러오기 전에 경고도 띄웁니다. 오프로드를 최댓값보다 낮게 두면 일부 층은 CPU에서 돌아갑니다.

Windows 작업 관리자의 성능 탭은 GPU마다 메모리를 두 가지로 나눠 보여 줍니다. ‘전용 GPU 메모리’는 그래픽카드의 VRAM입니다. ‘공유 GPU 메모리’는 GPU가 빌려 쓸 수 있는 시스템 RAM입니다. NVIDIA 카드라면 nvidia-smi로 전체 메모리 사용량을 볼 수 있지만, Windows에서는 프로세스별 메모리가 나오지 않습니다.

확인한 결과는 다음 셋 중 하나입니다.

  • CPU와 GPU에 나뉘어 올라감: 모델이나 컨텍스트가 VRAM에 다 들어가지 않았습니다. 다음 두 절을 봅니다.
  • VRAM에 들어가는 모델인데 100% CPU: GPU를 찾지 못했거나 쓰지 못했습니다. 드라이버·백엔드 절로 건너뜁니다.
  • 100% GPU인데 느리고 공유 GPU 메모리가 늘어남: 드라이버가 알리지 않고 시스템 RAM을 쓰고 있을 가능성이 큽니다. 메모리 부족 오류 절에서 다룹니다.

모델이 안 들어가 나뉜 경우 — 필요량과 사용 가능 메모리

그래픽카드에서 모델을 돌리려면 세 가지가 VRAM에 들어가야 합니다. 그래픽카드에 올라가는 가중치, 지금까지의 대화를 담는 KV 캐시, 계산 중에 쓰는 연산 버퍼입니다. 연산 버퍼는 CanRun 계산으로 8k에서 반 GB 남짓입니다. 이 합계는 제품 사양의 용량이 아니라 사용 가능 메모리와 비교합니다. Windows에서 화면 출력을 맡은 카드는 VRAM 일부를 OS가 쓰기 때문입니다. 항목별 설명은 ‘로컬 LLM 사양 — VRAM 8~32GB로 돌릴 수 있는 모델 (2026)’ 가이드에 있습니다.

GeForce RTX 4060에서 Gemma 3 12B 조합을 예로 들어 봅니다. Gemma 3 12B Q4_K_M은 8k 컨텍스트와 f16 KV 캐시에서 8.4GB가 필요합니다. 많이 쓰는 8GB 카드인 RTX 4060의 사용 가능 메모리는 7.4GB입니다. KV 캐시와 연산 버퍼는 GPU에 남으므로, 들어가지 못한 가중치가 시스템 RAM으로 갑니다. 아래 두 번째 막대가 그 몫입니다.

메모리 사용 내역: GeForce RTX 4060에서 Gemma 3 12B (Q4_K_M)

가중치·KV 캐시·연산 버퍼는 모델이 쓰고, OS 예약은 화면 출력 드라이버가 씁니다.
GPU 메모리
시스템 RAM
가중치
6.3GB
KV 캐시
0.5GB
연산 버퍼
0.6GB
OS 예약
0.6GB
시스템 RAM의 가중치
1.0GB

넘친 양은 모델 전체에 비하면 작아 보입니다. 하지만 CanRun 계산으로는 가중치의 90% 미만만 GPU에 남습니다. 그래서 이 카드에서 Gemma 3 12B는 겨우 돌아갑니다(보정된 추정). 토큰 하나를 만들 때마다 가중치 전체를 한 번씩 읽어야 합니다. RTX 4060의 VRAM 대역폭은 272 GB/s입니다. CanRun 표가 가정하는 시스템 RAM인 DDR5-5600 듀얼 채널은 90 GB/s입니다. 시스템 RAM에 있는 층은 이 느린 속도로 읽히고, 토큰 하나를 만드는 시간도 그만큼 길어집니다. 그래서 CanRun은 가중치의 90% 미만이 GPU에 있는 dense 모델을 ‘겨우 가능’보다 높게 판정하지 않습니다.

그러니 ollama ps에 CPU와 GPU가 나뉘어 나와도 오류는 아닙니다. 모델은 돌아가지만 느릴 뿐입니다. 빠르게 돌리려면 필요량을 사용 가능 메모리 아래로 줄여야 합니다.

다른 프로그램도 영향을 줍니다. Ollama와 llama.cpp는 모델을 불러오는 순간 비어 있는 VRAM을 기준으로 배치를 정합니다. 게임이나 하드웨어 가속을 켠 브라우저, 이미 올라가 있는 다른 모델이 VRAM을 쓰고 있으면 그만큼 덜 올라갑니다. 그래서 같은 모델이 어떤 날은 GPU에 다 올라가고, 다른 날은 나뉠 수 있습니다. ollama ps로 올라가 있는 모델을 모두 보고, ollama stop 뒤에 모델 이름을 붙여 내립니다.

줄이는 순서 — 컨텍스트, KV 캐시, 양자화, MoE 전문가

아래 순서로 시도합니다. 컨텍스트를 줄이면 답의 품질은 그대로지만 모델이 볼 수 있는 대화가 짧아집니다. KV 캐시 q8_0은 정밀도 손실이 아주 작고, q4_0은 그보다 큽니다. 양자화를 낮추면 품질을 조금 희생합니다. 마지막 방법은 MoE(전문가 혼합) 모델에만 해당합니다.

컨텍스트 길이

KV 캐시는 컨텍스트 길이에 비례해 커집니다. 그래서 같은 모델도 짧은 컨텍스트에서는 들어가고, 더 긴 컨텍스트에서는 넘칩니다. GeForce RTX 3060 12GB에서 Qwen3 14B가 그런 예입니다. Qwen3 14B는 8k·f16 KV 캐시에서 10.5GB가 필요합니다. 이 카드의 사용 가능 메모리 11.4GB 안에 들어가지만, 남는 메모리가 1GB가 안 되니 불러온 뒤 ollama ps로 확인합니다. 이 조건에서는 원활하게 돌아갑니다. 16k로 늘리면 필요량이 11.9GB로 사용 가능 메모리를 넘고, 가중치 일부가 시스템 RAM으로 갑니다.

Ollama는 감지한 GPU 메모리가 24GiB 미만이면 4k, 24~48GiB면 32k, 48GiB 이상이면 256k 토큰을 기본 컨텍스트 길이로 씁니다 (Ollama 문서, 2026-09-29 확인). 그래서 12GB 카드에서는 Ollama가 4k로 시작합니다. 컨텍스트를 직접 늘리거나 연동한 앱이 더 긴 컨텍스트를 요청하면 모델이 CPU와 GPU에 나뉘어 올라갑니다. 필요량이 사용 가능 메모리를 넘지 않는 가장 긴 길이를 고르세요. 설정하는 방법은 ‘올라마(Ollama)가 느리거나 앞 내용을 잊을 때 — 컨텍스트 기본값’ 가이드에 있습니다.

GeForce RTX 3060 12GB에서 Qwen3 14B (Q4_K_M): 컨텍스트 길이·KV 캐시 종류별 메모리와 판정
컨텍스트KV f16KV q8_0KV q4_0
4k
9.8GB원활
추정 26.1 tok/s22.9–29.2보정된 추정 ±12%
9.5GB원활
추정 26.9 tok/s23.7–30.2보정된 추정 ±12%
9.3GB원활
추정 27.4 tok/s24.1–30.7보정된 추정 ±12%
8k
10.5GB원활
추정 24.4 tok/s21.4–27.3보정된 추정 ±12%
9.9GB원활
추정 25.9 tok/s22.8–29.0보정된 추정 ±12%
9.5GB원활
추정 26.9 tok/s23.6–30.1보정된 추정 ±12%
16k
11.9GB겨우 가능
추정 14.6 tok/s11.7–17.5보정된 추정 ±20%
10.6GB원활
추정 24.1 tok/s21.2–27.0보정된 추정 ±12%
10.0GB원활
추정 25.8 tok/s22.7–28.9보정된 추정 ±12%
32k
14.7GB겨우 가능
추정 6.0 tok/s4.8–7.2보정된 추정 ±20%
12.2GB겨우 가능
추정 12.8 tok/s10.3–15.4보정된 추정 ±20%
10.9GB원활
추정 23.9 tok/s21.1–26.8보정된 추정 ±12%

S = 쾌적 · A = 원활 · B = 겨우 가능 · F = 불가

KV 캐시 종류

Ollama는 서버를 띄울 때 OLLAMA_KV_CACHE_TYPE(f16·q8_0·q4_0)을 지정하고 플래시 어텐션을 켜야만 KV 캐시를 양자화합니다. 이 설정은 그 서버가 돌리는 모든 모델에 적용됩니다 (Ollama 문서, 2026-09-29 확인). q8_0 KV 캐시는 f16의 절반을 조금 넘는 공간을 씁니다. Ollama FAQ는 q8_0의 정밀도 손실이 아주 작다고 설명합니다. RTX 3060 12GB에서 Qwen3 14B를 16k·q8_0으로 돌리면 10.6GB가 필요해 다시 들어가지만 여유가 적습니다. 32k에서는 q8_0으로도 모자랍니다(12.2GB). q4_0이면 10.9GB로 아슬아슬하게 들어가니, 불러온 뒤 ollama ps로 확인합니다. Ollama FAQ는 q4_0의 정밀도 손실을 작거나 중간 정도로 봅니다. llama.cpp에서는 --cache-type-k와 --cache-type-v 옵션이 같은 일을 합니다. 종류별로 얼마나 줄어드는지는 ‘KV 캐시와 컨텍스트 길이 — 컨텍스트를 늘리면 VRAM이 얼마나 더 필요할까’ 가이드에 정리했습니다.

더 작은 양자화

컨텍스트만 줄여도 기준을 아슬아슬하게 넘기는 경우가 있습니다. RTX 4060에서 Gemma 3 12B는 f16 KV 캐시로 4k까지 줄여도 조금 넘칩니다. 그래도 GPU에 남는 가중치가 90%를 넘어 원활하게 돌아갑니다. 8GB 카드에서는 Ollama 기본값이 4k입니다. 8k에서 KV 캐시를 q4_0으로 두어도 원활하게 돌아갑니다. f16 캐시로 8k가 필요하다면 양자화를 낮춥니다. Q4_K_M에서 IQ4_XS로 내리면 가중치가 줄어듭니다. 여전히 조금 넘치지만 가중치의 90% 이상이 GPU에 남아, 원활하게 돌아갑니다. 이 카드에 전부 들어가는 것은 손실 큼 등급인 Q2_K뿐입니다.

GeForce RTX 4060에서 Gemma 3 12B: 양자화별 판정 (8k 컨텍스트·f16 KV 캐시)
양자화품질 등급판정속도메모리
Q8_0준무손실겨우 가능
추정 5.6 tok/s4.5–6.7보정된 추정 ±20%
8.0 / 8.0GB + RAM 6.2GB
Q4_K_M균형겨우 가능
추정 16.7 tok/s13.4–20.1보정된 추정 ±20%
8.0 / 8.0GB + RAM 1.0GB
IQ4_XS균형원활
추정 23.8 tok/s19.0–28.5보정된 추정 ±20%
8.0 / 8.0GB + RAM 0.3GB
Q2_K손실 큼쾌적
추정 35.9 tok/s31.6–40.2보정된 추정 ±12%
6.5 / 8.0GB

그러니 이 조합에서는 Q4_K_M을 4k로 쓰거나, 8k에서 q4_0 KV 캐시를 쓰는 쪽이 현실적입니다. 조금 넘치는 IQ4_XS를 쓰거나 더 작은 모델을 고를 수도 있습니다. 양자화 단계별 품질 차이는 ‘GGUF 양자화 등급 정리 — Q4_K_M·IQ4_XS·Q8_0 무엇을 받을까’ 가이드에서 비교합니다.

MoE 모델 — 전문가를 시스템 RAM에

MoE 모델에는 층을 통째로 옮기는 것보다 나은 방법이 있습니다. 토큰 하나에 쓰이는 전문가는 몇 개뿐입니다. 그래서 어텐션과 공용 가중치는 GPU에 두고, VRAM에 안 들어가는 전문가 가중치만 시스템 RAM에 둘 수 있습니다. gpt-oss-20b는 12.3GB가 필요해 RTX 3060 12GB의 사용 가능 메모리를 넘습니다. CanRun 계산으로는 전문가 일부를 RAM에 두고 원활하게 돌아갑니다. 이 조합의 속도는 이론 추정(±30%)입니다.

기본으로 켜져 있는 llama.cpp의 fit 기능은 사용자가 정하지 않은 설정에 대해 이렇게 나눠 올립니다. 직접 정하려면 --n-cpu-moe N을 씁니다. 최근 Ollama는 num_gpu를 지정하지 않으면 GPU에 올릴 층 수를 llama.cpp에 맡깁니다. 그래서 이런 모델은 ollama ps에 CPU/GPU로 나뉘어 나올 수 있습니다. MoE 모델에서는 의도한 배치이니 고장이 아닙니다. 큰 MoE 모델에 카드별로 RAM이 얼마나 필요한지는 ‘그래픽카드보다 큰 MoE 모델 돌리기 — gpt-oss-120b와 시스템 RAM’ 가이드에 정리했습니다.

GPU를 아예 못 잡은 경우 — 드라이버, CUDA·ROCm·Vulkan

VRAM에 충분히 들어가는 모델이 100% CPU로 나온다면 메모리 문제가 아닙니다. Llama 3.1 8B Q4_K_M은 8k에서 6.3GB가 필요하고, RTX 4060의 사용 가능 메모리는 7.4GB입니다. CanRun 계산으로는 GPU에 전부 올라갑니다. 그런데도 CPU에서 돈다면 Ollama가 카드를 찾지 못했거나 쓰지 못한 것입니다.

먼저 서버 로그를 엽니다. Ollama는 서버가 시작될 때 찾은 GPU마다 inference compute라는 줄을 남깁니다. 이 줄에는 쓸 라이브러리(CUDA·ROCm·Vulkan 등), 카드 이름, 전체 메모리와 사용 가능 메모리가 적힙니다. 이 줄이 library=cpu 하나뿐이면 GPU를 하나도 찾지 못한 것입니다. GPU를 찾는 과정을 더 자세히 보려면 작업 표시줄에서 Ollama를 종료하고 OLLAMA_DEBUG를 켠 채 다시 실행합니다. PowerShell에서는 $env:OLLAMA_DEBUG="1"; & "ollama app.exe"이고, 늘어난 내용은 같은 server.log에 남습니다.

제조사별로 확인할 것은 다음과 같습니다.

  • NVIDIA: Ollama 하드웨어 문서에 필요한 연산 능력(compute capability)과 드라이버 버전이 나와 있습니다. 드라이버가 그보다 오래됐다면 NVIDIA에서 새로 받습니다. Linux에서는 절전 모드에서 깨어난 뒤 GPU를 찾지 못하고 CPU로 돌리는 일이 있습니다. 문서는 이때 nvidia_uvm 모듈을 다시 불러오라고 안내합니다.
  • Windows의 AMD: Windows에서 ROCm을 쓰려면 ROCm v7(HIP 7)을 지원하는 AMD 드라이버가 필요하니 Radeon 드라이버부터 업데이트합니다. ROCm으로 지원하는 카드는 Radeon RX 7900 XTX·7900 XT·7900 GRE·7800 XT·7700 XT·7600 XT·7600과 Radeon PRO W7500~W7900입니다. Radeon RX 9070 XT 같은 다른 Radeon 카드는 이 목록에 없습니다. Ollama는 Vulkan으로 더 많은 GPU를 지원하고, Vulkan은 백엔드가 설치돼 있으면 기본으로 켜집니다. Windows 문서는 드라이버가 ROCm을 지원하지 않는 RX 6000 계열에 Vulkan을 대안으로 권합니다.
  • Linux의 AMD: ROCm v7 드라이버가 필요합니다. Ollama를 실행하는 계정은 보통 render나 video 그룹에 들어 있어야 합니다. ROCm이 지원하지 않는 카드도 HSA_OVERRIDE_GFX_VERSION에 비슷한 지원 GPU의 gfx 버전을 넣으면 돌아가는 경우가 있습니다. 이 방법은 Linux에서만 됩니다.
  • Intel Arc: Intel Arc B580 같은 카드도 Vulkan으로 돌아갑니다. Linux에서는 Intel GPU 드라이버 패키지를 먼저 설치합니다. Ollama 하드웨어 문서에 Intel 안내 링크가 있습니다.
  • Docker로 돌리는 Ollama: 컨테이너를 --gpus all(NVIDIA Container Toolkit 필요)로 시작하지 않으면 GPU가 보이지 않습니다. AMD라면 /dev/kfd와 /dev/dri 장치를 컨테이너에 넘겨야 합니다. Ollama 문제 해결 문서는 docker run --gpus all ubuntu nvidia-smi로 먼저 시험해 보라고 안내합니다.

일부러 GPU를 가리는 설정도 있습니다. GPU를 고르는 CUDA_VISIBLE_DEVICES·ROCR_VISIBLE_DEVICES가 그 예입니다. Ollama 하드웨어 문서에 따르면 여기에 -1 같은 없는 ID를 넣으면 CPU만 씁니다. OLLAMA_VULKAN=0은 Vulkan을 끕니다. Modelfile이나 요청에서 num_gpu를 0으로 두면 모든 층이 CPU에 남습니다. 예전에 이것저것 시험해 봤다면 환경 변수와 Modelfile에 이런 값이 남아 있는지 봅니다. 내장·외장 그래픽이 함께 있는 노트북이라면 GGML_VK_VISIBLE_DEVICES로 쓸 장치를 고릅니다.

LM Studio는 llama.cpp를 여러 빌드로 제공합니다. CPU 전용, CUDA, Vulkan, ROCm, Metal용입니다. Ctrl+Shift+R(맥은 Cmd+Shift+R)로 런타임 탭을 열고, GPU용 빌드가 선택돼 있는지 확인합니다. 하드웨어 설정(Ctrl+Shift+H)에는 GPU마다 켜고 끄는 스위치가 있습니다. 여기서 꺼 둔 GPU는 쓰지 않습니다.

LM Studio GPU 오프로드 — 몇 층을 올릴까

LM Studio의 GPU 오프로드 설정은 모델의 층 가운데 몇 개를 GPU에 올릴지 정합니다. 명령줄 도구 lms load는 같은 설정을 비율로 받습니다. --gpu 0.5는 층의 절반을 GPU에 올리고, --gpu max는 전부 올립니다. --gpu off는 하나도 올리지 않습니다. 지정하지 않으면 LM Studio가 자동으로 정합니다.

모델이 다 들어간다면 오프로드를 최댓값으로 둡니다. CPU에 남긴 층이 있으면 토큰마다 그만큼 느려지므로, 전부 들어가는데 일부만 올릴 이유가 없습니다. 최댓값에서 LM Studio가 경고한다면 시작값을 직접 구할 수 있습니다. CanRun이 조합 페이지의 llama.cpp 명령에 넣는 -ngl 값도 같은 방법으로 정합니다.

  1. 카드의 사용 가능 메모리에서 원하는 컨텍스트의 KV 캐시를 뺍니다. 연산 버퍼 몫도 뺍니다. 8k에서 반 GB 남짓이고, 컨텍스트가 길수록 늘어납니다.
  2. 남은 양을 모델 파일 크기로 나눕니다. 이 값이 GPU에 올릴 수 있는 층의 비율입니다.
  3. 여기에 모델의 층 수를 곱하고 소수점 아래를 버립니다.

GeForce RTX 4060에서 Qwen3 14B 조합으로 계산해 봅니다. Qwen3 14B Q4_K_M 파일은 9.0GB이고, 층은 40개입니다. 8k·f16 KV 캐시는 1.3GB이고, 이 카드의 사용 가능 메모리는 7.4GB입니다. 계산하면 층의 5분의 3 정도가 들어갑니다. 소수점 아래를 버린 층 수가 이 조합 페이지의 -ngl 뒤에 적힌 값입니다. 슬라이더를 이 값에 맞추고 LM Studio의 예상치로 확인합니다. 그래도 경고가 뜨면 한두 층씩 내립니다. 모델의 상당 부분이 CPU에 남으므로, 이 카드에서 Qwen3 14B는 겨우 돌아갑니다.

설정 두 가지를 더 알아 두면 좋습니다. 첫째는 ‘Limit Model Offload to Dedicated GPU Memory’입니다. 가중치가 공유 GPU 메모리로 가지 않게 막는 옵션입니다. LM Studio 릴리스 노트에 따르면 공유 GPU 메모리를 쓰면 속도가 크게 떨어질 수 있습니다. 다만 컨텍스트용 버퍼는 여전히 공유 메모리에 놓일 수 있고, 처음 나왔을 때는 CUDA에서만 동작했습니다.

둘째는 MoE 모델용 ‘Force Model Expert Weights onto CPU’입니다. MoE 모델이라면 층 수를 줄이는 것은 맞는 방법이 아닙니다. 이 옵션은 llama.cpp의 --n-cpu-moe와 같은 원리로 전문가 가중치를 시스템 RAM으로 보냅니다. 릴리스 노트 설명대로라면 이 스위치는 전문가 가중치를 전부 옮깁니다. CanRun의 MoE 추정은 들어가는 만큼 전문가를 GPU에 남긴다고 보고 계산합니다. 그래서 이 설정을 켰을 때는 CanRun의 예상 속도 범위가 맞지 않습니다.

CUDA out of memory 오류가 날 때

메모리 부족(out of memory) 오류는 런타임이 비어 있는 VRAM보다 많은 양을 요청했다는 뜻입니다. 여유가 적은 조합일수록 이 오류가 나기 쉽습니다. RTX 3060 12GB에서 8k로 돌리는 Qwen3 14B가 그런 예입니다. 게임이나 브라우저가 VRAM을 조금만 써도 같은 모델이 넘칠 수 있습니다. 아래 순서로 해결합니다.

  1. VRAM 비우기: 게임처럼 GPU를 많이 쓰는 프로그램을 닫습니다. 안 쓰는 모델은 ollama stop으로 내립니다.
  2. 컨텍스트 줄이기, KV 캐시를 q8_0으로: 앞 절에서 다룬 방법입니다.
  3. GPU에 올리는 층 줄이기: ollama run 안에서는 /set parameter num_gpu 20처럼 입력합니다. GPU에 보낼 층 수를 정하는 설정이고, 숫자는 내 카드에 맞게 고릅니다. API에서는 options의 num_gpu입니다. LM Studio는 오프로드 슬라이더를 내립니다. llama.cpp는 -ngl을 낮추거나, fit 기능이 장치마다 비워 두는 여유인 --fit-target을 늘립니다. 단위는 MiB입니다. 최근 Ollama는 같은 여유를 LLAMA_ARG_FIT_TARGET(MiB)으로 넘깁니다. PowerShell에서는 $env:LLAMA_ARG_FIT_TARGET="2048"; ollama serve이고, 작업 표시줄 앱으로 쓴다면 계정의 환경 변수로 정합니다.
  4. 더 작은 양자화로 바꾸기: 위 양자화 표에서 한 단계 낮은 파일을 고릅니다.

Windows에서 NVIDIA 카드를 쓰면 메모리 부족 오류가 아예 나지 않을 수도 있습니다. NVIDIA 드라이버는 VRAM이 모자라면 시스템 RAM을 공유 GPU 메모리로 빌려 쓰게 합니다. 프로그램은 계속 돌아가지만 속도가 크게 떨어집니다. 할당 자체는 성공했으므로, Ollama나 LM Studio는 모델이 GPU에 다 있다고 표시할 수 있습니다. NVIDIA 지원 문서는 이 동작을 프로그램별로 끄는 방법을 안내합니다. NVIDIA 제어판의 ‘3D 설정 관리’에서 ‘프로그램 설정’을 열고, 실제로 GPU를 쓰는 실행 파일을 추가합니다. Ollama 0.30 이후라면 Ollama 설치 폴더 lib\ollama의 llama-server.exe입니다. 작업 관리자 ‘세부 정보’ 탭에서 실행 중인 프로세스의 파일 위치를 열면 찾을 수 있습니다. 그다음 ‘CUDA - Sysmem Fallback Policy’를 ‘Prefer No Sysmem Fallback’으로 바꾸고 Ollama나 LM Studio를 다시 시작합니다. NVIDIA는 이렇게 하면 메모리가 모자랄 때 프로그램이 강제로 종료될 수 있다고 경고합니다. 조용히 느려지기보다 오류를 보는 편이 낫다면 써 볼 만합니다.

이 숫자는 얼마나 확실한가

이 글의 메모리 수치는 가중치, KV 캐시, 연산 버퍼를 더한 값입니다. 실제 GGUF 파일의 크기와 헤더, 모델이 공개한 설정값으로 공식에 따라 계산했습니다. 속도는 추정치라서 오차 범위와 신뢰 라벨을 붙입니다. 보정된 추정은 NVIDIA·AMD 그래픽카드에서 dense 모델을 GPU에만 올릴 때 ±12%입니다. 부분 오프로드, MoE 모델, 그 밖의 하드웨어에서는 ±20%입니다. 이론 추정은 ±30%이고, 이 글에서는 전문가를 시스템 RAM에 둔 gpt-oss-20b가 여기에 해당합니다. 컨텍스트 표와 양자화 표에는 칸마다 라벨이 붙어 있습니다.

CanRun 계산이 곧 런타임의 실제 배치는 아닙니다. Ollama, LM Studio, llama.cpp는 각자 메모리를 추정하고 여유를 따로 둡니다. 예를 들어 llama.cpp의 fit 기능은 기본으로 장치마다 여유를 남깁니다. 그래서 CanRun 표에서 아슬아슬하게 들어가는 조합이 Ollama에서는 나뉘어 올라갈 수 있습니다. 내 PC에서는 ollama ps와 LM Studio의 예상치를 기준으로 봅니다.

CanRun 표는 다음 조건을 가정합니다. Windows에서 그 카드로 화면을 출력하고, 시스템 RAM은 32GB(DDR5)입니다. 모델은 하나만 올리고, 요청은 한 번에 하나만 처리합니다. 본문에서 말하는 판정은 따로 밝히지 않으면 8k 컨텍스트, f16 KV 캐시 기준입니다.

판정 읽는 법

쾌적
GPU에 전부 올라가고 20 tok/s 이상
원활
GPU에 전부 올라가고 8~20 tok/s, MoE 전문가를 시스템 RAM에 두고 20 tok/s 이상, 또는 GPU에 90% 이상 올라가고 8 tok/s 이상
겨우 가능
2~8 tok/s, CPU 전용, GPU에 90% 미만, 또는 MoE 전문가를 RAM에 두고 20 tok/s 미만
불가
메모리에 안 들어가거나 2 tok/s 미만

자주 묻는 질문

NVIDIA 카드인데 ollama ps에 100% CPU로 나오는 이유는 무엇인가요?

Ollama가 쓸 수 있는 GPU를 찾지 못했거나, 어떤 설정이 GPU를 가리고 있기 때문입니다. 서버 로그에서 inference compute 줄을 찾아봅니다. library=cpu라면 GPU를 찾지 못한 것입니다. 드라이버가 Ollama 하드웨어 문서의 요구 버전보다 오래됐다면 업데이트합니다. 설정에 CUDA_VISIBLE_DEVICES나 num_gpu 0이 남아 있지 않은지도 봅니다. Docker로 돌린다면 컨테이너를 --gpus all로 시작했는지 확인합니다. 모델 필요량이 사용 가능 메모리보다 넉넉히 작다면 메모리 탓이 아닙니다.

ollama ps에 CPU와 GPU가 나뉘어 나오면 문제인가요?

속도만 문제입니다. 모델은 돌아가지만, 시스템 RAM에 있는 부분은 시스템 메모리 속도로 읽힙니다. DDR5-5600 듀얼 채널의 대역폭은 RTX 4060의 3분의 1 정도입니다. 가중치의 90% 미만이 GPU에 남는 dense 모델은 CanRun이 ‘겨우 가능’보다 높게 판정하지 않습니다. 전문가를 시스템 RAM에 둔 MoE 모델이라면 나뉘는 것이 정상입니다.

LM Studio에서 GPU 층을 몇 개로 정해야 하나요?

모델이 사용 가능 메모리에 들어가면 전부 올립니다. 안 들어가면 사용 가능 메모리에서 KV 캐시를 빼고, 연산 버퍼 몫으로 반 GB 남짓(8k 기준)을 더 뺍니다. 그 값을 모델 파일 크기로 나누고, 층 수를 곱한 뒤 소수점 아래를 버립니다. 다 들어가지 않는 dense 모델이라면 CanRun 조합 페이지의 llama.cpp 명령에서 -ngl 뒤에 이 값이 있습니다. MoE 모델은 층을 모두 GPU에 두고 전문가 가중치를 RAM으로 옮기는 편이 낫습니다.

Windows에서 Ollama가 AMD Radeon GPU를 쓰나요?

씁니다. Ollama의 Windows 목록에 있는 카드는 ROCm v7을 지원하는 드라이버에서 ROCm으로 씁니다. Radeon RX 7600·7600 XT·7700 XT·7800 XT·7900 GRE·7900 XT·7900 XTX와 Radeon PRO W7500~W7900입니다. 그 밖의 많은 카드는 Vulkan으로 쓰고, Vulkan은 백엔드가 설치돼 있으면 기본으로 켜집니다. 내 카드에 어떤 라이브러리가 잡혔는지는 서버 로그의 inference compute 줄에서 확인합니다.

출처

이 페이지의 속도는 오차 범위와 신뢰 라벨을 붙인 추정치이거나, 출처를 밝힌 공개 벤치마크 결과입니다. 판정은 표마다 적어 둔 구성을 기준으로 합니다.