
2× RTX 3090 및 중고 Quad-Xeon DDR4 서버에서 DeepSeek V4-Flash (284B MoE) 구동 — 초당 33
요약
중고 RTX 3090 2개와 Quad-Xeon 서버를 활용하여 156GB 크기의 DeepSeek V4-Flash 모델을 구동하는 방법을 소개합니다. 메모리 용량이 핵심인 MoE 모델의 특성을 이용해 저비용 하드웨어 조합으로 전체 체크포인트를 성공적으로 실행했습니다.
핵심 포인트
- DeepSeek V4-Flash(284B MoE)를 중고 하드웨어로 구동 성공
- MoE 모델 특성상 대역폭보다 거대한 메모리 용량이 구동의 핵심
- vLLM 포크와 Marlin 커널을 사용하여 Ampere 아키텍처에서 최적화
- 재양자화 없이 공식 전체 체크포인트를 로드하여 성능 확보
재양자화(re-quant)가 아닌 공식 전체 체크포인트인 DeepSeek V4-Flash-0731을 일반적인 중고 하드웨어에서 실행했습니다. 이 엔진에 대한 Ampere 아키텍처 기반의 결과물을 게시하는 사람을 찾을 수 없었기에 공유합니다. 왜 2018년형 서버를 사용하냐고요? 모델 크기가 156 GB이기 때문입니다. 속도가 중요해지기 전에 이 수치가 모든 것을 결정합니다:
| 플랫폼 | 메모리 대역폭 (Memory Bandwidth) | 가격 | DS4-Flash 구동 여부 |
|---|---|---|---|
| Mac Studio M3 Ultra 96 GB max ¹ | 819 GB/s | $3,999+ | ❌ 로드 불가 |
| DGX Spark 128 GB | 273 GB/s | $4,699² | ⚠️ 4-bit 재양자화(re-quant)만 가능, 여유 공간 ~10 GB |
| AMD Ryzen AI Halo 128 GB | ~256 GB/s | $3,999 | ⚠️ 동일함 |
| RTX PRO 6000 Blackwell 96 GB | 1,792 GB/s | ~$9,000 | ❌ 로드 불가 |
| 6× RTX 3090 카드 단독 | 144 GB | 936 GB/s | ~$6,600 |
| 중고 R940 + 2× 3090 | 512–768 GB | 141 GB/s × 4 nodes | ~$6K |
¹ Apple은 2026년 3월에 512 GB M3 Ultra 옵션을, 5월에 256 GB 옵션을 제거했습니다 — 현재 상한선은 96 GB입니다.
² 출시 당시 $3,999에서 인상되었으며, 이는 명확히 DRAM 비용 때문입니다.
통합 메모리(Unified-memory) 장치는 작은 풀(pool) 내에서 대역폭을 제공합니다. 4-소켓(4-socket) 서버는 노드당 대역폭은 낮지만 거대한 풀을 제공합니다 — 단, 네 개의 독립적인 메모리 컨트롤러가 병렬로 작동합니다. 토큰당 284B 파라미터 중 약 13B만 활성화되는 희소 MoE (sparse MoE)의 경우, 용량(capacity)이 승리합니다.
추론 플랫폼: Lvllmds4-x v2.3.8 — guqiong96의 SM80+ DeepSeek V4 특화 버전. lk_moe v2.3.1 CPU-GPU 하이브리드 MoE 엔진을 사용하여 시스템 RAM에서 NUMA-aware 전문가 연산을 수행하는 vLLM 포크(base: yhfgyyf/vllm-deepseek-v4-sm89)입니다. GitHub 릴리스에서 제공되는 사전 빌드된 cp312 wheel을 사용하여 컴파일이 필요 없습니다.
모델: DeepSeek V4-Flash-0731 · 총 284B / 활성 13B MoE · 공식 safetensors, 156 GB (48 shards)
양자화 인식 학습(Quantization-aware trained) — 라우팅된 전문가(experts, 파라미터의 약 96%)는 MXFP4로 네이티브하게 제공됩니다. 아무것도 재양자화(re-quantized)하지 않았습니다. FP8 선형(linears)은 가중치 전용(weight-only)으로 실행되며, 활성화(activations)는 BF16, KV 캐시는 fp8_ds_mla를 사용합니다.
sm_86 트릭: Ampere에는 네이티브 FP8/FP4 연산 기능이 없으므로, 이 포크는 모든 것을 Marlin 가중치 전용 커널(MXFP4 MoE 백엔드 + MarlinFP8 선형)을 통해 라우팅합니다. 이것이 Blackwell 시대의 체크포인트가 2020년형 GPU에서 실행되는 방식입니다.
DSpark 투기적 디코딩 (speculative decoding, 체크포인트에 내장됨, 5개의 초안 토큰) — 이것이 단일 스트림 속도의 대부분을 차지하는 부분입니다. 하드웨어 (모두 중고/eBay급): Dell PowerEdge R940 · 4× Xeon Platinum 8268 (96C/192T, Cascade Lake, AVX512-VNNI, AMX 없음) 768 GB DDR4-2933 (24× 32 GB, 소켓당 6 채널, 4개의 NUMA 노드) 2× RTX 3090 24 GB (sm_86), 둘 다 PCIe x16, 모델 저장용 NVMe + SATA SSD 2개. 현재 eBay 가격 (2026년 8월 기준): 128 GB를 탑재한 96코어 R940은 $2,000–2,800 선; 512 GB는 약 $3,800; 768 GB는 약 $7,600입니다. 여기에 중고 3090 한 쌍 가격인 약 $2,200–2,600를 추가하면 됩니다. 모델을 구동하는 데 768 GB가 반드시 필요한 것은 아닙니다. 인스턴스 하나당 약 170 GB가 필요하며, --membind를 통한 고정(pinning)을 사용하려면 이것이 단일 NUMA 노드에 들어가야 합니다. 따라서 512 GB (노드당 128 GB)가 총비용 약 $6,000 수준의 대략적인 진입점입니다. 추가 RAM은 속도가 아닌 인스턴스 개수를 늘려줍니다: DIMM을 22개에서 24개로 늘렸을 때 처리량(throughput) 변화는 약 5%였으며, 이는 오차 범위 내입니다. 서빙 시 리소스 점유율: VRAM: 카드당 가중치 6.6 GB + KV (24 GB 중 21.6 GB 사용) — GPU 사용률은 약 25% 수준입니다. 시스템 RAM: 인스턴스당 약 170 GB (전문가(experts) 모델은 DRAM에 상주하며, CPU가 lk_moe AVX512-VNNI 커널을 통해 스트리밍함). 전력 (iDRAC/Redfish + nvidia-smi 측정): 디코딩 중 섀시 전력 약 1,000 W, 유휴(idle) 시 435 W. GPU는 평균 136–145 W만 소모합니다 (피크 189 W). 두 개의 3090 모두 전력 제한(power-cap)을 350 W에서 250 W로 낮췄으나 처리량은 단 1 tok/s도 변하지 않았습니다 — 제한 수치에 도달하지 않기 때문입니다. 부하 변화의 약 95%는 96개의 Xeon 코어가 DRAM에서 전문가(experts) 모델을 스트리밍하는 데 사용됩니다. $0.13/kWh 기준, 최악의 경우 24시간 365일 가동 시 월 약 $94이며, 실제 가동 주기(duty cycle)를 고려하면 훨씬 적습니다. 결과 (128 토큰 완성, temp 0, 최대 컨텍스트 22K, max-num-seqs 4, spec depth 5):
| 동시 사용자 수 | 합계(Aggregate) | 사용자당(Per user) |
|---|---|---|
| 1 | 33 tok/s | 33 |
| 4 | 53–68 tok/s | 13–17 |
| 8 | 47–63 tok/s | 6–8 |
(범위 = 첫 번째 콜드 패스(cold first pass) → 프리픽스 캐시(prefix cache)가 있는 웜 스테이트(warm steady state) 사이의 값입니다.) 규모를 비교하자면: 동일한 박스에서 ik_llama.cpp 하이브리드로 동일 모델을 실행하면 단일 스트림 12.2 tok/s를 기록합니다. 투기적 디코딩(spec-decode) + Marlin 경로는 동일한 하드웨어에서 단일 스트림 2.6배 / 합계 약 3배의 성능 향상을 보여줍니다.
도움이 되지 않았던 것들
도움이 될 것이라 예상했지만 효과가 없었던 세 가지 사항:
+2 DIMM (22→24, 노드당 대칭형 192 GB): 약 5% 향상
GPU 전력 제한 (power cap) 350→250 W: 효과 없음
더 많은 GPU: 도움이 되지 않음 — 현재 GPU 사용률(util)은 25%이며, 24 GB 중 6.6 GB만 사용 중입니다.
이 세 가지 모두 동일한 결론을 가리킵니다: 병목 현상(bottleneck)은 CPU 측의 DRAM 대역폭(bandwidth)에 있습니다. 이 워크로드(workload)는 더 많은 Ampere가 아니라 DDR5와 AMX (Sapphire Rapids)를 필요로 합니다. 만약 이 모델을 기반으로 시스템을 구축할 계획이라면, 그래픽 카드보다는 메모리 채널(memory channels)에 투자하십시오.
수 시간을 허비하게 만든 주의사항들 (Gotchas)
TileLang은 실행 시점에 발견되는 nvcc를 사용하여 커널을 JIT 컴파일(JIT-compiles)합니다. 시스템의 CUDA 12.0은 난해한 람다 구문 오류(lambda syntax errors)를 내며 실패합니다. venv 내부의 pip 번들 툴킷(site-packages/nvidia/cu13)을 가리키도록 CUDA_HOME을 설정하십시오. 시스템 CUDA 설치는 필요하지 않습니다.
Wheel의 pip CUDA 패키지들은 내부적으로 버전이 불일치하여 배포됩니다 (nvcc 13.2 vs runtime headers 13.0) → CCCL "compiler and toolkit headers are incompatible" 오류 발생. 해결 방법: pip install nvidia-cuda-runtime==13.2.86 nvidia-cuda-nvrtc==13.2.86를 실행하십시오.
문서화되지 않은 DSpark 제약 사항을 고생 끝에 발견했습니다: max_num_seqs × (spec_tokens + 1)은 반드시 32 이하이어야 하며, 그렇지 않으면 엔진 워밍업(warmup) 단계에서 텐서 크기 불일치(tensor-size mismatch)로 중단됩니다. seqs=4 × spec=5가 최적의 지점(sweet spot)이었으며, 더 얕은 spec을 사용한 더 넓은 배치(wider batches)는 모든 환경에서 더 느렸습니다.
이 포크(fork) 버전에서 MiniMax 및 기타 비-DeepSeek MoE 모델들은 여전히 일반적인 LvLLM의 sm_86 vectorized_gather_kernel assert 오류를 발생시킵니다. Ampere 관련 수정 사항은 DS4 경로에만 적용되어 있습니다.
전체 실행 명령(launch command) 및 venv 레시피는 댓글을 통해 공유하겠습니다.
/u/AbbreviationsSad5582가 r/LocalLLaMA에 게시함 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기