Use monotonic clock for interval measurement (#6211)
Signed-off-by: Lifu Huang <lifu.hlf@gmail.com>
This commit is contained in:
@@ -348,8 +348,8 @@ class Scheduler(
|
||||
self.forward_ct_decode = 0
|
||||
self.num_generated_tokens = 0
|
||||
self.num_prefill_tokens = 0
|
||||
self.last_decode_stats_tic = time.time()
|
||||
self.last_prefill_stats_tic = time.time()
|
||||
self.last_decode_stats_tic = time.perf_counter()
|
||||
self.last_prefill_stats_tic = time.perf_counter()
|
||||
self.return_health_check_ct = 0
|
||||
self.current_stream = torch.get_device_module(self.device).current_stream()
|
||||
if self.device == "cpu":
|
||||
@@ -1032,13 +1032,13 @@ class Scheduler(
|
||||
add_to_grammar_queue = True
|
||||
|
||||
if add_to_grammar_queue:
|
||||
req.queue_time_start = time.time()
|
||||
req.queue_time_start = time.perf_counter()
|
||||
self.grammar_queue.append(req)
|
||||
else:
|
||||
self._add_request_to_queue(req)
|
||||
|
||||
def _add_request_to_queue(self, req: Req):
|
||||
req.queue_time_start = time.time()
|
||||
req.queue_time_start = time.perf_counter()
|
||||
if self.disaggregation_mode == DisaggregationMode.PREFILL:
|
||||
self.disagg_prefill_bootstrap_queue.add(req)
|
||||
elif self.disaggregation_mode == DisaggregationMode.DECODE:
|
||||
@@ -1085,7 +1085,7 @@ class Scheduler(
|
||||
req.finished_reason = FINISH_ABORT(
|
||||
error_msg, HTTPStatus.BAD_REQUEST, "BadRequestError"
|
||||
)
|
||||
req.queue_time_start = time.time()
|
||||
req.queue_time_start = time.perf_counter()
|
||||
self.waiting_queue.append(req)
|
||||
return
|
||||
|
||||
@@ -1109,8 +1109,8 @@ class Scheduler(
|
||||
can_run_list: List[Req],
|
||||
running_bs: int,
|
||||
):
|
||||
gap_latency = time.time() - self.last_prefill_stats_tic
|
||||
self.last_prefill_stats_tic = time.time()
|
||||
gap_latency = time.perf_counter() - self.last_prefill_stats_tic
|
||||
self.last_prefill_stats_tic = time.perf_counter()
|
||||
self.last_input_throughput = self.num_prefill_tokens / gap_latency
|
||||
self.num_prefill_tokens = 0
|
||||
|
||||
@@ -1160,8 +1160,8 @@ class Scheduler(
|
||||
):
|
||||
batch = running_batch or self.running_batch
|
||||
|
||||
gap_latency = time.time() - self.last_decode_stats_tic
|
||||
self.last_decode_stats_tic = time.time()
|
||||
gap_latency = time.perf_counter() - self.last_decode_stats_tic
|
||||
self.last_decode_stats_tic = time.perf_counter()
|
||||
self.last_gen_throughput = self.num_generated_tokens / gap_latency
|
||||
self.num_generated_tokens = 0
|
||||
num_running_reqs = len(batch.reqs)
|
||||
@@ -1245,7 +1245,7 @@ class Scheduler(
|
||||
if (
|
||||
self.enable_metrics
|
||||
and self.attn_tp_rank == 0
|
||||
and time.time() > self.metrics_collector.last_log_time + 30
|
||||
and time.perf_counter() > self.metrics_collector.last_log_time + 30
|
||||
):
|
||||
# During idle time, also collect metrics every 30 seconds.
|
||||
num_used = self.max_total_num_tokens - (
|
||||
@@ -1410,7 +1410,7 @@ class Scheduler(
|
||||
if self.enable_metrics:
|
||||
# only record queue time when enable_metrics is True to avoid overhead
|
||||
for req in can_run_list:
|
||||
req.queue_time_end = time.time()
|
||||
req.queue_time_end = time.perf_counter()
|
||||
|
||||
self.waiting_queue = [
|
||||
x for x in self.waiting_queue if x not in set(can_run_list)
|
||||
@@ -1783,10 +1783,10 @@ class Scheduler(
|
||||
def watchdog_thread(self):
|
||||
"""A watch dog thread that will try to kill the server itself if one forward batch takes too long."""
|
||||
self.watchdog_last_forward_ct = 0
|
||||
self.watchdog_last_time = time.time()
|
||||
self.watchdog_last_time = time.perf_counter()
|
||||
|
||||
while True:
|
||||
current = time.time()
|
||||
current = time.perf_counter()
|
||||
if self.cur_batch is not None:
|
||||
if self.watchdog_last_forward_ct == self.forward_ct:
|
||||
if current > self.watchdog_last_time + self.watchdog_timeout:
|
||||
|
||||
Reference in New Issue
Block a user