[Hardware][TPU] Add supports_async_scheduling() method to Executor interface so that it can be extended for Executor implementations. (#36924)

Signed-off-by: Guangxiang Du <gxd@google.com>
This commit is contained in:
gxd3
2026-03-17 21:53:28 -07:00
committed by GitHub
parent f1740006e4
commit a0dd1995c7
5 changed files with 44 additions and 10 deletions

View File

@@ -14,12 +14,35 @@ from vllm.engine.arg_utils import AsyncEngineArgs, EngineArgs
from vllm.sampling_params import SamplingParams
from vllm.v1.engine.async_llm import AsyncLLM
from vllm.v1.engine.llm_engine import LLMEngine
from vllm.v1.executor.abstract import Executor
from vllm.v1.executor.multiproc_executor import MultiprocExecutor
from vllm.v1.executor.uniproc_executor import (
ExecutorWithExternalLauncher,
UniProcExecutor,
)
class Mock: ...
def test_supports_async_scheduling_base_executor():
assert Executor.supports_async_scheduling() is False
def test_supports_async_scheduling_uniproc_executor():
assert UniProcExecutor.supports_async_scheduling() is True
def test_supports_async_scheduling_executor_with_external_launcher():
# ExecutorWithExternalLauncher inherits from UniProcExecutor and does not
# override supports_async_scheduling, so it should return True.
assert ExecutorWithExternalLauncher.supports_async_scheduling() is True
def test_supports_async_scheduling_multiproc_executor():
assert MultiprocExecutor.supports_async_scheduling() is True
class CustomMultiprocExecutor(MultiprocExecutor):
def collective_rpc(
self,

View File

@@ -682,12 +682,11 @@ class VllmConfig:
self.model_config, self.load_config
)
from vllm.v1.executor.abstract import Executor
executor_backend = self.parallel_config.distributed_executor_backend
executor_supports_async_sched = executor_backend in (
"mp",
"uni",
"external_launcher",
)
executor_class = Executor.get_class(self)
executor_supports_async_sched = executor_class.supports_async_scheduling()
if self.scheduler_config.async_scheduling:
# Async scheduling explicitly enabled, hard fail any incompatibilities.
@@ -711,9 +710,7 @@ class VllmConfig:
)
if not executor_supports_async_sched:
raise ValueError(
"Currently, async scheduling only supports `mp`, `uni`, or "
"`external_launcher` distributed executor backend, but you chose "
f"`{executor_backend}`."
f"`{executor_backend}` does not support async scheduling yet."
)
elif self.scheduler_config.async_scheduling is None:
# Enable async scheduling unless there is an incompatible option.
@@ -742,8 +739,7 @@ class VllmConfig:
elif not executor_supports_async_sched:
logger.warning_once(
"Async scheduling will be disabled because it is not supported "
"with the `%s` distributed executor backend (only `mp`, `uni`, and "
"`external_launcher` are supported).",
"with the `%s` distributed executor backend. ",
executor_backend,
scope="local",
)

View File

@@ -353,6 +353,13 @@ class Executor(ABC):
) -> None:
raise NotImplementedError
@classmethod
def supports_async_scheduling(cls) -> bool:
"""
Whether the executor supports async scheduling.
"""
return False
from vllm.v1.executor.uniproc_executor import ( # noqa: E402
ExecutorWithExternalLauncher as _ExecutorWithExternalLauncher,

View File

@@ -487,6 +487,10 @@ class MultiprocExecutor(Executor):
* self.parallel_config.prefill_context_parallel_size
)
@classmethod
def supports_async_scheduling(cls) -> bool:
return True
@dataclass
class UnreadyWorkerProcHandle:

View File

@@ -134,6 +134,10 @@ class UniProcExecutor(Executor):
if worker := self.driver_worker:
worker.shutdown()
@classmethod
def supports_async_scheduling(cls) -> bool:
return True
class ExecutorWithExternalLauncher(UniProcExecutor):
"""An executor that uses external launchers to launch engines,