DGX Spark · Local AI · Benchmarks

I ran GLM against DeepSeek on two Sparks. The headline number was the least useful one.

Count to 200 makes every model look fast. On real code, real JSON and long prompts, here is how DeepSeek and GLM actually compare.

Two compact desktop AI computers linked by a single cable on a workbench, surrounded by measuring instruments, in a warm technical illustration.
Illustration: Field Signal, created with Google Gemini.

On Monday sudoingX posted that DeepSeek v4.1 Flash does 103 tokens per second on code, on two DGX Sparks, with the build and the benchmark script published alongside it.

I have two Sparks. I put local agents on them and I run GLM-5.3-Flash on them every day. So I did what anyone with two Sparks and no self-control would do.

I tried to reproduce it.

102.3 tokens per second. Same script, measured the same way, inside 1 percent of the published number.

Cool. Confirmed. Then I spent a day and a night benchmarking both models on the same boxes with one harness, and that number turned out to be the least useful thing I measured.

Count to 200 is not a workload

The big structured numbers in public Spark posts, anywhere from 114 to 141 tokens per second, mostly come from one prompt: count from 1 to 200.

Both serving stacks use a small draft model that guesses the next few tokens while the big model checks them. On a count to 200 the guesses are almost always right. So the number measures how fast the server confirms a pattern it already expects. Not how fast it writes.

The headline prompt vs real work, one request at a timeGLM-5.3-FlashDeepSeek v4.1 FlashCount to 200the headline prompt111.1136.3Real code task1,024 tokens72.798.2Real JSON task1,024 tokens82.698.8Real essay1,024 tokens47.554.4tokens per second, median of 5 (count: median of 9)
Same two Sparks, same harness, one request at a time. Real tasks are 1,024-token replies, median of 5 runs.

On DeepSeek, counting runs at 136 tokens per second. A real 1,024-token essay runs at 54. Same box. Same harness. Honestly, that gap is the whole post.

On real work DeepSeek still won most rows: a real code task at 98.2 against GLM's 72.7, real JSON at 98.8 against 82.6, an essay at 54.4 against 47.5.

A fast stamping press repeating the same mark beside a slower hand-set printing press composing a full page, in a warm technical illustration.
Illustration: Field Signal, created with Google Gemini.

The row that went the other way

With four requests at once, GLM did 101.8 tokens per second in total and DeepSeek did 93.1. At two at once DeepSeek wins again, 75.4 to 70.2.

That one is not the model. DeepSeek's serving recipe decodes two requests at a time and queues the rest. GLM's decodes four. Under four steady requests, the median wait for a first token on DeepSeek was about 5.5 seconds.

I tuned GLM first. One change stuck.

Before blaming the model I made sure GLM's setup was current. The recipe I run went from 96 patches to 107. That bought 2 to 2.5 percent, and the output was byte-for-byte identical. Free speed stays.

Then I doubled GLM's parallel slots from four to eight. About 30 percent more total throughput, but only once more than four requests overlap.

Then I checked my own gateway. It admits four requests at a time. The extra slots could never fill, and they cut the prompt cache in half. Reverted.

The engine's number is not your number. Your number is whatever survives the path your requests actually take.

Reading is slower than everyone says. Writing isn't.

Prefill is the model reading the prompt before it writes anything. GLM read prompts 11 to 13 percent faster than DeepSeek at every size both of them ran: 1,381 against 1,202 tokens per second around 32k, and 1,349 against 1,194 around 128k.

And both of them read slower than the published numbers. GLM about 1,380 against a published 1,950. DeepSeek about 1,300 against a published 2,090. That is 30 to 40 percent short, while writing landed within 1 to 8 percent.

Published vs what my two Sparks measuredPublishedMeasured hereWriting: within 1 to 8 percentDeepSeek, writing code103.0102.3DeepSeek, writing prose58.353.6GLM, writing prose60.461.2Reading: 30 to 40 percent shortGLM, reading a 32k prompt~1,9501,381DeepSeek, reading a 32k prompt2,0921,297tokens per second; published figures from sudoingX and MiaAI-Lab
Published figures: sudoingX for DeepSeek, MiaAI-Lab for GLM. Measured: my two Sparks, warm server.

I ruled out what I could: warm-up, clocks, thermals, prompt content, recipe version, settings, and the 200 Gb/s link between the two Sparks. Then the strange part. While reading a prompt, each GPU drew about 53 W. While writing, about 70 W. Reading should be the heavy part. The GPUs are waiting on something.

My best remaining suspect is the OS and driver image, which dates from March. I have not proven it, so I am not going to pretend I have.

Close on code. Not close on instructions.

Quality, thinking off: close on code, not on instructionsGLM-5.3-FlashDeepSeek v4.1 Flash7580859095HumanEval+ (plus tests)90.989.0MBPP+ (plus tests)81.080.4IFEval (prompt, strict)81.988.7score, percent; greedy decoding
Thinking off, greedy decoding. EvalPlus for HumanEval+ and MBPP+, lm-evaluation-harness for IFEval.

Coding is a wash. DeepSeek takes HumanEval+ base, 94.5 to 92.7. GLM takes MBPP+ base, 94.2 to 93.4, and edges both of the stricter plus scores.

Instruction following is not close. On IFEval DeepSeek scored 88.7 strict and 91.3 loose. GLM scored 81.9 and 87.1. If you need a model to do exactly what the prompt says, that is the row that matters.

What DeepSeek did overnight

While I slept I gave DeepSeek a few more jobs. GLM has not run these yet, so they are DeepSeek facts, not a comparison.

So which one?

Context is the real split. GLM's recipe serves a 1M-token window, and it found all three hidden passphrases at 523k. DeepSeek's recipe serves 262k.

So I checked two weeks of my own traffic. The biggest prompt was 252k. A couple went past 200k. Almost everything else was far smaller. For what I run, 262k is fine.

Everything else leans DeepSeek. Faster on real work, better at following instructions, tied on code. GLM reads faster and goes further.

So DeepSeek is in production. I built and benchmarked it overnight, then pointed my gateway at it. Every agent that talked to GLM now talks to DeepSeek, and none of them had to change. GLM is still installed, one config file away.

The first draft of this post came from one of those agents, running on DeepSeek. Then came the edits. A faster model still does not know my tone, apparently.

A watchdog checks DeepSeek every minute. If it stops answering, my agents fall back to GLM on their own. So far it hasn't.

References

Field notes

Keep up with Field Signal.

New engineering field notes and coverage from the automated desks, in one email list. Unsubscribe any time.

Follow Pranav on X: @Pranav_patel06