文档
注册

PyTorch训练/在线推理场景性能分析

PyTorch训练/在线推理场景下,推荐通过Ascend PyTorch Profiler接口采集并解析性能数据,用户可以根据结果自行分析和识别性能瓶颈。

Ascend PyTorch Profiler是针对PyTorch框架开发的性能分析工具,通过在PyTorch训练脚本中添加Ascend PyTorch Profiler接口,执行训练的同时采集性能数据,完成训练后直接输出可视化的性能数据文件,提升了性能分析效率。Ascend PyTorch Profiler接口可全面采集PyTorch训练场景下的性能数据,主要包括PyTorch层算子信息、CANN层算子信息、底层NPU算子信息、以及算子内存占用信息等,可以全方位分析PyTorch训练时的性能状态。

Ascend PyTorch Profiler接口不支持单进程多Device场景下的性能分析,推荐用户使用多进程方式执行用例,每个进程分别设置一个Device。

前提条件

采集并解析性能数据

  1. 使用Ascend PyTorch Profiler接口开启PyTorch训练时的性能数据采集。

    在训练脚本(如train_*.py文件)内添加如下示例代码进行性能数据采集参数配置,之后启动训练。下列示例代码中,加粗字段为需要配置的参数、方法、类和函数。

    • 示例一(使用torch_npu.profiler.profile类采集性能数据):
      import torch
      import torch_npu
      
      ...
      
      experimental_config = torch_npu.profiler._ExperimentalConfig(
             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"),
              record_shapes=False,
              profile_memory=False,
              with_stack=False,
              with_flops=False,
              experimental_config=experimental_config) as prof:
                      for step in range(steps):
                             train_one_step(step, steps, train_loader, model, optimizer, criterion)
                             prof.step()

      import torch
      import torch_npu
      ...
      experimental_config = torch_npu.profiler._ExperimentalConfig(
              aic_metrics=torch_npu.profiler.AiCMetrics.ArithmeticUtilization,
              profiler_level=torch_npu.profiler.ProfilerLevel.Level1
               )
      prof = 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=1),
              on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"),
               experimental_config=experimental_config)
      prof.start()
      for step in range(steps):
               train_one_step()
               prof.step()
      prof.stop()
      除了使用tensorboard_trace_handler导出性能数据外,还可以使用以下方式导出:
      import torch
      import torch_npu
      
      ...
      
      with torch_npu.profiler.profile() as prof:
              for step in range(steps):
                      train_one_step(step, steps, train_loader, model, optimizer, criterion)
      prof.export_chrome_trace('./chrome_trace_14.json')
    • 示例二(使用torch_npu.profiler._KinetoProfile类采集性能数据):
      import torch
      import torch_npu
      
      ...
      
      prof = torch_npu.profiler._KinetoProfile(activities, record_shape, profile_memory, with_stack, experimental_config)
      for epoch in range(epochs):
              trian_model_step()
              if epoch == 0:
                      prof.start()
              if epoch == 1:
                      prof.stop()
      prof.export_chrome_trace("result_dir/trace.json")

      该方式不支持使用scheduletensorboard_trace_handler导出性能数据。

    • 示例中的接口详细介绍请参见Ascend PyTorch Profiler接口采集
    • 性能数据会占据一定的磁盘空间,可能存在磁盘写满导致服务器不可用的风险。性能数据所需空间跟模型的参数、采集开关配置、采集的迭代数量有较大关系,须用户自行保证落盘目录下的可用磁盘空间。
  2. 查看采集到的PyTorch训练性能数据结果文件。

    训练结束后,在torch_npu.profiler.tensorboard_trace_handler接口指定的目录下生成Ascend PyTorch Profiler接口的采集结果目录。

    └── localhost.localdomain_139247_20230628101435_ascend_pt    // 解析结果目录,命名格式:{worker_name}_{时间戳}_ascend_pt,默认情况下{worker_name}为{hostname}_{pid}
        ├── profiler_info.json              // 多卡或集群场景命名规则为profiler_info_{Rank_ID}.json,用于记录Profiler相关的元数据
        ├── ASCEND_PROFILER_OUTPUT          // Ascend PyTorch Profiler接口采集性能数据
        │   ├── ascend_pytorch_profiler_{rank_id}.db          // export_type=torch_npu.profiler.ExportType.Db时该目录下仅生成.db文件,其他.json和.csv文件不生成,使用Ascend Insight工具展示
        │   ├── analysis.db                // 多卡或集群等存在通信的场景下,设置export_type=torch_npu.profiler.ExportType.Db时该目录下仅生成.db文件,其他.json和.csv文件不生成,使用Ascend Insight工具展示
        │   ├── communication.json         // 为多卡或集群等存在通信的场景性能分析提供可视化数据基础,配置experimental_config的profiler_level=torch_npu.profiler.ProfilerLevel.Level1或profiler_level=torch_npu.profiler.ProfilerLevel.Level2生成
        │   ├── communication_matrix.json   // 通信小算子基本信息文件,配置experimental_config的profiler_level=torch_npu.profiler.ProfilerLevel.Level1或profiler_level=torch_npu.profiler.ProfilerLevel.Level2生成
        │   ├── data_preprocess.csv        // 配置experimental_config profiler_level=torch_npu.profiler.ProfilerLevel.Level2生成
        │   ├── kernel_details.csv
        │   ├── l2_cache.csv               // 配置experimental_config的l2_cache=True生成
        │   ├── memory_record.csv
        │   ├── npu_module_mem.csv
        │   ├── operator_details.csv
        │   ├── operator_memory.csv
        │   ├── step_trace_time.csv        // 迭代中计算和通信的时间统计
        │   ├── op_statistic.csv        // AI Core和AI CPU算子调用次数及耗时数据
        │   └── trace_view.json
        ├── FRAMEWORK                      // 框架侧的性能原始数据,无需关注,data_simplification=True时删除此目录
        │   ├── torch.memory_usage
        │   ├── torch.op_mark
        │   ├── torch.op_range
        │   ├── torch.python_func_call     // with_stack=True时生成
        │   └── torch.python_module_call   // with_stack=True时生成
        └── PROF_000001_20230628101435646_FKFLNPEPPRRCFCBA  // CANN层的性能数据,命名格式:PROF_{数字}_{时间戳}_{字符串},data_simplification=True时,仅保留此目录下的原始性能数据,删除其他数据
              ├── analyze      // 配置experimental_config的profiler_level=torch_npu.profiler.ProfilerLevel.Level1或profiler_level=torch_npu.profiler.ProfilerLevel.Level2生成
              ├── device_*
              ├── host
              ├── mindstudio_profiler_log
              └── mindstudio_profiler_output
    ├── localhost.localdomain_139247_20230628101435_ascend_pt_op_args // 算子信息统计文件目录,配置experimental_config的record_op_args=True生成
        ├── 进程ID
        │    ├── operator_name+data_type+timestamp.json // 算子信息统计文件

    以上数据文件用户无需打开查看,可使用Ascend Insight工具进行性能数据的查看和分析,如需了解详细字段解释请参见Ascend PyTorch Profiler接口采集数据

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词