SGLang을 통한 DSpark 기반 DeepSeek V4 Flash 배포 경험
요약
HGX-H200 환경에서 DSpark를 사용하여 DeepSeek V4 Flash 모델을 배포하고 성능을 벤치마크한 경험을 공유합니다. 기존 EAGLE 방식 대비 DSpark가 배치 사이즈에 따라 더 높은 처리량과 토큰 수락률 효율을 보임을 입증합니다.
핵심 포인트
- DSpark는 배치 사이즈 1에서 EAGLE 대비 3.2배 빠른 속도 제공
- 배치 사이즈 24에서 처리량(throughput) 46% 향상 확인
- DSpark는 스텝당 더 많은 초안 토큰을 생성하여 높은 효율 달성
- SGLang과 FlashInfer, Marlin 백엔드 간의 성능 비교 데이터 포함
안녕하세요 여러분. HGX-H200에서 DSpark를 사용하여 DS-4-Flash를 배포한 제 경험을 공유합니다. 제 설정 환경(제가 어떻게 H200에 접근할 수 있었는지 등을 포함하여)에 대한 맥락은 이전 게시물들을 읽어보시면 됩니다. 주로, 제가 이전에 EAGLE (1-1-2)를 사용하여 사용했던 메인 배포 설정의 marlin moe_backend와 공식 블로그( https://www.lmsys.org/blog/2026-07-06-dspark-sglang )에서 본 flashinfer를 비교한 것에 관한 내용입니다. 일반적으로 DSpark가 EAGLE보다 훨씬 빠르다고 말할 수 있습니다. 정확한 비교 표를 저장해두지는 않았지만, 이전 채팅에서 찾은 에이전트들의 결론은 다음과 같습니다.
- DSpark는 bs=1(배치 사이즈 1)에서 3.2배 더 빠름
- DSpark는 bs=24(배치 사이즈 24)에서 처리량(throughput)이 46% 더 높음
- EAGLE는 모든 배치 사이즈에서 약 97-100%의 수락률(acceptance rate)을 유지하지만, 스텝당 2개의 토큰만 초안(draft)으로 생성함. DSpark의 수락률은 배치 사이즈가 커짐에 따라 감소하지만(bs=24에서 100% → 88%), 스텝당 6개의 토큰을 초안으로 생성합니다. 따라서 88%의 수락률에서도 스텝당 5.27개의 토큰을 수락하며, 이는 EAGLE의 1.95와 대조됩니다. 이는 스텝당 2.7배 더 많은 토큰이 수락됨을 의미하며, 여기서 46%의 처리량 이득이 발생합니다.
다음은 추론 속도 등을 테스트하기 위한 명령어와 제 벤치마크 결과입니다.
저는 경험이 많은 사람은 아니지만, 여러분의 조언을 기꺼이 받아들일 준비가 되어 있습니다. 그리고 모든 docker run -d \ --name deepseek-v4-flash-X \ --restart unless-stopped \ --gpus "'device=X,X,X,X'" \ --shm-size 32g \ --ipc=host \ -e SGLANG_RAGGED_VERIFY_MODE=static \ -e SGLANG_PREP_IN_CUDA_GRAPH=0 \ -v /data/models/deepseek-v4-flash-dspark:/model \ -p 500X:30000 \ lmsysorg/sglang:dev-dspark \ sglang serve \ --trust-remote-code \ --model-path /model \ --served-model-name deepseek-v4-flash \ --host 0.0.0.0 \ --port 30000 \ --tp 4 \ --moe-runner-backend marlin \ --mem-fraction-static 0.88 \ --cuda-graph-max-bs-decode 24 \ --max-running-requests 24 \ --kv-cache-dtype fp8_e4m3 \ --enable-metrics \ --enable-cache-report \ --reasoning-parser deepseek-v4 \ --tool-call-parser deepseekv4 \ --speculative-algorithm DSPARK \ --enable-hierarchical-cache \ --hicache-ratio 4 \ --hicache-size 0 \ --hicache-write-policy write_through 요약하자면, 제가 얻은 최종 결과는 다음과 같습니다. AI에게 TTFT 평균(ms — 낮을수록 좋음) 입력 Conc Flashinfer Marlin Delta 5K 1 257 260 tie 5K 5 327 330 tie 5K 10 380 307 Marlin -19% 5K 20 661 597 Marlin -10% 10K 1 255 266 tie 10K 5 410 410 tie 10K 10 369 398 FI -7% 10K 20 645 548 Marlin -15% 20K 1 274 286 tie 20K 5 433 427 tie 20K 10 468 442 tie 20K 20 757 797 tie TTFT P99 (ms — 낮을수록 좋음) Input Conc Flashinfer Marlin Under 5s?
5K 1 270 275 ✅ ✅ 5K 5 485 483 ✅ ✅ 5K 10 490 411 ✅ ✅ 5K 20 5552 4438 ❌ ❌ 10K 1 298 285 ✅ ✅ 10K 5 642 507 ✅ ✅ 10K 10 498 510 ✅ ✅ 10K 20 901 804 ✅ ✅ 20K 1 299 323 ✅ ✅ 20K 5 601 538 ✅ ✅ 20K 10 741 766 ✅ ✅ 20K 20 1803 1886 ✅ ✅ Accept Length (max 6.0) Input Conc Flashinfer Marlin 5K 1 5.22 5.52 5K 20 5.22 5.43 10K 1 5.23 5.44 10K 20 5.30 5.47 20K 1 5.30 5.47 20K 20 5.36 5.50 Heres scripts i run to test ===================================== INSTANCE: flashinfer ===================================== -- Prefill warmup (per input shape) -- warmup: input=5000 conc=1 prompts=2 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_servingis deprecated and will be removed in a future release; usesglang.benchmark.servinginstead (e.g.python -m sglang.benchmark.serving). warnings.warn( [transformers] Unrecognized keys in rope_parametersfor 'rope_type'='default': {'attention_factor'} Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads. warmup: input=10000 conc=1 prompts=2 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning:sglang.bench_servingis deprecated and will be removed in a future release; usesglang.benchmark.servinginstead (e.g.python -m sglang.benchmark.serving). warnings.warn( [transformers] Unrecognized keys in rope_parametersfor 'rope_type'='default': {'attention_factor'} warmup: input=20000 conc=1 prompts=2 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning:sglang.bench_servingis deprecated and will be removed in a future release; usesglang.benchmark.servinginstead (e.g.python -m sglang.benchmark.serving). warnings.warn( [transformers] Unrecognized keys in rope_parameters` for 'rope_type'='default': {'attention_factor'} Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
-- 배치 디코딩 (Batch decode) 워밍업 (c=20) -- 워밍업: input=5000 conc=20 prompts=24 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (is deprecated) 더 이상 권장되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예: python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters 내 인식할 수 없는 키(Unrecognized keys): {'attention_factor'} 경고: 인증되지 않은 요청을 HF Hub로 보내고 있습니다. 더 높은 속도 제한 (rate limits)과 빠른 다운로드를 활성화하려면 HF_TOKEN을 설정하십시오. 워밍업: input=20000 conc=20 prompts=24 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (is deprecated) 더 이상 권장되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예: python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters 내 인식할 수 없는 키(Unrecognized keys): {'attention_factor'} 경고: 인증되지 않은 요청을 HF Hub로 보내고 있습니다. 더 높은 속도 제한 (rate limits)과 빠른 다운로드를 활성화하려면 HF_TOKEN을 설정하십시오.
-- 벤치마크 -- --- flashinfer input=5000 conc=1 prompts=10 --- 최대 동시 요청: 2 수락 길이: 5.22 평균 TTFT (밀리초): 257.42 P90 TTFT (밀리초): 263.26 P99 TTFT (밀리초): 270.24 --- flashinfer input=5000 conc=5 prompts=15 --- 최대 동시 요청: 8 수락 길이: 5.22 평균 TTFT (밀리초): 326.97 P90 TTFT (밀리초): 482.28 P99 TTFT (밀리초): 484.74 --- flashinfer input=5000 conc=10 prompts=30 --- 최대 동시 요청: 15 수락 길이: 5.22 평균 TTFT (밀리초): 379.88 P90 TTFT (밀리초): 487.03 P99 TTFT (밀리초): 490.11 --- flashinfer input=5000 conc=20 prompts=60 --- 최대 동시 요청: 25 수락 길이: 5.22 평균 TTFT (밀리초): 661.43 P90 TTFT (밀리초): 531.47 P99 TTFT (밀리초): 5552.02 --- flashinfer input=10000 conc=1 prompts=10 --- 최대 동시 요청: 2 수락 길이: 5.23 평균 TTFT (밀리초): 255.17 P90 TTFT (밀리초): 289.91 P99 TTFT (밀리초): 297.77 --- flashinfer input=10000 conc=5 prompts=15 --- 최대 동시 요청: 8 수락 길이: 5.25 평균 TTFT (밀리초): 409.59 P90 TTFT (밀리초): 471.23 P99 TTFT (밀리초): 642.26 --- flashinfer input=10000 conc=10 prompts=30 --- 최대 동시 요청: 14 수락 길이: 5.27 평균 TTFT (밀리초): 368.90 P90 TTFT (밀리초): 449.70 P99 TTFT (밀리초): 497.91 --- flashinfer input=10000 conc=20 prompts=60 --- 최대 동시 요청: 27 수락 길이: 5.30 평균 TTFT (밀리초): 644.57 P90 TTFT (밀리초): 891.86 P99 TTFT (밀리초): 901.37 --- flashinfer input=20000 conc=1 prompts=10 --- 최대 동시 요청: 3 수락 길이: 5.30 평균 TTFT (밀리초): 274.03 P90 TTFT (밀리초): 297.82 P99 TTFT (밀리초): 299.33 --- flashinfer input=20000 conc=5 prompts=15 --- 최대 동시 요청: 9 수락 길이: 5.31 평균 TTFT (밀리초): 432.51 P90 TTFT (밀리초): 523.52 P99 TTFT (밀리초): 601.07 --- flashinfer input=20000 conc=10 prompts=30 --- 최대 동시 요청: 15 수락 길이: 5.33 평균 TTFT (밀리초): 468.08 P90 TTFT (밀리초): 723.76 P99 TTFT (밀리초): 741.19 --- flashinfer input=20000 conc=20 prompts=60 --- 최대 동시 요청: 26 수락 길이: 5.36 평균 TTFT (밀리초): 756.73 P90 TTFT (밀리초): 1132.48 P99 TTFT (밀리초): 1803.27
===================================== 인스턴스 (INSTANCE): marlin ===================================== -- 프리필 (Prefill) 웜업 (입력 형태별) -- warmup: input=5000 conc=1 prompts=2 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (deprecated) 되었으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예: python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters 내에 인식되지 않는 키가 있습니다: {'attention_factor'} 경고: 인증되지 않은 요청을 HF Hub로 보내고 있습니다. 더 높은 속도 제한(rate limits)과 빠른 다운로드를 활성화하려면 HF_TOKEN을 설정하십시오. warmup: input=10000 conc=1 prompts=2 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (deprecated) 되었으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예: python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters 내에 인식되지 않는 키가 있습니다: {'attention_factor'} 경고: 인증되지 않은 요청을 HF Hub로 보내고 있습니다. 더 높은 속도 제한(rate limits)과 빠른 다운로드를 활성화하려면 HF_TOKEN을 설정하십시오. warmup: input=20000 conc=1 prompts=2 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (deprecated) 되었으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예: python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters 내에 인식되지 않는 키가 있습니다: {'attention_factor'} 경고: 인증되지 않은 요청을 HF Hub로 보내고 있습니다. 더 높은 속도 제한(rate limits)과 빠른 다운로드를 활성화하려면 HF_TOKEN을 설정하십시오. -- 배치 디코드 (Batch decode) 웜업 (c=20) -- warmup: input=5000 conc=20 prompts=24 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (deprecated) 되었으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예:
python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters에서 인식할 수 없는 키가 있습니다: {'attention_factor'} warmup: input=20000 conc=20 prompts=24 /sgl-workspace/sglang/python/sglang/bench_serving.py:13: FutureWarning: sglang.bench_serving은 (deprecated) 되었으며 향후 릴리스에서 제거될 예정입니다. 대신 sglang.benchmark.serving을 사용하세요 (예: python -m sglang.benchmark.serving). warnings.warn( [transformers] 'rope_type'='default'에 대한 rope_parameters에서 인식할 수 없는 키가 있습니다: {'attention_factor'} -- 벤치마크 (Benchmark) -- --- marlin input=5000 conc=1 prompts=10 --- 최대 동시 요청 수 (Peak concurrent requests): 2 수락 길이 (Accept length): 5.52 평균 TTFT (Mean TTFT, ms): 260.38 P90 TTFT (ms): 271.65 P99 TTFT (ms): 274.51 --- marlin input=5000 conc=5 prompts=15 --- 최대 동시 요청 수 (Peak concurrent requests): 8 수락 길이 (Accept length): 5.50 평균 TTFT (Mean TTFT, ms): 330.12 P90 TTFT (ms): 481.13 P99 TTFT (ms): 483.15 --- marlin input=5000 conc=10 prompts=30 --- 최대 동시 요청 수 (Peak concurrent requests): 15 수락 길이 (Accept length): 5.47 평균 TTFT (Mean TTFT, ms): 306.77 P90 TTFT (ms): 408.24 P99 TTFT (ms): 410.59 --- marlin input=5000 conc=20 prompts=60 --- 최대 동시 요청 수 (Peak concurrent requests): 26 수락 길이 (Accept length): 5.43 평균 TTFT (Mean TTFT, ms): 597.49 P90 TTFT (ms): 512.82 P99 TTFT (ms): 4438.23 --- marlin input=10000 conc=1 prompts=10 --- 최대 동시 요청 수 (Peak concurrent requests): 2 수락 길이 (Accept length): 5.44 평균 TTFT (Mean TTFT, ms): 265.65 P90 TTFT (ms): 282.26 P99 TTFT (ms): 284.74 --- marlin input=10000 conc=5 prompts=15 --- 최대 동시 요청 수 (Peak concurrent requests): 8 수락 길이 (Accept length): 5.45 평균 TTFT (Mean TTFT, ms): 410.25 P90 TTFT (ms): 505.74 P99 TTFT (ms): 507.39 --- marlin input=10000 conc=10 prompts=30 --- 최대 동시 요청 수 (Peak concurrent requests): 14 수락 길이 (Accept length): 5.46 평균 TTFT (Mean TTFT, ms): 397.78 P90 TTFT (ms): 507.21 P99 TTFT (ms): 509.92 --- marlin input=10000 conc=20 prompts=60 --- 최대 동시 요청 수 (Peak concurrent requests): 27 수락 길이 (Accept length): 5.47 평균 TTFT (Mean TTFT, ms): 548.28 P90 TTFT (ms): 731.57 P99 TTFT (ms): 803.65 --- marlin input=20000 conc=1 prompts=10 --- 최대 동시 요청 수 (Peak concurrent requests): 3 수락 길이 (Accept length): 5.47 평균 TTFT (Mean TTFT, ms): 286.49 P90 TTFT (ms): 312.97 P99 TTFT (ms):
322.83 --- marlin input=20000 conc=5 prompts=15 --- Peak concurrent requests: 9 Accept length: 5.47 평균 TTFT (ms): 427.42 P90 TTFT (ms): 535.50 P99 TTFT (ms): 537.50 --- marlin input=20000 conc=10 prompts=30 --- Peak concurrent requests: 15 Accept length: 5.48 평균 TTFT (ms): 441.67 P90 TTFT (ms): 746.80 P99 TTFT (ms): 765.58 --- marlin input=20000 conc=20 prompts=60 --- Peak concurrent requests: 26 Accept length: 5.50 평균 TTFT (ms): 796.88 P90 TTFT (ms): 1594.48 P99 TTFT (ms): 1886.39 submitted by /u/Soft-Wedding4595 to r/LocalLLaMA [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/OpenAI Codex (search)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기