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.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 (recommended for 2-Spark TP=2)
vLLM v0.31.0 or later is required. The community consensus configuration uses distributed tensor parallelism across 2 nodes with RoCE networking.--kv-cache-dtype fp8_ds_mla— use FP8 for the KV cache, notnvfp4_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 (recommended for 3–4 Spark TP=3/4)
SGLang with thedsv4.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: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
The7.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:
PyTorch memory allocator causes NaN logits
Set this environment variable before launching vLLM: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, ensureDS4_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: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.Validate in this order
- Pin the kernel to
6.17.0-1032-nvidiaand verifyCmaTotalis non-zero. - Set
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:False. - Complete NVIDIA’s 2-Spark networking setup (ConnectX-7, RoCE, subnets).
- Load the model at 32K context with 1 concurrent request.
- Send a short chat request, a long prompt, and a tool-call request.
- Record memory consumption, first-token latency, and generation rate.
- Raise context toward 128K, then 512K, then 1M — repeating the same workload at each step.
- Only then test multi-user concurrency.
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.