Spaces:
Sleeping
Sleeping
| from constants import * | |
| def print_list(list): | |
| """print one-dimensional list | |
| :param list: List[int] | |
| :return: None | |
| """ | |
| for i, x in enumerate(list): | |
| print(x, end='\n') | |
| def get_dict_depth(d, depth=0): | |
| if not isinstance(d, dict): | |
| return depth | |
| if not d: | |
| return depth | |
| return max(get_dict_depth(v, depth + 1) for v in d.values()) | |
| def latency_to_string(latency_in_s, precision=2): | |
| if latency_in_s is None: | |
| return "None" | |
| day = 24 * 60 * 60 | |
| hour = 60 * 60 | |
| minute = 60 | |
| ms = 1 / 1000 | |
| us = 1 / 1000000 | |
| if latency_in_s // day > 0: | |
| return str(round(latency_in_s / day, precision)) + " days" | |
| elif latency_in_s // hour > 0: | |
| return str(round(latency_in_s / hour, precision)) + " hours" | |
| elif latency_in_s // minute > 0: | |
| return str(round(latency_in_s / minute, precision)) + " minutes" | |
| elif latency_in_s > 1: | |
| return str(round(latency_in_s, precision)) + " s" | |
| elif latency_in_s > ms: | |
| return str(round(latency_in_s / ms, precision)) + " ms" | |
| else: | |
| return str(round(latency_in_s / us, precision)) + " us" | |
| def num_to_string(num, precision=2): | |
| if num is None: | |
| return "None" | |
| if num // 10**12 > 0: | |
| return str(round(num / 10.0**12, precision)) + " T" | |
| elif num // 10**9 > 0: | |
| return str(round(num / 10.0**9, precision)) + " G" | |
| elif num // 10**6 > 0: | |
| return str(round(num / 10.0**6, precision)) + " M" | |
| elif num // 10**3 > 0: | |
| return str(round(num / 10.0**3, precision)) + " K" | |
| else: | |
| return str(num) | |
| def get_readable_summary_dict(summary_dict: dict, title="Summary") -> str: | |
| log_str = f"\n{title.center(PRINT_LINE_WIDTH, '-')}\n" | |
| for key, value in summary_dict.items(): | |
| if "num_tokens" in key or "num_params" in key or "flops" in key: | |
| log_str += f"{key}: {num_to_string(value)}\n" | |
| elif "gpu_hours" == key: | |
| log_str += f"{key}: {int(value)}\n" | |
| elif "memory" in key and "efficiency" not in key: | |
| log_str += f"{key}: {num_to_string(value)}B\n" | |
| elif "latency" in key: | |
| log_str += f"{key}: {latency_to_string(value)}\n" | |
| else: | |
| log_str += f"{key}: {value}\n" | |
| log_str += f"{'-' * PRINT_LINE_WIDTH}\n" | |
| return log_str | |
| def within_range(val, target, tolerance): | |
| return abs(val - target) / target < tolerance | |
| def average(lst): | |
| if not lst: | |
| return None | |
| return sum(lst) / len(lst) | |
| def max_value(lst): | |
| if not lst: | |
| return None | |
| return max(lst) | |