From 028557184d508989603e103df899f380ed6340de Mon Sep 17 00:00:00 2001 From: yangxinxian <947098055@qq.com> Date: Thu, 17 Oct 2024 16:28:53 +0800 Subject: [PATCH 1/6] Update test_ms_compare.py --- .../mindspore_ut/compare/test_ms_compare.py | 106 +++++++++++++++++- 1 file changed, 104 insertions(+), 2 deletions(-) diff --git a/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py b/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py index 749571e4d..0beb17cce 100644 --- a/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py +++ b/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py @@ -1,9 +1,15 @@ # coding=utf-8 import unittest -import tempfile import json +import os +import re +import copy +import sys +import tempfile +from unittest.mock import patch, MagicMock -from msprobe.mindspore.compare.ms_compare import MSComparator +from msprobe.mindspore.compare.ms_compare import MSComparator, ms_compare +from msprobe.mindspore.compare.ms_compare import CompareException, FileCheckException, ms_compare from msprobe.mindspore.compare.ms_compare import check_cross_framework npu_dict = {'op_name': ['Functional.conv2d.0.forward.input.0', 'Functional.conv2d.0.forward.input.1', @@ -245,3 +251,99 @@ class TestUtilsMethods(unittest.TestCase): return check_cross_framework(temp_file.name) self.assertFalse(check_data(ms_data)) self.assertTrue(check_data(pt_data)) + +# Sample data to be used in JSON files +Sample_npu_dict = { + 'task': 'statistics', # 添加必要的 'task' 键 + 'data': {}, # 添加必要的 'data' 键 + 'op_name': ['Functional.conv2d.0.forward.input.0', + 'Functional.conv2d.0.forward.input.1', + 'Functional.conv2d.0.forward.input.2', + 'Functional.conv2d.0.forward.output'], + 'input_struct': [('Float32', [1, 1, 28, 28]), ('Float32', [16, 1, 5, 5]), + ('Float32', [16])], + 'output_struct': [('Float32', [1, 16, 28, 28])], + 'summary': [[3.029174327850342, -2.926689624786377, -0.06619918346405029], + [0.19919930398464203, -0.19974489510059357, 0.006269412115216255], + [0.19734230637550354, -0.18177609145641327, 0.007903944700956345], + [2.1166646480560303, -2.190781354904175, -0.003579073818400502]], 'stack_info': [], + 'stack_info': [] +} + +bench_dict = { + 'task': 'statistics', # 添加必要的 'task' 键 + 'data': {}, # 添加必要的 'data' 键 + 'op_name': ['Functional.conv2d.0.forward.input.0', 'Functional.conv2d.0.forward.input.1', + 'Functional.conv2d.0.forward.input.2', 'Functional.conv2d.0.forward.output'], + 'input_struct': [('Float32', [1, 1, 28, 28]), ('Float32', [16, 1, 5, 5]), + ('Float32', [16])], + 'output_struct': [('Float32', [1, 16, 28, 28])], + 'summary': [[3.029174327850342, -2.926689624786377, -0.06619918346405029], + [0.19919930398464203, -0.19974489510059357, 0.006269412115216255], + [0.19734230637550354, -0.18177609145641327, 0.007903944700956345], + [2.1166646480560303, -2.190781354904175, -0.003579073818400502]], 'stack_info': [], + 'stack_info': [] +} + +class TestMSCompare(unittest.TestCase): + def setUp(self): + self.input_param = { + 'npu_json_path': 'npu_json_path.json', + 'bench_json_path': 'bench_json_path.json', + 'is_print_compare_log': True + } + self.output_path = 'test_output' + self.kwargs = { + 'stack_mode': False, + 'auto_analyze': True, + 'fuzzy_match': False, + 'cell_mapping': None, + 'api_mapping': None, + 'data_mapping': None, + 'layer_mapping': None + } + if not os.path.exists(self.output_path): + os.makedirs(self.output_path) + + # Create the temporary JSON files with some data + with open(self.input_param['npu_json_path'], 'w') as f: + json.dump(Sample_npu_dict, f) + with open(self.input_param['bench_json_path'], 'w') as f: + json.dump(bench_dict, f) + + + def tearDown(self): + if os.path.exists(self.output_path): + for root, dirs, files in os.walk(self.output_path, topdown=False): + for file in files: + os.remove(os.path.join(root, file)) + for dir in dirs: + os.rmdir(os.path.join(root, dir)) + os.rmdir(self.output_path) + + # Remove temporary JSON files + if os.path.exists(self.input_param['npu_json_path']): + os.remove(self.input_param['npu_json_path']) + if os.path.exists(self.input_param['bench_json_path']): + os.remove(self.input_param['bench_json_path']) + + def test_compare_process_custom(self): + summary_compare = True + md5_compare = False + data_path = tempfile.mkdtemp(prefix='dump_data', dir='/tmp') + npu_dump_path = os.path.join(data_path, 'npu_dump.json') + bench_dump_path = os.path.join(data_path, 'bench_dump.json') + npu_stack_path = os.path.join(data_path, 'npu_stack.json') + + with open(npu_dump_path, 'w') as n_d_f, open(bench_dump_path, 'w') as b_d_f, open(npu_stack_path, 'w') as n_s_f: + json.dump(Sample_npu_dict, n_d_f) + json.dump(bench_dict, b_d_f) + json.dump({}, n_s_f) + + ms_comparator = MSComparator() + result_df = ms_comparator.compare_process_custom((npu_dump_path, bench_dump_path, npu_stack_path), + False, summary_compare, md5_compare) + self.assertListEqual(result_df.values.tolist(), []) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file -- Gitee From dcf3b2bc09929f8adde5278e1b293c0ae0feaa3f Mon Sep 17 00:00:00 2001 From: yangxinxian <947098055@qq.com> Date: Thu, 17 Oct 2024 19:34:37 +0800 Subject: [PATCH 2/6] Update kernel_kbyk_dump.py --- .../mindspore/dump/kernel_kbyk_dump.py | 301 ++++++++++++++---- 1 file changed, 237 insertions(+), 64 deletions(-) diff --git a/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py b/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py index 3f8826cf7..120419da6 100644 --- a/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py +++ b/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py @@ -1,7 +1,8 @@ -# Copyright (c) 2024-2024, Huawei Technologies Co., Ltd. -# All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +# Copyright (C) 2024-2024. Huawei Technologies Co., Ltd. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # @@ -12,68 +13,240 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -import json +""" import os -from msprobe.core.common.const import Const -from msprobe.core.common.file_utils import FileOpen, create_directory -from msprobe.mindspore.common.log import logger +from unittest import TestCase +from unittest.mock import patch + +from msprobe.core.common_config import CommonConfig, BaseConfig from msprobe.mindspore.debugger.debugger_config import DebuggerConfig +from msprobe.mindspore.dump.kernel_kbyk_dump import KernelKbykDump + + +class TestKernelKbykDump(TestCase): + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle(self, _): + json_config = { + "task": "statistics", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "level": "L2" + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "level": "L2" + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_input(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "data_mode": [ + "input" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_output(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_output_rank_0(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [0], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_output_rank_0(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [0], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_list_output(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "list": ['add'], + "rank": [0], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_list_input(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "list": ['add'], + "rank": [0], + "step": [0, 2], + "data_mode": [ + "input" + ], + "level": "L2" + + } + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") -class KernelKbykDump: - COMMON_SETTINGS = "common_dump_settings" - E2E_SETTINGS = "e2e_dump_settings" - - def __init__(self, config: DebuggerConfig): - self.dump_json = dict() - common_set = dict() - e2e_set = dict() - - common_set = dict() - common_set["dump_mode"] = 0 - common_set["path"] = "" - common_set["net_name"] = "Net" - common_set["iteration"] = "all" - common_set["saved_data"] = "statistic" - common_set["input_output"] = 0 - common_set["kernels"] = [] - common_set["support_device"] = [0, 1, 2, 3, 4, 5, 6, 7] - e2e_set = dict() - e2e_set["enable"] = True - e2e_set["trans_flag"] = True - - if config.list: - common_set["dump_mode"] = 1 - common_set["kernels"] = config.list - common_set["path"] = config.dump_path - if config.step: - step_str = "" - for s in config.step: - step_str += (str(s) + '|') - common_set["iteration"] = step_str[:-1] - if config.rank: - common_set["support_device"] = config.rank - if config.task == Const.TENSOR: - common_set["saved_data"] = Const.TENSOR - if len(config.data_mode) == 1: - if config.data_mode[0] == Const.INPUT: - common_set["input_output"] = 1 - if config.data_mode[0] == Const.OUTPUT: - common_set["input_output"] = 2 - - self.dump_json[KernelKbykDump.COMMON_SETTINGS] = common_set - self.dump_json[KernelKbykDump.E2E_SETTINGS] = e2e_set - - def handle(self): - json_path = self.dump_json[KernelKbykDump.COMMON_SETTINGS]["path"] - create_directory(json_path) - json_path = os.path.join(json_path, "kernel_kbyk_dump.json") - with FileOpen(json_path, 'w') as f: - json.dump(self.dump_json, f) - logger.info(json_path + " has been created.") - - os.environ["MINDSPORE_DUMP_CONFIG"] = json_path - if "MS_ACL_DUMP_CFG_PATH" in os.environ: - del os.environ["MS_ACL_DUMP_CFG_PATH"] + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) \ No newline at end of file -- Gitee From 5ca31fa30565ef189bb03232b0ae558e23d37dd3 Mon Sep 17 00:00:00 2001 From: yangxinxian <947098055@qq.com> Date: Fri, 18 Oct 2024 14:18:14 +0800 Subject: [PATCH 3/6] 1 --- .../mindspore/dump/kernel_kbyk_dump.py | 310 ++++-------------- .../mindspore_ut/test_kernel_kbyk_dump.py | 201 ++++++++++++ 2 files changed, 262 insertions(+), 249 deletions(-) diff --git a/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py b/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py index 120419da6..9c0a979b6 100644 --- a/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py +++ b/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py @@ -1,252 +1,64 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -# Copyright (C) 2024-2024. Huawei Technologies Co., Ltd. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -""" import os +import json -from unittest import TestCase -from unittest.mock import patch - -from msprobe.core.common_config import CommonConfig, BaseConfig from msprobe.mindspore.debugger.debugger_config import DebuggerConfig -from msprobe.mindspore.dump.kernel_kbyk_dump import KernelKbykDump - - -class TestKernelKbykDump(TestCase): - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle(self, _): - json_config = { - "task": "statistics", - "dump_path": "/absolute_path", - "rank": [], - "step": [0, 2], - "level": "L2" - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "rank": [], - "step": [0, 2], - "level": "L2" - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor_input(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "rank": [], - "step": [0, 2], - "data_mode": [ - "input" - ], - "level": "L2" - - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor_output(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "rank": [], - "step": [0, 2], - "data_mode": [ - "output" - ], - "level": "L2" - - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor_output_rank_0(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "rank": [0], - "step": [0, 2], - "data_mode": [ - "output" - ], - "level": "L2" - - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor_output_rank_0(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "rank": [0], - "step": [0, 2], - "data_mode": [ - "output" - ], - "level": "L2" - - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor_list_output(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "list": ['add'], - "rank": [0], - "step": [0, 2], - "data_mode": [ - "output" - ], - "level": "L2" - - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) - - @patch("msprobe.mindspore.debugger.debugger_config.create_directory") - def test_handle_tensor_list_input(self, _): - json_config = { - "task": "tensor", - "dump_path": "/absolute_path", - "list": ['add'], - "rank": [0], - "step": [0, 2], - "data_mode": [ - "input" - ], - "level": "L2" - - } - - common_config = CommonConfig(json_config) - task_config = BaseConfig(json_config) - config = DebuggerConfig(common_config, task_config) - dumper = KernelKbykDump(config) - self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") - - os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" - with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ - patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: - dumper.handle() - mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") - self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) \ No newline at end of file +from msprobe.mindspore.common.log import logger +from msprobe.core.common.file_utils import FileOpen, create_directory +from msprobe.core.common.const import Const + + +class KernelKbykDump: + COMMON_SETTINGS = "common_dump_settings" + E2E_SETTINGS = "e2e_dump_settings" + + def __init__(self, config: DebuggerConfig): + self.dump_json = dict() + common_set = dict() + e2e_set = dict() + + common_set = dict() + common_set["dump_mode"] = 0 + common_set["path"] = "" + common_set["net_name"] = "Net" + common_set["iteration"] = "all" + common_set["saved_data"] = "statistic" + common_set["input_output"] = 0 + common_set["kernels"] = [] + common_set["support_device"] = [0, 1, 2, 3, 4, 5, 6, 7] + e2e_set = dict() + e2e_set["enable"] = True + e2e_set["trans_flag"] = True + + if config.list: + common_set["dump_mode"] = 1 + common_set["kernels"] = config.list + common_set["path"] = config.dump_path + if config.step: + step_str = "" + for s in config.step: + step_str += (str(s) + '|') + common_set["iteration"] = step_str[:-1] + if config.rank: + common_set["support_device"] = config.rank + if config.task == Const.TENSOR: + common_set["saved_data"] = Const.TENSOR + if len(config.data_mode) == 1: + if config.data_mode[0] == Const.INPUT: + common_set["input_output"] = 1 + if config.data_mode[0] == Const.OUTPUT: + common_set["input_output"] = 2 + + self.dump_json[KernelKbykDump.COMMON_SETTINGS] = common_set + self.dump_json[KernelKbykDump.E2E_SETTINGS] = e2e_set + + def handle(self): + json_path = self.dump_json[KernelKbykDump.COMMON_SETTINGS]["path"] + create_directory(json_path) + json_path = os.path.join(json_path, "kernel_kbyk_dump.json") + with FileOpen(json_path, 'w') as f: + json.dump(self.dump_json, f) + logger.info(json_path + " has been created.") + + os.environ["MINDSPORE_DUMP_CONFIG"] = json_path + if "MS_ACL_DUMP_CFG_PATH" in os.environ: + del os.environ["MS_ACL_DUMP_CFG_PATH"] diff --git a/debug/accuracy_tools/msprobe/test/mindspore_ut/test_kernel_kbyk_dump.py b/debug/accuracy_tools/msprobe/test/mindspore_ut/test_kernel_kbyk_dump.py index b24b7e29c..120419da6 100644 --- a/debug/accuracy_tools/msprobe/test/mindspore_ut/test_kernel_kbyk_dump.py +++ b/debug/accuracy_tools/msprobe/test/mindspore_ut/test_kernel_kbyk_dump.py @@ -49,3 +49,204 @@ class TestKernelKbykDump(TestCase): dumper.handle() mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "level": "L2" + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_input(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "data_mode": [ + "input" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_output(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_output_rank_0(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [0], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_output_rank_0(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "rank": [0], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_list_output(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "list": ['add'], + "rank": [0], + "step": [0, 2], + "data_mode": [ + "output" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) + + @patch("msprobe.mindspore.debugger.debugger_config.create_directory") + def test_handle_tensor_list_input(self, _): + json_config = { + "task": "tensor", + "dump_path": "/absolute_path", + "list": ['add'], + "rank": [0], + "step": [0, 2], + "data_mode": [ + "input" + ], + "level": "L2" + + } + + common_config = CommonConfig(json_config) + task_config = BaseConfig(json_config) + config = DebuggerConfig(common_config, task_config) + dumper = KernelKbykDump(config) + self.assertEqual(dumper.dump_json["common_dump_settings"]["iteration"], "0|2") + + os.environ["MS_ACL_DUMP_CFG_PATH"] = "path" + with patch("msprobe.mindspore.dump.kernel_kbyk_dump.create_directory"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.FileOpen"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.json.dump"), \ + patch("msprobe.mindspore.dump.kernel_kbyk_dump.logger.info") as mock_info: + dumper.handle() + mock_info.assert_called_with("/absolute_path/kernel_kbyk_dump.json has been created.") + self.assertEqual(os.environ.get("MS_ACL_DUMP_CFG_PATH"), None) \ No newline at end of file -- Gitee From 948c0c9506a9a4dae783c8a23175de2524b1e317 Mon Sep 17 00:00:00 2001 From: yangxinxian <947098055@qq.com> Date: Fri, 18 Oct 2024 14:19:14 +0800 Subject: [PATCH 4/6] Update kernel_kbyk_dump.py --- .../mindspore/dump/kernel_kbyk_dump.py | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py b/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py index 9c0a979b6..2c46b0c73 100644 --- a/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py +++ b/debug/accuracy_tools/msprobe/mindspore/dump/kernel_kbyk_dump.py @@ -1,10 +1,24 @@ +# Copyright (c) 2024-2024, Huawei Technologies Co., Ltd. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import os -import json -from msprobe.mindspore.debugger.debugger_config import DebuggerConfig -from msprobe.mindspore.common.log import logger -from msprobe.core.common.file_utils import FileOpen, create_directory from msprobe.core.common.const import Const +from msprobe.core.common.file_utils import create_directory, save_json +from msprobe.mindspore.common.log import logger +from msprobe.mindspore.debugger.debugger_config import DebuggerConfig class KernelKbykDump: @@ -55,8 +69,7 @@ class KernelKbykDump: json_path = self.dump_json[KernelKbykDump.COMMON_SETTINGS]["path"] create_directory(json_path) json_path = os.path.join(json_path, "kernel_kbyk_dump.json") - with FileOpen(json_path, 'w') as f: - json.dump(self.dump_json, f) + save_json(json_path, self.dump_json, indent=4) logger.info(json_path + " has been created.") os.environ["MINDSPORE_DUMP_CONFIG"] = json_path -- Gitee From 8ee0ce60f20a7bee4dca5bd1bc9eba7e35c5363b Mon Sep 17 00:00:00 2001 From: yangxinxian <947098055@qq.com> Date: Fri, 18 Oct 2024 14:30:35 +0800 Subject: [PATCH 5/6] Update test_ms_compare.py --- .../mindspore_ut/compare/test_ms_compare.py | 124 +----------------- 1 file changed, 1 insertion(+), 123 deletions(-) diff --git a/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py b/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py index 0beb17cce..77aad952e 100644 --- a/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py +++ b/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py @@ -1,16 +1,6 @@ # coding=utf-8 import unittest -import json -import os -import re -import copy -import sys -import tempfile -from unittest.mock import patch, MagicMock - -from msprobe.mindspore.compare.ms_compare import MSComparator, ms_compare -from msprobe.mindspore.compare.ms_compare import CompareException, FileCheckException, ms_compare -from msprobe.mindspore.compare.ms_compare import check_cross_framework +from msprobe.mindspore.compare.ms_compare import MSComparator npu_dict = {'op_name': ['Functional.conv2d.0.forward.input.0', 'Functional.conv2d.0.forward.input.1', 'Functional.conv2d.0.forward.input.2', 'Functional.conv2d.0.forward.output'], @@ -235,115 +225,3 @@ class TestUtilsMethods(unittest.TestCase): result_df = ms_comparator.compare_process_custom((npu_dump_path, bench_dump_path, npu_stack_path), False, summary_compare, md5_compare) self.assertListEqual(result_df.values.tolist(), []) - - def test_check_cross_framework(self): - ms_data = { - "data_name": "Cell.model.language_model.encoder.layers.5.input_norm.FusedRMSNorm.forward.0.input.0.npy", - } - pt_data = { - "data_name": "Module.module.module.language_model.encoder.layers.0.input_norm.RMSNorm.forward.0.input.0.pt", - } - - def check_data(data): - with tempfile.NamedTemporaryFile(mode='w+', suffix='.json', encoding='utf-8', delete=True) as temp_file: - json.dump(data, temp_file, ensure_ascii=False, indent=4) - temp_file.flush() - return check_cross_framework(temp_file.name) - self.assertFalse(check_data(ms_data)) - self.assertTrue(check_data(pt_data)) - -# Sample data to be used in JSON files -Sample_npu_dict = { - 'task': 'statistics', # 添加必要的 'task' 键 - 'data': {}, # 添加必要的 'data' 键 - 'op_name': ['Functional.conv2d.0.forward.input.0', - 'Functional.conv2d.0.forward.input.1', - 'Functional.conv2d.0.forward.input.2', - 'Functional.conv2d.0.forward.output'], - 'input_struct': [('Float32', [1, 1, 28, 28]), ('Float32', [16, 1, 5, 5]), - ('Float32', [16])], - 'output_struct': [('Float32', [1, 16, 28, 28])], - 'summary': [[3.029174327850342, -2.926689624786377, -0.06619918346405029], - [0.19919930398464203, -0.19974489510059357, 0.006269412115216255], - [0.19734230637550354, -0.18177609145641327, 0.007903944700956345], - [2.1166646480560303, -2.190781354904175, -0.003579073818400502]], 'stack_info': [], - 'stack_info': [] -} - -bench_dict = { - 'task': 'statistics', # 添加必要的 'task' 键 - 'data': {}, # 添加必要的 'data' 键 - 'op_name': ['Functional.conv2d.0.forward.input.0', 'Functional.conv2d.0.forward.input.1', - 'Functional.conv2d.0.forward.input.2', 'Functional.conv2d.0.forward.output'], - 'input_struct': [('Float32', [1, 1, 28, 28]), ('Float32', [16, 1, 5, 5]), - ('Float32', [16])], - 'output_struct': [('Float32', [1, 16, 28, 28])], - 'summary': [[3.029174327850342, -2.926689624786377, -0.06619918346405029], - [0.19919930398464203, -0.19974489510059357, 0.006269412115216255], - [0.19734230637550354, -0.18177609145641327, 0.007903944700956345], - [2.1166646480560303, -2.190781354904175, -0.003579073818400502]], 'stack_info': [], - 'stack_info': [] -} - -class TestMSCompare(unittest.TestCase): - def setUp(self): - self.input_param = { - 'npu_json_path': 'npu_json_path.json', - 'bench_json_path': 'bench_json_path.json', - 'is_print_compare_log': True - } - self.output_path = 'test_output' - self.kwargs = { - 'stack_mode': False, - 'auto_analyze': True, - 'fuzzy_match': False, - 'cell_mapping': None, - 'api_mapping': None, - 'data_mapping': None, - 'layer_mapping': None - } - if not os.path.exists(self.output_path): - os.makedirs(self.output_path) - - # Create the temporary JSON files with some data - with open(self.input_param['npu_json_path'], 'w') as f: - json.dump(Sample_npu_dict, f) - with open(self.input_param['bench_json_path'], 'w') as f: - json.dump(bench_dict, f) - - - def tearDown(self): - if os.path.exists(self.output_path): - for root, dirs, files in os.walk(self.output_path, topdown=False): - for file in files: - os.remove(os.path.join(root, file)) - for dir in dirs: - os.rmdir(os.path.join(root, dir)) - os.rmdir(self.output_path) - - # Remove temporary JSON files - if os.path.exists(self.input_param['npu_json_path']): - os.remove(self.input_param['npu_json_path']) - if os.path.exists(self.input_param['bench_json_path']): - os.remove(self.input_param['bench_json_path']) - - def test_compare_process_custom(self): - summary_compare = True - md5_compare = False - data_path = tempfile.mkdtemp(prefix='dump_data', dir='/tmp') - npu_dump_path = os.path.join(data_path, 'npu_dump.json') - bench_dump_path = os.path.join(data_path, 'bench_dump.json') - npu_stack_path = os.path.join(data_path, 'npu_stack.json') - - with open(npu_dump_path, 'w') as n_d_f, open(bench_dump_path, 'w') as b_d_f, open(npu_stack_path, 'w') as n_s_f: - json.dump(Sample_npu_dict, n_d_f) - json.dump(bench_dict, b_d_f) - json.dump({}, n_s_f) - - ms_comparator = MSComparator() - result_df = ms_comparator.compare_process_custom((npu_dump_path, bench_dump_path, npu_stack_path), - False, summary_compare, md5_compare) - self.assertListEqual(result_df.values.tolist(), []) - -if __name__ == '__main__': - unittest.main() \ No newline at end of file -- Gitee From 54eaaa3a87ba834b72c880319ec4586025ca988d Mon Sep 17 00:00:00 2001 From: yangxinxian <947098055@qq.com> Date: Fri, 18 Oct 2024 14:31:02 +0800 Subject: [PATCH 6/6] Update test_ms_compare.py --- .../mindspore_ut/compare/test_ms_compare.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py b/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py index 77aad952e..749571e4d 100644 --- a/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py +++ b/debug/accuracy_tools/msprobe/test/mindspore_ut/compare/test_ms_compare.py @@ -1,6 +1,10 @@ # coding=utf-8 import unittest +import tempfile +import json + from msprobe.mindspore.compare.ms_compare import MSComparator +from msprobe.mindspore.compare.ms_compare import check_cross_framework npu_dict = {'op_name': ['Functional.conv2d.0.forward.input.0', 'Functional.conv2d.0.forward.input.1', 'Functional.conv2d.0.forward.input.2', 'Functional.conv2d.0.forward.output'], @@ -225,3 +229,19 @@ class TestUtilsMethods(unittest.TestCase): result_df = ms_comparator.compare_process_custom((npu_dump_path, bench_dump_path, npu_stack_path), False, summary_compare, md5_compare) self.assertListEqual(result_df.values.tolist(), []) + + def test_check_cross_framework(self): + ms_data = { + "data_name": "Cell.model.language_model.encoder.layers.5.input_norm.FusedRMSNorm.forward.0.input.0.npy", + } + pt_data = { + "data_name": "Module.module.module.language_model.encoder.layers.0.input_norm.RMSNorm.forward.0.input.0.pt", + } + + def check_data(data): + with tempfile.NamedTemporaryFile(mode='w+', suffix='.json', encoding='utf-8', delete=True) as temp_file: + json.dump(data, temp_file, ensure_ascii=False, indent=4) + temp_file.flush() + return check_cross_framework(temp_file.name) + self.assertFalse(check_data(ms_data)) + self.assertTrue(check_data(pt_data)) -- Gitee