vLLM on the DGX Spark: Architecture, Configuration, and Local Evaluation

vLLM on the DGX Spark: Architecture, Configuration, and Local Evaluation

vLLM enables fast, efficient local inference on the NVIDIA DGX Spark, bridging the gap between laptop-scale development and data center GPU serving. By pairing an OpenAI-compatible API with advanced memory, batching, and telemetry controls, vLLM allows developers to run large NVFP4 models locally on the DGX Spark's unique hardware architecture.

DGX Spark Architecture and Memory Model

The NVIDIA DGX Spark is built around the GB10 Grace Blackwell SoC, which utilizes a unified CPU and GPU memory pool. This architecture significantly impacts how inference workloads are configured and executed.

Unified Memory and Model Capacity

The shared CPU/GPU memory pool allows developers to load larger NVFP4 models than would be possible with a fixed dedicated GPU-memory pool. This makes it practical to run models with up to 200 billion parameters on a single Spark, depending on the model architecture and runtime configuration. vLLM manages this unified pool using flags such as --gpu-memory-utilization, --max-model-len, and --max-num-seqs, alongside a paged KV cache to balance model size, context length, and concurrency.

Hardware-Specific Validation

Deployments on DGX Spark must use vLLM builds, container image tags, and runtime settings validated for the sm_121 target. Configurations adapted from larger GPU systems should be treated as engineering checklists for kernel support rather than performance benchmarks.

NVFP4 MoE Optimization

DGX Spark is specifically well-suited for NVFP4 Mixture-of-Experts (MoE) serving. NVFP4 reduces memory pressure and improves prefill behavior. MoE models with approximately 10-15 billion active parameters are a strong fit because the smaller active parameter set optimizes decode performance on the system's memory bandwidth.

vLLM Capabilities for Local Serving

vLLM provides several key features that optimize the DGX Spark's local, small-batch inference profile.

Paged KV Cache and Continuous Batching

To avoid the inefficiencies of static batching in chat workloads, vLLM uses continuous batching to admit and evict requests at every decode step. When paired with a paged KV cache, the DGX Spark can support multiple in-flight requests without excessive memory fragmentation. In tests with a 120B NVFP4 MoE model, KV-cache utilization typically remained below 5% for single users and below 30% for small-batch demo traffic.

OpenAI-Compatible Streaming

The vLLM endpoint on Spark uses an OpenAI-compatible API (e.g., http://localhost:8000/v1), allowing existing client code to be reused. The use of stream=true is critical for local responsiveness, rendering tokens as they arrive to minimize perceived latency in chat, coding, and agentic workflows.

Observability via Prometheus

vLLM's Prometheus endpoint (/metrics) allows developers to monitor the health of the local appliance. Key signals for DGX Spark include:

  • KV-cache utilization (vllm:kv_cache_usage_perc)
  • Prompt and generation token counters
  • TTFT (Time to First Token) and inter-token-latency histograms

Runtime Configuration and Deployment

Successful deployment on DGX Spark requires matching the runtime flags to the system's unified-memory profile and the specific model recipe.

Model Selection Guidance

Model choice is the primary performance lever. 100-130B MoE NVFP4 models with 10-15B active parameters are the most efficient fit for the Spark's memory capacity and decode rate.

Critical vllm serve Flags

  • --gpu-memory-utilization: Must be tuned to leave headroom in the unified memory pool for the OS, container runtime, and KV cache growth.
  • --max-model-len 131072: Sets the maximum prompt and completion length. vLLM schedules based on active context rather than reserving the full length for every request.
  • --max-num-seqs 4: Keeps concurrent decode streams low to prevent per-token bandwidth taxes from spiking TTFT.
  • Automatic Prefix Caching: Enabled by default in vLLM V1, this reuses KV blocks across requests sharing an opening prompt, which is highly beneficial for long system prompts.

JIT Pre-warming and Loading

Cold-start latency is a significant factor; the first request after boot can trigger Inductor and FlashInfer JIT codegen, taking roughly 25 seconds for Nemotron-3-Super. Developers should send a small "ping" request at startup to warm the kernels. Additionally, while initial weight loading can take 10-15 minutes, paths like fastsafetensors or InstantTensor can be evaluated to reduce this time.

Local Evaluation Results: Nemotron-3-Super

Evaluation of the Nemotron-3-Super-120B-A12B-NVFP4 model on a single DGX Spark showed consistent decode throughput in the 22.7–23.7 tok/s range across various scenarios.

Scenario Prompt tok Gen tok TTFT Total latency Prefill tok/s Decode tok/s
Typical judge call 58 2 0.42 s ~0.53 s 140 ~23
Medium prompt, short gen 1,834 32 1.12 s 1.12 s 1,636 23.7
Long prompt, short gen 7,234 32 3.85 s ~5.26 s 1,877 22.7
Medium prompt, long gen 1,834 108 1.12 s ~5.74 s 1,639 23.4
Long prompt, long gen 7,234 124 3.84 s ~9.26 s 1,884 22.9

Key Performance Insights

  • Prefill Scaling: Prefill throughput increases as prompts get larger, climbing from 140 to nearly 1,900 tokens per second, as the overhead is amortized across more tokens.
  • Decode Stability: Decode throughput remains stable regardless of prompt length, dictated by active parameter count and the FP4 kernel path.
  • TTFT: Time to First Token roughly triples when the prompt size increases fourfold.

Operational Summary

To optimize vLLM on DGX Spark, developers should prioritize 100-130B MoE NVFP4 models, use official vLLM images validated for sm_121, and tune --gpu-memory-utilization for the unified memory pool. Pre-warming the JIT and utilizing the /metrics endpoint ensures a predictable, interactive local inference experience.

Sources