@@ -222,7 +222,6 @@ def select_draft_token_budget(
222222 num_required_target_tokens : int ,
223223 budget_frac : float = 1.0 ,
224224 sps_table : np .ndarray | None = None ,
225- min_survival : float = 0.0 ,
226225) -> int :
227226 """Choose the scalar draft budget from stale prefix scores.
228227
@@ -232,9 +231,6 @@ def select_draft_token_budget(
232231 """
233232 flat = survival .reshape (- 1 )
234233 scores = flat [np .isfinite (flat )]
235- if min_survival > 0.0 :
236- return int ((scores >= min_survival ).sum ())
237-
238234 scores = np .sort (scores )[::- 1 ]
239235 total = scores .size
240236 max_admissions = min (int (total * budget_frac ) + 1 , total )
@@ -314,7 +310,6 @@ def __init__(
314310 self .copy_stream = torch .cuda .Stream (device )
315311 self .varlen_spec_decode = False
316312
317- self .min_survival_probability = speculative_config .dspark_confidence_threshold
318313 self .capacity_budget_frac = speculative_config .dspark_budget_frac
319314 sps_curve = speculative_config .dspark_sps_curve
320315 self .wants_auto_sps_curve = sps_curve == "auto"
@@ -740,7 +735,6 @@ def _plan_draft_token_budget(
740735 num_required_target_tokens = int (num_required_target_tokens_per_req .sum ()),
741736 budget_frac = self .capacity_budget_frac ,
742737 sps_table = self .sps_table_np ,
743- min_survival = self .min_survival_probability ,
744738 )
745739 budget = min (budget , int (valid_draft_tokens_per_req .sum ()))
746740 return int (get_tp_group ().broadcast_object (budget , src = 0 ))
@@ -764,45 +758,47 @@ def _assign_draft_token_budget(
764758 capacities .clamp_ (max = self .forced_capacity )
765759 return capacities
766760
767- temperatures : np .ndarray | float = 1.0
768- if self .online_sts is not None :
769- temperatures = self .online_sts .temperatures
770- self ._temperatures_np [:] = temperatures
771- self ._temperatures .copy_ (self ._temperatures_cpu , non_blocking = True )
772- _compute_prefix_survival_kernel [(num_reqs ,)](
773- self ._confidence_logits ,
774- self ._confidence_logits .stride (0 ),
775- input_batch .idx_mapping ,
776- self ._valid_draft_tokens ,
777- self ._temperatures ,
778- self ._survival ,
779- NUM_STEPS = self .num_speculative_steps ,
780- )
781- num_candidates = num_reqs * self .num_speculative_steps
782- torch .sort (
783- self ._survival [:num_reqs ].flatten (),
784- descending = True ,
785- stable = True ,
786- out = (
787- self ._sorted_survival [:num_candidates ],
788- self ._sorted_indices [:num_candidates ],
789- ),
790- )
791- capacities .zero_ ()
792- if draft_token_budget > 0 :
793- admitted = self ._sorted_indices [:draft_token_budget ]
794- torch .div (
795- admitted ,
796- self .num_speculative_steps ,
797- rounding_mode = "floor" ,
798- out = admitted ,
761+ tp_group = get_tp_group ()
762+ if tp_group .rank_in_group == 0 :
763+ temperatures : np .ndarray | float = 1.0
764+ if self .online_sts is not None :
765+ temperatures = self .online_sts .temperatures
766+ self ._temperatures_np [:] = temperatures
767+ self ._temperatures .copy_ (self ._temperatures_cpu , non_blocking = True )
768+ _compute_prefix_survival_kernel [(num_reqs ,)](
769+ self ._confidence_logits ,
770+ self ._confidence_logits .stride (0 ),
771+ input_batch .idx_mapping ,
772+ self ._valid_draft_tokens ,
773+ self ._temperatures ,
774+ self ._survival ,
775+ NUM_STEPS = self .num_speculative_steps ,
799776 )
800- capacities .scatter_add_ (
801- 0 ,
802- admitted ,
803- self ._capacity_ones [:draft_token_budget ],
777+ num_candidates = num_reqs * self .num_speculative_steps
778+ torch .sort (
779+ self ._survival [:num_reqs ].flatten (),
780+ descending = True ,
781+ stable = True ,
782+ out = (
783+ self ._sorted_survival [:num_candidates ],
784+ self ._sorted_indices [:num_candidates ],
785+ ),
804786 )
805- get_tp_group ().broadcast (capacities , src = 0 )
787+ capacities .zero_ ()
788+ if draft_token_budget > 0 :
789+ admitted = self ._sorted_indices [:draft_token_budget ]
790+ torch .div (
791+ admitted ,
792+ self .num_speculative_steps ,
793+ rounding_mode = "floor" ,
794+ out = admitted ,
795+ )
796+ capacities .scatter_add_ (
797+ 0 ,
798+ admitted ,
799+ self ._capacity_ones [:draft_token_budget ],
800+ )
801+ tp_group .broadcast (capacities , src = 0 )
806802 return capacities
807803
808804 def warmup (self , input_buffers : "InputBuffers" ) -> None :
@@ -1116,7 +1112,7 @@ def __init__(self, *args: Any, **kwargs: Any):
11161112 self .wants_auto_sps_curve = False
11171113 logger .info_once (
11181114 "DSpark auto SPS profiling requires compact verification; "
1119- "masked verification will use the configured threshold or budget."
1115+ "masked verification will use the configured budget."
11201116 )
11211117
11221118 def _prepare_forward_skip_mask (
0 commit comments