[XPU] Use encoder-only model runner for EC producer instances (#59320)

Signed-off-by: zhenwei-intel <zhenwei.liu@intel.com>

liuzhenwei committed Sep 30, 2026 at 13:43 UTC 6945d142e51cb9b4ea1ad0d054280b80734339ae
2 files changed +26 -2
vllm/v1/worker/xpu_model_runner.py
+13
@@ -11,6 +11,7 @@ from vllm.v1.worker.gpu.model_runner import (
11 GPUModelRunner as GPUModelRunnerV2,
12 )
13 from vllm.v1.worker.gpu_model_runner import GPUModelRunner
14 +from vllm.v1.worker.mm_encoder_model_runner import MMEncoderModelRunner
15
16
17 class XPUModelRunner(GPUModelRunner):
@@ -39,6 +40,18 @@ class XPUModelRunnerV2(GPUModelRunnerV2):
40 super().__init__(vllm_config, device)
41
42
43 +class XPUMMEncoderModelRunner(MMEncoderModelRunner):
44 + """An encoder-only model runner for XPU devices."""
45 +
46 + def __init__(
47 + self,
48 + vllm_config: VllmConfig,
49 + device: torch.device,
50 + ):
51 + with _torch_cuda_wrapper():
52 + super().__init__(vllm_config, device)
53 +
54 +
55 @contextmanager
56 def _torch_cuda_wrapper():
57 # Replace cuda APIs with xpu APIs. Each callable gets its own functools.partial
vllm/v1/worker/xpu_worker.py
+13 -2
@@ -13,7 +13,11 @@ from vllm.utils.torch_utils import set_random_seed
13 from vllm.v1.utils import report_usage_stats
14 from vllm.v1.worker.gpu_worker import Worker, init_worker_distributed_environment
15 from vllm.v1.worker.workspace import init_workspace_manager
16 -from vllm.v1.worker.xpu_model_runner import XPUModelRunner, XPUModelRunnerV2
16 +from vllm.v1.worker.xpu_model_runner import (
17 + XPUMMEncoderModelRunner,
18 + XPUModelRunner,
19 + XPUModelRunnerV2,
20 +)
21
22 from .utils import request_memory
23
@@ -215,7 +219,14 @@ class XPUWorker(Worker):
219 init_workspace_manager(self.device, num_ubatches)
220
221 # Construct the model runner
218 - model_runner = XPUModelRunnerV2 if self.use_v2_model_runner else XPUModelRunner
222 + if self.use_v2_model_runner:
223 + model_runner = (
224 + XPUMMEncoderModelRunner
225 + if self.vllm_config.is_mm_encoder_only
226 + else XPUModelRunnerV2
227 + )
228 + else:
229 + model_runner = XPUModelRunner # type: ignore[assignment]
230 self.model_runner = model_runner( # type: ignore
231 self.vllm_config, self.device
232 )