로컬 AI 실측 노트

6GB 그래픽카드 gpt-oss-20b 실측: 전문가만 CPU에 두니 19.5 tok/s

2026-10-05

gpt-oss-20b는 파일만 12~13GB라 6GB 그래픽카드에는 다 들어가지 않습니다. 그런데 이 모델은 MoE(전문가 혼합) 구조라, 토큰 하나를 만들 때 전체 21B 중 3.6B만 계산합니다. 그래서 크기의 대부분을 차지하는 '전문가' 가중치는 일반 메모리(RAM)에 두고 나머지만 그래픽카드에 올리는 방법이 있습니다. llama.cpp의 --n-cpu-moe입니다. Ollama에는 전문가만 따로 떼어 두는 설정이 없고, 그래픽카드에 올릴 층 수(num_gpu)만 정할 수 있습니다.

GTX 1660 SUPER 6GB + RAM 32GB PC에서 Ollama 기본값, Ollama 층 수 조절, llama.cpp 전문가 분리를 같은 한국어 질문으로 비교했습니다. 결론부터 정리하면 이렇습니다.

결과 1: 같은 질문으로 실제로 쓸 때

같은 한국어 질문에 256토큰을 쓰게 하고 3회 평균을 냈습니다(10-05 00:18~00:29, 같은 시간대). llama.cpp는 llama-server로, Ollama는 API로 불렀고 둘 다 생각 수준은 낮음(low)입니다.

방법과 설정 답 속도 (tok/s) 그래픽 메모리 (모델 몫)
llama.cpp --n-cpu-moe 14 19.5 (19.4~19.5) 5.7GB (5.6GB)
llama.cpp --n-cpu-moe 16 17.8 (17.7~18.0) 4.9GB (4.8GB)
llama.cpp -ngl 12 (층 나누기) 16.1 (16.0~16.3) 5.7GB (5.6GB)
Ollama 기본 (71%/29%) 15.6 (15.4~15.7) 4.2GB (4.0GB)
llama.cpp --n-cpu-moe 24 12.7 (12.7~12.8) 1.7GB (1.6GB)
Ollama num_gpu 12 (53%/47%) 12.7 (12.6~12.7) 5.7GB (5.6GB)
Ollama num_gpu 14 (46%/54%) 11.6 (11.6~11.6) 5.7GB (5.6GB)

결과 2: 그래픽 메모리를 얼마나 쓰면 얼마나 빨라지나

gpt-oss-20b에서 모델이 차지한 그래픽 메모리별 답 속도 선 그래프. 전문가만 CPU에 두는 방법(파란 선)이 층을 통째로 나누는 방법(주황 선)보다 같은 메모리에서 늘 빠르고, N=14에서 23.0 tok/s로 가장 빠름
llama-bench로 잰 답 쓰는 속도(128토큰, 3회 평균). 파란 선의 N은 전문가를 CPU에 두는 앞쪽 층 수(24 = 전부), 주황 선은 그래픽카드에 통째로 올린 층 수.

아래 표의 질문 읽기는 512토큰 기준, 모델 몫은 측정 중 최대 그래픽 메모리에서 측정 직전 사용량을 뺀 값입니다.

전문가 CPU 층 수 (-ncmoe) 답 (tok/s) 질문 읽기 (tok/s) 모델 몫
24 (전부) 14.7 121 1.7GB
22 15.9 120 2.6GB
20 17.0 123 3.4GB
18 18.7 115 4.1GB
16 19.9 128 4.5GB
14 23.0 131 5.3GB
12 22.1 104 5.6GB
GPU 층 수 (-ngl) 답 (tok/s) 질문 읽기 (tok/s) 모델 몫
0 (CPU만) 11.5 120 1.1GB
6 13.3 131 3.2GB
8 13.3 124 4.1GB
10 15.9 128 4.9GB
12 18.1 127 5.6GB
14 18.4 100 5.6GB

왜 전문가만 CPU에 두면 빠른가

gpt-oss-20b는 층이 24개이고, 층마다 '전문가'라는 작은 신경망이 32개씩 있습니다. 토큰 하나를 만들 때는 층마다 그중 4개만 씁니다. 그래서 전체는 21B인데 토큰마다 실제로 계산하는 몫은 3.6B입니다(모델 설명, 설정 파일).

같은 그래픽 메모리를 써도 전문가 분리 쪽이 빨랐던 것은 이 차이 때문으로 보입니다. Ollama에는 전문가만 따로 떼어 두는 설정이 없습니다. 비슷한 방향으로 '전문가 가중치는 RAM에 두고 계산은 그래픽카드가 하게 해 달라'는 기능 요청이 올라와 있는 정도입니다(ollama#17557, 아직 열려 있음).

긴 문맥, 스레드, 메모리 매핑

모든 전문가를 CPU에 둔 상태(-ncmoe 24)에서 하나씩만 바꿔 봤습니다.

바꾼 것 답 (tok/s)
문맥 0 → 4,096 → 16,384토큰 13.4 → 16.1 → 15.9
스레드 6 / 10(기본) / 20 14.7 / 14.7 / 14.2
메모리 매핑 끄기 (-lm none) 15.0 (기본 14.7)

긴 질문을 빨리 읽게 하기: -ub 2048

llama.cpp는 질문을 정해진 크기의 묶음(기본 512토큰, -ub)으로 나눠 읽습니다. 묶음이 32토큰 이상이면 RAM에 둔 전문가 가중치를 묶음마다 그래픽카드로 복사해 계산하고(llama.cpp#18530, --no-op-offload로 끌 수 있음), 묶음을 키우면 한 번 복사한 가중치로 더 많은 토큰을 처리합니다. 2,048토큰 질문으로 묶음 크기만 바꿔 봤습니다(llama-bench, 2회 평균).

설정 -ub 512 (기본) -ub 2048
-ncmoe 24 131 tok/s 216 tok/s
-ncmoe 14 143 tok/s 204 tok/s

35B도 될까: Qwen3.6-35B-A3B

같은 방법으로 Qwen3.6-35B-A3B(총 35B, 토큰마다 약 3B 사용, 40층, 층마다 전문가 256개 중 8개 + 공유 전문가 1개 사용)의 Q4_K_M 파일(22.1GB)을 돌려 봤습니다. RAM이 빠듯해서 llama.cpp로만, 답 64토큰·질문 읽기 256토큰을 2회씩만 쟀습니다(표는 1회 / 2회 값, 그래픽 메모리는 전체 사용량, 묶음 크기는 기본값).

-ncmoe 답 (tok/s) 질문 읽기 (tok/s) 그래픽 메모리 남은 RAM 최저
40 (전부) 14.2 / 18.1 21.9 / 34.9 2.4GB 6.3GB
36 16.8 / 20.8 28.5 / 38.0 4.3GB 5.5GB
32 14.6 / 16.5 25.5 / 32.0 5.8GB 4.6GB

한국어 답 품질

지난 글들과 같은 한국어 과제 8개를 Ollama 기본 설정(생각 수준 low, temperature 0)으로 풀게 했습니다. 다른 모델 7개의 답과 함께 과제마다 섞고 이름을 가린 뒤, 서로 결과를 보지 않는 채점자 둘(Claude)이 따로 채점했습니다(64개 중 57개 같은 점수, 나머지는 1점 차이).

모델 평균 (5점 만점) 답 하나 평균 시간
gpt-oss-20b (생각 low) 3.88 약 14.7초
참고: Qwen3 8B (생각 끔) 3.75 약 3.5초
참고: Qwen3 14B, 24층 (생각 끔) 3.06 약 24.5초

따라 하기

llama.cpp Windows CUDA 빌드와 ggml-org/gpt-oss-20b-GGUF의 gpt-oss-20b-MXFP4.gguf(12.1GB)를 받은 뒤, 명령 프롬프트에서:

llama-server -m gpt-oss-20b-MXFP4.gguf -ngl 99 --n-cpu-moe 16 -c 4096

측정 환경과 방법

한계