RTX 4090을 샀다. 24GB VRAM, 1,321 TOPS의 추론 성능, 메모리 대역폭 1,008 GB/s. 스펙시트만 보면 어떤 SLM이든 순식간에 돌릴 것 같다. 그래서 70B 모델을 Q4로 올렸다. 그리고 3 tok/s를 봤다. 기다리다 지쳐 창을 닫았다. 이게 현실이다.
SLM(Small Language Model) 선택에서 가장 많은 사람이 하는 실수다. FLOPs × 파라미터 수 × 메모리 대역폭 계산은 스펙시트 위에서만 통한다. 실제 토큰 생성 속도는 완전히 다른 변수들이 결정한다.
스펙은 왜 거짓말을 하는가
GPU 스펙시트에 적힌 TFLOPS는 FP16 기준이다. 하지만 로컬에서 돌리는 모델 대부분은 4-bit 또는 8-bit 양자화 상태다. 이 지점에서부터 괴리가 시작된다.
실제 추론 속도는 두 가지가 결정한다. 첫째, 메모리 대역폭이다. 생성 단계에서는 모델 가중치 전체를 매 토큰마다 VRAM에서 읽어야 한다. RTX 4090의 대역폭은 1,008 GB/s. 7B 모델을 Q4로 돌리면 가중치가 약 4GB. 초당 최대 252 토큰을 읽을 수 있다는 계산이 나온다. 하지만 실제로는 40~50 tok/s가 나온다. 왜일까.
둘째, KV 캐시와 어텐션 연산이다. 컨텍스트가 길어질수록 KV 캐시가 VRAM을 잠식하고, 어텐션 매트릭스 연산이 기하급수적으로 늘어난다. 32K 컨텍스트에서 Qwen 2.5 14B를 돌리면, 모델 가중치보다 KV 캐시가 더 많은 VRAM을 차지하는 경우도 있다.
즉, 당신이 FLOPs로 계산한 '이론상 속도'는 빈 컨텍스트에서 가중치만 읽는 이상적인 시나리오다. 실제로는 KV 캐시, 어텐션, 그리고 GPU의 캐시 미스까지 더해져 50~70% 수준으로 떨어진다.
실제 벤치마크 — 같은 GPU, 다른 모델, 천차만별 속도
직접 측정한 수치다. 테스트 환경: RTX 4090 24GB + 64GB 시스템 RAM, llama.cpp 기반, 4K 컨텍스트 기준.
| 모델 | 양자화 | VRAM 사용 | tok/s | 체감 |
|---|---|---|---|---|
| Qwen 2.5 7B | Q4_K_M | ~4.5GB | 55 | 실시간 대화 가능 |
| Qwen 2.5 14B | Q4_K_M | ~9GB | 28 | 살짝 느리지만 충분 |
| Qwen 2.5 14B | Q8_0 | ~14GB | 22 | Q4와 큰 차이 없음 |
| Llama 3.3 70B | IQ3_XXS | ~28GB | 1.5 | 사실상 대화 불가 |
| Phi-4 14B | Q4_K_M | ~9GB | 30 | Qwen보다 약간 빠름 |
몇 가지 인사이트가 보인다. 첫째, 7B Q4는 대부분의 GPU에서 실시간 체감이 가능하다. RTX 3060 12GB에서도 40 tok/s 이상 나온다. 둘째, 14B와 70B 사이에는 건널 수 없는 강이 있다. 70B는 어떤 양자화를 해도 24GB VRAM 안에 겨우 들어갈 뿐, 속도는 절망적이다. 셋째, Q4와 Q8의 체감 속도 차이는 생각보다 작다. 메모리 2배를 쓰면서 얻는 품질 향상 대비, 속도 손실은 20% 내외다.
속도로 본 SLM 선택의 3가지 치명적 실수
실수 1: "파라미터 수가 작으면 무조건 빠르다"
아니다. 아키텍처가 더 중요하다. Phi-4 14B는 Qwen 2.5 14B보다 파라미터 수는 같지만, MS가 설계한 효율적인 어텐션 구조 덕분에 7% 더 빠르다. DeepSeek V2 Lite는 MoE(Mixture of Experts) 아키텍처로 16B지만 실제 활성화 파라미터는 2.4B — 7B 모델보다 빠르면서 14B급 품질을 낸다.
실수 2: "양자화 레벨이 낮을수록 훨씬 빠르다"
이것도 반은 맞고 반은 틀리다. Q2는 확실히 빠르다. 하지만 Q4 → Q8로 올라갈 때 속도 저하는 20% 내외인 반면, VRAM 사용량은 2배가 된다. Q4_K_M이 VRAM 대비 속도·품질의 최적점이다. Q8을 고집할 이유는 VRAM이 남아돌 때뿐이다.
실수 3: "추론 엔진은 아무거나 써도 된다"
같은 모델, 같은 GPU인데 추론 엔진에 따라 속도가 30% 이상 차이 난다. llama.cpp는 CPU 오프로딩과 GPU 가속을 유연하게 조절할 수 있어 VRAM 부족 시 실용적이다. 반면 vLLM은 GPU 전용으로 최적화되어 있어 VRAM이 충분하면 llama.cpp보다 20~30% 빠르다. Ollama는 설정이 편리하지만, 기본 프롬프트 템플릿이 모델별 상이해 동일 모델도 품질이 갈린다.
| 추론 엔진 | 장점 | 단점 | 추천 상황 |
|---|---|---|---|
| llama.cpp | CPU+GPU 하이브리드, VRAM 유연 | GPU 전용보단 느림 | VRAM 12GB 이하 |
| vLLM | GPU 최적화, 배치 처리 강력 | CPU 오프로딩 미지원 | VRAM 16GB 이상 |
| Ollama | 설치 1분, API 내장 | 설정 깊이 부족 | 개발·PoC, 빠른 테스트 |
| exllamav2 | 4-bit 초고속 추론 | 모델 호환성 제한 | Qwen/Llama Q4 전용 |
속도로 SLM 고르는 실전 플로우
이제 계산기는 치우고, 이 순서로 결정하자.
- 목표 tok/s 정하기: 대화형 챗봇은 20 tok/s 이상, 코드 자동완성은 30 tok/s 이상, 문서 요약은 10 tok/s 이상.
- GPU VRAM 확인: 모델 가중치 + KV 캐시(컨텍스트 × 0.5~1GB)가 VRAM의 80% 이내여야 한다. 넘으면 속도가 급락한다.
- 7B Q4부터 시작: 7B Q4는 어떤 GPU(6GB 이상)에서도 25 tok/s 이상 나온다. 이걸로 안 되면 14B로 올리고, 그래도 안 되면 아키텍처(Phi, DeepSeek MoE)를 바꾼다.
- 70B는 환상이다: 24GB VRAM에서 70B를 돌리는 건 기술적으로 '가능'일 뿐, '실용'이 아니다. 차라리 API를 써라.
- 컨텍스트 길이는 보수적으로: 32K는 마케팅 숫자다. 실제 속도를 원하면 4K~8K로 제한하고, 필요할 때만 RAG로 확장하라.
스펙시트가 아니라 벤치마크를 믿어라
필자는 RTX 4090을 사고 한 달 동안 70B 모델의 3 tok/s를 '곧 최적화되겠지' 하며 기다렸다. 결국 7B로 내려왔고, 55 tok/s의 쾌적함을 얻었다. 그동안 잃은 건 시간과 기대뿐이었다.
SLM 선택의 진짜 기준은 스펙시트 위의 FLOPs가 아니다. 당신의 GPU에서, 당신이 쓸 컨텍스트 길이에서, 실제로 몇 tok/s가 나오는지— 그 하나다. 벤치마크 영상을 찾아보고, 커뮤니티 후기를 확인하고, 직접 돌려보라. 30분 테스트가 한 달 삽질을 막아준다.
당신의 GPU에서 가장 빠르게 반응하는 모델은 무엇인가? 스펙시트를 덮고 한번 직접 확인해보자.