Skip to content

Perf: A/B DSpark speculative depth k=7 vs k=5 for DeepSeek cycle (AICAD runs k=7) #191

Description

@Saolence

Summary

A/B the DSpark speculative depth for the DeepSeek cycle profiles: k=7 vs the current k=5. Speculative decoding is the only mechanism that amortises the ~87 per-step allreduce latency on this topology (more draft tokens per forward pass = fewer collectives per output token), so a higher k that keeps acceptance high directly raises decode throughput. The AICAD TP4 production deployment runs DSpark at k=7 static (no ladder) with a smoothly decaying acceptance curve (0.94/0.86/0.77/0.69/0.61/0.49/0.35); SparkRing ships k=5.

Evidence

  • AICAD production config (same 0731 DSpark checkpoint, 4× DGX Spark): dspark k=7 静态(无 ladder), acceptance 0.94…0.35 smooth decay — see config/production-nccl-env.md in https://github.com/luxingcom/aicad-nccl-optimization.
  • Their analysis: decode is latency-bound on ~87 small allreduces/step; wider speculation is the "already working" mechanism that enlarges each collective and dilutes per-step latency.
  • SparkRing's current Mean acceptance length on the deployed cycle is ~3.23 at k=5 (measured 2026-09-03). If k=7 holds a comparable per-position acceptance curve, decode could gain roughly +10–30% (7 vs 5 draft slots × preserved acceptance).

Current state in sparkring

  • DeepSeek env templates: NUM_SPECULATIVE_TOKENS=5.
  • --speculative-config '{"method":"dspark","num_speculative_tokens":5,"moe_backend":"b12x"}'.

Proposed change

Pure configuration A/B — no code change:

  1. Set NUM_SPECULATIVE_TOKENS=7 in all four cycle rank envs and relaunch.
  2. First verify the checkpoint/image accepts k=7: the 0731 DSpark checkpoint's dspark_block_size is 5 (k<5 silently truncates; the constraint above 5 must be checked on the sparkring 0.27 image — the AICAD lane ran k=7 on vLLM 0.26, so it is feasible on this checkpoint).
  3. Measure Mean acceptance length + decode c1/c4/c8 before/after (nonce-fronted, same benchmark).

If k=7 is rejected at startup, fall back to testing a k-ladder (e.g. 5,7) or k=6.

Reference

Risks / notes

  • Zero code risk; one relaunch per arm.
  • Watch startup logs for a dspark block-size rejection before benchmarking.
  • Keep decode benchmarks nonce-fronted so prefix caching cannot inflate numbers.

Verification

  • Startup succeeds at k=7; log shows speculative depth 7.
  • Mean acceptance length and decode c1/c4/c8 aggregate at k=7 vs k=5 (same benchmark script, ≥3 reps each).
  • If acceptance per position does not decay meaningfully at k=7, promote; otherwise revert to k=5.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions