|
9 | 9 |
|
10 | 10 | if TYPE_CHECKING: |
11 | 11 | from vllm.config import VllmConfig |
| 12 | + from vllm.v1.kv_offload.abstract import OffloadingManager |
| 13 | + from vllm.v1.kv_offload.backend import Backend |
12 | 14 |
|
13 | 15 | logger = init_logger(__name__) |
14 | 16 |
|
@@ -50,7 +52,55 @@ def create_spec( |
50 | 52 | return spec_cls(config) |
51 | 53 |
|
52 | 54 |
|
| 55 | +class OffloadingManagerFactory: |
| 56 | + """Factory for creating OffloadingManager instances based on eviction policy.""" |
| 57 | + |
| 58 | + _registry: dict[str, Callable[[], type["OffloadingManager"]]] = {} |
| 59 | + |
| 60 | + @classmethod |
| 61 | + def register_manager( |
| 62 | + cls, policy_name: str, module_path: str, class_name: str |
| 63 | + ) -> None: |
| 64 | + """Register an eviction policy manager with lazy-loading module and class name.""" |
| 65 | + if policy_name in cls._registry: |
| 66 | + raise ValueError(f"Policy '{policy_name}' is already registered.") |
| 67 | + |
| 68 | + def loader() -> type["OffloadingManager"]: |
| 69 | + module = importlib.import_module(module_path) |
| 70 | + return getattr(module, class_name) |
| 71 | + |
| 72 | + cls._registry[policy_name] = loader |
| 73 | + |
| 74 | + @classmethod |
| 75 | + def create_manager( |
| 76 | + cls, |
| 77 | + policy_name: str, |
| 78 | + backend: "Backend", |
| 79 | + enable_events: bool = False, |
| 80 | + ) -> "OffloadingManager": |
| 81 | + """ |
| 82 | + Create an OffloadingManager instance based on the eviction policy name. |
| 83 | + """ |
| 84 | + if policy_name not in cls._registry: |
| 85 | + raise ValueError( |
| 86 | + f"Unknown eviction policy: {policy_name}. " |
| 87 | + f"Supported policies: {list(cls._registry.keys())}" |
| 88 | + ) |
| 89 | + |
| 90 | + manager_cls = cls._registry[policy_name]() |
| 91 | + logger.info("Creating offloading manager with policy: %s", policy_name) |
| 92 | + return manager_cls(backend=backend, enable_events=enable_events) |
| 93 | + |
| 94 | + |
53 | 95 | # Register various specs here. |
54 | 96 | OffloadingSpecFactory.register_spec( |
55 | 97 | "CPUOffloadingSpec", "vllm.v1.kv_offload.cpu", "CPUOffloadingSpec" |
56 | 98 | ) |
| 99 | + |
| 100 | +# Register built-in eviction policies here. |
| 101 | +OffloadingManagerFactory.register_manager( |
| 102 | + "lru", "vllm.v1.kv_offload.lru_manager", "LRUOffloadingManager" |
| 103 | +) |
| 104 | +OffloadingManagerFactory.register_manager( |
| 105 | + "arc", "vllm.v1.kv_offload.arc_manager", "ARCOffloadingManager" |
| 106 | +) |
0 commit comments