“Can we just run the model locally on a DGX Spark instead of paying for datacentre GPUs?” It is a fair question, and the honest answer is: sometimes yes, sometimes no — and the deciding factor is almost never the spec sheet. DGX Spark is often pitched as a way to run large models on your desk, and the naive reaction is to treat it as a drop-in replacement for datacentre GPU serving. That framing skips the only question that actually decides placement: what does the workload need — memory footprint to hold the model, sustained throughput under production batching, or latency inside an SLA? DGX Spark’s unified memory architecture makes it genuinely good at a specific set of jobs: prototyping, fine-tuning, and single-user or edge-local inference where portability and data locality matter more than aggregate throughput. Where it stops being the right answer is concurrency. Once you serve many concurrent requests against a latency SLA, the calculus shifts back to profiled datacentre serving, and no amount of local unified memory closes that gap. What does DGX Spark actually do for inference? The thing that distinguishes a DGX Spark-class system from a discrete GPU box is unified memory. The CPU and GPU share one physical memory pool, so a model that fits in that pool is addressable by the accelerator without the explicit host-to-device copies that dominate a PCIe-attached setup. In practice this means you can hold a fairly large model resident and run inference against it without the staging overhead you would fight on a workstation with a separate GPU and its own VRAM budget. That property is what makes local inference attractive for the right workload. If your model fits in unified memory and you are serving one request at a time — an engineer iterating on a fine-tune, an edge node scoring a local video feed, a demo running without a network dependency — the device does the job well. Data never leaves the box, latency has no round trip, and you avoid provisioning a datacentre GPU for a workload that never needed one. The trap is assuming that “the model fits and single-request latency is fine” generalises to production serving. It does not. Production serving is a throughput-and-tail-latency problem, and unified memory is a capacity feature, not a throughput feature. The same distinction shows up when reading device specs directly — what NVIDIA DGX Spark memory bandwidth means for inference bottlenecks is a separate question from how much the memory can hold, and the two get conflated constantly. Which workloads is DGX Spark actually suited to? Four workload classes map cleanly onto a local DGX Spark, and each for a different reason: Prototyping. You are validating that a model, a quantisation scheme, or a serving stack behaves before you commit to infrastructure. Iteration speed and having the whole thing on one machine matter more than tokens-per-second. Fine-tuning. Parameter-efficient fine-tuning (LoRA and its variants) of a model that fits in unified memory runs comfortably on a single node. You are not training from scratch; you are adapting, and the memory pool holds the working set. Edge-local inference. A node deployed where the data lives — a clinic, a retail floor, a vehicle, a broadcast truck — where data locality and latency favour on-device serving over a round trip to a datacentre. This is where local inference is a natural fit for edge deployment scenarios in computer vision pipelines, because the constraint is the network round trip, not concurrent throughput. Single-user or low-concurrency serving. An internal tool, a copilot for a small team, a batch scoring job that runs off-peak. Concurrency is low, so the throughput ceiling never binds. What unifies these is that none of them are dominated by concurrent request pressure under a strict SLA. That is the boundary. GenAI teams commonly use a DGX Spark-class box to prototype LLM serving locally precisely because it lets them measure the real thing before deciding whether the production latency gap justifies datacentre GPUs. When does unified memory make sense versus discrete datacentre serving? The decision is not “local versus cloud” in the abstract. It is a match between four workload properties and what the device can hold under load. Here is the decision rubric we apply. DGX Spark placement decision table Workload property Favours local DGX Spark Favours datacentre GPU serving Model memory footprint Fits in unified memory (with KV-cache headroom) Exceeds a single node; needs sharding across GPUs Concurrency Single-user or low, predictable Many concurrent requests, bursty Latency requirement Interactive but no hard SLA Strict tail-latency SLA (p95/p99) Data locality Data must stay on-prem / at the edge Data already central; no locality constraint Sustained throughput target Modest tokens/sec is enough High aggregate tokens/sec across users Cost driver Avoiding datacentre GPU provisioning Amortising a shared GPU across many users Read the table as a vote, not a checklist — most workloads land clearly on one side once you fill in all six rows. The rows that flip a decision most often are concurrency and tail latency, which is why they deserve their own section. A note on memory sizing, because it is the row people get wrong: the model weights are not the whole footprint. For transformer inference, the KV-cache grows with sequence length and batch size, and it competes for the same unified memory pool as the weights. A model that “fits” at batch size one with a short context can overflow once you extend the context window or raise the batch. If you are sizing a DGX Spark against a real workload, budget for the KV-cache at your actual sequence lengths — the mechanics are the same ones that make a 128GB memory figure less useful than it sounds when the real bottleneck is elsewhere. At what point does concurrency push a workload off DGX Spark? This is the divergence point, and it is worth being precise about. A single-node device serves concurrent requests by batching them together and by time-slicing the accelerator. Both have limits. As concurrency rises, either you widen the batch — which raises per-request latency because everyone waits for the slowest item in the batch — or you queue, which raises tail latency directly. At some concurrency level the p95 or p99 latency crosses your SLA, and past that point adding load only makes it worse. Datacentre serving handles this differently: it scales out across GPUs and nodes, uses continuous batching to keep the accelerator saturated without penalising individual requests as heavily, and can route load to keep tail latency bounded. That is a structural capability a single node does not have, regardless of how fast its memory is. The practical signal that you have hit the boundary is when tail latency degrades faster than throughput improves as you add concurrent load — an observed pattern across the inference-placement engagements we have run, not a fixed threshold you can read off a datasheet. The exact crossover depends on model size, sequence length, and the SLA, which is exactly why you profile rather than guess. When continuous batching and prefill/decode separation start mattering, you are already in datacentre territory; the reasoning behind separating prefill and decode for GPU throughput is a serving-side optimisation that pays off at concurrency levels a single node was never meant to carry. How do you compare cost-per-inference against cloud or datacentre alternatives? Cost-per-inference is where local placement either pays for itself or quietly loses money, and the comparison has to be honest about utilisation. A DGX Spark’s cost is largely fixed: you bought the box. So cost-per-inference falls as you push more useful work through it and rises when it sits idle. A datacentre or cloud GPU is the inverse — you pay for what you use, so a low-utilisation workload can be cheaper on-demand, while a steady high-utilisation workload is often cheaper on owned hardware. Anchor the comparison on four measurable quantities: Model memory footprint at your real sequence lengths and batch size, including KV-cache — this decides whether local is even feasible. Single-request latency on the local device versus the datacentre alternative — this decides whether the user experience is acceptable. Sustained tokens-per-second at target batch size — not the peak burst, the rate you can hold, which is the operationally relevant figure for capacity planning. Cost-per-inference on each option, computed at your actual expected utilisation, not at 100%. The mistake we see most is comparing a local box at assumed full utilisation against on-demand cloud pricing — that flatters local unfairly. Compare at the utilisation you will actually run. The same discipline applies whether you are weighing local against cloud or against a shared datacentre cluster; the underlying question is cost per unit of useful work, which is the same lens that governs comparing cost per useful FLOP across cloud providers. FAQ How does NVIDIA DGX Spark work for inference use cases, and what does it mean in practice? DGX Spark uses a unified memory architecture where CPU and GPU share one physical memory pool, so a model that fits in that pool is addressable by the accelerator without explicit host-to-device copies. In practice this makes it well suited to holding a fairly large model resident and running inference against it locally — data stays on the box, and there is no network round trip. It is a capacity-and-locality feature, not a throughput feature. What workloads is DGX Spark actually suited to — prototyping, fine-tuning, edge-local, or production serving? The first three: prototyping (where iteration speed matters more than throughput), parameter-efficient fine-tuning of models that fit in unified memory, and edge-local or single-user inference where data locality and latency favour on-device serving. It is not suited to high-concurrency production serving under a strict SLA. The common thread is that none of the good-fit workloads are dominated by concurrent request pressure. When does DGX Spark’s unified memory make sense versus discrete datacentre GPU serving? Unified memory makes sense when the model (plus its KV-cache at your real sequence lengths) fits in the shared pool, concurrency is low or predictable, and data locality or portability is a real constraint. Discrete datacentre serving wins when the model needs sharding across GPUs, concurrency is high or bursty, or you have a strict tail-latency SLA. Fill in all the workload rows before deciding — most cases resolve clearly once you do. At what point does concurrency and tail latency push a workload off DGX Spark back to profiled datacentre inference? The boundary is reached when tail latency (p95/p99) crosses your SLA as concurrent load rises — a single node can only batch or queue, and both degrade individual-request latency past a point. The practical signal is when tail latency degrades faster than throughput improves as you add load. The exact crossover depends on model size, sequence length, and the SLA, so you profile it rather than read it off a spec. How do I compare cost-per-inference on a local DGX Spark against cloud or datacentre GPU alternatives? Compute cost-per-inference at your actual expected utilisation, not at 100%. A DGX Spark’s cost is largely fixed, so per-inference cost falls with utilisation and rises when idle; cloud GPUs are the inverse. Anchor the comparison on model memory footprint, single-request latency, sustained tokens-per-second at target batch size, and cost-per-inference on each option — and never compare a local box at assumed full utilisation against on-demand cloud pricing. How large a model can DGX Spark hold in memory, and how does that constrain the inference options? It can hold any model whose weights plus KV-cache fit in the unified memory pool at your real sequence lengths and batch size. The constraint people miss is that the KV-cache grows with sequence length and batch size and competes for the same pool as the weights — so a model that fits at batch size one with a short context can overflow once you extend the context window or raise the batch. Budget for the KV-cache at your actual workload, not just the weights. How do I decide between local DGX Spark inference and scaling out — and where does a GPU Performance Audit fit? Decide by matching the workload’s memory footprint, concurrency, latency SLA, and data-locality needs against what a single node can hold under load, using the decision table above. A GPU Performance Audit resolves the uncertainty empirically: it profiles the actual memory, latency, and concurrency behaviour of your workload to determine whether it fits a local DGX Spark deployment or belongs on profiled datacentre serving. The decision is a measurement, not a guess The reason “can we just run it locally?” is hard to answer from a spec sheet is that the answer lives in your workload’s memory footprint, its single-request latency, and — decisively — how its tail latency behaves as concurrency rises. Those are measurable, and once measured they usually point clearly at one placement. If you are weighing a local DGX Spark against scaling out on GPU serving infrastructure, the failure class to avoid is placing a high-concurrency SLA workload on a single node — a GPU Performance Audit profiles the memory, latency, and concurrency behaviour and tells you which side of the boundary you are actually on before the procurement decision is made.