그래픽카드보다 큰 MoE 모델 돌리기 — gpt-oss-120b와 시스템 RAM
CanRun · 2026년 10월 15일 업데이트
MoE(전문가 혼합) 모델은 파일 전체를 메모리에 올려야 하지만, 토큰마다 읽는 부분은 일부뿐입니다. 그래서 VRAM에 들어가지 않는 전문가 가중치를 시스템 RAM에 두면 VRAM보다 큰 모델도 돌아갑니다. CanRun 계산으로 파일이 63.4GB인 gpt-oss-120b는 12GB인 RTX 3060에서 RAM이 64GB면 들어가고, 32GB로는 들어가지 않습니다. 8GB인 RTX 4060은 CanRun 계산으로 64GB에 아주 조금 못 미쳐 96GB로 표시됩니다.
MoE 모델은 dense 모델과 무엇이 다른가
Qwen3 32B 같은 dense 모델은 토큰마다 모든 가중치를 거칩니다. 그래서 생성 속도가 파일 전체 크기를 따라갑니다. MoE 모델은 각 층의 대부분을 ‘전문가’라는 작은 블록 여러 개로 나눠 둡니다. 그리고 라우터가 토큰마다 그중 몇 개만 골라 계산합니다. 설정 파일(config)을 보면 gpt-oss-120b는 층마다 전문가 128개 가운데 4개를 씁니다. Qwen3.6 35B-A3B는 256개 가운데 8개에 공유 전문가 1개를 더해 씁니다. 아래 표의 파라미터 열에는 두 숫자가 함께 있습니다. 전체 파라미터는 필요한 메모리를 정하고, 활성 파라미터는 토큰마다 하는 계산량을 대부분 정합니다.
| 모델 | 파라미터 | 기본 양자화 · 그래픽카드에 올라가는 가중치 | 8k KV 캐시 | 8k 합계 |
|---|---|---|---|---|
| Qwen3 32B | 32.8B | Q4_K_M · 19.3GB | 2.1GB | 22.0GB |
| gpt-oss-20b | 20.9B (활성 3.6B) | MXFP4 · 11.5GB | 0.2GB | 12.3GB |
| Gemma 4 26B-A4B | 26.54B (활성 4B) | Q4_K_M · 16.9GB | 0.2GB | 17.7GB |
| Qwen3 30B-A3B (2507) | 30.5B (활성 3.3B) | Q4_K_M · 18.4GB | 0.8GB | 19.8GB |
| Qwen3.6 35B-A3B | 35.95B (활성 3B) | Q4_K_M · 21.1GB | 0.2GB | 21.8GB |
| gpt-oss-120b | 116.8B (활성 5.1B) | MXFP4 · 62.8GB | 0.3GB | 63.6GB |
| Solar Open 100B | 102.65B (활성 12B) | Q4_K_M · 61.8GB | 1.6GB | 64.0GB |
| Qwen3.5 122B-A10B | 125.09B (활성 10B) | Q4_K_M · 75.9GB | 0.2GB | 76.6GB |
그래픽카드에서는 OS가 VRAM 일부를 따로 씁니다(Windows에서 화면 출력을 맡은 GPU라면 약 0.6GB). llama.cpp는 입력 임베딩 표를 시스템 RAM에 두고 MTP 블록이 있어도 기본 설정에서는 불러오지 않아서, 표의 가중치는 파일보다 조금 작습니다. 맥은 파일 전체로 계산합니다.
크기가 비슷한 두 모델을 비교하면 차이가 잘 보입니다. 8k에서 Qwen3 32B는 22.0GB, Qwen3.6 35B-A3B는 21.8GB가 필요합니다. 둘 다 RTX 5060 Ti 16GB의 사용 가능 메모리 15.4GB를 넘습니다. dense 모델은 시스템 RAM에 둔 층을 토큰마다 통째로 읽어야 합니다. 그래서 이 카드에서는 부분 오프로드로 겨우 돌아갑니다. 이 속도는 보정된 추정입니다. MoE 모델은 라우터가 고른 전문가만 RAM에서 읽으므로 원활하게 돌아갑니다. 이 속도는 이론 추정입니다.
라우터는 어떤 전문가든 고를 수 있어서, 전문가는 모두 메모리 어딘가에 있어야 합니다. 그래서 MoE 모델이라고 메모리가 덜 들지는 않습니다. 전체 파라미터가 같은 dense 모델만큼 메모리가 필요합니다. 자세한 계산은 ‘로컬 LLM 사양 — VRAM 8~32GB로 돌릴 수 있는 모델 (2026)’ 가이드에 있습니다. MoE가 바꾸는 것은 메모리를 어디에 두느냐입니다. MoE 파일은 거의 전부가 전문가 가중치입니다. gpt-oss-120b 파일에서 어텐션 같은 공유 가중치(전문가가 아닌 가중치)는 몇 퍼센트에 그칩니다. 이 작은 부분과 KV 캐시(컨텍스트를 담는 메모리)는 GPU에 있어야 빠릅니다. 전문가는 시스템 RAM에 두고, 토큰마다 쓰는 몇 개만 거기서 읽으면 됩니다.
전문가를 시스템 RAM에 두는 방법
llama.cpp는 Ollama 0.30 이후 버전을 비롯해 여러 로컬 도구가 쓰는 엔진입니다. llama.cpp에는 이런 배치를 만드는 옵션이 두 가지 있습니다. --cpu-moe는 MoE 가중치를 모두 시스템 RAM에 둡니다. --n-cpu-moe N은 앞쪽 N개 층의 전문가만 RAM에 두고, 나머지 층의 전문가는 GPU에 남깁니다. b7410(2025년 12월) 이후 빌드는 옵션을 주지 않아도 이렇게 나눠 올립니다. 기본으로 켜진 --fit 옵션이 공유 가중치(PR에서는 ‘dense 가중치’)를 먼저 GPU에 두기 때문입니다. 전문가는 VRAM이 모자라는 만큼만 RAM으로 옮깁니다.
CanRun 계산도 같은 순서를 따릅니다. 공유 가중치와 KV 캐시, 연산 버퍼(런타임이 계산 중에 쓰는 메모리)를 먼저 GPU에 둡니다. 남은 VRAM에는 전문가를 층 단위로 채우되, 한 층 분량은 여유로 비워 둡니다. 나머지 층의 전문가는 시스템 RAM에 둡니다. 전문가와 공유 가중치의 크기는 공식으로 어림하지 않고 GGUF 파일 헤더에서 읽습니다. 이렇게 정해진 N이 CanRun 조합 페이지의 llama.cpp 명령에 들어갑니다.
RTX 3060 12GB에서 Qwen3.6 35B-A3B를 돌리면 메모리가 이렇게 나뉩니다. 8k에서 21.8GB가 필요한데, 카드의 사용 가능 메모리는 11.4GB입니다. 아래 GPU 막대는 여유로 비운 한 층만 빼고 가득 찹니다. 남은 전문가는 시스템 RAM 막대에 들어갑니다. CanRun은 RAM 4GB를 Windows와 다른 프로그램 몫으로 빼 둡니다. 그래서 RAM이 32GB인 PC는 28GB를 쓸 수 있다고 봅니다.
메모리 사용 내역: GeForce RTX 3060 12GB에서 Qwen3.6 35B-A3B (Q4_K_M)
- 가중치
- 9.9GB
- KV 캐시
- 0.2GB
- 연산 버퍼
- 0.6GB
- OS 예약
- 0.6GB
- 여유
- 0.8GB
- 시스템 RAM의 가중치
- 12.4GB
위 시스템 RAM 몫에는 기본 설정에서 불러오지 않는 MTP(다중 토큰 예측) 블록 0.90GB도 넣어 넉넉하게 잡았습니다. MTP 추측 디코딩(llama.cpp --spec-type draft-mtp)을 켜면 이 블록을 불러오고 MTP용 KV 캐시도 더 듭니다.
이 구성에서는 원활하게 돌아갑니다. 이 속도는 이론 추정입니다. 아래 판정 기준표를 보면 전문가를 RAM에 둔 구성은 기준이 더 엄격합니다. GPU에 전부 올린 모델이 쾌적하게 돌아가는 속도를 내야 원활하게 돌아간다고 봅니다. 그보다 빨라도 쾌적하다고 보지는 않습니다. Qwen3.6 35B-A3B는 생각 모드가 기본으로 켜져 있어서 생각 모드 기준까지 더해집니다. 다른 카드의 결과는 Qwen3.6 35B-A3B 모델 페이지에서 볼 수 있습니다.
컨텍스트를 늘리면 먼저 느려진다
이 배치에서 KV 캐시는 GPU에 있습니다. 그래서 컨텍스트를 늘려도 모델이 GPU에서 밀려나지 않습니다. 대신 전문가가 조금씩 더 RAM으로 옮겨 가고, 속도가 단계적으로 떨어집니다. RTX 3060 12GB에서 Qwen3.6 35B-A3B는 f16 KV 캐시로 64k와 128k까지 원활하게 돌아갑니다. 256k에서는 겨우 돌아갑니다. 모두 이론 추정입니다. KV 캐시를 q8_0(8비트)으로 두면 256k도 원활하게 돌아갑니다. 이 속도도 이론 추정입니다.
설정 파일을 보면 Qwen3.6 35B-A3B는 네 층에 한 층만 전체 어텐션을 씁니다. 나머지 층은 컨텍스트가 길어져도 크기가 늘지 않는 상태값만 저장합니다. 그래서 KV 캐시가 천천히 늘어납니다. 모든 층이 전체 어텐션인 모델은 더 짧은 컨텍스트에서 속도가 떨어지기 시작합니다. 자세한 원리는 ‘KV 캐시와 컨텍스트 길이 — 컨텍스트를 늘리면 VRAM이 얼마나 더 필요할까’ 가이드에 있습니다. RAM이 모자라면 얘기가 다릅니다. RAM이 64GB인 RTX 3060 12GB에서 gpt-oss-120b는 f16 KV 캐시로 128k를 쓰면 들어가지 않습니다.
| 컨텍스트 | KV f16 | KV q8_0 | KV q4_0 |
|---|---|---|---|
| 4k | 21.7GB원활 추정 55.7 tok/s39.0–72.4이론 추정 ±30% | 21.7GB원활 추정 56.2 tok/s39.3–73.0이론 추정 ±30% | 21.7GB원활 추정 56.4 tok/s39.5–73.4이론 추정 ±30% |
| 8k | 21.8GB원활 추정 54.7 tok/s38.3–71.1이론 추정 ±30% | 21.8GB원활 추정 55.6 tok/s38.9–72.3이론 추정 ±30% | 21.7GB원활 추정 56.1 tok/s39.3–73.0이론 추정 ±30% |
| 16k | 22.1GB원활 추정 52.8 tok/s36.9–68.6이론 추정 ±30% | 21.9GB원활 추정 54.5 tok/s38.2–70.9이론 추정 ±30% | 21.8GB원활 추정 55.5 tok/s38.9–72.2이론 추정 ±30% |
| 32k | 22.6GB원활 추정 48.6 tok/s34.0–63.2이론 추정 ±30% | 22.2GB원활 추정 51.7 tok/s36.2–67.3이론 추정 ±30% | 22.1GB원활 추정 54.4 tok/s38.1–70.7이론 추정 ±30% |
| 64k | 23.5GB원활 추정 42.0 tok/s29.4–54.7이론 추정 ±30% | 22.9GB원활 추정 47.5 tok/s33.3–61.8이론 추정 ±30% | 22.6GB원활 추정 51.5 tok/s36.0–66.9이론 추정 ±30% |
| 128k | 25.5GB원활 추정 33.1 tok/s23.2–43.0이론 추정 ±30% | 24.2GB원활 추정 40.5 tok/s28.3–52.6이론 추정 ±30% | 23.6GB원활 추정 46.5 tok/s32.6–60.5이론 추정 ±30% |
| 256k | 29.4GB겨우 가능 추정 23.2 tok/s16.2–30.1이론 추정 ±30% | 26.9GB원활 추정 31.4 tok/s22.0–40.9이론 추정 ±30% | 25.5GB원활 추정 39.0 tok/s27.3–50.7이론 추정 ±30% |
S = 쾌적 · A = 원활 · B = 겨우 가능 · F = 불가
카드별로 필요한 시스템 RAM
아래 표는 MoE 모델 6개를 8GB부터 32GB까지 NVIDIA 카드 5종에서 판정한 결과입니다. 8k 컨텍스트, f16 KV 캐시, 시스템 RAM 32GB(DDR5), Windows를 가정했습니다. 32GB로 모자라면 판정 아래에 ‘RAM 64GB라면’ 같은 줄이 붙습니다. 이 줄은 CanRun 계산으로 들어가는 가장 작은 RAM 용량과, 그때 받는 판정을 보여 줍니다. CanRun은 64GB·96GB·128GB 구성을 확인합니다.
| 하드웨어 | gpt-oss-20b | Gemma 4 26B-A4B | Qwen3 30B-A3B (2507) | Qwen3.6 35B-A3B | gpt-oss-120b | Qwen3.5 122B-A10B |
|---|---|---|---|---|---|---|
| GeForce RTX 40608GB | 원활 추정 30.6 tok/s21.4–39.7이론 추정 ±30% | 원활 추정 43.6 tok/s30.5–56.6이론 추정 ±30% | 불가RAM 96GB라면: 겨우 가능 | |||
| GeForce RTX 3060 12GB12GB | 원활 추정 40.7 tok/s28.5–53.0이론 추정 ±30% | 원활 추정 54.7 tok/s38.3–71.1이론 추정 ±30% | 불가RAM 96GB라면: 겨우 가능 | |||
| GeForce RTX 5060 Ti 16GB16GB | 쾌적 111.6 tok/s8k 추정 104.3 tok/s (83.5–125.2, 보정된 추정 ±20%)실측 1건 (2k 컨텍스트) GeForce RTX 5060 Ti 16GB에서 gpt-oss-20b 판정 보기 | 원활 추정 59.2 tok/s41.4–76.9이론 추정 ±30% | 원활 추정 69.5 tok/s48.7–90.4이론 추정 ±30% | 불가RAM 96GB라면: 겨우 가능 | ||
| GeForce RTX 309024GB | 쾌적 162.0 tok/s8k 추정 201.1 tok/s (160.9–241.3, 보정된 추정 ±20%)실측 1건 (2k 컨텍스트) GeForce RTX 3090에서 gpt-oss-20b 판정 보기 | 쾌적 108.0 tok/s8k 추정 134.9 tok/s (108.0–161.9, 보정된 추정 ±20%)실측 1건 (32k 컨텍스트) | 쾌적 추정 164.6 tok/s131.6–197.5보정된 추정 ±20% | 불가UD-Q2_K_XL (품질 손실 큼): 원활 추정 41.3 tok/s28.9–53.6이론 추정 ±30% | ||
| GeForce RTX 509032GB | 쾌적 282.3 tok/s8k 추정 338.9 tok/s (271.1–406.7, 보정된 추정 ±20%)실측 1건 (2k 컨텍스트) GeForce RTX 5090에서 gpt-oss-20b 판정 보기 | 쾌적 216.1 tok/s8k 추정 210.4 tok/s (168.3–252.4, 보정된 추정 ±20%)실측 2건 (512/8k 컨텍스트) | 쾌적 추정 229.8 tok/s183.9–275.8보정된 추정 ±20% | 불가UD-Q2_K_XL (품질 손실 큼): 원활 추정 66.4 tok/s46.5–86.3이론 추정 ±30% |
이론 추정(±30%)은 MoE 전문가를 시스템 RAM에 두는 경우처럼 실제 속도의 편차가 큰 구성에 붙습니다. 이때는 VRAM에 들어가는 만큼 전문가를 GPU에 두고 나머지만 RAM에 둔다고 보고 계산합니다.
이 줄도 앞에서 본 배치를 그대로 씁니다. 공유 가중치·KV 캐시·여유 한 층 옆에 들어가지 않는 전문가 층은 RAM으로 갑니다. 그 양이 시스템 몫 4GB를 뺀 RAM에 들어가야 합니다. 32GB인 RTX 5090도 사용 가능 메모리는 31.4GB입니다. 그래서 63.4GB인 gpt-oss-120b 파일의 절반 넘게 RAM에 둬야 합니다. RAM이 32GB인 PC에는 그만한 자리가 남지 않고, 64GB면 들어갑니다.
gpt-oss-120b
CanRun 계산으로 gpt-oss-120b는 표의 12GB 이상 카드에서 모두 시스템 RAM 64GB가 필요합니다. 8GB인 RTX 4060은 64GB에 아주 조금 못 미쳐 96GB로 표시됩니다. 모자라는 양은 CanRun이 남겨 두는 여유에서 생깁니다. 시스템 몫 RAM 4GB와 VRAM 한 층 분량입니다. 64GB로 해 본다면 ollama ps나 llama.cpp 로그로 배치를 확인하세요.
RAM이 64GB일 때 RTX 3060 12GB·RTX 5060 Ti 16GB·RTX 3090에서는 겨우 돌아갑니다. RTX 5090에서는 원활하게 돌아갑니다. 모두 이론 추정이고, 늘 생각하는 gpt-oss에는 생각 모드 기준이 적용됩니다. RTX 3090의 추정치는 ‘원활’ 기준선에 걸쳐 있습니다. 그래서 실제 속도가 조금만 달라도 판정이 한 단계 갈릴 수 있습니다.
필요한 용량보다 RAM을 더 꽂아도 CanRun 계산의 속도는 오르지 않습니다. GPU에 남는 전문가 층 수는 VRAM이 정하기 때문입니다. RTX 3060 12GB는 RAM 128GB에서도 64GB일 때와 추정치가 같습니다. ‘GeForce RTX 3060 12GB에서 gpt-oss-120b’ 페이지에 64GB 기준 명령과 배치가 있습니다.
Qwen3.5 122B-A10B와 Solar Open 100B
Qwen3.5 122B-A10B는 gpt-oss-120b보다 조금 크고, 활성 파라미터는 두 배쯤입니다. 그래서 토큰마다 읽는 양도 두 배 가까이 됩니다. 8~16GB 카드에서는 RAM 96GB가 필요합니다. 24GB·32GB 카드에서는 64GB가 필요합니다. 이 용량에서는 RTX 5090을 포함해 표의 모든 카드에서 겨우 돌아갑니다. 이 속도도 이론 추정입니다.
표의 RTX 3090·RTX 5090 칸은 다른 파일을 추천합니다. RAM 32GB로는 UD-Q2_K_XL 파일만 들어가기 때문입니다. CanRun 계산으로는 RTX 3090에서 이 파일이 원활하게 돌아갑니다. 이 속도는 이론 추정입니다. 다만 이 파일은 2비트 양자화라 ‘손실 큼’ 등급에 듭니다. CanRun은 다른 양자화를 모두 돌릴 수 없을 때만 이런 파일을 추천합니다. 품질 등급은 ‘GGUF 양자화 등급 정리 — Q4_K_M·IQ4_XS·Q8_0 무엇을 받을까’ 가이드에서 설명합니다.
업스테이지의 한국 모델 Solar Open 100B는 판정 표에는 없습니다. 표의 다섯 카드로 계산하면 모두 RAM 64GB가 필요합니다. 8GB인 RTX 4060도 64GB면 들어가지만, CanRun 계산으로 남는 RAM은 1GB 남짓입니다. RAM이 64GB일 때는 다섯 카드 모두에서 겨우 돌아갑니다. 이 속도도 이론 추정입니다.
30B급 MoE 모델과 RAM 16GB
표의 작은 모델 넷은 RAM 32GB면 8GB인 RTX 4060까지 모든 카드에 들어갑니다. 24GB인 RTX 3090에는 Qwen3 30B-A3B와 Qwen3.6 35B-A3B가 GPU에 전부 올라가, 둘 다 쾌적하게 돌아갑니다. 8~16GB 카드에서는 두 모델 모두 전문가 일부를 RAM에 둡니다. 그래서 RAM이 16GB면 모자랄 수 있습니다.
RAM이 16GB면 RTX 4060에는 두 모델 모두 들어가지 않습니다. RTX 3060 12GB에는 Qwen3 30B-A3B만 들어갑니다. RTX 5060 Ti 16GB는 GPU에 전문가를 더 많이 두므로 두 모델이 다 들어갑니다.
파일 크기만으로 속도가 정해지지는 않습니다. Gemma 4 26B-A4B는 파일이 더 작지만, 토큰마다 읽는 양은 Qwen3.6 35B-A3B보다 많습니다. 활성 파라미터가 4B로 3B보다 많고, 공유 부분도 더 크기 때문입니다. 그래서 8GB인 RTX 3050에서 Gemma 4 26B-A4B는 겨우 돌아가고, Qwen3.6 35B-A3B는 원활하게 돌아갑니다. 둘 다 이론 추정이고, 두 모델 모두 생각 모드 기준을 적용했습니다.
RAM 속도가 생성 속도를 정한다
이 배치에서는 토큰 하나를 만들 때 두 곳에서 읽습니다. RAM에 둔 층에서 고른 전문가는 RAM에서 읽습니다. GPU에 둔 전문가와 공유 가중치, KV 캐시는 VRAM에서 읽습니다. 그런데 RAM은 훨씬 느립니다. 듀얼 채널 DDR5-5600의 대역폭은 90 GB/s입니다. RTX 3060 12GB의 VRAM은 360 GB/s입니다. CanRun 공식은 이 부분에서 RAM 대역폭의 절반만 쓸 수 있다고 봅니다. 이 비율은 공개 벤치마크 결과에 맞춰 정했습니다. 전문가를 RAM에 많이 둘수록 RAM 속도가 생성 속도를 좌우합니다.
대역폭은 전송 속도에 채널당 8바이트와 채널 수를 곱한 값입니다. 듀얼 채널 DDR4-3200은 51 GB/s로, DDR5-5600의 절반을 조금 넘습니다. CanRun 계산으로는 gpt-oss-120b를 돌리는 PC의 RAM을 DDR4-3200으로 바꾸면 추정 속도가 3분의 1에서 5분의 2쯤 떨어집니다. 전문가 대부분을 RAM에 두는 12~32GB 카드에서 그렇습니다. RTX 3060 12GB에서 Qwen3.6 35B-A3B는 GPU에서 하는 일이 더 많아서 5분의 1쯤 떨어집니다. 계산기의 ‘RAM 종류’에서 DDR4-3200·DDR5-5600·DDR5-6000 가운데 내 PC의 RAM을 고르면 직접 확인할 수 있습니다.
일반 데스크톱 CPU는 메모리 채널이 두 개입니다. 인텔 Core Ultra 9 285K와 AMD Ryzen 7 9700X의 사양 페이지에도 2채널로 나와 있습니다. RAM 모듈을 더 꽂으면 용량은 늘지만 채널은 늘지 않습니다. 오히려 정격 속도가 낮아질 수 있습니다. AMD 사양 페이지를 보면 Ryzen 7 9700X의 최대 메모리 속도는 모듈 두 개일 때 DDR5-5600입니다. 네 개를 꽂으면 DDR5-3600으로 내려갑니다. DDR5-3600이면 대역폭이 3분의 2쯤으로 줄어듭니다. 큰 MoE 모델 때문에 RAM을 늘린다면, 모듈 네 개에서 CPU와 메인보드가 지원하는 속도부터 확인하세요.
실행 명령 — llama.cpp와 Ollama
Windows용 llama.cpp는 GitHub 릴리스 페이지에서 바로 받을 수 있습니다. NVIDIA 카드라면 CUDA 빌드와, 버전이 맞는 cudart 파일을 함께 받으세요. 두 파일을 한 폴더에 풀고, 그 폴더에서 PowerShell을 열어 아래처럼 .\llama-server.exe로 실행합니다. macOS·Linux에서는 .\llama-server.exe 대신 llama-server라고 씁니다. 2025년 12월 이후 빌드라면 배치를 --fit에 맡기는 명령이 가장 간단합니다.
.\llama-server.exe -hf ggml-org/gpt-oss-120b-GGUF:MXFP4 -c 8192
배치를 직접 정하려면 -ngl과 --n-cpu-moe를 지정합니다. 직접 지정한 옵션은 --fit이 바꾸지 않습니다. 아래는 RTX 3060 12GB와 RAM 64GB로 gpt-oss-120b를 돌리는 명령입니다. CanRun 조합 페이지에 나오는 명령과 같습니다. 다른 카드에 맞는 N은 각 조합 페이지에 있습니다.
.\llama-server.exe -hf ggml-org/gpt-oss-120b-GGUF:MXFP4 -c 8192 -ngl all --n-cpu-moe 32 -fa on
-ngl all은 모든 층을 GPU에 올립니다. 그다음 --n-cpu-moe 32가 앞쪽 32개 층의 전문가를 시스템 RAM으로 돌려보냅니다. 컨텍스트를 늘린 뒤 VRAM이 모자라 불러오지 못하면 N을 1~2 올리세요. 하나 올릴 때마다 한 층의 전문가가 RAM으로 더 옮겨 갑니다.
Ollama를 쓴다면 작업 표시줄 아이콘에서 Ollama 앱을 먼저 종료합니다. 그다음 원하는 컨텍스트로 서버를 띄웁니다. PowerShell 창을 하나 더 열어 Hugging Face의 모델을 실행합니다.
$env:OLLAMA_CONTEXT_LENGTH="8192"; ollama serve
ollama run hf.co/ggml-org/gpt-oss-120b-GGUF:MXFP4
macOS·Linux에서는 첫 줄을 OLLAMA_CONTEXT_LENGTH=8192 ollama serve로 씁니다. GPU와 RAM에 나눠 올리는 방식은 Ollama가 스스로 정합니다. num_gpu를 정하지 않으면 Ollama는 GPU 층 수 없이 llama-server를 띄우고, 배치는 llama.cpp의 --fit이 맡습니다. 컨텍스트를 계속 같은 값으로 쓰는 설정은 ‘올라마(Ollama)가 느리거나 앞 내용을 잊을 때 — 컨텍스트 기본값’ 가이드에 있습니다. LM Studio에서는 모델을 불러올 때 ‘Force Model Expert Weights onto CPU’를 켜면 전문가 가중치를 모두 RAM에 둡니다. --cpu-moe와 같은 방식입니다.
실제로 어떻게 올라갔는지 확인하기
모델을 띄운 상태에서 ollama ps를 실행하세요. PROCESSOR 열에 CPU와 GPU에 나눠 올린 비율이 나옵니다. llama.cpp라면 시작할 때 나오는 로그에서 장치마다 올라간 양을 볼 수 있습니다. 전문가 일부를 RAM에 두는 모델은 늘 CPU와 GPU에 나뉘어 나옵니다. 중요한 것은 VRAM에 들어갈 만큼 GPU에 올라갔는지입니다.
Windows에서는 VRAM이 모자랄 때 NVIDIA 드라이버가 공유 시스템 메모리를 빌려 쓸 수 있습니다. 그래서 N을 너무 작게 잡으면 llama.cpp가 오류 없이 추정보다 훨씬 느리게 돌 수 있습니다. NVIDIA 지원 문서에 이 동작을 프로그램별로 끄는 방법이 나와 있습니다. NVIDIA 제어판에서 ‘3D 설정 관리’의 ‘프로그램 설정’ 탭을 열고 llama-server.exe를 추가하세요. 그다음 ‘CUDA - Sysmem Fallback Policy’를 ‘Prefer No Sysmem Fallback’으로 바꿉니다. 그러면 배치가 빠듯할 때 메모리 부족 오류가 나서 바로 알 수 있습니다.
이 숫자는 얼마나 확실한가
메모리에 들어가는지는 공식으로 계산한 값입니다. CanRun은 MoE 파일마다 전문가와 공유 가중치의 크기를 GGUF 헤더에서 읽습니다. 여기에 KV 캐시와 연산 버퍼를 더해, PC에서 쓸 수 있는 VRAM·시스템 RAM과 비교합니다. 그래서 RAM 몇 GB부터 들어가는지는 추정이 아니라 계산 결과입니다. 다만 8GB 카드의 gpt-oss-120b처럼 RAM 계단 바로 근처의 결과는 CanRun이 남겨 두는 여유에 달려 있습니다. 시스템 몫 RAM 4GB와 VRAM 한 층 분량입니다.
이 글의 속도는 모두 생성 속도입니다. 전문가를 시스템 RAM에 두는 구성의 속도는 이론 추정(±30%)입니다. 공개 벤치마크 42건과 비교하면 평균 오차는 약 11%였습니다. NVIDIA 카드 35건만 보면 평균 오차가 약 10%이고, 89%가 ±20% 안에 들었습니다. 그래도 운영체제·백엔드·RAM 구성에 따라 40% 가까이 벗어난 경우가 있어 이론 추정 라벨을 유지합니다. 공식이 잘 맞지 않는 구성은 이 비교에서 뺐습니다. Vulkan 백엔드, 8채널 서버 메모리, 32k 이상의 아주 긴 컨텍스트가 그렇습니다.
표의 값은 다음 조건을 가정합니다. Windows에서 그 카드가 화면 출력도 맡고, RAM은 듀얼 채널 DDR5-5600입니다. 8k 컨텍스트와 f16 KV 캐시로 모델 하나를 띄우고, 요청은 한 번에 하나만 처리합니다. llama.cpp의 자동 배치는 GPU마다 VRAM 여유를 따로 남깁니다. 그래서 llama.cpp가 고르는 N은 CanRun 계산과 한 층 정도 다를 수 있습니다.
생각 모드가 있는 모델에는 속도 기준을 1.5배 엄격하게 적용합니다. 생각 모드를 켜면 답 하나에 토큰을 훨씬 많이 쓰기 때문입니다. 이 글의 모델 가운데 gpt-oss-20b와 gpt-oss-120b는 늘 생각합니다. Qwen3.6 35B-A3B와 Qwen3.5 122B-A10B는 생각 모드가 기본으로 켜져 있습니다. Solar Open 100B와 Qwen3 32B도 마찬가지입니다. Gemma 4 26B-A4B는 생각 모드가 있지만 기본으로 꺼져 있습니다. Qwen3 30B-A3B (2507)에는 생각 모드가 없습니다. 아래 기준표에는 이 내용이 빠져 있으니 참고하세요.
판정 읽는 법
- 쾌적
- 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 미만
다음 단계
- ‘로컬 LLM 사양 — VRAM 8~32GB로 돌릴 수 있는 모델 (2026)’: 8~32GB 카드에 전부 올라가는 모델과 메모리 계산법
- ‘KV 캐시와 컨텍스트 길이 — 컨텍스트를 늘리면 VRAM이 얼마나 더 필요할까’: 모델마다 KV 캐시가 늘어나는 속도가 다른 이유
- ‘GGUF 양자화 등급 정리 — Q4_K_M·IQ4_XS·Q8_0 무엇을 받을까’: 양자화 단계와 품질 등급, 위에 나온 2비트 파일
- ‘올라마(Ollama)가 느리거나 앞 내용을 잊을 때 — 컨텍스트 기본값’: Ollama의 기본 컨텍스트와 바꾸는 방법
- gpt-oss-120b·Qwen3 30B-A3B (2507) 같은 모델 페이지에서 카드별 판정과 필요한 RAM을 볼 수 있습니다.
자주 묻는 질문
gpt-oss-120b 최소 사양은 어느 정도인가요?
CanRun 계산으로는 12GB 이상 그래픽카드에 시스템 RAM 64GB가 필요합니다. 8GB 카드는 64GB에 아주 조금 못 미쳐 96GB로 표시됩니다. 둘 다 8k 컨텍스트로 계산했습니다. RAM이 32GB면 32GB인 RTX 5090에도 들어가지 않습니다. 파일은 63.4GB이고, 모델 카드는 80GB GPU 한 장을 기준으로 합니다. Ryzen AI Max+ 395 (Strix Halo)나 NVIDIA DGX Spark처럼 통합 메모리가 128GB인 기기는 파일 전체를 메모리에 올립니다. 공개 벤치마크 결과를 보면 두 기기 모두에서 쾌적하게 돌아갑니다.
그래픽카드 없이 gpt-oss-120b를 돌릴 수 있나요?
CanRun 계산으로는 RAM이 96GB면 돌릴 수 있습니다. 듀얼 채널 DDR5-5600 CPU에서는 겨우 돌아갑니다. 이 속도는 보정된 추정이고, CPU 전용 구성은 이보다 높게 판정하지 않습니다. RAM 64GB로는 시스템 몫을 빼면 파일이 들어가지 않습니다. 8GB 카드를 더하면 필요한 RAM이 줄기는 하지만, 64GB에서 시스템 몫 4GB를 뺀 용량을 아주 조금 넘습니다. 64GB로 해 본다면 ollama ps나 llama.cpp 로그로 배치를 확인하세요. 12GB 이상 카드라면 64GB로 충분합니다.
RAM을 늘릴까요, VRAM이 큰 카드로 바꿀까요?
모델이 아예 들어가지 않는다면 RAM부터 늘리세요. 들어간 뒤에는 RAM을 더 늘려도 CanRun 추정 속도는 오르지 않습니다. 그다음부터는 VRAM이 크면 GPU에 전문가 층을 더 많이 둘 수 있고, RAM이 빠르면 나머지를 빨리 읽습니다. 카드별 결과는 위 표에 있습니다. RAM을 새로 산다면 모델이 들어가는 가장 작은 용량을 목표로 하세요. 모듈 개수는 CPU가 제 속도를 내는 구성으로 고르세요.
MoE 모델이 메모리에 들어가는데도 느린 이유는 무엇인가요?
대개 필요 이상으로 많은 부분이 시스템 RAM에 있거나, RAM이 생각보다 느리기 때문입니다. 먼저 ollama ps나 llama.cpp 로그로 배치를 확인하세요. Ollama의 GPU 몫이 VRAM보다 한참 적다면 남아 있는 num_gpu 설정을 찾아보거나, llama.cpp에서 --n-cpu-moe로 직접 나눠 보세요. --cpu-moe를 쓰면 VRAM에 자리가 있어도 전문가를 모두 RAM에 둡니다. RAM 모듈을 네 개 꽂으면 두 개일 때보다 정격 속도가 낮을 수 있습니다. 컨텍스트가 길어도 전문가가 RAM으로 더 옮겨 갑니다. Windows에서는 배치가 빠듯하면 공유 GPU 메모리로 넘칠 수 있습니다. 이 내용은 실행 명령 절에서 설명했습니다.
--cpu-moe와 --n-cpu-moe 중 무엇을 써야 하나요?
배치를 직접 정한다면 --n-cpu-moe N을 쓰세요. 들어가는 만큼 전문가 층을 GPU에 남기기 때문입니다. --cpu-moe는 모든 층의 전문가를 RAM에 두는 것과 같습니다. 카드에 전문가를 둘 자리가 있다면 그만큼 느려집니다. 2025년 12월 이후 llama.cpp 빌드라면 둘 다 빼고 --fit에 맡겨도 됩니다. 다만 -c는 남기세요. 빼면 --fit이 가중치를 옮기기 전에 컨텍스트부터 줄일 수 있습니다. CanRun 조합 페이지에는 카드마다 계산한 N이 들어 있습니다.
출처
- llama.cpp 서버 README:
--cpu-moe(MoE 가중치를 모두 CPU에 둠),--n-cpu-moe N(앞쪽 N개 층의 MoE 가중치를 CPU에 둠),-ngl(auto·all가능),--fit(기본으로 켜짐),--fit-target(장치마다 남기는 여유),--fit-ctx(--fit이 줄일 수 있는 최소 컨텍스트, 기본 4096),-fa,-c옵션 설명 - llama.cpp PR #16653 (자동 배치):
--fit이 사용자가 지정하지 않은 옵션만 장치 메모리에 맞게 정한다는 설명, 지정하지 않은 컨텍스트를 가중치보다 먼저 줄인다는 설명, MoE 모델은 dense 가중치를 먼저 VRAM에 둔다는 설명, 2025년 12월 병합 - llama.cpp b7410 릴리스: 위 변경이 들어간 2025년 12월 빌드, Windows용 CUDA 빌드와 cudart 파일 포함
- Ollama v0.30.0 릴리스 노트: llama.cpp로 모델을 돌린다는 설명
- Ollama 소스: llm/llama_server.go:
num_gpu를 정하지 않으면-ngl없이 llama-server를 띄워 GPU 배치를 llama.cpp에 맡김 - Ollama FAQ:
ollama ps의 PROCESSOR 열 - Hugging Face의 Ollama 사용 안내:
ollama run hf.co/사용자/저장소:양자화형식 - LM Studio 0.3.23 릴리스 노트: MoE 전문가 가중치를 모두 시스템 RAM에 두는 Force Model Expert Weights onto CPU 설정
- gpt-oss-120b 모델 카드와 설정 파일: 전체·활성 파라미터 수, MXFP4로 양자화한 MoE 가중치, 80GB GPU 한 장에 들어간다는 설명, 36층·전문가 128개 중 4개 사용
- Qwen3.6-35B-A3B 설정 파일: 40층, 전문가 256개 중 8개와 공유 전문가, 네 층에 한 층 전체 어텐션(
full_attention_interval) - Qwen3.5-122B-A10B 설정 파일: 48층, 전문가 256개 중 8개와 공유 전문가
- Qwen3-30B-A3B-Instruct-2507 설정 파일: 48층, 전문가 128개 중 8개
- Gemma 4 26B-A4B 설정 파일: 30층, 전문가 128개 중 8개
- Solar Open 100B 설정 파일: 48층, 라우팅 전문가 128개 중 8개와 공유 전문가 1개
- AMD Ryzen 7 9700X 사양: 메모리 2채널, 모듈 두 개일 때 DDR5-5600·네 개일 때 DDR5-3600
- 인텔 Core Ultra 9 285K 사양: 메모리 2채널
- NVIDIA 지원 문서: CUDA Sysmem Fallback Policy: Windows에서 VRAM이 모자라면 드라이버가 공유 시스템 메모리를 써서 느리게라도 계속 돌린다는 설명, 프로그램별로 끄는 ‘Prefer No Sysmem Fallback’ 설정
- llama.cpp DGX Spark 결과 파일(2026년 2월), quozul.dev: Ryzen AI Max+ 395의 gpt-oss-120b: 통합 메모리 128GB 기기의 gpt-oss-120b 공개 벤치마크 결과
이 페이지의 속도는 오차 범위와 신뢰 라벨을 붙인 추정치이거나, 출처를 밝힌 공개 벤치마크 결과입니다. 판정은 표마다 적어 둔 구성을 기준으로 합니다.