更新时间:2024-04-30 GMT+08:00
分享

训练profiling工具使用

五板斧操作之后,如果性能仍然不满足要求,便需要通过profiling工具采集性能数据,基于数据分析是哪个环节、哪个算子导致的性能消耗,进而做性能优化。

目前有两种方式采集训练profiling数据:Ascend PyTorch Profiler数据采集与分析E2E Profiling数据采集与分析

其中推荐使用Ascend PyTorch Profiler数据采集与分析方法,基于这种用法性能调优更高效,可以全面采集PyTorch训练场景下的性能数据,主要包括PyTorch层算子信息、CANN层算子信息、底层NPU算子信息、以及算子内存占用信息等,可以全方位分析PyTorch训练时的性能状态,有四种视图来展示PyTorch性能数据,其中Trace视图与第二种profiling方法展示同样的信息。第二种采集方式的优势主要在于不需要额外启动tensorboard服务来展示数据,在本地浏览器就能展示性能数据。

训练profiling工具使用说明:

  • 通过键盘上的快捷键(w:放大/s:缩小/a:左移/d:右移)可以很方便地进行查看算子运行信息(tensorboard的Trace View页面和chrome的tracing页面都支持快捷键)。
  • 如果是在docker中运行tensorboard,启动docker容器的时候,需要将tensorboard的端口映射到宿主机的端口,这样才能在浏览器基于宿主机的ip+宿主机的端口访问tensorboard服务;同时启动tensorboard的时候,需要“—bind_all”参数。
    docker run -itd -p 12345:6006 my-image bash
    ....
    tensorboard --bind_all --logdir  result_dir/
    图1 TensorBoard
  • 性能调优是一个不断迭代的过程,每个版本的代码与profiling的对应关系需要提前做好规划,否则随着迭代次数的增多,无法梳理清楚某一版本的代码修改究竟是否带来性能提升或带来多少性能提升。推荐对应关系可以使用git commit来管理。
  • PyTorch API会调用其他API以及算子,调用关系在Trace View的Python cpu区域可以展示出来,如下图所示,tensor对象的*或者mul操作(对应图中的aten::mul)会调用aten::item和Mul算子,以此类推。其中如果某一个算子调用了Enqueue算子,代表该算子将会被下发到NPU中执行。鼠标点中某个算子/API,可查看对应详情,包括调用堆栈。
    图2 调用关系
分享:

    相关文档

    相关产品