下载
中文
注册

PyTorch场景如何采集最小膨胀数据

故障现象

模型运行过程中开启Profiling采集性能数据会造成性能膨胀,具体表现是开启Profiling后模型性能数据采集step打屏耗时较不开启Profiling耗时变长,两者差值为膨胀时间。

故障原因

膨胀程度与Profiling采集设置相关,以下按影响模型性能程度列举主要影响因素:

  1. with_stack开关:开启with_stack会获取模型调用栈信息(性能影响巨大,可使用影响较小的with_modules替代)。
  2. profiler_level:profiler_level设置级别越高,采集数据量越大,同时造成的性能膨胀也更大。
  3. activities设置:采集事件类型。
  4. 其余采集开关。

故障处理

  • 采集性能数据推荐配置:
    使用推荐配置可获取一般性能分析问题所需的host和device侧数据。
    experimental_config = torch_npu.profiler._ExperimentalConfig(
        export_type=torch_npu.profiler.ExportType.Text,
        aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization,
        profiler_level=torch_npu.profiler.ProfilerLevel.Level1,
        l2_cache=False,
        data_simplification=False
    )
        with torch_npu.profiler.profile(
        activities=[
        torch_npu.profiler.ProfilerActivity.CPU,
        torch_npu.profiler.ProfilerActivity.NPU
        ],
        schedule=torch_npu.profiler.schedule(wait=1, warmup=1, active=2, repeat=2, skip_first=10),
        on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"),
        experimental_config=experimental_config) as prof:
        for step in range(steps):
            train_one_step(step, steps, train_loader, model, optimizer, criterion)
            prof.step()
  • 采集最小膨胀数据:
    最小膨胀采集设置一般用于和GPU性能数据对比使用。
    with torch_npu.profiler.profile(
        activities=[ torch_npu.profiler.ProfilerActivity.NPU],
        schedule=torch_npu.profiler.schedule(wait=1, warmup=1, active=1, repeat=1, skip_first=20),
        on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./npu-profling-least-inflation")
    ) as prof:
        for step, x in enumerate(train_dataloader):# train_one_step
            ...  # train_one_step
            prof.step()