Move hash utils out of hicache_storage to break CUDA import chain (#22214)
This commit is contained in:
@@ -430,7 +430,7 @@ class HiCacheController:
|
|||||||
# Rollback-safe init: if creation fails, keep controller state consistent
|
# Rollback-safe init: if creation fails, keep controller state consistent
|
||||||
# for future attach attempts.
|
# for future attach attempts.
|
||||||
self.storage_backend_type = storage_backend
|
self.storage_backend_type = storage_backend
|
||||||
from sglang.srt.mem_cache.hicache_storage import get_hash_str
|
from sglang.srt.mem_cache.utils import get_hash_str
|
||||||
|
|
||||||
self.get_hash_str = get_hash_str
|
self.get_hash_str = get_hash_str
|
||||||
self.storage_config = self._generate_storage_config(
|
self.storage_config = self._generate_storage_config(
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import hashlib
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
@@ -14,37 +13,6 @@ from sglang.srt.mem_cache.memory_pool_host import HostKVCache
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def get_hash_str(token_ids: List[int], prior_hash: str = None) -> str:
|
|
||||||
hasher = hashlib.sha256()
|
|
||||||
|
|
||||||
if prior_hash:
|
|
||||||
hasher.update(bytes.fromhex(prior_hash))
|
|
||||||
|
|
||||||
for t in token_ids:
|
|
||||||
if isinstance(t, tuple):
|
|
||||||
# EAGLE bigram mode: hash both elements to uniquely identify the bigram
|
|
||||||
for elem in t:
|
|
||||||
hasher.update(elem.to_bytes(4, byteorder="little", signed=False))
|
|
||||||
else:
|
|
||||||
# Regular mode: single integer token
|
|
||||||
hasher.update(t.to_bytes(4, byteorder="little", signed=False))
|
|
||||||
|
|
||||||
return hasher.hexdigest()
|
|
||||||
|
|
||||||
|
|
||||||
def hash_str_to_int64(hash_str: str) -> int:
|
|
||||||
"""Convert SHA256 hex string to signed 64-bit integer for events.
|
|
||||||
|
|
||||||
Takes first 16 hex characters (64 bits) and converts to signed int64 range.
|
|
||||||
"""
|
|
||||||
# Take first 16 hex chars to get 64-bit value
|
|
||||||
uint64_val = int(hash_str[:16], 16)
|
|
||||||
# Convert to signed int64 range [-2^63, 2^63-1]
|
|
||||||
if uint64_val >= 2**63:
|
|
||||||
return uint64_val - 2**64
|
|
||||||
return uint64_val
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class HiCacheStorageConfig:
|
class HiCacheStorageConfig:
|
||||||
tp_rank: int
|
tp_rank: int
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ from sglang.srt.mem_cache.evict_policy import (
|
|||||||
PriorityStrategy,
|
PriorityStrategy,
|
||||||
SLRUStrategy,
|
SLRUStrategy,
|
||||||
)
|
)
|
||||||
from sglang.srt.mem_cache.hicache_storage import get_hash_str, hash_str_to_int64
|
from sglang.srt.mem_cache.utils import get_hash_str, hash_str_to_int64
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from sglang.srt.managers.schedule_batch import Req
|
from sglang.srt.managers.schedule_batch import Req
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
"""Common utilities."""
|
"""Common utilities."""
|
||||||
|
|
||||||
|
import hashlib
|
||||||
from typing import Any, List, Optional, Tuple
|
from typing import Any, List, Optional, Tuple
|
||||||
|
|
||||||
import torch
|
import torch
|
||||||
@@ -359,3 +360,32 @@ def convert_to_bigram_key(tokens: List[int]) -> List[Tuple[int, int]]:
|
|||||||
if len(tokens) < 2:
|
if len(tokens) < 2:
|
||||||
return []
|
return []
|
||||||
return [(tokens[i], tokens[i + 1]) for i in range(len(tokens) - 1)]
|
return [(tokens[i], tokens[i + 1]) for i in range(len(tokens) - 1)]
|
||||||
|
|
||||||
|
|
||||||
|
def get_hash_str(token_ids: List[int], prior_hash: Optional[str] = None) -> str:
|
||||||
|
hasher = hashlib.sha256()
|
||||||
|
|
||||||
|
if prior_hash:
|
||||||
|
hasher.update(bytes.fromhex(prior_hash))
|
||||||
|
|
||||||
|
for t in token_ids:
|
||||||
|
if isinstance(t, tuple):
|
||||||
|
# EAGLE bigram mode: hash both elements to uniquely identify the bigram
|
||||||
|
for elem in t:
|
||||||
|
hasher.update(elem.to_bytes(4, byteorder="little", signed=False))
|
||||||
|
else:
|
||||||
|
# Regular mode: single integer token
|
||||||
|
hasher.update(t.to_bytes(4, byteorder="little", signed=False))
|
||||||
|
|
||||||
|
return hasher.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
|
def hash_str_to_int64(hash_str: str) -> int:
|
||||||
|
"""Convert SHA256 hex string to signed 64-bit integer for events.
|
||||||
|
|
||||||
|
Takes first 16 hex characters (64 bits) and converts to signed int64 range.
|
||||||
|
"""
|
||||||
|
uint64_val = int(hash_str[:16], 16)
|
||||||
|
if uint64_val >= 2**63:
|
||||||
|
return uint64_val - 2**64
|
||||||
|
return uint64_val
|
||||||
|
|||||||
Reference in New Issue
Block a user