llmll's picture
Upload folder using huggingface_hub
02c783d verified
# Modifications Copyright(C)[2025] Advanced Micro Devices, Inc. All rights reserved.
# https://github.com/thunlp/TritonBench - Apache License 2.0
import os
import json
import argparse
from tb_eval.constants import NATIVE_PERF_GOLD_ROOT
# golden_metrics_folder = TBG_PERF_GOLD_ROOT
_MODULE_DIR = os.path.dirname(os.path.abspath(__file__))
def write_file(input_folder_path, results_path, golden_metrics_folder):
golden_metrics_list = os.listdir(golden_metrics_folder)
tmp_dir = os.path.join(results_path, 'tmp')
logs_dir = os.path.join(results_path, 'logs')
assert len(golden_metrics_list) > 0, f"golden_metrics_list: {golden_metrics_list} is empty in {golden_metrics_folder}"
if os.path.exists(results_path):
os.system(f'rm -rf {results_path}')
os.mkdir(results_path)
print(f"results_path: {results_path}")
if os.path.exists(tmp_dir):
os.system(f'rm -rf {tmp_dir}')
os.mkdir(tmp_dir)
print(f"tmp_dir: {tmp_dir}")
if os.path.exists(f'{logs_dir}'):
os.system(f'rm -rf {logs_dir}')
os.mkdir(logs_dir)
print(f"logs_dir: {logs_dir}")
tab = ' ' * 4
with open(f'{_MODULE_DIR}/performance_utils.py', 'r') as f:
performance_utils = f.readlines()
# performance_utils = performance_utils.replace('folder_path = "/home/lishangzhan/triton/bench_performance/results"', f'folder_path = "{results_path}"')
performance_utils_lines = []
for line in performance_utils:
if 'folder_path = ' in line:
line = tab * 2 + f'folder_path = "{results_path}"\n'
performance_utils_lines.append(line)
performance_utils = "".join(performance_utils_lines)
with open(f'{tmp_dir}/performance_utils.py', 'w') as f:
f.write(performance_utils)
input_file_list = os.listdir(input_folder_path)
print("input_file_list:", input_file_list)
for file in input_file_list:
if file[-3:] == ".py":
op = file[:-3]
perf_file_name = op + "_perf.py"
assert perf_file_name in golden_metrics_list, f"{perf_file_name} not in {golden_metrics_list}"
with open(os.path.join(golden_metrics_folder, perf_file_name), "r") as f:
# golden_metrics = f.read()
lines = f.readlines()
# print(lines)
updated_lines = []
for line in lines:
if "from TritonBench_v1." in line:
fn_name = line.split(" ")[-1].strip()
updated_lines.append(
f"import tb_eval.data.TritonBench.data.TritonBench_G_v1.{op}.{fn_name} as {fn_name}_ref"
)
if line == "sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))\n":
updated_lines.append(f"sys.path.append('{input_folder_path}')\n")
line = line.replace("from TritonBench_v1.", "from ")
line = line.replace("op_perf.get_do_bench_config()", "op_perf.get_do_bench_config(warmup=100, rep=1000)")
line = line.replace('folder_path = "/home/lishangzhan/triton/bench_performance/results"', f'folder_path = "{results_path}"')
updated_lines.append(line)
golden_metrics = "".join(updated_lines)
golden_metrics_lines = golden_metrics.split("\n")
flag = False
for i in range(len(golden_metrics_lines)):
if "input_tensor = self.to_cuda(input_tensor_)" in golden_metrics_lines[i]:
index_1 = i
if "results.append(result)" in golden_metrics_lines[i]:
index_2 = i + 1
flag = True
if flag:
for i in range(index_1, index_2):
golden_metrics_lines[i] = tab + golden_metrics_lines[i]
golden_metrics_lines.insert(index_1, tab*3 + "try:")
golden_metrics_lines.insert(index_2 + 1, tab*3 + "except Exception as e:")
golden_metrics_lines.insert(index_2 + 2, tab*4 + 'print(f"Failed to run benchmark for input tensor. Error: {e}")')
golden_metrics = "\n".join(golden_metrics_lines)
with open(os.path.join(tmp_dir, perf_file_name), "w") as f:
f.write(golden_metrics)
def parse_args():
parser = argparse.ArgumentParser(description='write_file')
parser.add_argument('--input_folder_path', type=str, help='input_folder_path')
parser.add_argument('--result_folder_path', type=str, help='result_folder_path')
parser.add_argument('--golden_metrics_folder', type=str, default=NATIVE_PERF_GOLD_ROOT, help='golden_metrics_folder_path')
args = parser.parse_args()
return args
if __name__ == "__main__":
args = parse_args()
input_folder_path = args.input_folder_path
results_path = args.result_folder_path
golden_metrics_folder = args.golden_metrics_folder
write_file(input_folder_path, results_path, golden_metrics_folder)