mindspore 2.4.10__cp310-cp310-win_amd64.whl → 2.6.0rc1__cp310-cp310-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 +13 -6
- mindspore/_c_dataengine.cp310-win_amd64.pyd +0 -0
- mindspore/_c_expression.cp310-win_amd64.pyd +0 -0
- mindspore/_c_mindrecord.cp310-win_amd64.pyd +0 -0
- mindspore/_check_jit_forbidden_api.py +3 -0
- mindspore/_checkparam.py +3 -38
- mindspore/_deprecated/__init__.py +17 -0
- mindspore/_deprecated/jit.py +198 -0
- mindspore/_extends/builtin_operations.py +1 -1
- mindspore/_extends/parallel_compile/akg_compiler/gen_custom_op_files.py +1 -1
- mindspore/_extends/parse/__init__.py +6 -7
- mindspore/_extends/parse/compile_config.py +83 -0
- mindspore/_extends/parse/deprecated/__init__.py +0 -0
- mindspore/_extends/parse/deprecated/deprecated_tensor_method.py +394 -0
- mindspore/_extends/parse/jit_fallback_modules/__init__.py +0 -0
- mindspore/_extends/parse/jit_fallback_modules/check_utils.py +123 -0
- mindspore/_extends/parse/jit_fallback_modules/third_party_modules.py +50 -0
- mindspore/_extends/parse/parser.py +46 -197
- mindspore/_extends/parse/resources.py +1 -5
- mindspore/_extends/parse/standard_method.py +217 -98
- mindspore/_extends/pijit/__init__.py +2 -2
- mindspore/_extends/pijit/pijit_func_white_list.py +17 -12
- mindspore/_extends/pijit/tensor_func_list.py +27 -0
- mindspore/_extends/utils.py +1 -1
- mindspore/amp.py +11 -5
- 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/__init__.py +2 -2
- mindspore/boost/base.py +3 -7
- mindspore/boost/boost_cell_wrapper.py +138 -43
- mindspore/c1.dll +0 -0
- mindspore/c1xx.dll +0 -0
- mindspore/c2.dll +0 -0
- mindspore/common/__init__.py +6 -3
- mindspore/common/_grad_function.py +56 -0
- mindspore/common/_pijit_context.py +14 -5
- mindspore/common/_register_for_tensor.py +1 -2
- mindspore/common/_stub_tensor.py +30 -14
- mindspore/common/_tensor_cpp_method.py +17 -0
- mindspore/common/_tensor_docs.py +4760 -0
- mindspore/common/api.py +435 -371
- mindspore/common/auto_dynamic_shape.py +41 -44
- mindspore/common/dtype.py +39 -36
- mindspore/common/dump.py +9 -6
- mindspore/common/file_system.py +9 -1
- mindspore/common/generator.py +2 -0
- mindspore/common/hook_handle.py +6 -2
- mindspore/common/initializer.py +13 -10
- mindspore/common/jit_begin_end.py +94 -0
- mindspore/common/jit_config.py +6 -1
- mindspore/common/jit_context.py +76 -0
- mindspore/common/jit_trace.py +378 -0
- mindspore/common/lazy_inline.py +9 -3
- mindspore/common/mindir_util.py +10 -2
- mindspore/common/mutable.py +5 -4
- mindspore/common/parameter.py +135 -52
- mindspore/common/seed.py +2 -2
- mindspore/common/sparse_tensor.py +23 -17
- mindspore/common/tensor.py +951 -1992
- mindspore/communication/__init__.py +7 -5
- mindspore/communication/_comm_helper.py +52 -2
- mindspore/communication/comm_func.py +240 -181
- mindspore/communication/management.py +95 -26
- mindspore/context.py +314 -566
- mindspore/dataset/__init__.py +65 -37
- mindspore/dataset/audio/__init__.py +2 -8
- mindspore/dataset/audio/transforms.py +3 -17
- mindspore/dataset/callback/ds_callback.py +2 -1
- mindspore/dataset/core/config.py +87 -6
- mindspore/dataset/engine/cache_admin.py +3 -3
- mindspore/dataset/engine/cache_client.py +6 -5
- mindspore/dataset/engine/datasets.py +292 -267
- mindspore/dataset/engine/datasets_audio.py +22 -8
- mindspore/dataset/engine/datasets_standard_format.py +46 -27
- mindspore/dataset/engine/datasets_text.py +78 -48
- mindspore/dataset/engine/datasets_user_defined.py +182 -116
- mindspore/dataset/engine/datasets_vision.py +120 -44
- mindspore/dataset/engine/iterators.py +283 -63
- mindspore/dataset/engine/obs/obs_mindrecord_dataset.py +1 -1
- mindspore/dataset/engine/obs/util.py +8 -0
- mindspore/dataset/engine/queue.py +40 -0
- mindspore/dataset/engine/samplers.py +289 -43
- mindspore/dataset/engine/serializer_deserializer.py +3 -2
- mindspore/dataset/engine/validators.py +53 -11
- mindspore/dataset/text/__init__.py +7 -6
- mindspore/dataset/text/transforms.py +6 -5
- mindspore/dataset/text/utils.py +3 -3
- mindspore/dataset/transforms/__init__.py +0 -9
- mindspore/dataset/transforms/py_transforms_util.py +17 -0
- mindspore/dataset/transforms/transforms.py +31 -14
- mindspore/dataset/utils/browse_dataset.py +1 -1
- mindspore/dataset/vision/__init__.py +2 -9
- mindspore/dataset/vision/transforms.py +202 -158
- mindspore/dataset/vision/utils.py +7 -5
- mindspore/dataset/vision/validators.py +1 -2
- mindspore/device_context/__init__.py +21 -0
- mindspore/device_context/ascend/__init__.py +25 -0
- mindspore/device_context/ascend/device.py +72 -0
- mindspore/device_context/ascend/op_debug.py +153 -0
- mindspore/device_context/ascend/op_precision.py +193 -0
- mindspore/device_context/ascend/op_tuning.py +123 -0
- mindspore/{ops_generate/gen_constants.py → device_context/cpu/__init__.py} +6 -17
- mindspore/device_context/cpu/device.py +62 -0
- mindspore/device_context/cpu/op_tuning.py +43 -0
- mindspore/device_context/gpu/__init__.py +21 -0
- mindspore/device_context/gpu/device.py +70 -0
- mindspore/device_context/gpu/op_precision.py +67 -0
- mindspore/device_context/gpu/op_tuning.py +175 -0
- mindspore/device_manager.py +170 -0
- mindspore/dnnl.dll +0 -0
- mindspore/dpcmi.dll +0 -0
- mindspore/experimental/es/embedding_service.py +35 -27
- mindspore/experimental/llm_boost/__init__.py +1 -0
- mindspore/experimental/llm_boost/ascend_native/__init__.py +22 -0
- mindspore/experimental/llm_boost/ascend_native/llama_boost_ascend_native.py +211 -0
- mindspore/experimental/llm_boost/ascend_native/llm_boost.py +52 -0
- mindspore/experimental/llm_boost/atb/boost_base.py +2 -3
- mindspore/experimental/llm_boost/atb/llama_boost.py +6 -1
- mindspore/experimental/llm_boost/register.py +1 -0
- mindspore/experimental/map_parameter.py +4 -4
- mindspore/experimental/optim/adadelta.py +6 -6
- mindspore/experimental/optim/adagrad.py +4 -4
- mindspore/experimental/optim/adam.py +7 -0
- mindspore/experimental/optim/adamax.py +4 -4
- mindspore/experimental/optim/adamw.py +4 -0
- mindspore/experimental/optim/asgd.py +1 -1
- mindspore/experimental/optim/lr_scheduler.py +73 -46
- mindspore/experimental/optim/radam.py +34 -31
- mindspore/experimental/optim/rprop.py +1 -1
- mindspore/experimental/optim/sgd.py +1 -1
- mindspore/hal/contiguous_tensors_handle.py +6 -10
- mindspore/hal/device.py +55 -53
- mindspore/hal/event.py +52 -52
- mindspore/hal/memory.py +157 -117
- mindspore/hal/stream.py +150 -109
- mindspore/include/api/context.h +0 -1
- mindspore/include/dataset/constants.h +7 -4
- mindspore/include/dataset/execute.h +2 -2
- mindspore/jpeg62.dll +0 -0
- mindspore/log.py +50 -0
- mindspore/mindrecord/__init__.py +21 -8
- mindspore/mindrecord/config.py +17 -316
- mindspore/mindrecord/filereader.py +1 -9
- mindspore/mindrecord/filewriter.py +5 -15
- mindspore/mindrecord/mindpage.py +1 -9
- 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_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_backend.dll → 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 +796 -759
- mindspore/mint/distributed/__init__.py +70 -4
- mindspore/mint/distributed/distributed.py +2679 -44
- mindspore/mint/linalg/__init__.py +8 -0
- mindspore/mint/nn/__init__.py +743 -22
- mindspore/mint/nn/functional.py +716 -23
- mindspore/mint/nn/layer/__init__.py +21 -4
- mindspore/mint/nn/layer/_functions.py +334 -0
- mindspore/mint/nn/layer/activation.py +276 -1
- mindspore/mint/nn/layer/basic.py +123 -0
- mindspore/mint/nn/layer/conv.py +921 -0
- mindspore/mint/nn/layer/normalization.py +223 -28
- mindspore/mint/nn/layer/padding.py +797 -0
- mindspore/mint/nn/layer/pooling.py +235 -0
- mindspore/mint/optim/__init__.py +3 -1
- mindspore/mint/optim/adam.py +223 -0
- mindspore/mint/optim/adamw.py +26 -19
- mindspore/mint/optim/sgd.py +171 -0
- mindspore/mint/special/__init__.py +2 -1
- 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/multiprocessing/__init__.py +5 -0
- mindspore/nn/__init__.py +4 -1
- mindspore/nn/cell.py +1370 -189
- mindspore/nn/dynamic_lr.py +2 -1
- mindspore/nn/layer/activation.py +29 -27
- mindspore/nn/layer/basic.py +51 -35
- mindspore/nn/layer/channel_shuffle.py +3 -3
- mindspore/nn/layer/container.py +1 -1
- mindspore/nn/layer/conv.py +22 -17
- mindspore/nn/layer/embedding.py +12 -11
- mindspore/nn/layer/normalization.py +56 -49
- mindspore/nn/layer/padding.py +4 -3
- mindspore/nn/layer/pooling.py +120 -42
- mindspore/nn/layer/rnn_cells.py +1 -1
- mindspore/nn/layer/rnns.py +2 -1
- mindspore/nn/layer/timedistributed.py +5 -5
- mindspore/nn/layer/transformer.py +59 -36
- mindspore/nn/learning_rate_schedule.py +8 -4
- mindspore/nn/loss/loss.py +58 -55
- mindspore/nn/optim/ada_grad.py +7 -5
- mindspore/nn/optim/adadelta.py +11 -9
- mindspore/nn/optim/adafactor.py +1 -1
- mindspore/nn/optim/adam.py +17 -13
- mindspore/nn/optim/adamax.py +8 -7
- mindspore/nn/optim/adasum.py +5 -5
- mindspore/nn/optim/asgd.py +1 -1
- mindspore/nn/optim/ftrl.py +11 -9
- mindspore/nn/optim/lamb.py +1 -1
- mindspore/nn/optim/lars.py +1 -4
- mindspore/nn/optim/lazyadam.py +12 -10
- mindspore/nn/optim/momentum.py +7 -6
- mindspore/nn/optim/optimizer.py +3 -3
- mindspore/nn/optim/proximal_ada_grad.py +12 -10
- mindspore/nn/optim/rmsprop.py +13 -12
- mindspore/nn/optim/rprop.py +11 -9
- mindspore/nn/optim/sgd.py +9 -6
- mindspore/nn/optim/tft_wrapper.py +5 -2
- mindspore/nn/optim/thor.py +2 -1
- mindspore/nn/probability/bijector/bijector.py +17 -11
- mindspore/nn/probability/bijector/gumbel_cdf.py +5 -5
- mindspore/nn/probability/bijector/invert.py +2 -2
- mindspore/nn/probability/bijector/scalar_affine.py +3 -3
- mindspore/nn/probability/bijector/softplus.py +3 -2
- mindspore/nn/probability/distribution/beta.py +3 -3
- mindspore/nn/probability/distribution/categorical.py +1 -1
- mindspore/nn/probability/distribution/cauchy.py +4 -2
- mindspore/nn/probability/distribution/exponential.py +6 -7
- mindspore/nn/probability/distribution/gamma.py +2 -2
- mindspore/nn/probability/distribution/gumbel.py +2 -2
- mindspore/nn/probability/distribution/half_normal.py +5 -3
- mindspore/nn/probability/distribution/logistic.py +5 -3
- mindspore/nn/probability/distribution/poisson.py +1 -1
- mindspore/nn/probability/distribution/uniform.py +5 -3
- mindspore/nn/reinforcement/_tensors_queue.py +1 -1
- mindspore/nn/reinforcement/tensor_array.py +1 -1
- mindspore/nn/utils/init.py +13 -11
- mindspore/nn/wrap/__init__.py +6 -6
- mindspore/nn/wrap/cell_wrapper.py +181 -122
- mindspore/nn/wrap/grad_reducer.py +45 -36
- mindspore/nn/wrap/loss_scale.py +6 -7
- mindspore/numpy/array_creations.py +63 -65
- mindspore/numpy/array_ops.py +149 -144
- mindspore/numpy/logic_ops.py +41 -42
- mindspore/numpy/math_ops.py +365 -363
- mindspore/numpy/utils.py +17 -18
- mindspore/numpy/utils_const.py +5 -6
- mindspore/opencv_core452.dll +0 -0
- mindspore/opencv_imgcodecs452.dll +0 -0
- mindspore/opencv_imgproc452.dll +0 -0
- mindspore/ops/__init__.py +5 -3
- mindspore/ops/_grad_experimental/grad_comm_ops.py +112 -16
- mindspore/ops/_grad_experimental/grad_debug_ops.py +14 -2
- mindspore/ops/_grad_experimental/grad_inner_ops.py +9 -0
- mindspore/ops/_grad_experimental/grad_math_ops.py +2 -1
- mindspore/ops/_grad_experimental/taylor_rule.py +29 -0
- mindspore/ops/_op_impl/cpu/__init__.py +1 -0
- mindspore/ops/_op_impl/cpu/raise_op.py +28 -0
- mindspore/ops/_register_for_op.py +0 -11
- mindspore/{ops_generate → ops/_utils}/arg_dtype_cast.py +123 -4
- mindspore/{ops_generate → ops/_utils}/arg_handler.py +3 -65
- mindspore/ops/_vmap/vmap_array_ops.py +27 -25
- mindspore/ops/_vmap/vmap_base.py +0 -2
- mindspore/ops/_vmap/vmap_grad_nn_ops.py +21 -14
- mindspore/ops/_vmap/vmap_math_ops.py +15 -16
- mindspore/ops/_vmap/vmap_nn_ops.py +29 -42
- mindspore/ops/auto_generate/__init__.py +4 -3
- mindspore/ops/auto_generate/cpp_create_prim_instance_helper.py +236 -46
- mindspore/ops/auto_generate/gen_extend_func.py +764 -124
- mindspore/ops/auto_generate/gen_ops_def.py +4018 -2264
- mindspore/ops/auto_generate/gen_ops_prim.py +15463 -5037
- mindspore/ops/auto_generate/pyboost_inner_prim.py +221 -87
- mindspore/ops/composite/__init__.py +2 -1
- mindspore/ops/composite/base.py +20 -25
- mindspore/ops/composite/math_ops.py +6 -16
- mindspore/ops/composite/multitype_ops/__init__.py +5 -2
- mindspore/ops/composite/multitype_ops/_compile_utils.py +228 -30
- mindspore/ops/composite/multitype_ops/_constexpr_utils.py +1 -2
- mindspore/ops/composite/multitype_ops/add_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/bitwise_xor_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/div_impl.py +6 -4
- mindspore/ops/composite/multitype_ops/equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/floordiv_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/getitem_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/greater_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/greater_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/invert_impl.py +50 -0
- mindspore/ops/composite/multitype_ops/left_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/less_equal_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/less_impl.py +4 -3
- mindspore/ops/composite/multitype_ops/logic_not_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/logical_and_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/logical_or_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mod_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/mul_impl.py +3 -2
- mindspore/ops/composite/multitype_ops/negative_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_equal_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/not_in_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/ones_like_impl.py +18 -0
- mindspore/ops/composite/multitype_ops/pow_impl.py +2 -30
- mindspore/ops/composite/multitype_ops/right_shift_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/setitem_impl.py +2 -1
- mindspore/ops/composite/multitype_ops/sub_impl.py +2 -1
- mindspore/ops/function/__init__.py +40 -2
- mindspore/ops/function/_add_attr_func.py +58 -0
- mindspore/ops/function/array_func.py +2089 -2403
- mindspore/ops/function/clip_func.py +80 -23
- mindspore/ops/function/debug_func.py +57 -57
- mindspore/ops/function/grad/__init__.py +1 -0
- mindspore/ops/function/grad/grad_func.py +104 -71
- mindspore/ops/function/image_func.py +2 -2
- mindspore/ops/function/linalg_func.py +47 -78
- mindspore/ops/function/math_func.py +4501 -3802
- mindspore/ops/function/nn_func.py +1726 -620
- mindspore/ops/function/other_func.py +159 -1
- mindspore/ops/function/parameter_func.py +18 -84
- mindspore/ops/function/random_func.py +440 -387
- mindspore/ops/function/reshard_func.py +4 -70
- mindspore/ops/function/sparse_func.py +3 -3
- mindspore/ops/function/sparse_unary_func.py +6 -6
- mindspore/ops/function/spectral_func.py +25 -58
- mindspore/ops/function/vmap_func.py +24 -17
- mindspore/ops/functional.py +22 -7
- mindspore/ops/functional_overload.py +1440 -0
- mindspore/ops/op_info_register.py +32 -244
- mindspore/ops/operations/__init__.py +13 -7
- mindspore/ops/operations/_custom_ops_utils.py +247 -0
- mindspore/ops/operations/_embedding_cache_ops.py +4 -4
- mindspore/ops/operations/_grad_ops.py +2 -43
- mindspore/ops/operations/_infer_ops.py +2 -1
- mindspore/ops/operations/_inner_ops.py +43 -84
- mindspore/ops/operations/_ms_kernel.py +4 -10
- mindspore/ops/operations/_rl_inner_ops.py +1 -1
- mindspore/ops/operations/_scalar_ops.py +3 -2
- mindspore/ops/operations/_sequence_ops.py +1 -1
- mindspore/ops/operations/_tensor_array.py +1 -1
- mindspore/ops/operations/array_ops.py +81 -324
- mindspore/ops/operations/comm_ops.py +154 -108
- mindspore/ops/operations/custom_ops.py +232 -78
- mindspore/ops/operations/debug_ops.py +153 -59
- mindspore/ops/operations/inner_ops.py +7 -5
- mindspore/ops/operations/linalg_ops.py +1 -57
- mindspore/ops/operations/manually_defined/_inner.py +1 -1
- mindspore/ops/operations/manually_defined/ops_def.py +928 -180
- mindspore/ops/operations/math_ops.py +32 -234
- mindspore/ops/operations/nn_ops.py +210 -498
- mindspore/ops/operations/other_ops.py +62 -9
- mindspore/ops/operations/random_ops.py +13 -7
- mindspore/ops/operations/reshard_ops.py +1 -1
- mindspore/ops/operations/sparse_ops.py +2 -2
- mindspore/ops/primitive.py +66 -53
- mindspore/ops/tensor_method.py +1888 -0
- mindspore/ops_generate/__init__.py +0 -5
- mindspore/ops_generate/aclnn/__init__.py +0 -0
- mindspore/ops_generate/aclnn/aclnn_kernel_register_auto_cc_generator.py +135 -0
- mindspore/ops_generate/aclnn/gen_aclnn_implement.py +257 -0
- mindspore/ops_generate/api/__init__.py +0 -0
- mindspore/ops_generate/api/add_tensor_docs_generator.py +56 -0
- mindspore/ops_generate/api/cpp_create_prim_instance_helper_generator.py +105 -0
- mindspore/ops_generate/api/functional_map_cpp_generator.py +504 -0
- mindspore/ops_generate/api/functional_overload_py_generator.py +112 -0
- mindspore/ops_generate/api/functions_cc_generator.py +237 -0
- mindspore/ops_generate/api/gen_api.py +103 -0
- mindspore/ops_generate/api/op_api_proto.py +235 -0
- mindspore/ops_generate/api/tensor_func_reg_cpp_generator.py +461 -0
- mindspore/ops_generate/common/__init__.py +0 -0
- mindspore/ops_generate/common/base_generator.py +11 -0
- mindspore/ops_generate/common/gen_constants.py +91 -0
- mindspore/ops_generate/common/gen_utils.py +348 -0
- mindspore/ops_generate/common/op_proto.py +473 -0
- mindspore/ops_generate/common/template.py +523 -0
- mindspore/ops_generate/gen_ops.py +22 -1069
- mindspore/ops_generate/op_def/__init__.py +0 -0
- mindspore/ops_generate/op_def/gen_op_def.py +90 -0
- mindspore/ops_generate/op_def/lite_ops_cpp_generator.py +191 -0
- mindspore/ops_generate/op_def/ops_def_cc_generator.py +299 -0
- mindspore/ops_generate/op_def/ops_def_h_generator.py +74 -0
- mindspore/ops_generate/op_def/ops_name_h_generator.py +83 -0
- mindspore/ops_generate/op_def/ops_primitive_h_generator.py +125 -0
- mindspore/ops_generate/op_def_py/__init__.py +0 -0
- mindspore/ops_generate/op_def_py/gen_op_def_py.py +47 -0
- mindspore/ops_generate/op_def_py/op_def_py_generator.py +132 -0
- mindspore/ops_generate/op_def_py/op_prim_py_generator.py +489 -0
- mindspore/ops_generate/pyboost/__init__.py +0 -0
- mindspore/ops_generate/pyboost/auto_grad_impl_cc_generator.py +139 -0
- mindspore/ops_generate/pyboost/auto_grad_reg_cc_generator.py +93 -0
- mindspore/ops_generate/pyboost/gen_pyboost_func.py +175 -0
- mindspore/ops_generate/pyboost/op_template_parser.py +517 -0
- mindspore/ops_generate/pyboost/pyboost_functions_cpp_generator.py +407 -0
- mindspore/ops_generate/pyboost/pyboost_functions_h_generator.py +100 -0
- mindspore/ops_generate/pyboost/pyboost_functions_py_generator.py +148 -0
- mindspore/ops_generate/pyboost/pyboost_grad_function_cpp_generator.py +155 -0
- mindspore/ops_generate/pyboost/pyboost_inner_prim_generator.py +132 -0
- mindspore/ops_generate/pyboost/pyboost_native_grad_functions_generator.py +272 -0
- mindspore/ops_generate/pyboost/pyboost_op_cpp_code_generator.py +938 -0
- mindspore/ops_generate/pyboost/pyboost_overload_functions_cpp_generator.py +357 -0
- mindspore/ops_generate/{pyboost_utils.py → pyboost/pyboost_utils.py} +179 -36
- mindspore/ops_generate/resources/__init__.py +0 -0
- mindspore/ops_generate/resources/resource_list.py +30 -0
- mindspore/ops_generate/resources/resource_loader.py +36 -0
- mindspore/ops_generate/resources/resource_manager.py +64 -0
- mindspore/ops_generate/resources/yaml_loader.py +88 -0
- mindspore/ops_generate/tensor_py_cc_generator.py +122 -0
- mindspore/parallel/__init__.py +7 -3
- mindspore/parallel/_auto_parallel_context.py +152 -34
- mindspore/parallel/_cell_wrapper.py +130 -15
- mindspore/parallel/_parallel_serialization.py +107 -5
- mindspore/parallel/_ps_context.py +1 -1
- mindspore/parallel/_recovery_context.py +7 -2
- mindspore/parallel/_tensor.py +142 -18
- mindspore/parallel/_utils.py +199 -23
- mindspore/parallel/algo_parameter_config.py +4 -4
- mindspore/parallel/auto_parallel.py +732 -0
- mindspore/parallel/checkpoint_convert.py +159 -0
- mindspore/parallel/checkpoint_transform.py +698 -35
- mindspore/parallel/cluster/process_entity/_api.py +276 -50
- mindspore/parallel/cluster/process_entity/_utils.py +41 -6
- mindspore/parallel/cluster/run.py +21 -4
- mindspore/parallel/function/__init__.py +24 -0
- mindspore/parallel/function/reshard_func.py +259 -0
- mindspore/parallel/nn/__init__.py +25 -0
- mindspore/parallel/nn/parallel_cell_wrapper.py +263 -0
- mindspore/parallel/nn/parallel_grad_reducer.py +169 -0
- mindspore/parallel/parameter_broadcast.py +25 -14
- mindspore/parallel/shard.py +137 -58
- mindspore/parallel/transform_safetensors.py +363 -305
- mindspore/pgodb140.dll +0 -0
- mindspore/pgort140.dll +0 -0
- mindspore/profiler/__init__.py +22 -5
- mindspore/profiler/analysis/__init__.py +0 -0
- mindspore/profiler/analysis/parser/__init__.py +0 -0
- mindspore/profiler/analysis/parser/ascend_cann_parser.py +170 -0
- mindspore/profiler/analysis/parser/base_parser.py +158 -0
- mindspore/profiler/analysis/parser/framework_cann_relation_parser.py +45 -0
- mindspore/profiler/analysis/parser/ms_framework_parser.py +142 -0
- mindspore/profiler/analysis/parser/ms_minddata_parser.py +145 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/ascend_timeline_assembler.py +264 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/base_timeline_assembler.py +40 -0
- mindspore/profiler/analysis/parser/timeline_assembly_factory/trace_view_container.py +106 -0
- mindspore/profiler/analysis/parser/timeline_creator/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_creator/base_timeline_creator.py +44 -0
- mindspore/profiler/analysis/parser/timeline_creator/cpu_op_timeline_creator.py +90 -0
- mindspore/profiler/analysis/parser/timeline_creator/fwk_timeline_creator.py +76 -0
- mindspore/profiler/analysis/parser/timeline_creator/msprof_timeline_creator.py +103 -0
- mindspore/profiler/analysis/parser/timeline_creator/scope_layer_timeline_creator.py +134 -0
- mindspore/profiler/analysis/parser/timeline_event/__init__.py +0 -0
- mindspore/profiler/analysis/parser/timeline_event/base_event.py +233 -0
- mindspore/profiler/analysis/parser/timeline_event/cpu_op_event.py +47 -0
- mindspore/profiler/analysis/parser/timeline_event/flow_event.py +36 -0
- mindspore/profiler/analysis/parser/timeline_event/fwk_event.py +415 -0
- mindspore/profiler/analysis/parser/timeline_event/msprof_event.py +73 -0
- mindspore/profiler/analysis/parser/timeline_event/scope_layer_event.py +53 -0
- mindspore/profiler/analysis/parser/timeline_event/timeline_event_pool.py +146 -0
- mindspore/profiler/analysis/task_manager.py +131 -0
- mindspore/profiler/analysis/time_converter.py +84 -0
- mindspore/profiler/analysis/viewer/__init__.py +0 -0
- mindspore/profiler/analysis/viewer/ascend_communication_viewer.py +372 -0
- mindspore/profiler/analysis/viewer/ascend_integrate_viewer.py +87 -0
- mindspore/profiler/analysis/viewer/ascend_kernel_details_viewer.py +250 -0
- mindspore/profiler/analysis/viewer/ascend_memory_viewer.py +320 -0
- mindspore/profiler/analysis/viewer/ascend_op_memory_viewer.py +327 -0
- mindspore/profiler/analysis/viewer/ascend_step_trace_time_viewer.py +376 -0
- mindspore/profiler/analysis/viewer/ascend_timeline_viewer.py +58 -0
- mindspore/profiler/analysis/viewer/base_viewer.py +26 -0
- mindspore/profiler/analysis/viewer/ms_dataset_viewer.py +96 -0
- mindspore/profiler/analysis/viewer/ms_minddata_viewer.py +581 -0
- mindspore/profiler/analysis/work_flow.py +73 -0
- mindspore/profiler/common/ascend_msprof_exporter.py +139 -0
- mindspore/profiler/common/command_executor.py +90 -0
- mindspore/profiler/common/constant.py +186 -3
- mindspore/profiler/common/file_manager.py +208 -0
- mindspore/profiler/common/log.py +130 -0
- mindspore/profiler/common/msprof_cmd_tool.py +221 -0
- mindspore/profiler/common/path_manager.py +395 -0
- mindspore/profiler/common/process_bar.py +168 -0
- mindspore/profiler/common/process_pool.py +9 -3
- mindspore/profiler/common/profiler_context.py +500 -0
- mindspore/profiler/common/profiler_info.py +304 -0
- mindspore/profiler/common/profiler_meta_data.py +74 -0
- mindspore/profiler/common/profiler_output_path.py +284 -0
- mindspore/profiler/common/profiler_parameters.py +251 -0
- mindspore/profiler/common/profiler_path_manager.py +179 -0
- mindspore/profiler/common/record_function.py +76 -0
- mindspore/profiler/common/tlv_decoder.py +76 -0
- mindspore/profiler/common/util.py +75 -2
- mindspore/profiler/dynamic_profiler.py +341 -75
- mindspore/profiler/envprofiler.py +163 -0
- mindspore/profiler/experimental_config.py +197 -0
- mindspore/profiler/mstx.py +242 -0
- mindspore/profiler/platform/__init__.py +21 -0
- mindspore/profiler/platform/base_profiler.py +40 -0
- mindspore/profiler/platform/cpu_profiler.py +124 -0
- mindspore/profiler/platform/gpu_profiler.py +74 -0
- mindspore/profiler/platform/npu_profiler.py +335 -0
- mindspore/profiler/profiler.py +1073 -90
- mindspore/profiler/profiler_action_controller.py +187 -0
- mindspore/profiler/profiler_interface.py +118 -0
- mindspore/profiler/schedule.py +243 -0
- mindspore/rewrite/api/node.py +15 -13
- mindspore/rewrite/api/symbol_tree.py +2 -3
- mindspore/run_check/_check_version.py +27 -20
- mindspore/run_check/run_check.py +1 -1
- mindspore/runtime/__init__.py +37 -0
- mindspore/runtime/device.py +27 -0
- mindspore/runtime/event.py +209 -0
- mindspore/runtime/executor.py +177 -0
- mindspore/runtime/memory.py +409 -0
- mindspore/runtime/stream.py +460 -0
- mindspore/runtime/thread_bind_core.py +401 -0
- mindspore/safeguard/rewrite_obfuscation.py +12 -9
- mindspore/swresample-4.dll +0 -0
- mindspore/swscale-6.dll +0 -0
- mindspore/tbbmalloc.dll +0 -0
- mindspore/tinyxml2.dll +0 -0
- mindspore/train/__init__.py +8 -8
- mindspore/train/_utils.py +88 -25
- mindspore/train/amp.py +9 -5
- mindspore/train/callback/__init__.py +2 -2
- mindspore/train/callback/_callback.py +2 -16
- mindspore/train/callback/_checkpoint.py +53 -55
- mindspore/train/callback/_cluster_monitor.py +14 -18
- mindspore/train/callback/_early_stop.py +1 -1
- mindspore/train/callback/_flops_collector.py +103 -68
- mindspore/train/callback/_history.py +8 -5
- mindspore/train/callback/_lambda_callback.py +2 -2
- mindspore/train/callback/_landscape.py +0 -3
- mindspore/train/callback/_loss_monitor.py +2 -1
- mindspore/train/callback/_on_request_exit.py +6 -5
- mindspore/train/callback/_reduce_lr_on_plateau.py +11 -6
- mindspore/train/callback/_summary_collector.py +52 -19
- mindspore/train/callback/_time_monitor.py +2 -1
- mindspore/train/callback/{_tft_register.py → _train_fault_tolerance.py} +204 -107
- mindspore/train/data_sink.py +25 -2
- mindspore/train/dataset_helper.py +15 -16
- mindspore/train/loss_scale_manager.py +8 -7
- mindspore/train/metrics/accuracy.py +3 -3
- mindspore/train/metrics/confusion_matrix.py +9 -9
- mindspore/train/metrics/error.py +3 -3
- mindspore/train/metrics/hausdorff_distance.py +4 -4
- mindspore/train/metrics/mean_surface_distance.py +3 -3
- mindspore/train/metrics/metric.py +0 -12
- mindspore/train/metrics/occlusion_sensitivity.py +4 -2
- mindspore/train/metrics/precision.py +11 -10
- mindspore/train/metrics/recall.py +9 -9
- mindspore/train/metrics/root_mean_square_surface_distance.py +2 -2
- mindspore/train/mind_ir_pb2.py +174 -46
- mindspore/train/model.py +184 -113
- mindspore/train/serialization.py +622 -978
- mindspore/train/summary/_summary_adapter.py +2 -2
- mindspore/train/summary/summary_record.py +2 -3
- mindspore/train/train_thor/model_thor.py +1 -1
- mindspore/turbojpeg.dll +0 -0
- mindspore/utils/__init__.py +6 -3
- mindspore/utils/dryrun.py +140 -0
- mindspore/utils/hooks.py +81 -0
- mindspore/utils/runtime_execution_order_check.py +550 -0
- mindspore/utils/utils.py +138 -4
- mindspore/vcmeta.dll +0 -0
- mindspore/vcruntime140.dll +0 -0
- mindspore/vcruntime140_1.dll +0 -0
- mindspore/version.py +1 -1
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/METADATA +3 -3
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/RECORD +587 -418
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/entry_points.txt +1 -1
- mindspore/_install_custom.py +0 -43
- mindspore/common/_register_for_adapter.py +0 -74
- mindspore/common/_tensor_overload.py +0 -139
- mindspore/mindspore_np_dtype.dll +0 -0
- mindspore/ops/auto_generate/gen_arg_dtype_cast.py +0 -252
- mindspore/ops/auto_generate/gen_arg_handler.py +0 -197
- mindspore/ops/operations/_opaque_predicate_registry.py +0 -41
- mindspore/ops_generate/gen_aclnn_implement.py +0 -263
- mindspore/ops_generate/gen_ops_inner_prim.py +0 -131
- mindspore/ops_generate/gen_pyboost_func.py +0 -1052
- mindspore/ops_generate/gen_utils.py +0 -209
- mindspore/ops_generate/op_proto.py +0 -145
- mindspore/ops_generate/template.py +0 -261
- mindspore/profiler/envprofiling.py +0 -254
- mindspore/profiler/profiling.py +0 -1926
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/WHEEL +0 -0
- {mindspore-2.4.10.dist-info → mindspore-2.6.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Copyright 2024 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
|
+
"""Exporter for Ascend MSPROF data."""
|
|
16
|
+
import os
|
|
17
|
+
import glob
|
|
18
|
+
from collections import defaultdict
|
|
19
|
+
from typing import Dict, List, Optional
|
|
20
|
+
|
|
21
|
+
from mindspore import log as logger
|
|
22
|
+
from mindspore.profiler.common.path_manager import PathManager
|
|
23
|
+
from mindspore.profiler.common.file_manager import FileManager
|
|
24
|
+
from mindspore.profiler.common.msprof_cmd_tool import MsprofCmdTool
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class AscendMsprofExporter:
|
|
28
|
+
"""Exporter for Ascend MSPROF data."""
|
|
29
|
+
|
|
30
|
+
_DRV_VERSION = 467473
|
|
31
|
+
_DEFAULT_MODEL_ID = 4294967295
|
|
32
|
+
_STEP_TRACE_FILE_PATTERN = "step_trace_*.csv"
|
|
33
|
+
_STEP_TRACE_MODEL_ID_INDEX = 9
|
|
34
|
+
_STEP_TRACE_ITERATION_ID_INDEX = 1
|
|
35
|
+
|
|
36
|
+
def __init__(self, **kwargs):
|
|
37
|
+
"""Initialize AscendMsprofExporter."""
|
|
38
|
+
self._msprof_profile_output_path = kwargs.get("msprof_profile_output_path")
|
|
39
|
+
self._msprof_profile_path = kwargs.get("msprof_profile_path")
|
|
40
|
+
self._step_list = kwargs.get("step_list")
|
|
41
|
+
self._export_type = kwargs.get("export_type")
|
|
42
|
+
self._msprof_tool = MsprofCmdTool(self._msprof_profile_path)
|
|
43
|
+
|
|
44
|
+
def export(self) -> None:
|
|
45
|
+
"""Determine the export strategy and execute the appropriate export method."""
|
|
46
|
+
support_all_export = self._check_drv_version()
|
|
47
|
+
if self._step_list or not support_all_export:
|
|
48
|
+
self._single_export(self._step_list)
|
|
49
|
+
else:
|
|
50
|
+
self._all_export()
|
|
51
|
+
self._msprof_tool.run_ms_analyze_cmd(self._export_type)
|
|
52
|
+
|
|
53
|
+
def _single_export(self, step_list: Optional[List[int]]) -> None:
|
|
54
|
+
"""Perform single export for each model and iteration.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
step_list (Optional[List[int]]): iteration IDs.
|
|
58
|
+
"""
|
|
59
|
+
if not step_list:
|
|
60
|
+
model_iteration_dict = self._generate_step_trace()
|
|
61
|
+
if not model_iteration_dict:
|
|
62
|
+
return
|
|
63
|
+
else:
|
|
64
|
+
model_iteration_dict = {self._DEFAULT_MODEL_ID: step_list}
|
|
65
|
+
|
|
66
|
+
for model_id, iter_list in model_iteration_dict.items():
|
|
67
|
+
self._msprof_tool.run_ms_py_export_cmd(model_id, iter_list, self._export_type)
|
|
68
|
+
|
|
69
|
+
def _all_export(self) -> None:
|
|
70
|
+
"""Perform all-export for all data."""
|
|
71
|
+
self._msprof_tool.run_ms_export_cmd(self._export_type)
|
|
72
|
+
|
|
73
|
+
def _check_drv_version(self) -> bool:
|
|
74
|
+
"""Check if the driver version supports all-export.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
bool: True if driver version supports all-export, False otherwise.
|
|
78
|
+
"""
|
|
79
|
+
msprof_info = self._msprof_tool.get_msprof_info()
|
|
80
|
+
status = msprof_info.get("status", 1)
|
|
81
|
+
drv_version = (
|
|
82
|
+
msprof_info.get("data", {}).get("version_info", {}).get("drv_version", 0)
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
if status != 1 and drv_version and drv_version >= self._DRV_VERSION:
|
|
86
|
+
return True
|
|
87
|
+
|
|
88
|
+
logger.warning(
|
|
89
|
+
"Current driver package does not support all-export mode. "
|
|
90
|
+
"Using single export mode, which may affect performance. "
|
|
91
|
+
"Consider upgrading the driver package."
|
|
92
|
+
)
|
|
93
|
+
return False
|
|
94
|
+
|
|
95
|
+
def _generate_step_trace(self) -> Optional[Dict[int, List[int]]]:
|
|
96
|
+
"""Generate step trace data.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Optional[Dict[int, List[int]]]: Model IDs to iteration IDs mapping, or None if failed.
|
|
100
|
+
"""
|
|
101
|
+
try:
|
|
102
|
+
# step1: run msprof command
|
|
103
|
+
self._msprof_tool.run_ms_export_cmd(self._export_type)
|
|
104
|
+
step_trace_file = glob.glob(
|
|
105
|
+
os.path.join(
|
|
106
|
+
self._msprof_profile_output_path, self._STEP_TRACE_FILE_PATTERN
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
if not step_trace_file:
|
|
110
|
+
logger.warning(
|
|
111
|
+
f"No step trace csv file found in {self._msprof_profile_output_path}."
|
|
112
|
+
)
|
|
113
|
+
return None
|
|
114
|
+
# step2: parse the step trace file to get model id and iteration id
|
|
115
|
+
model_iteration_dict = self._parse_step_trace_file(step_trace_file[0])
|
|
116
|
+
# step3: remove the unused files
|
|
117
|
+
PathManager.remove_path_safety(self._msprof_profile_output_path)
|
|
118
|
+
return model_iteration_dict
|
|
119
|
+
|
|
120
|
+
except RuntimeError as err:
|
|
121
|
+
logger.warning(f"Failed to get step trace data. Error: {str(err)}")
|
|
122
|
+
return None
|
|
123
|
+
|
|
124
|
+
def _parse_step_trace_file(self, file_path: str) -> Dict[int, List[int]]:
|
|
125
|
+
"""Parse the step trace file to extract model and iteration information.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
file_path (str): Path to the step trace file.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
Dict[int, List[int]]: Model IDs to iteration IDs mapping.
|
|
132
|
+
"""
|
|
133
|
+
model_iteration_dict = defaultdict(list)
|
|
134
|
+
step_trace_data = FileManager.read_csv_file(file_path)
|
|
135
|
+
for row in step_trace_data:
|
|
136
|
+
model_id = int(row[self._STEP_TRACE_MODEL_ID_INDEX])
|
|
137
|
+
iteration_id = int(row[self._STEP_TRACE_ITERATION_ID_INDEX])
|
|
138
|
+
model_iteration_dict[model_id].append(iteration_id)
|
|
139
|
+
return model_iteration_dict
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Copyright 2020-2024 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
|
+
"""Profiler command executor"""
|
|
16
|
+
import shlex
|
|
17
|
+
import subprocess
|
|
18
|
+
from typing import Union, Tuple
|
|
19
|
+
|
|
20
|
+
from mindspore import log as logger
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class CommandExecutor:
|
|
24
|
+
"""
|
|
25
|
+
Execute command in subprocess.
|
|
26
|
+
"""
|
|
27
|
+
@staticmethod
|
|
28
|
+
def execute(
|
|
29
|
+
cmd: Union[str, list],
|
|
30
|
+
timeout: int = 10 * 60 * 60,
|
|
31
|
+
check: bool = True,
|
|
32
|
+
encoding: str = "utf-8",
|
|
33
|
+
) -> Tuple[str, str, int]:
|
|
34
|
+
"""
|
|
35
|
+
Execute a shell command with improved error handling and logging.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
cmd (Union[str, list]): The command to execute, either as a string or list.
|
|
39
|
+
timeout (int): Maximum execution time in seconds. Defaults to 10 hours.
|
|
40
|
+
check (bool): If True, raise an exception for non-zero exit codes. Defaults to True.
|
|
41
|
+
encoding (str): Specify the encoding for output. Defaults to 'utf-8'.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Tuple[str, str, int]: A tuple containing (stdout, stderr, return_code).
|
|
45
|
+
|
|
46
|
+
Raises:
|
|
47
|
+
RuntimeError: If any error occurs during command execution.
|
|
48
|
+
"""
|
|
49
|
+
if isinstance(cmd, str):
|
|
50
|
+
cmd = shlex.split(cmd)
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
result = subprocess.run(
|
|
54
|
+
cmd,
|
|
55
|
+
capture_output=True,
|
|
56
|
+
text=True,
|
|
57
|
+
timeout=timeout,
|
|
58
|
+
check=check,
|
|
59
|
+
shell=False,
|
|
60
|
+
encoding=encoding,
|
|
61
|
+
)
|
|
62
|
+
logger.info(
|
|
63
|
+
f"Command '{cmd}' executed successfully. Return code: {result.returncode}"
|
|
64
|
+
)
|
|
65
|
+
return result.stdout, result.stderr, result.returncode
|
|
66
|
+
|
|
67
|
+
except subprocess.TimeoutExpired as e:
|
|
68
|
+
error_msg = f"Command '{cmd}' timed out after {timeout} seconds"
|
|
69
|
+
logger.error(error_msg)
|
|
70
|
+
raise RuntimeError(error_msg) from e
|
|
71
|
+
|
|
72
|
+
except subprocess.CalledProcessError as e:
|
|
73
|
+
error_msg = (
|
|
74
|
+
f"Command '{cmd}' failed with return code {e.returncode}, "
|
|
75
|
+
f"Standard Error: {e.stderr}"
|
|
76
|
+
)
|
|
77
|
+
logger.error(error_msg)
|
|
78
|
+
raise RuntimeError(error_msg) from e
|
|
79
|
+
|
|
80
|
+
except (FileNotFoundError, PermissionError) as e:
|
|
81
|
+
error_msg = f"Error executing command '{cmd}': {str(e)}"
|
|
82
|
+
logger.error(error_msg)
|
|
83
|
+
raise RuntimeError(error_msg) from e
|
|
84
|
+
|
|
85
|
+
except Exception as e: # pylint: disable=broad-exception-caught
|
|
86
|
+
error_msg = (
|
|
87
|
+
f"Unexpected error occurred while executing command '{cmd}': {str(e)}"
|
|
88
|
+
)
|
|
89
|
+
logger.error(error_msg)
|
|
90
|
+
raise RuntimeError(error_msg) from e
|
|
@@ -18,12 +18,195 @@ from enum import Enum
|
|
|
18
18
|
|
|
19
19
|
class DeviceTarget(Enum):
|
|
20
20
|
"""The device target enum."""
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
|
|
22
|
+
CPU = "CPU"
|
|
23
|
+
GPU = "GPU"
|
|
24
|
+
NPU = "Ascend"
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class ProfilerLevel(Enum):
|
|
28
|
+
"""The profiler level enum."""
|
|
29
|
+
|
|
30
|
+
LevelNone = "LevelNone"
|
|
27
31
|
Level0 = "Level0"
|
|
28
32
|
Level1 = "Level1"
|
|
29
33
|
Level2 = "Level2"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class ProfilerActivity(Enum):
|
|
37
|
+
"""The profiler activity enum."""
|
|
38
|
+
|
|
39
|
+
NPU = "NPU"
|
|
40
|
+
GPU = "GPU"
|
|
41
|
+
CPU = "CPU"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class AicoreMetrics(Enum):
|
|
45
|
+
"""The aicore metrics enum."""
|
|
46
|
+
|
|
47
|
+
PipeUtilization = "PipeUtilization"
|
|
48
|
+
ArithmeticUtilization = "ArithmeticUtilization"
|
|
49
|
+
Memory = "Memory"
|
|
50
|
+
MemoryL0 = "MemoryL0"
|
|
51
|
+
MemoryUB = "MemoryUB"
|
|
52
|
+
ResourceConflictRatio = "ResourceConflictRatio"
|
|
53
|
+
L2Cache = "L2Cache"
|
|
54
|
+
MemoryAccess = "MemoryAccess"
|
|
55
|
+
AiCoreNone = "None"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class OverlapAnalysisTidName(Enum):
|
|
59
|
+
"""The overlap analysis tidName."""
|
|
60
|
+
COMPUTING = "Computing"
|
|
61
|
+
COMMUNICATION = "Communication"
|
|
62
|
+
COMMUNICATION_NOT_OVERLAP = "Communication(Not Overlapped)"
|
|
63
|
+
FREE = "Free"
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class OpSummaryHeaders(Enum):
|
|
67
|
+
"""The op summary headers."""
|
|
68
|
+
STEP_ID = "Step ID"
|
|
69
|
+
DEVICE_ID = "Device_id"
|
|
70
|
+
MODEL_NAME = "Model Name"
|
|
71
|
+
MODEL_ID = "Model ID"
|
|
72
|
+
TASK_ID = "Task ID"
|
|
73
|
+
STREAM_ID = "Stream ID"
|
|
74
|
+
OP_NAME = "Op Name"
|
|
75
|
+
OP_TYPE = "OP Type"
|
|
76
|
+
TASK_TYPE = "Task Type"
|
|
77
|
+
TASK_START_TIME = "Task Start Time(us)"
|
|
78
|
+
TASK_DURATION = "Task Duration(us)"
|
|
79
|
+
TASK_WAIT_TIME = "Task Wait Time(us)"
|
|
80
|
+
BLOCK_DIM = "Block Dim"
|
|
81
|
+
MIX_BLOCK_DIM = "Mix Block Dim"
|
|
82
|
+
HF32_ELIGIBLE = "HF32 Eligible"
|
|
83
|
+
INPUT_SHAPES = "Input Shapes"
|
|
84
|
+
INPUT_DATA_TYPES = "Input Data Types"
|
|
85
|
+
INPUT_FORMATS = "Input Formats"
|
|
86
|
+
OUTPUT_SHAPES = "Output Shapes"
|
|
87
|
+
OUTPUT_DATA_TYPES = "Output Data Types"
|
|
88
|
+
OUTPUT_FORMATS = "Output Formats"
|
|
89
|
+
CONTEXT_ID = "Context ID"
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class EventConstant:
|
|
93
|
+
"""Timeline event constant values"""
|
|
94
|
+
|
|
95
|
+
START_FLOW = "s"
|
|
96
|
+
END_FLOW = "f"
|
|
97
|
+
META_EVENT = 'M'
|
|
98
|
+
COMPLETE_EVENT = 'X'
|
|
99
|
+
INSTANT_EVENT = 'i'
|
|
100
|
+
COUNTER_EVENT = 'C'
|
|
101
|
+
|
|
102
|
+
PROCESS_NAME = "process_name"
|
|
103
|
+
PROCESS_LABEL = "process_labels"
|
|
104
|
+
PROCESS_SORT = "process_sort_index"
|
|
105
|
+
THREAD_NAME = "thread_name"
|
|
106
|
+
THREAD_SORT = "thread_sort_index"
|
|
107
|
+
|
|
108
|
+
CPU_LABEL = "CPU"
|
|
109
|
+
ASCEND_LABEL = "NPU"
|
|
110
|
+
|
|
111
|
+
HOST_TO_DEVICE_FLOW_CAT = "HostToDevice"
|
|
112
|
+
MINDSPORE_NPU_FLOW_CAT = "async_npu"
|
|
113
|
+
MINDSPORE_SELF_FLOW_CAT = "async_mindspore"
|
|
114
|
+
MSTX_FLOW_CAT = "MsTx"
|
|
115
|
+
MINDSPORE_SELF_FLOW_NAME = "mindspore_to_self"
|
|
116
|
+
MINDSPORE_NPU_FLOW_NAME = "mindspore_to_npu"
|
|
117
|
+
MSTX_FLOW_NAME = "mindspore_to_mstx"
|
|
118
|
+
|
|
119
|
+
MINDSPORE_PID = 1
|
|
120
|
+
CPU_OP_PID = 2
|
|
121
|
+
SCOPE_LAYER_PID = 3
|
|
122
|
+
|
|
123
|
+
MINDSPORE_SORT_IDX = 1
|
|
124
|
+
CPU_OP_SORT_IDX = 2
|
|
125
|
+
SCOPE_LAYER_SORT_IDX = 12
|
|
126
|
+
|
|
127
|
+
# field name
|
|
128
|
+
SEQUENCE_NUMBER = "Sequence number"
|
|
129
|
+
FORWARD_THREAD_ID = "Fwd thread id"
|
|
130
|
+
OP_NAME = "op_name"
|
|
131
|
+
INPUT_SHAPES = "Input Dims"
|
|
132
|
+
INPUT_DTYPES = "Input type"
|
|
133
|
+
CALL_STACK = "Call stack"
|
|
134
|
+
MODULE_HIERARCHY = "Module Hierarchy"
|
|
135
|
+
FLOPS = "flops"
|
|
136
|
+
NAME = "name"
|
|
137
|
+
CUSTOM_INFO = "custom_info"
|
|
138
|
+
TOP_SCOPE_NAMES = ('Default', 'Gradients', 'recompute_Default')
|
|
139
|
+
KERNEL_LAUNCH_KEYWORDS = ("KernelLaunch", "LaunchTask")
|
|
140
|
+
MSTX_KEYWORD = "Mstx"
|
|
141
|
+
STACK_EVENT_CAT = "python_function"
|
|
142
|
+
|
|
143
|
+
FLOW_OP = "flow"
|
|
144
|
+
INVALID_FLOW_ID = 18446744073709551615
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class TimeConstant:
|
|
148
|
+
"""Time constant values"""
|
|
149
|
+
|
|
150
|
+
NS_TO_US = 0.001
|
|
151
|
+
MS_TO_US = 1000
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
class FileConstant:
|
|
155
|
+
"""File constant values"""
|
|
156
|
+
|
|
157
|
+
# tlv constant struct
|
|
158
|
+
FIX_SIZE_DATA = "fix_size_data"
|
|
159
|
+
CANN_FILE_REGEX = r"^PROF_\d+_\d+_[0-9a-zA-Z]+"
|
|
160
|
+
FRAMEWORK_DIR = "FRAMEWORK"
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class ProfilerStepNameConstant:
|
|
164
|
+
"""Profiler step name."""
|
|
165
|
+
|
|
166
|
+
PROFILER_STEP = "ProfilerStep#"
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class TimelineLayerName(Enum):
|
|
170
|
+
"""Timeline layer types."""
|
|
171
|
+
MINDSPORE = "MindSpore"
|
|
172
|
+
CPU_OP = "CPU OP"
|
|
173
|
+
MSTX = ["python", "python3"]
|
|
174
|
+
CANN = "CANN"
|
|
175
|
+
SCOPER_LAYER = "Scope Layer"
|
|
176
|
+
ASCEND_HARDWARE = "Ascend Hardware"
|
|
177
|
+
HCCL = "HCCL"
|
|
178
|
+
AI_CORE_FREQ = "AI Core Freq"
|
|
179
|
+
HBM = "HBM"
|
|
180
|
+
PCLE = "PCle"
|
|
181
|
+
HCCS = "HCCS"
|
|
182
|
+
LLC = "LLC"
|
|
183
|
+
NPU_MEM = "NPU MEM"
|
|
184
|
+
STARS_SOC_INFO = "Stars Soc Info"
|
|
185
|
+
STARS_Chip_Trans = "Stars Chip Trans"
|
|
186
|
+
ACC_PMU = "Acc PMU"
|
|
187
|
+
SIO = "SIO"
|
|
188
|
+
QOS = "QoS"
|
|
189
|
+
OVERLAP_ANALYSIS = "Overlap Analysis"
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
class AnalysisMode(Enum):
|
|
193
|
+
"""analysis mode"""
|
|
194
|
+
SYNC_MODE = "sync"
|
|
195
|
+
ASYNC_MODE = "async"
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class JitLevel:
|
|
199
|
+
"""jit level"""
|
|
200
|
+
KBK_LEVEL = "O0"
|
|
201
|
+
KBK_DVM_LEVEL = "O1"
|
|
202
|
+
GRAPH_LEVEL = "O2"
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class ExportType(Enum):
|
|
206
|
+
Db = "db"
|
|
207
|
+
Text = "text"
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class CannLibName:
|
|
211
|
+
"""CANN lib name"""
|
|
212
|
+
CANN_MSPTI = "libmspti.so"
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Copyright 2023 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
|
+
"""Profiler file manager"""
|
|
16
|
+
import csv
|
|
17
|
+
import json
|
|
18
|
+
import os
|
|
19
|
+
import shutil
|
|
20
|
+
from typing import List, Dict, Optional, Tuple
|
|
21
|
+
import numpy as np
|
|
22
|
+
|
|
23
|
+
from mindspore import log as logger
|
|
24
|
+
from mindspore.profiler.common.path_manager import PathManager
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class FileManager:
|
|
28
|
+
"""Profiler file manager"""
|
|
29
|
+
|
|
30
|
+
MAX_PATH_LENGTH = 4096
|
|
31
|
+
MAX_FILE_NAME_LENGTH = 255
|
|
32
|
+
DATA_FILE_AUTHORITY = 0o640
|
|
33
|
+
DATA_DIR_AUTHORITY = 0o700
|
|
34
|
+
FLAGS = os.O_WRONLY | os.O_CREAT | os.O_TRUNC
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def read_file_content(cls, path: str, mode: str = "r"):
|
|
38
|
+
"""Read the content in the input file."""
|
|
39
|
+
PathManager.check_input_file_path(path)
|
|
40
|
+
PathManager.check_directory_path_readable(path)
|
|
41
|
+
try:
|
|
42
|
+
with open(path, mode) as file:
|
|
43
|
+
return file.read()
|
|
44
|
+
except Exception as err:
|
|
45
|
+
raise RuntimeError(f"Failed read file: {path}, error: {err}") from err
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def read_json_file(cls, file_path: str) -> Optional[Dict]:
|
|
49
|
+
"""Read json file and return dict data"""
|
|
50
|
+
PathManager.check_input_file_path(file_path)
|
|
51
|
+
PathManager.check_directory_path_readable(file_path)
|
|
52
|
+
try:
|
|
53
|
+
with open(file_path, "r", encoding="utf-8") as json_file:
|
|
54
|
+
data = json.load(json_file)
|
|
55
|
+
return data
|
|
56
|
+
except Exception as err:
|
|
57
|
+
raise RuntimeError(
|
|
58
|
+
f"Failed read json file: {file_path}, error: {err}"
|
|
59
|
+
) from err
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def create_json_file(
|
|
63
|
+
cls, output_file_path: str, json_data: List, indent: int = None
|
|
64
|
+
) -> None:
|
|
65
|
+
"""Create json file with least authority"""
|
|
66
|
+
PathManager.check_directory_path_writeable(os.path.dirname(output_file_path))
|
|
67
|
+
if not json_data:
|
|
68
|
+
logger.warning("Json data is empty, file path: %s", output_file_path)
|
|
69
|
+
return
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
with os.fdopen(
|
|
73
|
+
os.open(output_file_path, cls.FLAGS, cls.DATA_FILE_AUTHORITY), "w"
|
|
74
|
+
) as fp:
|
|
75
|
+
data = json.dumps(json_data, indent=indent, ensure_ascii=False)
|
|
76
|
+
fp.write(data)
|
|
77
|
+
except Exception as err:
|
|
78
|
+
raise RuntimeError(
|
|
79
|
+
f"Failed create json file: {output_file_path}, error: {err}"
|
|
80
|
+
) from err
|
|
81
|
+
|
|
82
|
+
@classmethod
|
|
83
|
+
def read_csv_file(cls, file_path: str) -> list:
|
|
84
|
+
"""Read csv file and return list"""
|
|
85
|
+
PathManager.check_input_file_path(file_path)
|
|
86
|
+
PathManager.check_directory_path_readable(file_path)
|
|
87
|
+
result_data = []
|
|
88
|
+
try:
|
|
89
|
+
with open(file_path, newline="", encoding="utf-8") as csv_file:
|
|
90
|
+
reader = csv.reader(csv_file)
|
|
91
|
+
for row in reader:
|
|
92
|
+
result_data.append(row)
|
|
93
|
+
return result_data
|
|
94
|
+
except Exception as err:
|
|
95
|
+
raise RuntimeError(f"Failed read csv file: {file_path}, error: {err}") from err
|
|
96
|
+
|
|
97
|
+
@classmethod
|
|
98
|
+
def read_csv_file_as_numpy(
|
|
99
|
+
cls, file_path: str, extern_headers: list = None
|
|
100
|
+
) -> Tuple[np.ndarray, List[str]]:
|
|
101
|
+
"""Read csv file and return numpy array"""
|
|
102
|
+
PathManager.check_input_file_path(file_path)
|
|
103
|
+
PathManager.check_directory_path_readable(file_path)
|
|
104
|
+
try:
|
|
105
|
+
with open(file_path, newline="", encoding="utf-8") as csv_file:
|
|
106
|
+
reader = csv.DictReader(csv_file, delimiter=",", quotechar='"')
|
|
107
|
+
headers = reader.fieldnames
|
|
108
|
+
if extern_headers:
|
|
109
|
+
headers = extern_headers + headers
|
|
110
|
+
|
|
111
|
+
csv_data = [
|
|
112
|
+
tuple([row.get(field) for field in headers]) for row in reader
|
|
113
|
+
]
|
|
114
|
+
csv_data_np = np.array(
|
|
115
|
+
csv_data, dtype=np.dtype([(field, object) for field in headers])
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
return csv_data_np, headers
|
|
119
|
+
except Exception as err:
|
|
120
|
+
raise RuntimeError(f"Failed read csv file: {file_path}, error: {err}") from err
|
|
121
|
+
|
|
122
|
+
@classmethod
|
|
123
|
+
def create_csv_file(cls, file_path: str, data: list, headers: list = None) -> None:
|
|
124
|
+
"""Create csv file and write the data"""
|
|
125
|
+
if not data:
|
|
126
|
+
logger.error(
|
|
127
|
+
"Create csv file failed, data is empty, file path: %s", file_path
|
|
128
|
+
)
|
|
129
|
+
return
|
|
130
|
+
PathManager.check_directory_path_writeable(os.path.dirname(file_path))
|
|
131
|
+
try:
|
|
132
|
+
with os.fdopen(
|
|
133
|
+
os.open(file_path, cls.FLAGS, cls.DATA_FILE_AUTHORITY), "w"
|
|
134
|
+
) as fp:
|
|
135
|
+
writer = csv.writer(fp)
|
|
136
|
+
if headers:
|
|
137
|
+
writer.writerow(headers)
|
|
138
|
+
writer.writerows(data)
|
|
139
|
+
except Exception as err:
|
|
140
|
+
raise RuntimeError(
|
|
141
|
+
f"Failed create csv file: {file_path}, error: {err}"
|
|
142
|
+
) from err
|
|
143
|
+
|
|
144
|
+
@classmethod
|
|
145
|
+
def combine_csv_file(
|
|
146
|
+
cls, source_file_list: list, target_file_path: str, header_map: dict = None
|
|
147
|
+
):
|
|
148
|
+
"""Merge multiple CSV files into one"""
|
|
149
|
+
headers, all_data = [], []
|
|
150
|
+
for source_file in source_file_list:
|
|
151
|
+
data = cls.read_csv_file(source_file)
|
|
152
|
+
if len(data) > 1:
|
|
153
|
+
headers = data[0]
|
|
154
|
+
all_data.extend(data[1:])
|
|
155
|
+
if all_data:
|
|
156
|
+
if isinstance(header_map, dict):
|
|
157
|
+
headers = [header_map.get(header, header) for header in headers]
|
|
158
|
+
FileManager.create_csv_file(target_file_path, all_data, headers)
|
|
159
|
+
|
|
160
|
+
@classmethod
|
|
161
|
+
def read_txt_file(cls, file_path: str) -> list:
|
|
162
|
+
"""Read txt file and return list"""
|
|
163
|
+
PathManager.check_input_file_path(file_path)
|
|
164
|
+
PathManager.check_directory_path_readable(file_path)
|
|
165
|
+
result_data = []
|
|
166
|
+
try:
|
|
167
|
+
with open(file_path, "r", encoding="utf-8") as file:
|
|
168
|
+
for line in file.readlines():
|
|
169
|
+
result_data.append(line.strip())
|
|
170
|
+
except Exception as err:
|
|
171
|
+
raise RuntimeError(f"Failed read txt file: {file_path}, error: {err}") from err
|
|
172
|
+
return result_data
|
|
173
|
+
|
|
174
|
+
@classmethod
|
|
175
|
+
def copy_file(cls, src_path: str, dst_path: str):
|
|
176
|
+
"""
|
|
177
|
+
Function Description:
|
|
178
|
+
copy file safety
|
|
179
|
+
Parameter:
|
|
180
|
+
src_path: file source path
|
|
181
|
+
dst_path: file destination path
|
|
182
|
+
Exception Description:
|
|
183
|
+
when src_path is link throw exception
|
|
184
|
+
"""
|
|
185
|
+
if not os.path.exists(src_path):
|
|
186
|
+
logger.warning("The source file does not exist: %s", src_path)
|
|
187
|
+
return
|
|
188
|
+
|
|
189
|
+
PathManager.check_input_file_path(src_path)
|
|
190
|
+
src_dir = os.path.dirname(src_path)
|
|
191
|
+
PathManager.check_directory_path_readable(src_dir)
|
|
192
|
+
dst_dir = os.path.dirname(dst_path)
|
|
193
|
+
PathManager.check_directory_path_writeable(dst_dir)
|
|
194
|
+
|
|
195
|
+
try:
|
|
196
|
+
shutil.copy2(src_path, dst_path)
|
|
197
|
+
except (shutil.Error, IOError) as err:
|
|
198
|
+
msg = f"Failed to copy from '{src_path}' to '{dst_path}': {err}"
|
|
199
|
+
raise RuntimeError(msg) from err
|
|
200
|
+
|
|
201
|
+
@classmethod
|
|
202
|
+
def get_csv_file_list_by_start_name(cls, source_path: str, start_name: str):
|
|
203
|
+
"""Get all the csv files that match the name"""
|
|
204
|
+
file_list = []
|
|
205
|
+
for file_name in os.listdir(source_path):
|
|
206
|
+
if file_name.startswith(start_name) and file_name.endswith(".csv"):
|
|
207
|
+
file_list.append(os.path.join(source_path, file_name))
|
|
208
|
+
return file_list
|