通过指定NPU与GPU的profiling数据路径,获取两者的性能数据拆解结果。使用方法如下:
若采集profiling数据时没有设置profile_memory=True,内存使用数据将不会被采集。
# 进入att代码仓目录下的compare_tools目录 cd att/profiler/compare_tools # 执行最简比对命令 python performance_compare.py [基准性能数据文件] [比对性能数据文件] --output_path=./result_dir
参数名 |
说明 |
是否必选 |
---|---|---|
--enable_profiling_compare |
开启总体性能比对。 |
否 |
--enable_operator_compare |
开启算子性能比对。 |
否 |
--enable_communication_compare |
开启通信性能比对。 |
否 |
--enable_memory_compare |
开启算子内存比对。 |
否 |
当用户设置以上任意参数时,则只按照用户设置的参数进行性能比对。在以上四个参数均未设置的情况下,工具默认开启所有的参数。示例如下:
python performance_compare.py [基准性能数据文件] [比对性能数据文件] --output_path=./result_dir --enable_profiling_compare
参数名 |
说明 |
是否必选 |
---|---|---|
--output_path |
输出文件保存目录。 |
是 |
--GPU_flow_cat |
配置GPU trace中cpu侧算子与device kernel的连线标识,当GPU的kernel均为空时设置。根据timeline的json文件在chrome://tracing上的Flow events的选项配置。使用示例:--GPU_flow_cat=async_GPU |
否 |
--use_input_shape |
开启算子精准匹配,默认关闭。使用示例:--use_input_shape |
否 |
--max_kernel_num |
设置CPU侧算子下发的最大kernel数量,当超过设定值时工具会自动往下找子算子,直至满足条件,默认仅比对最上层算子。使用示例: --max_kernel_num=10 |
否 |
--op_name_map |
设置GPU与NPU等价的算子名称的映射关系,以字典形式存入。使用示例:--op_name_map='{"Optimizer.step#SGD.step":"Optimizer.step#NpuFusedSGD.step"}' |
否 |
本工具不仅支持GPU与NPU Trace文件的比较,也支持NPU与NPU或者GPU与GPU Trace文件的比较,传入的第一个Trace文件会作为基准数据。
对比拆解数值计算解释如表3所示。
性能拆解维度 |
GPU |
NPU |
---|---|---|
算子耗时 |
包含cube算子耗时和vector算子耗时 |
包含cube算子耗时和vector算子耗时 |
计算流耗时 |
GPU计算流所有event耗时总和 |
NPU计算流所有event耗时总和 |
算子总量 |
GPU计算流上cube、vector以及总的算子量 |
NPU计算流上cube、vector以及总的算子量 |
通信耗时 |
GPU通信未掩盖耗时 |
NPU通信未掩盖耗时 |
调度占比 |
|
|
内存分析 |
|
|
计算流e2e耗时 |
GPU计算流端到端耗时 |
NPU计算流端到端耗时 |
性能比对结果文件说明可参见开源社区。