diff --git a/torch_npu/profiler/analysis/prof_parse/_cann_file_parser.py b/torch_npu/profiler/analysis/prof_parse/_cann_file_parser.py index 83827d6c18b92eb1c614a8618bdba96055908288..b8cbf5ed7da36fe6192fe023b6d5a9517967d1ac 100644 --- a/torch_npu/profiler/analysis/prof_parse/_cann_file_parser.py +++ b/torch_npu/profiler/analysis/prof_parse/_cann_file_parser.py @@ -1,6 +1,8 @@ import ast import json import os +import ijson +from io import BytesIO import re from enum import Enum from json import JSONDecodeError @@ -96,14 +98,16 @@ class CANNFileParser: if not data: return [] try: - data = json.loads(data) - except JSONDecodeError as e: + result = [] + byte_data = data.encode('utf-8') + # 配置 ijson 使用 float 而不是 Decimal + items = ijson.items(BytesIO(byte_data), 'item', use_float=True) + for item in items: + if isinstance(item, dict): + result.append(item) + return result + except Exception as e: raise RuntimeError("Invalid CANN trace data." + prof_error(ErrCode.VALUE)) from e - if not isinstance(data, list): - return [] - if data and not isinstance(data[0], dict): - return [] - return data @classmethod def _json_dict_load(cls, data: str) -> dict: