以TensorFlow网络基础框架的堆叠沙漏网络模型为例执行训练,发现该模型在GPU上的迭代耗时为310ms,而在Atlas 训练系列产品上的迭代耗时达到360ms,Atlas 训练系列产品慢了50ms。通过执行Profiling性能分析,寻找昇腾平台训练迭代耗时高的原因,发现问题在于AI CPU中dropout算子的随机数函数耗时较大。通过查看并修改用户脚本的drop脚本,重新测试性能后迭代端到端的性能得到了提升。
操作系统:Ubuntu18.04
执行以下操作前请参见环境搭建完成环境搭建。
通过以下操作方法执行Job Profiling:
cd ${data_path}
export PROFILING_MODE=true export PROFILING_OPTIONS='{"output":"/home/HwHiAiUser/profiler_data","storage_limit": "500MB","training_trace":"on","task_trace":"on","aicpu":"on","fp_point":"","bp_point":"","aic_metrics":"PipeUtilization"}'
详细的使用及参数解释,请参见性能数据采集(环境变量方式)和Profiling options参数解释。
执行命令后等待训练完成。
有关TensorFlow模型训练详细介绍请参见《TensorFlow 1.15网络模型迁移和训练指南》。
小技巧:为方便执行msprof.py脚本,您可以使用HwHiAiUser用户执行命令alias msprof='python3 /home/HwHiAiUser/Ascend/ascend-toolkit/latest/tools/profiler/profiler_tool/analysis/msprof/msprof.py'设置别名,后续就可以不用进入/home/HwHiAiUser/Ascend/ascend-toolkit/latest/tools/profiler/profiler_tool/analysis/msprof目录,在任意目录输入msprof即可执行Profiling命令。该操作仅在当前窗口下生效。
python3 msprof.py import -dir /home/HwHiAiUser/profiler_data
此处仅以import方式为例执行解析,详细操作请参见数据解析与导出。
python3 msprof.py export timeline -dir /home/HwHiAiUser/profiler_data
执行完上述命令后,会在collection-dir目录下的PROF_XXX目录下生成timeline目录,目录中生成对应的json文件,如图2所示,具体内容参见Profiling数据说明。
python3 msprof.py export summary -dir /home/HwHiAiUser/profiler_data --format csv
执行完上述命令后,会在collection-dir目录下的PROF_XXX目录下生成summary目录,目录中生成对应的csv文件,如图3所示,具体内容参见Profiling数据说明。
通过解析Profiling数据可得到迭代轨迹数据step_trace_{device_id}_{iter_id}.json。在Chrome浏览器中输入“chrome://tracing”地址,将迭代轨迹数据step_trace_{device_id}_{iter_id}.json拖到空白处进行打开,通过键盘上的快捷键(w:放大,s:缩小,a:左移,d:右移),查看每次迭代的耗时情况。timeline数据展示如下。
从图4中可以看到迭代训练的总耗时为561.827 ms,其中FP+BP耗时为561.599ms,FP+BP耗时可从图5中得到,FP+BP耗时占总耗时的99.9%,两者差异部分为Iteration Refresh(迭代更新拖尾)。step_trace_{device_id}_{model_id}_{iter_id}.json对应的summary文件为step_trace_{device_id}_{model_id}_{iter_id}.csv,打开该文件后如下图所示。
基于以上数据可知,Iteration Refresh(迭代更新拖尾)部分耗时比算子FP+BP耗时小很多,不存在性能瓶颈,也就是说该模型训练耗时长不是由性能瓶颈导致。那么我们需要接着分析算子的耗时。
从该表中依旧无法判断耗时较长的原因,那么继续打开AI Core算子调用次数及耗时数据。
到此Profiling性能分析工具的任务已经完成。
TensorFlow框架的模型在Atlas 训练系列产品训练时需要先完成迁移操作,详细操作请参见《TensorFlow 1.15网络模型迁移和训练指南》中的“手工迁移和训练”章节。
通过Profiling性能分析工具对模型训练的迭代端到端性能进行分析,定位到耗时最长的算子,通过修改训练脚本,最终提升了模型在Atlas 训练系列产品的训练性能。