[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: