diff --git a/python/sglang/srt/managers/data_parallel_controller.py b/python/sglang/srt/managers/data_parallel_controller.py index 3ac82063f..73db1f498 100644 --- a/python/sglang/srt/managers/data_parallel_controller.py +++ b/python/sglang/srt/managers/data_parallel_controller.py @@ -98,7 +98,7 @@ class DPBudget: ) self.total_tokens[load.dp_rank] = load.num_total_tokens - def dispatch(self, method: LoadBalanceMethod): + def dispatch(self, method: LoadBalanceMethod, estimated_tokens: int = 0): if method == LoadBalanceMethod.TOTAL_REQUESTS: target_rank = self.total_requests.index(min(self.total_requests)) elif method == LoadBalanceMethod.TOTAL_TOKENS: @@ -112,6 +112,7 @@ class DPBudget: # Increment the load of that worker by one as a heuristic self.total_requests[target_rank] += 1 + self.total_tokens[target_rank] += estimated_tokens return target_rank @@ -584,7 +585,10 @@ class DataParallelController: def total_tokens_scheduler(self, req: Req): if self.maybe_external_dp_rank_routing(req): return - target_worker = self.dp_budget.dispatch(LoadBalanceMethod.TOTAL_TOKENS) + estimated_tokens = len(req.input_ids) + target_worker = self.dp_budget.dispatch( + LoadBalanceMethod.TOTAL_TOKENS, estimated_tokens=estimated_tokens + ) self.workers[target_worker].send_pyobj(req) def event_loop(self):