jwlaboratory/sparkling-tree

Official repository for Sparkling-Tree: DSpark + DDTree = BRRRR

0

stars

39

commits

Python

primary language

Aug 6, 2026

updated

jwlabs.vercel.app/post/sparklingtree
speculative-decoding

README

SparklingTree

Frontier speculative decoding. Read more here: https://jwlabs.vercel.app/post/sparklingtree

Demo

Four decoders racing on the same prompt (real H100 timestamps, identical output):

4-way race: AR vs DSpark vs DDTree vs SparklingTree

Head-to-head: autoregressive vs SparklingTree (gsm8k)

AR vs SparklingTree streaming side-by-side

Results

Citable run: seed 1, 6 datasets × 12 prompts, 512 tokens, temp 0, sync ON, compaction ON, C=128, fanout 64, single H100.

Aggregate speedup vs autoregressive, grouped by draft budget

Aggregate speedup vs autoregressive

Draft budgetDFlashDSparkDDTreeSparklingTree
643.15×3.27×4.12×4.29×
1283.15×3.27×4.45×4.58×
2563.15×3.27×4.55×4.71×

DFlash and DSpark are chain drafters, so they don't use the tree budget — their numbers are constant across budgets.

Per-dataset speedup at draft budget 256

Full per-dataset numbers

Each cell is accepted tokens/step · tokens/sec; bold marks the fastest method per row. Autoregressive is the 1.00-accept baseline (~52 tok/s on every dataset).

Budget 256
DatasetAR tok/sDFlashDSparkDDTreeSparklingTree
alpaca51.03.07 · 95.43.66 · 109.94.95 · 152.15.53 · 168.1
gsm8k52.26.71 · 218.07.88 · 242.69.53 · 300.810.72 · 327.5
humaneval52.76.32 · 207.56.41 · 200.29.31 · 286.29.52 · 283.7
math50052.07.80 · 253.67.37 · 230.510.39 · 331.310.22 · 316.6
mbpp52.45.47 · 176.65.77 · 179.88.21 · 252.58.38 · 248.8
mt-bench51.53.31 · 105.83.76 · 114.75.24 · 158.85.87 · 172.9
Aggregate52.05.10 · 163.95.53 · 170.37.67 · 237.18.15 · 245.0
Budget 128
DatasetAR tok/sDFlashDSparkDDTreeSparklingTree
alpaca51.03.07 · 95.43.66 · 109.94.61 · 147.85.40 · 169.0
gsm8k52.26.71 · 218.07.88 · 242.68.99 · 280.910.30 · 311.9
humaneval52.76.32 · 207.56.41 · 200.28.97 · 284.79.13 · 279.8
math50052.07.80 · 253.67.37 · 230.510.14 · 323.99.71 · 302.0
mbpp52.45.47 · 176.65.77 · 179.87.80 · 252.97.88 · 244.7
mt-bench51.53.31 · 105.83.76 · 114.75.02 · 158.05.44 · 167.1
Aggregate52.05.10 · 163.95.53 · 170.37.28 · 231.57.73 · 238.3
Budget 64
DatasetAR tok/sDFlashDSparkDDTreeSparklingTree
alpaca51.03.07 · 95.43.66 · 109.94.46 · 132.75.10 · 149.3
gsm8k52.26.71 · 218.07.88 · 242.68.65 · 268.79.73 · 298.6
humaneval52.76.32 · 207.56.41 · 200.28.19 · 267.78.78 · 273.1
math50052.07.80 · 253.67.37 · 230.59.70 · 309.79.25 · 287.2
mbpp52.45.47 · 176.65.77 · 179.87.60 · 231.67.53 · 224.5
mt-bench51.53.31 · 105.83.76 · 114.74.64 · 145.35.15 · 157.0
Aggregate52.05.10 · 163.95.53 · 170.36.86 · 214.47.34 · 223.4

Figures are generated by assets/make_results_fig.py from these numbers.

Folders

  • harness/ — shared decode core (DDTree, DFlash, DSpark, SparklingTree) + the benchmark runner
  • demo/ — streaming/race demo GIFs and the script that renders them
  • experiment1-harness/ — first end-to-end harness benchmark
  • experiment2-block16/ — fine-tuning DSpark to draft 16 tokens/block + training recipe
  • experiment3-timings/ — per-phase wall-clock timing instrumentation
  • experiment4-faster/ — faster tree builder (the precompute best-first builder)
  • experiment5-final-results/ — head-to-head: DFlash vs DSpark vs DDTree vs SparklingTree
  • archive-1-speedup-w-confidence-head-verification/ — earlier confidence-head verification attempt
  • archive-2-finding_best-beam/ — earlier beam-search tuning
  • old-experiments/ — scratch / superseded runs
  • reference-papers/ — DDTree, DFlash, DSpark PDFs
  • assets/ — figures and images

Contributors

shreybirmiwal

39 commits

jwlaboratory/sparkling-tree

Official repository for Sparkling-Tree: DSpark + DDTree = BRRRR

0

stars

39

commits

Python

primary language

Aug 6, 2026

updated

jwlabs.vercel.app/post/sparklingtree
speculative-decoding

README

SparklingTree

Frontier speculative decoding. Read more here: https://jwlabs.vercel.app/post/sparklingtree

Demo

Four decoders racing on the same prompt (real H100 timestamps, identical output):

4-way race: AR vs DSpark vs DDTree vs SparklingTree

Head-to-head: autoregressive vs SparklingTree (gsm8k)

AR vs SparklingTree streaming side-by-side

Results

Citable run: seed 1, 6 datasets × 12 prompts, 512 tokens, temp 0, sync ON, compaction ON, C=128, fanout 64, single H100.

Aggregate speedup vs autoregressive, grouped by draft budget

Aggregate speedup vs autoregressive

Draft budgetDFlashDSparkDDTreeSparklingTree
643.15×3.27×4.12×4.29×
1283.15×3.27×4.45×4.58×
2563.15×3.27×4.55×4.71×

DFlash and DSpark are chain drafters, so they don't use the tree budget — their numbers are constant across budgets.

Per-dataset speedup at draft budget 256

Full per-dataset numbers

Each cell is accepted tokens/step · tokens/sec; bold marks the fastest method per row. Autoregressive is the 1.00-accept baseline (~52 tok/s on every dataset).

Budget 256
DatasetAR tok/sDFlashDSparkDDTreeSparklingTree
alpaca51.03.07 · 95.43.66 · 109.94.95 · 152.15.53 · 168.1
gsm8k52.26.71 · 218.07.88 · 242.69.53 · 300.810.72 · 327.5
humaneval52.76.32 · 207.56.41 · 200.29.31 · 286.29.52 · 283.7
math50052.07.80 · 253.67.37 · 230.510.39 · 331.310.22 · 316.6
mbpp52.45.47 · 176.65.77 · 179.88.21 · 252.58.38 · 248.8
mt-bench51.53.31 · 105.83.76 · 114.75.24 · 158.85.87 · 172.9
Aggregate52.05.10 · 163.95.53 · 170.37.67 · 237.18.15 · 245.0
Budget 128
DatasetAR tok/sDFlashDSparkDDTreeSparklingTree
alpaca51.03.07 · 95.43.66 · 109.94.61 · 147.85.40 · 169.0
gsm8k52.26.71 · 218.07.88 · 242.68.99 · 280.910.30 · 311.9
humaneval52.76.32 · 207.56.41 · 200.28.97 · 284.79.13 · 279.8
math50052.07.80 · 253.67.37 · 230.510.14 · 323.99.71 · 302.0
mbpp52.45.47 · 176.65.77 · 179.87.80 · 252.97.88 · 244.7
mt-bench51.53.31 · 105.83.76 · 114.75.02 · 158.05.44 · 167.1
Aggregate52.05.10 · 163.95.53 · 170.37.28 · 231.57.73 · 238.3
Budget 64
DatasetAR tok/sDFlashDSparkDDTreeSparklingTree
alpaca51.03.07 · 95.43.66 · 109.94.46 · 132.75.10 · 149.3
gsm8k52.26.71 · 218.07.88 · 242.68.65 · 268.79.73 · 298.6
humaneval52.76.32 · 207.56.41 · 200.28.19 · 267.78.78 · 273.1
math50052.07.80 · 253.67.37 · 230.59.70 · 309.79.25 · 287.2
mbpp52.45.47 · 176.65.77 · 179.87.60 · 231.67.53 · 224.5
mt-bench51.53.31 · 105.83.76 · 114.74.64 · 145.35.15 · 157.0
Aggregate52.05.10 · 163.95.53 · 170.36.86 · 214.47.34 · 223.4

Figures are generated by assets/make_results_fig.py from these numbers.

Folders

  • harness/ — shared decode core (DDTree, DFlash, DSpark, SparklingTree) + the benchmark runner
  • demo/ — streaming/race demo GIFs and the script that renders them
  • experiment1-harness/ — first end-to-end harness benchmark
  • experiment2-block16/ — fine-tuning DSpark to draft 16 tokens/block + training recipe
  • experiment3-timings/ — per-phase wall-clock timing instrumentation
  • experiment4-faster/ — faster tree builder (the precompute best-first builder)
  • experiment5-final-results/ — head-to-head: DFlash vs DSpark vs DDTree vs SparklingTree
  • archive-1-speedup-w-confidence-head-verification/ — earlier confidence-head verification attempt
  • archive-2-finding_best-beam/ — earlier beam-search tuning
  • old-experiments/ — scratch / superseded runs
  • reference-papers/ — DDTree, DFlash, DSpark PDFs
  • assets/ — figures and images

Contributors

shreybirmiwal

39 commits

Languages

Python

98.2%

HTML

1.5%