diff --git a/profiler/merge_profiling_timeline/README.md b/profiler/merge_profiling_timeline/README.md index 21e8ca5e26ad465f20be96cd8913158fc1e770b4..4b3162d5b0456104d24acc77b958cb7c8816bffc 100644 --- a/profiler/merge_profiling_timeline/README.md +++ b/profiler/merge_profiling_timeline/README.md @@ -49,7 +49,7 @@ ascend pytorch profiler数据目录结构如下: - `custom` :自定义需要合并的timeline数据,具体参考示例 - -o: 可选参数,指定合并后的timeline文件输出的路径(路径末尾可以设置文件名,具体用法参考示例),不设置该参数的情况下默认文件输出的路径为当前目录(默认文件名为merged.json) - --rank:可选参数,指定需要合并timeline的卡号,默认全部合并 -- --items:可选参数,指定需要合并的profiling数据项(python,Ascend_Hardware,CANN,HCCL,PTA,Overlap_Analysis),默认全部合并(item直接使用Ascend Hardware作为参数会被误认为是两个参数,因此作为一个参数时使用'_'连接) +- --items:可选参数,指定需要合并的profiling数据项(python,Ascend Hardware,CANN,HCCL,PTA,Overlap Analysis),默认全部合并 **使用示例**: @@ -73,7 +73,7 @@ python3 main.py -i path/to/cann_profiling/ -o path/to/cann_profiling/output/2p - 4、合并单机多卡timeline,合并所有卡的CANN层和Ascend_Hardware层数据 ``` -python3 main.py -i path/to/cann_profiling/ --type pytorch --items CANN,Ascend_Hardware +python3 main.py -i path/to/cann_profiling/ --type pytorch --items "CANN,Ascend Hardware" ``` 5、合并多timeline(自定义) diff --git a/profiler/merge_profiling_timeline/main.py b/profiler/merge_profiling_timeline/main.py index 7fd483a7361fc0b562f934cf3da6a969ef6f0c84..4d242d478cccb0a28c5bbfc06c140e8b6e09034e 100644 --- a/profiler/merge_profiling_timeline/main.py +++ b/profiler/merge_profiling_timeline/main.py @@ -19,6 +19,7 @@ import re from functools import partial from argparse import ArgumentParser +from decimal import Decimal FILTER_DIRS = [".profiler", "HCCL_PROF", "timeline", "query", 'sqlite', 'log'] @@ -190,8 +191,6 @@ def merge_timeline_events(timeline_file_dict, process_list): # 提取待合并的items的pid merged_pids = set() for pro in process_list_tmp: - pro = " ".join(pro.split("_")) if "_" in pro else pro - if pro not in proc_pid_dict.keys(): print(f"main.py: error argument --items: invalid choice: '{pro}' (choose from {list(proc_pid_dict.keys())})") return @@ -205,7 +204,7 @@ def merge_timeline_events(timeline_file_dict, process_list): # 当前节点间时间误差可用时,进行时间校准 if event.get("ts") and ts_difference_us: - event["ts"] = event["ts"] + ts_difference_us + event["ts"] = str(Decimal(str(event["ts"])) + Decimal(str(ts_difference_us))) # 区分不同rank的同一进程的pid if isinstance(event.get("pid"), (str, int)):