DeepSeek V4 Vision에 256Ki 토큰을 한 번에 넣어 본 결과
128GB 통합 메모리에 320K 컨텍스트는 들어갔지만, 정확히 262,144토큰을 cold 상태로 넣자 prefill에만 약 2시간이 걸렸습니다. 이미지 인식 반복 측정과 함께 정리했습니다.
EVO-X2에서 DeepSeek V4 Flash Vision Exp를 커뮤니티 IQ2_XXS GGUF와 실험용 llama.cpp 포팅으로 돌려 text, 단일 이미지, 실제 256Ki context를 확인했습니다. 메모리와 장시간 안정성은 충분했습니다. 하지만 256Ki토큰을 캐시 없이 한 번에 넣었을 때 prefill이 1시간 58분 걸렸습니다. context를 담을 수 있는 것과 그만큼을 실용적인 시간 안에 처리하는 것은 따로 봐야 했습니다.
모델과 런타임
| 항목 | 값 |
|---|---|
| GGUF | imatrix IQ2_XXS, 4 shards, 약 78.84GiB |
| vision projector | F16, 약 890MiB |
| runtime | llama.cpp PR #28133 3a798bf2 + image MoE routing patch |
| context / slot | 327,680 tokens / 1 |
| KV | K/V Q8_0, memory resident |
| offload | ROCm full layer, Flash Attention |
이 모델은 text 토큰용 ffn.gate.bias 외에 image 토큰용 ffn.gate.bias_vl과 hash-routed image expert 처리가 필요합니다. PR 위에 routing patch를 더 얹어서 43개 layer의 modality별 bias 선택과 image batch routing을 보완했습니다.
당시 llama.cpp에는 image span 안의 bidirectional attention이 아직 구현되지 않았습니다. 작은 단일 이미지는 확인했지만, 큰 이미지나 여러 장, 긴 context와 섞인 경우는 따로 검증해야 합니다. upstream이 바뀌면 stock 빌드로 다시 시험하고 실험 patch는 걷어낼 계획입니다.
text와 vision 반복 측정
64K 검증용 서버, Q8 K/V, ROCm full offload, batch/ubatch 2048/512, CPU power-saver에서 3회씩 잰 평균입니다.
| 시험 | 평균 | 표본 SD |
|---|---|---|
| 256-token decode | 14.139 tok/s | 0.033 |
| cold 4K prefill | 201.310 tok/s | 1.152 |
| 단일 이미지 vision prefill | 99.617 tok/s | 0.400 |
| vision decode | 14.883 tok/s | 0.010 |
이미지 시험 세 번 모두 흰 배경에 놓인 주황색 당근과 초록 잎을 정확히 설명했습니다. 320K 서비스로 다시 올린 뒤에도 한국어 text와 같은 이미지로 확인을 통과했습니다. 64K에서 320K로 바꿀 때 GTT는 약 80.37GiB에서 81.42GiB로 늘었고 시스템 가용 메모리는 약 37GiB를 유지했습니다. API가 준비되기까지 약 54초 걸렸습니다.
projector를 워밍업할 때 F32 IM2COL [9216,16,16,1]이 HIP에서 지원되지 않아 fallback 경고가 나왔습니다. 위 vision 처리량에는 이 비용이 들어 있습니다.
정확히 262,144토큰을 cold로 넣기
영문, 한글, 번호, 코드가 섞인 고정 corpus를 정확히 262,144토큰으로 만들어 native completion endpoint에 보냈습니다. 1회 실행, cache_prompt=false, context shift 없음 조건입니다.
| 항목 | 결과 |
|---|---|
| cold prefill | 7,098.535초, 36.929 tok/s |
| 32-token decode | 5.306 tok/s |
| 전체 API wall | 7,104.472초 (1시간 58분 24.5초) |
| 가용 메모리 변화 | 36.99→36.87GiB (약 120.2MiB 감소) |
| swap free 감소 | 약 1.51MiB |
| socket / GPU / CPU 평균 전력 | 85.01 / 69.64 / 0.66W |
| GPU 평균 / 최고 온도 | 73.24 / 78.50°C |
| thermal throttle / 서비스 재시작 | 0 / 0회 |
평균 prefill 처리량은 4K보다 81.65% 낮았고, 256Ki 위치의 decode는 짧은 위치보다 62.47% 낮았습니다. 메모리도 온도도 여유가 있었으니, 길이가 늘수록 쌓이는 attention 계산 비용이 속도를 결정했다고 봅니다.
그래서 320K 설정은 긴 세션을 조금씩 쌓거나 prefix를 재사용할 때 쓸모가 있고, 매 요청마다 256Ki짜리 문서를 새로 넣는 용도에는 맞지 않습니다. 이 시험은 chat template를 거치지 않은 토큰 배열 시험이라 retrieval 정확도나 지시 따르기 성능의 근거로는 쓰지 않습니다.
운영 판단
- 128GB 통합 메모리에서 320K context를 안정적으로 올릴 수 있음을 확인했습니다.
- 일반 text decode는 튜닝한 DwarfStar4보다 느리지만, 모델과 양자화와 런타임이 모두 달라 성능 비교로 보지 않습니다.
- 실험 PR에 기대고 있어서 부팅 자동 시작 없이 필요할 때만 띄웁니다.
- upstream에 병합되면 stock 빌드로 text, 단일·다중 이미지, 장문을 다시 확인합니다.
이 글은 128GB 미니PC 로컬 AI 시리즈의 한 편입니다.