Home / 512 GB

512 GB · 4× DGX Spark (GB10)

Mia's TP4 recipe: DeepSeek-V4.1-Flash-1017

4x NVIDIA GB10 boxes, tensor parallel 4 over a switchless CX7 ring: 2x ASUS Ascent GX10, 1x Gigabyte AI TOP ATOM, 1x Lenovo ThinkStation PGX. One box (an ASUS GX10) runs an older driver (580.173.02) and kernel (6.17.0-1031-nvidia) than the other three (580.178.04, 7.0.0-1019-nvidia). That is named openly.

SGLang (lmsysorg/sglang:dev-dsv41 pin 3dbc3130) + Mia TP4 production line (canary-roce, no mesh) @64b02dea, DSpark k=5, TP4 ringcommit recipe 64b02dea4 GB10 boxes (CX7 Ring, TP4)measured 2026-10-20independent check passed
Rank in 512 GB
1of 1
Overall score
95.5/ 100
Speed
45.0/ 45
Quality
30.0/ 30
Browser check
4.5/ 5
My rating
16.0/ 20

Overall score as of 20 Oct 2026. This is the only complete run in the class so far, so it is rank 1. Scores are relative to the best run in the class today; a better model later moves older runs down.

How the overall score is calculated
PartThis runBest in classRelativeWeightPoints
Speeddecode 51.2 tok/sbest 51.2 tok/s100.0 %45 %45.0
Qualitymean of 7 tests: 66.7 %best mean 66.7 %100.0 %30 %30.0
Browser check9 of 1090.0 %5 %4.5
My rating8 of 1080.0 %20 %16.0
Overall100 %95.5

The seven quality tests: MMLU-Pro 64.3 · GPQA 34.9 · IFEval 91.0 · LiveCodeBench 62.5 · long text 8K 70.0 · long text 32K 57.5 · GPQA 30 with thinking 86.7.

Speed and quality are relative to the best run of this class, the browser check and my rating are out of 10. The parts are rounded one by one. sparkDash, the memory test and speculative-decoding numbers are not part of it. How the score is made, and the assumption behind it.

Build test

What it builds as an agent

Task: Voxel world (3D scene, one HTML file). One attempt, no help. Counted: the final file counts.

Browser check
9/ 10
My rating
8/ 10
Time
90.8min
Tokens
196,854
Harness
DeepSeek Harness 0.2.1-rc.2
Screen recording of the page this run built, made in Chrome after the run. The page files are unchanged. Still image

Play it yourself

Open full screen

AI-generated The page this setup built, running live in your browser: click into it and use the controls it shows itself (usually drag to look around, scroll to zoom). It needs WebGL and can be slow on a weak graphics card.

The browser check

  • page loads without page error1 / 1
  • window.ready === true within 30 s1 / 1
  • no console errors (whole session)1 / 1
  • frame is not blank1 / 1
  • frame rate in software GL (rAF over 5 s)0 / 1
  • world: scene size 0.5 (parts >= 80 or >= 20000 triangles; canvas fallback), visible text English if any 0.51 / 1
  • automatic camera tour: the view changes on its own in two successive ~5 s windows (1 each)2 / 2
  • animation in the world (nodes / instances / particles moving besides the camera)1 / 1
  • OrbitControls: drag and wheel change the picture beyond the animation baseline1 / 1

Measured 2026-10-20. Raw files: check · run info · command · final choice · contract · sampling · screenshot · clip.mp4 · web.mp4 · web-poster.jpg.

The run's own headless check browser, which renders the page the model built, used up to 1408 % CPU. The load monitor counted it as another process. Browser check 9.0 out of 10: the page loads, runs without console errors and is not blank; the only lost point is the frame rate, measured at 1.62 frames per second in software rendering without a GPU. The server's per-answer cap of 32,768 tokens was lifted to the card's 262,144 (named on this page). The agent ended by itself after 90.8 minutes with finish reason stop; the “finish now” message was sent at 90 minutes.

Exact command we measured withfor reproducing↓

You do not need this to run the model. It is the exact command of our measurement, so anyone can repeat the result.

Build test (run show-r3)
run_showcase.sh --harness dsh-021 --task VX --upstream http://127.0.0.1:39895/v1 --model deepseek-v4.1-flash --sampling-file $RUN/sampling-show.json --out $RUN/raw/plan-2010-show-r3/show --limit-s 7200 --inject-after-s 5400 --poll-s 20 --ctx 1048576
Speed v2

How fast it runs

Decode
51.2tok/s
Decode, code
50.4tok/s
Decode, prose
52.0tok/s
500 words
≈ 13.6s
Prefill at 8K
2745.4tok/s
First token at 2K
0.8s
MeasurementResult
Decode51.2 tok/s
Words per second36.7 words/s
Characters per second232.5 chars/s
Spread of the decode runs (CV)41.2 %
Decode, window 150.7 tok/s
Prefill at 2K2535.8 tok/s
Prefill at 8K2745.4 tok/s
Prefill at 32K4816.1 tok/s
Time to first token at 2K0.8 s
Time to first token at 8K3.0 s
Time to first token at 32K6.8 s
1 request at once (total)54.5 tok/s
Long answer, wall time90.2 s
Decode, code prompt50.4 tok/s
Decode, prose prompt52.0 tok/s
Spread of the code runs (CV)41.2 %
Spread of the prose runs (CV)0.4 %

Method: code+prose; 2 run(s) each; 512 tokens; 1 warm-up(s); median. Measured 2026-10-20. Raw files: speed result · speed contract · long answer.

The code prompt is not steady: its two runs gave 35.7 and 65.1 tok/s (median 50.4, spread 41 %), the prose prompt 51.8 and 52.1 tok/s (median 52.0). The headline 51.19 tok/s is the mean of the two prompt medians. A measurement above 15 % spread is repeated: this is the repeat, and the first measurement (replaced by this one) showed the same pattern (spread 40 %), so the spread repeats, but I did not find the cause. Prefill at 8K runs at two speeds: its three runs gave 2,582, 2,745 and 4,969 tok/s (the median 2,745 is the slower speed), and the first measurement had the same two speeds.

Exact command we measured withfor reproducing↓

You do not need this to run the model. It is the exact command of our measurement, so anyone can repeat the result.

Speed v2 (run speed-r7)
python3 speed2.py --base-url http://127.0.0.1:35689/v1 --label run-speed-r7 --prompts $BENCH/repos/rigmark-v2/prompts-v2.json --output $RUN/raw/plan-2010-speed-r7/work/speed2 --contract $RUN/raw/plan-2010-speed-r7/work/speed2/speed-contract.json --parts decode,prefill,conc,l1 --prefill-depths 2048,8192,32768 --prompt-ids code,prose --runs 2 --max-tokens 512 --warmups 1 --prefill-runs 3 --tokenizer-json $HOME/NewModels/DeepSeek-V4.1-Flash-1017/tokenizer.json --tokenizer-python $HOME/not published --sampling {"temperature": 1.0, "top_p": 1.0} --sampling-source Model card first (Niklas Oct 20 00:2x, E1): deepseek-ai/DeepSeek-V4.1-Flash-1017 README.md:77-84 recommends temperature 1.0, top_p 1.0; Mia's TP4 repo MiaAI-Lab/DeepSeek-v4.1-Flash-DGX-Sparks@64b02dea docs/tp4.md:42-44 used top_p 0.95 (older card state), not adopted. The TP4 repo names no top_k, so top_k is not sent. Same setting for thinking and non-thinking. Speed v2 runs with thinking off (enable_thinking false per request), show/think with thinking on. Always send max_tokens. --model deepseek-v4.1-flash --no-cache-prompt --server-log $RUN/logs/server-A.log --engine-version-file $RUN/logs/engine-version.txt
Quality v2

How well it answers

TestResult95 % marginRightCut offcount as wrongRaw files
MMLU-Pro
400 fixed questions, letter only
64.3 % ± 4.7 pts257 / 40057summary · log · contractcommand
GPQA Diamond
198 questions, letter only
34.9 % ± 6.6 pts69 / 19855answers · summary · log · contractcommand
IFEval
200 fixed prompts, strict
91.0 % ± 4.0 pts182 / 2000summary · log · contractcommand
LiveCodeBench
40 newest tasks, the code runs
62.5 % ± 14.4 pts25 / 400summary · log · contractcommand
Long text 8K
4 tasks x 10 at 8192 tokens
70.0 % ± 13.7 pts28 / 400log · contract · answers · summarycommand
Long text 32K
4 tasks x 10 at 32768 tokens
57.5 % ± 14.7 pts23 / 402log · contract · answers · summarycommand
GPQA 30, thinking on
30 questions, limit 16,384 tokens
86.7 % ± 12.2 pts
median 2,305 tokens, 32.8 s per question
26 / 303log · contract · answers · summarycommand

Thinking off, except the last test. Seed 42. Sampling from the model card. A cut-off answer counts as wrong. Measured 2026-10-20.

Note from the run: 57 of 400 MMLU-Pro answers and 55 of 198 GPQA Diamond answers were cut off at the 48-token limit (the model starts with “Let's go step by step” instead of the letter) and count as wrong. Without them, 257 of the 343 finished MMLU-Pro answers are right (74.9 %) and 69 of the 143 finished GPQA Diamond answers (48.3 %). The headline numbers keep the cut-off answers as wrong, as the method says. 2 of the 80 long-text answers were cut off at their limit of 128 tokens and count as wrong too.

Exact commands we measured withfor reproducing↓

You do not need this to run the model. It is the exact command of our measurement, so anyone can repeat the result.

MMLU-Pro (run inst-r1)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts mmlupro --job plan-2010
GPQA Diamond (run inst-r1)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts gpqa --job plan-2010
IFEval (run inst-r1)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts ifeval --job plan-2010
LiveCodeBench (run inst-r1)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts lcb --job plan-2010
Long text 8K (run inst-r4)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts ruler --job plan-2010
Long text 32K (run inst-r4)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts ruler --job plan-2010
GPQA 30, thinking on (run think-r2)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts think --job plan-2010
Memory test

How much context fits

Largest size tested
131,072tokens
Peak memory
100.84GiB
Decode at that size
not measured
Context sizePrompttokensFilledFirst tokenPrefilltok/s, as the server reports itDecodetok/sPeak memoryGiBResult
4K 4,096 tokens3,89195.0 %———98.66answered (length)
8K 8,192 tokens7,78295.0 %———99.15answered (stop)
16K 16,384 tokens15,56495.0 %———99.40answered (length)
32K 32,768 tokens31,13095.0 %———99.51answered (stop)
64K 65,536 tokens62,25995.0 %———99.65answered (stop)
128K 131,072 tokens124,51895.0 %———100.84answered (stop)

Memory test. The recipe fixes the context (1,048,576 tokens), so the server is started once with the recipe's own command and reserves its memory up front. Then, for each size (4K, 8K, 16K ... up to the largest size tested), one prompt that fills about 95 % of that size is sent, and the model must answer. The largest size that answered counts; it is the highest size tested, not a limit of the setup. Decode speed at that size was not measured. Peak memory is, on each of the four boxes, the rise of used memory (MemTotal - MemAvailable) over the idle value before the step; the table and the number show the highest of the four boxes. Unified memory, so GPU and CPU share it. Measured 2026-10-20. Raw files: result of every step · log · contract.

Note from the run: Highest TESTED step is 131072 tokens (steps 4K to 128K all loaded and answered, no failure); the context in the recipe is 1048576, so 131072 is not the limit. Peak 100.84 GiB = highest node (box-1) at the largest step, without the load phase; with the load phase up to 103.8 GiB per node (box-3 103.8, box-4 103.0, box-1 102.7, box-2 101.7). Decode speed at the steps not measured. The memory is read on all four boxes; the number shown is the highest of them.

Exact command we measured withfor reproducing↓

You do not need this to run the model. It is the exact command of our measurement, so anyone can repeat the result.

Memory test (run fit-r5)
bash tools/quality2/measure_all.sh tools/quality2/cards/ds1017-sglang-tp4-4x.json --parts fit --job plan-2010
Credits

Also made this possible

Setup

Run it yourself

What you need and how to start it, step by step. The results below come from exactly this setup.

What you need

Hardware
4x NVIDIA GB10 boxes, tensor parallel 4 over a switchless CX7 ring: 2x ASUS Ascent GX10, 1x Gigabyte AI TOP ATOM, 1x Lenovo ThinkStation PGX. One box (an ASUS GX10) runs an older driver (580.173.02) and kernel (6.17.0-1031-nvidia) than the other three (580.178.04, 7.0.0-1019-nvidia). That is named openly.
Model
DeepSeek-V4.1-Flash-1017 (official checkpoint)
Engine
SGLang, tensor parallel on 4 GB10 boxes — the program that loads the model and answers requests · github.com/sgl-project/sglangBuild and settings we used: SGLang (lmsysorg/sglang:dev-dsv41 pin 3dbc3130) + Mia TP4 production line (canary-roce, no mesh) @64b02dea, DSpark k=5, TP4 ring
Recipe (TP4 production line)
github.com/MiaAI-Lab/DeepSeek-v4.1-Flash-DGX-Sparks by Mia (MiaAI-Lab)

Steps

  1. Get the recipe and the engine from the list above. The list has no direct download link for the model file itself. The base model is huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash-1017.

  2. Start the server with this command. It loads the model into memory. When the model has loaded, the server waits for requests on port 8888.

    SERVED_MODEL_NAME=deepseek-v4.1-flash \
      PORT=8888 ./start-tp4-switchless.sh serve

    What the parts mean

    • PORT=8888the network port the server listens on
Exact command we measured withfor reproducing↓

You do not need this to run the model. It is the start text exactly as our run recorded it, with the engine build in front, so anyone can repeat the result.

Start, as recorded with the run
SGLang (lmsysorg/sglang:dev-dsv41 pin 3dbc3130) + Mia TP4 production line (canary-roce, no mesh) @64b02dea, DSpark k=5, TP4 ring; SERVED_MODEL_NAME=deepseek-v4.1-flash PORT=8888 ./start-tp4-switchless.sh serve ($HOME/dsv41-4x-spark on box-3; ranks box-3=0 box-4=1 box-1=2 box-2=3; ENV_FILE .env.tp4-switchless = production line without mesh)

Context and sampling: 1,048,576 tokens (the recipe's own CONTEXT_LENGTH; the start script's code default would be 409,600), seed 42, no prompt cache. Sampling from the model card: temperature 1.0, top_p 1.0 (Mia's docs use top_p 0.95; not adopted). The recipe caps every answer at 32,768 tokens on the server; I lifted that cap (DSV41_MAX_NEW_TOKENS=0) so one answer can reach the card's limit of 262,144 tokens. Speed and quality tests with thinking off; GPQA 30 and the build test with thinking on. Fabric: switchless CX7 ring without the RoCE mesh (Mia's production line without mesh), not her switched fabric. Agent for the build test: DeepSeek Harness 0.2.1-rc.2, headless.. Hardware: 4x NVIDIA GB10 boxes, tensor parallel 4 over a switchless CX7 ring: 2x ASUS Ascent GX10, 1x Gigabyte AI TOP ATOM, 1x Lenovo ThinkStation PGX. One box (an ASUS GX10) runs an older driver (580.173.02) and kernel (6.17.0-1031-nvidia) than the other three (580.178.04, 7.0.0-1019-nvidia). That is named openly.. All raw files of this setup: raw/v2/deepseek-v41-flash-4sparks-mia-tp4.

Mia's sparkDash 2.50.0

Mia's own benchmark, run unchanged

This is Mia's own benchmark tool (commit 21a3511), run unchanged. It has its own section here and its own column on the class page, and it is never mixed with my numbers. A cut-off answer counts as wrong here, so a value can differ from sparkDash's own screen.

Tool Eval Quick
90/ 100
Decode, 1 request
134.5tok/s
TestResult95 % marginRightCut offcount as wrongRaw files
Quality QA
150 questions
92.0 % ± 4.4 pts138 / 1504summarycommand
Quality MMLU
285 questions
94.0 % ± 2.8 pts268 / 2850summarycommand
Tool Eval Quick
15 scenarios, tool use
90 / 10013 / 15 passed—tool eval result · tool eval report · tool eval command · summarycommand
Decode, 1 request at once
first token 231 ms
134.5 tok/s——decode result · summarycommand
Prefill at 4K
first token 1.0 s
5589.3 tok/s——prefill result · summarycommand
Prefill at 8K
first token 1.7 s
5412.2 tok/s——prefill result · summarycommand
Prefill at 16K
first token 3.4 s
5252.3 tok/s——prefill result · summarycommand
Prefill at 32K
first token 8.1 s
4160.2 tok/s——prefill result · summarycommand

Seed 1234 applies to the two quality tests; decode, prefill and tool eval send no seed. The benchmark client ran on a separate machine that is never part of the measured group. Measured 2026-10-20. Version 2.50.0, commit 21a3511.

QA. Quality QA, 150 items, seed 1234, temperature 0, thinking off, 4 requests at once (Mia's default). An answer cut off at the token limit counts as wrong. ± is the 95 % margin (Wilson).

MMLU. Quality MMLU, 285 items (5 for each of 57 subjects, 4 answers), seed 1234, temperature 0, thinking off. An answer cut off at the token limit counts as wrong. ± is the 95 % margin (Wilson).

Decode. Decode bench, 1 request at once, 400 tokens, prompt type structured, temperature 0, thinking off. No seed is sent.

Prefill. Prefill bench at 4K, 8K, 16K and 32K tokens. sparkDash skips a size that does not fit into the context. No seed is sent.

Tool Eval Quick. Tool Eval Quick: tool-eval-bench (SeraphimSerapis, commit c61319b), 15 core scenarios (--short), --no-think, --timeout 120. Score 0 to 100. No seed is sent.

Note from the run: sparkDash 2.50.0 (@21a3511) on a client machine (never in the measured group), Quality: seed 1234, temperature 0, thinking off, a truncated answer counts as wrong; decode, prefill and tool eval send no seed; own row, never mixed with quality-v2.

Exact commands we measured withfor reproducing↓

You do not need this to run the model. It is the exact command of our measurement, so anyone can repeat the result.

sparkDash (run sparkdash-r6)
python3 tools/quality2/sparkdash_client.py tools/quality2/cards/ds1017-sglang-tp4-4x.json <box> --client <client machine> --job plan-2010 --out $RUN
Tool Eval Quick, as sparkDash starts it
tool-eval-bench --base-url http://127.0.0.1:<port> --model deepseek-v4.1-flash --short --no-think --timeout 120 --json-file $BENCH/sparkdash-client/runs/work/tooleval/result.json --no-live