DeepSeek V4 Flash는 단일 AMD MI300X에서 실행됩니다 – 성능, 수정 사항 및 배포 가이드
TL;DR
DeepSeek V4 Flash는 무게 양자화나 오프로드 없이 전체 3040억 파라미터 체크포인트를 사용하여 단일 AMD MI300X GPU에서 168토큰/초 중앙 디코딩(단일 스트림) 및 약 8,000토큰/초 프리필(prefill)을 달성합니다. 이 성능은 ROCm 패치, AITER GEMM 튜닝 테이블, 하이브리드 GPU-CPU KV 캐시 전략을 적용함으로써 달성되었습니다.
왜 MI300X가 중요한가
Instinct MI300X는 192GB의 HBM3와 5.3TB/s 메모리 대역폭을 제공하며, NVIDIA H100 SXM5보다 약 2.4배 더 많은 HBM 용량을 갖추고 있습니다. 이 메모리 여유 공간 덕분에 전체 156.7GB의 DeepSeek V4 Flash 체크포인트가 GPU 메모리에 완전히 존재할 수 있어 PCIe를 통한 가중치 스트리밍이나 레이어 오프로드가 필요하지 않습니다. 큰 KV 풀(20GB GPU + 96GB CPU 계층)은 2~8개의 일반적인 동시 스트림과 최대 64개의 급작스러운 스트림 부하를 지원합니다.
"MI300X는 192GB의 HBM3와 5.3TB/s 대역폭을 갖추고 있으며, 유사한 NVIDIA 하드웨어의 목록 가격의 약 절반 수준입니다." – AMD 제품 페이지
이 저장소가 추가하는 내용
GitHub 저장소 ryanzhou/deepseek-v4-flash-mi300x는 이전 작업(Fergus Finn의 MI300X 준비 및 Doubleword의 데모)을 넘어서 네 가지 핵심 기여를 제공합니다:
- 정확성 오버레이: ROCm 나이트리(
vLLM ROCm 0.26.1rc1.dev229+g124154a88.rocm723)에 대해 FP8 형식 처리, MoE 라우팅, 사전 검증, CPU-KV 동기화 문제를 수정합니다. - 검증된 서빙 구성: DSpark-7 사전 초안, 블록 거부, 고정 K=7, 2,048토큰 스케줄러 예산, 1,024토큰 긴 프리필 제한을 포함합니다.
- AITER GEMM 튜닝 테이블:
gfx942(MI300X) 형상에 대해 업스트림에 누락된 튜닝 테이블과 MXFP4 전문가용 OGS 기하학 오버라이드를 제공합니다. - 하이브리드 KV 전략: 20GB GPU
fp8_ds_mla캐시 + 96GB 네이티브 CPU 오프로드, vLLM 이슈 #47282에 문서화된 로드 경로 펜싱 수정 포함.
저장소 구조 (자체 포함형 개요)
.
├─ compose.yaml # 프로덕션 Docker-Compose 스택 (vLLM ROCm + Caddy)
├─ Caddyfile.example # HTTPS 프록시 템플릿
├─ vllm-entrypoint.sh # 시작 전에 오래된 CPU-KV mmap 파일 정리
├─ SHA256SUMS # 모든 런타임 아티팩트에 대한 SHA-256 핀
├─ patches/
│ ├─ *.py # 읽기 전용 마운트된 전체 파일 오버레이
│ ├─ diffs/*.patch # 업스트림 기준과의 유니파이드 차이점
│ └─ README.md # 출처 및 재생성 지침
└─ tuning/
└─ *.csv # gfx942용 AITER A8W8 블록 스케일 튜닝 테이블
주요 성능 수치 (vLLM ROCm 나이트리 0.26.1rc1.dev229+g124154a88.rocm723, AITER 0.1.19)
| 메트릭 | 결과 |
|---|---|
| 단일 스트림 디코딩 (중앙값) | 168.6토큰/초 |
| 튜닝된 커널로 프리필 | 약 7.9–8.5K토큰/초 (새로운 프롬프트에서 6,988–7,019토큰/초) |
| 8개 동시 스트림 | 총합 542토큰/초, 스트림당 중앙값 90.3토큰/초 |
| 64스트림 버스트 | 총합 830토큰/초, OOM 또는 엔진 오류 없음 |
| 컨텍스트 창 | 256K토큰 검증 (아키텍처는 최대 1M까지 지원) |
| HBM에 있는 가중치 | 156.67GiB (추가 양자화 또는 오프로드 없음) |
두 가지 핵심 정확성 수정 사항
MXFP4 라우팅 버그
MoE 비트매트릭스 커널은 블록 열을 Triton 블록 크기로 패딩했지만, 전역 텐서 경계에 대해 마스크를 적용하여 부하 하에서 라우팅을 손상시켰습니다. 오버레이는 마스크를 다음과 같이 교체합니다:
mask = (offs_local < BLOCK_SIZE) & (offs_global < nonzero_indx_size)
또한 그룹화된 MXFP4 전문가용 융합 SiLU 및 빠른 DeepSeek 라우팅도 추가됩니다.
FP8 형식 불일치
DeepSeek V4 Flash의 Lightning Indexer 캐시는 AMD의 FNUZ E4M3 레이아웃(16×16 타일 재정렬)으로 FP8을 쓰지만, 업스트림 AITER는 OCP E4M3 레이아웃을 기대합니다. 오버레이는 float8e4b8를 FP8_MAX=224.0로 강제 적용하고 필요한 재정렬을 수행하여 MI300X에서 두 배 스케일 오류를 방지합니다.
사전 디코딩 구성
이 스택은 블록 거부를 포함한 확률적 초안(DSpark-7)을 사용합니다. 두 개의 Gumbel-노이즈 오버레이는 초안 제안 노이즈와 거부/복구 노이즈를 독립적으로 유지하며, draft_sample_method=probabilistic일 때만 필요합니다.
프로덕션 수준 튜닝 세부 사항
| 최적화 | 관측된 효과 |
|---|---|
| gfx942용 21개의 반복되는 A8W8 GEMM 형상 튜닝 | 단일/이중 스트림에서 디코딩 처리량 +42–62% |
| 융합 SiLU + 빠른 라우팅 + 배치 민감한 전문가 타일 | 네이티브 C1 디코딩 34.5 → 56.6토큰/초 (+64%) |
BLOCK_H=64 희소 프리필 타일 |
프리필 7.9–8.5K토큰/초; 희소 어텐션 추적 317 → 142ms 요청당 |
| 고정 K=7 + 블록 거부 + 인과 검증 | 정확한 출력과 함께 단일 스트림 119.5토큰/초 |
| 2,048토큰 예산 + 1,024토큰 긴 프리필 제한 | 52K 콜드 프리필 뒤 짧은 요청의 TTFT가 8.2초에서 0.5초로 감소 |
| 하이브리드 KV (20GB GPU + 96GB CPU) | 1.93M토큰 길이 등가 용량, 7개의 256K 요청 수용 |
동시성 스윕 (서로 다른 ~400단어 프롬프트, temperature=1.0, top_p=0.95)
| 스트림 | 총합 토큰/초 | 스트림당 중앙값 디코딩 | p50 TTFT |
|---|---|---|---|
| 1 | 126.2 | 168.6토큰/초 | 1.026초 |
| 2 | 145.4 | 152.7토큰/초 | 0.939초 |
| 4 | 316.8 | 108.6토큰/초 | 0.369초 |
| 8 | 542.3 | 90.3토큰/초 | 1.027초 |
| 64 | 830.2 | 16.4토큰/초 | 2.190초 |
참고: DSpark 수용률은 프롬프트 내용에 따라 달라지며, 이 수치는 특정 Docker 이미지와 구성에 기반한 것이며 보편적인 모델 벤치마크는 아닙니다.
배포 체크리스트
- 하드웨어 – 하나의 MI300X (
gfx942, 304CU, ~192GiB HBM), AMD 드라이버, Docker Compose, ~235GiB RAM, ~500GB 디스크. - 핀된 런타임 가져오기 – 다이제스트 핀된 이미지
vllm/vllm-openai-rocm@sha256:e68d18b2…사용 및 모델 리비전7872f01b1d…다운로드. - 오버레이 검증 – 첫 번째 시작 전에
sha256sum -c SHA256SUMS실행. - 스택 시작 –
docker compose up -d; 모델 로딩, KV 캐시 크기, CUDA 그래프 캡처 성공 메시지 확인. - 커널 워밍업 – 한 번의 캐시되지 않은 프리필(~8,000토큰) 실행하여 커널 초기화; 이후 요청은 더 빠릅니다.
- 스모크 테스트 – Caddy 프록시된
/v1/completions엔드포인트를 통해 간단한 완성 요청 실행.
프로덕션 주의사항
- HBM 여유 공간이 좁습니다 – 웜 최고 수준은 205.8GB 중 약 204.5GB에 도달합니다.
--kv-cache-memory-bytes를 20GB 이상으로 늘리면 그래프 캡처 중HSA_STATUS_ERROR_OUT_OF_RESOURCES가 발생할 수 있습니다. - CPU KV 계층은 캐시 항목만 저장합니다 –
--kv-offloading-size 96 --kv-offloading-backend native는 제거된 프리픽스 캐시 항목을 위해/dev/shm에 약 103GB를 매핑합니다. 엔트리포인트 스크립트는 충돌 후 오래된 매핑을 정리합니다. - 스케줄러 경고 – DSpark-7이 2,048토큰 예산에서 사전 초안 슬롯을 예약하므로 1,664토큰 스케줄러 경고가 예상됩니다.
- 워밍업 지연 – 재시작 후 첫 번째 프리필은 약 5.3초(8.9K토큰) 소요되며, 이후 프리필은 약 1.7초로 감소합니다.
- 정확성 테스트 – 저장소에는 도구 호출, 스키마 검사, 네이티브 및 DSpark 경로 모두에 대한 38만 토큰 네들 리콜을 포함한 검증 세트가 포함되어 있습니다.
라이선스 및 출처
스택, 문서, vLLM 기반 오버레이는 Apache-2.0 라이선스 하에 배포되며, AITER 오버레이는 원래 MIT 헤더를 유지합니다. DeepSeek V4 Flash 모델 자체는 Hugging Face에서 MIT 라이선스입니다.
커뮤니티 인사이트 (Hacker News)
- 한 사용자는 DwarfStar가 더 적은 메모리로 동일한 모델을 실행할 수 있다고 지적했으며, 아마도 양자화를 사용했을 것으로 추정하지만, 이 저장소는 전체 가중치 추론을 유지하기 위해 양자화를 의도적으로 피하고 있습니다.
- 다른 댓글은 MI300X가 일반적으로 8GPU OAM 케이스(약 25만 유로)로 판매되며, 단일 카드로는 드물다고 설명했습니다.
- 일부 참여자는 NVIDIA H800 결과(약 15K토큰/초/GPU)와 성능을 비교하고, 추가 최적화가 가능할 수 있다고 제안했습니다.
- 한 기여자는 MI350P PCIe 버전(144GB HBM)도 MXFP4 양자화를 사용하면 모델이 144GB 내에 들어가므로 DeepSeek V4 Flash를 호스팅할 수 있다고 언급했습니다.
- 더 넓은 질문으로, 몇 조 개의 파라미터를 가진 전면 모델에 대해 양자화 없이 추론이 가능한지 여부가 제기되었으며, DeepSeek V4 Flash(304B)는 단일 고HBM GPU가 하위 조 파라미터 모델을 처리할 수 있음을 보여줍니다.
Sources
관련
- 프로젝트
- Dispatch
- Dispatch
- Dispatch
- Dispatch