Skip to main content
You can run deepseek-ai/DeepSeek-V4.1-Flash — a 552B-parameter mixture-of-experts model with native vision, 1M-token context, and MIT licensing — on 2 NVIDIA DGX Sparks connected over a ConnectX-7 cluster link. Multiple independent community teams have published reproducible benchmarks as of October 2026. The model does not fit at full FP8 precision on 256 GB of aggregate unified memory. It fits when you use a mixed-precision serving format that keeps dense layers at FP8 and compresses the expert weights to 4-bit. This page collects the published numbers, the serving configurations, and the gotchas that every team hit independently. It is a companion to the V4 Flash 0731 hardware guide for the superseded model.

What changed from V4 Flash 0731

V4.1-Flash is a fundamentally larger model than the July 31 release it replaces. The weight floor more than doubled. The 2 Sparks that comfortably ran V4-Flash-0731 at 162 GB now need a mixed-precision strategy to hold V4.1-Flash at ~400 GiB.

The memory math for 2 DGX Sparks

Each DGX Spark has 128 GB of LPDDR5x unified memory at 273 GB/s. Two Sparks connected over a ConnectX-7 cluster link give you 256 GB of aggregate memory and ~200 Gb/s of RDMA bandwidth (measured ~183–185 Gb/s in practice). The NVIDIA NVFP4 variant stores expert weights at NVFP4 (W4A4, group size 16), Engram lookup tables at MXFP4 (E2M1), and preserves source precision for attention, shared experts, vision, and MTP/DSpark layers. The current revision (October 2026) totals approximately 400 GiB on disk. That does not fit in 256 GB. The community path that works uses a mixed-precision layout where the serving framework further compresses expert weights while keeping the dense backbone at higher precision. The result is approximately 79–105 GiB per node for model weights, leaving 23–49 GB per node for KV cache, runtime buffers, and the operating system.
The NVFP4 accuracy retention is strong. NVIDIA published benchmark comparisons showing less than 1% deviation from the MXFP4 source across GPQA Diamond (91.0 → 90.8), SciCode (54.4 → 54.0), and Terminal-Bench 2.1 (81.6 → 81.9). The quality loss from mixed-precision serving is negligible for production work.

Community benchmarks

Multiple teams have published independent benchmarks. The numbers vary by serving engine, quantization strategy, and concurrency level. All measurements below are decode throughput in tokens per second.

Single-stream decode (1 concurrent request)

Multi-user aggregate throughput

Prefill speed

Time to first token

TTFT at 512K and above is dominated by the prefill pass over the full context. The 2-Spark interconnect at ~185 Gb/s effective throughput is the bottleneck for long prompts. If your workload is latency-sensitive at long context, consider 4 Sparks at TP=4, where prefill scales to ~87 tok/s decode and TTFT drops proportionally.

Configuration

vLLM v0.31.0 or later is required. The community consensus configuration uses distributed tensor parallelism across 2 nodes with RoCE networking.
Key flags explained:
  • --kv-cache-dtype fp8_ds_mla — use FP8 for the KV cache, not nvfp4_ds_mla (unsupported in stock vLLM)
  • --max-model-len 524288 — 512K is the stable sweet spot; 1M works but costs ~12% decode speed
  • --max-num-seqs 6 — caps concurrent requests; raise to 6 for maximum aggregate throughput
  • --gpu-memory-utilization 0.82 — leaves room for KV cache growth; do not exceed 0.85 on unified memory
SGLang with the dsv4.1 branch supports tensor parallelism of 3 or 4 with NVFP4 quantization.

Networking setup

The ConnectX-7 cluster link uses RoCE v2 (RDMA over Converged Ethernet). Critical environment variables:
Use GID index 3 for dual-rail configuration. Community reports show +5% decode and +15% long-prompt prefill with dual-rail enabled. The management network runs on 192.168.1.0/24; model data traffic uses separate subnets (10.200.0.0/24 through 10.200.5.0/24 for TP=4 ring topology).

Context length on 2 Sparks

The 1M context was verified by multiple teams using needle-in-a-haystack tests. The KV cache at FP8 uses 890 bytes per token, so 1M tokens consumes approximately 0.93 GB of cache memory — modest compared to the weight footprint. The real constraint at 1M is not memory but prefill latency: expect 5+ minutes for the first token at 512K–1M context.

Critical gotchas

These are the issues that every community team hit independently. Save yourself the debugging time.

Kernel regression breaks NCCL RoCE

The 7.0.0-1019-nvidia kernel causes ibv_reg_mr_iova2 failed with error Cannot allocate memory. The root cause is that CmaTotal drops to 0 kB. The working kernel is 6.17.0-1032-nvidia. Pin the kernel and hold the package:
The performance impact of the broken kernel is severe: prefill drops from ~2,600 tok/s to ~1,430 tok/s (−47% TTFT).

PyTorch memory allocator causes NaN logits

Set this environment variable before launching vLLM:
The default expandable_segments:True causes NaN logits after approximately 64 generated tokens. This is a PyTorch bug on unified memory (SM121), not a vLLM issue.

Prefix caching silent failures

Parallel long-context requests can fail silently due to block eviction in the hybrid MLA/SWA attention structure. Set the retention interval:

DSpark speculative decoding

If you enable DSpark for coding workloads, ensure DS4_SERVER_COALESCE_MAX is at least 2. Setting it to 1 silently disables speculation. Use the 0731-specific drafter file — older drafters fail with a missing dspark.main_proj.weight tensor error. DSpark helps coding throughput but may slow non-coding tasks. Test with your actual workload before enabling it in production.

Build requirements for llama.cpp

If you build llama.cpp from source for GB10 (SM121), you must set:
Without this, the build silently falls back to a generic CUDA target and performs significantly worse.

Comparison to other hardware

2 DGX Sparks vs Mac Studio M5 Ultra 256 GB

V4.1-Flash does not fit on a single 256 GB Mac Studio at any usable quantization. The 512 GB Mac Studio unlocks it at Q2_K–Q4, but at 2–3× the price of 2 Sparks.

2 DGX Sparks vs 4 DGX Sparks

4 Sparks roughly doubles single-stream decode and provides comfortable 1M context. 2 Sparks is the minimum viable configuration; 4 Sparks is the recommended production configuration.

2 DGX Sparks vs 2× RTX PRO 6000

RTX PRO 6000 is 6.6× faster on memory bandwidth and delivers 2–3× the throughput. DGX Spark wins on price and power efficiency. For production serving with real-time latency requirements, RTX PRO 6000 is the better choice. For always-on personal or small-team use, DGX Spark is more practical.

Expose through Tokios

Once your 2-Spark cluster is healthy, expose it through a single authenticated endpoint.
1

Keep the model server on the head node private

Confirm the vLLM or SGLang process on the head Spark responds on its loopback /v1 endpoint, such as http://127.0.0.1:8000/v1. Worker-to-worker traffic stays on the cluster network.
2

Pair 1 connector on the head node

In the Tokios dashboard, open Setup and select Start pairing. Install and run tokios-connector on the head Spark. The connector dials out over HTTPS — it does not require an inbound port.
3

Configure the head-node upstream

Set the connector’s BaseUrl to the head node’s local /v1 endpoint. See Connector config for the complete format.
4

Register the public deployment

In Models, register a deployment such as deepseek-v41-flash. Map it to the upstream model id your head-node server exposes. Clients send the deployment name, not the Hugging Face id.
5

Create a scoped API key

Create an sk-tok-… key in Keys, optionally scoped to deepseek-v41-flash. Clients then call https://api.tokios.com/v1.
Verify through Tokios:

Validate in this order

  1. Pin the kernel to 6.17.0-1032-nvidia and verify CmaTotal is non-zero.
  2. Set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:False.
  3. Complete NVIDIA’s 2-Spark networking setup (ConnectX-7, RoCE, subnets).
  4. Load the model at 32K context with 1 concurrent request.
  5. Send a short chat request, a long prompt, and a tool-call request.
  6. Record memory consumption, first-token latency, and generation rate.
  7. Raise context toward 128K, then 512K, then 1M — repeating the same workload at each step.
  8. Only then test multi-user concurrency.
This order separates kernel and networking failures from memory pressure, KV cache exhaustion, and tool-format issues.

V4 Flash 0731 hardware

The previous generation guide — 284B model on 2 DGX Sparks, 2 RTX PRO 6000s, or 2 Strix Halo systems.

DGX Spark model compatibility

What fits on 1 Spark (128 GB) — dense up to 70B Q4, MoE up to 120B NVFP4.

One vs two DGX Sparks

When to scale to a second Spark for distributed inference.

DeepSeek family

V4.1-Flash model page with identifiers, capabilities, and the full DeepSeek lineup.