PureTensr SYSTEMS

Recipes/Ripple-65B Preview · 1× RTX PRO 6000

Recipe 002 · Dense 65B · One card · 600 W

135 tokens a second from a dense 65B, on one card.

Ripple-65B Preview reads all of its weights for every pass, so on its own one card writes 24 tokens a second. Ricursive's DFlash2 drafter turns each pass into several tokens: 135.2 tok/s on code and 97.9 on reasoning, one request at a time, with Ricursive's own NVFP4 weights and flags. One command starts the same server.

4 Verified runs NVFP4 weights DFlash2 drafter SGLang 0.5.19 Pinned wheels MIT recipe
No drafter · ./start.sh nospec24.0tok/s
0 / 9280.0 s
This recipe · ./start.sh135.2tok/s
0 / 9280.0 s
The model's real 928-token reply to LocalMaxxing's code prompt, replayed at each setup's measured decode speed, 3,981 characters in all.
Code135.2tok/sNVFP4 + DFlash2 · run
Reasoning97.9tok/sSame server · run
1,000-line script130.8tok/s16,384 tokens · run
Essay and poem75.9tok/s2,168 tokens · run

Is it any good

Early signs say yes. Not a thorough test.

A short check on 4 November, on the BF16 weights, paired item by item with DeepSeek-V4.1-Flash on the same harness.

19/20 on our private coding set

Twenty real defects from our own code, each fixed with a regression test. DeepSeek-V4.1-Flash also scored 19/20; each missed a different task.

30/40 on a reasoning mix

AIME 2026 7/8, HMMT February 2026 5/8, GPQA-Diamond 18/24, against DeepSeek-V4.1-Flash's 32/40: within noise (McNemar p = 0.63). 9 of the 10 misses ran out of a 16K-token budget; on the items it finished it was 30/31.

Tools (auto, required, parallel, a full round trip), JSON-schema output and a 30K-token needle all worked. A small sample on one harness: treat it as worth your time, not as a ranking.

Why it is fast

One pass over the weights, several tokens out.

A dense model touches every weight on every pass. The time to stream them out of memory caps decode at one token per pass, and a drafter is the way past it.

Measured, batch 1 Ceiling: one token per 57 GB weight read at 1.79 TB/s

Without drafts, 76% of the ceiling

Ricursive's NVFP4 export stores the MLPs in 4 bits (28 GB) and keeps attention in BF16 (27 GB). With the 2 GB output head, about 57 GB moves per pass. At 1.79 TB/s that allows about 31 tok/s. Measured: 41.7 ms per token, 24.0 tok/s.

DFlash2 checks 16 tokens per pass

Ricursive's 4.04B, 5-layer drafter drafts a whole 16-token block at once from the model's own hidden states, and one pass of the 65B checks it. A step reads about 65 GB and takes 51.6 ms. The model keeps only tokens it would have picked itself.

Predictable text lands more per step

Code-v1 lands 6.9 tokens per step, reasoning-v1 5.1, the 1,000-line script 6.9 and the essay 3.9. Step time barely moves, so tokens per step sets the speed.

The flags were already right

A profile of 30 steps: BF16 matrix multiplies 50% of GPU time, FP4 MLP multiplies 38%, both at about 1.46 TB/s, 82% of peak. Nothing in our sweep beat Ricursive's DGX Spark flags; the next gain needs fewer bytes, a quantization project.

6.9tokens / step ÷ 51.6ms / step = 134tok/s · code-v1, measured 135.2

In our coding agent, with about 18K tokens of system prompt and tools before every request, we saw a steady 50-70 tok/s on prose and 110-120 on long code after warmup. That is below the bare-API numbers above: the long context makes each step slower, and the agent samples with its own settings rather than at temperature 0.

What we tried

The vendor's flags, against every alternative that ran.

Screening runs, 3 after 1 warmup, so read them against each other. Milliseconds per step is the fair comparison, because tokens per step moves run to run.

Change from the vendor flagsCode tok/sReasoning tok/sms / stepResult
None
./start.sh
135.699.751.6kept
32-token draft blocks130.0101.953the checkpoint drafts 16-token blocks
Marlin FP4 GEMM133.1102.051.6equal, slower prefill
cuDNN FP4 GEMM124.293.655slower
Triton attention112.891.155slower
Online FP8 attention
q, k, v, o projections
116.795.653fewer bytes, but 6.2 tokens per step instead of 7.0
Decode-mode verify attention133.0100.051.2equal
No drafter
./start.sh nospec
24.024.041.7 per tokenthe reference

Swipe the table for more →

Did not run: cuteDSL FP4 (no SM120 support), torch.compile (CUDA-graph capture fails) and an FP8 drafter (Ricursive's loader requires BF16).

Run it

One command builds, downloads, starts and checks it.

1

Clone and start

git clone https://github.com/puretensor/Ripple-65B-Preview-1x-RTX-PRO-6000
cd Ripple-65B-Preview-1x-RTX-PRO-6000
./start.sh dflash --print   # show the exact server command, start nothing
./start.sh                  # Python env, 62 GB of weights, SGLang, then a smoke test

The first start compiles kernels and captures CUDA graphs, which takes a few minutes. It ends by printing the server's address.

2

Talk to it

curl -s http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{
  "model": "ripple",
  "messages": [{"role": "user", "content": "Write a Python function that merges two sorted lists."}],
  "max_tokens": 4096
}'

Any OpenAI client works with base_url = "http://127.0.0.1:8000/v1"; tool calls and reasoning_content come back parsed. Set GPU, PORT, CONTEXT or MODELS_DIR to change the card, the port, the context or where weights go.

3

Measure your card

python3 bench.py   # LocalMaxxing's prompts plus ours, temperature 0, median of 5

It prints decode speed, time to first token, tokens per step and milliseconds per step, so you can see which of the two differs from ours.

One RTX PRO 6000

96 GB, with about 85 GB free. Measured on the 600 W Workstation Edition; the Max-Q is not measured.

CUDA 13 and uv

A CUDA 13 toolkit with nvcc (we used 13.2) for SGLang's kernels, and uv for the pinned environment. Tested on driver 615.71.09.

Disk

54 GB for the NVFP4 weights, 7.6 GB for the drafter, about 10 GB for the Python environment.

Pinned

Weights by commit, every Python package by version, Ricursive's model plugin by sha256.

Receipts

Eight runs, all linked.

Each LocalMaxxing run page holds the prompt, the model's output, the engine's own timings and the exact launch command. Runs on LocalMaxxing's canonical prompts are Verified; the others are marked unverified only because their prompts are not canonical.

SetupLocalMaxxing runtok/sTTFTHashes
NVFP4 + DFlash2code-v1 cmw2sfbvd0bcdoa01shm40fuh135.21115 ms prompt a737db73 · out 19631d04 · Verified
NVFP4 + DFlash2reasoning-v1 cmw2sfbi20bcaoa01hqj3newo97.89177 ms prompt 9000edaa · out 02a6e095 · Verified
NVFP4 + DFlash2our prompt: 1,000-line script cmw2xzwmh0bghoa017hrwhnx9130.81170 ms prompt a3c5524f · out 1b600490 · not canonical
NVFP4 + DFlash2our prompt: essay and poem cmw2xzw1n0bgeoa01atqkp6l275.93168 ms prompt fa66a760 · out 077dea09 · not canonical
NVFP4 + DFlash22,644-token prompt cmw2sfc5l0bcgoa01poovjnf596.76769 ms prompt 5a6b7bc1 · out f02c7965 · not canonical
NVFP4 + DFlash215,699-token prompt cmw2sfcs00bcjoa01ciqggo8d98.484,460 ms prompt 47de0e3b · out f84fe387 · not canonical
NVFP4, no draftercode-v1 cmw2s16bu0bc7oa01jms6k4uk23.99105 ms prompt a737db73 · out 14fd0c17 · Verified
NVFP4, no drafterreasoning-v1 cmw2s15m70bc4oa01fzbv9hen23.96240 ms prompt 9000edaa · out 757d62e6 · Verified

How each number was measured

One request at a time, temperature 0, 2 warmups discarded and the median of 5 kept, each prompt behind LocalMaxxing's cache-bust nonce. Ripple reasons when it needs to and has no switch, so reasoning tokens count as output. Decode is (output tokens − 1) divided by the time from the first token to the last; tokens per step come from SGLang's per-request counts.

How the setup was chosen

One change at a time against Ricursive's flags, compared on milliseconds per step, plus a profiler capture. Nothing beat the vendor flags, so there was no gain to confirm with fresh-boot A/B runs. The canonical runs had the CPU in a performance window; the essay and script runs did not.

Reproduced from a fresh clone

On 5 November we cloned the recipe on the same card, with the CPU in its normal state and the default 64K context. start.sh built the environment from the lock file, reused the pinned weights already on disk and was serving in 354 s. bench.py then measured 131.9 tok/s on code and 101.6 on reasoning, at 51.1 and 51.6 ms per step: the Verified runs' step time, with tokens per step moving as the output does.

Credits

Ricursive Intelligence for Ripple-65B Preview, the NVFP4 export, the DFlash2 drafter and the SGLang plugin and Spark launcher this server is built from; SGLang, FlashInfer, and LocalMaxxing for the prompts and verification.

Licenses

The recipe's scripts are MIT. The weights and Ricursive's plugin are Apache-2.0 and download from Hugging Face; nothing is redistributed.