diff --git a/verl/workers/config/rollout.py b/verl/workers/config/rollout.py index 19cf7f5e322..549f357d2e1 100644 --- a/verl/workers/config/rollout.py +++ b/verl/workers/config/rollout.py @@ -13,9 +13,12 @@ # limitations under the License. import warnings from dataclasses import dataclass, field +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as package_version from typing import Optional from omegaconf import MISSING, DictConfig, OmegaConf +from packaging import version as vs from verl.base_config import BaseConfig from verl.utils.profiler import ProfilerConfig @@ -35,6 +38,18 @@ ] +_VLLM_MM_PROCESSOR_CACHE_FIX_VERSION = "0.22.0" + + +def _should_disable_vllm_mm_processor_cache() -> bool: + try: + vllm_version = package_version("vllm") + except PackageNotFoundError: + return True + + return vs.parse(vllm_version) < vs.parse(_VLLM_MM_PROCESSOR_CACHE_FIX_VERSION) + + @dataclass class SamplingConfig(BaseConfig): temperature: float = 1.0 @@ -274,6 +289,8 @@ class RolloutConfig(BaseConfig): def __post_init__(self): """Validate the rollout config""" + self._maybe_disable_vllm_mm_processor_cache() + # Deprecation warning for mode field - only async mode is supported if self.mode == "sync": raise ValueError( @@ -339,3 +356,18 @@ def __post_init__(self): raise ValueError( f"rollout.disaggregation.enabled=True requires rollout.name in ('sglang', 'vllm'); got {self.name!r}." ) + + def _maybe_disable_vllm_mm_processor_cache(self) -> None: + if self.name != "vllm" or not _should_disable_vllm_mm_processor_cache(): + return + + engine_kwargs = dict(self.engine_kwargs or {}) + vllm_engine_kwargs = dict(engine_kwargs.get("vllm", {}) or {}) + if "mm_processor_cache_gb" in vllm_engine_kwargs: + return + + # Disable caching for vLLM < 0.22.0 to work around vLLM multimodal processor cache desync across pause/resume. + # See: https://github.com/vllm-project/vllm/pull/43001/ + vllm_engine_kwargs["mm_processor_cache_gb"] = 0 + engine_kwargs["vllm"] = vllm_engine_kwargs + self.engine_kwargs = engine_kwargs