下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

性能分析(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文件)在线推理脚本内添加如下示例代码进行性能数据采集参数配置,之后启动训练/在线推理。下列示例代码中,加粗字段为需要配置的参数、方法、类和函数。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import torch
    import torch_npu
    
    ...
    
    experimental_config = torch_npu.profiler._ExperimentalConfig(
    	export_type=torch_npu.profiler.ExportType.Text,
    	profiler_level=torch_npu.profiler.ProfilerLevel.Level0,
    	msprof_tx=False,
    	aic_metrics=torch_npu.profiler.AiCMetrics.AiCoreNone,
    	l2_cache=False,
    	op_attr=False,
    	data_simplification=False,
    	record_op_args=False,
    	gc_detect_threshold=None
    )
    
    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=1),
    	on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"),
    	record_shapes=False,
    	profile_memory=False,
    	with_stack=False,
    	with_modules=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()
    

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import torch
    import torch_npu
    ...
    
    experimental_config = torch_npu.profiler._ExperimentalConfig(
    	export_type=torch_npu.profiler.ExportType.Text,
    	profiler_level=torch_npu.profiler.ProfilerLevel.Level0,
    	msprof_tx=False,
    	aic_metrics=torch_npu.profiler.AiCMetrics.AiCoreNone,
    	l2_cache=False,
    	op_attr=False,
    	data_simplification=False,
    	record_op_args=False,
    	gc_detect_threshold=None
    )
    
    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"),
    	record_shapes=False,
    	profile_memory=False,
    	with_stack=False,
    	with_modules=False,
    	with_flops=False,
    	experimental_config=experimental_config)
    prof.start()
    for step in range(steps):
    	train_one_step()
    	prof.step()
    prof.stop()
    

    除了使用tensorboard_trace_handler导出性能数据外,还可以使用以下方式导出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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")
    
    • 示例中的接口详细介绍请参见Ascend PyTorch Profiler接口说明
    • PyTorch场景更多性能数据采集方式请参见Ascend PyTorch Profiler接口采集
    • 性能数据会占据一定的磁盘空间,可能存在磁盘写满导致服务器不可用的风险。性能数据所需空间跟模型的参数、采集开关配置、采集的迭代数量有较大关系,须用户自行保证落盘目录下的可用磁盘空间。
  2. 查看采集到的PyTorch训练性能数据结果文件。

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

    • 若kernel_details.csv中出现StepID空值,用户可通过trace_view.json文件查看该算子的Step信息,或重新采集Profiling数据。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    └── localhost.localdomain_139247_20230628101435_ascend_pt    // 解析结果目录,命名格式:{worker_name}_{时间戳}_ascend_pt,默认情况下{worker_name}为{hostname}_{pid}
        ├── profiler_info.json              // 多卡或集群场景命名规则为profiler_info_{Rank_ID}.json,用于记录Profiler相关的元数据
        ├── profiler_metadata.json
        ├── ASCEND_PROFILER_OUTPUT          // Ascend PyTorch Profiler接口采集性能数据
           ├── ascend_pytorch_profiler_{rank_id}.db          // export_type=torch_npu.profiler.ExportType.Db时该目录下仅生成.db文件,其他.json和.csv文件不生成,使用MindStudio Insight工具展示
           ├── analysis.db                // 多卡或集群等存在通信的场景下,设置export_type=torch_npu.profiler.ExportType.Db时该目录下仅生成.db文件,其他.json和.csv文件不生成,使用MindStudio 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算子调用次数及耗时数据
           ├── api_statistic.csv          // 配置experimental_config的profiler_level=torch_npu.profiler.ProfilerLevel.Level1或profiler_level=torch_npu.profiler.ProfilerLevel.Level2生成
           └── trace_view.json
        ├── FRAMEWORK                      // 框架侧的性能原始数据,无需关注,data_simplification=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生成
    
搜索结果
找到“0”个结果

当前产品无相关内容

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