diff --git a/TraceLens/Agent/Analysis/category_analyses/cpu_idle_analysis.py b/TraceLens/Agent/Analysis/category_analyses/cpu_idle_analysis.py index c23f9b61b..2eca27381 100644 --- a/TraceLens/Agent/Analysis/category_analyses/cpu_idle_analysis.py +++ b/TraceLens/Agent/Analysis/category_analyses/cpu_idle_analysis.py @@ -15,7 +15,6 @@ """ import argparse -import json import os import sys import pandas as pd diff --git a/TraceLens/Agent/Analysis/category_analyses/gemm_analysis.py b/TraceLens/Agent/Analysis/category_analyses/gemm_analysis.py index 14b0e21c4..ad5114145 100644 --- a/TraceLens/Agent/Analysis/category_analyses/gemm_analysis.py +++ b/TraceLens/Agent/Analysis/category_analyses/gemm_analysis.py @@ -45,7 +45,6 @@ def extract_category_specific(ops_df, metadata) -> dict: missing_perf_model = 0 if "TFLOPS/s_mean" in ops_df.columns: - import pandas as pd missing_perf_model = ops_df["TFLOPS/s_mean"].isna().sum() diff --git a/TraceLens/Agent/Analysis/category_analyses/other_analysis.py b/TraceLens/Agent/Analysis/category_analyses/other_analysis.py index 10364065a..d51bd997f 100644 --- a/TraceLens/Agent/Analysis/category_analyses/other_analysis.py +++ b/TraceLens/Agent/Analysis/category_analyses/other_analysis.py @@ -15,8 +15,6 @@ import sys import os -import pandas as pd - sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from analysis_utils import ( diff --git a/TraceLens/Agent/Analysis/utils/orchestrator_prepare.py b/TraceLens/Agent/Analysis/utils/orchestrator_prepare.py index 631a996a2..7759e9a50 100644 --- a/TraceLens/Agent/Analysis/utils/orchestrator_prepare.py +++ b/TraceLens/Agent/Analysis/utils/orchestrator_prepare.py @@ -18,7 +18,6 @@ import sys import traceback from collections import defaultdict -from typing import Any import pandas as pd sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) diff --git a/TraceLens/EventReplay/batched_replay.py b/TraceLens/EventReplay/batched_replay.py index 92a1447f6..5a2ec8de1 100644 --- a/TraceLens/EventReplay/batched_replay.py +++ b/TraceLens/EventReplay/batched_replay.py @@ -7,7 +7,6 @@ # run_repro.py import json import argparse -import warnings import torch from utils import TensorCfg, build_tensor, benchmark_func diff --git a/TraceLens/EventReplay/event_replay.py b/TraceLens/EventReplay/event_replay.py index ca664df59..9d79f3765 100644 --- a/TraceLens/EventReplay/event_replay.py +++ b/TraceLens/EventReplay/event_replay.py @@ -11,7 +11,6 @@ from typing import Dict, Any, List, Optional, Tuple import re import warnings -import time from .utils import ( _get_torch_or_raise, diff --git a/TraceLens/EventReplay/utils.py b/TraceLens/EventReplay/utils.py index 73aa683b7..cf75fd97f 100644 --- a/TraceLens/EventReplay/utils.py +++ b/TraceLens/EventReplay/utils.py @@ -4,7 +4,7 @@ # See LICENSE for license information. ############################################################################### -from typing import List, Dict, Tuple, Any +from typing import List, Any import time _torch_module = None diff --git a/TraceLens/NcclAnalyser/nccl_analyser.py b/TraceLens/NcclAnalyser/nccl_analyser.py index 5b098135a..2e81ff0a2 100644 --- a/TraceLens/NcclAnalyser/nccl_analyser.py +++ b/TraceLens/NcclAnalyser/nccl_analyser.py @@ -5,9 +5,7 @@ ############################################################################### import ast -import gzip import os -import json import logging import warnings @@ -15,7 +13,6 @@ from concurrent.futures import ProcessPoolExecutor, as_completed from ..util import DataLoader -from ..util import DEFAULT_CUSTOM_COLLECTIVE_PATTERNS from ..util import TraceEventUtils diff --git a/TraceLens/NcclAnalyser/util/node_rank_to_protobuf_file_mapping.py b/TraceLens/NcclAnalyser/util/node_rank_to_protobuf_file_mapping.py index 746ace705..8900e1602 100644 --- a/TraceLens/NcclAnalyser/util/node_rank_to_protobuf_file_mapping.py +++ b/TraceLens/NcclAnalyser/util/node_rank_to_protobuf_file_mapping.py @@ -6,7 +6,6 @@ from pathlib import Path import re -from collections import defaultdict def get_node_rank_protobuf_mapping(traces_folder, pattern="*.xplane.pb"): diff --git a/TraceLens/PerfModel/__init__.py b/TraceLens/PerfModel/__init__.py index de2509ea4..bae4a0b3b 100644 --- a/TraceLens/PerfModel/__init__.py +++ b/TraceLens/PerfModel/__init__.py @@ -5,9 +5,5 @@ ############################################################################### from .perf_model import * # Import everything from perf_model -from .torch_op_mapping import ( - op_to_perf_model_class_map, - resolve_perf_model_class, -) __all__ = [name for name in dir() if not name.startswith("_")] diff --git a/TraceLens/PerfModel/extensions/custom_collectives_perf_model_extensions.py b/TraceLens/PerfModel/extensions/custom_collectives_perf_model_extensions.py index 7bf7b0bd4..ed13b5a9b 100644 --- a/TraceLens/PerfModel/extensions/custom_collectives_perf_model_extensions.py +++ b/TraceLens/PerfModel/extensions/custom_collectives_perf_model_extensions.py @@ -10,7 +10,6 @@ from math import prod from TraceLens.PerfModel.utils import name2bpe -from TraceLens.PerfModel.perf_model import RMSNorm class CustomCollective: diff --git a/TraceLens/PerfModel/extensions/perf_model_extensions.py b/TraceLens/PerfModel/extensions/perf_model_extensions.py index da6b9b511..071783c94 100644 --- a/TraceLens/PerfModel/extensions/perf_model_extensions.py +++ b/TraceLens/PerfModel/extensions/perf_model_extensions.py @@ -9,7 +9,6 @@ """ from TraceLens.PerfModel.utils import torch_dtype_map, name2bpe -import re from TraceLens.PerfModel.perf_model import ( GEMM, BinaryElementwise, diff --git a/TraceLens/PerfModel/perf_model.py b/TraceLens/PerfModel/perf_model.py index d7a670051..dbc825a61 100644 --- a/TraceLens/PerfModel/perf_model.py +++ b/TraceLens/PerfModel/perf_model.py @@ -15,7 +15,7 @@ from .kernel_name_parser import gemm_name_parser -from .utils import name2bpe, parse_bool, simulation_dtype_map, torch_dtype_map +from .utils import name2bpe, parse_bool, torch_dtype_map # 1. GEMM diff --git a/TraceLens/PerfModel/run_perf_model.py b/TraceLens/PerfModel/run_perf_model.py index e3e1e63ab..5488730e9 100644 --- a/TraceLens/PerfModel/run_perf_model.py +++ b/TraceLens/PerfModel/run_perf_model.py @@ -5,8 +5,6 @@ ############################################################################### import argparse -import os -import sys from TraceLens.PerfModel.perf_model import GEMM, SDPA, simulation_dtype_map diff --git a/TraceLens/PerfModel/utils.py b/TraceLens/PerfModel/utils.py index 72a8c6eea..69818c605 100644 --- a/TraceLens/PerfModel/utils.py +++ b/TraceLens/PerfModel/utils.py @@ -8,8 +8,6 @@ Utils. for perf. model. """ -import os - def add_simulation_time_columns( dict_metrics, diff --git a/TraceLens/Reporting/generate_multi_rank_collective_report_pytorch.py b/TraceLens/Reporting/generate_multi_rank_collective_report_pytorch.py index 8ff9a12c6..a861f683d 100644 --- a/TraceLens/Reporting/generate_multi_rank_collective_report_pytorch.py +++ b/TraceLens/Reporting/generate_multi_rank_collective_report_pytorch.py @@ -4,6 +4,7 @@ # See LICENSE for license information. ############################################################################### +import importlib.util import os import re import argparse @@ -264,9 +265,7 @@ def generate_collective_report( print(f"DataFrame '{sheet_name}' written to {csv_path}") if output_xlsx_path: - try: - import openpyxl - except (ImportError, ModuleNotFoundError): + if importlib.util.find_spec("openpyxl") is None: print("Error importing openpyxl") request_install("openpyxl") diff --git a/TraceLens/Reporting/generate_perf_report_jax.py b/TraceLens/Reporting/generate_perf_report_jax.py index f1494123d..a0e2b81bf 100644 --- a/TraceLens/Reporting/generate_perf_report_jax.py +++ b/TraceLens/Reporting/generate_perf_report_jax.py @@ -4,7 +4,10 @@ # See LICENSE for license information. ############################################################################### -import argparse, os, sys +import argparse +import importlib.util +import os +import sys from typing import Optional, Dict import pandas as pd import logging @@ -16,8 +19,7 @@ format="[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s", ) -from TraceLens.PerfModel import jax_op_mapping -from TraceLens.TreePerf import TreePerfAnalyzer, JaxTreePerfAnalyzer +from TraceLens.TreePerf import JaxTreePerfAnalyzer from TraceLens.Reporting.reporting_utils import ( add_gpu_arch_cli_args, request_install, @@ -175,10 +177,8 @@ def generate_perf_report_jax( # split input path at 'xplane.pb' and take the first part and append '.xlsx' base_path = profile_path.rsplit(".xplane.pb", 1)[0] output_xlsx_path = base_path + "_perf_report.xlsx" - try: - import openpyxl - except (ImportError, ModuleNotFoundError) as e: - print(f"Error importing openpyxl: {e}") + if importlib.util.find_spec("openpyxl") is None: + print("Error importing openpyxl") request_install("openpyxl") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: diff --git a/TraceLens/Reporting/generate_perf_report_jax_analysis.py b/TraceLens/Reporting/generate_perf_report_jax_analysis.py index 2375f9428..7cbfcb7a3 100644 --- a/TraceLens/Reporting/generate_perf_report_jax_analysis.py +++ b/TraceLens/Reporting/generate_perf_report_jax_analysis.py @@ -5,10 +5,7 @@ ############################################################################### import argparse -import json -import os import sys -import pandas as pd from pathlib import Path diff --git a/TraceLens/Reporting/generate_perf_report_pftrace_hip_activity.py b/TraceLens/Reporting/generate_perf_report_pftrace_hip_activity.py index 6bf4d4489..d9f14c9b0 100644 --- a/TraceLens/Reporting/generate_perf_report_pftrace_hip_activity.py +++ b/TraceLens/Reporting/generate_perf_report_pftrace_hip_activity.py @@ -11,6 +11,7 @@ API↔kernel correlation (see generate_perf_report_pftrace_hip_api for that). """ +import importlib.util import os import argparse import sys @@ -171,11 +172,9 @@ def generate_perf_report_pftrace_hip_activity( base = base.with_suffix("") output_xlsx_path = str(base) + "_pftrace_activity_report.xlsx" logger.info("Writing Excel to: %s", output_xlsx_path) - try: - import openpyxl - except (ImportError, ModuleNotFoundError) as e: - logger.error("openpyxl required: %s", e) - raise + if importlib.util.find_spec("openpyxl") is None: + logger.error("openpyxl required for Excel output") + raise ImportError("openpyxl is required for Excel output") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: for sheet_name, df in dict_name2df.items(): sn = sheet_name[:31] diff --git a/TraceLens/Reporting/generate_perf_report_pftrace_hip_api.py b/TraceLens/Reporting/generate_perf_report_pftrace_hip_api.py index e24a0c373..278a1bc88 100644 --- a/TraceLens/Reporting/generate_perf_report_pftrace_hip_api.py +++ b/TraceLens/Reporting/generate_perf_report_pftrace_hip_api.py @@ -4,6 +4,7 @@ # See LICENSE for license information. ############################################################################### +import importlib.util import os import re import argparse @@ -117,13 +118,11 @@ def generate_perf_report_pftrace_hip_api( output_xlsx_path = str(base) + "_pftrace_hip_api_report.xlsx" logger.info(f"Writing Excel file to: {output_xlsx_path}") - try: - import openpyxl - except (ImportError, ModuleNotFoundError) as e: + if importlib.util.find_spec("openpyxl") is None: logger.error( - f"Error importing openpyxl: {e}. Please install: pip install openpyxl" + "Error importing openpyxl. Please install: pip install openpyxl" ) - raise + raise ImportError("openpyxl is required for Excel output") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: for sheet_name, df in dict_name2df.items(): diff --git a/TraceLens/Reporting/generate_perf_report_pftrace_memory_copy.py b/TraceLens/Reporting/generate_perf_report_pftrace_memory_copy.py index 0fa6909e8..e612443b0 100644 --- a/TraceLens/Reporting/generate_perf_report_pftrace_memory_copy.py +++ b/TraceLens/Reporting/generate_perf_report_pftrace_memory_copy.py @@ -11,6 +11,7 @@ Uses shared pftrace_utils (traceconv) and PftraceParser. """ +import importlib.util import os import argparse import sys @@ -163,13 +164,9 @@ def generate_perf_report_pftrace_memory_copy( base = base.with_suffix("") output_xlsx_path = str(base) + "_pftrace_memory_copy_report.xlsx" logger.info("Writing Excel file to: %s", output_xlsx_path) - try: - import openpyxl # noqa: F401 - except (ImportError, ModuleNotFoundError) as e: - logger.error( - "openpyxl required for Excel output: %s. pip install openpyxl", e - ) - raise + if importlib.util.find_spec("openpyxl") is None: + logger.error("openpyxl required for Excel output. pip install openpyxl") + raise ImportError("openpyxl is required for Excel output") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: for sheet_name, df in dfs.items(): df.to_excel(writer, sheet_name=sheet_name, index=False) diff --git a/TraceLens/Reporting/generate_perf_report_pytorch.py b/TraceLens/Reporting/generate_perf_report_pytorch.py index e41f349ed..ecf81a9e9 100644 --- a/TraceLens/Reporting/generate_perf_report_pytorch.py +++ b/TraceLens/Reporting/generate_perf_report_pytorch.py @@ -7,18 +7,15 @@ import argparse import ast import importlib.util -import json import os import re -import subprocess -import sys import warnings -from typing import Dict, Optional, Tuple +from typing import Dict, Optional import numpy as np import pandas as pd -from TraceLens import NcclAnalyser, TraceToTree, TraceDiff, TreePerfAnalyzer +from TraceLens import NcclAnalyser, TraceDiff, TreePerfAnalyzer from TraceLens.PerfModel.torch_op_mapping import build_sheet_category_to_op_names from TraceLens.Reporting.reporting_utils import ( add_gpu_arch_cli_args, @@ -1028,10 +1025,8 @@ def _launcher_category(name): if output_xlsx_path is None: base_path = profile_json_path.rsplit(".json", 1)[0] output_xlsx_path = base_path + "_perf_report.xlsx" - try: - import openpyxl - except (ImportError, ModuleNotFoundError) as e: - print(f"Error importing openpyxl: {e}") + if importlib.util.find_spec("openpyxl") is None: + print("Error importing openpyxl") request_install("openpyxl") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: diff --git a/TraceLens/Reporting/generate_perf_report_pytorch_inference.py b/TraceLens/Reporting/generate_perf_report_pytorch_inference.py index 70caac26a..a199320f8 100644 --- a/TraceLens/Reporting/generate_perf_report_pytorch_inference.py +++ b/TraceLens/Reporting/generate_perf_report_pytorch_inference.py @@ -8,12 +8,10 @@ import importlib.util import json import os -import subprocess import sys import warnings -from typing import Dict, Optional, Tuple +from typing import Dict, Optional -from tqdm import tqdm import numpy as np import pandas as pd @@ -40,8 +38,6 @@ merge_capture_trace_into_graph, ) -import TraceLens - def perf_report_sanity_check( events, @@ -1180,10 +1176,8 @@ def _launcher_category(name): if output_xlsx_path is None: base_path = profile_json_path.rsplit(".json", 1)[0] output_xlsx_path = base_path + "_perf_report.xlsx" - try: - import openpyxl - except (ImportError, ModuleNotFoundError) as e: - print(f"Error importing openpyxl: {e}") + if importlib.util.find_spec("openpyxl") is None: + print("Error importing openpyxl") request_install("openpyxl") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: diff --git a/TraceLens/Reporting/generate_perf_report_rocprof.py b/TraceLens/Reporting/generate_perf_report_rocprof.py index c8760ccd7..d1835f341 100644 --- a/TraceLens/Reporting/generate_perf_report_rocprof.py +++ b/TraceLens/Reporting/generate_perf_report_rocprof.py @@ -4,6 +4,7 @@ # See LICENSE for license information. ############################################################################### +import importlib.util import os import argparse import sys @@ -150,13 +151,11 @@ def generate_perf_report_rocprof( output_xlsx_path = base_path + "_perf_report.xlsx" logger.info(f"Writing Excel file to: {output_xlsx_path}") - try: - import openpyxl - except (ImportError, ModuleNotFoundError) as e: + if importlib.util.find_spec("openpyxl") is None: logger.error( - f"Error importing openpyxl: {e}. Please install it with: pip install openpyxl" + "Error importing openpyxl. Please install it with: pip install openpyxl" ) - raise + raise ImportError("openpyxl is required for Excel output") with pd.ExcelWriter(output_xlsx_path, engine="openpyxl") as writer: for sheet_name, df in dict_name2df.items(): diff --git a/TraceLens/Reporting/pftrace_hip_activity_analysis.py b/TraceLens/Reporting/pftrace_hip_activity_analysis.py index c4fa08896..060000923 100644 --- a/TraceLens/Reporting/pftrace_hip_activity_analysis.py +++ b/TraceLens/Reporting/pftrace_hip_activity_analysis.py @@ -15,7 +15,6 @@ import re from collections import defaultdict from dataclasses import dataclass, field -from pathlib import Path from typing import Any, Dict, Iterable, List, Optional, Tuple from ..util import TraceEventUtils diff --git a/TraceLens/Reporting/rocprof_analysis.py b/TraceLens/Reporting/rocprof_analysis.py index 0d1a79b66..7584a8571 100644 --- a/TraceLens/Reporting/rocprof_analysis.py +++ b/TraceLens/Reporting/rocprof_analysis.py @@ -7,7 +7,7 @@ from ..util import TraceEventUtils import pandas as pd import numpy as np -from typing import List, Dict, Optional +from typing import List, Optional import logging logger = logging.getLogger(__name__) diff --git a/TraceLens/Reporting/tracediff_comparison_extension.py b/TraceLens/Reporting/tracediff_comparison_extension.py index d51c128cc..1f1219403 100644 --- a/TraceLens/Reporting/tracediff_comparison_extension.py +++ b/TraceLens/Reporting/tracediff_comparison_extension.py @@ -22,7 +22,7 @@ from __future__ import annotations -from typing import Any, Dict, List, Optional, Set, Tuple +from typing import Any, Dict, List, Optional, Set import numpy as np import pandas as pd diff --git a/TraceLens/Trace2Tree/extensions/moe_unfused_triton_pseudo_ops.py b/TraceLens/Trace2Tree/extensions/moe_unfused_triton_pseudo_ops.py index a33fd64f3..cda660463 100644 --- a/TraceLens/Trace2Tree/extensions/moe_unfused_triton_pseudo_ops.py +++ b/TraceLens/Trace2Tree/extensions/moe_unfused_triton_pseudo_ops.py @@ -5,7 +5,6 @@ ############################################################################### import logging -from weakref import finalize from .pseudo_ops_utils import inject_pseudo_op logger = logging.getLogger(__name__) diff --git a/TraceLens/Trace2Tree/extensions/pseudo_ops_utils.py b/TraceLens/Trace2Tree/extensions/pseudo_ops_utils.py index 5d8e71ada..1fd56740b 100644 --- a/TraceLens/Trace2Tree/extensions/pseudo_ops_utils.py +++ b/TraceLens/Trace2Tree/extensions/pseudo_ops_utils.py @@ -6,7 +6,6 @@ import re import logging -from typing import Any, Optional, List, Callable logger = logging.getLogger(__name__) diff --git a/TraceLens/Trace2Tree/trace_capture_merge_experimental.py b/TraceLens/Trace2Tree/trace_capture_merge_experimental.py index 09ef79969..f34eb8df1 100644 --- a/TraceLens/Trace2Tree/trace_capture_merge_experimental.py +++ b/TraceLens/Trace2Tree/trace_capture_merge_experimental.py @@ -15,8 +15,6 @@ model suitable for performance analysis. """ -import sys -import time from collections import OrderedDict, deque, defaultdict from typing import Any, Dict, List, Optional, Tuple import json @@ -588,7 +586,6 @@ def load_capture_folder( Dictionary keyed by ``"{batch_size}_{mode}"`` whose values are lists of ``(capture_tree, capture_roots)`` tuples. """ - from ..TreePerf.tree_perf import TreePerfAnalyzer with open(metadata_json_path, "r") as f: metadata_list = json.load(f) diff --git a/TraceLens/TraceDiff/trace_diff.py b/TraceLens/TraceDiff/trace_diff.py index f886297e2..7b1a04e4d 100644 --- a/TraceLens/TraceDiff/trace_diff.py +++ b/TraceLens/TraceDiff/trace_diff.py @@ -20,7 +20,6 @@ _KERNEL_DISPATCH_CATEGORIES, _NAME, _TRACELENS_DEBUG, - _TS, _UID, _get_name_node, _get_node_arg, diff --git a/TraceLens/TraceUtils/split_inference_trace_annotation.py b/TraceLens/TraceUtils/split_inference_trace_annotation.py index 2be025b8d..4e7e46bee 100644 --- a/TraceLens/TraceUtils/split_inference_trace_annotation.py +++ b/TraceLens/TraceUtils/split_inference_trace_annotation.py @@ -172,11 +172,8 @@ import math import os import re -import sys import zipfile from typing import List, Set, Tuple, Optional -from dataclasses import dataclass, field -import csv from statistics import mean from TraceLens.util import DataLoader from TraceLens.Trace2Tree.trace_to_tree import TraceToTree @@ -195,7 +192,6 @@ import pandas as pd # Try to use faster JSON parser (orjson is 2-10x faster than json) -import orjson from tqdm import tqdm GPU_EVENT_CATEGORIES = ["kernel", "gpu_memcpy", "gpu_memset", "gpu_user_annotation"] diff --git a/TraceLens/TreePerf/gpu_event_analyser.py b/TraceLens/TreePerf/gpu_event_analyser.py index cb3c9464e..014c67a09 100644 --- a/TraceLens/TreePerf/gpu_event_analyser.py +++ b/TraceLens/TreePerf/gpu_event_analyser.py @@ -5,7 +5,6 @@ ############################################################################### import pandas as pd -import itertools import tqdm from TraceLens.util import TraceEventUtils diff --git a/TraceLens/TreePerf/tree_perf.py b/TraceLens/TreePerf/tree_perf.py index 4ae2cf269..8e14e8d44 100644 --- a/TraceLens/TreePerf/tree_perf.py +++ b/TraceLens/TreePerf/tree_perf.py @@ -5,11 +5,10 @@ ############################################################################### import copy -import gzip import inspect import json import logging -import os, re, sys +import re import pprint # TODO: warning should show the stack as well diff --git a/agent_evals/Analysis/eval_utils/aggregate_repeatability.py b/agent_evals/Analysis/eval_utils/aggregate_repeatability.py index 42ea28461..ba1a4933e 100644 --- a/agent_evals/Analysis/eval_utils/aggregate_repeatability.py +++ b/agent_evals/Analysis/eval_utils/aggregate_repeatability.py @@ -11,7 +11,6 @@ import json import os import re -import sys from collections import defaultdict RESULTS_ROOT = os.environ.get( diff --git a/examples/archived/fusion_opportunity.ipynb b/examples/archived/fusion_opportunity.ipynb index 8907feddf..c49603cbf 100644 --- a/examples/archived/fusion_opportunity.ipynb +++ b/examples/archived/fusion_opportunity.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "7fb27b941602401d91542211134fc71a", "metadata": {}, "source": [ "" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# This notebook demonstrates key features of the TraceLens library\n", - "# We encourage users to walk through the notebook and play with the code\n", - "# to get a feel for how the library works.\n", - "\n", - "# For production cases, we recommend using the TraceLens/examples/generate_perf_report.py script\n", - "\n", - "from pprint import pprint\n", - "import json\n", - "import pandas as pd\n", - "from TraceLens import TreePerfAnalyzer" - ], - "execution_count": null, - "outputs": [], - "id": "84eb5f1b-38e2-4b2d-9fcf-55c6ed7fb1dc" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# replace by your profile path, it can be a single rank profile from a multi gpu run as well\n", - "path = \"/path/to/profile.json\"\n", - "perf_analyzer = TreePerfAnalyzer.from_file(path)" - ], - "execution_count": null, - "outputs": [], - "id": "caf812d2-5b1d-4285-b9d6-8078173ecb27" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# get breakdown of gpu timeline - busy time, idle time, communication time, etc\n", - "perf_analyzer.get_df_gpu_timeline()" - ], - "execution_count": null, - "outputs": [], - "id": "0e7d4ac1-2cbe-49b8-97fa-d58eb0873b04" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# table of all lowest-level CPU operations (from the call stack perspective)\n", - "# and the time they \"induce\" on the GPU\n", - "df_kernel_launchers = perf_analyzer.get_df_kernel_launchers(include_kernel_details=True)\n", - "df_kernel_launchers.round(2).head()" - ], - "execution_count": null, - "outputs": [], - "id": "6f16ae0c-9d06-4215-8282-ba207af928fc" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# group by op name and summarize\n", - "# this gives an op wise breakdown of gpu time\n", - "df_kernel_launchers_summary = perf_analyzer.get_df_kernel_launchers_summary(\n", - " df_kernel_launchers\n", - ")\n", - "df_kernel_launchers_summary.round(2).head()" - ], - "execution_count": null, - "outputs": [], - "id": "71bf24ea-fb43-42cf-b09f-f5f464142d22" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Generate a detailed breakdown of unique argument combinations for all kernel-launching CPU ops.\n", - "# For each unique (op name + input dims/types/strides/concrete args), this groups and aggregates GPU time,\n", - "# helping identify which op and its arguments are the most time-consuming.\n", - "perf_analyzer.get_df_kernel_launchers_unique_args(df_kernel_launchers, include_pct=True)" - ], - "execution_count": null, - "outputs": [], - "id": "117537e4-ccc3-4c59-af9a-6cbe85283c40" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Same as above, but restricted to a specific op type — e.g., only `aten::mm`.\n", - "# Useful for drilling into the breakdown of a single op, such as mm, addmm, convolution, etc.\n", - "perf_analyzer.get_df_kernel_launchers_unique_args(\n", - " df_kernel_launchers, event_name=\"aten::mm\", include_pct=True\n", - ")" - ], - "execution_count": null, - "outputs": [], - "id": "03ce0ec9-725e-4982-ae85-99d8d83a6f36" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Roofline for ops\n", - "# currently we have GEMM, CONV fwd+bwd, FA\n", - "# many more coming soon\n", - "\n", - "# Example 1 GEMM\n", - "from TraceLens.PerfModel.torch_op_mapping import build_sheet_category_to_op_names\n", - "\n", - "sheet_category_to_op_names = build_sheet_category_to_op_names(\n", - " perf_analyzer.op_to_perf_model_class_map\n", - ")\n", - "gemm_op_names = sheet_category_to_op_names[\"GEMM\"]\n", - "gemm_events = [\n", - " event for event in perf_analyzer.tree.events if event[\"name\"] in gemm_op_names\n", - "]\n", - "print(f\"Found {len(gemm_events)} gemm events\")\n", - "\n", - "# take an example event and compute perf metrics\n", - "gemm_event = gemm_events[0]\n", - "print(\"Event dict:\")\n", - "pprint(gemm_event)\n", - "print(\"Perf metrics dict:\")\n", - "pprint(perf_analyzer.compute_perf_metrics(gemm_event))" - ], - "execution_count": null, - "outputs": [], - "id": "3a90c4f9-07bf-429f-840a-7e297542b4c3" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# build table for compute perf metrics for all gemm events\n", - "# include_kernel_details=True will add a column with the list of kernel name launched by the CPU op\n", - "df_gemm_ops = perf_analyzer.build_df_perf_metrics(\n", - " gemm_events, include_kernel_details=True\n", - ")\n", - "df_gemm_ops.head()" - ], - "execution_count": null, - "outputs": [], - "id": "f7a69bed-50fa-4475-bb41-34b2e1f8ee01" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# summarize by grouping across params M K N and bias and computing aggregate metrics\n", - "perf_analyzer.summarize_df_perf_metrics(df_gemm_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "1bf969c8-2313-40f7-aa83-20568b7ac846" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Example 2a sdpa fwd\n", - "sdpa_op_names = sheet_category_to_op_names[\"SDPA\"]\n", - "sdpa_events = [\n", - " event for event in perf_analyzer.tree.events if event[\"name\"] in sdpa_op_names\n", - "]\n", - "df_sdpa_fwd_ops = perf_analyzer.build_df_perf_metrics(sdpa_events)\n", - "perf_analyzer.summarize_df_perf_metrics(df_sdpa_fwd_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "c29741fc-4f49-441d-99d5-062396873b8a" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Example 2b sdpa bwd\n", - "# Note: bwd events for a fwd pass event are found\n", - "# by traversing the autograd links.\n", - "df_sdpa_bwd_ops = perf_analyzer.build_df_perf_metrics(sdpa_events, bwd=True)\n", - "perf_analyzer.summarize_df_perf_metrics(df_sdpa_bwd_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "4dc2bba8-83c5-4e35-8571-be7ee1b6b1b0" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Example 3a conv fwd\n", - "conv_op_names = sheet_category_to_op_names[\"CONV\"]\n", - "conv_events = [\n", - " event for event in perf_analyzer.tree.events if event[\"name\"] in conv_op_names\n", - "]\n", - "df_conv_fwd_ops = perf_analyzer.build_df_perf_metrics(conv_events)\n", - "perf_analyzer.summarize_df_perf_metrics(df_conv_fwd_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "0b606843-ea29-4286-b9ba-a180ea1b5534" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Example 3b conv bwd\n", - "df_conv_bwd_ops = perf_analyzer.build_df_perf_metrics(conv_events, bwd=True)\n", - "perf_analyzer.summarize_df_perf_metrics(df_conv_bwd_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "e1d702d8-fbf4-45bb-82d1-ac3b5961ccd7" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Example 4 unary elementwise\n", - "\n", - "unary_elemwise_op_names = sheet_category_to_op_names[\"UnaryElementwise\"]\n", - "unary_elementwise_events = [\n", - " event\n", - " for event in perf_analyzer.tree.events\n", - " if event[\"name\"] in unary_elemwise_op_names\n", - "]\n", - "df_unary_elementwise_ops = perf_analyzer.build_df_perf_metrics(unary_elementwise_events)\n", - "perf_analyzer.summarize_df_perf_metrics(df_unary_elementwise_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "ec56cc71-580c-4afe-b83e-da27148967b6" - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Example 5 binary elementwise\n", - "binary_elemwise_op_names = sheet_category_to_op_names[\"BinaryElementwise\"]\n", - "binary_elementwise_events = [\n", - " event\n", - " for event in perf_analyzer.tree.events\n", - " if event[\"name\"] in binary_elemwise_op_names\n", - "]\n", - "df_binary_elementwise_ops = perf_analyzer.build_df_perf_metrics(\n", - " binary_elementwise_events\n", - ")\n", - "perf_analyzer.summarize_df_perf_metrics(df_binary_elementwise_ops, [\"mean\"])" - ], - "execution_count": null, - "outputs": [], - "id": "c521592f-9ded-487a-9694-d8307c438772" - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.16" - } + "cells": [ + { + "cell_type": "markdown", + "id": "7fb27b941602401d91542211134fc71a", + "metadata": {}, + "source": [ + "" + ] }, - "nbformat": 4, - "nbformat_minor": 5 + { + "cell_type": "code", + "execution_count": null, + "id": "84eb5f1b-38e2-4b2d-9fcf-55c6ed7fb1dc", + "metadata": {}, + "outputs": [], + "source": [ + "# This notebook demonstrates key features of the TraceLens library\n", + "# We encourage users to walk through the notebook and play with the code\n", + "# to get a feel for how the library works.\n", + "\n", + "# For production cases, we recommend using the TraceLens/examples/generate_perf_report.py script\n", + "\n", + "from pprint import pprint\n", + "from TraceLens import TreePerfAnalyzer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "caf812d2-5b1d-4285-b9d6-8078173ecb27", + "metadata": {}, + "outputs": [], + "source": [ + "# replace by your profile path, it can be a single rank profile from a multi gpu run as well\n", + "path = \"/path/to/profile.json\"\n", + "perf_analyzer = TreePerfAnalyzer.from_file(path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0e7d4ac1-2cbe-49b8-97fa-d58eb0873b04", + "metadata": {}, + "outputs": [], + "source": [ + "# get breakdown of gpu timeline - busy time, idle time, communication time, etc\n", + "perf_analyzer.get_df_gpu_timeline()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f16ae0c-9d06-4215-8282-ba207af928fc", + "metadata": {}, + "outputs": [], + "source": [ + "# table of all lowest-level CPU operations (from the call stack perspective)\n", + "# and the time they \"induce\" on the GPU\n", + "df_kernel_launchers = perf_analyzer.get_df_kernel_launchers(include_kernel_details=True)\n", + "df_kernel_launchers.round(2).head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71bf24ea-fb43-42cf-b09f-f5f464142d22", + "metadata": {}, + "outputs": [], + "source": [ + "# group by op name and summarize\n", + "# this gives an op wise breakdown of gpu time\n", + "df_kernel_launchers_summary = perf_analyzer.get_df_kernel_launchers_summary(\n", + " df_kernel_launchers\n", + ")\n", + "df_kernel_launchers_summary.round(2).head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "117537e4-ccc3-4c59-af9a-6cbe85283c40", + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a detailed breakdown of unique argument combinations for all kernel-launching CPU ops.\n", + "# For each unique (op name + input dims/types/strides/concrete args), this groups and aggregates GPU time,\n", + "# helping identify which op and its arguments are the most time-consuming.\n", + "perf_analyzer.get_df_kernel_launchers_unique_args(df_kernel_launchers, include_pct=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "03ce0ec9-725e-4982-ae85-99d8d83a6f36", + "metadata": {}, + "outputs": [], + "source": [ + "# Same as above, but restricted to a specific op type — e.g., only `aten::mm`.\n", + "# Useful for drilling into the breakdown of a single op, such as mm, addmm, convolution, etc.\n", + "perf_analyzer.get_df_kernel_launchers_unique_args(\n", + " df_kernel_launchers, event_name=\"aten::mm\", include_pct=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3a90c4f9-07bf-429f-840a-7e297542b4c3", + "metadata": {}, + "outputs": [], + "source": [ + "# Roofline for ops\n", + "# currently we have GEMM, CONV fwd+bwd, FA\n", + "# many more coming soon\n", + "\n", + "# Example 1 GEMM\n", + "from TraceLens.PerfModel.torch_op_mapping import build_sheet_category_to_op_names\n", + "\n", + "sheet_category_to_op_names = build_sheet_category_to_op_names(\n", + " perf_analyzer.op_to_perf_model_class_map\n", + ")\n", + "gemm_op_names = sheet_category_to_op_names[\"GEMM\"]\n", + "gemm_events = [\n", + " event for event in perf_analyzer.tree.events if event[\"name\"] in gemm_op_names\n", + "]\n", + "print(f\"Found {len(gemm_events)} gemm events\")\n", + "\n", + "# take an example event and compute perf metrics\n", + "gemm_event = gemm_events[0]\n", + "print(\"Event dict:\")\n", + "pprint(gemm_event)\n", + "print(\"Perf metrics dict:\")\n", + "pprint(perf_analyzer.compute_perf_metrics(gemm_event))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7a69bed-50fa-4475-bb41-34b2e1f8ee01", + "metadata": {}, + "outputs": [], + "source": [ + "# build table for compute perf metrics for all gemm events\n", + "# include_kernel_details=True will add a column with the list of kernel name launched by the CPU op\n", + "df_gemm_ops = perf_analyzer.build_df_perf_metrics(\n", + " gemm_events, include_kernel_details=True\n", + ")\n", + "df_gemm_ops.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1bf969c8-2313-40f7-aa83-20568b7ac846", + "metadata": {}, + "outputs": [], + "source": [ + "# summarize by grouping across params M K N and bias and computing aggregate metrics\n", + "perf_analyzer.summarize_df_perf_metrics(df_gemm_ops, [\"mean\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c29741fc-4f49-441d-99d5-062396873b8a", + "metadata": {}, + "outputs": [], + "source": [ + "# Example 2a sdpa fwd\n", + "sdpa_op_names = sheet_category_to_op_names[\"SDPA\"]\n", + "sdpa_events = [\n", + " event for event in perf_analyzer.tree.events if event[\"name\"] in sdpa_op_names\n", + "]\n", + "df_sdpa_fwd_ops = perf_analyzer.build_df_perf_metrics(sdpa_events)\n", + "perf_analyzer.summarize_df_perf_metrics(df_sdpa_fwd_ops, [\"mean\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4dc2bba8-83c5-4e35-8571-be7ee1b6b1b0", + "metadata": {}, + "outputs": [], + "source": [ + "# Example 2b sdpa bwd\n", + "# Note: bwd events for a fwd pass event are found\n", + "# by traversing the autograd links.\n", + "df_sdpa_bwd_ops = perf_analyzer.build_df_perf_metrics(sdpa_events, bwd=True)\n", + "perf_analyzer.summarize_df_perf_metrics(df_sdpa_bwd_ops, [\"mean\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b606843-ea29-4286-b9ba-a180ea1b5534", + "metadata": {}, + "outputs": [], + "source": [ + "# Example 3a conv fwd\n", + "conv_op_names = sheet_category_to_op_names[\"CONV\"]\n", + "conv_events = [\n", + " event for event in perf_analyzer.tree.events if event[\"name\"] in conv_op_names\n", + "]\n", + "df_conv_fwd_ops = perf_analyzer.build_df_perf_metrics(conv_events)\n", + "perf_analyzer.summarize_df_perf_metrics(df_conv_fwd_ops, [\"mean\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1d702d8-fbf4-45bb-82d1-ac3b5961ccd7", + "metadata": {}, + "outputs": [], + "source": [ + "# Example 3b conv bwd\n", + "df_conv_bwd_ops = perf_analyzer.build_df_perf_metrics(conv_events, bwd=True)\n", + "perf_analyzer.summarize_df_perf_metrics(df_conv_bwd_ops, [\"mean\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec56cc71-580c-4afe-b83e-da27148967b6", + "metadata": {}, + "outputs": [], + "source": [ + "# Example 4 unary elementwise\n", + "\n", + "unary_elemwise_op_names = sheet_category_to_op_names[\"UnaryElementwise\"]\n", + "unary_elementwise_events = [\n", + " event\n", + " for event in perf_analyzer.tree.events\n", + " if event[\"name\"] in unary_elemwise_op_names\n", + "]\n", + "df_unary_elementwise_ops = perf_analyzer.build_df_perf_metrics(unary_elementwise_events)\n", + "perf_analyzer.summarize_df_perf_metrics(df_unary_elementwise_ops, [\"mean\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c521592f-9ded-487a-9694-d8307c438772", + "metadata": {}, + "outputs": [], + "source": [ + "# Example 5 binary elementwise\n", + "binary_elemwise_op_names = sheet_category_to_op_names[\"BinaryElementwise\"]\n", + "binary_elementwise_events = [\n", + " event\n", + " for event in perf_analyzer.tree.events\n", + " if event[\"name\"] in binary_elemwise_op_names\n", + "]\n", + "df_binary_elementwise_ops = perf_analyzer.build_df_perf_metrics(\n", + " binary_elementwise_events\n", + ")\n", + "perf_analyzer.summarize_df_perf_metrics(df_binary_elementwise_ops, [\"mean\"])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } \ No newline at end of file diff --git a/tests/perf_tracker/tracelens_perf_harness.py b/tests/perf_tracker/tracelens_perf_harness.py index 02d2d46ec..13dabe2f8 100644 --- a/tests/perf_tracker/tracelens_perf_harness.py +++ b/tests/perf_tracker/tracelens_perf_harness.py @@ -197,7 +197,7 @@ def serve_prometheus_metrics(timing_json_path, port=9100): """ import time - from prometheus_client import REGISTRY, MetricsHandler, start_http_server + from prometheus_client import REGISTRY, start_http_server from prometheus_client.core import GaugeMetricFamily timing_path = Path(timing_json_path).resolve() diff --git a/tests/test_all2allv_summary.py b/tests/test_all2allv_summary.py index 0ced2a380..0e7b42dcd 100644 --- a/tests/test_all2allv_summary.py +++ b/tests/test_all2allv_summary.py @@ -18,7 +18,6 @@ import shutil import tempfile -import pandas as pd import pytest from TraceLens import NcclAnalyser diff --git a/tests/test_detect_recompute.py b/tests/test_detect_recompute.py index d2452c760..96deee345 100644 --- a/tests/test_detect_recompute.py +++ b/tests/test_detect_recompute.py @@ -15,7 +15,6 @@ import os -import pandas as pd import pytest from TraceLens.Reporting.generate_perf_report_pytorch import ( diff --git a/tests/test_event_replay.py b/tests/test_event_replay.py index b93930a7a..334e8eda8 100644 --- a/tests/test_event_replay.py +++ b/tests/test_event_replay.py @@ -13,7 +13,7 @@ import pytest import torch import torchvision.models as torchvision_models -from torch.profiler import profile, record_function, ProfilerActivity +from torch.profiler import profile, ProfilerActivity import os from TraceLens import EventReplayer, TreePerfAnalyzer, GPUEventAnalyser diff --git a/tests/test_first_occurrence_time.py b/tests/test_first_occurrence_time.py index 93d30d130..414887410 100644 --- a/tests/test_first_occurrence_time.py +++ b/tests/test_first_occurrence_time.py @@ -7,10 +7,7 @@ """Tests for the first_occurrence_time column in ops_unique_args.""" import pandas as pd -import pytest -from copy import deepcopy -from TraceLens.Trace2Tree.trace_to_tree import TraceToTree from TraceLens.TreePerf.tree_perf import TreePerfAnalyzer diff --git a/tests/test_graph_mode.py b/tests/test_graph_mode.py index 353510349..0343f75cb 100644 --- a/tests/test_graph_mode.py +++ b/tests/test_graph_mode.py @@ -14,7 +14,6 @@ "ignore:Source column 'kernel_details__summarize_kernel_stats' not found.*:UserWarning", ) import json -import os from typing import List, Dict import pandas as pd diff --git a/tests/test_jax_conv_analysis.py b/tests/test_jax_conv_analysis.py index 9e1b767d5..ef2acbc25 100644 --- a/tests/test_jax_conv_analysis.py +++ b/tests/test_jax_conv_analysis.py @@ -12,7 +12,7 @@ np.random.seed(42) -from TraceLens.TreePerf import JaxTreePerfAnalyzer, TreePerfAnalyzer +from TraceLens.TreePerf import JaxTreePerfAnalyzer logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) diff --git a/tests/test_jax_nccl_analyser.py b/tests/test_jax_nccl_analyser.py index 187f79a69..0708b828d 100644 --- a/tests/test_jax_nccl_analyser.py +++ b/tests/test_jax_nccl_analyser.py @@ -153,8 +153,6 @@ def parse_replica_groups(replica_groups_str): @patch("builtins.print") # Suppress print output during testing def test_analyze_all_collectives_from_df_basic(self, mock_print): """Test basic functionality of analyze_all_collectives_from_df.""" - import pandas as pd - import numpy as np # Create mock dataframe mock_df = self.create_mock_dataframe() diff --git a/tests/test_kernel_launchers.py b/tests/test_kernel_launchers.py index 3908bee5a..62cc75f07 100644 --- a/tests/test_kernel_launchers.py +++ b/tests/test_kernel_launchers.py @@ -16,8 +16,7 @@ 6. Nested cpu_ops with "execute" pattern """ -import pytest -from typing import Dict, List +from typing import Dict from copy import deepcopy from TraceLens.Trace2Tree.trace_to_tree import TraceToTree diff --git a/tests/test_pftrace_hip_activity_report.py b/tests/test_pftrace_hip_activity_report.py index b0de5a719..122545936 100644 --- a/tests/test_pftrace_hip_activity_report.py +++ b/tests/test_pftrace_hip_activity_report.py @@ -12,7 +12,6 @@ import tempfile import pandas as pd -from TraceLens.util import PftraceParser from TraceLens.Reporting.pftrace_hip_activity_analysis import ( PftraceHipActivityAnalyzer, extract_time_ns, diff --git a/tests/test_pftrace_hip_api_perf_report.py b/tests/test_pftrace_hip_api_perf_report.py index 7498e5e91..ee1364300 100644 --- a/tests/test_pftrace_hip_api_perf_report.py +++ b/tests/test_pftrace_hip_api_perf_report.py @@ -9,7 +9,6 @@ import pytest import tempfile import pandas as pd -from pathlib import Path from TraceLens.util import PftraceParser from TraceLens.Reporting.pftrace_hip_api_analysis import PftraceHipApiAnalyzer diff --git a/tests/test_pseudo_ops_extension.py b/tests/test_pseudo_ops_extension.py index 5836d47e0..4d763068c 100644 --- a/tests/test_pseudo_ops_extension.py +++ b/tests/test_pseudo_ops_extension.py @@ -13,7 +13,6 @@ 3. Parent pointers are properly rewired (pseudo ops are in parent chain) """ -import pytest from typing import Dict from copy import deepcopy import sys diff --git a/tests/test_rocprof_perf_report.py b/tests/test_rocprof_perf_report.py index 7cbc978b8..ff53adf53 100644 --- a/tests/test_rocprof_perf_report.py +++ b/tests/test_rocprof_perf_report.py @@ -8,7 +8,6 @@ import os import pandas as pd import tempfile -from pathlib import Path from TraceLens.util import RocprofParser from TraceLens.Reporting.rocprof_analysis import RocprofAnalyzer from TraceLens.Reporting.generate_perf_report_rocprof import ( diff --git a/tests/test_roofline_bound.py b/tests/test_roofline_bound.py index 634aa650e..217ad3a24 100644 --- a/tests/test_roofline_bound.py +++ b/tests/test_roofline_bound.py @@ -11,7 +11,6 @@ import json import os -import tempfile import pandas as pd import pytest diff --git a/tests/test_simplified_nccl_mode.py b/tests/test_simplified_nccl_mode.py index 55e7c3485..524531e8b 100644 --- a/tests/test_simplified_nccl_mode.py +++ b/tests/test_simplified_nccl_mode.py @@ -18,7 +18,6 @@ import shutil import tempfile -import pandas as pd import pytest from TraceLens import NcclAnalyser diff --git a/tests/test_torch_op_categorization_registry.py b/tests/test_torch_op_categorization_registry.py index e2f3edde7..3b1380575 100644 --- a/tests/test_torch_op_categorization_registry.py +++ b/tests/test_torch_op_categorization_registry.py @@ -14,7 +14,6 @@ OP_CATEGORY_REGISTRY, build_sheet_category_to_op_names, categorize_torch_op, - get_perf_model_category, op_to_perf_model_class_map, register_op_categories, ) diff --git a/tests/test_tracediff.py b/tests/test_tracediff.py index 09997bab5..bbb3b4f89 100644 --- a/tests/test_tracediff.py +++ b/tests/test_tracediff.py @@ -4,7 +4,6 @@ # See LICENSE for license information. ############################################################################### -import pytest from TraceLens.TraceDiff.trace_diff import ( _disambiguate_same_name_candidates, )