<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dgx Spark on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/ko/tags/dgx-spark/</link><description>Recent content in Dgx Spark on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Thu, 07 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/ko/tags/dgx-spark/index.xml" rel="self" type="application/rss+xml"/><item><title>DGX Spark에서 Qwen3.5-122B를 28.3에서 51 tok/s로 끌어올린 추론 최적화 레시피</title><link>https://ice-ice-bear.github.io/ko/posts/2026-05-07-dgx-spark-qwen35-inference-tuning/</link><pubDate>Thu, 07 May 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/ko/posts/2026-05-07-dgx-spark-qwen35-inference-tuning/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post DGX Spark에서 Qwen3.5-122B를 28.3에서 51 tok/s로 끌어올린 추론 최적화 레시피" /&gt;&lt;h2 id="개요"&gt;개요
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/albond/DGX_Spark_Qwen3.5-122B-A10B-AR-INT4" target="_blank" rel="noopener"
 &gt;albond/DGX_Spark_Qwen3.5-122B-A10B-AR-INT4&lt;/a&gt;는 &lt;a class="link" href="https://www.nvidia.com/en-us/products/workstations/dgx-spark/" target="_blank" rel="noopener"
 &gt;NVIDIA DGX Spark&lt;/a&gt; 단일 박스에서 &lt;a class="link" href="https://huggingface.co/Qwen/Qwen3.5-122B-A10B" target="_blank" rel="noopener"
 &gt;Qwen3.5-122B-A10B&lt;/a&gt;를 28.3에서 51 tok/s까지 80퍼센트 끌어올린 레시피다. INT4 양자화, FP8 dense layer hybrid, MTP-2 speculative decoding, INT8 LM head, TurboQuant KV cache까지 다섯 가지 기법을 차례로 쌓았고 256K context도 유지된다. Apache 2.0, GitHub 별 171개. &amp;ldquo;단일 워크스테이션에서 100B급 MoE 모델을 production 수준으로 돌릴 수 있는가&amp;rdquo; 라는 질문에 대한 강한 긍정 답이다.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR
 Base["Baseline &amp;lt;br/&amp;gt; 28.3 tok/s"] --&gt; S1["+ Hybrid INT4+FP8 &amp;lt;br/&amp;gt; 30.8 tok/s"]
 S1 --&gt; S2["+ MTP-2 Speculative &amp;lt;br/&amp;gt; 38.4 tok/s"]
 S2 --&gt; V2["v2: + INT8 LM Head &amp;lt;br/&amp;gt; 51 tok/s"]
 V2 --&gt; TQ["v2-tq: + TurboQuant KV &amp;lt;br/&amp;gt; 39 tok/s &amp;lt;br/&amp;gt; 1.4M KV"]&lt;/pre&gt;&lt;h2 id="결과-표"&gt;결과 표
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;구성&lt;/th&gt;
 &lt;th&gt;tok/s&lt;/th&gt;
 &lt;th&gt;향상&lt;/th&gt;
 &lt;th&gt;빌드&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Baseline (vLLM 0.19 + AutoRound INT4 + FlashInfer)&lt;/td&gt;
 &lt;td&gt;28.3&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;+ Hybrid INT4+FP8 dense layers&lt;/td&gt;
 &lt;td&gt;30.8&lt;/td&gt;
 &lt;td&gt;+8.8%&lt;/td&gt;
 &lt;td&gt;step 1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;+ MTP-2 Speculative Decoding&lt;/td&gt;
 &lt;td&gt;38.4&lt;/td&gt;
 &lt;td&gt;+35.7%&lt;/td&gt;
 &lt;td&gt;step 2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;v2&lt;/strong&gt; (+ INT8 LM Head v2)&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;51&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;+80%&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dockerfile.v2&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;v2-tq (+ TurboQuant KV Cache)&lt;/td&gt;
 &lt;td&gt;39&lt;/td&gt;
 &lt;td&gt;+38%&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Dockerfile.v2-tq&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;같은 최적화로 Qwen3.5-35B-A3B (작은 형제) 는 112 tok/s까지 올라간다.&lt;/p&gt;
&lt;h3 id="256k-context"&gt;256K Context
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;설정&lt;/th&gt;
 &lt;th&gt;KV Cache&lt;/th&gt;
 &lt;th&gt;256K 동시 사용자&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;v2 (standard)&lt;/td&gt;
 &lt;td&gt;355K tokens&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;v2-tq (TurboQuant)&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;1.4M tokens&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="모델-한-줄"&gt;모델 한 줄
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://huggingface.co/Qwen/Qwen3.5-122B-A10B" target="_blank" rel="noopener"
 &gt;Qwen3.5-122B-A10B&lt;/a&gt;는 122B 총 파라미터 중 10B만 활성화하는 hybrid MoE다. 256개 expert 중 8 routed + 1 shared, Gated DeltaNet과 Gated Attention이 12:1 비율로 교차하는 48 레이어 구조에 native 262K context (YaRN 확장 시 1M)까지 지원한다. Apache 2.0. 이 모델을 &lt;a class="link" href="https://github.com/intel/auto-round" target="_blank" rel="noopener"
 &gt;Intel AutoRound&lt;/a&gt;로 INT4 양자화한 &lt;a class="link" href="https://huggingface.co/Intel/Qwen3.5-122B-A10B-int4-AutoRound" target="_blank" rel="noopener"
 &gt;Intel/Qwen3.5-122B-A10B-int4-AutoRound&lt;/a&gt; (group size 128, shared_expert는 ignore) 가 출발점이다.&lt;/p&gt;
&lt;h2 id="핵심-기법"&gt;핵심 기법
&lt;/h2&gt;&lt;h3 id="1-hybrid-int4--fp8-dense-layers-9"&gt;1. Hybrid INT4 + FP8 Dense Layers (+9%)
&lt;/h3&gt;&lt;p&gt;AutoRound INT4 모델의 BF16 shared expert weights를 official Qwen 체크포인트의 FP8 weights로 교체한다. 즉 expert 레이어만 INT4, dense는 FP8. 정확도를 보존하면서 메모리와 연산량을 동시에 줄인다.&lt;/p&gt;
&lt;h3 id="2-mtp-2-speculative-decoding-36"&gt;2. MTP-2 Speculative Decoding (+36%)
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://arxiv.org/abs/2404.19737" target="_blank" rel="noopener"
 &gt;Multi-Token Prediction&lt;/a&gt; 방식으로 한 번에 2 토큰을 예측한다. accept rate가 약 80퍼센트로 매우 높아 디코드 throughput이 가장 크게 점프하는 단계다. 작은 draft 모델을 따로 돌리지 않고 메인 모델 자체가 multi-head 예측을 한다는 점이 주목할 만하다.&lt;/p&gt;
&lt;h3 id="3-int8-lm-head-v2-triton-커널"&gt;3. INT8 LM Head v2 (Triton 커널)
&lt;/h3&gt;&lt;p&gt;LM head, 즉 최종 token vocabulary projection 레이어를 INT8로 양자화한다. Triton 커스텀 커널로 구현되며 v2 빌드에서 가장 큰 점프 (38.4 → 51 tok/s) 를 만든다. LM head는 보통 양자화 대상에서 빠지지만 vocabulary가 큰 모델일수록 영향력이 크다는 게 다시 확인됐다.&lt;/p&gt;
&lt;h3 id="4-turboquant-kv-cache-선택"&gt;4. TurboQuant KV Cache (선택)
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/microsoft/turbo-quant" target="_blank" rel="noopener"
 &gt;TurboQuant&lt;/a&gt;로 KV cache를 4배 압축한다. 절대 throughput은 v2 대비 약간 떨어지지만 256K context 동시 사용자가 1명에서 5명으로 늘어난다. Long-context multi-tenant 시나리오에서 의미 있는 트레이드오프다.&lt;/p&gt;
&lt;h2 id="환경"&gt;환경
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;vLLM 0.19.1, CUDA 13.0, Docker 기반&lt;/li&gt;
&lt;li&gt;추론 엔진: &lt;a class="link" href="https://github.com/vllm-project/vllm" target="_blank" rel="noopener"
 &gt;vLLM 0.19&lt;/a&gt; + &lt;a class="link" href="https://github.com/flashinfer-ai/flashinfer" target="_blank" rel="noopener"
 &gt;FlashInfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;모델: &lt;code&gt;Intel/Qwen3.5-122B-A10B-int4-AutoRound&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./install.sh&lt;/code&gt; 한 번으로 Step 0~4 자동 (idempotent)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="인사이트"&gt;인사이트
&lt;/h2&gt;&lt;p&gt;100B급 모델을 단일 워크스테이션에서 51 tok/s로 돌린다는 건 production 응답 속도 (60 tok/s 근처) 에 거의 닿았다는 뜻이다. 별 171개 짜리 레시피 치고는 짜임새가 단단해서 벤치 표, 단계별 Docker, install.sh, vLLM/CUDA 버전 호환성까지 모두 갖췄고 그대로 따라 돌릴 수 있다. 흥미로운 건 다섯 기법이 직교한다는 점이다. Hybrid quant은 메모리/정확도, MTP는 디코딩 병렬성, INT8 LM head는 컴퓨트, TurboQuant은 KV 메모리를 각각 친다. 한 곳을 짠 게 아니라 병목을 차례로 옮기면서 합산한 결과가 80퍼센트다. 그리고 v2-tq에서 보이듯 throughput과 동시 사용자 수는 다른 축이라 워크로드에 따라 다른 빌드를 골라야 한다. 다음 분기쯤이면 이런 hybrid quant + speculative + custom kernel 스택이 vLLM/SGLang에 표준으로 들어올 가능성이 높고, &amp;ldquo;100B 모델을 한 박스에서&amp;rdquo; 가 점점 demo가 아니라 default로 바뀐다.&lt;/p&gt;
&lt;h2 id="참고"&gt;참고
&lt;/h2&gt;&lt;h3 id="repo-and-model-cards"&gt;Repo and model cards
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/albond/DGX_Spark_Qwen3.5-122B-A10B-AR-INT4" target="_blank" rel="noopener"
 &gt;albond/DGX_Spark_Qwen3.5-122B-A10B-AR-INT4&lt;/a&gt; — 별 171, Apache 2.0&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Qwen/Qwen3.5-122B-A10B" target="_blank" rel="noopener"
 &gt;Qwen/Qwen3.5-122B-A10B&lt;/a&gt; — 122B/10B hybrid MoE, 262K context&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://huggingface.co/Intel/Qwen3.5-122B-A10B-int4-AutoRound" target="_blank" rel="noopener"
 &gt;Intel/Qwen3.5-122B-A10B-int4-AutoRound&lt;/a&gt; — INT4 group128 quantized&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.nvidia.com/en-us/products/workstations/dgx-spark/" target="_blank" rel="noopener"
 &gt;NVIDIA DGX Spark&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="inference-frameworks"&gt;Inference frameworks
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/vllm-project/vllm" target="_blank" rel="noopener"
 &gt;vLLM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/flashinfer-ai/flashinfer" target="_blank" rel="noopener"
 &gt;FlashInfer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="optimization-techniques"&gt;Optimization techniques
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/intel/auto-round" target="_blank" rel="noopener"
 &gt;Intel AutoRound (arXiv:2309.05516)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://arxiv.org/abs/2404.19737" target="_blank" rel="noopener"
 &gt;Multi-Token Prediction (arXiv:2404.19737)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/microsoft/turbo-quant" target="_blank" rel="noopener"
 &gt;TurboQuant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>