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에서 직접 빌드해 쟀습니다.
모델이 나뉘어 있는 방식
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에 있습니다.