PyTorch场景如何采集最小膨胀数据
故障现象
模型运行过程中开启Profiling采集性能数据会造成性能膨胀,具体表现是开启Profiling后模型性能数据采集step打屏耗时较不开启Profiling耗时变长,两者差值为膨胀时间。
故障原因
膨胀程度与Profiling采集设置相关,以下按影响模型性能程度列举主要影响因素:
- with_stack开关:开启with_stack会获取模型调用栈信息(性能影响巨大,可使用影响较小的with_modules替代)。
- profiler_level:profiler_level设置级别越高,采集数据量越大,同时造成的性能膨胀也更大。
- activities设置:采集事件类型。
- 其余采集开关。
故障处理
- 采集性能数据推荐配置:
使用推荐配置可获取一般性能分析问题所需的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()
父主题: FAQ