RTX 3060 12GB 4개로 DeepSeek V4 Flash Q4_K_XL 구동 (프롬프트 처리 약 100 tok/s)
Running DeepSeek V4 Flash Q4_K_XL at ~100 tok/s prompt processing on 4× RTX 3060 12GB
핵심 요약
RTX 3060 4개를 활용해 144GB 규모의 DeepSeek V4 모델을 360k 이상의 컨텍스트로 구동한 실험적 설정 공유.
- 하드웨어 구성 — RTX 3060 12GB 4개와 128GB RAM을 활용한 가성비 고용량 모델 구동 환경 구축함.
- 성능 최적화 — llama.cpp의 -ncmoe 및 -ot 설정을 통해 텐서 배치를 수동 최적화하여 프롬프트 처리 속도 100 tok/s 달성함.
- 컨텍스트 한계 — 368k 컨텍스트를 설정했으나 실제 꽉 채운 테스트는 아직 진행되지 않음.
- 기술적 성과 — 소비자용 GPU 4대로 144GB MoE 모델을 구동하는 효율적인 메모리 분산 전략을 입증함.
RTX 3060 12GB 4장 꽂아서 143~144 GiB짜리 DeepSeek-V4-Flash-0731 UD-Q4_K_XL GGUF 모델을 360k~376k 컨텍스트 윈도우 유지하면서 돌리는 데 성공했다.
하드웨어:
CPU: Intel Core i9-10920X, 12C/24T
RAM: 128 GB DDR4-3200, 쿼드 채널
GPU: 4× NVIDIA RTX 3060 12GB
총 VRAM: 48 GB
스토리지: NVMe SSD
엔진: llama.cpp, 빌드 b10181
모델: unsloth/DeepSeek-V4-Flash-0731-GGUF
양자화: UD-Q4_K_XL, 약 144 GiB
KV 캐시: Q8_0
지금까지 찾은 제일 빠른 설정값:
llama-server \
-m DeepSeek-V4-Flash-0731-UD-Q4_K_XL-00001-of-00005.gguf \
-c 368640 \
-ncmoe 34 \
-ts 100,1,1,1 \
-ot 'blk.(3[4-6]).ffn_.*_exps=CUDA1,blk.(3[7-9]).ffn_.*_exps=CUDA2,blk.(4[0-2]).ffn_.*_exps=CUDA3' \
-ctk q8_0 \
-ctv q8_0 \
-b 2048 \
-ub 2048 \
-np 1 \
-lm none \
--threads 20 \
--flash-attn on
대략 20.5k 토큰 프롬프트로 측정함:
설정된 컨텍스트: 368,640 토큰
프롬프트 처리: 99.4 tok/s
텍스트 생성: 10.1 tok/s
부하 걸렸을 때 남는 최소 VRAM:
GPU0: 671 MiB
GPU1: 842 MiB
GPU2: 1395 MiB
GPU3: 1395 MiB
모델 로딩 시간: 약 198초
다른 컨텍스트/안정성 옵션 측정값:
| 컨텍스트 | 프리필 | 디코드 | 남는 최소 VRAM |
|---|---|---|---|
| 376832 | 99.5 t/s | 10.4 t/s | 611 MiB |
| 368640 | 99.4 t/s | 10.1 t/s | 671 MiB |
| 360448 | 99.4 t/s | 10.1 t/s | 735 MiB |
재밌는 건 GPU 배치 방식임.
-ncmoe 34 옵션으로 0~33 블록의 전문가(expert)들은 시스템 RAM에 박아버렸고, 나머지 9개 전문가 레이어는 GPU 1~3에 각각 3개씩 나눠서 할당함.
-ts 100,1,1,1로 극단적으로 쪼갠 건 전문가 가중치를 분산시키려는 게 아님. 그 대신 어텐션이나 KV 캐시 같은 비전문가 텐서들을 GPU0에 몰아넣어서, GPU 1~3에 큰 전문가 레이어 들어갈 자리를 확보한 거임.


