VRAM 부족으로 LLM이 튕기면 순서가 있습니다. 컨텍스트(num_ctx) 축소, KV 캐시 q8_0 양자화, 더 작은 양자화 태그 순으로 줄이고, RAM 오프로드는 최후의 수단입니다. ollama에서는 OLLAMA_KV_CACHE_TYPE=q8_0 설정만으로 컨텍스트 메모리가 절반으로 줄고 품질 저하는 거의 없어, 그래픽카드를 새로 사지 않고 해결되는 경우가 많습니다.
VRAM 부족하면 튕기나, 느려지나?
도구마다 동작이 다릅니다. 리눅스 표준 PyTorch는 VRAM을 넘기는 순간 torch.cuda.OutOfMemoryError로 즉시 종료되고, 조용히 RAM으로 넘어가는 일이 없습니다. 반면 ollama는 모델이 VRAM에 안 들어가면 경고 없이 CPU로 폴백하는 문제가 공식 리포지토리에 이슈(#14258)로 등록되어 있을 정도로 흔합니다. 느려진 게 아니라 이미 CPU로 도는 것입니다. llama.cpp는 –n-gpu-layers 값으로 의도적으로 레이어 일부를 CPU에 배치하고, vLLM은 cpu_offload_gb, Hugging Face accelerate는 device_map=”auto”로 같은 효과를 명시적으로 켭니다. 결론: 학습 중 튕김은 PyTorch 경로, 대화형 추론의 체감 지연은 ollama/llama.cpp 경로의 서로 다른 메커니즘이므로 진단 방법도 달라야 합니다.
VRAM 부족 확인은 ollama ps와 nvidia-smi로
ollama를 쓴다면 먼저 ollama ps의 PROCESSOR 열을 봅니다. 공식 문서 기준 100% GPU는 전부 VRAM에 로드된 상태, 100% CPU는 시스템 RAM에서 도는 상태, “48%/52% CPU/GPU”처럼 섞여 나오면 분할 로드된 상태입니다. NVIDIA 그래픽카드에서는 nvidia-smi --query-gpu=memory.used,memory.total --format=csv -l 1로 사용량을 실시간 확인하고, 오프로드 여부를 확실히 보려면 nvidia-smi dmon -s t -d 1의 rxpci 열을 봅니다. 토큰 생성이 안정된 뒤에도 rxpci에 값이 계속 잡히면 PCIe로 가중치를 실어 나르는 중, 즉 일부 레이어가 CPU에서 계산하고 있다는 신호입니다. PyTorch에서 nvidia-smi 수치가 코드 할당량보다 크게 보이는 것은 누수가 아니라 캐싱 얼로케이터 풀이며, torch.cuda.empty_cache()로 반환할 수 있습니다.
양자화하면 얼마나 줄어드나
가중치 메모리는 대략 파라미터 수 × 파라미터당 바이트입니다. FP16/BF16은 2바이트라 70B 모델이 약 140GB, INT8은 약 70GB, INT4급 양자화는 약 35GB로 줄어듭니다. ollama 기본 태그는 이미 Q4급 양자화라 다운로드 크기가 곧 VRAM 로드 크기에 가깝습니다(2026-10-27 ollama 모델 페이지 기준). 아래 최소 안내치는 가중치에 컨텍스트와 런타임 여유 15%를 더한 근사값입니다.
| ollama 태그 | 다운로드 크기 | 최소 VRAM 안내(근사) |
|---|---|---|
| qwen3:8b | 5.2GB | 약 6.0GB |
| gemma3:12b | 8.2GB | 약 9.4GB |
| qwen3:14b | 9.3GB | 약 10.7GB |
| gemma3:27b | 17GB | 약 19.6GB |
| qwen3:30b (MoE) | 19GB | 약 21.9GB |
5060 Ti 16GB, 5070 Ti 16GB 카드라면 qwen3:14b와 gemma3:12b 구간이 안정권이고, gemma3:27b와 qwen3:30b은 24GB급(3090/4090 중고 포함)이 필요합니다. 모델별 상세 대사는 모델 크기별 필요 VRAM과 추천 GPU 실행표를 보십시오.
컨텍스트 줄이면 얼마나 아껴지나
VRAM 부족 체증의 절반은 컨텍스트에서 발생합니다. KV 캐시는 컨텍스트 길이, 배치 크기, 레이어 수에 비례해 커지는데, 70B급 FP16 기준 컨텍스트 4K에서 약 4~8GB, 32K로 늘리면 30~50GB까지 불어납니다. 멀티턴 대화에서 컨텍스트가 쌓이면 가중치보다 KV 캐시가 더 큰 비중을 차지하는 시점이 옵니다. 그래서 튕김 잡기 1순위는 모델 교체가 아니라 num_ctx 축소입니다. ollama 기본값은 4096이고, /set parameter num_ctx 또는 OLLAMA_CONTEXT_LENGTH로 조정합니다. “로드될 때는 되는데 긴 프롬프트에서 튕긴다”면 원인은 100% KV 캐시입니다.
KV 캐시 양자화 q8_0은 얼마나 아껴주나
ollama 공식 FAQ 기준, Flash Attention이 켜진 상태에서 OLLAMA_KV_CACHE_TYPE 환경변수로 KV 캐시 정밀도를 지정할 수 있습니다. 기본값은 f16이고, q8_0은 f16의 약 1/2 메모리에 정밀도 손실이 매우 작아 품질 저하가 체감되지 않는 경우가 많아 권장되고, q4_0은 약 1/4 메모리에 손실이 small-medium 수준으로 긴 컨텍스트에서 눈에 띌 수 있습니다. 주의할 점은 GQA 그룹 수가 많은 모델(Qwen2 계열 등)은 양자화 영향이 더 클 수 있다는 공식 안내입니다. 설정은 전역 적용이라 모든 모델에 함께 걸립니다. 정리하면 12GB 카드에서 qwen3:14b(9.3GB)가 컨텍스트 8K에서 튕긴다면, num_ctx를 줄이거나 q8_0으로 KV를 절반으로 만들어 남는 공간을 확보하는 쪽이 먼저입니다.
RAM 오프로드는 속도가 얼마나 떨어지나
오프로드는 튕김을 확실히 잡지만 속도 청구서가 붙습니다. LLM 디코딩은 저배치에서 사실상 메모리 대역폭에 속도가 비례하기 때문입니다. 경로별 대략적인 피크 대역폭은 다음과 같습니다(NVIDIA 공식 스펙 및 공개 벤치 기준).
| 경로 | 피크 대역폭(근사) |
|---|---|
| DDR5 시스템 RAM(듀얼채널) | 약 90GB/s |
| PCIe Gen5 x16(한 방향) | 약 64GB/s |
| RTX 5070 GDDR7 | 672GB/s |
| RTX 4090 GDDR6X | 1,008GB/s |
| RTX 5090 GDDR7 | 1,792GB/s |
CPU로 넘긴 레이어는 이 중 DDR5/PCIe 속도로만 돕니다. 4090급에서 절반을 CPU로 넘기면 그 구간의 체감 대역폭이 10배 이상 나므로 토큰 속도도 같은 방향으로 빠집니다. 반면 qwen3:30b 같은 MoE 모델은 토큰마다 일부 전문가만 활성화되어 오프로드 피해가 상대적으로 작다는 것이 로컬 LLM 커뮤니티의 공통된 관찰입니다. 실측 기준 12GB 카드에서 8B 모델이 141 tok/s로 도는 표는 12GB LLM 속도표에 정리해 두었습니다. 오프로드 상태로 쓸 현실적 용도는 대화보다 야간 배치 요약, 대용량 임베딩처럼 지연에 무관심한 작업입니다.
그래픽카드를 사야 한다면 (2026년 10월 시세)
위 단계를 다 해도 용량이 부족하면 카드 증설입니다. 자사가 매일 수집하는 다나와 시세(2026-10-27 KST 조회) 기준 VRAM 1GB당 가격으로 보면 선택이 쉬워집니다.
| 모델 | 최저가(원) | 중위가(원) | GB당(중위 기준) |
|---|---|---|---|
| RTX 5070 12GB | 1,101,000 | 1,344,600 | 약 112,000원 |
| RTX 5070 Ti 16GB | 1,579,000 | 1,993,500 | 약 124,600원 |
| RTX 5080 16GB | 2,260,000 | 2,450,620 | 약 153,200원 |
| RTX 3090 24GB (중고) | 1,250,000 | 1,750,000 | 약 72,900원 |
| RTX 4090 24GB (중고) | 2,700,000 | 3,650,500 | 약 152,100원 |
학생: VRAM GB당 약 72,900원으로 최저인 중고 3090 24GB가 사실상 최강의 가성비이고, 발열·전력 관리와 2슬롯 케이스만 감수하면 됩니다. 연구실: 재현성 실험과 A/S가 필요하면 신품 기준 VRAM/원 최상위인 5070 Ti 16GB, 24GB 이상이 필수면 3090 다카드 구성이 합리적입니다. 직장인 개인 작업실: 하루 몇 시간 추론 정도라면 5070 Ti로 시작하고 부족해지면 3090 중고 한 장을 추가하는 단계 구매가 총액 손실이 가장 작습니다. RAM 오프로드를 병행할 계획이라면 RAM은 딥러닝 PC RAM 32GB가 최소인 이유에서 다룬 대로 최소 32GB, 오프로드용 모델을 합친 크기 이상을 확보하십시오.
자주 묻는 질문
VRAM을 BIOS 설정으로 늘릴 수 있나요?
아닙니다. 독립 그래픽카드의 VRAM 용량은 하드웨어로 고정입니다. BIOS에서 늘리는 항목은 시스템 RAM 일부를 그래픽용으로 예약하는 것이라 AI 성능에 거의 도움이 되지 않습니다.
ollama가 안 느려진 것 같은데 CPU로 돌고 있을 수 있나요?
가능합니다. ollama는 VRAM에 안 맞아도 경고 없이 CPU로 폴백하는 경우가 보고되어 있습니다. ollama ps의 PROCESSOR 열이 100% CPU나 혼합으로 뜨면 오프로드 상태입니다.
KV 캐시 q4_0을 바로 써도 되나요?
먼저 q8_0을 쓰십시오. q8_0은 메모리 절반에 품질 체감이 거의 없지만, q4_0은 1/4로 줄어드는 대신 긴 컨텍스트와 GQA 그룹이 많은 모델(Qwen2 계열)에서 품질 저하가 눈에 띌 수 있습니다.
RAM 오프로드 중에도 튕김이 해결되나요?
llama.cpp –n-gpu-layers, accelerate device_map처럼 명시적으로 오프로드를 켠 도구는 VRAM을 넘어도 종료되지 않습니다. 단 시스템 RAM에 오프로드분만큼 여유가 있어야 하고, RAM까지 다 차면 OS 스왑으로 병목이 디스크로 이동합니다.
출처/기준: ollama 공식 FAQ·모델 페이지(2026-10-27 조회), NVIDIA 공식 스펙, thundercompute GPU 메모리 가이드(2026), ollama 리포지토리 이슈 #14258, 자사 다나와 시세 수집(2026-10-27 KST). 가격·속도는 조회 시점 기준 근사값입니다.
답글 남기기