에이전트 작업에서 실제로 중요한 것을 찾기 위해 13개 모델을 65K-128K 컨텍스트에서 벤치마크했습니다
I benchmarked 13 models at 65K-128K context to find out what actually matters for agentic workloads
핵심 요약
에이전트 작업 시 긴 컨텍스트 처리에서는 토큰 생성 속도보다 프리필(prefill) 속도와 KV 헤드 구조가 성능을 결정짓는 핵심 요소임을 밝혀냈습니다.
프리필 성능 — 긴 컨텍스트 작업 시 전체 시간의 94~99%를 차지하므로 가장 중요한 지표임
KV 헤드 구조 — 파라미터 수보다 KV 헤드 개수가 프리필 속도에 훨씬 큰 영향을 미침
Mamba2 아키텍처 — 긴 컨텍스트에서도 프리필 속도 저하가 적어 에이전트 작업에 유리함
F16 KV 캐시 — MoE 모델에서는 양자화된 캐시보다 F16이 더 빠른 성능을 보이는 역설이 발생함
에이전트 작업에 진짜 중요한 게 뭔지 알아보려고 65K~128K 컨텍스트에서 모델 13개를 벤치마크해 봤다. 결론부터 말하면 프리필(prefill)이 모든 걸 다 씹어 먹고, 파라미터 수보다는 KV 헤드 개수가 깡패더라.
에이전트 워크플로우(도구 사용, 코딩 에이전트, RAG)에 로컬 LLM을 쓰면서 다들 tg128(토큰 생성 속도)만 성능 지표로 빨아대는 게 영 거슬렸다. 그래서 컨텍스트 윈도우가 꽉 찼을 때 진짜 중요한 게 뭔지 확인하려고 구조화된 장문 컨텍스트 벤치마크를 돌려봤다. 결과는 꽤 충격적이었다.
환경 설정
GPU: RX 7900 XT 20GB (Vulkan 백엔드, RADV/Mesa)
백엔드: llama.cpp / llama-bench (build 9860)
플래그: -ngl 99 (GTT spill), -fa on, -ub 2048 -b 16384, ASPM=performance, VRAM 확보를 위해 bare TTY 사용
모델 13개: 덴스 5개, MoE 6개, Mamba2 하이브리드 1개, MLA MoE 1개 — 5GB에서 18GB까지 다양함
KV 캐시 티어 3개: Q8_0 K / Q4_0 V (공격적), Q8_0 K / Q8_0 V (대칭), F16 (기준)
컨텍스트 크기: 512, 4K, 16K, 65K, 131K — 순수 프리필(pp)과 프롬프트+생성(pg) 둘 다 측정
총 2회 세션에 걸쳐 약 21시간 소요
전체 프리필 속도 결과 (Q8_0 K / Q8_0 V KV 캐시, 토큰/초)
그냥 생데이터가 궁금한 사람들을 위해 테스트한 모든 모델을 정리했다. pp는 순수 프롬프트 처리(프리필), tg128은 토큰 생성(디코드)이다. pp131K 기준으로 정렬함.
참고할 점: Devstral-24B는 131K 테스트를 끝내지 못함 (8 KV 헤드 × 128 dim = 160 KB/토큰 — 131K에서 KV 캐시만 약 21GB). GLM-4.7-Flash는 16K 넘어가니까 뻗어버림 (MLA 문제, 5번 발견 사항 참고). Ornith-9B는 구조적으로 Qwen3.5-9B랑 똑같음.
발견 1: 65K 이상 컨텍스트에서 프리필이 전체 시간의 94~99%를 차지함. 짧은 에이전트 출력에는 tg128이 거의 의미 없음.
실제 에이전트 쿼리(65K 컨텍스트 입력, 300토큰 출력, 전형적인 도구 사용 응답)에 걸리는 시간 분석이다. 총 시간 기준으로 정렬함:
Model
Type
Prefill
Decode
Total
Prefill %
Trinity-Mini (MoE 3B/26B)
MoE
46.2s
2.0s
48.2s
96%
Qwen3.6-35B-A3B (MoE)
MoE
51.7s
2.7s
54.4s
95%
Ornith-9B / Qwen3.5-9B
Dense
51.4s
3.3s
54.7s
94%
Gemma-4-26B-A4B (MoE)
MoE
64.0s
2.5s
66.5s
96%
Granite-4.0-H-Small (Mamba2)
Mamba2
62.8s
4.2s
67.1s
94%
North-Mini-Code (MoE)
MoE
72.8s
2.2s
75.0s
97%
Gemma-4-12B
Dense
110.2s
4.5s
114.7s
96%
Granite-4.1-8B
Dense
148.4s
3.2s
151.6s
98%
Qwen3.6-27B
Dense
161.4s
9.3s
170.7s
95%
Ministral-3-14B
Dense
162.0s
4.5s
166.5s
97%
Apriel-1.6-15B
Dense
188.9s
4.6s
193.5s
98%
Devstral-24B
Dense
209.5s
7.2s
216.6s
97%
디코드는 우리가 기다리는 시간의 1~5%밖에 안 된다. 에이전트가 짧은 도구 호출을 하거나 간단한 답변을 내놓을 때, 진짜 중요한 건 컨텍스트 윈도우를 얼마나 빨리 처리하느냐뿐이다.
즉, tg128을 앞세운 벤치마크 리포트는 에이전트용으로는 다 헛소리라는 거다. pp65K / pp131K가 진짜 핵심 지표다.pg(prompt, gen) 혼합 지표가 그나마 낫긴 한데, 이것도 세부 수치를 가려버린다. 프리필은 빠른데 디코드가 개판인 모델은 짧은 출력에는 최상급인데도 pg 지표상으로는 그냥 평범해 보일 수 있거든.
발견 2: 장문 컨텍스트 프리필에서 가장 중요한 아키텍처 요소는 KV 헤드 개수임 — 파라미터 수도 아니고, MoE냐 덴스냐도 아님
컨텍스트가 늘어날 때의 프리필 속도 유지율(pp4K 속도 대비 %)이다:
Model
Size
KV Heads
pp4K
16K
65K
131K
Type
Granite-4.0-H-Small
17G
Mamba2*
1271
96%
82%
69%
Mamba2+MoE
Qwen3.6-27B
16G
4×256
681
88%
60%
42%
Dense
Ornith-9B / Qwen3.5-9B
6G
4×128
2220
87%
57%
39%
Dense
Trinity-Mini
16G
4×128
2924
81%
49%
32%
MoE
Qwen3.6-35B-A3B
18G
4×128
2736
81%
46%
29%
MoE
Gemma-4-12B
7G
8×128
1498
76%
40%
23%
Dense
Gemma-4-26B-A4B
14G
4×256
2798
74%
37%
21%
MoE
North-Mini-Code
15G
4×128
2187
72%
41%
26%
MoE
Apriel-1.6-15B
9G
8×128
1208
67%
29%
16%
Dense
Ministral-3-14B
8G
8×128
1325
69%
31%
18%
Dense
Granite-4.1-8B
5G
8×128
1807
62%
24%
14%
Dense
Devstral-24B
15G
8×128
796
79%
39%
---
Dense
GLM-4.7-Flash
16G
MLA (1×576)
1054
34%
---
---
MoE (MLA)
*Granite-H-Small은 어텐션 레이어 4개 + Mamba2 레이어 36개로 구성됨 (재귀 상태 사용, KV 캐시 없음)
Ornith-9B / Qwen3.5-9B(9B 덴스, 4 KV 헤드 × 128 dim = 64 KB/토큰 KV)는 128K 컨텍스트에서 Apriel-15B(15B 덴스, 8 KV 헤드 × 128 dim = 160 KB/토큰)보다 4.4배 빠르다. 같은 덴스 계열에 크기는 절반인데도 말이다. 차이는 순전히 KV 캐시 아키텍처 때문이다. 어텐션 패스마다 전체 KV 캐시를 훑어야 하는데, 8 KV 헤드면 토큰당 2.5배나 더 많은 데이터를 훑어야 하니까.
실전 팁: 긴 컨텍스트용 모델을 고를 때 파라미터 수부터 보지 말고, 설정 파일에서 n_kv_heads랑 head_dim부터 확인해라. 같은 패밀리 모델이라도 KV 헤드가 4개냐 8개냐에 따라 128K에서 3~4배 차이 난다.
발견 3: Mamba2 하이브리드 모델은 프리필 스케일링이 거의 평탄함. 이 아키텍처는 진짜 물건이다.
Mamba2 거품 아닌가 싶었는데, 데이터 보니까 확실하네. Granite-4.0-H-Small(IBM, 어텐션 레이어 4개 + Mamba2 레이어 36개)은 131K 컨텍스트에서도 pp4K 속도의 69%를 유지한다. 테스트한 모든 트랜스포머 모델은 42% 밑으로 떨어졌는데 말이지.
Model
pp4K
pp131K
Slowdown
Granite-H-Small (Mamba2)
1271
875
1.45×
Trinity-Mini (MoE)
2924
923
3.2×
Ornith-9B / Qwen3.5-9B (Dense GQA)
2220
873
2.5×
Granite-8B (Dense)
1807
244
7.4×
131K 컨텍스트에서 Granite-H-Small(17GB)은 파일 크기가 3배나 작은 Ornith-9B / Qwen3.5-9B(6GB)와 비슷한 약 875 t/s를 찍는다. Mamba2 레이어는 KV 캐시가 커지는 대신 고정된 재귀 상태를 쓰니까, 어텐션 레이어 4개만 KV 증가에 영향을 주는 거다.
문제는 디코딩이 느리고(71 t/s) 추론 품질이 떨어진다는 거야. 하지만 "방대한 컨텍스트, 짧은 출력"이라는 에이전트 도구 사용에 딱 맞는 작업 패턴에서는 프리필(prefill) 스케일링 이점이 확실하고 측정 가능해. 누군가 이 아키텍처로 제대로 된 모델을 학습시킨다면, 에이전트 분야에서 진짜 강력한 경쟁자가 될 수 있을걸.
발견 4: F16 KV 캐시가 Q8/Q4 양자화 KV보다 빠를 수 있다 — 역양자화의 역설
통념상 속도를 높이려면 KV 캐시를 양자화(Q8_0 K / Q4_0 V)해서 캐시 크기를 줄이고 대역폭을 아끼라고 하잖아. 65K 컨텍스트에서 F16 베이스라인과 Q8_0 K / Q8_0 V를 직접 맞붙여 테스트해 봤어(결과는 Q8K/Q4V와 ±1% 오차 범위 내에서 동일했음. V 캐시 양자화 방식은 별 상관없다는 뜻이지):
Model
Type
Q8K/Q8V
F16
F16 advantage
Gemma-4-26B-A4B
MoE
1015
1554
+53%
Gemma-4-12B
Dense (7GB)
593
857
+44%
Qwen3.6-35B-A3B
MoE
1273
1573
+24%
Ornith-9B / Qwen3.5-9B
Dense (6GB)
1276
1544
+21%
Trinity-Mini
MoE
1429
1583
+11%
Granite-H-Small
Mamba2
1040
984
-5%
Ministral-3-14B
Dense (8KV)
409
335
-18%
Granite-4.1-8B
Dense (8KV)
447
358
-20%
Apriel-1.6-15B
Dense (8KV)
351
120
-66%
MoE 모델이랑 작은 덴스(dense) 모델에서는 F16이 압승이야. 반면 KV 헤드가 많은 덴스 모델에서는 처참하게 깨져. 이유는 이거야.
Q8/Q4 KV 캐시 역양자화는 컨텍스트 길이에 비례해서 늘어나는 연산 작업이거든. 65K 컨텍스트에서 어텐션 커널은 토큰 하나당 65K × n_kv_heads × head_dim 만큼의 Q8/Q4 요소를 역양자화해야 해. 이 연산 비용이 캐시 크기를 절반으로 줄여서 얻는 대역폭 이득보다 더 커지는 거지.
반면 F16 KV는 캐시 용량은 두 배지만 역양자화가 아예 필요 없어. MoE 모델의 경우 F16 캐시가 커지면 GTT 스필(spill)이 발생하긴 하는데, 활성 파라미터(35B 중 약 3B)만 PCIe를 넘어가니까 스필 페널티가 미미해. 하지만 KV 헤드가 8개인 덴스 모델은 F16 캐시가 커지는 데다 가중치까지 전부 스필되니까 페널티를 두 배로 처맞는 셈이지.
업데이트된 규칙:
F16 승: MoE 모델(활성 스필 영향이 미미함), 작은 덴스 모델(<10GB), 효율적인 GQA 덴스 모델(KV 헤드 4개)
F16 패: 덴스 모델 + KV 헤드 8개 이상 + 10GB 초과(가중치 전체 스필 + 큰 KV 캐시 = 재앙)
Q8K/Q4V vs Q8K/Q8V: 모든 모델에서 차이 없음(±1%). V 캐시 양자화 선택은 무의미함. 아무거나 써.
본인 하드웨어에서 실제 작업 컨텍스트로 F16을 직접 테스트해 봐. 통념이 항상 맞는 건 아니니까.
발견 5: MLA(Multi-head Latent Attention)는 컨텍스트가 커질수록 Vulkan에서 성능이 급락한다
GLM-4.7-Flash(KV 헤드 1개, 576 차원 — MLA 아키텍처)는 프리필 성능이 급격하게 떨어졌어:
Context
pp (t/s)
vs pp512
pp512
1822
100%
pp4K
1054
58%
pp16K
358
20%
pp65K
crashed
---
512에서 16K 컨텍스트로 가면서 80%나 꼬라박았어. 65K 벤치마크는 아예 뻗어버렸고(Vulkan DeviceLost). 다만, 이 데이터가 뭘 보여주고 뭘 안 보여주는지는 확실히 해둘게. 16K와 65K 사이 컨텍스트는 테스트를 안 해서 정확히 어디서 터지는지는 몰라. 나도 이 모델을 매일 20K 이상 컨텍스트에서 쓰고 있는데 뻗지는 않거든. 즉, 16K가 절대적인 한계점은 아니고 그 어딘가에 실패 지점이 있다는 거지.
데이터에서 확실한 건, Vulkan에서 MLA의 프리필 스케일링이 표준 어텐션보다 훨씬 구리다는 거야. 이게 완전히 뻗어버릴지 아니면 그냥 엄청 느려질지는 컨텍스트 크기와 VRAM 여유 공간에 달렸어. pp4K에서 pp16K로 갈 때 66% 떨어진 건 확실한 사실이야. MLA의 KV 압축/압축 해제 커널이 Vulkan 백엔드에서는 컨텍스트가 커질수록 스케일링이 잘 안 되는 모양이야. 짧은 컨텍스트의 MLA 벤치마크 결과를 긴 컨텍스트에 그대로 대입하지 마. 그리고 성능 저하가 선형적일 거라고 생각하지 마. 갈수록 가속화되는 것처럼 보이거든. 이건 백엔드 특성일 수도 있어. CUDA나 Metal은 MLA의 어텐션 패턴을 더 잘 처리할지도 모르지.
발견 6: 에이전트 작업에는 MoE 모델이 속도와 지능 종합 점수에서 1등이다
속도 데이터와 Artificial Analysis Intelligence Index v4.1 점수를 합쳐서 종합 점수를 내봤어(지능 점수에 실제 소요 시간의 역수를 가중치로 둠). 점수 = AA 지능 점수 × (50초 / 65K에서의 실제 소요 시간). 즉, 50초 걸리면 AA 배율 1.0배가 되는 식이지.
Rank
Model
AA Intel
Size
Wall (65K)
Type
Composite
1
Qwen3.6-35B-A3B
32
18G
54s
MoE
29.4
2
Trinity-Mini
24
16G
48s
MoE
24.9
3
Gemma-4-26B-A4B
26
14G
67s
MoE
19.6
4
North-Mini-Code
21
15G
75s
MoE
14.0
5
Ornith-9B / Qwen3.5-9B
15
6G
55s
Dense
13.7
6
Qwen3.6-27B
37
16G
171s
Dense
10.8
7
Gemma-4-12B
18
7G
115s
Dense
7.8
8
Granite-4.0-H-Small
7
17G
67s
Mamba2
5.2
9
Apriel-1.6-15B
19
9G
194s
Dense
4.9
10
Ministral-3-14B
15
8G
167s
Dense
4.5
11
Granite-4.1-8B
12
5G
152s
Dense
4.0
12
Devstral-24B
17
15G
217s
Dense
3.9
GLM-4.7-Flash는 65K 데이터가 없어서(MLA 크래시) 제외했어.
가장 똑똑한 모델(Qwen3.6-27B, AA=37)은 MoE 모델보다 3배나 느려서 6위로 밀려났어. 상위 MoE 모델(Qwen3.6-35B-A3B, AA=32)은 3배 빠른 속도로 지능의 87%를 뽑아내. 모델이 짧은 출력을 여러 번 반복해야 하는 에이전트 워크플로우에서는 이 트레이드오프가 훨씬 유리해.
MoE 모델은 두 가지 이득을 챙길 수 있음. 디코딩이 빠르고(활성화된 파라미터만 읽으니까), GTT 스필 비용도 저렴함(컨텍스트 때문에 스필오버 발생 시 활성화된 가중치만 PCIe를 넘어가니까). 이 조합 덕분에 VRAM이 제한된 환경에서 긴 컨텍스트를 다룰 때 압도적인 성능을 보여줌.
TL;DR — 로컬 에이전트 LLM 배포를 위한 실전 팁
tg128에 집착 좀 그만해. 65K 이상의 컨텍스트에서는 짧은 출력물 기준으로 프리필(prefill)이 전체 작업 시간의 94~99%를 잡아먹음. 차라리 pp65K나 pp131K로 벤치마크 돌려라.
KV 헤드 개수부터 확인해. 4 KV 헤드 × 128 차원(토큰당 64KB)이 8 KV 헤드 × 128 차원(토큰당 160KB)보다 긴 컨텍스트에서 훨씬 효율적임. 모델 크기랑 상관없음.
작업 환경 컨텍스트에서 F16 KV 캐시 테스트해 봐. MoE나 작은 덴스 모델에서는 Q8/Q4보다 20~53% 더 빠를 수 있음. "KV는 무조건 양자화해야 한다"는 상식은 긴 컨텍스트 환경의 일부 아키텍처에선 안 통함.
소비자용 VRAM에서 에이전트용 긴 컨텍스트를 돌릴 땐 MoE가 정답임. 저렴한 GTT 스필 + 빠른 디코딩 + 준수한 지능. 30B급 MoE면 2~3배 빠른 속도로 최상위 덴스 모델 지능의 80% 이상을 뽑아냄.
Mamba2 하이브리드 모델은 진짜임. 131K까지 프리필 스케일링이 거의 평탄하게 유지됨. 지금은 아키텍처 문제가 아니라 학습 품질이 발목을 잡고 있는 거라, 앞으로 지켜볼 만함.
MLA는 Vulkan에서 컨텍스트가 길어지면 성능이 떡락함. GLM-4.7-Flash는 512에서 16K 컨텍스트로 넘어가면서 프리필 속도가 80%나 깎였고, 65K에선 아예 뻗어버림. 적당한 컨텍스트(난 20K+로 매일 씀)에선 쓸만하지만, 스케일링 곡선이 가파르고 비선형적임. 짧은 컨텍스트 MLA 벤치마크 결과만 보고 판단하지 마라.
모든 데이터는 llama.cpp 빌드 9860, Vulkan 백엔드, RX 7900 XT 20GB 환경에서 측정함. 하드웨어마다 결과는 다를 수 있음. 특히 F16 KV 관련 내용은 본인 GPU의 대역폭 대비 연산 비율이나 VRAM 여유 공간에 따라 갈림. 하지만 아키텍처 패턴(KV 헤드 개수, 프리필 비중, MoE의 스케일링 효율)은 어디서나 비슷하게 적용될 거임.
혹시라도 재현해보고 싶은 사람 있으면 원본 JSONL이나 벤치마크 스크립트 공유 가능함.
주요 댓글
r/localllama
작성자의 벤치마크 결과에 대해 에이전트 워크로드에서의 KV 캐시 활용 방식과 프롬프트 처리 효율성을 두고 기술적인 토론이 이어지고 있습니다.
72
보통 이런 벤치마크는 결론을 내리지 않아서 무슨 상황인지 직접 해석해야 하는데, 설명해줘서 고마움. 감사함.
8
그 말 하려고 들어왔음. 특히 '루프'(크론 잡이나 자동화된 추론 작업 같은 것들)를 돌릴 때는 모든 사용 사례가 챗봇인 건 아니니까. 내 맥에서 minimax m3를 유용한 양자화 수준으로 백그라운드에 띄워두고 프리필(prefill)이 좀 느리더라도 돌리면, 챗봇 경험을 기대하는 것 외에도 많은 일을 처리할 수 있음. 프리필이 특정 사용 사례에서는 중요한 요소지만, 항상 모든 걸 결정짓는 건 아님.
0
KV 캐시 양자화가 정석인가요??
23
실제 에이전트 쿼리에 대한 월클락(wall-clock) 분석입니다 — 65K 컨텍스트 입력, 300 토큰 출력 (전형적인 툴 사용 응답).
진짜 정보가 담겨 있을 수도 있고, 언뜻 보면 그럴듯해 보이지만, 종종 여기저기서 무작위로 hallucination이 튀어나옴. 사람이 쓴 글보다 이런 걸 찾아내는 게 훨씬 더 짜증 남.
20
첫 번째 프롬프트에서 65k 이상의 컨텍스트를 채우는 경우는 보통 이전 대화를 재개할 때뿐임. 일반적인 에이전트 코딩 작업의 흐름은 작업 관련 정보로 20-25k 컨텍스트를 채우고, 대화를 180k 이상으로 이어가다가 압축하는 식임. 연속적인 프롬프트가 다시 프리필(re-pp)을 유발해서는 안 됨.
만약 에이전트 작업이 첫 프롬프트부터 65k를 꽉 채운다면, 불필요한 정보나 관련 없는 쓰레기 데이터로 컨텍스트가 오염된 것일 가능성이 높음.
11
맞음, 에이전트 작업의 전형적인 단계는 10k 정도의 새로운 토큰(도구 결과) + 1k 생각 + 출력임. 이걸 100번 반복하는 식이지.
1
16
네, Q8 대칭 양자화는 퍼플렉시티(perplexity) 측면에서는 사실상 공짜나 다름없거든요. FP16이 더 빠르다는 결과에 진짜 충격받았습니다. 메모리 대역폭이 오버헤드보다 더 큰 차이를 만들 줄 알았거든요.
나는 에이전트가 로컬에서 그래프 데이터셋을 구축하게 하고, 레딧이나 깃허브 이슈에서 찾은 수많은 게시물을 수집하고 상관관계를 분석하게 함. 말은 거창하지만 실제로는 별거 아님. 그냥 주말 끝에 Claude Max 계정의 남는 사용량을 써서 로컬 llama.cpp + llama-swap 설정을 최적화하는 데 도움을 받는 용도로 쓰는 게 최고임.
제비 한 마리가 왔다고 봄이 온 건 아니지만, 시간이 지나면서 여러 신호를 결합하면 온갖 쓰레기 정보 속에서 질적으로 확실한 신호를 걸러내는 데 큰 도움이 됨.
2
ㅇㅇ 작성자는 KV 캐시가 뭔 용도라고 생각하는 거지? 아니면 일반적인 툴 사용 관찰이 65k 토큰 파일 읽기라는 건가...
0
100% 맞음.
마치 작성자가 코딩할 때 모델을 한 번도 안 써본 것 같음. 여보세요? 쿼리는 캐싱되는데, 단일 클라이언트 환경에서 프리필(prefill)이 문제가 되는 경우는 거의 없다고.
그 가정은 틀렸음. 첫째, 에이전트는 하위 에이전트를 생성할 수 있고(일부 작업에서는 그래야만 함), 소비자용 설정은 보통 65k 길이의 시퀀스를 하나, 많아야 두 개 정도 담을 KV 캐시만 있음. 메인 스레드가 길면 하위 에이전트를 생성할 때 캐시가 밀려나고, 이후 재처리가 발생함. 또 다른 고려 사항은 검색 및 조사 작업인데, 심층 조사를 실행할 때 검색 결과를 가져오는 한 라운드만으로도 쉽게 100k 토큰을 넘길 수 있고, 에이전트는 이런 검색을 10번, 심지어 20번까지 수행할 수 있음.
1
만약 독립적인 서브 에이전트 사용이 많다면, 제 생각에는 llama.cpp 슬롯을 여러 개 실행하고 메인 에이전트를 슬롯 0에 고정하는 게 좋을 겁니다. 아니면 툴 호출 전에 슬롯을 디스크에 저장하고, 툴 호출 후에 저장된 슬롯을 불러오는 기능을 사용하세요. 제 생각에 툴 호출 시 전체 컨텍스트를 채우는 건 하네스(harness) 설계 실패입니다.
0
만약 독립적인 하위 에이전트(sub-agent)를 많이 사용한다면
그럼 우선 llama.cpp를 쓰면 안 됨. 그런 시나리오는 vllm이나 sglang을 위한 거니까. 그리고 결국 원래 논점으로 돌아오는데, GPU 메모리는 한정되어 있음. 물론 RAM 오프로드나 SSD 오프로드를 쓸 수도 있겠지만, 60k 프롬프트는 프롬프트당 거의 5GB 메모리를 잡아먹음(30B dense 모델 기준). 그러면 금방 이 캐시만으로 수백 GB를 예약하게 될 거임. 아니면, 그냥 빠른 PP(prefill)를 지원하는 설정을 쓰든가...
0
일시적이지 않은 상태(non-ephemeral state)만 저장하면 되고, 파일은 덮어쓰면 됨. 이러면 문제를 완전히 완화할 수 있고 연산 자원을 낭비할 일도 없음.
근데 뭐 알아서 하셈. 내 사용 사례에서는 PP는 필요 없고, 99%의 경우 TG(token generation)가 필요함.