How unified memory works on GB10
DGX Spark uses NVIDIA’s GB10 chip, which combines a Grace ARM CPU and a Blackwell GPU on one package. They share 128GB of LPDDR5X memory over a 273 GB/s interconnect. There is no separate VRAM. When vLLM allocates “GPU memory,” it is carving a region out of the same 128GB pool that DGX OS, the CUDA runtime, and your applications use. This means:gpu_memory_utilizationcontrols a share of the total pool, not a dedicated GPU memory budget.- System processes compete for the same bytes. DGX OS, background services, and CUDA context overhead all reduce what the model can use.
- There is no OOM killer safety net. When the pool is exhausted, DGX Spark hangs rather than terminating the offending process.
KV cache overhead on 128GB
The KV cache stores the key-value tensors from every token in every active sequence. Its size grows with 3 factors: context length, number of concurrent sequences, and the model’s architecture (number of layers and KV heads).The formula
For a single sequence at a given context length:Example: 70B dense model at different context lengths
Assuming a typical 70B model with 80 layers, 8 KV heads, head dimension 128:Example: 35B MoE model
MoE models have the same KV cache math as dense models for their total layer count. A 35B MoE model with ~64 layers at the same KV head configuration:
At 35B MoE with NVFP4 weights (~18 GB), you can fit 128K context with FP8 KV cache and still have ~65 GB of headroom.
Context length vs batch size trade-off
Every token of context in every active sequence consumes KV cache memory. The total KV cache budget is:
For a 70B dense model at NVFP4 (~35 GB weights, ~75 GB remaining for KV cache):
Real-world benchmarks vs NVIDIA claims
NVIDIA’s published figure of 82,739 tok/s for DGX Spark refers to aggregate fine-tuning throughput, not single-user inference. The real numbers for interactive serving are:The 82,739 tok/s figure measures aggregate throughput across many parallel fine-tuning streams. Single-user interactive inference is a different workload — expect 15-120 tok/s depending on model size and engine, which is still fast enough for real-time chat and coding agent use.
Memory guard: prevent system hangs
The most important tuning parameter on DGX Spark is--gpu-memory-utilization. Set it too high and the system hangs without a recoverable error. Set it conservatively and you lose some KV cache headroom.
Recommended starting values
Monitor memory in real time
Open a second terminal and watch memory usage while serving:memory.free drops below 2-3 GB, your system is at risk of hanging. Reduce max_model_len, max_num_seqs, or gpu_memory_utilization.
Tuning parameters reference
These are the vLLM flags that matter most on DGX Spark, in order of impact:Decision table: common configurations
Tuning recipes
Maximize throughput for a single user
Maximize concurrent users for 70B
Safest configuration for large models
Next steps
vLLM on DGX Spark
Installation and launch commands for every model size.
Model compatibility
Which models fit in 128GB and their quantization options.
One vs two Sparks
When memory tuning isn’t enough and you need a second Spark.
KV cache concepts
Deeper explanation of KV cache mechanics across model architectures.