{"article":{"slug":"day-0-support-for-muse-spark-open-on-vllm","title":"Day 0 support for Muse Spark Open on vLLM","subtitle":null,"summary":"The vLLM team explains its day-0 support for Meta's Muse Spark Open, an 816B-total, 42B-active MoE model with 1M context and multimodal inputs: usage, model architecture details, DSpark speculative decoding, NVIDIA, AMD and initial TPU serving, and reinforcement learning support in vLLM.","content_type":"announcement","language":"en","canonical_url":"https://vllm.ai/blog/2026-10-15-muse-spark-open","author":{"name":"vLLM Team","url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"vLLM","url":"https://vllm.ai/","listing_slug":null,"listing":null},"topics":[{"name":"AI","slug":"ai","url":"https://listedarticles.com/topics/ai"},{"name":"LLMs","slug":"llms","url":"https://listedarticles.com/topics/llms"},{"name":"Open Source","slug":"open-source","url":"https://listedarticles.com/topics/open-source"},{"name":"Infrastructure","slug":"infrastructure","url":"https://listedarticles.com/topics/infrastructure"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":1561,"reading_minutes":7,"published_at":"2026-10-15T00:00:00.000Z","added_at":"2026-10-18T11:13:02.558Z","updated_at":"2026-10-18T11:13:02.558Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/day-0-support-for-muse-spark-open-on-vllm","markdown_url":"https://listedarticles.com/articles/day-0-support-for-muse-spark-open-on-vllm.md","example":false,"citation":"vLLM Team, vLLM. \"Day 0 support for Muse Spark Open on vLLM.\" 15 Oct 2026. https://vllm.ai/blog/2026-10-15-muse-spark-open (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://vllm.ai/blog/2026-10-15-muse-spark-open"},"body_markdown":"We're excited to have worked with Meta Superintelligence Labs to bring Muse Spark Open to vLLM on day 0. Muse Spark Open is an open-weight sparse mixture-of-experts (MoE) model, built for long-horizon agentic coding workflows. It is the most capable US open-weights model to date and it is the model Muse Glimmer 30B was distilled from.\n\n## Highlights\n\n- Architecture: 816B total parameters, 42B active per token with a 1M context window.\n- Quantization: Meta released the model in both BF16 and NVFP4. MXFP4 weights were released by AMD.\n- Multimodal: Native image and video perception through the same Perception Encoder as Muse Glimmer, with additional audio support.\n- Parallelism: Tensor Parallelism and Pipeline Parallelism on both Nvidia and AMD. EP, TEP, DEP and PD disaggregation on Nvidia. Initial support on TPU is also available.\n- Speculative decoding: We have trained a DSpark draft model, supported on both CUDA and ROCm that accelerates the model performance, tested on the SPEED bench.\n\n## Usage\n\nPrebuilt images are available for both vendors:\n\n- Nvidia: vllm/vllm-openai:muse-spark-open\n- AMD: vllm/vllm-openai-rocm:muse-spark-open\n\nNote that the model will only be available at nightly PyPI wheel after the code ([PR #61879](https://github.com/vllm-project/vllm/pull/61879)) is reviewed and merged, which usually takes about a week.\n\n```\n# Rust frontend is recommended\nexport VLLM_USE_RUST_FRONTEND=1\n \nvllm serve meta-models/Muse-Spark-Open-816B-A42B-NVFP4 \\\n    --tensor-parallel-size 8 \\\n    --enable-expert-parallel \\\n    --max-model-len 1048576 \\\n    --reasoning-parser muse \\\n    --tool-call-parser muse \\\n    --enable-auto-tool-choice \\\n    --speculative-config '{\"method\":\"dspark\",\"model\": \"Inferact/Muse-Spark-Open-DSpark\",\"num_speculative_tokens\":7,\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\",\"enable_adaptive_verification\":true}'\n```\n\nTo use this model with plain text:\n\n```\n  curl http://localhost:8000/v1/chat/completions \\\n    -H 'Content-Type: application/json' \\\n    -d '{\n      \"model\": \"meta-models/Muse-Spark-Open-816B-A42B-NVFP4\",\n      \"messages\": [{\"role\": \"user\", \"content\": \"Refactor this module.\"}],\n      \"reasoning_effort\": \"xhigh\"\n    }'\n```\n\nFor multimodal perception:\n\n```\n curl http://localhost:8000/v1/chat/completions \\\n   -H 'Content-Type: application/json' \\\n   -d '{\n     \"model\": \"meta-models/Muse-Spark-Open-816B-A42B\",\n     \"messages\": [{\"role\": \"user\", \"content\": [\n       {\"type\": \"image_url\", \"image_url\": {\"url\": \"https://example.com/screenshot.png\"}},\n       {\"type\": \"video_url\", \"video_url\": {\"url\": \"https://example.com/demo.mp4\"}},\n       {\"type\": \"audio_url\", \"audio_url\": {\"url\": \"https://example.com/clip.wav\"}},\n       {\"type\": \"text\",      \"text\": \"What is happening here, and when?\"}\n     ]}]\n   }'\n```\n\n## Implementation details\n\n### Model architecture\n\n*Figure 1: One of the 62 identical decoder layers. Every block is normalized before and after, `x + post_norm(F(norm(x)))`. [Open it full-screen](https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-decoder-layer.html).*\n\nMuse Spark Open is a mixture-of-experts model with 816B total parameters including the text decoder, plus a 2B vision encoder and a small audio encoder alongside it. The decoder has 62 layers, and every one of them is a mixture-of-experts layer. Here is where the weights sit:\n\n| part | size |\n| --- | --- |\n| 256 experts per layer | 799 B |\n| attention | 13.5 B |\n| MoE latent projections | 4.2 B |\n| embedding and output layer | 3.3 B |\n| vision tower (separate) | 1.9 B |\n\nThe model architecture is similar to Muse Glimmer. For folks who haven't used Muse Glimmer. There are a few things in this model architecture worth a closer look.\n\n*Figure 2: Inside the attention block. Queries and keys are normalized before they meet, and each head's output is normalized before a learned gate scales it. [Open it full-screen](https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-attention.html).*\n\n**Sandwich normalization.** Most decoders put one normalization layer before each block, giving x + F(norm(x)) Muse Spark Open, similar to Muse Glimmer, place one before and one after, like the two slices of a sandwich with the block sitting in between, giving x + post\\_norm(F(norm(x)))\n\n*Figure 3: The mixture-of-experts block. A shared squeeze halves each token from 8192 to 4096 before the experts and an expand restores 8192 after. [Open it full-screen](https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-moe.html).*\n\n**Latent MoE**. Every mixture-of-experts (MoE) layer carries two extra matrices, shared by all 256 experts in that layer. The code calls them the pooler and unpooler, though neither is pooling in the usual sense, instead both are learned projections to squeeze and expand the dimensions. The pooler is an 8192 × 4096 matrix that halves each token's width before it reaches the experts; while the unpooler restores the full width afterwards. The experts therefore work entirely at 4096 rather than 8192, which effectively halved the number of parameters required in the two expert projection layers.\n\n*Figure 4: Which layers attend to what. 46 of the 62 layers keep a 2048-token window of KV and 16 keep every token, so the KV cache at 1M tokens is about a quarter of all-full attention. [Open it full-screen](https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-attention-pattern.html).*\n\n**Hybrid attention.** Layers alternate between full attention and Sliding Window Attention (SWA) on a repeating cycle of 4 with three attending to a 2048-token window and the fourth looking at the whole context. The cycle is anchored to the end of the stack so the final layer is always a full attention layer. Across 62 layers, that gives 46 narrow layers and 16 wide ones where the narrow layers only hold recent KV. At 1M tokens, this brings the cache to just over ¼ of what all-full attention would need. This is what makes 1M context length affordable.\n\n**Vision Encoder.** Muse Spark Open uses the same Perception Encoder as Muse Glimmer, a 2B parameter tower that reads images at their native resolution, rather than resizing them to a square. Videos run through the same encoder: frames are sampled at load time as a series of sampled video frames with timestamp tokenized in the prompt.\n\n**Audio Encoder.** Audio is read as raw waveform at 24 kHz and Every 1920 samples, i.e. 80ms become one token through a series of transformations. The whole audio encoder is just 118M parameters. Note that the video's audio track is not processed. To give the model both the pictures and the sound of a clip, send the video and the extracted audio as two separate content parts in the same request.\n\n### DSpark\n\nTo accelerate Muse Spark Open inference on vLLM, we trained a speculator using DSpark, a speculative decoding algorithm that uses block diffusion to propose up to seven draft tokens in a single pass. Confidence-based scheduling helps sustain significant speedups even at large batch sizes, where speculative decoding traditionally offers diminishing returns, as shown in the results below.\n\n*Figure 5: Aggregate output throughput against per-user decode speed on 4 × NVIDIA GB300 (TP4), one point per concurrency level from c1 to c256. Hover a point for every series' values, or [open it full-screen](https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-dspark-throughput.html).*\n\nOur speculator also uses the Muse Spark Open sliding-window attention to keep drafting lightweight, even with a 1M-token context. Together, these choices make it well suited to production workloads spanning a wide range of batch sizes and context lengths.\n\nTo enable it, add this when the server starts:\n\n```\n--speculative-config '{\"method\":\"dspark\",\"model\": \"Inferact/Muse-Spark-Open-DSpark\",\"num_speculative_tokens\":7,\"draft_sample_method\":\"probabilistic\",\"rejection_sample_method\":\"block\",\"enable_adaptive_verification\":true}'\n```\n\n### Nvidia\n\nNvidia team improved Muse Spark Open inference across FlashInfer and vLLM through fused normalization, gating, and residual kernels; fused MoE finalization with tensor-parallel communication and RMSNorm; a new low-latency BF16 GEMM implementation and reduced compilation overhead; TEP pooler/unpooler sharding with fused MNNVL collectives; TF32 router GEMM fed by the norm's FP32 output; and improvements to data movement, hardware support, and runtime reliability.\n\n### AMD\n\nThanks to the AMD team, we have also supported the model on AMD Instinct™ MI355X GPUs, in both FP8 and MXFP4 quantized formats, providing improved inference performance and deployment efficiency. Note that ROCm currently supports both Tensor-Parallel and Pipeline-Parallelism.\n\n### TPU\n\nWe have added support for Muse Spark Open on TPU on top of TorchTPU. Please contact us or Google for code access. We have also built [megakernels](https://github.com/Inferact/tpu-megakernels) for Muse Spark Open. With DSpark speculative decoding (acceptance length = 6), they reach over 650 tokens/sec on 4 TPU v7 chips and over 960 tokens/sec on 8 chips. Without speculative decoding, they still deliver over 270 and 350 tokens/sec, respectively.\n\n## Reinforcement learning in vLLM\n\nvLLM also supports LoRA RL on Muse Spark Open from day 0, serving as the rollout engine with Verl FSDP2 as the trainer. vLLM serves the original NVFP4 checkpoint with the LoRA adapter applied on top. The trainer runs on a BF16 dequantization of the same weights and updates only the adapter (rank 32, alpha 64), which covers attention, the MoE latent projections and all routed experts. It also replays the rollout’s MoE routing (R3), and only the adapter is synced back to vLLM after each step.\n\nWe trained with GRPO on DAPO-Math-17K for 150 steps on 16 GB300 GPUs, sampling 8 responses for each of 32 prompts per step with up to 4K tokens per response. The accuracy on AIME-2024 (mean@8) went from 0.56 before training to 0.85 by the end of the run. Throughout the run, the k3 KL between the trainer’s and vLLM’s log-probabilities held near 2×10⁻⁴. More details are available in <https://github.com/verl-project/verl/pull/8257>. In the vLLM ecosystem, Titan RL also uses vLLM as its rollout engine to provide day-0 RL support.\n\n![Muse Spark Open LoRA RL results](https://vllm.ai/blog-assets/figures/2026-10-15-muse-spark-open/lora-rl-results.png)\n\nMuse Spark Open LoRA RL results\n\n## Acknowledgement\n\nWe extend our sincere gratitude to the teams at Meta Superintelligence Labs and the vLLM community for their close collaboration in delivering Day 0 support for Muse Spark Open on vLLM. We also thank Inferact for training the DSpark speculator and TPU integration, alongside NVIDIA and AMD for their vital hardware optimizations.\n\nContributors:\n\n- Inferact: Jie Li, Zifeng Mo, Zixi Qi, Jeff Ma, Ziqi Zhao, Dakai An, Ao Shen\n- Meta: Beto de Paola, Sidhartha Reddy Potu\n- Nvidia: Cyrus Chang, Duncan Moss, Marek Pikulski, Seong Hee Lee\n- AMD: Andy Luo, Hongxia Yang, Haichen Zhang\n\nShare:\n\n[View Markdown Source](https://github.com/vllm-project/vllm-project.github.io/blob/main/_posts/2026-10-15-muse-spark-open.md)\n","body_html":"<p>We&#39;re excited to have worked with Meta Superintelligence Labs to bring Muse Spark Open to vLLM on day 0. Muse Spark Open is an open-weight sparse mixture-of-experts (MoE) model, built for long-horizon agentic coding workflows. It is the most capable US open-weights model to date and it is the model Muse Glimmer 30B was distilled from.</p>\n<h2 id=\"highlights\">Highlights</h2>\n<ul><li>Architecture: 816B total parameters, 42B active per token with a 1M context window.</li><li>Quantization: Meta released the model in both BF16 and NVFP4. MXFP4 weights were released by AMD.</li><li>Multimodal: Native image and video perception through the same Perception Encoder as Muse Glimmer, with additional audio support.</li><li>Parallelism: Tensor Parallelism and Pipeline Parallelism on both Nvidia and AMD. EP, TEP, DEP and PD disaggregation on Nvidia. Initial support on TPU is also available.</li><li>Speculative decoding: We have trained a DSpark draft model, supported on both CUDA and ROCm that accelerates the model performance, tested on the SPEED bench.</li></ul>\n<h2 id=\"usage\">Usage</h2>\n<p>Prebuilt images are available for both vendors:</p>\n<ul><li>Nvidia: vllm/vllm-openai:muse-spark-open</li><li>AMD: vllm/vllm-openai-rocm:muse-spark-open</li></ul>\n<p>Note that the model will only be available at nightly PyPI wheel after the code (<a href=\"https://github.com/vllm-project/vllm/pull/61879\" rel=\"nofollow ugc noopener\">PR #61879</a>) is reviewed and merged, which usually takes about a week.</p>\n<pre><code># Rust frontend is recommended\nexport VLLM_USE_RUST_FRONTEND=1\n \nvllm serve meta-models/Muse-Spark-Open-816B-A42B-NVFP4 \\\n    --tensor-parallel-size 8 \\\n    --enable-expert-parallel \\\n    --max-model-len 1048576 \\\n    --reasoning-parser muse \\\n    --tool-call-parser muse \\\n    --enable-auto-tool-choice \\\n    --speculative-config &#39;{&quot;method&quot;:&quot;dspark&quot;,&quot;model&quot;: &quot;Inferact/Muse-Spark-Open-DSpark&quot;,&quot;num_speculative_tokens&quot;:7,&quot;draft_sample_method&quot;:&quot;probabilistic&quot;,&quot;rejection_sample_method&quot;:&quot;block&quot;,&quot;enable_adaptive_verification&quot;:true}&#39;</code></pre>\n<p>To use this model with plain text:</p>\n<pre><code>  curl http://localhost:8000/v1/chat/completions \\\n    -H &#39;Content-Type: application/json&#39; \\\n    -d &#39;{\n      &quot;model&quot;: &quot;meta-models/Muse-Spark-Open-816B-A42B-NVFP4&quot;,\n      &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Refactor this module.&quot;}],\n      &quot;reasoning_effort&quot;: &quot;xhigh&quot;\n    }&#39;</code></pre>\n<p>For multimodal perception:</p>\n<pre><code> curl http://localhost:8000/v1/chat/completions \\\n   -H &#39;Content-Type: application/json&#39; \\\n   -d &#39;{\n     &quot;model&quot;: &quot;meta-models/Muse-Spark-Open-816B-A42B&quot;,\n     &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: [\n       {&quot;type&quot;: &quot;image_url&quot;, &quot;image_url&quot;: {&quot;url&quot;: &quot;https://example.com/screenshot.png&quot;}},\n       {&quot;type&quot;: &quot;video_url&quot;, &quot;video_url&quot;: {&quot;url&quot;: &quot;https://example.com/demo.mp4&quot;}},\n       {&quot;type&quot;: &quot;audio_url&quot;, &quot;audio_url&quot;: {&quot;url&quot;: &quot;https://example.com/clip.wav&quot;}},\n       {&quot;type&quot;: &quot;text&quot;,      &quot;text&quot;: &quot;What is happening here, and when?&quot;}\n     ]}]\n   }&#39;</code></pre>\n<h2 id=\"implementation-details\">Implementation details</h2>\n<h3 id=\"model-architecture\">Model architecture</h3>\n<p><em>Figure 1: One of the 62 identical decoder layers. Every block is normalized before and after, <code>x + post_norm(F(norm(x)))</code>. <a href=\"https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-decoder-layer.html\" rel=\"nofollow ugc noopener\">Open it full-screen</a>.</em></p>\n<p>Muse Spark Open is a mixture-of-experts model with 816B total parameters including the text decoder, plus a 2B vision encoder and a small audio encoder alongside it. The decoder has 62 layers, and every one of them is a mixture-of-experts layer. Here is where the weights sit:</p>\n<div class=\"table-wrap\"><table><thead><tr><th>part</th><th>size</th></tr></thead><tbody><tr><td>256 experts per layer</td><td>799 B</td></tr><tr><td>attention</td><td>13.5 B</td></tr><tr><td>MoE latent projections</td><td>4.2 B</td></tr><tr><td>embedding and output layer</td><td>3.3 B</td></tr><tr><td>vision tower (separate)</td><td>1.9 B</td></tr></tbody></table></div>\n<p>The model architecture is similar to Muse Glimmer. For folks who haven&#39;t used Muse Glimmer. There are a few things in this model architecture worth a closer look.</p>\n<p><em>Figure 2: Inside the attention block. Queries and keys are normalized before they meet, and each head&#39;s output is normalized before a learned gate scales it. <a href=\"https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-attention.html\" rel=\"nofollow ugc noopener\">Open it full-screen</a>.</em></p>\n<p><strong>Sandwich normalization.</strong> Most decoders put one normalization layer before each block, giving x + F(norm(x)) Muse Spark Open, similar to Muse Glimmer, place one before and one after, like the two slices of a sandwich with the block sitting in between, giving x + post_norm(F(norm(x)))</p>\n<p><em>Figure 3: The mixture-of-experts block. A shared squeeze halves each token from 8192 to 4096 before the experts and an expand restores 8192 after. <a href=\"https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-moe.html\" rel=\"nofollow ugc noopener\">Open it full-screen</a>.</em></p>\n<p><strong>Latent MoE</strong>. Every mixture-of-experts (MoE) layer carries two extra matrices, shared by all 256 experts in that layer. The code calls them the pooler and unpooler, though neither is pooling in the usual sense, instead both are learned projections to squeeze and expand the dimensions. The pooler is an 8192 × 4096 matrix that halves each token&#39;s width before it reaches the experts; while the unpooler restores the full width afterwards. The experts therefore work entirely at 4096 rather than 8192, which effectively halved the number of parameters required in the two expert projection layers.</p>\n<p><em>Figure 4: Which layers attend to what. 46 of the 62 layers keep a 2048-token window of KV and 16 keep every token, so the KV cache at 1M tokens is about a quarter of all-full attention. <a href=\"https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-attention-pattern.html\" rel=\"nofollow ugc noopener\">Open it full-screen</a>.</em></p>\n<p><strong>Hybrid attention.</strong> Layers alternate between full attention and Sliding Window Attention (SWA) on a repeating cycle of 4 with three attending to a 2048-token window and the fourth looking at the whole context. The cycle is anchored to the end of the stack so the final layer is always a full attention layer. Across 62 layers, that gives 46 narrow layers and 16 wide ones where the narrow layers only hold recent KV. At 1M tokens, this brings the cache to just over ¼ of what all-full attention would need. This is what makes 1M context length affordable.</p>\n<p><strong>Vision Encoder.</strong> Muse Spark Open uses the same Perception Encoder as Muse Glimmer, a 2B parameter tower that reads images at their native resolution, rather than resizing them to a square. Videos run through the same encoder: frames are sampled at load time as a series of sampled video frames with timestamp tokenized in the prompt.</p>\n<p><strong>Audio Encoder.</strong> Audio is read as raw waveform at 24 kHz and Every 1920 samples, i.e. 80ms become one token through a series of transformations. The whole audio encoder is just 118M parameters. Note that the video&#39;s audio track is not processed. To give the model both the pictures and the sound of a clip, send the video and the extracted audio as two separate content parts in the same request.</p>\n<h3 id=\"dspark\">DSpark</h3>\n<p>To accelerate Muse Spark Open inference on vLLM, we trained a speculator using DSpark, a speculative decoding algorithm that uses block diffusion to propose up to seven draft tokens in a single pass. Confidence-based scheduling helps sustain significant speedups even at large batch sizes, where speculative decoding traditionally offers diminishing returns, as shown in the results below.</p>\n<p><em>Figure 5: Aggregate output throughput against per-user decode speed on 4 × NVIDIA GB300 (TP4), one point per concurrency level from c1 to c256. Hover a point for every series&#39; values, or <a href=\"https://vllm.ai/blog-assets/interactive_pages/muse-spark-open-dspark-throughput.html\" rel=\"nofollow ugc noopener\">open it full-screen</a>.</em></p>\n<p>Our speculator also uses the Muse Spark Open sliding-window attention to keep drafting lightweight, even with a 1M-token context. Together, these choices make it well suited to production workloads spanning a wide range of batch sizes and context lengths.</p>\n<p>To enable it, add this when the server starts:</p>\n<pre><code>--speculative-config &#39;{&quot;method&quot;:&quot;dspark&quot;,&quot;model&quot;: &quot;Inferact/Muse-Spark-Open-DSpark&quot;,&quot;num_speculative_tokens&quot;:7,&quot;draft_sample_method&quot;:&quot;probabilistic&quot;,&quot;rejection_sample_method&quot;:&quot;block&quot;,&quot;enable_adaptive_verification&quot;:true}&#39;</code></pre>\n<h3 id=\"nvidia\">Nvidia</h3>\n<p>Nvidia team improved Muse Spark Open inference across FlashInfer and vLLM through fused normalization, gating, and residual kernels; fused MoE finalization with tensor-parallel communication and RMSNorm; a new low-latency BF16 GEMM implementation and reduced compilation overhead; TEP pooler/unpooler sharding with fused MNNVL collectives; TF32 router GEMM fed by the norm&#39;s FP32 output; and improvements to data movement, hardware support, and runtime reliability.</p>\n<h3 id=\"amd\">AMD</h3>\n<p>Thanks to the AMD team, we have also supported the model on AMD Instinct™ MI355X GPUs, in both FP8 and MXFP4 quantized formats, providing improved inference performance and deployment efficiency. Note that ROCm currently supports both Tensor-Parallel and Pipeline-Parallelism.</p>\n<h3 id=\"tpu\">TPU</h3>\n<p>We have added support for Muse Spark Open on TPU on top of TorchTPU. Please contact us or Google for code access. We have also built <a href=\"https://github.com/Inferact/tpu-megakernels\" rel=\"nofollow ugc noopener\">megakernels</a> for Muse Spark Open. With DSpark speculative decoding (acceptance length = 6), they reach over 650 tokens/sec on 4 TPU v7 chips and over 960 tokens/sec on 8 chips. Without speculative decoding, they still deliver over 270 and 350 tokens/sec, respectively.</p>\n<h2 id=\"reinforcement-learning-in-vllm\">Reinforcement learning in vLLM</h2>\n<p>vLLM also supports LoRA RL on Muse Spark Open from day 0, serving as the rollout engine with Verl FSDP2 as the trainer. vLLM serves the original NVFP4 checkpoint with the LoRA adapter applied on top. The trainer runs on a BF16 dequantization of the same weights and updates only the adapter (rank 32, alpha 64), which covers attention, the MoE latent projections and all routed experts. It also replays the rollout’s MoE routing (R3), and only the adapter is synced back to vLLM after each step.</p>\n<p>We trained with GRPO on DAPO-Math-17K for 150 steps on 16 GB300 GPUs, sampling 8 responses for each of 32 prompts per step with up to 4K tokens per response. The accuracy on AIME-2024 (mean@8) went from 0.56 before training to 0.85 by the end of the run. Throughout the run, the k3 KL between the trainer’s and vLLM’s log-probabilities held near 2×10⁻⁴. More details are available in <a href=\"https://github.com/verl-project/verl/pull/8257\" rel=\"nofollow ugc noopener\">https://github.com/verl-project/verl/pull/8257</a>. In the vLLM ecosystem, Titan RL also uses vLLM as its rollout engine to provide day-0 RL support.</p>\n<figure><img src=\"https://vllm.ai/blog-assets/figures/2026-10-15-muse-spark-open/lora-rl-results.png\" alt=\"Muse Spark Open LoRA RL results\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Muse Spark Open LoRA RL results</p>\n<h2 id=\"acknowledgement\">Acknowledgement</h2>\n<p>We extend our sincere gratitude to the teams at Meta Superintelligence Labs and the vLLM community for their close collaboration in delivering Day 0 support for Muse Spark Open on vLLM. We also thank Inferact for training the DSpark speculator and TPU integration, alongside NVIDIA and AMD for their vital hardware optimizations.</p>\n<p>Contributors:</p>\n<ul><li>Inferact: Jie Li, Zifeng Mo, Zixi Qi, Jeff Ma, Ziqi Zhao, Dakai An, Ao Shen</li><li>Meta: Beto de Paola, Sidhartha Reddy Potu</li><li>Nvidia: Cyrus Chang, Duncan Moss, Marek Pikulski, Seong Hee Lee</li><li>AMD: Andy Luo, Hongxia Yang, Haichen Zhang</li></ul>\n<p>Share:</p>\n<p><a href=\"https://github.com/vllm-project/vllm-project.github.io/blob/main/_posts/2026-10-15-muse-spark-open.md\" rel=\"nofollow ugc noopener\">View Markdown Source</a></p>","headings":[{"level":2,"text":"Highlights","id":"highlights"},{"level":2,"text":"Usage","id":"usage"},{"level":2,"text":"Implementation details","id":"implementation-details"},{"level":3,"text":"Model architecture","id":"model-architecture"},{"level":3,"text":"DSpark","id":"dspark"},{"level":3,"text":"Nvidia","id":"nvidia"},{"level":3,"text":"AMD","id":"amd"},{"level":3,"text":"TPU","id":"tpu"},{"level":2,"text":"Reinforcement learning in vLLM","id":"reinforcement-learning-in-vllm"},{"level":2,"text":"Acknowledgement","id":"acknowledgement"}]}}