340GiB DeepSeek V4.1을 128GB 미니PC에서 SSD 스트리밍으로 돌려 봤습니다

메모리의 2.7배인 모델을 expert SSD 스트리밍으로 돌렸습니다. 커뮤니티 ROCm PR을 EVO-X2에서 직접 빌드해 16K 벤치마크, 32~128K 측정, greedy 반복 출력 진단을 했습니다.

DeepSeek V4.1 Flash의 Q2 양자화는 340.6GiB이고 EVO-X2의 통합 메모리는 128GB입니다. 모델이 메모리보다 2.7배 큰데도 돌아갑니다. DwarfStar(ds4)의 아직 병합되지 않은 커뮤니티 PR이 구현한 expert SSD 스트리밍과 Engram disk-only 경로를 EVO-X2에서 직접 빌드해 쟀습니다.

340.6GiBQ2 전체 (가중치 152 + Engram 189)
209.8 tok/s16K prefill (3회, SD 2.37)
8.7 tok/s16K 위치 생성 (3회, SD 0.05)
128Ki처리를 확인한 최대 실제 문맥

모델이 나뉘어 있는 방식

Q2 파일 341GiB는 주 가중치 152GiB와 Engram 189GiB로 나뉩니다. Engram은 필요한 행만 SSD에서 읽는 구조라 메모리에 올리지 않습니다. 주 가중치 152GiB도 128GB보다 크기 때문에 expert 텐서를 SSD에서 읽어 옵니다. 공식 지원은 Metal(macOS)과 CUDA까지이고, ROCm gfx1151 경로는 병합되지 않은 PR #1036에 있습니다. 실험용 경로입니다.

모델 파일은 EVO-X2에서 직접 받아 전체 SHA256을 확인했고, PR head를 ROCm 10으로 빌드했습니다. CPU power-saver, GPU auto로 평소 운영하던 조건 그대로 쟀습니다.

16K 벤치마크

16K 입력에 256토큰 생성, 매번 새 프로세스로 3회 쟀습니다.

항목 평균 ± 표본 SD
prefill 209.76 ± 2.37 tok/s
생성 8.72 ± 0.05 tok/s

PR 작성자는 prefill 301~350 tok/s를 보고했는데 조건이 다릅니다. 작성자는 고성능 전력 설정에 92GiB 캐시로 각 1회 쟀고, 이쪽은 power-saver에 안전 검사가 허용한 80GiB expert budget으로 3회 쟀습니다. 같은 코드여도 전력과 캐시 설정에 따라 처리량이 크게 달라집니다.

API로 산술, 한국어 요약, 코드 함수 작성, 이미지 속 문자·개수·도형 인식을 한 번씩 확인했고 모두 통과했습니다. 품질을 종합적으로 평가한 것은 아닙니다.

32K~128K

실제 입력을 32/64/96/128Ki토큰으로 바꿔 가며 매번 새 프로세스로 3회, 256토큰씩 생성했습니다.

실제 문맥 prefill (tok/s) 생성 (tok/s)
32K 252.56 7.90
64K 261.62 8.16
96K 279.07 8.04
128K 273.93 6.20

128K에서 새로 prefill하는 데 약 478초가 걸렸습니다. 128K 생성 평균 6.20은 세 번의 값 7.91, 2.77, 7.91의 평균입니다. 2.77이 나온 회차를 빼지 않았습니다. 그 회차에는 GPU 사용률과 NVMe 처리량이 함께 떨어졌지만 원인은 아직 모릅니다. 128K까지 처리할 수는 있어도 늘 8 tok/s가 나오지는 않습니다.

전 구간에서 OOM, GPU reset, NVMe 오류는 없었고 최소 가용 메모리는 24.9GiB, GPU 최고 온도는 83°C였습니다.

반복 출력

첫 16K 벤치마크에서 greedy로 이어 쓰게 하자 같은 구절이 반복됐습니다. ROCm 포팅의 결함일 수도 있었지만, 다음 세 가지 때문에 그렇게 결론 내지 않았습니다.

  • PR의 QA 문서에 고정 길이 greedy 문학 이어쓰기에서 반복이 생길 수 있다고 이미 적혀 있습니다.
  • 이어 쓰라는 지시를 붙인 greedy와 temperature 0.7 샘플링에서는 반복이 다시 나오지 않았습니다.
  • PR 작성자는 upstream CUDA에서도 같은 현상을 봤다고 했습니다.

반복은 ROCm 결함이라기보다 raw greedy 이어쓰기라는 조건에서 나온 것으로 봅니다. 다만 한국어 단편을 써 보게 했을 때 요청 분량을 넘기고 시간 흐름이 어긋나서 장문 품질은 통과로 보지 않았습니다. 이 구현의 /v1/completions가 내부에서 chat template를 씌운다는 것도 확인해서, raw 이어쓰기 대조군으로는 쓰지 않았습니다.

운영 판단

단일 세션에서 32K~128K를 3회씩 확인한 것이 이번 범위입니다. 병합되지 않은 PR에 기대고 있고 장시간·다중 세션은 확인하지 않아서 운영에는 올리지 않았습니다. 128GB급 로컬 기계에서 300GiB급 MoE 모델을 실험해 볼 만한 속도로 돌릴 수 있다는 점은 확인했습니다. SSD 스트리밍의 비용은 prefill보다 긴 문맥에서 생성 속도가 들쭉날쭉한 쪽으로 나타났습니다.

같은 모델을 Apple M4 Max에서 돌린 기록은 별도 글에, 시리즈 개요는 128GB 미니PC 로컬 AI에 있습니다.