From 20e40ff1a005b706bb8567e439f4fa9fea0470cf Mon Sep 17 00:00:00 2001 From: yu-liang-bin Date: Thu, 11 Sep 2025 16:44:29 +0800 Subject: [PATCH] optimize memory --- .../analysis/prof_parse/_cann_file_parser.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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 83827d6c18..b8cbf5ed7d 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: -- Gitee