[HiCache] feat: add more eviction policy (#11506)
This commit is contained in:
@@ -21,3 +21,18 @@ class LRUStrategy(EvictionStrategy):
|
|||||||
class LFUStrategy(EvictionStrategy):
|
class LFUStrategy(EvictionStrategy):
|
||||||
def get_priority(self, node: "TreeNode") -> Tuple[int, float]:
|
def get_priority(self, node: "TreeNode") -> Tuple[int, float]:
|
||||||
return (node.hit_count, node.last_access_time)
|
return (node.hit_count, node.last_access_time)
|
||||||
|
|
||||||
|
|
||||||
|
class FIFOStrategy(EvictionStrategy):
|
||||||
|
def get_priority(self, node: "TreeNode") -> float:
|
||||||
|
return node.creation_time
|
||||||
|
|
||||||
|
|
||||||
|
class MRUStrategy(EvictionStrategy):
|
||||||
|
def get_priority(self, node: "TreeNode") -> float:
|
||||||
|
return -node.last_access_time
|
||||||
|
|
||||||
|
|
||||||
|
class FILOStrategy(EvictionStrategy):
|
||||||
|
def get_priority(self, node: "TreeNode") -> float:
|
||||||
|
return -node.creation_time
|
||||||
|
|||||||
@@ -34,7 +34,14 @@ from sglang.srt.disaggregation.kv_events import (
|
|||||||
)
|
)
|
||||||
from sglang.srt.mem_cache.allocator import BaseTokenToKVPoolAllocator
|
from sglang.srt.mem_cache.allocator import BaseTokenToKVPoolAllocator
|
||||||
from sglang.srt.mem_cache.base_prefix_cache import BasePrefixCache, MatchResult
|
from sglang.srt.mem_cache.base_prefix_cache import BasePrefixCache, MatchResult
|
||||||
from sglang.srt.mem_cache.evict_policy import EvictionStrategy, LFUStrategy, LRUStrategy
|
from sglang.srt.mem_cache.evict_policy import (
|
||||||
|
EvictionStrategy,
|
||||||
|
FIFOStrategy,
|
||||||
|
FILOStrategy,
|
||||||
|
LFUStrategy,
|
||||||
|
LRUStrategy,
|
||||||
|
MRUStrategy,
|
||||||
|
)
|
||||||
from sglang.srt.mem_cache.memory_pool import ReqToTokenPool
|
from sglang.srt.mem_cache.memory_pool import ReqToTokenPool
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@@ -76,6 +83,7 @@ class TreeNode:
|
|||||||
self.value: Optional[torch.Tensor] = None
|
self.value: Optional[torch.Tensor] = None
|
||||||
self.lock_ref = 0
|
self.lock_ref = 0
|
||||||
self.last_access_time = time.monotonic()
|
self.last_access_time = time.monotonic()
|
||||||
|
self.creation_time = time.monotonic()
|
||||||
|
|
||||||
self.hit_count = 0
|
self.hit_count = 0
|
||||||
# indicating the node is locked to protect from eviction
|
# indicating the node is locked to protect from eviction
|
||||||
@@ -216,9 +224,15 @@ class RadixCache(BasePrefixCache):
|
|||||||
self.eviction_strategy: EvictionStrategy = LRUStrategy()
|
self.eviction_strategy: EvictionStrategy = LRUStrategy()
|
||||||
elif eviction_policy.lower() == "lfu":
|
elif eviction_policy.lower() == "lfu":
|
||||||
self.eviction_strategy: EvictionStrategy = LFUStrategy()
|
self.eviction_strategy: EvictionStrategy = LFUStrategy()
|
||||||
|
elif eviction_policy.lower() == "fifo":
|
||||||
|
self.eviction_strategy: EvictionStrategy = FIFOStrategy()
|
||||||
|
elif eviction_policy.lower() == "mru":
|
||||||
|
self.eviction_strategy: EvictionStrategy = MRUStrategy()
|
||||||
|
elif eviction_policy.lower() == "filo":
|
||||||
|
self.eviction_strategy: EvictionStrategy = FILOStrategy()
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Unknown eviction policy: {eviction_policy}. Supported policies: 'lru', 'lfu'."
|
f"Unknown eviction policy: {eviction_policy}. Supported policies: 'lru', 'lfu', 'fifo', 'mru', 'filo'."
|
||||||
)
|
)
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user