feat: add generate frontend data script

This commit is contained in:
wql 2024-11-29 14:22:39 +08:00
parent d230191d69
commit 0329f2e285
2 changed files with 160 additions and 17 deletions

View File

@ -0,0 +1,139 @@
import os
import shutil
import json
NV_RESULT_PATH = r"C:\Users\wengq\Desktop\QY项目\前端\910_result.csv"
RESULTS_PATH = r"C:\Users\wengq\Desktop\QY项目\910b_results\final"
MODEL_FOLDER = ["9g-8B", "Qwen-7B", "Llama2-7B", "ChatGLM2-6B", "Baichuan2-7B"]
MODEL_PREFIX = ["Qwen", "llama2", "ChatGLM2", "Baichuan2"]
MODEL_FOLDER_PREFIX = {"Qwen-7B": "Qwen", "Llama2-7B": "llama2", "ChatGLM2-6B": "ChatGLM2", "Baichuan2-7B": "Baichuan2"}
def generate_display_results(step500):
with open(NV_RESULT_PATH, 'r', encoding='utf-8') as file:
columns = []
for i in range(10): # 10 columns in total
columns.append([])
first_row = True
for row in file:
if first_row:
row = row[1:]
first_row = False
row = row[:-1]
print(row.split(','))
for i, value in enumerate(row.split(',')):
columns[i].append(value)
print("columns")
print(columns)
print("********************")
for column in columns:
detail_dict = {}
detail_dict["模型名称"] = column[1]
detail_dict["测试环境"] = column[0]
detail_dict["单卡多卡"] = column[2]
detail_dict["测试方法"] = "Lora微调"
detail_dict["数据集"] = "belle_1m"
detail_dict["框架"] = "PyTorch"
detail_dict["硬件配置"] = "CPU:4*鲲鹏920处理器48核2.6GHz \n内存2TB32 * 64GB3200MHz DDR4内存 \n系统盘2 * 480GB SATA SSD3 * 1.92TB NVMe SSD \n阵列卡9560-8i/8口/4G/12Gb带电池保护模块 \n网络18*200GE-QSFP56 含200GBase-SR4光模块-QSFP56-200G-多模模块) \n网络2: 平台集成4个千兆电口 \n昇腾训练模组:昇腾训练模组*8每一路AI处理器提供7条HCCS互连链路提供最大392GB/s带宽能力。单颗芯片显存容量为64GB \n电源服务器白金2600W 2.0版本交流电源*4 \n4U静态滑轨套件"
detail_dict["训练时长"] = column[3]
detail_dict["单步时长"] = column[4]
detail_dict["吞吐量"] = column[5]
detail_dict["单卡最大显存占用量"] = column[6]
detail_dict["训练功耗"] = column[7]
detail_dict["能效比"] = column[8]
print("detail_dict")
print(detail_dict)
print("********************")
folder_name = detail_dict["测试环境"] + "_" + detail_dict["测试方法"] + "_" + detail_dict["模型名称"] + "_" + detail_dict["单卡多卡"]
folder_path = os.path.join(r"C:\Users\wengq\Desktop\QY项目\前端\测试数据", folder_name)
os.makedirs(folder_path, exist_ok=True)
print("folder_path")
print(folder_path)
print("********************")
file_path = os.path.join(folder_path, "display_results.json")
with open(file_path, 'w', encoding='utf-8') as file:
json.dump(detail_dict, file, indent=4, ensure_ascii=False)
detail_folder_path = get_detail_folder_path(detail_dict["模型名称"], "lora_sft", 1 if detail_dict["单卡多卡"] == "单卡" else 0, step500)
detail_yaml_path = get_detail_yaml_path(detail_dict["模型名称"], "lora_sft", 1 if detail_dict["单卡多卡"] == "单卡" else 0, step500)
shutil.copy2(detail_yaml_path, os.path.join(folder_path, "setting.yaml"))
shutil.copy2(os.path.join(detail_folder_path, "trainer_log.jsonl"), os.path.join(folder_path, "trainer_log.jsonl"))
# for column in columns:
# detail_dict = {}
# detail_dict["模型名称"] = column[1]
# detail_dict["测试环境"] = column[0]
# detail_dict["单卡多卡"] = column[2]
# detail_dict["测试方法"] = "推理"
# detail_dict["数据集"] = "alpaca_gpt4_zh"
# detail_dict["框架"] = "PyTorch"
# detail_dict["硬件配置"] = "详细硬件配置" #需要检查
# detail_dict["训练时长"] = column[9]
# detail_dict["单步时长"] = None
# detail_dict["吞吐量"] = column[10]
# detail_dict["单卡最大显存占用量"] = column[11]
# detail_dict["训练功耗"] = column[12]
# detail_dict["能效比"] = None
# print("detail_dict")
# print(detail_dict)
# print("********************")
# folder_name = detail_dict["测试环境"] + "_" + detail_dict["测试方法"] + "_" + detail_dict["模型名称"] + "_" + detail_dict["单卡多卡"]
# folder_path = os.path.join(r"C:\Users\wengq\Desktop\QY项目\前端\测试数据", folder_name)
# os.makedirs(folder_path, exist_ok=True)
# print("folder_path")
# print(folder_path)
# print("********************")
# file_path = os.path.join(folder_path, "display_results.json")
# with open(file_path, 'w', encoding='utf-8') as file:
# json.dump(detail_dict, file, indent=4, ensure_ascii=False)
# detail_yaml_path = get_detail_yaml_path(detail_dict["模型名称"], MODEL_FOLDER_PREFIX[detail_dict["模型名称"]], "inference", 1, 1 if detail_dict["单卡多卡"] == "单卡" else 0, step500)
# print(detail_yaml_path)
# print(os.path.join(folder_path, "setting.yaml"))
# shutil.copy2(detail_yaml_path, os.path.join(folder_path, "setting.yaml"))
def get_detail_folder_path(model_folder, train_type, single, step500):
detail_folder_prefix = train_type + "_" + model_folder + ("_1_gpu" if single else "_8_gpu") + ("_500_step" if step500 else "_1000_step")
print(detail_folder_prefix)
for entry in os.listdir(RESULTS_PATH):
full_path = os.path.join(RESULTS_PATH, entry)
if os.path.isdir(full_path) and entry.startswith(detail_folder_prefix):
return(full_path)
return None
def get_detail_yaml_path(model_folder, train_type, single, step500):
detail_folder_path = get_detail_folder_path(model_folder, train_type, single, step500)
print(detail_folder_path)
if detail_folder_path is None:
return None
for entry in os.listdir(detail_folder_path):
full_path = os.path.join(detail_folder_path, entry)
if os.path.isfile(full_path) and entry.endswith('.yaml'):
return(full_path)
return None
def main():
generate_display_results(False)
if __name__ == "__main__":
main()

View File

@ -2,16 +2,23 @@ import os
import time
import json
AVG_ONLY = False
TRAIN_TYPE = "inference"
AVG_ONLY = True
#AVG_ONLY = False
TRAIN_TYPE = "lora_sft"
#TRAIN_TYPE = "inference"
STEP500 = True
#STEP500 = False
RESULTS_PATH = r"C:\Users\wengq\Desktop\QY项目\910b_results\final"
if TRAIN_TYPE == "lora_sft":
MODEL_PREFIX = ["Qwen-7B", "Llama2-7B", "ChatGLM2-6B", "Baichuan2-7B"]
MODEL_PREFIX = ["9g-8B", "Qwen-7B", "Llama2-7B", "ChatGLM2-6B", "Baichuan2-7B"]
else:
MODEL_PREFIX = ["Qwen-7B", "Llama2-7B", "Baichuan2-7B"]
def get_train_result(step500):
def get_train_result():
all_total_sec = []
all_step_sec = []
all_token_per_sec = []
@ -26,7 +33,7 @@ def get_train_result(step500):
train_cnt = 0
gpu_cnt = 1 if single else 8
step = 500 if step500 else 1000
step = 500 if STEP500 else 1000
folder_prefix = TRAIN_TYPE + "_" + model_prefix + "_" + str(gpu_cnt) + "_gpu_" + str(step)
file_prefix = "train" if TRAIN_TYPE == "lora_sft" else "predict"
for dir_name in os.listdir(RESULTS_PATH):
@ -38,7 +45,7 @@ def get_train_result(step500):
# print(train_results)
total_sec.append(train_results[file_prefix + '_runtime'])
if TRAIN_TYPE == "lora_sft":
step_sec.append(train_results['train_runtime'] / (500 if step500 else 1000))
step_sec.append(train_results['train_runtime'] / (500 if STEP500 else 1000))
token_per_sec.append(train_results['train_tokens_per_second'])
if AVG_ONLY:
@ -60,12 +67,12 @@ def get_train_result(step500):
print(result)
return result
def get_detail_folder_path(model_folder, model_prefix, run_no, single, step500):
detail_folder = model_prefix + "_" + TRAIN_TYPE + "_" + str(run_no) + ("_single" if single else "") + ("_step500" if step500 else "")
def get_detail_folder_path(model_folder, model_prefix, run_no, single):
detail_folder = model_prefix + "_" + TRAIN_TYPE + "_" + str(run_no) + ("_single" if single else "") + ("_step500" if STEP500 else "")
return os.path.join(RESULTS_PATH, TRAIN_TYPE, model_folder, detail_folder)
def get_train_start_end_time(model_folder, model_prefix, run_no, single, step500):
trainer_log_path = os.path.join(get_detail_folder_path(model_folder, model_prefix, run_no, single, step500), "trainer_log.jsonl")
def get_train_start_end_time(model_folder, model_prefix, run_no, single):
trainer_log_path = os.path.join(get_detail_folder_path(model_folder, model_prefix, run_no, single), "trainer_log.jsonl")
start_time = time.strptime(get_first_json(trainer_log_path)['cur_time'], "%Y-%m-%d %H:%M:%S")
end_time = time.strptime(get_last_json(trainer_log_path)['cur_time'], "%Y-%m-%d %H:%M:%S")
@ -73,7 +80,7 @@ def get_train_start_end_time(model_folder, model_prefix, run_no, single, step500
return start_time, end_time
def get_gpu_result(step500):
def get_gpu_result():
all_mem = []
all_power_consumption = []
@ -84,7 +91,7 @@ def get_gpu_result(step500):
train_cnt = 0
gpu_cnt = 1 if single else 8
step = 500 if step500 else 1000
step = 500 if STEP500 else 1000
folder_prefix = TRAIN_TYPE + "_" + model_prefix + "_" + str(gpu_cnt) + "_gpu_" + str(step)
for dir_name in os.listdir(RESULTS_PATH):
@ -158,11 +165,8 @@ def get_last_json(jsonl_file_path):
def main():
get_train_result(False)
get_gpu_result(False)
# get_train_result(True)
# get_gpu_result(True)
get_train_result()
get_gpu_result()
if __name__ == "__main__":