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의 HBM35.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의 데모)을 넘어서 네 가지 핵심 기여를 제공합니다:

  1. 정확성 오버레이: ROCm 나이트리(vLLM ROCm 0.26.1rc1.dev229+g124154a88.rocm723)에 대해 FP8 형식 처리, MoE 라우팅, 사전 검증, CPU-KV 동기화 문제를 수정합니다.
  2. 검증된 서빙 구성: DSpark-7 사전 초안, 블록 거부, 고정 K=7, 2,048토큰 스케줄러 예산, 1,024토큰 긴 프리필 제한을 포함합니다.
  3. AITER GEMM 튜닝 테이블: gfx942(MI300X) 형상에 대해 업스트림에 누락된 튜닝 테이블과 MXFP4 전문가용 OGS 기하학 오버라이드를 제공합니다.
  4. 하이브리드 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 레이아웃을 기대합니다. 오버레이는 float8e4b8FP8_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 이미지와 구성에 기반한 것이며 보편적인 모델 벤치마크는 아닙니다.

배포 체크리스트

  1. 하드웨어 – 하나의 MI300X (gfx942, 304CU, ~192GiB HBM), AMD 드라이버, Docker Compose, ~235GiB RAM, ~500GB 디스크.
  2. 핀된 런타임 가져오기 – 다이제스트 핀된 이미지 vllm/vllm-openai-rocm@sha256:e68d18b2… 사용 및 모델 리비전 7872f01b1d… 다운로드.
  3. 오버레이 검증 – 첫 번째 시작 전에 sha256sum -c SHA256SUMS 실행.
  4. 스택 시작docker compose up -d; 모델 로딩, KV 캐시 크기, CUDA 그래프 캡처 성공 메시지 확인.
  5. 커널 워밍업 – 한 번의 캐시되지 않은 프리필(~8,000토큰) 실행하여 커널 초기화; 이후 요청은 더 빠릅니다.
  6. 스모크 테스트 – 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