mindspore 2.6.0__cp311-cp311-win_amd64.whl → 2.7.0__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mindspore might be problematic. Click here for more details.
- mindspore/.commit_id +1 -1
- mindspore/Microsoft.VisualStudio.Telemetry.dll +0 -0
- mindspore/Newtonsoft.Json.dll +0 -0
- mindspore/__init__.py +2 -2
- mindspore/_c_dataengine.cp311-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp311-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp311-win_amd64.pyd +0 -0
- mindspore/_checkparam.py +42 -11
- mindspore/_extends/builtin_operations.py +3 -3
- mindspore/{_deprecated → _extends/optimize}/__init__.py +9 -3
- mindspore/_extends/optimize/cell_utils.py +96 -0
- mindspore/_extends/parallel_compile/akg_compiler/custom.py +1109 -0
- mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
- mindspore/_extends/parse/__init__.py +3 -3
- mindspore/_extends/parse/compile_config.py +44 -22
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +1 -2
- mindspore/_extends/parse/parser.py +64 -83
- mindspore/_extends/parse/resources.py +39 -0
- mindspore/_extends/parse/standard_method.py +47 -14
- mindspore/_extends/parse/trope.py +8 -1
- mindspore/_extends/pijit/__init__.py +1 -2
- mindspore/_extends/pijit/pijit_func_white_list.py +2 -5
- mindspore/amp.py +4 -22
- mindspore/atlprov.dll +0 -0
- mindspore/avcodec-59.dll +0 -0
- mindspore/avdevice-59.dll +0 -0
- mindspore/avfilter-8.dll +0 -0
- mindspore/avformat-59.dll +0 -0
- mindspore/avutil-57.dll +0 -0
- mindspore/boost/adasum.py +1 -1
- mindspore/boost/boost_cell_wrapper.py +4 -4
- mindspore/c1.dll +0 -0
- mindspore/c1xx.dll +0 -0
- mindspore/c2.dll +0 -0
- mindspore/common/__init__.py +43 -12
- mindspore/common/_grad_function.py +2 -1
- mindspore/common/_pijit_context.py +28 -7
- mindspore/common/_stub_tensor.py +1 -209
- mindspore/common/_tensor_cpp_method.py +1 -1
- mindspore/common/_tensor_docs.py +177 -52
- mindspore/common/_utils.py +9 -1
- mindspore/common/api.py +338 -208
- mindspore/common/dtype.py +108 -57
- mindspore/common/dump.py +11 -16
- mindspore/common/dynamic_shape/__init__.py +0 -0
- mindspore/common/{auto_dynamic_shape.py → dynamic_shape/auto_dynamic_shape.py} +17 -23
- mindspore/common/dynamic_shape/enable_dynamic.py +197 -0
- mindspore/common/file_system.py +59 -9
- mindspore/common/generator.py +2 -3
- mindspore/common/hook_handle.py +33 -5
- mindspore/common/jit_config.py +1 -1
- mindspore/common/jit_trace.py +84 -105
- mindspore/common/np_dtype.py +3 -3
- mindspore/common/parameter.py +27 -29
- mindspore/common/recompute.py +5 -7
- mindspore/common/sparse_tensor.py +0 -3
- mindspore/common/symbol.py +0 -1
- mindspore/common/tensor.py +84 -133
- mindspore/communication/_comm_helper.py +46 -4
- mindspore/communication/management.py +79 -7
- mindspore/context.py +47 -38
- mindspore/dataset/__init__.py +1 -1
- mindspore/dataset/audio/transforms.py +1 -1
- mindspore/dataset/core/config.py +38 -4
- mindspore/dataset/engine/datasets.py +350 -322
- mindspore/dataset/engine/datasets_user_defined.py +69 -23
- mindspore/dataset/engine/iterators.py +2 -2
- mindspore/dataset/engine/obs/config_loader.py +2 -2
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +8 -0
- mindspore/dataset/transforms/c_transforms.py +2 -2
- mindspore/dataset/transforms/py_transforms.py +7 -3
- mindspore/dataset/transforms/transforms.py +10 -6
- mindspore/dataset/vision/__init__.py +1 -1
- mindspore/dataset/vision/py_transforms.py +8 -8
- mindspore/dataset/vision/transforms.py +17 -5
- mindspore/dataset/vision/utils.py +632 -21
- mindspore/dataset/vision/validators.py +1 -0
- mindspore/device_context/ascend/device.py +1 -1
- mindspore/device_context/ascend/op_tuning.py +35 -1
- mindspore/device_context/gpu/__init__.py +2 -2
- mindspore/device_context/gpu/device.py +1 -1
- mindspore/device_context/gpu/op_precision.py +4 -2
- mindspore/device_context/gpu/op_tuning.py +6 -3
- mindspore/device_manager.py +16 -9
- mindspore/dnnl.dll +0 -0
- mindspore/dpcmi.dll +0 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +5 -4
- mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
- mindspore/experimental/optim/adadelta.py +13 -20
- mindspore/experimental/optim/adagrad.py +15 -22
- mindspore/experimental/optim/adam.py +17 -24
- mindspore/experimental/optim/adamax.py +14 -22
- mindspore/experimental/optim/adamw.py +28 -34
- mindspore/experimental/optim/asgd.py +15 -25
- mindspore/experimental/optim/lr_scheduler.py +27 -45
- mindspore/experimental/optim/nadam.py +14 -24
- mindspore/experimental/optim/optimizer.py +13 -23
- mindspore/experimental/optim/radam.py +18 -24
- mindspore/experimental/optim/rmsprop.py +14 -25
- mindspore/experimental/optim/rprop.py +15 -26
- mindspore/experimental/optim/sgd.py +9 -19
- mindspore/hal/__init__.py +4 -4
- mindspore/hal/contiguous_tensors_handle.py +2 -2
- mindspore/hal/memory.py +1 -0
- mindspore/include/api/cell.h +65 -5
- mindspore/include/api/cfg.h +24 -7
- mindspore/include/api/context.h +1 -0
- mindspore/include/api/delegate.h +10 -2
- mindspore/include/api/dual_abi_helper.h +100 -19
- mindspore/include/api/graph.h +14 -1
- mindspore/include/api/kernel.h +16 -3
- mindspore/include/api/kernel_api.h +9 -1
- mindspore/include/api/metrics/accuracy.h +9 -0
- mindspore/include/api/model.h +8 -1
- mindspore/include/api/model_group.h +4 -0
- mindspore/include/api/model_parallel_runner.h +2 -0
- mindspore/include/api/status.h +48 -10
- mindspore/include/api/types.h +8 -3
- mindspore/include/c_api/model_c.h +0 -58
- mindspore/include/c_api/tensor_c.h +0 -26
- mindspore/include/dataset/constants.h +9 -0
- mindspore/include/dataset/vision_ascend.h +1 -1
- mindspore/jpeg62.dll +0 -0
- mindspore/mindrecord/tools/cifar10.py +61 -11
- mindspore/mindrecord/tools/cifar10_to_mr.py +5 -0
- mindspore/mindspore_backend_common.dll +0 -0
- mindspore/mindspore_backend_manager.dll +0 -0
- mindspore/mindspore_common.dll +0 -0
- mindspore/mindspore_core.dll +0 -0
- mindspore/mindspore_cpu_res_manager.dll +0 -0
- mindspore/mindspore_dump.dll +0 -0
- mindspore/mindspore_frontend.dll +0 -0
- mindspore/mindspore_glog.dll +0 -0
- mindspore/mindspore_memory_pool.dll +0 -0
- mindspore/mindspore_ms_backend.dll +0 -0
- mindspore/mindspore_ops.dll +0 -0
- mindspore/mindspore_ops_host.dll +0 -0
- mindspore/mindspore_ops_kernel_common.dll +0 -0
- mindspore/mindspore_profiler.dll +0 -0
- mindspore/mindspore_pyboost.dll +0 -0
- mindspore/mindspore_pynative.dll +0 -0
- mindspore/mindspore_res_manager.dll +0 -0
- mindspore/mindspore_runtime_pipeline.dll +0 -0
- mindspore/mint/__init__.py +4 -44
- mindspore/mint/distributed/__init__.py +5 -0
- mindspore/mint/distributed/distributed.py +425 -19
- mindspore/mint/nn/__init__.py +1 -1
- mindspore/mint/nn/functional.py +53 -6
- mindspore/mint/nn/layer/_functions.py +163 -294
- mindspore/mint/nn/layer/activation.py +8 -6
- mindspore/mint/nn/layer/conv.py +125 -101
- mindspore/mint/nn/layer/normalization.py +11 -25
- mindspore/mint/optim/adam.py +19 -18
- mindspore/mint/optim/adamw.py +14 -8
- mindspore/mint/optim/sgd.py +5 -5
- mindspore/msobj140.dll +0 -0
- mindspore/mspdb140.dll +0 -0
- mindspore/mspdbcore.dll +0 -0
- mindspore/mspdbst.dll +0 -0
- mindspore/mspft140.dll +0 -0
- mindspore/msvcdis140.dll +0 -0
- mindspore/msvcp140_1.dll +0 -0
- mindspore/msvcp140_2.dll +0 -0
- mindspore/msvcp140_atomic_wait.dll +0 -0
- mindspore/msvcp140_codecvt_ids.dll +0 -0
- mindspore/nn/cell.py +488 -620
- mindspore/nn/grad/cell_grad.py +11 -12
- mindspore/nn/layer/activation.py +36 -36
- mindspore/nn/layer/basic.py +74 -77
- mindspore/nn/layer/channel_shuffle.py +4 -4
- mindspore/nn/layer/combined.py +4 -2
- mindspore/nn/layer/conv.py +86 -85
- mindspore/nn/layer/dense.py +9 -7
- mindspore/nn/layer/embedding.py +50 -52
- mindspore/nn/layer/image.py +38 -40
- mindspore/nn/layer/math.py +111 -112
- mindspore/nn/layer/normalization.py +56 -44
- mindspore/nn/layer/pooling.py +58 -63
- mindspore/nn/layer/rnn_cells.py +33 -33
- mindspore/nn/layer/rnns.py +56 -56
- mindspore/nn/layer/thor_layer.py +74 -73
- mindspore/nn/layer/transformer.py +11 -1
- mindspore/nn/learning_rate_schedule.py +20 -20
- mindspore/nn/loss/loss.py +79 -81
- mindspore/nn/optim/adam.py +2 -4
- mindspore/nn/optim/adasum.py +2 -2
- mindspore/nn/optim/lamb.py +1 -3
- mindspore/nn/optim/optimizer.py +1 -1
- mindspore/nn/optim/tft_wrapper.py +2 -3
- mindspore/nn/optim/thor.py +2 -2
- mindspore/nn/probability/distribution/_utils/utils.py +2 -2
- mindspore/nn/probability/distribution/exponential.py +2 -1
- mindspore/nn/probability/distribution/poisson.py +2 -1
- mindspore/nn/sparse/sparse.py +3 -3
- mindspore/nn/wrap/cell_wrapper.py +73 -42
- mindspore/nn/wrap/grad_reducer.py +37 -52
- mindspore/nn/wrap/loss_scale.py +72 -74
- mindspore/numpy/array_creations.py +7 -7
- mindspore/numpy/fft.py +1 -1
- mindspore/numpy/math_ops.py +1 -1
- mindspore/numpy/utils_const.py +1 -1
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/_grad_experimental/grad_comm_ops.py +51 -13
- mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -0
- mindspore/ops/_grad_experimental/grad_inner_ops.py +0 -9
- mindspore/ops/_op_impl/cpu/__init__.py +1 -0
- mindspore/{experimental/es/__init__.py → ops/_op_impl/cpu/joinedstr_op.py} +12 -6
- mindspore/ops/_vmap/vmap_array_ops.py +6 -13
- mindspore/ops/_vmap/vmap_nn_ops.py +8 -16
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +29 -10
- mindspore/ops/auto_generate/gen_extend_func.py +5 -55
- mindspore/ops/auto_generate/gen_ops_def.py +753 -273
- mindspore/ops/auto_generate/gen_ops_prim.py +1687 -958
- mindspore/ops/auto_generate/pyboost_inner_prim.py +31 -1
- mindspore/ops/composite/__init__.py +10 -0
- mindspore/ops/composite/base.py +9 -5
- mindspore/ops/composite/multitype_ops/__init__.py +12 -1
- mindspore/ops/composite/multitype_ops/_compile_utils.py +132 -108
- mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -1
- mindspore/ops/composite/multitype_ops/add_impl.py +70 -2
- mindspore/ops/composite/multitype_ops/div_impl.py +49 -0
- mindspore/ops/composite/multitype_ops/floordiv_impl.py +29 -0
- mindspore/ops/composite/multitype_ops/getitem_impl.py +11 -0
- mindspore/ops/composite/multitype_ops/mod_impl.py +5 -3
- mindspore/ops/composite/multitype_ops/mul_impl.py +49 -0
- mindspore/ops/composite/multitype_ops/setitem_impl.py +57 -0
- mindspore/ops/composite/multitype_ops/sub_impl.py +34 -0
- mindspore/ops/composite/multitype_ops/zeros_like_impl.py +14 -0
- mindspore/ops/function/__init__.py +4 -1
- mindspore/ops/function/_add_attr_func.py +11 -6
- mindspore/ops/function/array_func.py +17 -100
- mindspore/ops/function/debug_func.py +8 -5
- mindspore/ops/function/grad/grad_func.py +5 -13
- mindspore/ops/function/math_func.py +65 -399
- mindspore/ops/function/nn_func.py +44 -61
- mindspore/ops/function/other_func.py +4 -1
- mindspore/ops/function/random_func.py +31 -4
- mindspore/ops/functional.py +2 -3
- mindspore/ops/functional_overload.py +486 -18
- mindspore/ops/op_info_register.py +21 -0
- mindspore/ops/operations/__init__.py +5 -2
- mindspore/ops/operations/_custom_ops_utils.py +675 -8
- mindspore/ops/operations/_inner_ops.py +14 -18
- mindspore/ops/operations/_sequence_ops.py +1 -1
- mindspore/ops/operations/array_ops.py +4 -50
- mindspore/ops/operations/comm_ops.py +186 -41
- mindspore/ops/operations/custom_ops.py +244 -175
- mindspore/ops/operations/debug_ops.py +55 -4
- mindspore/ops/operations/image_ops.py +13 -13
- mindspore/ops/operations/manually_defined/ops_def.py +27 -28
- mindspore/ops/operations/math_ops.py +8 -9
- mindspore/ops/operations/nn_ops.py +6 -7
- mindspore/ops/primitive.py +9 -20
- mindspore/ops/tensor_method.py +52 -11
- mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +1 -1
- mindspore/ops_generate/api/functional_map_cpp_generator.py +10 -9
- mindspore/ops_generate/api/functions_cc_generator.py +58 -10
- mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +1 -1
- mindspore/ops_generate/common/base_generator.py +14 -0
- mindspore/ops_generate/common/gen_constants.py +7 -2
- mindspore/ops_generate/common/gen_utils.py +0 -19
- mindspore/ops_generate/common/op_proto.py +11 -4
- mindspore/ops_generate/common/template.py +88 -11
- mindspore/ops_generate/gen_ops.py +1 -1
- mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +4 -4
- mindspore/ops_generate/op_def/ops_name_h_generator.py +0 -3
- mindspore/ops_generate/op_def/ops_primitive_h_generator.py +0 -4
- mindspore/ops_generate/op_def_py/op_prim_py_generator.py +5 -2
- mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +49 -8
- mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +2 -2
- mindspore/ops_generate/pyboost/gen_pyboost_func.py +31 -16
- mindspore/ops_generate/pyboost/op_template_parser.py +98 -72
- mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +70 -273
- mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +14 -6
- mindspore/ops_generate/pyboost/pyboost_functions_impl_cpp_generator.py +316 -0
- mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +1 -1
- mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +5 -3
- mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +1 -1
- mindspore/ops_generate/pyboost/pyboost_internal_functions_cpp_generator.py +76 -0
- mindspore/ops_generate/pyboost/pyboost_internal_functions_h_generator.py +76 -0
- mindspore/ops_generate/pyboost/pyboost_internal_kernel_info_adapter_generator.py +125 -0
- mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +4 -3
- mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +348 -61
- mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +1 -1
- mindspore/ops_generate/pyboost/pyboost_utils.py +118 -9
- mindspore/ops_generate/tensor_py_cc_generator.py +1 -24
- mindspore/parallel/_auto_parallel_context.py +9 -17
- mindspore/parallel/_cell_wrapper.py +106 -40
- mindspore/parallel/_parallel_serialization.py +4 -3
- mindspore/parallel/_ps_context.py +4 -6
- mindspore/parallel/_tensor.py +167 -12
- mindspore/parallel/_transformer/moe.py +1 -1
- mindspore/parallel/_transformer/transformer.py +17 -12
- mindspore/parallel/_utils.py +5 -11
- mindspore/parallel/auto_parallel.py +33 -12
- mindspore/parallel/checkpoint_convert.py +3 -3
- mindspore/parallel/checkpoint_transform.py +5 -1
- mindspore/parallel/cluster/process_entity/_api.py +88 -49
- mindspore/parallel/cluster/process_entity/_utils.py +95 -7
- mindspore/parallel/cluster/run.py +48 -7
- mindspore/parallel/function/__init__.py +8 -1
- mindspore/parallel/function/reshard_func.py +7 -6
- mindspore/parallel/nn/__init__.py +15 -2
- mindspore/parallel/nn/parallel_cell_wrapper.py +50 -14
- mindspore/parallel/nn/parallel_grad_reducer.py +7 -14
- mindspore/parallel/shard.py +9 -23
- mindspore/parallel/transform_safetensors.py +468 -174
- mindspore/pgodb140.dll +0 -0
- mindspore/pgort140.dll +0 -0
- mindspore/profiler/__init__.py +2 -1
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +7 -7
- mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +3 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +3 -0
- mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +4 -4
- mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +3 -3
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +4 -1
- mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +2 -1
- mindspore/profiler/analysis/task_manager.py +1 -1
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +5 -1
- mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +2 -1
- mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +10 -9
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +43 -23
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +3 -2
- mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +9 -5
- mindspore/profiler/analysis/viewer/ms_operator_details_viewer.py +132 -0
- mindspore/profiler/common/constant.py +16 -0
- mindspore/profiler/common/msprof_cmd_tool.py +2 -2
- mindspore/profiler/common/path_manager.py +9 -0
- mindspore/profiler/common/profiler_context.py +50 -29
- mindspore/profiler/common/profiler_info.py +0 -16
- mindspore/profiler/common/profiler_meta_data.py +1 -0
- mindspore/profiler/common/profiler_op_analyse.py +239 -0
- mindspore/profiler/common/profiler_output_path.py +23 -8
- mindspore/profiler/common/profiler_parameters.py +128 -35
- mindspore/profiler/dynamic_profile/__init__.py +0 -0
- mindspore/profiler/dynamic_profile/dynamic_monitor_proxy.py +39 -0
- mindspore/profiler/dynamic_profile/dynamic_profiler_config_context.py +666 -0
- mindspore/profiler/dynamic_profile/dynamic_profiler_utils.py +62 -0
- mindspore/profiler/dynamic_profiler.py +374 -338
- mindspore/profiler/envprofiler.py +42 -12
- mindspore/profiler/experimental_config.py +112 -7
- mindspore/profiler/mstx.py +33 -12
- mindspore/profiler/platform/__init__.py +2 -3
- mindspore/profiler/platform/cpu_profiler.py +10 -4
- mindspore/profiler/platform/npu_profiler.py +30 -20
- mindspore/profiler/profiler.py +218 -154
- mindspore/profiler/profiler_action_controller.py +65 -77
- mindspore/profiler/profiler_interface.py +2 -2
- mindspore/profiler/schedule.py +10 -4
- mindspore/rewrite/common/config.py +1 -0
- mindspore/rewrite/common/namer.py +1 -0
- mindspore/rewrite/common/namespace.py +1 -0
- mindspore/rewrite/node/node.py +31 -11
- mindspore/rewrite/parsers/assign_parser.py +1 -1
- mindspore/rewrite/symbol_tree/symbol_tree.py +2 -2
- mindspore/run_check/_check_version.py +7 -10
- mindspore/runtime/__init__.py +8 -6
- mindspore/runtime/event.py +10 -4
- mindspore/runtime/executor.py +87 -45
- mindspore/runtime/memory.py +22 -30
- mindspore/runtime/thread_bind_core.py +299 -165
- mindspore/safeguard/rewrite_obfuscation.py +12 -13
- mindspore/swresample-4.dll +0 -0
- mindspore/swscale-6.dll +0 -0
- mindspore/tbbmalloc.dll +0 -0
- mindspore/tinyxml2.dll +0 -0
- mindspore/train/_utils.py +9 -5
- mindspore/train/amp.py +43 -23
- mindspore/train/callback/__init__.py +5 -5
- mindspore/train/callback/_callback.py +2 -1
- mindspore/train/callback/_checkpoint.py +4 -14
- mindspore/train/callback/_flops_collector.py +11 -7
- mindspore/train/callback/_landscape.py +0 -1
- mindspore/train/callback/_train_fault_tolerance.py +72 -18
- mindspore/train/data_sink.py +15 -6
- mindspore/train/dataset_helper.py +14 -5
- mindspore/train/model.py +49 -47
- mindspore/train/serialization.py +168 -126
- mindspore/train/summary/summary_record.py +13 -2
- mindspore/train/train_thor/model_thor.py +2 -2
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +3 -2
- mindspore/utils/dryrun.py +0 -6
- mindspore/utils/runtime_execution_order_check.py +162 -78
- mindspore/utils/sdc_detect.py +68 -0
- mindspore/utils/utils.py +14 -17
- mindspore/vcmeta.dll +0 -0
- mindspore/vcruntime140.dll +0 -0
- mindspore/vcruntime140_1.dll +0 -0
- mindspore/version.py +1 -1
- {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/METADATA +5 -4
- {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/RECORD +400 -439
- mindspore/_deprecated/jit.py +0 -198
- mindspore/_extends/remote/kernel_build_server_ascend.py +0 -75
- mindspore/communication/_hccl_management.py +0 -297
- mindspore/experimental/es/embedding_service.py +0 -891
- mindspore/experimental/es/embedding_service_layer.py +0 -581
- mindspore/profiler/common/validator/__init__.py +0 -14
- mindspore/profiler/common/validator/validate_path.py +0 -84
- mindspore/profiler/parser/__init__.py +0 -14
- mindspore/profiler/parser/aicpu_data_parser.py +0 -272
- mindspore/profiler/parser/ascend_analysis/__init__.py +0 -14
- mindspore/profiler/parser/ascend_analysis/constant.py +0 -71
- mindspore/profiler/parser/ascend_analysis/file_manager.py +0 -180
- mindspore/profiler/parser/ascend_analysis/function_event.py +0 -185
- mindspore/profiler/parser/ascend_analysis/fwk_cann_parser.py +0 -136
- mindspore/profiler/parser/ascend_analysis/fwk_file_parser.py +0 -131
- mindspore/profiler/parser/ascend_analysis/msprof_timeline_parser.py +0 -104
- mindspore/profiler/parser/ascend_analysis/path_manager.py +0 -313
- mindspore/profiler/parser/ascend_analysis/profiler_info_parser.py +0 -123
- mindspore/profiler/parser/ascend_analysis/tlv_decoder.py +0 -86
- mindspore/profiler/parser/ascend_analysis/trace_event_manager.py +0 -75
- mindspore/profiler/parser/ascend_cluster_generator.py +0 -116
- mindspore/profiler/parser/ascend_communicate_generator.py +0 -314
- mindspore/profiler/parser/ascend_flops_generator.py +0 -116
- mindspore/profiler/parser/ascend_fpbp_generator.py +0 -82
- mindspore/profiler/parser/ascend_hccl_generator.py +0 -271
- mindspore/profiler/parser/ascend_integrate_generator.py +0 -42
- mindspore/profiler/parser/ascend_memory_generator.py +0 -185
- mindspore/profiler/parser/ascend_msprof_exporter.py +0 -282
- mindspore/profiler/parser/ascend_msprof_generator.py +0 -187
- mindspore/profiler/parser/ascend_op_generator.py +0 -334
- mindspore/profiler/parser/ascend_steptrace_generator.py +0 -94
- mindspore/profiler/parser/ascend_timeline_generator.py +0 -545
- mindspore/profiler/parser/base_timeline_generator.py +0 -483
- mindspore/profiler/parser/container.py +0 -229
- mindspore/profiler/parser/cpu_gpu_timeline_generator.py +0 -697
- mindspore/profiler/parser/flops_parser.py +0 -531
- mindspore/profiler/parser/framework_enum.py +0 -111
- mindspore/profiler/parser/framework_parser.py +0 -464
- mindspore/profiler/parser/framework_struct.py +0 -61
- mindspore/profiler/parser/gpu_analysis/__init__.py +0 -14
- mindspore/profiler/parser/gpu_analysis/function_event.py +0 -44
- mindspore/profiler/parser/gpu_analysis/fwk_file_parser.py +0 -89
- mindspore/profiler/parser/gpu_analysis/profiler_info_parser.py +0 -72
- mindspore/profiler/parser/hccl_parser.py +0 -573
- mindspore/profiler/parser/hwts_log_parser.py +0 -122
- mindspore/profiler/parser/integrator.py +0 -526
- mindspore/profiler/parser/memory_usage_parser.py +0 -277
- mindspore/profiler/parser/minddata_analyzer.py +0 -800
- mindspore/profiler/parser/minddata_parser.py +0 -186
- mindspore/profiler/parser/minddata_pipeline_parser.py +0 -299
- mindspore/profiler/parser/op_intermediate_parser.py +0 -149
- mindspore/profiler/parser/optime_parser.py +0 -250
- mindspore/profiler/parser/profiler_info.py +0 -213
- mindspore/profiler/parser/step_trace_parser.py +0 -666
- mindspore/utils/hooks.py +0 -81
- /mindspore/common/{_auto_dynamic.py → dynamic_shape/_auto_dynamic.py} +0 -0
- {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/WHEEL +0 -0
- {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/entry_points.txt +0 -0
- {mindspore-2.6.0.dist-info → mindspore-2.7.0.dist-info}/top_level.txt +0 -0
|
@@ -1,666 +0,0 @@
|
|
|
1
|
-
# Copyright 2020-201 Huawei Technologies Co., Ltd
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
# ============================================================================
|
|
15
|
-
"""The parser for step trace data."""
|
|
16
|
-
import csv
|
|
17
|
-
import json
|
|
18
|
-
import os
|
|
19
|
-
import stat
|
|
20
|
-
from collections import defaultdict
|
|
21
|
-
from decimal import Decimal
|
|
22
|
-
from abc import abstractmethod
|
|
23
|
-
from enum import Enum
|
|
24
|
-
from pathlib import Path
|
|
25
|
-
|
|
26
|
-
from mindspore import log
|
|
27
|
-
from mindspore.profiler.common.exceptions.exceptions import ProfilerIOException, ProfilerRawFileException
|
|
28
|
-
from mindspore.profiler.common.util import get_summary_for_step_trace
|
|
29
|
-
from mindspore.profiler.common.struct_type import StructType
|
|
30
|
-
from mindspore.profiler.common.util import combine_stream_task_id
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class PointTag(Enum):
|
|
34
|
-
"""Initializing indexes."""
|
|
35
|
-
MODEL_START = 0
|
|
36
|
-
MODEL_END = 1
|
|
37
|
-
FP_START = 2
|
|
38
|
-
BP_END = 3
|
|
39
|
-
ITER_END = 4
|
|
40
|
-
MIN_ALL_REDUCE = 10000
|
|
41
|
-
MAX_ALL_REDUCE = 20000
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
STEP_TRACE_RPT_TYPE = 10
|
|
45
|
-
TS_TRACK_STEP_TRACE_STRUCT = dict(
|
|
46
|
-
mode=StructType.UINT8,
|
|
47
|
-
rptType=StructType.UINT8,
|
|
48
|
-
bufSize=StructType.UINT16,
|
|
49
|
-
reserved1=StructType.UINT32,
|
|
50
|
-
timestamp=StructType.UINT64,
|
|
51
|
-
indexId=StructType.UINT64,
|
|
52
|
-
modelId=StructType.UINT64,
|
|
53
|
-
streamId=StructType.UINT16,
|
|
54
|
-
taskId=StructType.UINT16,
|
|
55
|
-
tagId=StructType.UINT16,
|
|
56
|
-
reserved2=StructType.UINT16
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
class BaseStepTraceParser:
|
|
61
|
-
"""
|
|
62
|
-
The parser for step trace data.
|
|
63
|
-
|
|
64
|
-
Args:
|
|
65
|
-
input_dir (str): The directory that contains original step trace data.
|
|
66
|
-
output_file_path (str): The output file path.
|
|
67
|
-
skip_first_step (bool): Whether skip the first step or not.
|
|
68
|
-
is_training_mode (bool): Whether in training mode or not.
|
|
69
|
-
is_gpu_kernel_async_launch (bool): Whether is gpu kernel async launch or not.
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
|
-
def __init__(self, input_dir, output_file_path, skip_first_step=False,
|
|
73
|
-
is_training_mode=True, is_gpu_kernel_async_launch=False):
|
|
74
|
-
self._input_dir = input_dir
|
|
75
|
-
self._output_path = output_file_path
|
|
76
|
-
self._skip_first_step = skip_first_step
|
|
77
|
-
self._is_training_mode = is_training_mode
|
|
78
|
-
self._is_gpu_kernel_async_launch = is_gpu_kernel_async_launch
|
|
79
|
-
|
|
80
|
-
self._result = []
|
|
81
|
-
self._header = []
|
|
82
|
-
self._step_num = 0
|
|
83
|
-
self._tag_map = {}
|
|
84
|
-
self._unique_id_map = {}
|
|
85
|
-
|
|
86
|
-
@property
|
|
87
|
-
def output_file(self):
|
|
88
|
-
"""The property of step trace header."""
|
|
89
|
-
file_name = self._output_path.rsplit('/', 2)
|
|
90
|
-
return file_name[-1] if len(file_name) == 3 else ''
|
|
91
|
-
|
|
92
|
-
@staticmethod
|
|
93
|
-
def _get_op_type(tag, name):
|
|
94
|
-
"""
|
|
95
|
-
Get op type from tag and name.
|
|
96
|
-
|
|
97
|
-
Args:
|
|
98
|
-
tag (int): The tag id.
|
|
99
|
-
name (str): The op name.
|
|
100
|
-
|
|
101
|
-
Returns:
|
|
102
|
-
str, the op type or communication op name.
|
|
103
|
-
"""
|
|
104
|
-
tag_map = {PointTag.FP_START.value: 'fp', PointTag.BP_END.value: 'bp', PointTag.ITER_END.value: 'end'}
|
|
105
|
-
# get solid tag type
|
|
106
|
-
op_type = tag_map.get(tag, '')
|
|
107
|
-
if op_type:
|
|
108
|
-
return op_type
|
|
109
|
-
# check if the tag is step tag.
|
|
110
|
-
if tag == PointTag.MODEL_START.value:
|
|
111
|
-
return 'start'
|
|
112
|
-
# analyze reduce tag
|
|
113
|
-
op_name = name.rsplit('/', 1)[-1]
|
|
114
|
-
if not op_name:
|
|
115
|
-
log.warning("Unexpected op name:%s", name)
|
|
116
|
-
|
|
117
|
-
return op_name
|
|
118
|
-
|
|
119
|
-
def show(self):
|
|
120
|
-
"""The property of step trace info."""
|
|
121
|
-
summary_info = {}
|
|
122
|
-
if self._result:
|
|
123
|
-
summary_info = get_summary_for_step_trace(self._result[-1], self._header, self._is_training_mode)
|
|
124
|
-
summary_info['total_steps'] = len(self._result) - 1
|
|
125
|
-
log.info('\nStep trace summary info (unit: syscnt):')
|
|
126
|
-
log.info(summary_info)
|
|
127
|
-
log.info('\nThe step trace parse result saves under ${summary_dir}/profiler/%s' % self.output_file)
|
|
128
|
-
|
|
129
|
-
def parse_and_save(self):
|
|
130
|
-
"""Parse step trace files and save the result."""
|
|
131
|
-
self._parse()
|
|
132
|
-
self._save()
|
|
133
|
-
log.info("Finish to save intermediate result for step trace file.")
|
|
134
|
-
|
|
135
|
-
@abstractmethod
|
|
136
|
-
def record_point_info(self, output_path):
|
|
137
|
-
"""
|
|
138
|
-
Record point info into json.
|
|
139
|
-
|
|
140
|
-
Args:
|
|
141
|
-
output_path (str): The output path for saving point info.
|
|
142
|
-
|
|
143
|
-
Returns:
|
|
144
|
-
dict, parsed point info.
|
|
145
|
-
"""
|
|
146
|
-
|
|
147
|
-
@abstractmethod
|
|
148
|
-
def _parse(self):
|
|
149
|
-
"""Parse source step trace files."""
|
|
150
|
-
|
|
151
|
-
@abstractmethod
|
|
152
|
-
def _get_single_reduce_event_info(self, field_name, start_point, end_point):
|
|
153
|
-
"""
|
|
154
|
-
Get single reduce info.
|
|
155
|
-
|
|
156
|
-
Args:
|
|
157
|
-
field_name (str): The field name.
|
|
158
|
-
start_point (Tuple[int, int]): Start point time info, including (tag_id, sys_count).
|
|
159
|
-
end_point (Tuple[int, int]): End point time info, including (tag_id, sys_count).
|
|
160
|
-
|
|
161
|
-
Returns:
|
|
162
|
-
dict, reduce info.
|
|
163
|
-
"""
|
|
164
|
-
|
|
165
|
-
def _record_trace_event(self, step_trace):
|
|
166
|
-
"""Record trace event."""
|
|
167
|
-
log.debug("Profiler start to record trace event: %s", str(step_trace))
|
|
168
|
-
self._step_num += 1
|
|
169
|
-
start_time = step_trace.get('start')
|
|
170
|
-
end_time = step_trace.get('end')
|
|
171
|
-
fp_time = step_trace.get('fp')
|
|
172
|
-
bp_time = step_trace.get('bp')
|
|
173
|
-
if not (start_time and end_time and fp_time and bp_time):
|
|
174
|
-
log.warning("The step %d lacks basic time.", self._step_num)
|
|
175
|
-
return
|
|
176
|
-
if start_time == '-':
|
|
177
|
-
start_time = fp_time
|
|
178
|
-
row_data = {
|
|
179
|
-
'step_num': self._step_num,
|
|
180
|
-
'start_point': start_time,
|
|
181
|
-
'end_point': end_time,
|
|
182
|
-
'total': end_time - start_time,
|
|
183
|
-
'fp_point': fp_time,
|
|
184
|
-
'bp_point': bp_time,
|
|
185
|
-
'iteration_interval': fp_time - start_time,
|
|
186
|
-
'fp_and_bp': bp_time - fp_time,
|
|
187
|
-
'tail': end_time - bp_time
|
|
188
|
-
}
|
|
189
|
-
# update reduce info
|
|
190
|
-
self._update_reduce_info(step_trace, row_data)
|
|
191
|
-
# save the row data, The unit of duration is 10ns
|
|
192
|
-
if not self._header:
|
|
193
|
-
self._header = list(row_data.keys())
|
|
194
|
-
log.info("Profiler step trace header: %s", str(self._header))
|
|
195
|
-
self._header.extend([reduce_col for reduce_col in row_data if reduce_col not in self._header])
|
|
196
|
-
row_data_list = [row_data.get(header_name, 0) for header_name in self._header]
|
|
197
|
-
self._result.append(row_data_list)
|
|
198
|
-
|
|
199
|
-
def _update_reduce_info(self, step_trace, row_data):
|
|
200
|
-
"""Extract reduce info."""
|
|
201
|
-
reduce_time = step_trace.get('reduce', {})
|
|
202
|
-
for stream_id, time_points in reduce_time.items():
|
|
203
|
-
time_point_num = len(time_points)
|
|
204
|
-
if time_point_num % 2:
|
|
205
|
-
log.warning("Stream %d has %d reduce time points.", stream_id, time_point_num)
|
|
206
|
-
continue
|
|
207
|
-
for index, point_id in enumerate(range(0, time_point_num, 2)):
|
|
208
|
-
field_name = f'stream_{stream_id}_{index}'
|
|
209
|
-
reduce_info = self._get_single_reduce_event_info(
|
|
210
|
-
field_name, time_points[point_id], time_points[point_id + 1])
|
|
211
|
-
row_data.update(reduce_info)
|
|
212
|
-
|
|
213
|
-
def _record_average_info(self):
|
|
214
|
-
"""Calculate average info."""
|
|
215
|
-
result_size = len(self._result)
|
|
216
|
-
# calculate average data for each column in result data
|
|
217
|
-
average_data = [0] * len(self._header)
|
|
218
|
-
if result_size >= 1:
|
|
219
|
-
for row_info in self._result:
|
|
220
|
-
average_data = [Decimal(i) + Decimal(j) for i, j in zip(row_info, average_data)]
|
|
221
|
-
average_data = [round(item / result_size) for item in average_data]
|
|
222
|
-
# change step num info in average_data to None
|
|
223
|
-
step_num_index = self._header.index('step_num')
|
|
224
|
-
average_data[step_num_index] = '-'
|
|
225
|
-
self._result.append(average_data)
|
|
226
|
-
log.info("Finish add average info for step trace.")
|
|
227
|
-
|
|
228
|
-
def _save(self):
|
|
229
|
-
"""save step trace file."""
|
|
230
|
-
bp_point, tail, fp_duration = 5, -1, -2
|
|
231
|
-
log.info("Start to save step trace file.")
|
|
232
|
-
if not self._header:
|
|
233
|
-
return
|
|
234
|
-
try:
|
|
235
|
-
with os.fdopen(os.open(self._output_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600),
|
|
236
|
-
'w') as file_handle:
|
|
237
|
-
csv_writer = csv.writer(file_handle)
|
|
238
|
-
if not self._is_training_mode:
|
|
239
|
-
self._header[fp_duration] = 'fp'
|
|
240
|
-
self._header = self._header[:bp_point] + self._header[bp_point + 1:tail]
|
|
241
|
-
csv_writer.writerow(self._header)
|
|
242
|
-
for row_data in self._result:
|
|
243
|
-
if not self._is_training_mode:
|
|
244
|
-
row_data[fp_duration] += row_data[tail]
|
|
245
|
-
row_data = row_data[:bp_point] + row_data[bp_point + 1:tail]
|
|
246
|
-
csv_writer.writerow(row_data)
|
|
247
|
-
os.chmod(self._output_path, stat.S_IREAD | stat.S_IWRITE)
|
|
248
|
-
except (IOError, OSError) as err:
|
|
249
|
-
log.warning('Failed to save step trace raw info. %s', err)
|
|
250
|
-
raise ProfilerIOException from err
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
class GpuStepTraceParser(BaseStepTraceParser):
|
|
254
|
-
"""The parser for gpu step trace data."""
|
|
255
|
-
|
|
256
|
-
def __init__(self, *args, **kwargs):
|
|
257
|
-
super(GpuStepTraceParser, self).__init__(*args, **kwargs)
|
|
258
|
-
self._source_file_path = self._input_dir
|
|
259
|
-
self._reduce_op_type = []
|
|
260
|
-
|
|
261
|
-
def get_fp_bp(self, f_obj, all_step_fp, all_step_bp):
|
|
262
|
-
"""Parser the fp and bp."""
|
|
263
|
-
fp_start, bp_end = 0, 1
|
|
264
|
-
if self._is_gpu_kernel_async_launch:
|
|
265
|
-
for line in f_obj:
|
|
266
|
-
line = line.strip().split()
|
|
267
|
-
all_step_fp.append(line[1].split(',')[0])
|
|
268
|
-
all_step_bp.append(line[2].split(',')[0])
|
|
269
|
-
else:
|
|
270
|
-
lines = f_obj.readlines()
|
|
271
|
-
all_step_fp.append(lines[fp_start].split()[0])
|
|
272
|
-
all_step_bp.append(lines[bp_end].split()[0])
|
|
273
|
-
|
|
274
|
-
def record_point_info(self, output_path):
|
|
275
|
-
"""
|
|
276
|
-
Record point info into json.
|
|
277
|
-
|
|
278
|
-
Args:
|
|
279
|
-
output_path (str): The output path for saving point info.
|
|
280
|
-
|
|
281
|
-
Returns:
|
|
282
|
-
dict, parsed point info.
|
|
283
|
-
"""
|
|
284
|
-
all_step_points = []
|
|
285
|
-
all_step_fp = []
|
|
286
|
-
all_step_bp = []
|
|
287
|
-
try:
|
|
288
|
-
with open(self._source_file_path, 'r') as f_obj:
|
|
289
|
-
self.get_fp_bp(f_obj, all_step_fp, all_step_bp)
|
|
290
|
-
except (IOError, OSError) as err:
|
|
291
|
-
log.warning(f'Failed to read {self._source_file_path}', err)
|
|
292
|
-
raise ProfilerIOException from err
|
|
293
|
-
|
|
294
|
-
for fp_name, bp_name in zip(all_step_fp, all_step_bp):
|
|
295
|
-
if self._is_training_mode:
|
|
296
|
-
points = {
|
|
297
|
-
'fp_start': fp_name,
|
|
298
|
-
'bp_end': bp_name
|
|
299
|
-
}
|
|
300
|
-
else:
|
|
301
|
-
points = {
|
|
302
|
-
'fp_start': fp_name,
|
|
303
|
-
}
|
|
304
|
-
all_step_points.append(points)
|
|
305
|
-
|
|
306
|
-
try:
|
|
307
|
-
with os.fdopen(os.open(output_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600), 'w') as json_file:
|
|
308
|
-
if self._is_gpu_kernel_async_launch:
|
|
309
|
-
json.dump(all_step_points, json_file)
|
|
310
|
-
else:
|
|
311
|
-
json.dump(all_step_points[0], json_file)
|
|
312
|
-
os.chmod(output_path, stat.S_IREAD | stat.S_IWRITE)
|
|
313
|
-
except (IOError, OSError) as err:
|
|
314
|
-
log.warning('Failed to save point info. %s', err)
|
|
315
|
-
raise ProfilerIOException from err
|
|
316
|
-
|
|
317
|
-
return all_step_points[0]
|
|
318
|
-
|
|
319
|
-
def _parse(self):
|
|
320
|
-
if self._is_gpu_kernel_async_launch:
|
|
321
|
-
self._parse_async_launch()
|
|
322
|
-
else:
|
|
323
|
-
self._parse_not_async_launch()
|
|
324
|
-
|
|
325
|
-
def _parse_not_async_launch(self):
|
|
326
|
-
"""Parse source step trace files."""
|
|
327
|
-
log.info("Start to parse step trace file.")
|
|
328
|
-
fp_start, bp_end, iter_end, iter_start = 0, 1, 2, 3
|
|
329
|
-
reduce_start = 4
|
|
330
|
-
start_time, end_time = 0, 1
|
|
331
|
-
step_trace_point_count = 3
|
|
332
|
-
|
|
333
|
-
source_file = self._source_file_path
|
|
334
|
-
try:
|
|
335
|
-
with open(source_file, 'r') as f:
|
|
336
|
-
lines = f.readlines()
|
|
337
|
-
if len(lines) < step_trace_point_count:
|
|
338
|
-
raise ProfilerRawFileException(
|
|
339
|
-
f"Failed to parse {source_file} file. The FP_POINT/BP_POINT/ITER_END_POINT "
|
|
340
|
-
f"do not recognized correctly. Try to set the environment variable'PROFILING_FP_START' "
|
|
341
|
-
f"and 'PROFILING_BP_END' to solve this problem. For example, "
|
|
342
|
-
f"'export PROFILING_FP_START=Default/xxx/Conv2d-op1' ")
|
|
343
|
-
step_trace_info_all = [line.strip().split()[1:] for line in lines]
|
|
344
|
-
num_of_step = len(step_trace_info_all[0])
|
|
345
|
-
for step_trace_point in step_trace_info_all:
|
|
346
|
-
if len(step_trace_point) != num_of_step:
|
|
347
|
-
raise ProfilerRawFileException(
|
|
348
|
-
f"Failed to parse {source_file} file. Due to the profiled "
|
|
349
|
-
f"step_num of FP/BP/ITER_END Point are not equal")
|
|
350
|
-
iter_start_info = [step_trace_info_all[fp_start][0]] + \
|
|
351
|
-
step_trace_info_all[iter_end][:num_of_step]
|
|
352
|
-
step_trace_info_all.insert(iter_start, iter_start_info)
|
|
353
|
-
except (IOError, OSError) as err:
|
|
354
|
-
log.warning(f'Failed to read {source_file}', err)
|
|
355
|
-
raise ProfilerIOException from err
|
|
356
|
-
finally:
|
|
357
|
-
pass
|
|
358
|
-
|
|
359
|
-
for step_num in range(num_of_step):
|
|
360
|
-
step_trace = {
|
|
361
|
-
'start': int(step_trace_info_all[iter_start][step_num].split(',')[start_time]),
|
|
362
|
-
'fp': int(step_trace_info_all[fp_start][step_num].split(',')[start_time]),
|
|
363
|
-
'bp': int(step_trace_info_all[bp_end][step_num].split(',')[end_time]),
|
|
364
|
-
'end': int(step_trace_info_all[iter_end][step_num].split(',')[end_time]),
|
|
365
|
-
'reduce': {}
|
|
366
|
-
}
|
|
367
|
-
num_of_step_point = len(step_trace_info_all)
|
|
368
|
-
if num_of_step_point > reduce_start:
|
|
369
|
-
reduce_info = {}
|
|
370
|
-
reduce_time_info = []
|
|
371
|
-
for reduce_idx in range(reduce_start, num_of_step_point):
|
|
372
|
-
cur_reduce_time = step_trace_info_all[reduce_idx][step_num]
|
|
373
|
-
reduce_time_info += cur_reduce_time.split(',')
|
|
374
|
-
reduce_info['ops'] = reduce_time_info
|
|
375
|
-
step_trace['reduce'] = reduce_info
|
|
376
|
-
self._record_trace_event(step_trace)
|
|
377
|
-
self._record_average_info()
|
|
378
|
-
log.info("Finish to parse step trace file.")
|
|
379
|
-
|
|
380
|
-
def _parse_one_step(self, line):
|
|
381
|
-
"""
|
|
382
|
-
Parse step text line to dict obj.
|
|
383
|
-
|
|
384
|
-
Args:
|
|
385
|
-
line (str): The step trace line text, it contains five parts, each part is separated by a space.
|
|
386
|
-
part 1: start_op_name,start_op_time
|
|
387
|
-
part 2: fp_op_name,fp_time
|
|
388
|
-
part 3: bp_op_name,bp_time
|
|
389
|
-
part 4: end_op_name,end_time
|
|
390
|
-
part 5: [reduce_op_name,reduce1_start],it contains multiple reduce, each reduce is separated by a space.
|
|
391
|
-
"""
|
|
392
|
-
|
|
393
|
-
line = line.strip().split()
|
|
394
|
-
start_time = int(line[0].split(',')[1][:-1])
|
|
395
|
-
fp_time = int(line[1].split(',')[1][:-1])
|
|
396
|
-
bp_time = int(line[2].split(',')[1][:-1])
|
|
397
|
-
end_time = int(line[3].split(',')[1][:-1])
|
|
398
|
-
reduce_info = {}
|
|
399
|
-
reduce_time_info = []
|
|
400
|
-
|
|
401
|
-
for reduce_item in line[4:]:
|
|
402
|
-
# add communication op start and end time, time unit from ns to 10ns.
|
|
403
|
-
reduce_time_info.append(reduce_item.split(',')[1][:-1])
|
|
404
|
-
reduce_time_info.append(reduce_item.split(',')[2][:-1])
|
|
405
|
-
self._reduce_op_type.append(reduce_item.split(',')[0].split('/')[-1])
|
|
406
|
-
step_trace = {
|
|
407
|
-
'start': start_time,
|
|
408
|
-
'fp': fp_time,
|
|
409
|
-
'bp': bp_time,
|
|
410
|
-
'end': end_time
|
|
411
|
-
}
|
|
412
|
-
if reduce_time_info:
|
|
413
|
-
reduce_info['ops'] = reduce_time_info
|
|
414
|
-
step_trace['reduce'] = reduce_info
|
|
415
|
-
self._record_trace_event(step_trace)
|
|
416
|
-
|
|
417
|
-
def _parse_async_launch(self):
|
|
418
|
-
"""Parse source step trace files generated from async launch kernel."""
|
|
419
|
-
log.info("Start to parse step trace file.")
|
|
420
|
-
try:
|
|
421
|
-
with open(self._source_file_path, 'r') as f_obj:
|
|
422
|
-
for line in f_obj:
|
|
423
|
-
self._parse_one_step(line)
|
|
424
|
-
|
|
425
|
-
except (IOError, OSError) as err:
|
|
426
|
-
log.warning(f'Failed to read {self._source_file_path}', err)
|
|
427
|
-
raise ProfilerIOException from err
|
|
428
|
-
|
|
429
|
-
self._record_average_info()
|
|
430
|
-
log.info("Finish to parse step trace file.")
|
|
431
|
-
|
|
432
|
-
def _get_single_reduce_event_info(self, field_name, start_point, end_point):
|
|
433
|
-
"""
|
|
434
|
-
Get single reduce info.
|
|
435
|
-
|
|
436
|
-
Args:
|
|
437
|
-
field_name (str): The field name.
|
|
438
|
-
start_point (str): Start point time.
|
|
439
|
-
end_point (str): End point time.
|
|
440
|
-
|
|
441
|
-
Returns:
|
|
442
|
-
dict, reduce info.
|
|
443
|
-
"""
|
|
444
|
-
reduce_info = {}
|
|
445
|
-
|
|
446
|
-
index = int(field_name.split('_')[2])
|
|
447
|
-
op_type = self._reduce_op_type[index]
|
|
448
|
-
# append field name with op type.
|
|
449
|
-
field_name += '_' + op_type
|
|
450
|
-
reduce_info[field_name] = int(end_point) - int(start_point)
|
|
451
|
-
reduce_info[field_name + '_start_point'] = start_point
|
|
452
|
-
reduce_info[field_name + '_end_point'] = end_point
|
|
453
|
-
|
|
454
|
-
return reduce_info
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
class AscendStepTraceParser(BaseStepTraceParser):
|
|
458
|
-
"""The parser for ascend step trace data."""
|
|
459
|
-
|
|
460
|
-
def __init__(self, *args, **kwargs):
|
|
461
|
-
super(AscendStepTraceParser, self).__init__(*args, **kwargs)
|
|
462
|
-
self._task_id_op_name_dict = {}
|
|
463
|
-
|
|
464
|
-
@staticmethod
|
|
465
|
-
def _list_ts_track_files(input_dir):
|
|
466
|
-
"""Ts track files have 4 types data, this function will list all files."""
|
|
467
|
-
step_trace_paths = []
|
|
468
|
-
data_dir = os.path.join(input_dir, 'data')
|
|
469
|
-
data_dir = os.path.realpath(data_dir)
|
|
470
|
-
for file in Path(data_dir).glob(r'ts_track*[0-9]'):
|
|
471
|
-
step_trace_paths.append(file.resolve())
|
|
472
|
-
if not step_trace_paths:
|
|
473
|
-
raise ProfilerRawFileException(f"Can not find any ts track files in {data_dir} when parse profiler data.")
|
|
474
|
-
step_trace_paths.sort()
|
|
475
|
-
log.info("Profiler found %d ts track files.", len(step_trace_paths))
|
|
476
|
-
return step_trace_paths
|
|
477
|
-
|
|
478
|
-
@staticmethod
|
|
479
|
-
def _is_all_reduce_tag(tag):
|
|
480
|
-
return PointTag.MIN_ALL_REDUCE.value <= tag < PointTag.MAX_ALL_REDUCE.value
|
|
481
|
-
|
|
482
|
-
@staticmethod
|
|
483
|
-
def _list_ts_track_step_traces(ts_track_paths):
|
|
484
|
-
"""List all ts track from ts track files."""
|
|
485
|
-
step_trace_size = StructType.sizeof(TS_TRACK_STEP_TRACE_STRUCT)
|
|
486
|
-
ts_tracks = []
|
|
487
|
-
for path in ts_track_paths:
|
|
488
|
-
try:
|
|
489
|
-
with open(path, 'rb') as fp:
|
|
490
|
-
while True:
|
|
491
|
-
binary_data = fp.read(step_trace_size)
|
|
492
|
-
if len(binary_data) < step_trace_size:
|
|
493
|
-
break
|
|
494
|
-
unpacked_data = StructType.unpack_binary_data(TS_TRACK_STEP_TRACE_STRUCT, binary_data)
|
|
495
|
-
if unpacked_data.get('rptType') != STEP_TRACE_RPT_TYPE:
|
|
496
|
-
continue
|
|
497
|
-
ts_tracks.append(unpacked_data)
|
|
498
|
-
except (IOError, OSError) as err:
|
|
499
|
-
log.critical("Can not parse profiler file, open file %s failed, detail: %s.", path, str(err))
|
|
500
|
-
raise ProfilerIOException() from err
|
|
501
|
-
finally:
|
|
502
|
-
pass
|
|
503
|
-
log.info("Profiler found %d ts track step trace data.", len(ts_tracks))
|
|
504
|
-
return ts_tracks
|
|
505
|
-
|
|
506
|
-
def set_task_id_op_name_dict(self, task_id_op_name_dict):
|
|
507
|
-
"""The operator task id matches the operator name."""
|
|
508
|
-
self._task_id_op_name_dict = task_id_op_name_dict
|
|
509
|
-
|
|
510
|
-
def record_point_info(self, output_path):
|
|
511
|
-
"""
|
|
512
|
-
Record point info into json.
|
|
513
|
-
|
|
514
|
-
Args:
|
|
515
|
-
output_path (str): The output path for saving point info.
|
|
516
|
-
|
|
517
|
-
Returns:
|
|
518
|
-
dict, parsed point info.
|
|
519
|
-
"""
|
|
520
|
-
point_info = self._tag_map
|
|
521
|
-
if self._is_training_mode:
|
|
522
|
-
points = {
|
|
523
|
-
'fp_start': point_info.get(PointTag.FP_START.value, ''),
|
|
524
|
-
'bp_end': point_info.get(PointTag.BP_END.value, '')
|
|
525
|
-
}
|
|
526
|
-
else:
|
|
527
|
-
points = {
|
|
528
|
-
'fp_start': point_info.get(PointTag.FP_START.value, ''),
|
|
529
|
-
}
|
|
530
|
-
if os.path.exists(output_path):
|
|
531
|
-
return points
|
|
532
|
-
try:
|
|
533
|
-
with os.fdopen(os.open(output_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600), 'w') as json_file:
|
|
534
|
-
json.dump(points, json_file)
|
|
535
|
-
os.chmod(output_path, stat.S_IREAD | stat.S_IWRITE)
|
|
536
|
-
except (IOError, OSError) as err:
|
|
537
|
-
log.warning('Failed to save point info. %s', err)
|
|
538
|
-
raise ProfilerIOException
|
|
539
|
-
return points
|
|
540
|
-
|
|
541
|
-
def _parse(self):
|
|
542
|
-
"""Parse source step trace files."""
|
|
543
|
-
log.info("Start to parse step trace file.")
|
|
544
|
-
ts_track_paths = self._list_ts_track_files(self._input_dir)
|
|
545
|
-
ts_tracks = self._list_ts_track_step_traces(ts_track_paths)
|
|
546
|
-
self._unique_id_map, self._tag_map = self._construct_point_info(ts_tracks, self._task_id_op_name_dict)
|
|
547
|
-
self._save_step_trace_to_result(ts_tracks, self._skip_first_step)
|
|
548
|
-
self._record_average_info()
|
|
549
|
-
log.info("Finish to parse step trace file.")
|
|
550
|
-
|
|
551
|
-
def _construct_point_info(self, ts_tracks, task_id_op_name_dict):
|
|
552
|
-
"""This function can not support multi graph scenario."""
|
|
553
|
-
unique_id_map_tag = {}
|
|
554
|
-
tag_map_unique_id = {}
|
|
555
|
-
for ts_track in ts_tracks:
|
|
556
|
-
unique_id = combine_stream_task_id(ts_track.get('streamId'), ts_track.get('taskId'))
|
|
557
|
-
unique_id_map_tag[unique_id] = ts_track.get('tagId')
|
|
558
|
-
tag_map_unique_id[ts_track.get('tagId')] = unique_id
|
|
559
|
-
unique_id_map_op = {}
|
|
560
|
-
tag_map_op = {}
|
|
561
|
-
for unique_id, tag in unique_id_map_tag.items():
|
|
562
|
-
unique_id_map_op[unique_id] = self._get_real_point_op_name(tag, unique_id, task_id_op_name_dict)
|
|
563
|
-
for tag, unique_id in tag_map_unique_id.items():
|
|
564
|
-
tag_map_op[tag] = self._get_real_point_op_name(tag, unique_id, task_id_op_name_dict)
|
|
565
|
-
return unique_id_map_op, tag_map_op
|
|
566
|
-
|
|
567
|
-
def _get_real_point_op_name(self, tag, profiling_task_id, task_id_op_name_dict):
|
|
568
|
-
"""Get real point op name from given tag and task id."""
|
|
569
|
-
# Currently, the given task id belongs to the profiling operator. We need to obtain the operator whose
|
|
570
|
-
# point is actually performed based on the tag.
|
|
571
|
-
# Inserting point operator rules:
|
|
572
|
-
# 1. model start profiling op -> fp start profiling op -> init-data op -> bp end profiling op -> iter end
|
|
573
|
-
# 2. model start -> other op... -> fp start -> Conv op ... -> bp end -> other op -> iter end
|
|
574
|
-
# 3. AllReduce profiling-op (tag:10000) -> AllReduce op -> AllReduce profiling op (tag: 10001)
|
|
575
|
-
task_ids = list(task_id_op_name_dict.keys())
|
|
576
|
-
op_names = list(task_id_op_name_dict.values())
|
|
577
|
-
|
|
578
|
-
cur_task_index = task_ids.index(profiling_task_id)
|
|
579
|
-
if tag == PointTag.MODEL_START.value:
|
|
580
|
-
real_index = cur_task_index + 1
|
|
581
|
-
is_fp_start_profiling_op = bool('Profiling-op' in op_names[real_index])
|
|
582
|
-
if is_fp_start_profiling_op:
|
|
583
|
-
real_index += 1
|
|
584
|
-
elif tag == PointTag.FP_START.value:
|
|
585
|
-
real_index = cur_task_index + 1
|
|
586
|
-
elif tag in (PointTag.BP_END.value, PointTag.ITER_END.value, PointTag.MODEL_END.value):
|
|
587
|
-
real_index = cur_task_index - 1
|
|
588
|
-
elif tag == PointTag.ITER_END.value:
|
|
589
|
-
real_index = cur_task_index - 1
|
|
590
|
-
elif self._is_all_reduce_tag(tag):
|
|
591
|
-
if tag % 2:
|
|
592
|
-
real_index = cur_task_index - 1
|
|
593
|
-
else:
|
|
594
|
-
real_index = cur_task_index + 1
|
|
595
|
-
else:
|
|
596
|
-
real_index = cur_task_index
|
|
597
|
-
log.warning("The tag id %s can not be identified.", tag)
|
|
598
|
-
return op_names[real_index]
|
|
599
|
-
|
|
600
|
-
def _save_step_trace_to_result(self, ts_tracks, skip_step):
|
|
601
|
-
"""Save step trace data to result."""
|
|
602
|
-
step_trace = {'reduce': defaultdict(list), 'start': '-'}
|
|
603
|
-
model_ids = set()
|
|
604
|
-
for ts_track in ts_tracks:
|
|
605
|
-
if ts_track.get('rptType') != STEP_TRACE_RPT_TYPE:
|
|
606
|
-
continue
|
|
607
|
-
self._construct_step_trace(ts_track, step_trace)
|
|
608
|
-
model_ids.add(ts_track["modelId"])
|
|
609
|
-
|
|
610
|
-
if step_trace.get('end'):
|
|
611
|
-
if not skip_step:
|
|
612
|
-
self._record_trace_event(step_trace)
|
|
613
|
-
skip_step = False
|
|
614
|
-
start_time = step_trace.get('end', '-')
|
|
615
|
-
step_trace.clear()
|
|
616
|
-
step_trace['start'] = start_time
|
|
617
|
-
step_trace['reduce'] = defaultdict(list)
|
|
618
|
-
|
|
619
|
-
if len(model_ids) > 1:
|
|
620
|
-
log.warning("[profiler] Current model has multiple sub graphs, "
|
|
621
|
-
"the segmentation of steps may be inaccurate.")
|
|
622
|
-
|
|
623
|
-
def _construct_step_trace(self, ts_track, step_trace):
|
|
624
|
-
"""Construct step point data."""
|
|
625
|
-
timestamp = ts_track['timestamp']
|
|
626
|
-
tag_id = ts_track['tagId']
|
|
627
|
-
stream_id = ts_track['streamId']
|
|
628
|
-
|
|
629
|
-
if tag_id == PointTag.FP_START.value:
|
|
630
|
-
step_trace['fp'] = timestamp
|
|
631
|
-
elif tag_id == PointTag.BP_END.value:
|
|
632
|
-
step_trace['bp'] = timestamp
|
|
633
|
-
elif tag_id == PointTag.ITER_END.value:
|
|
634
|
-
step_trace['end'] = timestamp
|
|
635
|
-
elif self._is_all_reduce_tag(tag_id):
|
|
636
|
-
unique_id = combine_stream_task_id(ts_track.get('streamId'), ts_track.get('taskId'))
|
|
637
|
-
step_trace['reduce'][stream_id].append((unique_id, timestamp))
|
|
638
|
-
|
|
639
|
-
def _get_single_reduce_event_info(self, field_name, start_point, end_point):
|
|
640
|
-
"""
|
|
641
|
-
Get single reduce info.
|
|
642
|
-
|
|
643
|
-
Args:
|
|
644
|
-
field_name (str): The field name.
|
|
645
|
-
start_point (Tuple[int, int]): Start point time info, including (tag_id, sys_count).
|
|
646
|
-
end_point (Tuple[int, int]): End point time info, including (tag_id, sys_count).
|
|
647
|
-
|
|
648
|
-
Returns:
|
|
649
|
-
dict, reduce info.
|
|
650
|
-
"""
|
|
651
|
-
reduce_info = {}
|
|
652
|
-
if self._unique_id_map.get(end_point[0]) != self._unique_id_map.get(start_point[0]):
|
|
653
|
-
log.warning("Unmatched reduce event <%s, %s>.", start_point, end_point)
|
|
654
|
-
return reduce_info
|
|
655
|
-
op_type = self._unique_id_map.get(start_point[0])
|
|
656
|
-
# append field name with op type.
|
|
657
|
-
if not op_type:
|
|
658
|
-
log.warning("Can't recognize the inner type for point tag: %d.", start_point[0])
|
|
659
|
-
field_name += '_parallel'
|
|
660
|
-
else:
|
|
661
|
-
field_name += '_' + op_type
|
|
662
|
-
reduce_info[field_name] = end_point[1] - start_point[1]
|
|
663
|
-
reduce_info[field_name + '_start_point'] = start_point[1]
|
|
664
|
-
reduce_info[field_name + '_end_point'] = end_point[1]
|
|
665
|
-
|
|
666
|
-
return reduce_info
|