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를 담을 수 있는 것과 그만큼을 실용적인 시간 안에 처리하는 것은 따로 봐야 했습니다.

약 79.71GiB모델 + projector 상주
320K검증 context (327,680 tokens)
1시간 58분256Ki cold prefill 전체 소요
5.31 tok/s256Ki 위치의 decode

모델과 런타임

항목 값
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 시리즈의 한 편입니다.