函数原型
def initialize_system(name = None)
功能说明
一般执行训练不需要调用该接口,如果用户统计训练时间时不想包括GE初始化时间,可以使用该接口。使用集合通信接口时,需要先调用该接口进行集合通信初始化。
使用约束
如果需要调用initialize_system接口,且训练执行时需要使能如下功能时,则必须在initialize_system起session时配置。
表1 initialize_system中的session配置项
配置项 |
说明 |
profiling_mode |
是否开启Profiling功能。
- True:开启Profiling功能,从enable_options读取Profiling的采集选项。
- False:关闭Profiling功能,默认关闭。
|
profiling_options |
Profiling采集选项,取值如下。
- training_trace:采集迭代轨迹数据,即训练任务及AI软件栈的软件信息,实现对训练任务的性能分析,重点关注数据增强、前后向计算、梯度聚合更新等相关数据。
- task_trace:采集任务轨迹数据,即昇腾AI处理器HWTS/AICore的硬件信息,分析任务开始、结束等信息。
- op_trace:采集单算子性能数据。如需采集单算子性能数据,需要构造单算子网络并执行训练脚本。该参数不能和training_trace和task_trace同时配置。
支持采集多项数据,多个采集项中间用冒号分开,例如配置为"traing_trace:task_trace”。
说明:
- 开启Profiling功能采集迭代轨迹数据时,需要同时配置fp_point和bp_point。
- 当配置为task_trace时,会同时开启training_trace数据采集。
|
fp_point |
开启Profiling功能采集迭代轨迹数据时,需要配置。 指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳。 配置值为指定的正向第一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入。 |
bp_point |
开启Profiling功能采集迭代轨迹数据时,需要配置。 指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,BP_POINT和FP_POINT可以计算出正反向时间。 配置值为指定的反向最后一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入。 |
enable_dump |
是否开启Data Dump功能,默认值:False。
- True:开启Data Dump功能,从dump_path读取Dump文件保存路径,dump_path为None时会产生异常。
- False:关闭Data Dump功能。
|
dump_path |
Dump文件保存路径。enable_dump或enable_dump_debug为true时,该参数必须配置。 该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。
- 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
- 相对路径配置直接以目录名开始,例如:output。
|
dump_step |
指定采集哪些迭代的Data Dump数据。默认值:None,表示所有迭代都会产生dump数据。 多个迭代用“|”分割,例如:0|5|10;也可以用"-"指定迭代范围,例如:0|3-5|10。 |
dump_mode |
Data Dump模式,用于指定dump算子输入还是输出数据。取值如下:
- input:仅Dump算子输入数据
- output:仅Dump算子输出数据,默认为output。
- all:Dump算子输入和输出数据
|
enable_dump_debug |
是否开启溢出检测功能,默认值:False。
- True:开启溢出检测功能,从dump_path读取Dump文件保存路径,dump_path为None时会产生异常。
- False:关闭溢出检测功能。
|
dump_debug_mode |
溢出检测模式,取值如下:
- aicore_overflow:AI Core算子溢出检测,检测在算子输入数据正常的情况下,输出是否不正常的极大值(如float16下65500,38400,51200这些值)。一旦检测出这类问题,需要根据网络实际需求和算子逻辑来分析溢出原因并修改算子实现。
- atomic_overflow:Atomic Add溢出检测,即除了AICore之外,还有其他涉及浮点计算的模块,比如SDMA,检测这些部分出现的溢出问题。
- all:同时进行AI Core算子溢出检测和Atomic Add溢出检测。
|
precision_mode |
算子精度模式,配置要求为string类型。
- allow_fp32_to_fp16:对于矩阵类算子,使用float16;对于矢量类算子,优先保持原图精度,如果网络模型中算子支持float32,则保留原始精度float32,如果网络模型中算子不支持float32,则直接降低精度到float16。
- force_fp16:算子既支持float16又支持float32数据类型时,强制选择float16。此参数仅适用于在线推理场景。
- cube_fp16in_fp32out/force_fp32:算子既支持float16又支持float32数据类型时,系统内部根据算子类型的不同,选择合适的处理方式。配置为force_fp32或cube_fp16in_fp32out,效果等同,cube_fp16in_fp32out为新版本中新增配置,对于矩阵计算类算子,该选项语义更清晰。
- 对于矩阵计算类算子,系统内部会按算子实现的支持情况处理:
- 优先选择输入数据类型为float16且输出数据类型为float32。
- 如果1中的场景不支持,则选择输入数据类型为float32且输出数据类型为float32。
- 如果2中的场景不支持,则选择输入数据类型为float16且输出数据类型为float16。
- 如果以上场景都不支持,则报错。
- 对于矢量计算类算子,如果网络模型中算子同时支持float16和float32,强制选择float32,若原图精度为float16,也会强制转为float32。如果网络模型中存在部分算子,并且该算子实现不支持float32,比如某算子仅支持float16类型,则该参数不生效,仍然使用支持的float16;如果该算子不支持float32,且又配置了混合精度黑名单(precision_reduce = false),则会使用float32的AI CPU算子。
- must_keep_origin_dtype:保持原图精度。如果原图中某算子精度为float16,但NPU中该算子实现不支持float16、仅支持float32,则系统内部自动采用高精度float32;如果原图中某算子精度为float32,但NPU中该算子实现不支持float32、仅支持float16,此场景下不能使用此参数值,系统不支持使用低精度。
- allow_mix_precision_fp16/allow_mix_precision:开启自动混合精度功能,表示混合使用float16和float32数据类型来处理神经网络的过程。
配置为allow_mix_precision或allow_mix_precision_fp16,效果等同,其中allow_mix_precision_fp16为新版本中新增配置,语义更清晰,便于理解。针对全网中float32数据类型的算子,系统会按照内置优化策略自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。开启该功能开关后,用户可以同时使能Loss Scaling,从而补偿降低精度带来的精度损失。
- allow_mix_precision_bf16:开启自动混合精度功能,表示混合使用bfloat16和float32数据类型来处理神经网络的过程。针对网络模型中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到bfloat16,从而在精度损失很小的情况下提升系统性能并减少内存使用。如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算,如果AI CPU算子也不支持,则执行报错。
说明:仅在Atlas A2 训练系列产品场景下支持此配置。
- allow_fp32_to_bf16:对于矩阵计算类算子,使用bfloat16;对于矢量计算类算子,优先保持原图精度,如果网络模型中算子支持float32,则保留原始精度float32,如果网络模型中算子不支持float32,则直接降低精度到bfloat16,如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算,如果AI CPU算子也不支持,则执行报错。
说明:仅在Atlas A2 训练系列产品场景下支持此配置。
针对Atlas 训练系列产品,默认配置项为“allow_fp32_to_fp16”。 针对Atlas A2 训练系列产品,默认配置项为“must_keep_origin_dtype”。 |
graph_run_mode |
图执行模式,取值:
- 0:在线推理场景下,请配置为0。
- 1:训练场景下,请配置为1,默认为1。
|
op_debug_level |
算子debug功能开关,取值:
- 0:不开启算子debug功能,默认为0。
- 1:开启算子debug功能,在训练脚本执行目录下的kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件),用于后续工具进行AICore Error问题定位。
- 2:开启算子debug功能,在训练脚本执行目录下的kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件),并关闭编译优化开关(开启ccec编译器选项-O0-g),用于后续工具进行AICore Error问题定位,可定位到出错算子的代码行号。
- 3:不开启算子debug功能,且在训练脚本执行目录下的kernel_meta文件夹中保留.o和.json文件。
- 4:不开启算子debug功能,在训练脚本执行目录下的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件),生成TBE指令映射文件(算子cce文件*.cce)和UB融合计算描述文件({$kernel_name}_compute.json)。
须知:
训练执行时,建议配置为0或3。如果需要进行问题定位,再选择调试开关选项1和2,是因为加入了调试功能会导致网络性能下降。
|
enable_exception_dump |
是否Dump异常算子的输入和输出信息,dump信息生成在当前脚本执行目录。
|
op_select_implmode |
昇腾AI处理器部分内置算子有高精度和高性能实现方式,用户可以通过该参数配置模型编译时选择哪种算子。取值包括:
- high_precision:表示算子选择高精度实现。高精度实现算子是指在fp16输入的情况下,通过泰勒展开/牛顿迭代等手段进一步提升算子的精度。
- high_performance:表示算子选择高性能实现。高性能实现算子是指在fp16输入的情况下,不影响网络精度前提的最优性能实现。默认为high_performance。
|
optypelist_for_implmode |
列举算子optype的列表,该列表中的算子使用OP_SELECT_IMPL_MODE参数指定的模式,当前仅支持Pooling算子。 该参数需要与OP_SELECT_IMPL_MODE参数配合使用,例如: op_select_implmode配置为high_precision。 optypelist_for_implmode配置为Pooling。 |
参数说明
参数名 |
输入/输出 |
描述 |
name |
输入 |
算子名称。 |
返回值
返回一个op,供用户通过sess.run(op)完成GE初始化。
调用示例
如果在sess.run或者estimator.train之前调用get_local_rank_id/get_rank_size/get_rank_id等HCCL接口,需要先另起session执行initialize_system,进行集合通信初始化,然后在训练结束后执行shutdown_system,同时关闭session。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import tensorflow as tf
from npu_bridge.npu_init import *
npu_int = npu_ops.initialize_system()
npu_shutdown = npu_ops.shutdown_system()
config = tf.ConfigProto()
custom_op = config.graph_options.rewrite_options.custom_optimizers.add()
custom_op.name = "NpuOptimizer"
custom_op.parameter_map["use_off_line"].b = True
config.graph_options.rewrite_options.remapping = RewriterConfig.OFF
config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF
init_sess = tf.Session(config=config)
init_sess.run(npu_int)
#调用HCCL接口...
#执行训练...
init_sess.run(npu_shutdown)
init_sess.close()
|
或者:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import tensorflow as tf
from npu_bridge.npu_init import *
npu_init = npu_ops.initialize_system()
npu_shutdown = npu_ops.shutdown_system()
config = tf.ConfigProto()
custom_op = config.graph_options.rewrite_options.custom_optimizers.add()
custom_op.name = "NpuOptimizer"
custom_op.parameter_map["use_off_line"].b = True
config.graph_options.rewrite_options.remapping = RewriterConfig.OFF
config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF
with tf.Session(config=config) as sess:
sess.run(npu_init)
#调用HCCL接口...
#执行训练...
sess.run(npu_shutdown)
|