[Core] Skip JIT monitor when JIT warmup is disabled (#58590)
Signed-off-by: Nick Hill <nickhill123@gmail.com> Co-authored-by: Kimi Code <noreply@moonshot.cn>
Nick Hill committed
Sep 24, 2026 at 12:08 UTC
e30559b58fe8dc1f688de3c16a910ca6108a2c7d
2 files changed
+44
-6
tests/v1/worker/test_gpu_worker.py
+29
@@ -258,3 +258,32 @@ def test_execute_model_waits_previous_pp_send_before_forward(
258
259
assert log == ["wait:prev-tensor", "forward", "isend"]
260
assert worker._pp_send_work == [tensor_handle]
261
+
262
+
263
+def test_jit_monitor_activation_follows_enable_jit_warmup(
264
+ monkeypatch: pytest.MonkeyPatch,
265
+):
266
+ """The post-warmup JIT monitor must stay off when JIT warmup is disabled
267
+ (e.g. by enforce_eager): runtime compilation is then expected, and
268
+ warning/erroring on it would be noise."""
269
+ from vllm.utils import jit_monitor
270
+
271
+ calls = []
272
+ monkeypatch.setattr(jit_monitor, "activate", lambda **kwargs: calls.append(kwargs))
273
+
274
+ def worker(enable_jit_warmup):
275
+ return SimpleNamespace(
276
+ vllm_config=SimpleNamespace(
277
+ kernel_config=SimpleNamespace(enable_jit_warmup=enable_jit_warmup)
278
+ ),
279
+ observability_config=SimpleNamespace(
280
+ jit_monitor_mode="warn", jit_monitor_verbose=False
281
+ ),
282
+ )
283
+
284
+ gpu_worker.Worker._maybe_activate_jit_monitor(worker(True))
285
+ assert calls == [{"mode": "warn", "verbose": False}]
286
+
287
+ calls.clear()
288
+ gpu_worker.Worker._maybe_activate_jit_monitor(worker(False))
289
+ assert calls == []
vllm/v1/worker/gpu_worker.py
+15
-6
@@ -966,12 +966,7 @@ class Worker(WorkerBase):
966
967
# All warmup is done — start monitoring for unexpected JIT
968
# compilations that would cause latency spikes during inference.
969
- from vllm.utils.jit_monitor import activate as activate_jit_monitor
970
-
971
- activate_jit_monitor(
972
- mode=self.observability_config.jit_monitor_mode,
973
- verbose=self.observability_config.jit_monitor_verbose,
974
- )
969
+ self._maybe_activate_jit_monitor()
970
971
# Freeze the worker heap so the GC won't scan static objects
972
# (model weights, KV caches, CUDA graphs) during inference.
@@ -987,6 +982,20 @@ class Worker(WorkerBase):
982
encoder=self.compilation_config.encoder_compilation_time,
983
)
984
985
+ def _maybe_activate_jit_monitor(self) -> None:
986
+ # When JIT warmup is disabled (e.g. enforce_eager), runtime JIT
987
+ # compilation is expected, so monitoring would only produce noise
988
+ # (or spurious errors in "error" mode).
989
+ if not self.vllm_config.kernel_config.enable_jit_warmup:
990
+ return
991
+
992
+ from vllm.utils.jit_monitor import activate as activate_jit_monitor
993
+
994
+ activate_jit_monitor(
995
+ mode=self.observability_config.jit_monitor_mode,
996
+ verbose=self.observability_config.jit_monitor_verbose,
997
+ )
998
+
999
def _get_cudagraph_capture_context(self) -> AbstractContextManager[None]:
1000
"""Let the configured profiler observe CUDA graph capture."""
1001
if not self.use_v2_model_runner: