mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-12-24 13:28:13 +08:00
61 lines
1.9 KiB
Python
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())
|