fix(hicache): add retry logic for MooncakeStore warmup (#17195)
Co-authored-by: Teng Ma <sima.mt@alibaba-inc.com> Co-authored-by: Zhiqiang Xie <xiezhq@stanford.edu>
This commit is contained in:
co-authored by
Teng Ma
Zhiqiang Xie
parent
3177fa7951
commit
3066ba8167
@@ -389,13 +389,15 @@ class MooncakeStore(HiCacheStorage, MooncakeBaseStore):
|
|||||||
)
|
)
|
||||||
logger.info("Mooncake store setup successfully.")
|
logger.info("Mooncake store setup successfully.")
|
||||||
|
|
||||||
|
self.local_rank = (
|
||||||
|
storage_config.tp_rank if storage_config is not None else 0
|
||||||
|
)
|
||||||
self.warmup()
|
self.warmup()
|
||||||
logger.info("Mooncake store warmup successfully.")
|
logger.info("Mooncake store warmup successfully.")
|
||||||
|
|
||||||
self.enable_storage_metrics = False
|
self.enable_storage_metrics = False
|
||||||
if storage_config is not None:
|
if storage_config is not None:
|
||||||
self.is_mla_backend = storage_config.is_mla_model
|
self.is_mla_backend = storage_config.is_mla_model
|
||||||
self.local_rank = storage_config.tp_rank
|
|
||||||
self.pp_rank = storage_config.pp_rank
|
self.pp_rank = storage_config.pp_rank
|
||||||
self.pp_size = storage_config.pp_size
|
self.pp_size = storage_config.pp_size
|
||||||
self.attn_cp_rank = storage_config.attn_cp_rank
|
self.attn_cp_rank = storage_config.attn_cp_rank
|
||||||
@@ -483,7 +485,26 @@ class MooncakeStore(HiCacheStorage, MooncakeBaseStore):
|
|||||||
def warmup(self):
|
def warmup(self):
|
||||||
warmup_key = "sglang_mooncake_store_warmup_key" + uuid.uuid4().hex
|
warmup_key = "sglang_mooncake_store_warmup_key" + uuid.uuid4().hex
|
||||||
warmup_value = bytes(4 * 1024) # 4 KB
|
warmup_value = bytes(4 * 1024) # 4 KB
|
||||||
assert self.store.put(warmup_key, warmup_value) == 0
|
|
||||||
|
# Retry logic to handle Transfer Engine startup race condition
|
||||||
|
max_retries = 10
|
||||||
|
retry_delay = 1.0 # seconds
|
||||||
|
|
||||||
|
for attempt in range(max_retries):
|
||||||
|
ret = self.store.put(warmup_key, warmup_value)
|
||||||
|
if ret == 0:
|
||||||
|
break
|
||||||
|
logger.warning(
|
||||||
|
f"[TP{self.local_rank}] Warmup put failed (attempt {attempt + 1}/{max_retries}), "
|
||||||
|
f"ret={ret}, retrying in {retry_delay}s..."
|
||||||
|
)
|
||||||
|
time.sleep(retry_delay)
|
||||||
|
else:
|
||||||
|
raise RuntimeError(
|
||||||
|
f"[TP{self.local_rank}] Warmup put failed after {max_retries} attempts, "
|
||||||
|
"Transfer Engine might not be ready"
|
||||||
|
)
|
||||||
|
|
||||||
assert self.store.is_exist(warmup_key) == 1
|
assert self.store.is_exist(warmup_key) == 1
|
||||||
assert self.store.get(warmup_key) == warmup_value
|
assert self.store.get(warmup_key) == warmup_value
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user