本插件代码已不再维护,推荐使用MindStudio Insight工具获取更为强大的调优体验。
此工具是PyTorch profiling数据以及可视化的TensorBoard的插件。
它支持将Ascend平台采集、解析的Pytorch Profiling数据可视化呈现,也兼容GPU数据采集、解析可视化,支持PyTorch 2.0GPU版本的profiling数据可视化。同时集成了精度比对的功能,支持查看loss曲线和比对两个网络的loss收敛趋势。
pip install torch-tb-profiler-ascend
pip install torch-tb-profiler_ascend_{version}_py3_none_any.whl
准备profiling数据
需要在读取的目录下放置指定格式的profiling数据。格式为包含3个层级的目录结构:runs层级为最外层目录(我们将一个完整的Profiling数据视为一个runs进行可视化处理),其子目录为worker_span层级(命名格式为{worker}_{span}_ascend_pt,注:此处span为数字,代表时间戳),下一层级为规定命名的ASCEND_PROFILER_OUTPUT目录,此目录中包含此插件加载展示的数据文件,如trace_view.json、kernel_details.csv、operator_details.csv等。 目录结构如下:
E.g. there are 2 runs: run1, run2
run1
--[worker1]_[span1]_ascend_pt
----ASCEND_PROFILER_OUTPUT
------trace_view.json
------kernel_details.csv
--[worker2]_[span1]_ascend_pt
----ASCEND_PROFILER_OUTPUT
------trace_view.json
------operator_details.csv
run2
--[worker1]_[span1]_ascend_pt
----ASCEND_PROFILER_OUTPUT
------memory_record.csv
------operator_memory.csv
tensorboard --logdir=./samples
如果网络浏览器与启动TensorBoard的机器不在同一台机器上,则需要在尾部加上--bind_all
命令,如:
tensorboard --logdir=./samples --bind_all
注意:确保默认端口6006对浏览器的主机打开。
如果需要切换端口号需要在尾部加上指定的端口号,如--port=6007
tensorboard --logdir=./samples --port=6007
在浏览器中打开URL: http://localhost:6006
。
如果tensorboard启动命令使用--bind_all
, 主机名不是localhost
,而是绑定的主机ip,可以在cmd之后打印的日志中查找。
注意:如果--logdir
指定目录下的文件太大或太多,请等候,刷新浏览器查看加载结果。
页面加载完成后,左侧视图如图。每个Runs都对应于--logdir
指定的文件夹下的一个子文件夹(三层目录中的第一层run1, run2等)。
每个子文件夹包含一个或多个profiling数据文件夹。
Runs: --logdir
下包含三层目录的所有数据。
Views: 展示数据分析的多个视图,包含Operator、NPU Kernel、Trace、Memory等多个view。
Workers-Spans: 多线程的情况下Profiling可能包含多组数据,通过Workers和Spans下拉框来选择不同线程和不同时间采集的数据产生的结果。
Operator View展示的是运行在host侧和device侧的Pytorch算子、计算算子的详细信息。
Calls: 表示的是运行过程中此算子被调用的次数。
Input Shapes: shapes信息。
Device Self Duration: 算子在device侧的耗时(除去子算子)。
Device Total Duration: 算子在device侧的耗时。
Host Self Duration: 算子在host侧的耗时(除去子算子)。
Host Total Duration: 算子在host侧的耗时。
AI Cores Eligible: 此算子是否在AICore上运行。
AI Cores Self (%): 算子在AICore上的耗时(除去子算子) / Device Self Duration。
AI Cores Total (%): 算子在AICore上的耗时 / Device Total Duration。
CallStack: 此算子的所有调用堆栈信息。
说明: 由于一些算子之间存在父子关系(在trace上显示为包含关系),Self表示除去子算子的耗时,Total表示包含所有子算子的耗时。
页面展示了四个饼图和两张表,通过界面的Group By切换表格和饼图。当切换为Operator时,表格以算子名称的维度进行展示,点击某个算子的View CallStack后,此算子会按照Call Stack分类展示算子信息。点击View call frames可以查看算子的调用信息。 当Group By切换为Operator + Input Shape时,算子以name和Input Shape为维度进行展示。
Kernel View 展示算子在加速核上运行的详细信息。此视图包含两张饼图和两张表,可通过 Group By 切换表格数据:算子的详情表以及统计表。
字段名 | 说明 |
---|---|
Step Id | 标识在哪个 Step 采集的数据 |
Name | 运行在 npu 上的算子名称 |
Type | 算子类型 |
Accelerator Core | AI 加速核类型,包括 AI Core、AI CPU 等 |
Start Time(us) | 算子执行开始时间 |
Duration(us) | 当前算子执行耗时 |
Wait Time(us) | 算子执行等待时间 |
Block Dim | 运行切分数量,对应任务执行时的核数 |
字段名 | 说明 |
---|---|
Name | 运行在 npu 上的算子名称 |
Calls | 算子执行次数 |
Total Duration(us) | 算子执行总时间 |
Min Duration(us) | 算子执行的最小时间 |
Max Duration(us) | 算子执行的最大时间 |
Avg Duration(us) | 算子执行平均时间 |
此视图显示使用chrome插件,展示在整个训练过程中的时序图。
Trace View主要包含三个层级以及层级下各个线程上执行的算子的时序排布。
目前主要包括三个层级,PTA、CANN和Ascend Hardware。可以通过选择Processes来选择要展示的层级。
选择只展示async_npu,可以查看框架侧算子与昇腾硬件上执行的算子的下发执行关系。
Tips:通过键盘的'W/S'键可以以光标位置为中心放大/缩小当前区域,通过'A/D'可以左移/右移当前可视域。
展示的是Pytorch Profiler执行过程中内存申请和释放的信息。 主要包括两张折线图和两张表。可以在 'Device' 下拉框下选择要展示的NPU卡的内存使用信息。Group By可以切换总的内存使用和各个组件内存使用图表。
Operator
整个采集过程中,算子内存使用情况汇总。
表格数据代表含义:
Name: 算子名称。
Size: 申请的内存大小。
Allocation Time: 内存申请时间。
Release Time: 内存释放时间。
Duration: 内存持有时间。
Component
折线图为算子级上报的PTA侧和GE侧的内存持有和实际使用信息,以及进程级内存申请的趋势变化。表格为组件级内存峰值信息表,展示各NPU组件的内存峰值以及达到峰值的时刻。
表格数据代表含义:
Component: 组件名称。
Peak Memory Reserved: 组件内存持有峰值。
Time: 达到内存峰值的时刻(若存在多个相同峰值则取首次达到峰值时刻)。
Diff视图提供了Profiling数据比对功能。适用于同一网络不同迭代之间采集数据比对算子耗时情况,网络进行优化前后相同位置算子耗时情况比对、单机多卡不同卡之间采集数据比对以及相同网络不同硬件平台上运行性能情况比对等场景。
最上方为整体比对,以采集的step为周期比较两份数据各类算子的耗时情况以及累计耗时变化趋势。点击其中某块柱形,可以单点查看对应详情。
中间视图为差异图,由红蓝两块区域构成。横坐标与上方视图对应,蓝色区域为每类算子的耗时差值,红色区域表示当前所有算子耗时差的累加值。
最下方为算子比对明细表,显示相关差值以及相差比例信息。由于数据条目较多,支持选择是否显示Host Duration、Self Host Duration、Device Duration以及Self Device Duration相关比对信息。
Distributed视图展示的是多卡采集数据情况,包括每张卡的计算、通信信息以及通信算子的详细信息,界面由两张柱状图和一个通信算子信息表构成,如下图。
字段 | 含义 |
---|---|
Computation | 计算时间:在NPU上的计算时间减去和通信重叠的时间。 |
Communication | 通信时间:总通讯时间减去和计算重叠的时间。 |
Overlapp | 重叠时间:计算和通信重叠的时间。此项占比越大代表计算和通信的并行性越好,理想情况下计算和通信完全重叠。 |
Other | 除去计算和通信的其他部分耗时,包括初始化、数据加载等。 |
字段 | 含义 |
---|---|
Data Transfer Time | 通信时间中实际的数据传输时间。 |
Synchronizing Time | 通信时间中等待以及和其他卡同步的时间。 |
字段 | 含义 |
---|---|
Name | 通信算子名称 |
Calls | 调用次数。 |
Total Transit Size(bytes) | 传输的总数据大小。 |
Avg Transit Size(bytes) | 平均每次传输的数据大小。 |
Elapse Time(us) | 此类算子总耗时。 |
Avg Elapse Time(us) | 单个算子平均耗时。 |
Transit Time(us) | 此类算子传输总耗时。 |
Avg Transit Time(us) | 单个算子平均传输耗时。 |
Loss Comparison是集成在该插件上的精度比对工具,提供了对loss曲线的可视化,loss数据匹配导出csv,以及两份数据比对等功能。
切换顶部页签栏至ACCURACY页签,即可进入精度比对工具页面。
界面分为左侧边栏和右侧展示界面。点击左侧的Import Files或在左侧未勾选文件时点击右侧界面中心的Import Files字体,将会弹出系统文件资源管理窗,可以上传需要比对的模型网络训练日志文件。
注:当前最多支持上传6个文件,单个文件大小不能超过50MB。
文件上传后,在左侧侧边栏出现文件列表。每个文件栏内都有配置数据匹配条件、导出CSV以及删除三种操作图标。
点击配置数据匹配条件图标后,出现匹配条件配置弹框,需要设置Loss Tag和Iteration Tag两个配置项,弹框内每个Tag都包含一个输入框。
根据2个Tag的取值有如下3点匹配规则:
E.g.
对于以上这份txt文件,当设定Loss Tag为loss:
以及Iteration Tag为iteration
时:
iteration
和整数中间多了非数字字符:
。因此上方这张图中最终提取出的有效数据为区域1和区域2内的同一行数字的集合。
点击导出CSV图标后,将导出找到的Iteration和Loss数据为csv文件。
点击删除图标后,界面弹出确认删除框,确认后可移除该文件。
已上传文件后,可在左侧侧边栏勾选该文件,右侧则会展示该文件的Loss数据看板,包含loss折线图和明细表格。
勾选单个文件时,Loss数据看板将会占满整个右侧展示界面。
勾选两个以上文件时,右侧将会展示Loss数据看板和Loss比对看板。
Loss数据看板为全量展示,折线图内展示的是所有勾选文件的所有数据,表格内展示的同样为勾选文件的全量数据,若表格内iteration为某些文件独有,则其他文件该行显示为NA
。
当勾选文件为2个以上时,将展示Loss比对看板,Loss比对看板基于iteration取两份比对数据的交集进行展示。
在Comparison objects中选择两个文件,则展示该两个文件的比对信息。
比对方式有三种,通过Comparison Setting进行设定。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。