Files
FastDeploy/fastdeploy/eplb/utils.py
chenjian f83d0cf127 [Feature] Support eplb for fd (#4599)
* support eplb

* support eplb

---------

Co-authored-by: kevin <chengyf112@gmail.com>
2025-11-03 14:08:15 +08:00

61 lines
1.9 KiB
Python

"""eplb utilities"""
import json
import os
import time
from enum import Enum
class RedundantExpertWorkload:
"""Redundant Expert Workload"""
def __init__(self, redundant_expert_meta_dir="/tmp/redundant_expert_meta"):
self.update_timestamp = time.time()
self.tokens_per_expert_stats_list = None
self.ep_rank_to_expert_id_list = None
self.expert_id_to_ep_rank_array = None
self.expert_in_rank_num_list = None
self.cost_milliseconds = 0
self.meta_file_name = f"{redundant_expert_meta_dir}/rearrange-experts.json"
if not os.path.exists(redundant_expert_meta_dir):
os.makedirs(redundant_expert_meta_dir, exist_ok=True)
def __json__(self):
return self.__dict__
def dump(self):
"""Dump the object to a JSON file."""
begin = time.time()
try:
with open(self.meta_file_name, "w") as fout:
json.dump(self.__dict__, fout)
except Exception as e:
return f"redundant_expert: dump expert workload failed, {e}"
cost_time = int((time.time() - begin) * 1000 * 1000)
return f"redundant_expert: dump expert workload result in {cost_time} us"
def load(self):
"""Load the object from a JSON file."""
if not os.path.exists(self.meta_file_name):
return {}, f"redundant_expert: file {self.meta_file_name} is not exists"
try:
with open(self.meta_file_name, "r") as fin:
meta = json.load(fin)
self.__dict__.update(meta)
return self.__json__(), "ok"
except Exception as e:
return {}, f"redundant_expert: load file {self.meta_file_name} failed, {e}"
class RearrangeExpertState(Enum):
"""RearrangeExpertState"""
free = 0
doing = 1
load_succ = 2 # load weight from disk success
done = 3
if __name__ == "__main__":
print(RedundantExpertWorkload("/tmp").load())