torch_npu.profiler.profile

产品支持情况

产品 是否支持
Atlas A3 训练系列产品
Atlas A2 训练系列产品
Atlas 训练系列产品

功能说明

提供PyTorch训练过程中的性能数据采集功能。

函数原型

torch_npu.profiler.profile(activities=None, schedule=None, on_trace_ready=None, record_shapes=False, profile_memory=False, with_stack=False, with_modules, with_flops=False, experimental_config=None)

参数说明

  • activities (enum):可选参数,CPU、NPU事件采集列表。可取值以及含义详见torch_npu.profiler.ProfilerActivity

  • schedule (callable):可选参数,设置不同step的行为。由schedule类控制。默认不执行任何操作。

  • on_trace_ready (callable):可选参数,采集结束时自动执行操作。当前仅支持执行tensorboard_trace_handler函数的操作,默认不执行任何操作。

  • record_shapes (bool):可选参数,算子的InputShapes和InputTypes。取值为:

    • True:开启。
    • False:关闭。

    默认值为False。

    开启torch_npu.profiler.ProfilerActivity.CPU时生效。

  • profile_memory (bool):可选参数,算子的内存占用情况。取值为:

    • True:开启。
    • False:关闭。

    默认值为False。

    Note

    已知在安装有glibc<2.34的环境上采集memory数据,可能触发glibc的一个已知Bug 19329,通过升级环境的glibc版本可解决此问题。

  • with_stack (bool):可选参数,算子调用栈。包括框架层及CPU算子层的调用信息。取值为:

    • True:开启。
    • False:关闭。

    默认值为False。

    开启torch_npu.profiler.ProfilerActivity.CPU时生效。

  • with_modules (bool):可选参数,modules层级的Python调用栈,即框架层的调用信息。取值为:

    • True:开启。
    • False:关闭。

    默认值为False。

    开启torch_npu.profiler.ProfilerActivity.CPU时生效。

  • with_flops (bool):可选参数,算子浮点操作(该参数暂不支持解析性能数据)。取值为:

    • True:开启。
    • False:关闭。

    默认值为False。

    开启torch_npu.profiler.ProfilerActivity.CPU时生效。

  • experimental_config:可选参数,扩展参数,通过扩展配置性能分析工具常用的采集项。支持采集项和详细介绍请参见torch_npu.profiler._ExperimentalConfig

返回值说明

调用示例

以下是关键步骤的代码示例,不可直接拷贝编译运行,仅供参考。

torch_npu.profiler.profile采集的性能数据会自动解析到torch_npu.profiler.tensorboard_trace_handler指定的目录,请参见《MindStudio Insight系统调优》进行可视化展示与分析。

import torch
import torch_npu

...

# 添加Profiling采集扩展配置参数,详细参数介绍可参考下文的参数说明
experimental_config = torch_npu.profiler._ExperimentalConfig(
    export_type=torch_npu.profiler.ExportType.Text,
    profiler_level=torch_npu.profiler.ProfilerLevel.Level0,
    aic_metrics=torch_npu.profiler.AiCMetrics.AiCoreNone
)

# 添加Profiling采集基础配置参数,详细参数介绍可参考下文的参数说明
with torch_npu.profiler.profile(
    activities=[
        torch_npu.profiler.ProfilerActivity.CPU,
        torch_npu.profiler.ProfilerActivity.NPU
        ],
    schedule=torch_npu.profiler.schedule(wait=0, warmup=0, active=1, repeat=1, skip_first=0, skip_first_wait=0),    # 与prof.step()配套使用
    on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"),
    profile_memory=False,
    with_modules=False,
    experimental_config=experimental_config) as prof:

    # 启动性能数据采集
    for step in range(steps):    # 训练函数
        train_one_step()    # 训练函数
        prof.step()    # 与schedule配套使用