From 6a65e027402414532c4bb14a6809cb10ac9fa2f4 Mon Sep 17 00:00:00 2001 From: TinaMengtingZhang Date: Thu, 25 Nov 2021 17:26:14 -0500 Subject: [PATCH] Fix offline dbg shows null for fusion nodes using async dump data --- mindspore/offline_debug/convert_async.py | 87 +----------------------- 1 file changed, 2 insertions(+), 85 deletions(-) diff --git a/mindspore/offline_debug/convert_async.py b/mindspore/offline_debug/convert_async.py index f8b15673fea..5d797d5a238 100644 --- a/mindspore/offline_debug/convert_async.py +++ b/mindspore/offline_debug/convert_async.py @@ -17,15 +17,11 @@ Module to provide conversion capabalities from .timestamp async dump files to .n It's an internal module for debugger backend but not exposed to users. """ import os -import glob -import stat import sys from pathlib import Path from importlib import import_module from collections import namedtuple -import numpy as np - class ConvertToolLoader: """ @@ -119,7 +115,7 @@ def parse_args(file_list, output_path): args_dict = dict() args_dict['dump_version'] = '2.0' args_dict['format'] = 'NCHW' - args_dict['output_file_type'] = 'npy' + args_dict['output_file_type'] = 'msnpy' args_dict['dump_path'] = output_path args_dict['output_path'] = output_path args_dict['file_list'] = file_list @@ -170,50 +166,13 @@ class AsyncDumpConverter: convert.check_arguments_valid() # 2. convert format for dump data ret_code = self.handle_multi_process(convert, self.files_to_convert) - self._rename_generated_npy_files() if ret_code != self.convert_tool.compare_none_error: - if os.path.exists(self.failed_file_path): - self.convert_failed_tensors() + self.convert_tool.log.print_info_log('An error has occurred while converting format.') finally: # clean up sys.path no matter conversion is successful or not to avoid pollution self.convert_tool.reset_system_path() self.convert_tool.log.print_info_log('Finish to convert async dump files.') - def convert_failed_tensors(self): - """ - Convert the failed tensor recorded in the failed txt file. - """ - self.convert_tool.log.print_info_log( - 'Start to convert failed tensors recorded in ' + self.failed_file_path + '.') - with open(self.failed_file_path) as failed_lines: - for failed_line in failed_lines: - try: - failed_line_list = failed_line.rstrip().split(',') - self.convert_one_failed_tensor(failed_line_list) - except (ValueError, OSError, AttributeError, self.convert_tool.compare_exception) as err: - self.convert_tool.log.print_error_log( - 'Failed to convert ' + failed_line + ' to Host format: ' + str(err)) - - def convert_one_failed_tensor(self, failed_tensor): - """ - Convert failed operator one by one. - """ - if len(failed_tensor) <= 1: - raise ValueError( - "Invalid tensor info in convert_failed_file_list.txt") - file_path = failed_tensor[0] - type_index = failed_tensor[1:] - op_data = self.convert_tool.utils.parse_dump_file( - file_path, self.args.dump_version) - for type_index_item in type_index: - tensor_type, index = type_index_item.split(':') - index = int(index) - tensor = getattr(op_data, tensor_type)[index] - dump_data_array = self.convert_tool.utils.deserialize_dump_data_to_array(tensor) - array = dump_data_array.reshape(tensor.shape.dim) - out_path = self._generate_path(file_path, tensor_type, index, tensor.format) - self._save_tensor_to_npy_file(out_path, array) - def handle_multi_process(self, convert_obj, files): """ Convert async format files to npy in a multithreaded manner. @@ -281,45 +240,3 @@ class AsyncDumpConverter: if ret_bf != self.convert_tool.compare_none_error: return_code = ret_bf return return_code - - @staticmethod - def _save_tensor_to_npy_file(out_path, dump_data_array): - """ - Save tensor file into npy format. - """ - np.save(out_path, dump_data_array) - os.chmod(out_path, stat.S_IRUSR) - - def _generate_path(self, file_path, tensor_type, idx, tensor_format): - """ - Generate path and filename to the target npy files - """ - file_name = os.path.basename(file_path) - name_splits = file_name.split('.') - name_splits[1] = name_splits[1].split('_')[-1] - file_name_no_scope = '.'.join(name_splits) - out_file_name = "%s.%s.%d.%s.npy" % ( - file_name_no_scope, - tensor_type, - idx, - self.convert_tool.common.get_format_string(tensor_format) - ) - return os.path.join(self.output_path, out_file_name) - - def _rename_generated_npy_files(self): - """ - In order to follow dump naming convention, rename npy files generated by CANN conversion tool. - """ - target_file_list = [] - for in_file in self.files_to_convert: - target_file_list.extend(glob.glob(in_file + "*.npy")) - for target_file in target_file_list: - old_filename = os.path.basename(target_file) - name_splits = old_filename.split('.') - name_splits[1] = name_splits[1].split('_')[-1] - name_splits[-2] = self.args.format - new_file_name = '.'.join(name_splits) - out_path = os.path.join(self.output_path, new_file_name) - os.rename(target_file, out_path) - os.chmod(out_path, stat.S_IRUSR) - self.convert_tool.log.print_info_log("Rename file " + target_file + " to " + out_path)