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

Ascend PyTorch Profiler接口采集

Ascend PyTorch Profiler接口工具当前支持如下性能数据采集方式:

其他相关功能:

参考信息:

约束

Ascend PyTorch Profiler接口支持多种采集方式,各采集方式不可同时开启。

前提条件

采集并解析性能数据(torch_npu.profiler.profile)

  1. 在训练脚本(如train_*.py文件)在线推理脚本内添加如下示例代码进行性能数据采集参数配置,之后启动训练/在线推理。如下示例代码。

    以下示例代码中的torch_npu.profiler.profile接口详细介绍请参见Ascend PyTorch Profiler接口说明

     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')
    
  2. 性能数据解析。

    支持自动解析(参照以上示例代码中tensorboard_trace_handlerprof.export_chrome_trace)和离线解析

  3. 查看采集到的PyTorch训练/在线推理性能数据结果文件和性能数据分析。

    性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见MindStudio Insight 用户指南将解析后的性能数据文件进行可视化展示和分析。

采集并解析性能数据(dynamic_profile)

dynamic_profile主要功能是在执行模型训练/在线推理过程中可以随时开启采集进程。

dynamic_profile支持多种开启方式,以下方式只选择一种使用,不可同时使用两种及以上方式开启dynamic_profile。

环境变量方式

  1. 配置如下环境变量:
    export PROF_CONFIG_PATH="profiler_config_path"

    配置该环境变量后启动训练,dynamic_profile会在profiler_config_path下自动创建模板文件profiler_config.json,用户可基于模板文件自定义修改配置项。

    • 该方式仅支持训练场景。
    • 该方式下dynamic_profile不支持采集第一个迭代(step0)的数据。
    • 该方式依赖torch原生Optimizer.step()划分训练过程中Profiling的step,不支持自定义Optimizer场景。
    • profiler_config_path路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。
  2. 启动训练任务。
  3. 重新开启一个命令行窗口,修改profiler_config.json配置文件用以使能Profiling任务。
    配置文件中包含Profiler的性能数据采集参数,用户可以参考profiler_config.json文件说明修改配置文件参数来执行不同的Profiling任务。
    • dynamic_profile通过识别profiler_config.json文件的状态判断文件是否被修改:
      • dynamic_profile每2s轮询一次,若发现profiler_config.json文件改动,则启动采集进程,之后记录step10到step11之间的运行间隔,将此时间作为新的轮询时间,最小值为1s。
      • 若在dynamic_profile采集执行期间,profiler_config.json文件被修改,则在采集进程结束之后,再次启动最后一次文件修改的dynamic_profile采集。
    • 建议用户使用共享存储设置dynamic_profile的profiler_config_path。
    • profiler_config_path目录下会自动记录dynamic_profile的维测日志,详细介绍请参见dynamic_profile动态采集维测日志介绍
  4. 性能数据解析。

    支持自动解析和手动解析,请参见表5中的analyse参数。

  5. 查看采集到的PyTorch训练/在线推理性能数据结果文件和性能数据分析。

    性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见MindStudio Insight 用户指南将解析后的性能数据文件进行可视化展示和分析。

修改用户训练/在线推理脚本,添加dynamic_profile接口方式

  1. 在训练脚本(如train_*.py文件)在线推理脚本中添加如下示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 加载dynamic_profile模块
    from torch_npu.profiler import dynamic_profile as dp
    # 设置Profiling配置文件的路径
    dp.init("profiler_config_path")
    
    for step in steps:
    	train_one_step()
    	# 划分step
    	dp.step()
    

    init时,dynamic_profile会在profiler_config_path下自动创建模板文件profiler_config.json,用户可基于模板文件自定义修改配置项。

    profiler_config_path路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。

  2. 启动训练/在线推理任务。
  3. 重新开启一个命令行窗口,修改profiler_config.json配置文件用以使能Profiling任务。
    配置文件中包含Profiler的性能数据采集参数,用户可以参考profiler_config.json文件说明修改配置文件参数来执行不同的Profiling任务。
    • dynamic_profile通过识别profiler_config.json文件的状态判断文件是否被修改:
      • dynamic_profile每2s轮询一次,若发现profiler_config.json文件改动,则启动采集进程,之后记录step10到step11之间的运行间隔,将此时间作为新的轮询时间,最小值为1s。
      • 若在dynamic_profile采集执行期间,profiler_config.json文件被修改,则在采集进程结束之后,再次启动最后一次文件修改的dynamic_profile采集。
    • 建议用户使用共享存储设置dynamic_profile的profiler_config_path。
    • profiler_config_path目录下会自动记录dynamic_profile的维测日志,详细介绍请参见dynamic_profile动态采集维测日志介绍
  4. 性能数据解析。

    支持自动解析和手动解析,请参见表5中的analyse参数。

  5. 查看采集到的PyTorch训练/在线推理性能数据结果文件和性能数据分析。

    性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见MindStudio Insight 用户指南将解析后的性能数据文件进行可视化展示和分析。

修改用户训练/在线推理脚本,添加dynamic_profile的dp.start()函数方式

  1. 在训练脚本(如train_*.py文件)在线推理脚本中添加如下示例代码:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    # 加载dynamic_profile模块
    from torch_npu.profiler import dynamic_profile as dp
    # 设置init接口Profiling配置文件路径
    dp.init("profiler_config_path")
    
    for step in steps:
    	if step==5:
    		# 设置start接口Profiling配置文件路径
    		dp.start("start_config_path")
    	train_one_step()
    	# 划分step,需要进行profile的代码需在dp.start()接口和dp.step()接口之间
    	dp.step()
    

    start_config_path同样指定为profiler_config.json,但需要用户根据profiler_config.json文件说明手动创建配置文件并根据场景需要配置参数。此处须指定具体文件名,例如dp.start("/home/xx/start_config_path/profiler_config.json")。

    profiler_config_path和start_config_path路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。

    • 添加dp.start()后,当训练/在线推理任务进行到dp.start()时,会自动按照start_config_path指定的profiler_config.json文件进行采集。dp.start()函数不感知profiler_config.json文件的修改,只会在训练/在线推理过程中触发一次采集任务。
    • 添加dp.start()并启动训练/在线推理后:
      • dp.start()未指定profiler_config.json配置文件或配置文件因错误未生效,则执行到dp.start()后按照profiler_config_path目录下的profiler_config.json文件配置进行采集。
      • 若在dp.init()配置的dynamic_profile生效期间,脚本运行至dp.start(),则dp.start()不生效。
      • 若在dp.init()配置的dynamic_profile采集结束后,脚本运行至dp.start(),则继续执行dp.start()采集,并在prof_dir目录下生成新的性能数据文件目录
      • 若在dp.start()配置的dynamic_profile生效期间,改动profiler_config_path目录下的profiler_config.json文件,dp.init()会等待dp.start()采集完成后启动,并在prof_dir目录下生成新的性能数据文件目录。
    • 建议用户使用共享存储设置dynamic_profile的profiler_config_path。
  2. 启动训练/在线推理任务。
  3. 性能数据解析。

    支持自动解析和手动解析,请参见表5中的analyse参数。

  4. 查看采集到的PyTorch训练/在线推理性能数据结果文件和性能数据分析。

    性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见MindStudio Insight 用户指南将解析后的性能数据文件进行可视化展示和分析。

采集并解析性能数据(torch_npu.profiler._KinetoProfile)

  1. 在训练脚本(如train_*.py文件)在线推理脚本内添加如下示例代码进行性能数据采集参数配置,之后启动训练/在线推理。如下示例代码。

    以下示例代码中的torch_npu.profiler._KinetoProfile接口详细介绍请参见Ascend PyTorch Profiler接口说明

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    import torch
    import torch_npu
    
    ...
    
    prof = torch_npu.profiler._KinetoProfile(activities=None, record_shapes=False, profile_memory=False, with_stack=False, with_flops=False, with_modules=False, experimental_config=None)
    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导出性能数据。

  2. 性能数据解析。

    支持自动解析(参照以上示例代码中prof.export_chrome_trace)。

  3. 查看采集到的PyTorch训练/在线推理性能数据结果文件和性能数据分析。

    性能数据结果文件详细介绍请参见Ascend PyTorch Profiler接口采集数据,性能数据分析请参见MindStudio Insight 用户指南将解析后的性能数据文件进行可视化展示和分析。

采集并解析msprof_tx数据(可选)

针对大集群场景传统Profiling数据量大、分析流程复杂的现象,通过experimental_configmsprof_tx参数开启自定义打点功能,自定义采集时间段或者关键函数的开始和结束时间点,识别关键函数或迭代等信息,对性能问题快速定界。

使用方式及示例代码如下:

  1. 使能torch_npu.profiler,打开msprof_tx开关,搭配profiler_level开关设置为Level_none(可根据实际采集需要,配置对应的level),采集打点数据。
  2. 在PyTorch脚本中对于想采集的事件调用torch_npu.npu.mstx、torch_npu.npu.mstx.mark、torch_npu.npu.mstx.range_start、torch_npu.npu.mstx.range_end、torch_npu.npu.mstx.mstx_range的打点mark接口实现打点,采集对应事件的耗时。接口详细介绍请参见Ascend Extension for PyTorch API 参考中的“Ascend Extension for PyTorch自定义API > torch_npu.npu > profiler”。

只记录host侧range耗时:

1
2
3
id = torch_npu.npu.mstx.range_start("dataloader", None)    # 第二个入参设置None或者不设置,只记录host侧range耗时
dataloader()
torch_npu.npu.mstx.range_end(id)

在计算流上打点,记录host侧range耗时和device侧对应的range耗时:

1
2
3
4
stream = torch_npu.npu.current_stream()
id = torch_npu.npu.mstx.range_start("matmul", stream)    # 第二个入参设置有效的stream,记录host侧range耗时和device侧对应的range耗时
torch.matmul()
torch_npu.npu.mstx.range_end(id)

在集合通信流上打点:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from torch.distributed.distributed_c10d import _world

if (torch.__version__ != '1.11.0') :
	stream_id = _world.default_pg._get_backend(torch.device('npu'))._get_stream_id(False)
	collective_stream = torch.npu.Stream(stream_id=collective_stream_id, device_type=20, device_index=device_id)    # device_index设置实际业务的device_id值
else:
	stream_id = _world.default_pg._get_stream_id(False)
	current_stream = torch.npu.current_stream()
	cdata = current_stream._cdata & 0xffff000000000000
	collective_stream = torch.npu.Stream(_cdata=( stream_id + cdata), device_index=device_id)    # device_index设置实际业务的device_id值
id = torch_npu.npu.mstx.range_start("allreduce", collective_stream)    # 第二个入参设置有效的stream,记录host侧range耗时和device侧对应的range耗时
torch.allreduce()
torch_npu.npu.mstx.range_end(id)

在P2P通信流上打点:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from torch.distributed.distributed_c10d import _world
 
if (torch.__version__ != '1.11.0') :
	stream_id = _world.default_pg._get_backend(torch.device('npu'))._get_stream_id(True)
	p2p_stream = torch.npu.Stream(stream_id=collective_stream_id, device_type=20, device_index=device_id)    # device_index设置实际业务的device_id值
else:
	stream_id = _world.default_pg._get_stream_id(True)
	current_stream = torch.npu.current_stream()
	cdata = current_stream._cdata & 0xffff000000000000
	p2p_stream = torch.npu.Stream(_cdata=( stream_id + cdata), device_index=device_id)    # device_index设置实际业务的device_id值
id = torch_npu.npu.mstx.range_start("send", p2p_stream)    # 第二个入参设置有效的stream,记录host侧range耗时和device侧对应的range耗时
torch.send()
torch_npu.npu.mstx.range_end(id)

想要采集如上场景数据,需要配置torch_npu.profiler.profile接口,使能msprof_tx开关,参考样例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import torch_npu

stream = torch_npu.npu.current_stream()
id = torch_npu.npu.mstx.range_start("Func", stream)    # 标识func函数在host侧以及在device侧的range开始
func()            # 业务代码
torch_npu.npu.mstx.range_end(id)            # 标识func函数在host侧以及在device侧的range结束     
    
experimental_config = torch_npu.profiler._ExperimentalConfig(
	profiler_level=torch_npu.profiler.ProfilerLevel.Level_none,
	msprof_tx=True,
	export_type=torch_npu.profiler.ExportType.Db
	)
with torch_npu.profiler.profile(
	schedule=torch_npu.profiler.schedule(wait=1, warmup=1, active=2, repeat=2, skip_first=1),
	on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"),
	experimental_config=experimental_config) as prof:
       
	for epoch in range(epochs):
		torch_npu.npu.mstx.mark("train epoch start")    # 标识在host侧以及在device侧的瞬时时刻,也可以使用torch_npu.npu.mstx().mark("train epoch start")
		for step in range(steps):
			train_one_step(step, steps, train_loader, model, optimizer, criterion)
			prof.step()

打点数据使用MindStudio Insight工具打开,可视化效果如下:

图1 打点结果示例

msprof_tx功能默认采集通信算子性能数据,格式是comm:{通信名},{通信域名},{输入数据格式},{输入数据个数},例如:comm:HcclBroadcast,xxxxxx,int64,5,其中xxxxxx表示通信域名。

可以通过该功能查看用户自定义打点从框架侧到CANN层再到NPU侧的执行调度情况,进而帮助识别用户想观察的关键函数或者事件,定界性能问题。

msprof_tx采集结果数据详细介绍请参见msproftx数据说明

采集环境变量信息(可选)

通过Ascend PyTorch Profiler接口采集性能数据时,默认采集环境变量信息,当前支持采集的环境变量如下:

  • "ASCEND_GLOBAL_LOG_LEVEL"
  • "HCCL_RDMA_TC"
  • "HCCL_RDMA_SL"
  • "ACLNN_CACHE_LIMIT"

操作步骤:

  1. 在环境下配置环境变量,示例如下:
    export ASCEND_GLOBAL_LOG_LEVEL=1
    export HCCL_RDMA_TC=0
    export HCCL_RDMA_SL=0
    export ACLNN_CACHE_LIMIT=4096

    环境变量根据用户实际需要配置。

  2. 执行Ascend PyTorch Profiler接口采集。
  3. 查看结果数据。
    • 当experimental_config参数的export_type配置为torch_npu.profiler.ExportType.Text时,以上步骤配置的环境变量信息将保存在{worker_name}_{时间戳}_ascend_pt目录下的profiler_metadata.json文件中。
    • 当experimental_config参数的export_type配置为torch_npu.profiler.ExportType.Db时,在ascend_pytorch_profiler_{rank_id}.db文件下的META_DATA表写入环境变量信息。

以自定义字符串键和字符串值的形式标记性能数据采集过程(可选)

  • 示例一
    1
    2
    with torch_npu.profiler.profile()  as prof:
    	prof.add_metadata(key, value)
    
  • 示例二
    1
    2
    with torch_npu.profiler._KinetoProfile()  as prof:
    	prof.add_metadata_json(key, value)
    

add_metadata和add_metadata_json可以配置在torch_npu.profiler.profile和torch_npu.profiler._KinetoProfile下,须添加在profiler初始化后,finalize之前,即性能数据采集过程的代码中。

表1 add_metadata接口说明

类、函数名

含义

add_metadata

添加字符串标记,可取值:

  • key:字符串键。
  • value:字符串值。

示例:

1
prof.add_metadata("test_key1", "test_value1")

add_metadata_json

添加json格式字符串标记,可取值:

  • key:字符串键。
  • value:字符串值,json格式。

示例:

1
prof.add_metadata_json("test_key2", [1, 2, 3])

调用此接口传入的metadata数据写入到Ascend PyTorch Profiler接口的采集结果根目录下的profiler_metadata.json文件中。

Ascend PyTorch Profiler接口说明

表2 torch_npu.profiler.profile和torch_npu.profiler._KinetoProfile配置参数说明

参数名称

参数含义

是否必选

activities

CPU、NPU事件采集列表,Enum类型。取值为:

  • torch_npu.profiler.ProfilerActivity.CPU:框架侧数据采集的开关。
  • torch_npu.profiler.ProfilerActivity.NPU:CANN软件栈及NPU数据采集的开关。

默认情况下两个开关同时开启。

schedule

设置不同step的行为,Callable类型,由schedule类控制。默认不执行任何操作。

torch_npu.profiler._KinetoProfile不支持该参数。

on_trace_ready

采集结束时自动执行操作,Callable类型。当前支持执行tensorboard_trace_handler函数操作。当采集的数据量过大时,在当前环境下不适合直接解析性能数据,或者采集过程中中断了训练/在线推理进程,只采集了部分性能数据,可以采用离线解析

默认不执行任何操作。

torch_npu.profiler._KinetoProfile不支持该参数。

record_shapes

算子的InputShapes和InputTypes,Bool类型。取值为:

  • True:开启。
  • False:关闭。默认值。

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

profile_memory

算子的内存占用情况,Bool类型。取值为:

  • True:开启。
  • False:关闭。默认值。

PyTorch的v2.4.0-6.0.rc3分支配置torch_npu.profiler.ExportType.Db时,不支持解析profile_memory相关的算子内存占用信息。

说明:

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

with_stack

算子调用栈,Bool类型。包括框架层及CPU算子层的调用信息。取值为:

  • True:开启。
  • False:关闭。默认值。

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

with_modules

modules层级的Python调用栈,即框架层的调用信息,Bool类型。取值为:

  • True:开启。
  • False:关闭。默认值。

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

with_flops

算子浮点操作,Bool类型(该参数暂不支持解析性能数据)。取值为:

  • True:开启。
  • False:关闭。默认值。

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

experimental_config

扩展参数,通过扩展配置性能分析工具常用的采集项。支持采集项和详细介绍请参见experimental_config参数说明

use_cuda

昇腾环境不支持。开启采集cuda性能数据开关,Bool类型。取值为:

  • True:开启。
  • False:关闭。默认值。

torch_npu.profiler._KinetoProfile不支持该参数。

表3 torch_npu.profiler.profile和torch_npu.profiler._KinetoProfile方法说明

方法名

含义

step

划分不同迭代。

torch_npu.profiler._KinetoProfile不支持该方法。

export_chrome_trace

导出trace。在指定的.json文件里写入trace数据。Trace为Ascend PyTorch Profiler接口整合框架侧CANN软件栈及NPU数据后展示的各算子和接口的运行时间及关联关系。包含参数:

  • path:trace文件(.json)路径。指定文件所在的路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。必选。

在设置了torch_npu.profiler.tensorboard_trace_handler的情况下,export_chrome_trace不生效。

多卡场景下需要将不同卡设置不同的文件名,示例代码:

1
2
pid = os.getpid()
prof.export_chrome_trace(f'./chrome_trace_{pid}.json')

export_stacks

导出堆栈信息到文件。包含参数:

  • path:堆栈文件保存路径,需要配置文件名为“*.log”,可以指定路径,例如:/home/*.log,直接配置文件名时,文件保存在当前目录。路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。必选。
  • metric:保存的芯片类型可选择CPU或NPU,配置为“self_cpu_time_total”或“self_npu_time_total”。必选。

与export_chrome_trace方法在训练/在线推理脚本中的位置相同,示例如下:

1
export_stacks('resule_dir/stack.log', metric='self_npu_time_total')

导出的结果文件可使用FlameGraph工具进行查看,操作方法如下:

git clone https://github.com/brendangregg/FlameGraph
cd FlameGraph
./flamegraph.pl –title "NPU time" –countname "us." profiler.stacks > perf_viz.svg

start

设置采集开始的位置。可参考如下样例,在需要采集性能数据的训练/在线推理代码前后添加start和stop:

1
2
3
4
5
6
7
8
prof = torch_npu.profiler.profile(
on_trace_ready=torch_npu.profiler.tensorboard_trace_handler("./result"))
for step in range(steps):
    if step == 5:
        prof.start()
    train_one_step()
    if step == 5:
        prof.stop()

stop

设置采集结束的位置,需要先执行start。

表4 torch_npu.profiler类、函数说明

类、函数名

含义

torch_npu.profiler.schedule

设置不同step的行为,默认不执行该操作。为了获取更稳定的性能数据,建议配置该类的具体参数,参数取值及详细用法请参见torch_npu.profiler.schedule类参数说明

torch_npu.profiler.tensorboard_trace_handler

将采集到的性能数据导出为TensorBoard工具支持的格式。取值为:

  • dir_name:采集的性能数据的输出目录,string类型。路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。若配置tensorboard_trace_handler函数后未指定具体路径,性能数据默认落盘在当前目录。可选。

    若代码中未使用on_trace_ready=torch_npu.profiler.tensorboard_trace_handler,那么落盘的性能数据为原始数据,需要使用离线解析

    该函数优先级高于ASCEND_WORK_PATH,具体请参考环境变量参考

  • worker_name:用于区分唯一的工作线程,string类型,默认为{hostname}_{pid}。路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。可选。
  • analyse_flag:性能数据自动解析开关,bool类型。可取值True(开启自动解析,默认值)、False(关闭自动解析,采集完后的性能数据可以使用离线解析)。可选。

torch_npu.profiler._KinetoProfile不支持该函数。

torch_npu.profiler.ProfilerAction

Profiler状态,Enum类型。取值为:

  • NONE:无任何行为。
  • WARMUP:性能数据采集预热。
  • RECORD:性能数据采集。
  • RECORD_AND_SAVE:性能数据采集并保存。

torch_npu.profiler._ExperimentalConfig

性能数据采集扩展,Enum类型。通过torch_npu.profiler.profile的experimental_config调用,详细介绍请参见experimental_config参数说明

torch_npu.profiler.supported_activities

查询当前支持采集的activities参数的CPU、NPU事件。

torch_npu.profiler.supported_profiler_level

查询当前支持的experimental_config参数的profiler_level级别。

torch_npu.profiler.supported_ai_core_metrics

查询当前支持的experimental_config参数的AI Core性能指标采集项。

torch_npu.profiler.supported_export_type

查询当前支持的torch_npu.profiler.ExportType的性能数据结果文件类型。

性能数据会占据一定的磁盘空间,可能存在磁盘写满导致服务器不可用的风险。性能数据所需空间跟模型的参数、采集开关配置、采集的迭代数量有较大关系,须用户自行保证落盘目录下的可用磁盘空间。

profiler_config.json文件说明

profiler_config.json文件内容如下,以默认配置为例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
	"activities": ["CPU", "NPU"],
	"prof_dir": "./",
	"analyse": false,
	"record_shapes": false,
	"profile_memory": false,
	"with_stack": false,
	"with_flops": false,
	"with_modules": false,
	"active": 1,
	"is_rank": false,
	"rank_list": [],
	"experimental_config": {
		"profiler_level": "Level0",
		"aic_metrics": "AiCoreNone",
		"l2_cache": false,
		"op_attr": false,
		"gc_detect_threshold": null,
		"data_simplification": true,
		"record_op_args": false,
		"export_type": "text",
		"msprof_tx": false
	}
}
表5 参数说明

参数名称

参数含义

是否必选

activities

CPU、NPU事件采集列表。取值为:

  • CPU:框架侧数据采集的开关。
  • NPU:CANN软件栈及NPU数据采集的开关。

默认情况下两个开关同时开启。

prof_dir

采集的性能数据的输出目录。默认路径为:./。路径格式仅支持由字母、数字和下划线组成的字符串,不支持软链接。

analyse

性能数据自动解析开关,可取值:

  • true:开启自动解析。
  • false:关闭自动解析,即手动解析,采集完后的性能数据可以使用离线解析,默认值。

record_shapes

算子的InputShapes和InputTypes。取值为:

  • true:开启。
  • false:关闭,默认值。

activities配置为CPU时生效。

profile_memory

算子的内存占用情况。取值为:

  • true:开启。
  • false:关闭,默认值。
说明:

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

with_stack

算子调用栈。包括框架层及CPU算子层的调用信息。取值为:

  • true:开启。
  • false:关闭,默认值。

activities配置为CPU时生效。

with_flops

算子浮点操作,Bool类型(该参数暂不支持解析性能数据)。取值为:

  • true:开启。
  • false:关闭,默认值。

activities配置为CPU时生效。

with_modules

modules层级的Python调用栈,即框架层的调用信息。取值为:

  • true:开启。
  • false:关闭,默认值。

activities配置为CPU时生效。

is_rank

开启指定Rank采集功能。取值为:

  • true:开启。
  • false:关闭,默认值。

开启后,dynamic_profile会识别ranks参数中配置的Rank ID,根据配置的Rank ID识别环境中存在的对应Rank执行采集操作;若开启后rank_list配置为空则不采集性能数据。

开启后,analyse自动解析不生效,需要使用离线解析

rank_list

配置采集的Rank ID,取值为整数,默认值为空,表示不采集任何性能数据。须配置为环境中有效的Rank ID。可同时指定一个或多个Rank,配置示例:"rank_list": [1,2,3]。

experimental_config

扩展参数,通过扩展配置性能分析工具常用的采集项。详见experimental_config参数说明(dynamic_profile动态采集场景)

对于动态采集场景,该配置文件中配置的experimental_config的子参数选项取实际参数值即可,例如"aic_metrics": "PipeUtilization"。

metadata

采集模型超参数(key)和配置信息(value)。

  • 若"export_type": "text",则保存数据到{worker_name}_{时间戳}_ascend_pt目录下的profiler_metadata.json文件中。
  • 若"export_type": "db",则保存数据到ascend_pytorch_profiler_{rank_id}.db中的META_DATA表以及{worker_name}_{时间戳}_ascend_pt目录下的profiler_metadata.json文件中。

配置示例:

1
2
3
4
5
6
7
	"metadata": {
		"distributed_args":{
			"tp":2,
			"pp":4,
			"dp":8
		}
	}

active

配置采集的迭代数,取值为正整数,默认值为1。

experimental_config参数说明(dynamic_profile动态采集场景)

experimental_config参数均为可选参数,支持扩展的采集项如下:

表6 experimental_config

参数

描述

export_type

设置导出的性能数据结果文件格式。可取值:

  • text:表示解析为.json和.csv格式的timeline和summary文件,详见Ascend PyTorch Profiler接口采集数据
  • db:表示解析为一个汇总所有性能数据的.db格式文件(ascend_pytorch.db、analysis.db),使用MindStudio Insight工具展示。仅支持on_trace_ready接口导出和离线解析导出,需配套安装支持导出db格式的Ascend-cann-toolkit开发套件包,即CANN 8.0.RC1及以上版本。

设置无效值或未配置均取默认值Text。

profiler_level

采集的Level等级。可取值如下:
  • Level_none:不采集所有Level层级控制的数据,即关闭profiler_level。
  • Level0:采集上层应用数据、底层NPU数据以及NPU上执行的算子信息。默认值。配置该参数时,仅采集部分数据,其中部分算子信息不采集,详细情况请参见op_summary(算子详细信息)
  • Level1:在Level0的基础上多采集CANN层AscendCL数据和NPU上执行的AI Core性能指标信息、开启aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization、生成HCCL的communication.json和communication_matrix.json以及api_statistic.csv文件。
  • Level2:在Level1的基础上多采集CANN层Runtime数据以及AI CPU(data_preprocess.csv文件)数据。

msprof_tx

打点控制开关,通过开关开启自定义打点功能。可取值true(开启)或false(关闭),默认关闭。该参数使用请参见采集并解析msprof_tx数据(可选)

data_simplification

数据精简模式,开启后将在导出性能数据后删除FRAMEWORK目录数据以及删除多余数据,仅保留profiler_info.json文件、ASCEND_PROFILER_OUTPUT目录和PROF_XXX目录下的原始性能数据,以节省存储空间。可取值true(开启)或false(关闭),默认开启。

aic_metrics

AI Core的性能指标采集项。可取值如下:

以下采集项的结果数据含义可参见op_summary(算子详细信息),但具体采集结果请以实际情况为准。
  • AiCoreNone:关闭AI Core的性能指标采集,默认值。
  • PipeUtilization:计算单元和搬运单元耗时占比,包括采集项vec_ratio、mac_ratio、scalar_ratio、mte1_ratio、mte2_ratio、mte3_ratio、icache_miss_rate、fixpipe_ratio。
  • ArithmeticUtilization:各种计算类指标占比统计,包括采集项mac_fp16_ratio、mac_int8_ratio、vec_fp32_ratio、vec_fp16_ratio、vec_int32_ratio、vec_misc_ratio。
  • Memory:外部内存读写类指令占比,包括采集项ub_read_bw、ub_write_bw、l1_read_bw、l1_write_bw、l2_read_bw、l2_write_bw、main_mem_read_bw、main_mem_write_bw。
  • MemoryL0:内部内存读写类指令占比,包括采集项scalar_ld_ratio、scalar_st_ratio、l0a_read_bw、l0a_write_bw、l0b_read_bw、l0b_write_bw、l0c_read_bw、l0c_write_bw、l0c_read_bw_cube、l0c_write_bw_cube。
  • ResourceConflictRatio:流水线队列类指令占比,包括采集项vec_bankgroup_cflt_ratio、vec_bank_cflt_ratio、vec_resc_cflt_ratio、mte1_iq_full_ratio、mte2_iq_full_ratio、mte3_iq_full_ratio、cube_iq_full_ratio、vec_iq_full_ratio、iq_full_ratio。
  • MemoryUB:内部内存读写指令占比,包括采集项vec_bankgroup_cflt_ratio、vec_bank_cflt_ratio、vec_resc_cflt_ratio、mte1_iq_full_ratio、mte2_iq_full_ratio、mte3_iq_full_ratio、cube_iq_full_ratio、vec_iq_full_ratio、iq_full_ratio。
  • L2Cache:读写cache命中次数和缺失后重新分配次数, 包括采集项ai*_write_cache_hit、ai*_write_cache_miss_allocate、ai*_r*_read_cache_hit、ai*_r*_read_cache_miss_allocate。

l2_cache

控制L2 Cache数据采集开关。可取值true(开启)或false(关闭),默认关闭。该采集项在ASCEND_PROFILER_OUTPUT生成l2_cache.csv文件,结果字段介绍请参见l2_cache(L2 Cache命中率)

op_attr

控制采集算子的属性信息开关,当前仅支持采集aclnn算子。可取值true(开启)或false(关闭),默认关闭。该参数采集的性能数据仅支持export_type为db时解析的db格式文件。Level_none时,该参数不生效。

record_op_args

控制算子信息统计功能开关。可取值true(开启)或false(关闭),默认关闭。开启后会在{worker_name}_{时间戳}_ascend_pt_op_args目录输出采集到算子信息文件。

说明:

该参数在AOE工具执行PyTorch训练场景下调优时使用,且不建议与其他性能数据采集接口同时开启。详见AOE工具使用指南

gc_detect_threshold

GC检测阈值。取值范围为大于等于0的数值,单位ms。当用户设置的阈值为数字时,表示开启GC检测,只采集超过阈值的GC事件。

配置为0时表示采集所有的GC事件(可能造成采集数据量过大,请谨慎配置),推荐设置为1ms。

默认为null,表示不开启GC检测功能。

GC是Python进程对已经销毁的对象进行内存回收。

解析结果文件格式配置为torch_npu.profiler.ExportType.Text时,则在解析结果数据trace_view.json中生成GC层。

解析结果文件格式配置为torch_npu.profiler.ExportType.Db时,则在ascend_pytorch_profiler_{rank_id}.db中生成GC_RECORD表。可通过MindStudio Insight工具查看。

experimental_config参数说明

experimental_config参数均为可选参数,支持扩展的采集项如下:

表7 experimental_config

参数

描述

export_type

设置导出的性能数据结果文件格式,Enum类型。可取值:

  • torch_npu.profiler.ExportType.Text:表示解析为.json和.csv格式的timeline和summary文件,详见Ascend PyTorch Profiler接口采集数据
  • torch_npu.profiler.ExportType.Db:表示解析为一个汇总所有性能数据的.db格式文件(ascend_pytorch_profiler_{rank_id}.db、analysis.db),使用MindStudio Insight工具展示。仅支持on_trace_ready接口导出和离线解析导出,需配套安装支持导出db格式的Ascend-cann-toolkit开发套件包,即CANN 8.0.RC1及以上版本。

设置无效值或未配置均取默认值torch_npu.profiler.ExportType.Text。

profiler_level

采集的Level等级,Enum类型。可取值如下:
  • torch_npu.profiler.ProfilerLevel.Level_none:不采集所有Level层级控制的数据,即关闭profiler_level。
  • torch_npu.profiler.ProfilerLevel.Level0:采集上层应用数据、底层NPU数据以及NPU上执行的算子信息。默认值。配置该参数时,仅采集部分数据,其中部分算子信息不采集,详细情况请参见op_summary(算子详细信息)中有关task_time为l0时的说明。
  • torch_npu.profiler.ProfilerLevel.Level1:在Level0的基础上多采集CANN层AscendCL数据和NPU上执行的AI Core性能指标信息、开启aic_metrics=torch_npu.profiler.AiCMetrics.PipeUtilization、生成HCCL的communication.json和communication_matrix.json以及api_statistic.csv文件。
  • torch_npu.profiler.ProfilerLevel.Level2:在Level1的基础上多采集CANN层Runtime数据以及AI CPU(data_preprocess.csv文件)数据。

msprof_tx

打点控制开关,通过开关开启自定义打点功能,bool类型。可取值True(开启)或False(关闭),默认关闭。该参数使用请参见采集并解析msprof_tx数据(可选)

data_simplification

数据精简模式,开启后将在导出性能数据后删除FRAMEWORK目录数据以及删除多余数据,仅保留profiler_info.json文件、ASCEND_PROFILER_OUTPUT目录和PROF_XXX目录下的原始性能数据,以节省存储空间,bool类型。可取值True(开启)或False(关闭),默认开启。

aic_metrics

AI Core的性能指标采集项,Enum类型。可取值如下:

以下采集项的结果数据含义可参见op_summary(算子详细信息),但具体采集结果请以实际情况为准。
  • torch_npu.profiler.AiCMetrics.AiCoreNone:关闭AI Core的性能指标采集,默认值。
  • torch_npu.profiler.AiCMetrics.PipeUtilization:计算单元和搬运单元耗时占比,包括采集项vec_ratio、mac_ratio、scalar_ratio、mte1_ratio、mte2_ratio、mte3_ratio、icache_miss_rate、fixpipe_ratio。
  • torch_npu.profiler.AiCMetrics.ArithmeticUtilization:各种计算类指标占比统计,包括采集项mac_fp16_ratio、mac_int8_ratio、vec_fp32_ratio、vec_fp16_ratio、vec_int32_ratio、vec_misc_ratio。
  • torch_npu.profiler.AiCMetrics.Memory:外部内存读写类指令占比,包括采集项ub_read_bw、ub_write_bw、l1_read_bw、l1_write_bw、l2_read_bw、l2_write_bw、main_mem_read_bw、main_mem_write_bw。
  • torch_npu.profiler.AiCMetrics.MemoryL0:内部内存读写类指令占比,包括采集项scalar_ld_ratio、scalar_st_ratio、l0a_read_bw、l0a_write_bw、l0b_read_bw、l0b_write_bw、l0c_read_bw、l0c_write_bw、l0c_read_bw_cube、l0c_write_bw_cube。
  • torch_npu.profiler.AiCMetrics.ResourceConflictRatio:流水线队列类指令占比,包括采集项vec_bankgroup_cflt_ratio、vec_bank_cflt_ratio、vec_resc_cflt_ratio、mte1_iq_full_ratio、mte2_iq_full_ratio、mte3_iq_full_ratio、cube_iq_full_ratio、vec_iq_full_ratio、iq_full_ratio。
  • torch_npu.profiler.AiCMetrics.MemoryUB:内部内存读写指令占比,包括采集项vec_bankgroup_cflt_ratio、vec_bank_cflt_ratio、vec_resc_cflt_ratio、mte1_iq_full_ratio、mte2_iq_full_ratio、mte3_iq_full_ratio、cube_iq_full_ratio、vec_iq_full_ratio、iq_full_ratio。
  • torch_npu.profiler.AiCMetrics.L2Cache:读写cache命中次数和缺失后重新分配次数, 包括采集项ai*_write_cache_hit、ai*_write_cache_miss_allocate、ai*_r*_read_cache_hit、ai*_r*_read_cache_miss_allocate。

l2_cache

控制L2 Cache数据采集开关,bool类型。可取值True(开启)或False(关闭),默认关闭。该采集项在ASCEND_PROFILER_OUTPUT生成l2_cache.csv文件,结果字段介绍请参见l2_cache(L2 Cache命中率)

op_attr

控制采集算子的属性信息开关,当前仅支持采集aclnn算子,bool类型。可取值True(开启)或False(关闭),默认关闭。该参数采集的性能数据仅支持export_type=torch_npu.profiler.ExportType.Db时解析的db格式文件。torch_npu.profiler.ProfilerLevel.None时,该参数不生效。

record_op_args

控制算子信息统计功能开关,bool类型。可取值True(开启)或False(关闭),默认关闭。开启后会在{worker_name}_{时间戳}_ascend_pt_op_args目录输出采集到算子信息文件。

说明:

该参数在AOE工具执行PyTorch训练场景下调优时使用,且不建议与其他性能数据采集接口同时开启。详见AOE工具使用指南

gc_detect_threshold

GC检测阈值,float类型。取值范围为大于等于0的数值,单位ms。当用户设置的阈值为数字时,表示开启GC检测,只采集超过阈值的GC事件。

配置为0时表示采集所有的GC事件(可能造成采集数据量过大,请谨慎配置),推荐设置为1ms。

默认为None,表示不开启GC检测功能。

GC是Python进程对已经销毁的对象进行内存回收。

解析结果文件格式配置为torch_npu.profiler.ExportType.Text时,则在解析结果数据trace_view.json中生成GC层。

解析结果文件格式配置为torch_npu.profiler.ExportType.Db时,则在ascend_pytorch_profiler_{rank_id}.db中生成GC_RECORD表。可通过MindStudio Insight工具查看。

torch_npu.profiler.schedule类参数说明

torch_npu.profiler.schedule类用于在采集进程中设置在不同step时的采集行为。接口原型为:

torch_npu.profiler.schedule (wait, active, warmup = 0, repeat = 0, skip_first = 0)
表8 参数说明

参数

说明

wait

每次重复执行采集跳过的step轮数,int类型。必选。

active

采集的step轮数,int类型。必选。

warmup

预热的step轮数,int类型。默认值为0。建议设置1轮预热。可选。

repeat

重复执行wait+warmup+active的次数,int类型。默认值为0,表示重复执行repeat不停止,建议配置为大于0的整数。可选。

skip_first

采集前先跳过的step轮数,int类型。默认值为0。动态Shape场景建议跳过前10轮保证性能数据稳定;对于其他场景,可以根据实际情况自行配置。可选。

注:建议根据此公式配置schedule:step总数 >= skip_first+(wait+warmup+active)*repeat

torch_npu.profiler.schedule类、step和on_trace_ready函数使用关系示意图如下:

图2 torch_npu.profiler.schedule类、step和on_trace_ready函数使用关系示意图

设置示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
with torch_npu.profiler.profile(
    activities=[
        torch_npu.profiler.ProfilerActivity.CPU,
        torch_npu.profiler.ProfilerActivity.NPU,
    ],
    schedule=torch_npu.profiler.schedule(
        wait=1,                        # 等待阶段,跳过1个step
        warmup=1,                      # 预热阶段,跳过1个step
        active=2,                      # 记录2个step的活动数据,并在之后调用on_trace_ready
        repeat=2,                      # 循环wait+warmup+active过程2遍
        skip_first=1                   # 跳过1个step
    ),
    on_trace_ready=torch_npu.profiler.tensorboard_trace_handler('./result')
    ) as prof:
        for _ in range(9):
            train_one_step()
            prof.step()                # 通知profiler完成一个step

dynamic_profile动态采集维测日志介绍

dynamic_profile动态采集在profiler_config_path目录下自动记录dynamic_profile的维测日志,生成日志目录结构示例如下:
1
2
3
4
5
6
7
8
profiler_config_path/
├── log
    ├── dp_ubuntu_xxxxxx.log
    ├── dp_ubuntu_xxxxxx.log.1
    ├── monitor_dp_ubuntu_xxxxxx.log
    ├── monitor_dp_ubuntu_xxxxxx.log.1
├── profiler_config.json
└── shm
  • dp_ubuntu_xxxxxx.log:dynamic_profile动态采集的执行日志,记录动态采集执行过程中的所有动作(INFO)、警告(WARNING)和错误(ERROR)。文件命名格式:dp_{操作系统}_{AI任务进程ID}.log。

    AI任务启动时每个Rank会开启一个AI任务进程,dynamic_profile根据每个AI任务进程ID生成各个AI任务进程下的日志文件。

  • dp_ubuntu_xxxxxx.log.1:日志老化备份文件,dp_ubuntu_xxxxxx.log文件的存储上限为200K,达到上限后将时间最早的日志记录转移到dp_ubuntu_xxxxxx.log.1中,dp_ubuntu_xxxxxx.log.1文件存储上限同样为200K,达到上限后则将最早的日志记录老化删除。
  • monitor_dp_ubuntu_xxxxxx.log:profiler_config.json文件修改日志,开启dynamic_profile动态采集后,实时记录profiler_config.json文件的每次修改时间、修改是否生效以及dynamic_profile进程的结束,示例如下:
    1
    2
    3
    2024-08-21 15:51:46,392 [INFO] [2127856] _dynamic_profiler_monitor.py: Dynamic profiler process load json success
    2024-08-21 15:51:58,406 [INFO] [2127856] _dynamic_profiler_monitor.py: Dynamic profiler process load json success
    2024-08-21 15:58:16,795 [INFO] [2127856] _dynamic_profiler_monitor.py: Dynamic profiler process done
    

    文件命名格式:monitor_dp_{操作系统}_{monitor进程ID}.log。

  • monitor_dp_ubuntu_xxxxxx.log.1:日志老化备份文件,monitor_dp_ubuntu_xxxxxx.log文件的存储上限为200K,达到上限后将时间最早的日志记录转移到monitor_dp_ubuntu_xxxxxx.log.1中,monitor_dp_ubuntu_xxxxxx.log.1文件存储上限同样为200K,达到上限后则将最早的日志记录老化删除。
  • shm目录:为了适配Python3.7,dynamic_profile会在py37环境下会生成shm目录,目录下生成一个二进制文件(DynamicProfileNpuShm+时间)映射共享内存, 程序正常结束后会自动清理,当使用pkill终止程序时,由于是异常终止,程序无法释放资源,需要用户手动清理此文件,否则短时间内(<1h)下次使用同一配置路径启动dynamic_profile,则会导致dynamic_profile异常。对于Python3.8及以上版本,二进制文件(DynamicProfileNpuShm+时间)存放在 /dev/shm目录下,当使用pkill终止程序时,同样需要手动清理此文件。
搜索结果
找到“0”个结果

当前产品无相关内容

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