diff --git a/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/common/utils.py b/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/common/utils.py index a78eb595f6eeed6ebbf8e2194e31bb6a0be3f375..d8b3413343f899f4aac4480b8d2671b1b5f0e9c9 100644 --- a/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/common/utils.py +++ b/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/common/utils.py @@ -23,6 +23,7 @@ import stat import subprocess import sys import time +import hashlib from datetime import datetime, timezone from functools import wraps from pathlib import Path @@ -715,3 +716,8 @@ def check_inplace_op(prefix): match_op = re.findall(r"Distributed_(.+?)_\d", prefix) op_name = match_op[0] if match_op else None return op_name in Const.INPLACE_LIST + +def get_md5_for_tensor(x): + tensor_bytes = x.cpu().detach().float().numpy().tobytes() + md5_hash = hashlib.md5(tensor_bytes) + return md5_hash.hexdigest() diff --git a/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/dump/dump.py b/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/dump/dump.py index 17fe015ac7341034dcd2915baf98021e0a9ca23b..ace05f1a7057125f595422ee48bed665418f50ef 100644 --- a/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/dump/dump.py +++ b/debug/accuracy_tools/ptdbg_ascend/src/python/ptdbg_ascend/dump/dump.py @@ -33,7 +33,7 @@ else: is_gpu = False from .utils import DumpUtil, check_if_in_api_list, make_dump_data_dir, get_tensor_rank, create_dirs_if_not_exist -from ..common.utils import print_warn_log, Const, print_info_log, modify_dump_path, check_inplace_op, CompareConst +from ..common.utils import print_warn_log, Const, print_info_log, modify_dump_path, check_inplace_op, CompareConst, get_md5_for_tensor from ..dump.utils import check_writable from ..common.file_check_util import FileOpen, change_mode, FileCheckConst, check_path_pattern_vaild, check_path_length @@ -71,7 +71,8 @@ def get_not_float_tensor_info(data): tensor_max = torch._C._VariableFunctionsClass.max(data).cpu().detach().float().numpy().tolist() tensor_min = torch._C._VariableFunctionsClass.min(data).cpu().detach().float().numpy().tolist() tensor_mean = torch._C._VariableFunctionsClass.mean(data.float()).cpu().detach().float().numpy().tolist() - return get_tensor_data_info(data, tensor_max, tensor_min, tensor_mean, CompareConst.NAN) + data_md5 = get_md5_for_tensor(data) + return get_tensor_data_info(data, tensor_max, tensor_min, tensor_mean, CompareConst.NAN, data_md5) def get_scalar_data_info(data): @@ -84,7 +85,8 @@ def get_float_tensor_info(data): tensor_min = torch._C._VariableFunctionsClass.min(data).cpu().detach().float().numpy().tolist() tensor_mean = torch._C._VariableFunctionsClass.mean(data).cpu().detach().float().numpy().tolist() tensor_norm = torch._C._VariableFunctionsClass.norm(data).cpu().detach().float().numpy().tolist() - return get_tensor_data_info(data, tensor_max, tensor_min, tensor_mean, tensor_norm) + data_md5 = get_md5_for_tensor(data) + return get_tensor_data_info(data, tensor_max, tensor_min, tensor_mean, tensor_norm, data_md5) def get_tensor_data_info(data, *tensor_args):