Linux
GPU
模型调优
中级
高级
将训练过程中的算子耗时等信息记录到文件中,通过可视化界面供用户查看分析,帮助用户更高效地调试神经网络性能。
操作流程可以参考Ascend 910上profiler的操作:
https://www.mindspore.cn/tutorial/training/zh-CN/r1.0/advanced_use/performance_profiling.html#id3
普通用户默认情况下无权访问目标设备上的NVIDIA GPU性能计数器。如果普通用户需要在训练脚本中使用profiler性能统计能力,则需参考以下网址的说明进行权限配置。
https://developer.nvidia.com/nvidia-development-tools-solutions-err-nvgpuctrperm-cupti
为了收集神经网络的性能数据,需要在训练脚本中添加MindSpore Profiler相关接口。
set_context
之后,需要初始化MindSpore Profiler
对象,GPU场景下初始化Profiler对象时只有output_path参数有效。Profiler.analyse
停止性能数据收集并生成性能分析结果。样例代码与Ascend使用方式一致可以参考:
https://www.mindspore.cn/tutorial/training/zh-CN/r1.0/advanced_use/performance_profiling.html#id4
GPU场景下还可以用自定义callback的方式收集性能数据,示例如下:
class StopAtStep(Callback):
def __init__(self, start_step, stop_step):
super(StopAtStep, self).__init__()
self.start_step = start_step
self.stop_step = stop_step
self.already_analysed = False
def step_begin(self, run_context):
cb_params = run_context.original_args()
step_num = cb_params.cur_step_num
if step_num == self.start_step:
self.profiler = Profiler()
def step_end(self, run_context):
cb_params = run_context.original_args()
step_num = cb_params.cur_step_num
if step_num == self.stop_step and not self.already_analysed:
self.profiler.analyse()
self.already_analysed = True
def end(self, run_context):
if not self.already_analysed:
self.profiler.analyse()
以上代码仅供参考,用户可根据所需场景自由实现。
启动命令请参考MindInsight相关命令。
用户从训练列表中选择指定的训练,点击性能调试,可以查看该次训练的性能数据(目前GPU场景只支持算子耗时排名统计和Timeline功能,其他功能敬请期待)。
图1:性能数据总览
图1展示了性能数据总览页面,包含了迭代轨迹(Step Trace)、算子性能、MindData性能和Timeline等组件的数据总体呈现:
用户可以点击查看详情链接,进入组件页面进行详细分析。
使用算子性能分析组件可以对MindSpore运行过程中的各个算子的执行时间进行统计展示。
图2:算子类别统计分析
图2展示了按算子类别进行统计分析的结果,包含以下内容:
图2下半部分展示了算子性能统计表,包含以下内容:
图3:内核信息分析
图3展示了CUDA activity信息统计,包含以下内容:
op_full_name
(所属算子名称)进程部分匹配的搜索。GPU场景下,Timeline分析的使用方法和Ascend场景相同,不同之处是,GPU Timeline展示的是算子信息和CUDA activity的信息。使用方法参考:
样例代码与Ascend使用方式一致可以参考:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。