性能调优【免费下载链接】tensorflowAscend TensorFlow Adapter项目地址: https://gitcode.com/cann/tensorflow基础配置iterations_per_loop针对一次session.run调用在NPU执行训练迭代的次数默认为1且用户设置的训练迭代总次数必须为iterations_per_loop的整数倍。NPU会运行iterations_per_loop指定迭代次数然后再返回到Host侧该参数可以减少Host与Device间的交互次数缩短训练时长。混合计算模式mix_compile_mode为True下iterations_per_loop必须为1。说明当iterations_per_loop大于1时由于循环下沉和LossScale溢出等问题用户设置的训练迭代总次数和实际的迭代总次数可能会有差异。配置示例config NPURunConfig(iterations_per_loop1000)高级配置hcom_parallel分布式训练场景下可通过此开关控制是否启用Allreduce梯度更新和前后向并行执行。True开启Allreduce并行。False关闭Allreduce并行。默认值为“True”针对小网络例如ResNet18建议配置为False。配置示例config NPURunConfig(hcom_parallelTrue)op_precision_mode设置具体某个算子的高精度或高性能模式通过该参数传入自定义的模式配置文件op_precision.ini可以为不同的算子设置不同的模式。支持按照算子类型或者按照节点名称设置按节点名称设置的优先级高于算子类型配置样例如下[ByOpType] optype1high_precision optype2high_performance optype3enable_hi_float_32_execution optype4support_out_of_bound_index [ByNodeName] nodename1high_precision nodename2high_performance nodename3enable_hi_float_32_execution nodename4support_out_of_bound_indexhigh_precision表示高精度。high_performance表示高性能。enable_float_32_execution算子内部处理时使用FP32数据类型功能该场景下FP32数据类型不会自动转换为HF32数据类型若使用HF32计算精度损失超过预期时可启用该配置指定部分算子内部计算时使用FP32保持精度。该选项仅在以下产品支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品enable_hi_float_32_execution算子内部处理时使用HF32数据类型功能使能后FP32数据类型自动转换为HF32数据类型该配置可以降低数据所占空间大小实现性能提升。当前版本暂不支持此配置。support_out_of_bound_index表示对gather、scatter和segment类算子的indices输入进行越界校验校验会降低算子的执行性能。keep_fp16算子内部处理时使用FP16数据类型功能该场景下FP16数据类型不会自动转换为FP32数据类型若使用FP32计算时性能不满足预期同时精度要求不高情况下可以选择keep_fp16模式牺牲精度提升性能不建议使用该低精度模式。super_performance表示超高性能和高性能相比在算法计算公式上进行了优化。具体某个算子支持配置的精度/性能模式取值可通过CANN软件安装后文件存储路径的“opp/built-in/op_impl/ai_core/tbe/impl_mode/all_ops_impl_mode.ini”文件查看。该参数不能与op_select_implmode、optypelist_for_implmode参数同时使用若三个参数同时配置则只有op_precision_mode参数指定的模式生效。一般场景下该参数无需配置。若使用高性能或者高精度模式网络性能或者精度不是最优则可以使用该参数通过配置ini文件调整某个具体算子的精度模式。配置示例config NPURunConfig(op_precision_mode/home/test/op_precision.ini)enable_scope_fusion_passes指定编译时需要生效的融合规则列表。此处传入注册的融合规则名称允许传入多个用“,”隔开。无论是内置还是用户自定义的Scope融合规则都分为如下两类通用融合规则General各网络通用的Scope融合规则默认生效不支持用户指定失效。定制化融合规则Non-General特定网络适用的Scope融合规则默认不生效用户可以通过enable_scope_fusion_passes指定生效的融合规则列表。配置示例config NPURunConfig(enable_scope_fusion_passesScopeLayerNormPass,ScopeClipBoxesPass)stream_max_parallel_num此配置仅适用于NMT网络。用于指定AICPU/AICORE引擎的并行度从而实现AICPU/AICORE算子间的并行执行。配置示例config NPURunConfig(stream_max_parallel_numDNN_VM_AICPU:10,AIcoreEngine:1)DNN_VM_AICPU为AICPU引擎名称本示例指定了AICPU引擎的并发数为10AIcoreEngine为AICORE引擎名称本示例指定了AICORE引擎的并发数为1。AICPU/AICORE引擎的并行度默认为1取值不能超过AI Core的最大核数。is_tailing_optimization此配置仅用于BERT网络。分布式训练场景下是否开启通信拖尾优化用于提升训练性能。通信拖尾优化即通过计算依赖关系的改变将不依赖于最后一个AR梯度聚合分片的计算操作调度到和最后一个AR并行进行以达到优化通信拖尾时间的目的。True开启通信拖尾False默认值不开启通信拖尾。必须和NPUOptimizer构造函数配合使用且要求和NPUOptimizer构造函数中的is_tailing_optimization值保持一致。配置示例config NPURunConfig(is_tailing_optimizationTrue)enable_small_channel是否使能small channel的优化使能后在channel4的卷积层会有性能收益。0关闭。训练graph_run_mode为1场景下默认关闭且训练场景下不建议用户开启。1使能。在线推理graph_run_mode为0场景下不支持用户配置默认使能。[!NOTE]说明 该参数使能后当前只在ResNet50、ResNet101、ResNet152网络模型能获得性能收益。其他网络模型性能可能会下降用户需要根据实际情况决定是否使能该参数。配置示例config NPURunConfig(enable_small_channel0)variable_placement若网络的权重较大Device侧可能存在内存不足导致网络执行失败的场景此种情况下可通过此配置将variable的部署位置调整到Host以降低Device的内存占用。Device默认值Variable部署在Device。HostVariable部署在Host。约束说明如果此配置项取值为“Host”需要开启混合计算即mix_compile_mode取值为“True”。若训练脚本中存在类似tf.case/tf.cond/tf.while_loop等TensorFlow V1版本控制流算子对应的API此种场景下如果将“variable_placement”配置为“Host”可能会导致网络运行失败。为避免此问题需要在训练脚本中添加如下接口将TensorFlow V1版本的控制流算子转换为V2版本并启用资源变量。tf.enable_control_flow_v2() tf.enable_resource_variables()配置示例config NPURunConfig(variable_placementDevice)graph_max_parallel_model_num在线推理场景下可通过此参数设置图执行时的最大并行次数。当此参数大于1时图执行时会启动对应数量的线程并行执行从而提升图的整体执行流水效率。需要配置为整数取值范围为[1,INT32_MAX]默认值为1其中INT32_MAX是INT32类型的最大值为“2147483647”。配置示例config NPURunConfig(graph_max_parallel_model_num4)【免费下载链接】tensorflowAscend TensorFlow Adapter项目地址: https://gitcode.com/cann/tensorflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考