7장. tokens/sec와 메모리 대역폭
이 장의 목표 “초당 30 토큰”, “tps 12.5” 같은 표기의 의미와, 내 맥에서 어떤 속도가 나올지 예측하는 감을 잡습니다.
메모리 대역폭이라는 단어와 친해집니다.
7.1 tokens/sec란?
1초에 모델이 몇 개의 출력 토큰을 만드는지 나타내는 단위입니다.
20 tokens/sec
→ 1초에 20개 토큰
→ 100토큰 답변에 약 5초
→ 500토큰 답변에 약 25초
체감 기준입니다.
| 속도 | 체감 |
|---|---|
| 5 tokens/sec 이하 | 답답함, 글로벌 대기 |
| 10 tokens/sec | 천천히 읽는 정도 |
| 20 tokens/sec | 쾌적함, 사람이 따라 읽을 수 있음 |
| 30 tokens/sec | ChatGPT와 비슷한 흐름 |
| 50+ tokens/sec | 매우 빠름 |
한국어는 영어보다 토큰이 더 쪼개진다 (3장) 는 걸 기억하세요.
같은 30 tokens/sec여도 한국어로 답변할 때는 체감이 절반 정도 입니다.
7.2 속도를 결정하는 진짜 요인
대부분 사람들이 처음에 짐작하는 건 이렇습니다.
"CPU/GPU가 빠르면 빠를 거다"
반은 맞고 반은 틀립니다.
LLM 추론에서 가장 중요한 건 메모리 대역폭(Memory Bandwidth) 입니다.
이유는 단순합니다.
모델은 매 토큰을 만들 때마다 모델 가중치 전체를 메모리에서 읽어들여야 합니다.
32B Q4 모델이 16GB라면, 매 토큰마다 16GB를 다 훑어야 합니다.
초당 토큰 수 ≈ 메모리 대역폭 / 모델 크기
이 식이 핵심입니다.
7.3 맥 통합 메모리 대역폭
같은 64GB여도 맥 모델마다 메모리 대역폭이 다릅니다.
| 칩 | 메모리 대역폭 |
|---|---|
| M1 / M2 / M3 / M4 | 약 100~120 GB/s |
| M1 Pro / M2 Pro / M3 Pro / M4 Pro | 약 150~200 GB/s |
| M1 Max / M2 Max / M3 Max / M4 Max | 약 300~400 GB/s |
| M1 Ultra / M2 Ultra / M3 Ultra | 약 800 GB/s |
| M5 Pro | 약 300 GB/s |
| M5 Max | 약 600 GB/s |
(정확한 값은 칩 세대·구성마다 다름. Apple 공식 스펙 참조.)
기억할 건 이겁니다.
같은 메모리 용량(예: 64GB)이어도, Pro/Max에 따라 속도 차이가 두 배 이상 납니다.
7.4 내 맥에서 나올 속도 어림셈
핵심 식 한 번 더.
이론 최대 tokens/sec ≈ 메모리 대역폭(GB/s) / 모델 크기(GB)
예시. 32B Q4(약 16GB) 모델을:
| 칩 | 어림 속도 |
|---|---|
| M4 Pro (~200 GB/s) | 약 12 tok/s |
| M5 Pro (~300 GB/s) | 약 18 tok/s |
| M4 Max (~400 GB/s) | 약 25 tok/s |
| M5 Max (~600 GB/s) | 약 37 tok/s |
| M2 Ultra (~800 GB/s) | 약 50 tok/s |
이건 이론 최대치 입니다. 실제로는 70~80% 정도 나오는 게 보통입니다.
같은 식으로 70B Q4(약 35GB)는:
| 칩 | 어림 속도 |
|---|---|
| M4 Pro | 약 5 tok/s |
| M5 Pro | 약 8 tok/s |
| M4 Max | 약 11 tok/s |
70B는 빠른 칩이 있어도 답답할 수 있다는 게 보이죠.
7.5 양자화가 속도에도 영향을 준다
5장에서 양자화는 메모리를 줄이는 기술이라고 했습니다. 한 가지가 더 있습니다.
양자화는 속도도 빠르게 합니다.
이유는 위 식 그대로입니다.
초당 토큰 수 ≈ 메모리 대역폭 / 모델 크기
모델 크기가 줄어들면 같은 대역폭에서 더 빨라집니다.
32B 기준 어림:
| 양자화 | 모델 크기 | M5 Pro 어림 속도 |
|---|---|---|
| FP16 | 64GB | (메모리 부족) |
| Q8 | 32GB | 약 9 tok/s |
| Q5 | 20GB | 약 15 tok/s |
| Q4 | 16GB | 약 18 tok/s |
| Q3 | 12GB | 약 25 tok/s |
속도가 부족하면 양자화를 한 단계 더 줄이는 것도 방법. 단, Q3 이하는 품질 손실에 주의 (5장).
7.6 Decode 속도 vs Prefill 속도
6장에서 본 두 단계 다시 짚어봅니다.
| 단계 | 무엇 | 영향 |
|---|---|---|
| Prefill | 입력 전체 읽기 | 긴 문서 → 첫 토큰까지 오래 걸림 |
| Decode | 한 토큰씩 출력 | 우리가 보통 말하는 tokens/sec |
긴 문서 분석에서는 prefill이 더 답답할 수 있습니다.
[입력 20K 토큰 prefill 12초] [답변 decode 4초]
↑
답변이 빨리 끝나도
처음 멈춰있는 시간이 더 길게 느껴짐
해결책
- 컨텍스트를 필요한 만큼만 (6장)
- 시스템 프롬프트를 짧게
- 같은 문서를 여러 번 묻는다면 컨텍스트 캐싱(22장) 활용
7.7 속도를 실제로 측정해보기
Ollama에서는 다음 명령으로 응답 속도를 즉시 볼 수 있습니다.
$ ollama run qwen3:32b --verbose
--verbose 옵션을 붙이면
응답 후 이런 통계가 찍힙니다.
total duration: 8.4s
load duration: 50ms
prompt eval rate: 180 tokens/s ← prefill
eval rate: 18.2 tokens/s ← decode
여기서 eval rate 가 우리가 신경 쓰는 그 값입니다.
LM Studio에서는 화면 우하단에 실시간 속도가 그래프로 표시됩니다 (16장).
7.8 속도가 갑자기 느려질 때 점검 리스트
평소 20 tok/s가 잘 나오던 모델이 오늘은 갑자기 5 tok/s로 떨어졌다면?
- 컨텍스트가 갑자기 커졌나? 대화가 길어지면 KV Cache 누적으로 느려집니다.
- 메모리 압박이 있나? 활성 상태 보기에서 swap 사용량 확인.
- 모델이 두 개 동시 로드돼 있나?
ollama ps로 확인. - macOS가 절전 모드인가? 배터리 사용 시 GPU 클럭이 떨어집니다.
- 외장 디스플레이가 4개 이상 연결됐나? 드물지만 GPU 자원 분산 영향이 있습니다.
이 장에서 기억할 한 가지
tokens/sec ≈ 메모리 대역폭 / 모델 크기
그래서 양자화를 더 줄이거나, 모델 크기를 줄이면 보통 비례해서 빨라집니다.
맥 칩의 Pro/Max 등급은 메모리 대역폭 차이가 결정적입니다.
손으로 해볼 것
1. 내 맥 메모리 대역폭 확인
Apple 지원 사이트에서 내 맥 모델을 검색하고
메모리 대역폭(Memory Bandwidth) 값을 메모하세요.
예) M5 Pro 64GB → 약 300 GB/s
2. 이론 최대 속도 계산해보기
내 맥의 대역폭 ÷ 후보 모델 크기 를 계산하세요.
- 8B Q4 (약 4GB)
- 14B Q4 (약 7GB)
- 32B Q4 (약 16GB)
각각 몇 tok/s 가 나올지 어림셈해보세요.
17장에서 Ollama로 실제 모델을 돌려보고 예측 vs 실측 을 비교할 겁니다.
여기까지가 1부의 끝 입니다.
이제 모델 페이지의 거의 모든 숫자를 읽을 수 있습니다.
다음 장(2부 시작)부터는 Hugging Face에서 모델을 받는 법 을 실전 화면 기준으로 다룹니다.