From 924687b9c2dc1c07d82a38487353581dd046498d Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Fri, 17 Jul 2026 15:20:48 -0400 Subject: [PATCH 01/19] docs: migrate remaining legacy topics into the ROCm docs tree Port the remaining loose docs from docs_original into the rocm-docs-core site under docs/, following the established ROCm documentation conventions (MyST, {meta} blocks, "Related topics", sentence-case headings, copyright headers). New pages: - reference/perf-report-columns (column glossary) - conceptual/: trace2tree (merged with motivation), torch-profiling-analysis, shape-metadata, gemm-analysis (merged), perf-model-walkthrough - how-to/: tree-perf-analysis, gpu-event-analysis, compare-perf-reports, nccl-analysis, origami-integration - tutorials/: torch-profiling, distributed-profiling, anomaly-detection notebooks, rendered via myst-nb (rocm-docs-core bumped 1.22 -> 1.32, notebook execution disabled at build time) Wire the new Concepts, Tutorials, and Reference entries into _toc.yml.in and the index.rst landing cards. Repoint all inbound links (README, CODEOWNERS, API reference, agent READMEs) from docs_original to the new pages and retire the migrated docs_original files (only the deferred Agentic_Mode entry remains). Co-authored-by: Cursor --- .github/CODEOWNERS | 4 +- README.md | Bin 12522 -> 24596 bytes TraceLens/Agent/Analysis/README.md | 2 +- TraceLens/Agent/Profiling/README.md | 2 +- docs/conceptual/gemm-analysis.md | 470 +++++++++ .../imgs/profiling_analysis_fig1.png | Bin .../imgs/profiling_analysis_fig2.png | Bin .../imgs/profiling_analysis_fig3.png | Bin .../imgs/profiling_analysis_fig4.png | Bin .../imgs/profiling_analysis_fig5.png | Bin .../imgs/profiling_analysis_fig6.png | Bin .../conceptual/perf-model-walkthrough.md | 213 ++-- docs/conceptual/shape-metadata.md | 151 +++ docs/conceptual/torch-profiling-analysis.md | 151 +++ docs/conceptual/trace2tree.md | 149 +++ docs/conf.py | 5 + docs/how-to/compare-perf-reports.md | 118 +++ docs/how-to/generate-perf-report-pytorch.md | 4 +- docs/how-to/gpu-event-analysis.md | 98 ++ docs/how-to/nccl-analysis.md | 100 ++ docs/how-to/origami-integration.md | 149 +++ docs/how-to/tree-perf-analysis.md | 94 ++ docs/index.rst | 15 + docs/reference/api-reference.md | 24 +- docs/reference/perf-report-columns.md | 922 ++++++++++++++++ docs/sphinx/_toc.yml.in | 44 +- docs/sphinx/requirements.txt | 2 +- .../tutorials/anomaly-detection.ipynb | 0 .../tutorials/distributed-profiling.ipynb | 0 .../tutorials/torch-profiling.ipynb | 0 docs_original/EventReplay.md | 152 --- docs_original/Inference_analysis.md | 728 ------------- docs_original/NcclAnalyser.md | 80 -- docs_original/Trace2Tree.md | 109 -- docs_original/TraceDiff.md | 145 --- docs_original/TraceFusion.md | 102 -- ...formance Analysis - Adeem Jassani, AMD.pdf | Bin 1290824 -> 0 bytes docs_original/TreePerf.md | 68 -- docs_original/compare_perf_reports_pytorch.md | 92 -- docs_original/conceptual/aimodels_gemms.md | 274 ----- .../conceptual/shape_metadata_guide.md | 151 --- .../conceptual/torch_profiling_analysis.md | 144 --- .../conceptual/trace2tree_motivation.md | 36 - docs_original/gemm_dim_eff.md | 190 ---- ...te_multi_rank_collective_report_pytorch.md | 180 ---- docs_original/generate_perf_report.md | 177 ---- docs_original/generate_perf_report_rocprof.md | 245 ----- .../generate_perf_report_rocprof_pftrace.md | 62 -- docs_original/gpu_event_analyser.md | 95 -- docs_original/jax_analyses.md | 98 -- docs_original/locate_node.PNG | Bin 104490 -> 0 bytes docs_original/origami_with_tracelens.md | 142 --- docs_original/perf_report_columns.md | 982 ------------------ 53 files changed, 2580 insertions(+), 4389 deletions(-) create mode 100644 docs/conceptual/gemm-analysis.md rename {docs_original => docs}/conceptual/imgs/profiling_analysis_fig1.png (100%) rename {docs_original => docs}/conceptual/imgs/profiling_analysis_fig2.png (100%) rename {docs_original => docs}/conceptual/imgs/profiling_analysis_fig3.png (100%) rename {docs_original => docs}/conceptual/imgs/profiling_analysis_fig4.png (100%) rename {docs_original => docs}/conceptual/imgs/profiling_analysis_fig5.png (100%) rename {docs_original => docs}/conceptual/imgs/profiling_analysis_fig6.png (100%) rename docs_original/triton_perf_model_walkthrough.md => docs/conceptual/perf-model-walkthrough.md (76%) create mode 100644 docs/conceptual/shape-metadata.md create mode 100644 docs/conceptual/torch-profiling-analysis.md create mode 100644 docs/conceptual/trace2tree.md create mode 100644 docs/how-to/compare-perf-reports.md create mode 100644 docs/how-to/gpu-event-analysis.md create mode 100644 docs/how-to/nccl-analysis.md create mode 100644 docs/how-to/origami-integration.md create mode 100644 docs/how-to/tree-perf-analysis.md create mode 100644 docs/reference/perf-report-columns.md rename docs_original/conceptual/anomaly_detection_guide.ipynb => docs/tutorials/anomaly-detection.ipynb (100%) rename docs_original/conceptual/distributed_profiling_guide.ipynb => docs/tutorials/distributed-profiling.ipynb (100%) rename docs_original/conceptual/torch_profiling_guide.ipynb => docs/tutorials/torch-profiling.ipynb (100%) delete mode 100644 docs_original/EventReplay.md delete mode 100644 docs_original/Inference_analysis.md delete mode 100755 docs_original/NcclAnalyser.md delete mode 100755 docs_original/Trace2Tree.md delete mode 100644 docs_original/TraceDiff.md delete mode 100755 docs_original/TraceFusion.md delete mode 100644 docs_original/TraceLens - Democratizing AI Performance Analysis - Adeem Jassani, AMD.pdf delete mode 100755 docs_original/TreePerf.md delete mode 100644 docs_original/compare_perf_reports_pytorch.md delete mode 100644 docs_original/conceptual/aimodels_gemms.md delete mode 100644 docs_original/conceptual/shape_metadata_guide.md delete mode 100644 docs_original/conceptual/torch_profiling_analysis.md delete mode 100644 docs_original/conceptual/trace2tree_motivation.md delete mode 100644 docs_original/gemm_dim_eff.md delete mode 100644 docs_original/generate_multi_rank_collective_report_pytorch.md delete mode 100644 docs_original/generate_perf_report.md delete mode 100644 docs_original/generate_perf_report_rocprof.md delete mode 100644 docs_original/generate_perf_report_rocprof_pftrace.md delete mode 100644 docs_original/gpu_event_analyser.md delete mode 100644 docs_original/jax_analyses.md delete mode 100755 docs_original/locate_node.PNG delete mode 100644 docs_original/origami_with_tracelens.md delete mode 100644 docs_original/perf_report_columns.md diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 833fa65d1..81418e0f9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -14,7 +14,7 @@ # TraceDiff module and docs require Spandan review /TraceLens/TraceDiff/ @spandoesai -/docs_original/TraceDiff.md @spandoesai +/docs/how-to/compare-traces.md @spandoesai # Extensions and experimental trace merge require Deval review /TraceLens/PerfModel/extensions/ @devalshahamd @@ -25,7 +25,7 @@ /TraceLens/Reporting/generate_perf_report_pytorch_inference.py @devalshahamd /TraceLens/TraceUtils/split_inference_trace_annotation.py @devalshahamd /examples/custom_workflows/inference_analysis/ @devalshahamd -/docs_original/Inference_analysis.md @devalshahamd +/docs/how-to/generate-perf-report-pytorch-inference.md @devalshahamd /tests/test_inference_perf_report.py @devalshahamd /tests/traces/inference/ @devalshahamd diff --git a/README.md b/README.md index 3356c0e6cf60c78604db4f4af10157fd61b8fea8..8c64a58db85286ddda58b37602a9001aba14d31d 100755 GIT binary patch literal 24596 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 diff --git a/TraceLens/Agent/Analysis/README.md b/TraceLens/Agent/Analysis/README.md index cdc096a01..3fdbcbc02 100644 --- a/TraceLens/Agent/Analysis/README.md +++ b/TraceLens/Agent/Analysis/README.md @@ -61,7 +61,7 @@ pip install -e . The orchestrator runs against a single PyTorch profiler trace (`.json` or `.json.gz`). Collection is workload-specific: - **Training and eager inference traces**: Instrument your loop with `torch.profiler.profile(...)`, enabling CPU-side call-stack and shape capture (`with_stack=True`, `record_shapes=True`). Profile a representative steady-state window (a handful of training/inference steps, post-warmup) and dump the trace via `prof.export_chrome_trace(...)`. A single rank's trace is sufficient for per-rank analysis. -- **vLLM / SGLang inference traces**: Trace collection has framework-, version-, and execution-mode-specific requirements (custom Docker images or framework patches to add roofline annotations, profiler-config flags for graph-capture profiling, steady-state window selection, optional trace splitting). Follow the canonical guide in [Inference Analysis](../../../docs_original/Inference_analysis.md). For graph-mode workloads you will produce **two artifacts**: a graph-replay trace and a graph-capture folder; TraceLens (in inference mode with execution mode `graph replay + capture`) merges call-stack and shape information from the capture folder into the replay tree before analysis. +- **vLLM / SGLang inference traces**: Trace collection has framework-, version-, and execution-mode-specific requirements (custom Docker images or framework patches to add roofline annotations, profiler-config flags for graph-capture profiling, steady-state window selection, optional trace splitting). Follow the canonical topic in [Generate a PyTorch inference performance report](../../../docs/how-to/generate-perf-report-pytorch-inference.md). For graph-mode workloads you will produce **two artifacts**: a graph-replay trace and a graph-capture folder; TraceLens (in inference mode with execution mode `graph replay + capture`) merges call-stack and shape information from the capture folder into the replay tree before analysis. ### 3. Establish a hardware performance baseline diff --git a/TraceLens/Agent/Profiling/README.md b/TraceLens/Agent/Profiling/README.md index 09d2c575c..8ace11fa4 100644 --- a/TraceLens/Agent/Profiling/README.md +++ b/TraceLens/Agent/Profiling/README.md @@ -151,7 +151,7 @@ The skill parses the `case` blocks of these scripts at runtime to discover curre ## Trace Splitting and Handoff to Analysis -Step 6 produces split traces in `torch_trace/trace_split/` via `TraceLens.TraceUtils.split_inference_trace_annotation`. The skill then prints (but does **not** run) a `generate_perf_report_pytorch_inference.py` command that the user can launch to feed the split traces into the [Analysis Orchestrator](../Analysis/README.md). See [`docs_original/Inference_analysis.md`](../../../docs_original/Inference_analysis.md) for splitting heuristics and prefill/decode mix selection. +Step 6 produces split traces in `torch_trace/trace_split/` via `TraceLens.TraceUtils.split_inference_trace_annotation`. The skill then prints (but does **not** run) a `generate_perf_report_pytorch_inference.py` command that the user can launch to feed the split traces into the [Analysis Orchestrator](../Analysis/README.md). See [Generate a PyTorch inference performance report](../../../docs/how-to/generate-perf-report-pytorch-inference.md) for splitting heuristics and prefill/decode mix selection. ## Bug Reporting diff --git a/docs/conceptual/gemm-analysis.md b/docs/conceptual/gemm-analysis.md new file mode 100644 index 000000000..7bf133395 --- /dev/null +++ b/docs/conceptual/gemm-analysis.md @@ -0,0 +1,470 @@ + + +# GEMM analysis in TraceLens +```{meta} +:description: Understand how model dimensions map to GEMM shapes and BLAS calls, and how TraceLens reports GEMM dimension-efficiency metrics such as tile and wave quantization efficiency. +:keywords: TraceLens, GEMM, general matrix multiply, BLAS, hipBLAS, PyTorch, roofline, tile efficiency, wave quantization, dimension efficiency, Tensile, ROCm, MI300X, LLM, prefill, decode +``` + +General matrix multiply (GEMM) operations are the *primary compute primitive* used in AI models. Efficient implementations of GEMMs are readily available through vendor-tuned libraries such as cuBLAS and hipBLAS, so whenever possible the goal is to *reduce computation to a matrix multiply*. + +This topic explains how *model-level parameters* like batch size, sequence length, and hidden dimension translate into GEMM shapes, how those shapes map to specific basic linear algebra subprograms (BLAS) kernel calls, and how TraceLens reports deeper GEMM dimension-efficiency metrics. By the end you should be equipped to understand the GEMM shapes, counts, and BLAS calls involved in *any AI model you encounter*. + +## From model dimensions to GEMM shapes + +### Linear layers in LLMs + +Consider how linear layers in a large language model (LLM), such as the multi-layer perceptron (MLP) *up projection*, correspond to GEMM calls. + +The input tensor shape for this operation is: + +``` +X: [B, L, d_model] +``` + +Here: + +- `B` represents the batch size. +- `L` denotes the sequence length. +- `d_model` is the input (or hidden) dimension. + +This operation outputs a tensor with the shape: + +``` +Y: [B, L, d_ff] +``` + +The projection for each token can be expressed individually as: + +``` +Y[b, l, :] = X[b, l, :] @ Wᵀ +``` + +Where `W` is the weight matrix with a shape of `[d_ff, d_model]`. + +### Flattening for GEMM + +To express this entire operation as a single GEMM, flatten the batch and sequence dimensions of the input tensor: + +``` +X_flat: [B·L, d_model] +Wᵀ: [d_model, d_ff] +Y = X_flat @ Wᵀ +``` + +This flattening yields the following GEMM shape parameters: + +- `param: M = B·L` +- `param: N = d_ff` +- `param: K = d_model` + +Here, `K` represents the *inner or shared dimension* between the input tensors involved in the multiplication. + +## Prefill versus decode + +Contrast the GEMM behavior during the *prefill* and *decode* phases of inference, focusing on how the sequence length (`L`) changes and affects the GEMM shapes. + +In both phases, the input tensor for an MLP computation within an LLM initially has a shape like: + +``` +X: [B, L, d_model] +``` + +Where `B` is the batch size, `L` is the sequence length, and `d_model` is the hidden size. This projects to an output shape of `[B, L, d_ff]`, where `d_ff` is the MLP's expansion size. + +As established earlier, to process this with a single GEMM the batch and sequence dimensions of the input are flattened. The input effectively becomes `[B·L, d_model]` for the GEMM `X_flat @ Wᵀ`. + +The key difference between prefill and decode lies in the value of `L`: + +- *Prefill phase*: `L` is the actual input sequence length (which can be large). +- *Decode phase*: `L` is always `1`, as the model processes one token at a time to generate the next. + +This difference in `L` directly impacts the `M` parameter of the GEMM `(M, N, K)`. + +#### GEMM shape summary + +| Mode | Input shape (conceptual) | Flattened input shape | GEMM shape `(M, N, K)` | Notes | +|----------|--------------------------|-----------------------|------------------------|--------------------------------------| +| Prefill | `[B, L, d_model]` | `[B·L, d_model]` | `(B·L, d_ff, d_model)` | `L` is the prompt length | +| Decode | `[B, 1, d_model]` | `[B·1, d_model]` | `(B, d_ff, d_model)` | `L=1` for generating one token at a time | + +Notice that in the decode phase, because `L=1`, the `M` parameter of the MLP GEMM becomes simply `B`. This means the computational cost of the MLP layers in decode remains constant per token regardless of the total sequence length generated so far. The dominant `O(L)` scaling cost during decode comes from the attention mechanism, not the MLPs. + +### Real-world example: LLaMA-2 7B + +The table below shows actual data from TraceLens profiling, filtered specifically for MLP *up* and *gate* projection GEMMs in a LLaMA-2 7B model inference trace. + +For this trace: + +- `d_model = 4096` +- `d_ff = 11008` +- Batch size: `1` (`B=1`) +- Input length (for prefill): `597` (`L=597`) +- The trace included 36 decode steps. + +| name | param: M | param: N | param: K | param: bias | counts | +|----------|----------|----------|----------|-------------|--------| +| aten::mm | 1 | 11008 | 4096 | FALSE | 2304 | +| aten::mm | 597 | 11008 | 4096 | FALSE | 64 | + +Interpreting these entries based on the `M` parameter: + +- The entry with `param: M = 597` corresponds to the *prefill* phase GEMM `(B·L = 1·597)`, which happens once per layer at the beginning of inference. Since there are 32 layers, this GEMM is called `64` times (32 up + 32 gate). +- The entry with `param: M = 1` corresponds to the *decode* phase GEMM `(B = 1)`, where `L=1`. These occur at each decode step for every layer. With 36 decode steps and 64 GEMMs per step (32 layers * 2), this GEMM is called `36 × 64 = 2304` times. + +## Backward pass GEMMs + +Next, consider the backward pass during training. A forward pass GEMM operation like `Y = X @ Wᵀ + b` necessitates *two corresponding backward GEMMs* to compute gradients: + +```python +dX = dY @ W # Gradient with respect to the input → resulting shape: [B·L, d_model] +dW = dYᵀ @ X # Gradient with respect to the weight → resulting shape: [d_ff, d_model] +db = dY.sum(dim=0) # Gradient with respect to the bias → resulting shape: [d_ff] +``` + +### GEMM shapes + +| Operation | GEMM shape `(param: M, param: N, param: K)` | Description | +|-------------|---------------------------------------------|--------------------------------------| +| Forward | `(B·L, d_ff, d_model)` | `X @ Wᵀ` | +| Backward dX | `(B·L, d_model, d_ff)` | `dY @ W` (result of `[B·L, d_ff] @ [d_ff, d_model]`) | +| Backward dW | `(d_ff, B·L, d_model)` | `dYᵀ @ X` (result of `[d_ff, B·L] @ [B·L, d_model]`) | + +A closer look at the backward GEMM shapes: + +- For `dX = dY @ W`, the operation is `[B·L, d_ff] @ [d_ff, d_model]`, which results in a shape of `[B·L, d_model]`. +- For `dW = dYᵀ @ X`, the operation is `[d_ff, B·L] @ [B·L, d_model]`, yielding a shape of `[d_ff, d_model]`. + +### Real-world example: GPT-3-XL + +This table presents data from a TraceLens analysis of a single training step for GPT-3-XL. + +For this example: + +- `d_model = 2048` +- `d_ff = 8192` +- Batch size: `5` +- Sequence length: `2048` +- Thus, `param: M` for the flattened dimension is `5 × 2048 = 10240`. + +| name | param: M | param: N | param: K | count | +|-------------|----------|----------|----------|-------| +| aten::addmm | 10240 | 8192 | 2048 | 24 | +| aten::mm | 10240 | 2048 | 8192 | 24 | +| aten::mm | 8192 | 2048 | 10240 | 24 | + +Each entry can be interpreted based on the GEMM shapes: + +- The `aten::addmm` call represents the forward pass GEMM (`X @ Wᵀ`). +- The first `aten::mm` call corresponds to the backward pass for `dX` (`dY @ W`). +- The second `aten::mm` call represents the backward pass for `dW` (`dYᵀ @ X`). + +Each of these operations appears once per layer in the network. Given that GPT-3-XL has 24 layers, each of these GEMMs is called 24 times per training step, aligning with the `count` column in the table. + +## How PyTorch calls BLAS + +To fully grasp how PyTorch leverages BLAS for operations like GEMM, first understand the fundamental concept of *memory layout* for tensors and how BLAS libraries interpret the data buffers they receive. + +### Memory layout and stride + +Despite tensors often being represented as multi-dimensional arrays, their elements are stored in linear memory. For a 2D matrix, the two primary storage conventions are: + +- *Row-major*: Elements of the same row are stored consecutively in memory. PyTorch adopts this as its default layout. +- *Column-major*: Elements of the same column are stored consecutively in memory. Many traditional BLAS libraries primarily optimize for this layout. + +PyTorch's `.stride()` method provides insight into a tensor's memory arrangement. It returns a tuple where each value indicates the byte (or element, depending on datatype size) distance in linear memory to move to the next element along that dimension. + +- For a 2D tensor `T[i][j]` in *row-major* layout, `.stride()` is typically `(num_cols, 1)`. Moving to `T[i][j+1]` requires stepping 1 element, while moving to `T[i+1][j]` requires stepping `num_cols` elements. +- For a 2D tensor `T[i][j]` in *column-major* layout, `.stride()` is typically `(1, num_rows)`. Moving to `T[i+1][j]` requires stepping 1 element, while moving to `T[i][j+1]` requires stepping `num_rows` elements. + +### BLAS transpose and row-major output + +The core BLAS GEMM routine typically computes $C = \alpha \cdot op(A) \cdot op(B) + \beta \cdot C$, where $op(X)$ is either $X$ or $X^T$ depending on the `transA` and `transB` flags (`'N'` for no transpose, `'T'` for transpose) passed to the function. By default, BLAS expects input matrices corresponding to the `'N'` flag to be in column-major layout. Crucially, the resulting matrix $C$ is written into the output buffer in *column-major* format by default. + +PyTorch, however, uses row-major layout internally and desires the result of a GEMM operation to also be in row-major layout *without* an extra copy or transpose step outside of the BLAS call. PyTorch achieves this by cleverly leveraging the `trans` flags and the relationship between row-major and column-major layouts. + +A matrix $M$ stored in row-major memory has the exact same element ordering as the matrix $M^T$ stored in column-major memory. PyTorch uses this identity. To get a row-major result $C$ from a BLAS call that outputs in column-major, PyTorch requests BLAS to compute $C^T$ and write it in column-major. Since $C^T$ in column-major is $C$ in row-major, the output buffer will contain the desired row-major $C$. + +Mathematically, the operation $C = A @ B$ (where $A, B, C$ are desired in row-major) is equivalent to computing $C^T = (A @ B)^T = B^T @ A^T$. PyTorch therefore configures the BLAS call to compute $B^T @ A^T$ using the row-major data of $B$ and $A$. + +Here's how the `transA` and `transB` flags work in this context when passing *row-major data* to BLAS via a wrapper like PyTorch's: + +- Passing row-major data for matrix $M$ with `trans = 'T'` tells BLAS to mathematically treat this data as $M$. (BLAS expects row-major data for `'T'` if it wants to use the matrix directly.) +- Passing row-major data for matrix $M$ with `trans = 'N'` tells BLAS to mathematically treat this data as $M^T$. (BLAS expects column-major data for `'N'`; giving it row-major data makes it see the transpose.) + +So, to compute $C^T = B^T @ A^T$ using row-major data for $B$ and $A$ and get $C$ row-major in the output buffer: + +- Pass $B$'s row-major data as the first operand data (`A_data` in BLAS call). To make BLAS see $B^T$, use `transA = 'N'`. +- Pass $A$'s row-major data as the second operand data (`B_data` in BLAS call). To make BLAS see $A^T$, use `transB = 'N'`. +- The BLAS call becomes `gemm(transA='N', transB='N', ..., B_data, ..., A_data, ...)`. This computes $B^T @ A^T = C^T$. The result $C^T$ is written in column-major into the output buffer, which is precisely the desired $C$ in row-major. + +This standard trick using `transA='N'` and `transB='N'` with swapped, row-major inputs is a common way PyTorch achieves row-major output for a general matrix multiply `C = A @ B` where A, B are row-major. + +### Linear layer: `Y = X @ Wᵀ` + +For a linear layer computation `Y = X @ Wᵀ`, where `X` (`[M, K]`) and `W` (`[N, K]`) are in row-major layout, PyTorch desires `Y` (`[M, N]`) also in row-major. To achieve this with a BLAS routine outputting column-major, PyTorch configures BLAS to compute $Y^T = W @ X^T$. + +This involves a BLAS call computing $op(A) @ op(B)$ where $op(A)$ is $W$ and $op(B)$ is $X^T$. Using the rule that row-major data with `trans='T'` yields the matrix ($M$) and `trans='N'` yields the transpose ($M^T$): + +- BLAS operand A uses $W$'s row-major data. To see $W$, `transA = 'T'`. +- BLAS operand B uses $X$'s row-major data. To see $X^T$, `transB = 'N'`. + +The BLAS call uses `(transA='T', transB='N')` with $W$'s data as the first operand and $X$'s data as the second. It computes $W @ X^T = Y^T$, writing the result in column-major, which PyTorch interprets as the desired row-major $Y$. + +### Backward pass operations + +The backward pass similarly uses GEMMs configured to produce row-major gradients: + +- `dX = dY @ W`: With `dY` (`[M, K]`) and `W` (`[K, N]`) row-major, `dX` (`[M, N]`) is needed row-major. BLAS computes $dX^T = W^T @ dY^T$. + - BLAS operand A uses $W$'s row-major data. Needs $W^T \implies$ `transA = 'N'`. + - BLAS operand B uses $dY$'s row-major data. Needs $dY^T \implies$ `transB = 'N'`. + - BLAS call uses `(transA='N', transB='N')` on $W$'s and $dY$'s data, computing $W^T @ dY^T$. +- `dW = dYᵀ @ X`: With `dY` (`[K, N]`) and `X` (`[K, M]`) row-major, `dW` (`[N, M]`) is needed row-major. BLAS computes $dW^T = X^T @ dY$. + - BLAS operand A uses $X$'s row-major data. Needs $X^T \implies$ `transA = 'N'`. + - BLAS operand B uses $dY$'s row-major data. Needs $dY \implies$ `transB = 'T'`. + - BLAS call uses `(transA='N', transB='T')` on $X$'s and $dY$'s data, computing $X^T @ dY$. + +In summary, for PyTorch's row-major operations: + +- Forward pass `Y = X @ Wᵀ` maps to BLAS calculating $W @ X^T$ using `(T, N)` flags on the row-major data of $W$ and $X$. +- Backward pass `dX = dY @ W` maps to BLAS calculating $W^T @ dY^T$ using `(N, N)` flags on the row-major data of $W$ and $dY$. +- Backward pass `dW = dYᵀ @ X` maps to BLAS calculating $X^T @ dY$ using `(N, T)` flags on the row-major data of $X$ and $dY$. + +Revisiting the GPT-3-XL model GEMM table from TraceLens: + +| name | param: M | param: N | param: K | param: bias | param: stride_A | param: stride_B | param: transpose | +|-------------|----------|----------|----------|-------------|-----------------|-----------------|------------------| +| aten::addmm | 10240 | 8192 | 2048 | TRUE | (2048, 1) | (1, 2048) | (True, False) | +| aten::mm | 10240 | 2048 | 8192 | FALSE | (8192, 1) | (2048, 1) | (False, False) | +| aten::mm | 8192 | 2048 | 10240 | FALSE | (1, 8192) | (2048, 1) | (False, True) | + +This table shows how `aten::addmm` (forward) and `aten::mm` (backward) calls map to underlying GEMM operations. The `param: M, N, K` values are likely the dimensions of the *PyTorch operation result* (`M x N` with inner dim `K`). The `param: transpose | (transA, transB)` are the BLAS flags used by the wrapper for the operands passed to the BLAS call. + +Interpret the trace entries based on the understanding that PyTorch uses row-major data and BLAS receives flags to mathematically interpret this data for computing the transpose of the desired result: + +1. `aten::addmm` (forward): Corresponds to `Y = X @ Wᵀ`. Trace flags: `(True, False)`. This matches the `(T, N)` needed for BLAS to compute $W @ X^T$. +2. First `aten::mm` (backward dX): Corresponds to `dX = dY @ W`. Trace flags: `(False, False)`. This matches the `(N, N)` needed for BLAS to compute $W^T @ dY^T$. +3. Second `aten::mm` (backward dW): Corresponds to `dW = dYᵀ @ X`. Trace flags: `(False, True)`. This matches the `(N, T)` needed for BLAS to compute $X^T @ dY$. + +This confirms how the trace flags correspond to the BLAS transpose configurations used with row-major input data to achieve row-major output via the $C^T = B^T A^T$ trick. + +The following pseudo code summarizes the transpose flag logic. + +```{note} +This Python code snippet provides a simplified view; PyTorch's actual implementation is more intricate, accounting for the specific GEMM variant and output requirements. +``` + +```python +def is_col_major(T): + return T.stride(0) == 1 and T.stride(1) >= T.shape[0] + +def get_blas_transpose_flags(A, B): + transA = 'N' if is_col_major(A) else 'T' # If A is col-major, BLAS sees it as is ('N') + transB = 'N' if is_col_major(B) else 'T' # If B is col-major, BLAS sees it as is ('N') + return transA, transB +``` + +### Edge cases + +```{warning} +One common assumption is that flattening a tensor shape like `[B, L, d_model]` to `[B⋅L, d_model]` is a cost-free metadata operation. This is only true if the last dimension (`d_model`) is contiguous. +``` + +- If the last dimension is not contiguous, PyTorch may be forced to insert a *copy* or *transpose* operation to create a physically contiguous tensor that BLAS can work with efficiently. +- Furthermore, even if the tensor layout *could* theoretically be used by BLAS (for example, certain striding patterns), some highly tuned BLAS libraries might lack kernels optimized for those specific layouts. In such instances, a *copy* or *transpose buffer* is inserted behind the scenes by PyTorch or the BLAS wrapper. Consequently, what the BLAS routine actually operates on might not be the original tensor directly, but rather a *temporary buffer* created for compatibility or performance. + +## GEMM dimension efficiency + +Beyond mapping shapes to BLAS calls, TraceLens provides deeper insights into the efficiency of GEMM operations, specifically focusing on Tensile kernels used on ROCm GPUs. This analysis complements the existing roofline metrics by breaking down performance limitations related to how GEMM computations are tiled and scheduled onto the GPU. + +By default, the tool provides roofline metrics summarizing overall performance for operations like `aten::mm`: + +*Original output example:* + +| name | M | N | K | bias | FLOPS/Byte_first | TFLOPS/s_mean | +|----------|------|------|-------|-------|------------------|---------------| +| aten::mm | 2048 | 2048 | 10240 | False | 930.90 | 521.57 | + +The enhanced analysis adds specific efficiency metrics for Tensile GEMM kernels, derived from the kernel's structure and the problem dimensions. See the [`examples/gemm_dim_eff.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/gemm_dim_eff.ipynb) notebook for example usage. + +*New output example (Tensile kernels):* + +| name | M | N | K | ... | mt_m | mt_n | num_tiles | tile_eff | wq_eff | dim_eff | ... | TFLOPS/s_mean | +|----------|------|------|-------|-----|------|------|-----------|----------|--------|---------|-----|---------------| +| aten::mm | 2048 | 2048 | 10240 | ... | 256 | 64 | 256 | 1.00 | 0.84 | 0.84 | ... | 521.57 | + +### Key metrics + +- `mt_m`, `mt_n`: Macro-tile dimensions extracted from the kernel name. +- `num_tiles`: Total number of tiles after padding. +- `tile_eff`: Tile quantization efficiency. Measures efficiency loss due to input matrix dimensions not being perfectly divisible by tile dimensions. +- `wq_eff`: Wave quantization efficiency. Measures efficiency loss due to the total number of tiles not perfectly filling all compute units in the final processing wave. +- `dim_eff`: Net dimension efficiency. The product of `tile_eff` and `wq_eff`, representing the combined efficiency impact of tiling and scheduling. + +### Understanding the concepts + +#### Tile quantization efficiency (`tile_eff`) + +Tiled computations divide matrices into smaller sub-blocks (tiles: `mt_m x mt_n`) for processing. If the matrix dimensions (M, N) are not exact multiples of these tile sizes, the implementation effectively pads the matrices to the nearest multiple of the tile size. + +Padded dimensions: + +``` +M_pad = ceil(M / mt_m) × mt_m +N_pad = ceil(N / mt_n) × mt_n +``` + +This padding introduces extra computations on regions that don't contribute to the final result. + +Tile efficiency: + +``` +tile_eff = (M × N) / (M_pad × N_pad) +``` + +Values `< 1` indicate wasted computation due to padding. + +#### Wave quantization efficiency (`wq_eff`) + +GPUs execute tiles across many compute units (CUs), also known as streaming multiprocessors (SMs). If the total number of tiles isn't a multiple of the number of available CUs, the final wave will leave some CUs idle. + +Total tiles: + +``` +B = (M_pad × N_pad) / (mt_m × mt_n) +``` + +Number of waves: + +``` +num_waves = ceil(B / num_cus) +``` + +Wave efficiency: + +``` +wq_eff = B / (num_waves × num_cus) +``` + +#### Net dimension efficiency (`dim_eff`) + +This is the combined impact: + +``` +dim_eff = tile_eff × wq_eff +``` + +### Why these metrics matter: diagnosing bottlenecks + +For compute-bound GEMMs, actual performance is often less than peak theoretical. These metrics help explain why: + +- Low `tile_eff`: Indicates high padding overhead. +- Low `wq_eff`: Indicates poor utilization of compute units in the final wave. + +GEMM tuning can help improve these metrics to a certain extent. + +However, these are just part of the picture. Even when tiling and wave quantization are optimal, there can still be performance degradation due to: + +- Shader clock (`sclk`) throttling: Some workloads may not run at peak clock speeds due to power or thermal constraints. +- Cache behavior: Cache misses can occur even for compute-bound GEMMs, affecting throughput and instruction efficiency. + +These factors should be analyzed alongside the dimension efficiency metrics to get a complete performance picture. + +### How it's calculated + +Step by step: + +1. Identify problem shape: Extract M, N, K from input tensors. + + ```{note} + In BLAS libraries, M and N are swapped relative to PyTorch's view, as BLAS libraries are column-major while PyTorch is row-major. This mapping is handled internally. See [PyTorch source - Blas.cpp](https://github.com/pytorch/pytorch/blob/main/aten/src/ATen/native/cuda/Blas.cpp#L102-L129) for more detail. This is accounted for in TraceLens as well when computing the tiles across the M and N dimensions. + ``` + +2. Extract tile size: Parse `mt_m`, `mt_n` from kernel name (for example, `MT256x144x32` → `mt_m = 256, mt_n = 144`). + +3. Calculate tiles: + + ``` + float_tiles_m = M / mt_m + float_tiles_n = N / mt_n + tiles_m = ceil(float_tiles_m) + tiles_n = ceil(float_tiles_n) + num_tiles = tiles_m * tiles_n + ``` + +4. `tile_eff`: + + ``` + tile_eff = (M * N) / (tiles_m * mt_m * tiles_n * mt_n) + ``` + +5. `wq_eff` (assume `num_cus` known, for example 304 for MI300X): + + ``` + float_rounds = num_tiles / num_cus + rounds = ceil(float_rounds) + wq_eff = num_tiles / (rounds * num_cus) + ``` + +6. `dim_eff`: + + ``` + dim_eff = tile_eff * wq_eff + ``` + +### Calculation examples + +Assuming `num_cus = 304` (for example, MI300X). + +#### Example 1: Perfect tiling, suboptimal wave quantization + +- Input: M = 10240, N = 2048, K = 2048 +- Kernel tile: `mt_m = 256`, `mt_n = 64` + +```text +float_tiles_m = 40 +float_tiles_n = 32 +tiles_m = 40, tiles_n = 32 +tile_eff = 1.0 +num_tiles = 1280 +float_rounds = 4.21 +rounds = 5 +wq_eff = 0.842 +dim_eff = 0.842 +``` + +#### Example 2: Slight padding, good wave quantization + +- Input: M = 2048, N = 10240, K = 2048 +- Kernel tile: `mt_m = 256`, `mt_n = 144` + +```text +float_tiles_m = 8 +float_tiles_n = 71.11 +tiles_m = 8, tiles_n = 72 +tile_eff ≈ 0.9877 +num_tiles = 576 +float_rounds = 1.895 +rounds = 2 +wq_eff ≈ 0.947 +dim_eff ≈ 0.935 +``` + +### Important considerations + +- Scope: This analysis assumes standard tiled GEMMs. Techniques like Stream-K or Split-K are not yet modeled. +- Relevance: These metrics are most useful for compute-bound GEMMs. Use FLOPS/Byte to determine whether a GEMM is compute- or memory-bound. + +For hands-on usage, work through the [`examples/gemm_dim_eff.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/gemm_dim_eff.ipynb) notebook. This is a new feature, so please report any issues or suggestions to the TraceLens team. + +## Related topics + +- [Trace2Tree](../conceptual/trace2tree.md) +- [Perf model walkthrough](../conceptual/perf-model-walkthrough.md) +- [Torch profiling analysis](../conceptual/torch-profiling-analysis.md) +- [Performance report columns](../reference/perf-report-columns.md) +- [Generate a performance report from PyTorch](../how-to/generate-perf-report-pytorch.md) diff --git a/docs_original/conceptual/imgs/profiling_analysis_fig1.png b/docs/conceptual/imgs/profiling_analysis_fig1.png similarity index 100% rename from docs_original/conceptual/imgs/profiling_analysis_fig1.png rename to docs/conceptual/imgs/profiling_analysis_fig1.png diff --git a/docs_original/conceptual/imgs/profiling_analysis_fig2.png b/docs/conceptual/imgs/profiling_analysis_fig2.png similarity index 100% rename from docs_original/conceptual/imgs/profiling_analysis_fig2.png rename to docs/conceptual/imgs/profiling_analysis_fig2.png diff --git a/docs_original/conceptual/imgs/profiling_analysis_fig3.png b/docs/conceptual/imgs/profiling_analysis_fig3.png similarity index 100% rename from docs_original/conceptual/imgs/profiling_analysis_fig3.png rename to docs/conceptual/imgs/profiling_analysis_fig3.png diff --git a/docs_original/conceptual/imgs/profiling_analysis_fig4.png b/docs/conceptual/imgs/profiling_analysis_fig4.png similarity index 100% rename from docs_original/conceptual/imgs/profiling_analysis_fig4.png rename to docs/conceptual/imgs/profiling_analysis_fig4.png diff --git a/docs_original/conceptual/imgs/profiling_analysis_fig5.png b/docs/conceptual/imgs/profiling_analysis_fig5.png similarity index 100% rename from docs_original/conceptual/imgs/profiling_analysis_fig5.png rename to docs/conceptual/imgs/profiling_analysis_fig5.png diff --git a/docs_original/conceptual/imgs/profiling_analysis_fig6.png b/docs/conceptual/imgs/profiling_analysis_fig6.png similarity index 100% rename from docs_original/conceptual/imgs/profiling_analysis_fig6.png rename to docs/conceptual/imgs/profiling_analysis_fig6.png diff --git a/docs_original/triton_perf_model_walkthrough.md b/docs/conceptual/perf-model-walkthrough.md similarity index 76% rename from docs_original/triton_perf_model_walkthrough.md rename to docs/conceptual/perf-model-walkthrough.md index 968b33908..2f5edc4e1 100644 --- a/docs_original/triton_perf_model_walkthrough.md +++ b/docs/conceptual/perf-model-walkthrough.md @@ -1,37 +1,23 @@ -# Triton Kernel Performance Model +# Triton kernel performance model -How TraceLens computes GFLOPS, TB/s, and other performance metrics for -torch.compile-generated Triton kernels. - -**Source code:** `TraceLens/PerfModel/triton_compiled_perf_model.py` - -## Table of Contents +```{meta} +:description: How TraceLens computes GFLOPS, TB/s, and other performance metrics for torch.compile-generated Triton kernels, including the metric formulas and worked examples. +:keywords: TraceLens, Triton, torch.compile, TorchInductor, performance model, GFLOPS, TB/s, roofline, pointwise, reduction, PyTorch profiler, ROCm, AMD +``` -1. [Background](#1-background) -2. [Requirements and PyTorch Version Compatibility](#2-requirements-and-pytorch-version-compatibility) - - [Trace capture requirements](#21-trace-capture-requirements) - - [PyTorch version compatibility](#22-pytorch-version-compatibility) - - [`TORCHINDUCTOR_UNIQUE_KERNEL_NAMES`](#23-torchinductor_unique_kernel_names) - - [Summary: recommended setup](#24-summary-recommended-setup) -3. [How It Works](#3-how-it-works) - - [Data flow](#31-data-flow) - - [Two-tier metadata extraction](#32-two-tier-metadata-extraction) -4. [Inductor Triton Kernel Types](#4-inductor-triton-kernel-types) -5. [Metric Formulas](#5-metric-formulas) -6. [Worked Example: Pointwise Kernel (SwiGLU)](#6-worked-example-pointwise-kernel-swiglu) -7. [Worked Example: Reduction Kernel (RMSNorm)](#7-worked-example-reduction-kernel-rmsnorm) -8. [Results for the Example TransformerBlock](#8-results-for-the-example-transformerblock) -9. [References](#references) +This topic explains how TraceLens computes GFLOPS, TB/s, and other performance +metrics for `torch.compile`-generated Triton kernels. ---- +The performance model is implemented in +[`TraceLens/PerfModel/triton_compiled_perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/triton_compiled_perf_model.py). -## 1. Background +## Background When you run `torch.compile(model)`, [TorchDynamo](https://docs.pytorch.org/docs/stable/torch.compiler_deepdive.html) @@ -49,17 +35,15 @@ triton_poi_fused__unsafe_view_mul_silu_2 └── generated by Triton/Inductor ``` -**Pointwise** kernels (`triton_poi_*`) process each element independently. +*Pointwise* kernels (`triton_poi_*`) process each element independently. One loop dimension: `xnumel` (total elements). -**Reduction** kernels (`triton_red_*`, `triton_per_*`) reduce along one axis. +*Reduction* kernels (`triton_red_*`, `triton_per_*`) reduce along one axis. Two loop dimensions: `xnumel` (outer) and `rnumel` (reduction axis). ---- +## Requirements and PyTorch version compatibility -## 2. Requirements and PyTorch Version Compatibility - -### 2.1 Trace capture requirements +### Trace capture requirements TraceLens uses a two-tier approach (V2 primary, V1 fallback) to extract perf metrics. For V2 to work, the trace must be captured with @@ -76,10 +60,12 @@ with torch.profiler.profile( model(inputs) ``` -Without `record_shapes=True`, the trace will not contain `Concrete Inputs`, -`Input Dims`, or `Input type` — and V2 will fall back to V1. +```{note} +Without `record_shapes=True`, the trace won't contain `Concrete Inputs`, +`Input Dims`, or `Input type` — and V2 falls back to V1. +``` -### 2.2 PyTorch version compatibility +### PyTorch version compatibility V2 requires specific trace event fields. The following table shows verified availability (confirmed from actual traces captured on each version): @@ -94,33 +80,35 @@ availability (confirmed from actual traces captured on each version): | `num_warps` | No | Yes | Not used (informational) | | `num_stages` | No | Yes | Not used (informational) | -**V2 core fields are available since PyTorch 2.4.** The extra fields -(`kernel_file`, `num_warps`, etc.) were added later but are not required +V2 core fields are available since PyTorch 2.4. The extra fields +(`kernel_file`, `num_warps`, and so on) were added later but aren't required by TraceLens. -### 2.3 `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES` +### `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES` Inductor controls kernel naming via `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES`. -When **enabled**, kernels get descriptive names that encode the kernel -category and fused ops (e.g., `triton_poi_fused_add_mul_silu_0`). -When **disabled**, kernels are named generically (`triton_0`, `triton_1`). +When *enabled*, kernels get descriptive names that encode the kernel +category and fused ops (for example, `triton_poi_fused_add_mul_silu_0`). +When *disabled*, kernels are named generically (`triton_0`, `triton_1`). -This is a **compile-time** setting — it must be set when the trace is +```{note} +This is a *compile-time* setting — it must be set when the trace is captured, not when TraceLens analyzes it. +``` -**Default by PyTorch version:** +Default by PyTorch version: | PyTorch Version | Default | Notes | |-----------------|---------|-------| -| 2.4 – 2.5 | **Disabled** | Must opt in: `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1` | -| 2.6+ | **Enabled** | [Default changed to `"1"`](https://github.com/pytorch/pytorch/blob/v2.6.0/torch/_inductor/config.py) | +| 2.4 – 2.5 | Disabled | Must opt in: `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1` | +| 2.6+ | Enabled | [Default changed to `"1"`](https://github.com/pytorch/pytorch/blob/v2.6.0/torch/_inductor/config.py) | Source: [`torch/_inductor/config.py`](https://github.com/pytorch/pytorch/blob/main/torch/_inductor/config.py) — verified at tags [v2.4.0](https://github.com/pytorch/pytorch/blob/v2.4.0/torch/_inductor/config.py) and [v2.6.0](https://github.com/pytorch/pytorch/blob/v2.6.0/torch/_inductor/config.py). -**Impact on TraceLens:** +Impact on TraceLens: | Metric | Unique names enabled | Unique names disabled | |--------|---------------------|----------------------| @@ -136,19 +124,17 @@ capture to get FLOPs: TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1 python your_training_script.py ``` -### 2.4 Summary: recommended setup +### Recommended setup Verified on PyTorch 2.4 and 2.11 (with `record_shapes=True`): -- **PyTorch 2.11** — recommended, everything works out of the box -- **PyTorch 2.4–2.5** — works with `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1` for FLOPs -- **PyTorch 2.6–2.10** — expected to work (unique names enabled by default per [source code](https://github.com/pytorch/pytorch/blob/v2.6.0/torch/_inductor/config.py)) but not directly verified - ---- +- PyTorch 2.11 — recommended, everything works out of the box +- PyTorch 2.4–2.5 — works with `TORCHINDUCTOR_UNIQUE_KERNEL_NAMES=1` for FLOPs +- PyTorch 2.6–2.10 — expected to work (unique names enabled by default per [source code](https://github.com/pytorch/pytorch/blob/v2.6.0/torch/_inductor/config.py)) but not directly verified -## 3. How It Works +## How it works -### 3.1 Data flow +### Data flow ``` Chrome Trace (.json.gz) @@ -193,13 +179,13 @@ Chrome Trace (.json.gz) │ (tree_perf.py:compute_perf_metrics) ``` -### 3.2 Two-tier metadata extraction +### Two-tier metadata extraction TraceLens needs three pieces of information to compute metrics: -1. **Element counts** — `xnumel` and `rnumel` -2. **Data types and shapes** — to calculate bytes moved -3. **Fused ATen ops** — to calculate FLOPs +1. Element counts — `xnumel` and `rnumel` +2. Data types and shapes — to calculate bytes moved +3. Fused ATen ops — to calculate FLOPs These are obtained through a two-tier approach. V2 is tried first; V1 is the fallback: @@ -211,10 +197,10 @@ if self._meta is None: self._meta = _lookup(self.name, kwargs.get("inductor_cache_dir")) # V1: cache fallback ``` -### V2: Trace-Intrinsic (primary) +### V2: trace-intrinsic (primary) Extracts metadata directly from the Chrome trace event's `args` dict. -Available in PyTorch 2.4+ traces (see [Section 2.2](#22-pytorch-version-compatibility)). +Available in PyTorch 2.4+ traces (see [PyTorch version compatibility](#pytorch-version-compatibility)). No disk I/O needed — the trace is self-contained. ```json @@ -234,13 +220,14 @@ No disk I/O needed — the trace is self-contained. | `Input Dims` | Per-tensor shapes for exact byte calculation | | `Input type` | C10 dtype strings (`c10::BFloat16` = 2 bytes, `c10::Float` = 4 bytes) | -### V1: Cache-Based (fallback) +### V1: cache-based (fallback) -Parses the Inductor wrapper `.py` files from the torch.compile cache directory. +Parses the Inductor wrapper `.py` files from the `torch.compile` cache directory. Used when trace args are missing (older PyTorch traces) or when the trace was collected without `record_shapes=True`. Cache dirs searched (first match wins): + 1. `--inductor_cache_dir` CLI argument (explicit) 2. `$TORCHINDUCTOR_CACHE_DIR` environment variable 3. `~/.cache/torchinductor` @@ -260,9 +247,9 @@ size_hints=[268435456] # older list format 'signature': {'in_out_ptr0': '*bf16', 'in_ptr0': '*bf16', 'xnumel': 'i32'} ``` -### V1 vs V2 comparison +### V1 compared with V2 -| | V2 (Trace-Intrinsic) | V1 (Cache-Based) | +| | V2 (trace-intrinsic) | V1 (cache-based) | |--|----------------------|-------------------| | Data source | Chrome trace `event["args"]` | Inductor cache `.py` files on disk | | PyTorch version | 2.4+ | Any | @@ -272,9 +259,7 @@ size_hints=[268435456] # older list format | External dependency | None — trace is self-contained | Requires cache directory on disk | | Works on shared traces | Yes | Only if cache is accessible | ---- - -## 4. Inductor Triton Kernel Types +## Inductor Triton kernel types Inductor generates Triton kernels in several categories, each with a distinct 3-character prefix derived from the category name (`category[:3]`). @@ -283,25 +268,25 @@ These 6 categories have been stable from PyTorch 2.3 through 2.11+ | Prefix | Category | Description | |--------|----------|-------------| -| `triton_poi_` | `pointwise` | Element-wise ops (add, mul, relu, silu, etc.). One loop dimension: `xnumel`. Fused ops stay in registers — no intermediate global memory writes. | -| `triton_red_` | `reduction` | Reduction ops (sum, mean, batch norm, etc.) using a looped strategy. Two dimensions: `xnumel` (outer), `rnumel` (reduction axis). Used when the reduction axis is too large for persistent strategy. | +| `triton_poi_` | `pointwise` | Element-wise ops (add, mul, relu, silu, and so on). One loop dimension: `xnumel`. Fused ops stay in registers — no intermediate global memory writes. | +| `triton_red_` | `reduction` | Reduction ops (sum, mean, batch norm, and so on) using a looped strategy. Two dimensions: `xnumel` (outer), `rnumel` (reduction axis). Used when the reduction axis is too large for persistent strategy. | | `triton_per_` | `persistent_reduction` | Same reduction ops, but keeps the entire reduction axis in registers/SRAM. Used when `rnumel` is small enough (~1024 elements). Inductor's [`should_use_persistent_reduction()`](https://karthick.ai/blog/2025/Learn-By-Doing-Torchinductor-Reduction/) heuristic decides. | | `triton_tem_` | `template` | Complex ops like matrix multiplication (mm, addmm, _scaled_mm) using pre-defined Triton templates with optional fused epilogues. | -| `triton_for_` | `foreach` | Fused operations across lists of tensors (e.g., optimizer step updates applied to all parameters at once). | -| `triton_spl_` | `split_scan` | Split scan operations (e.g., cumulative sums with decoupled lookback). | +| `triton_for_` | `foreach` | Fused operations across lists of tensors (for example, optimizer step updates applied to all parameters at once). | +| `triton_spl_` | `split_scan` | Split scan operations (for example, cumulative sums with decoupled lookback). | -**TraceLens coverage:** +TraceLens coverage: | Category | Modeled by TraceLens? | Notes | |----------|----------------------|-------| | `triton_poi_` | Yes | `TritonCompiledPerfModel` computes FLOPs and bytes | | `triton_red_` | Yes | Same perf model, two-dimensional (xnumel × rnumel) | | `triton_per_` | Yes | Treated identically to `triton_red_` | -| `triton_tem_` | No (not needed) | GEMM ops already modeled by `aten_mm`, `aten_scaled_mm`, etc. | +| `triton_tem_` | No (not needed) | General matrix multiplication (GEMM) ops already modeled by `aten_mm`, `aten_scaled_mm`, and so on | | `triton_for_` | No | Typically optimizer-step ops, not performance-critical | | `triton_spl_` | No | Scan operations, uncommon in typical workloads | -**Naming pattern:** +Naming pattern: ``` triton_{category}_fused_{op1}_{op2}_{...}_{index} @@ -311,9 +296,7 @@ The fused ops are listed alphabetically. The index is a sequential counter within the compiled graph. When `unique_kernel_names` is disabled, the entire name collapses to `triton_{index}`. ---- - -## 5. Metric Formulas +## Metric formulas ### FLOPs @@ -322,19 +305,19 @@ flops = sum(flops_per_elem[op] for op in fused_aten_ops) * xnumel * rnumel ``` The `flops_per_elem` table is in `_FLOPS_PER_ELEM`. Examples: `add`=1, `mul`=1, -`silu`=4, `gelu`=8, `exp`=4, `pow`=2, `rsqrt`=2. Memory-only ops (`clone`, +`silu`=4, `gelu`=8, `exp`=4, `pow`=2, `rsqrt`=2. Memory-only ops (`clone`, `_to_copy`, `_unsafe_view`) contribute 0. ### Bytes -**V2 (trace args):** +V2 (trace args): ``` bytes = sum(prod(shape_i) * bytes_per_elem_i for each tensor input) + ptr_bytes[0] * xnumel # only for pointwise (output write) ``` -**V1 (cache files):** +V1 (cache files): ``` # Reduction (rnumel > 1): @@ -349,7 +332,7 @@ read and written — they appear once in the signature but move data twice. ### Throughput -All throughput metrics use the **busy kernel time** from `GPUEventAnalyser` +All throughput metrics use the *busy kernel time* from `GPUEventAnalyser` (aggregated GPU execution time, not the CPU-side `event["dur"]`): ``` @@ -359,14 +342,12 @@ FLOPS/Byte = flops / bytes_moved Data Moved (MB) = bytes_moved / (1024 * 1024) ``` ---- - -## 6. Worked Example: Pointwise Kernel (SwiGLU) +## Worked example: pointwise kernel (SwiGLU) Kernel: `triton_poi_fused__unsafe_view_mul_silu_2` Operation: `silu(gate_proj(x)) * up_proj(x)` in the SwiGLU MLP -### 6.1 Trace event args (V2 input) +### Trace event args (V2 input) ``` Concrete Inputs: ['', '', '268435456'] @@ -374,18 +355,19 @@ Input Dims: [[8, 4096, 8192], [32768, 8192], []] Input type: ['c10::BFloat16', 'c10::BFloat16', 'Scalar'] ``` -### 6.2 Element count extraction +### Element count extraction Integer scalars from `Concrete Inputs` (empty strings and non-integer values like floats or booleans are skipped): `[268435456]` Pointwise kernel → last integer scalar is `xnumel`: + - `xnumel = 268,435,456` (= 8 x 4,096 x 8,192) - `rnumel = 1` -### 6.3 Bytes calculation +### Bytes calculation -**Step 1:** Calculate bytes for each tensor input: +Step 1: Calculate bytes for each tensor input: | Input | Dims | Type | Bytes per elem | Elements | Bytes | |-------|------|------|---------------|----------|-------| @@ -397,17 +379,17 @@ Pointwise kernel → last integer scalar is `xnumel`: input_bytes = (268,435,456 * 2) + (268,435,456 * 2) = 1,073,741,824 ``` -**Step 2:** Add output write for pointwise kernels. +Step 2: Add output write for pointwise kernels. In pointwise kernels, `in_out_ptr0` is both read and written — the output -overwrites the input buffer. The input bytes above already count the read. +overwrites the input buffer. The input bytes above already count the read. V2 adds one extra write of `ptr_bytes[0] * xnumel`: ``` output_write = 2 * 268,435,456 = 536,870,912 ``` -**Total:** +Total: ``` bytes_moved = 1,073,741,824 + 536,870,912 @@ -415,7 +397,7 @@ bytes_moved = 1,073,741,824 + 536,870,912 = 1,536 MB ``` -### 6.4 FLOPs calculation +### FLOPs calculation Fused ops parsed from the kernel name: `aten._unsafe_view`, `aten.mul`, `aten.silu` @@ -424,7 +406,7 @@ Fused ops parsed from the kernel name: `aten._unsafe_view`, `aten.mul`, `aten.si | `aten._unsafe_view` | 0 (memory-only) | | `aten.mul` | 1 | | `aten.silu` | 4 | -| **Total** | **5** | +| Total | 5 | ``` flops = 5 * xnumel * rnumel @@ -433,16 +415,16 @@ flops = 5 * xnumel * rnumel GFLOPS = 1,342,177,280 / 1e9 = 1.342 ``` -### 6.5 Throughput metrics +### Throughput metrics -GPU kernel time from the Chrome trace: **505.3 us** +GPU kernel time from the Chrome trace: 505.3 us ``` TB/s = (1,610,612,736 / 1e12) / (505.3 / 1e6) = 3.19 TB/s TFLOPS/s = (1.342 / 1e3) / (505.3 / 1e6) = 2.66 TFLOPS/s ``` -### 6.6 Summary +### Summary | Metric | Value | |--------|-------| @@ -452,14 +434,12 @@ TFLOPS/s = (1.342 / 1e3) / (505.3 / 1e6) = 2.66 TFLOPS/s | TB/s | 3.19 | | TFLOPS/s | 2.66 | ---- - -## 7. Worked Example: Reduction Kernel (RMSNorm) +## Worked example: reduction kernel (RMSNorm) Kernel: `triton_red_fused_add_mean_mul_pow_rsqrt_0` Operation: RMSNorm — `x * rsqrt(mean(x^2) + eps) * weight` -### 7.1 Trace event args (V2 input) +### Trace event args (V2 input) ``` Concrete Inputs: ['', '', '', '32768', '2048'] @@ -467,15 +447,16 @@ Input Dims: [[8, 4096, 2048], [2048], [8, 4096, 2048], [], []] Input type: ['c10::BFloat16', 'c10::BFloat16', 'c10::BFloat16', 'Scalar', 'Scalar'] ``` -### 7.2 Element count extraction +### Element count extraction Integer scalars from `Concrete Inputs` (non-integer values skipped): `[32768, 2048]` Reduction kernel → last two integer scalars are `xnumel` and `rnumel`: + - `xnumel = 32,768` (= 8 x 4,096 = batch x seq_len) - `rnumel = 2,048` (= hidden_dim, the reduction axis) -### 7.3 Bytes calculation (V2) +### Bytes calculation (V2) | Input | Dims | Type | Bytes per elem | Elements | Bytes | |-------|------|------|---------------|----------|-------| @@ -492,7 +473,7 @@ bytes_moved = 134,217,728 + 4,096 + 134,217,728 ≈ 256 MB ``` -### 7.4 Bytes calculation (V1 — for comparison) +### Bytes calculation (V1 — for comparison) V1 uses `xnumel`, `rnumel`, and per-pointer byte widths from the signature instead of per-tensor shapes: @@ -514,11 +495,13 @@ bytes = sum(ptr_bytes[:-1]) * xnumel * rnumel + ptr_bytes[-1] * xnumel ≈ 256 MB ``` -Note: V1 and V2 give slightly different values because V1 assumes all input +```{note} +V1 and V2 give slightly different values because V1 assumes all input pointers access the full `xnumel * rnumel` grid, while V2 uses exact tensor shapes (the weight tensor `in_ptr1` is only [2048], not [32768, 2048]). +``` -### 7.5 FLOPs calculation +### FLOPs calculation Fused ops: `aten.add`, `aten.mean`, `aten.mul`, `aten.pow`, `aten.rsqrt` @@ -529,28 +512,26 @@ Fused ops: `aten.add`, `aten.mean`, `aten.mul`, `aten.pow`, `aten.rsqrt` | `aten.mul` | 1 | | `aten.pow` | 2 | | `aten.rsqrt` | 2 | -| **Total** | **7** | +| Total | 7 | ``` flops = 7 * 32,768 * 2,048 = 469,762,048 GFLOPS = 0.470 ``` -### 7.6 Throughput metrics +### Throughput metrics -GPU kernel time: **79.4 us** +GPU kernel time: 79.4 us ``` TB/s = (268,439,552 / 1e12) / (79.4 / 1e6) = 3.38 TB/s TFLOPS/s = (0.470 / 1e3) / (79.4 / 1e6) = 5.92 TFLOPS/s ``` ---- - -## 8. Results for the Example TransformerBlock +## Results for the example transformer block Model: `TransformerBlock(dim=2048, n_heads=16, mlp_ratio=4)`, batch=8, -seq_len=4096, dtype=bf16. Traced with PyTorch 2.11+rocm7.2 on MI300X. +seq_len=4096, dtype=bf16. Traced with PyTorch 2.11+rocm7.2 on MI300X. | Kernel | GFLOPS | Data Moved (MB) | FLOPS/Byte | TB/s | TFLOPS/s | |--------|--------|-----------------|------------|------|----------| @@ -559,8 +540,6 @@ seq_len=4096, dtype=bf16. Traced with PyTorch 2.11+rocm7.2 on MI300X. | `triton_poi_fused__unsafe_view_mul_silu_2` (SwiGLU) | 1.342 | 1,536 | 0.83 | 3.19 | 2.66 | | `triton_poi_fused__unsafe_view_add_3` (residual add) | 0.067 | 512 | 0.12 | 3.81 | 0.48 | ---- - ## References - [PyTorch Blog: Why Is PyTorch Compile So Fast — Kernel Fusion](https://pytorch.org/blog/why-is-pytorch-compile-so-fast-kernel-fusion/) @@ -571,3 +550,11 @@ seq_len=4096, dtype=bf16. Traced with PyTorch 2.11+rocm7.2 on MI300X. - [PyTorch Inductor config.py](https://github.com/pytorch/pytorch/blob/main/torch/_inductor/config.py) - [PyTorch Inductor codegen/triton.py](https://github.com/pytorch/pytorch/blob/main/torch/_inductor/codegen/triton.py) - [PyTorch Inductor wrapper_benchmark.py](https://github.com/pytorch/pytorch/blob/main/torch/_inductor/wrapper_benchmark.py) + +## Related topics + +- [GEMM analysis](../conceptual/gemm-analysis.md) +- [Trace2Tree](../conceptual/trace2tree.md) +- [Generate a performance report from a PyTorch trace](../how-to/generate-perf-report-pytorch.md) +- [Performance report columns](../reference/perf-report-columns.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/conceptual/shape-metadata.md b/docs/conceptual/shape-metadata.md new file mode 100644 index 000000000..58af9ef62 --- /dev/null +++ b/docs/conceptual/shape-metadata.md @@ -0,0 +1,151 @@ + + +# Tensor shape metadata in PyTorch profiler traces +```{meta} +:description: A conceptual explanation of when tensor shapes appear in PyTorch profiler traces, why some operations lack them, and how to register operations so shapes are recorded. +:keywords: tensor shapes, PyTorch profiler, cpu_op, dispatcher, torch.library, custom op, Triton, FlashInfer, vLLM, SGLang, Input Dims, backward events, TraceLens +``` + +Tensor shapes are one of the most useful pieces of metadata in a PyTorch profiler trace: they let you match trace events to model architecture, analyze kernel efficiency, and spot unusual stride or dtype patterns. But shapes aren't always present. This topic explains when they're available, why they sometimes go missing, and how to get them back. + +## When are shapes available? + +The simple rule is that shapes are available when an operation goes through PyTorch's dispatcher as a `cpu_op`. + +In profiler traces, look for events with: + +- `"cat": "cpu_op"` +- `"args": { "Input Dims": [...], "Input type": [...] }` + +### Operations that have shapes + +| Operation type | Example | Why it works | +|---|---|---| +| Native ATen ops | `aten::mm`, `aten::linear` | Built into the PyTorch dispatcher | +| Registered custom ops | `torch.ops.mylib.my_op` | Registered via `torch.library` | +| TorchScript ops | JIT-compiled functions | Goes through the dispatcher | +| Custom `autograd.Function` | User-defined forward | Forward call is dispatched | +| Distributed collectives | `record_param_comms` | Instrumented by PyTorch | + +### Operations that don't have shapes + +| Operation type | Example | Why it fails | +|---|---|---| +| Plain Python functions | `def my_kernel(x, y): ...` | Bypasses the dispatcher | +| Triton kernels | `@triton.jit` | Called as a Python function | +| FlashInfer ops | GEMM, MoE, attention | Registration intentionally disabled | +| Backward engine events | `autograd::engine::evaluate_function:*Backward` | Empty inputs passed to the profiler | + +### Quick reference: event categories + +``` +cpu_op → Usually has shapes (exception: backward events) +python_function → No shapes +kernel → No shapes (GPU-side event) +cuda_runtime → No shapes (API-level event) +``` + +## How to get shapes when they're missing + +If an operation lacks shapes, the fix is to register it with the dispatcher through `torch.library`. There are two approaches. + +### Option 1: register as a custom op + +Wrap the operation with `torch.library.custom_op`: + +```python +@torch.library.custom_op("mylib::triton_matmul", mutates_args=()) +def triton_matmul(a: torch.Tensor, b: torch.Tensor) -> torch.Tensor: + return my_triton_kernel(a, b) + +# Now call via torch.ops +result = torch.ops.mylib.triton_matmul(a, b) +``` + +The event then appears as `cpu_op` with `Input Dims`. + +The `mutates_args` argument tells PyTorch which input arguments the function modifies in-place: + +- `mutates_args=()` — no inputs are modified (a pure function). +- `mutates_args=("output",)` — the `output` argument is modified in-place. +- Required for correctness with `torch.compile` and autograd. + +### Option 2: lighter-weight registration (vLLM approach) + +Use the lower-level `Library` API directly. For reference, see [`vllm/utils/torch_utils.py:742` — `direct_register_custom_op`](https://github.com/vllm-project/vllm/blob/0b225fb7b22f8ae1f5fc8ee618640ae0983c76de/vllm/utils/torch_utils.py#L742-L780). + +```python +from torch.library import Library +from torch._library.infer_schema import infer_schema + +my_lib = Library("mylib", "FRAGMENT") + +def register_op(op_name, op_func, mutates_args=None): + schema = infer_schema(op_func, mutates_args=mutates_args or []) + my_lib.define(op_name + schema) + my_lib.impl(op_name, op_func, dispatch_key="CUDA") + +# Register +register_op("triton_matmul", triton_matmul_impl) +``` + +### Choosing between the two options + +| Aspect | Option 1: `custom_op` | Option 2: `Library.define()` | +|---|---|---| +| Simplicity | Decorator, minimal code | More boilerplate | +| Overhead | Higher (full dispatcher) | Lower (direct to CUDA) | +| `torch.compile` | Full support | Works with `register_fake` | +| Use when | Prototyping, one-off ops | Performance-critical paths | + +## Framework-specific status + +| Framework | Current state | How to get shapes | +|---|---|---| +| PyTorch ATen | Has shapes | Already works | +| vLLM (standard) | Has shapes | Uses `direct_register_custom_op` | +| vLLM (OAI Triton) | Missing | Needs registration | +| FlashInfer | Disabled | Set `FLASHINFER_ENABLE_PROFILER_METADATA=1` (proposed) | +| SGLang (CUDA) | Has shapes | Uses `torch.ops.sgl_kernel.*` | +| SGLang (Triton) | Missing | Needs registration | + +## Summary + +- Shapes are tied to dispatcher registration. If it's a `cpu_op`, it has shapes. +- The fix is straightforward: register operations via `torch.library`. +- Start simple with `@torch.library.custom_op`. +- Optimize if needed by switching to `Library.define()` for lower overhead. +- FlashInfer disabled shape recording on purpose — a performance versus observability trade-off that can be re-enabled. + +## Appendix + +### Backward events and sequence number linking + +Backward engine events (`autograd::engine::evaluate_function:*Backward`) are `cpu_op` but don't have `Input Dims`. They have `Sequence number` instead, which links to the corresponding forward op. + +```python +def get_backward_shapes(trace_events, backward_event): + seq_num = backward_event["args"].get("Sequence number") + if seq_num is None: + return None + + # Find forward op with same sequence number + for event in trace_events: + if event.get("cat") == "cpu_op" and \ + event["args"].get("Sequence number") == seq_num and \ + "Backward" not in event.get("name", ""): + return event["args"].get("Input Dims") + return None +``` + +## Related topics + +- [Trace2Tree](../conceptual/trace2tree.md) +- [Understanding PyTorch traces](../conceptual/torch-profiling-analysis.md) +- [Generate a performance report from PyTorch traces](../how-to/generate-perf-report-pytorch.md) +- [Performance report columns](../reference/perf-report-columns.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/conceptual/torch-profiling-analysis.md b/docs/conceptual/torch-profiling-analysis.md new file mode 100644 index 000000000..cde3c7ee5 --- /dev/null +++ b/docs/conceptual/torch-profiling-analysis.md @@ -0,0 +1,151 @@ + + +# Understanding PyTorch traces +```{meta} +:description: A conceptual walkthrough of how PyTorch traces capture host and GPU execution, how a single Python operation expands into GPU kernels, and how to read a single-GPU trace in Perfetto. +:keywords: PyTorch profiler, trace analysis, Perfetto, GPU kernels, ATen, MIOpen, cuDNN, host device execution, tensor shapes, autograd, memory copy, TraceLens +``` + +Once you've collected a PyTorch trace and opened it in [Perfetto](https://ui.perfetto.dev/), the next question is what the trace actually means and how you read insights from it. This topic unpacks that for a *single-GPU* trace. Multi-GPU profiling is covered separately. + +When you run a PyTorch model on a GPU, there's a hidden interplay between the CPU (host) and the GPU (accelerator). A PyTorch trace lets you observe this choreography, revealing how your code executes, where time is spent, and what might be slowing you down. + +## The execution model: host, GPU, and asynchronous launches + +![Async execution example](./imgs/profiling_analysis_fig1.png) + +*Figure 1: Asynchronous execution example.* + +To understand profiling, you need a mental model of how PyTorch — or any application — runs code across the CPU and GPU. + +The host (CPU) is the conductor. It manages processes and threads, moving through the application call stack until it issues GPU runtime or driver application programming interface (API) calls such as `cudaLaunchKernel` or `hipLaunchKernel`. The GPU is the performer. It executes tasks with massive parallelism, often involving thousands of threads working on matrix multiplications, convolutions, or reductions. + +Most of these commands are asynchronous. The host queues the commands (kernels) and immediately continues, while the GPU independently drains its queue. This overlap is what enables high performance. Sometimes, however, the host introduces synchronization points such as `cudaDeviceSynchronize` or `hipDeviceSynchronize`. In those cases the CPU waits until the GPU finishes all queued work. Synchronization is necessary for correctness, but too many synchronizations can quickly turn into bottlenecks. + +One more distinction: host events come with detailed call stacks (Python to C++ to runtime), so you can see exactly how an operation was triggered. GPU events, on the other hand, are flat. A GPU kernel can't call another GPU kernel on its own — the launch must always come from the host. That's why GPU traces appear as a simple queue of kernels, memory copies, and memory sets with no stack information. + +A kernel itself is just a GPU function that runs across thousands of lightweight threads in parallel. In the trace, each kernel shows up as a single event: you can see when it started, how long it ran, and on which stream — but not what happened inside. To inspect that level of detail (thread execution, memory transactions, warp occupancy), you need dedicated kernel profilers such as [rocprof-compute](https://rocm.docs.amd.com/projects/rocprofiler-compute/en/latest/) for AMD GPUs or Nsight Compute for NVIDIA GPUs. These tools complement the trace view by showing what happens inside the GPU during a kernel event. + +## A simple example + +To dig deeper into what a trace shows, consider the snippet below. + +![Perfetto trace showing idle time between kernels](./imgs/profiling_analysis_fig2.png) + +*Figure 2: Perfetto trace highlighting idle time between convolution and batch normalization kernels.* + +The red dashed region marks idle time: the GPU is waiting for the host to issue the next command. This happens when the CPU frontend can't keep up with the GPU's execution speed. Reducing such idle gaps is an important optimization goal. To see why these gaps occur, follow the path from a high-level PyTorch call down to the GPU kernels that actually run. + +Take a simple example: + +```python +y = nn.Conv2d(3, 64, kernel_size=3)(x) +``` + +At the Python level, this looks like a single operation. In the trace, however, it expands into several layers: + +- *Python frontend*: `nn.Conv2d` in `torch.nn`. +- *ATen*: the call lowers into PyTorch's tensor library, [ATen](https://pytorch.org/cppdocs/notes/aten.html), and shows up as `aten::conv2d` in the trace. +- *Backend wrapper*: ATen provides wrappers that call into vendor libraries. On AMD GPUs, you'll see `aten::miopen_convolution`, which wraps [MIOpen](https://rocm.docs.amd.com/projects/MIOpen/en/latest/) commands. On NVIDIA GPUs, the equivalent is `aten::cudnn_convolution`, which wraps [cuDNN](https://developer.nvidia.com/cudnn) calls. +- *GPU kernels*: the backend library enqueues device kernels such as `igemm_fwd_gtcx2_nhwc` that perform the actual convolution on the GPU. + +This gives a clear understanding of how high-level code is translated into GPU execution. + +## Tensor metadata in the trace + +Another important detail is tensor metadata. Python-level operations in the trace don't carry shape information. But if you enable `record_shapes=True` in the profiler, the `cpu_op` category (such as `aten::convolution`) includes input shapes, strides, and dtypes. + +For example, in the figure below the first tensor is the activation (`[5, 64, 56, 56]`) and the second tensor is the convolution filter (`[64, 64, 3, 3]`). + +![Perfetto trace showing recorded input shapes](./imgs/profiling_analysis_fig3.png) + +*Figure 3: Shapes recorded on the backend op when `record_shapes=True`.* + +This metadata becomes very useful for deeper analysis and debugging — for example, when matching trace events to model architecture, analyzing kernel efficiency, or spotting unusual stride or dtype patterns. + +That's all you need for a clean first pass: know what the host and GPU are doing, read the timeline, and use recorded shapes to ground what you see. Perfetto gives you the raw signals; turning them into insight is a skill you build with practice, and TraceLens helps accelerate that process. + +The appendix below covers UI shortcuts, how memory copies show up, and the structure of the raw trace file. + +## Appendix + +### Perfetto UI tips + +Perfetto is a powerful trace viewer, but it takes some practice to navigate effectively. A few basics: + +- *Zoom and pan* with `Ctrl + scroll` to zoom in and out; click and drag to pan. +- *Event details*: click any event to open the *Current Selection* panel below. This shows start time, duration, and arguments. With `record_shapes=True`, backend ops (in the `cpu_op` category) also show tensor shapes, dtypes, and strides. + +Perfetto also links host launches and GPU execution with arrows called *flows*. These are crucial for connecting what you see on the CPU timeline with what actually runs on the GPU. + +When you select a runtime launch event such as `hipExtModuleLaunchKernel`, the *Following Flow* jumps you forward to the GPU kernel it triggered: + +![Following flow from host launch to GPU kernel](./imgs/profiling_analysis_fig4.png) + +*Figure 4: Following flow from a host launch (`hipExtModuleLaunchKernel`) to the corresponding GPU kernel event.* + +Conversely, when you select a GPU kernel event, the *Preceding Flow* takes you back to the runtime call on the host that launched it: + +![Preceding flow from GPU kernel back to host launch](./imgs/profiling_analysis_fig5.png) + +*Figure 5: Preceding flow from a GPU kernel (`SubTensorOpWithScalar1d`) back to its launch on the host.* + +These flows are the bridge between the Python-level trace and the GPU execution timeline. They let you answer both: + +- Which Python or ATen op caused this kernel to run? +- What GPU work did this runtime call produce? + +### Memory copy events + +Not all GPU activity is compute. Profiling traces also show memory transfers: + +- *H2D (host to device)*: copies data from CPU to GPU, usually synchronous and PCIe bandwidth-limited. +- *D2H (device to host)*: copies results back to CPU, also synchronous and PCIe bandwidth-limited. +- *D2D (device to device)*: moves data between GPU buffers, asynchronous and limited by HBM bandwidth. + +Recent versions even record measured bandwidth for these events in the trace arguments. Importantly, memory copy events use the GPU's DMA engines, not compute cores, so they don't directly compete with kernel execution. + +### JSON format + +Behind the Perfetto UI, the PyTorch profiler saves traces as JSON. Each entry is an event dictionary with: + +- *Timestamps*: `ts` (start) and `dur` (duration). +- *Process and thread IDs*: `pid` and `tid`. CPU events use real PIDs and TIDs; GPU events use pseudo-PIDs for devices and TIDs for streams. +- *Category*: for example, `python_function`, `cpu_op`, `cuda_runtime`, `kernel`, or `gpu_memcpy`. +- *Args*: extra information such as shapes, dtypes, strides, or bandwidth. + +The JSON format makes traces scriptable: you can parse them to build custom reports or run automated analysis outside Perfetto. This is exactly what TraceLens does. + +### Autograd in the trace + +Autograd introduces another dimension to the trace: the forward and backward passes are captured on different threads within the same process. In the timeline, you typically see: + +- `python3.x [main thread]` for the forward pass. +- `pt_autograd_0` (or similar) for the backward pass. + +These are linked at the `aten::convolution` layer of the call stack. Perfetto uses flows to connect the forward convolution op to its corresponding backward node. + +![Forward and backward convolution linked in the trace](./imgs/profiling_analysis_fig6.png) + +*Figure 6: Example of `aten::convolution` (forward) linked to `ConvolutionBackward0` (backward) via flows.* + +Key points: + +- The linkage happens at `aten::convolution`, not `aten::conv2d`. The higher-level `aten::conv2d` call funnels into `aten::convolution` before reaching the backend. +- Forward and backward both eventually call into the same GPU backend (MIOpen or cuDNN), so you see similar kernel launches in both directions. +- The backward pass typically runs more kernels, since it must compute gradients for both activations and weights, making it more expensive than the forward pass. +- Because autograd runs on its own thread, you can easily separate model execution (forward path) from gradient computation (backward path) when analyzing traces. + +Together with the flows discussed earlier, this lets you connect a forward convolution op to its exact backward counterpart and then follow the chain down to GPU kernels. + +## Related topics + +- [Trace2Tree](../conceptual/trace2tree.md) +- [GEMM analysis](../conceptual/gemm-analysis.md) +- [Generate a performance report from PyTorch traces](../how-to/generate-perf-report-pytorch.md) +- [Performance report columns](../reference/perf-report-columns.md) +- [What is TraceLens?](../what-is-tracelens.md) diff --git a/docs/conceptual/trace2tree.md b/docs/conceptual/trace2tree.md new file mode 100644 index 000000000..53578c6f3 --- /dev/null +++ b/docs/conceptual/trace2tree.md @@ -0,0 +1,149 @@ + + +# The Trace2Tree data model +```{meta} +:description: Understand why Trace2Tree exists and how its four-layer call tree links Python code and backend operations down to GPU kernels for portable, interpretable performance analysis. +:keywords: TraceLens, Trace2Tree, TreePerfAnalyzer, call tree, GPU kernel, PyTorch profiler, cpu_op, aten, HLO, JAX, ROCm, AMD, performance analysis +``` + +In GPU application performance analysis, understanding the relationship between host CPU operations and the corresponding GPU kernel executions is crucial for finding bottlenecks. The PyTorch profiler provides a JSON trace file containing events with timestamps and durations, but it lacks explicit call-stack dependency information. + +`Trace2Tree` is the underlying tree-structure component that TraceLens uses to parse trace files and build hierarchical dependency relationships, from host CPU operations down to GPU kernels. + +```{note} +It's recommended that you access this functionality through the `TreePerfAnalyzer` interface rather than using `Trace2Tree` directly. +``` + +## Why kernel names aren't enough + +Directly inspecting GPU kernel names has two fundamental limitations: + +* *Ambiguous semantics (and weak reproducibility)*: a single kernel name can map to many different computations depending on shape, dtype, strides or layout, and so on. Shape strongly affects performance — one shape might select a fast tiled path while another shape of the same op type falls onto a slower algorithm. Because the name omits this argument context, you can't reliably understand, compare, or reproduce the workload from the kernel string alone. Many kernel names are also cryptic and unreadable, for example `Cijk_Ailk_Bljk_*` or `void cutlass_*`. + +* *Platform-dependent, unstable naming (and weak cross-platform comparison)*: the same high-level operation appears under different kernel names across platforms. For example, a single GEMM shows up as `nvjet_*` or `cutlass_*` on NVIDIA H100, and as a Tensile kernel `Cijk_Ailk_Bljk_*` on AMD MI300. These names also shift across software versions, so raw kernel strings aren't a stable abstraction for comparison. + +## What Trace2Tree does + +`Trace2Tree` reconstructs a full call tree from the Python front end down to each GPU kernel. The tree has exactly four layers: + +1. *Python front end* — user code or `nn.Module`. +2. *Operation* — on PyTorch this is the dispatch operation (`cpu_op`), for example `aten::mm`, `aten::addmm`, and so on. On JAX the corresponding layer is the HLO operations. This is the layer that contains the argument information used to contextualize the kernel. +3. *HIP / CUDA runtime* — launch API calls. +4. *GPU kernel* — the executed kernel. + +## How this solves the problem + +* *Disambiguates semantics*: argument metadata at the backend op layer lets you group identical computations, attribute time, and deterministically reproduce slow cases. +* *Enables fair comparison*: operations such as `aten::mm` and HLO are stable across platforms. By anchoring analysis there, you can compare the same operation and arguments regardless of how the kernels are named underneath. +* *Flexible attribution*: GPU time can be viewed at any level — module (through its backend ops), dispatch op, runtime, or kernel — depending on the question. As an additional benefit, time can be attributed all the way up to the Python `nn.Module` level, making performance insights accessible even to users outside the performance-engineering field. This helps bridge the gap between model developers and low-level hardware execution. + +Kernel names are volatile and context-free. Trace2Tree anchors analysis at the stable backend operation, enriches it with arguments, and maps the full execution stack to deliver portable, interpretable performance insight. + +That said, kernel names are often useful — they can offer clues about the backend implementation, algorithm variant, or compiler choices. TraceLens intends to serve as a one-stop solution for extracting every bit of useful signal from a trace file, so it includes features to extract and parse relevant information from kernel names where applicable. But it treats them as supplementary, not foundational. + +## Key features + +- *Hierarchical dependency tree*: constructs a tree structure linking CPU operations to GPU kernel launches, enabling detailed analysis of ops lowering and performance. +- *Extensible SDK*: provides a framework for custom analyses, such as identifying GPU time for CPU operations or pinpointing bottlenecks. +- *Lightweight design*: minimal dependencies and a straightforward codebase for easy integration and use. +- *PyTorch support*: built for PyTorch profiler JSON traces, with potential for future support of other frameworks. + +## Build and traverse the tree + +```{note} +See [`examples/trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb) for a complete interactive tutorial. +``` + +### Load the trace data through TreePerfAnalyzer + +```python +from TraceLens.TreePerf import TreePerfAnalyzer + +# Load trace data using TreePerfAnalyzer +# Set add_python_func=True to include the Python function call stack in the tree +# This lets you trace GPU kernels all the way back to your Python code +trace_file = '/path/to/trace.json' +analyzer = TreePerfAnalyzer.from_file(trace_file, add_python_func=True) + +# Access the underlying tree structure +tree = analyzer.tree +``` + +### Find an operation to analyze + +```python +# Find an operation of interest +event_interest = next( + evt for evt in tree.events + if evt.get('name') == 'aten::convolution' and evt.get('cat') == 'cpu_op' +) +``` + +### Traverse a subtree + +Visualize the entire subtree rooted at this operation: + +```python +tree.traverse_subtree_and_print(event_interest) +``` + +``` +└── UID: 41, Category: cpu_op, Name: aten::convolution + └── UID: 42, Category: cpu_op, Name: aten::_convolution + └── UID: 43, Category: cpu_op, Name: aten::miopen_convolution + ├── UID: 104314, Category: cuda_runtime, Name: hipExtModuleLaunchKernel + │ └── UID: 107846, Category: kernel, Name: Im2d2Col_v2, Duration: 45.063 + └── UID: 104318, Category: cuda_runtime, Name: hipExtModuleLaunchKernel + └── UID: 107848, Category: kernel, Name: Cijk_Ailk_Bljk_BBS_BH... +``` + +### Traverse the parent chain + +Trace back through all parent events to see the full call stack. You can optionally include CPU operation details such as input dimensions, types, and strides using the `cpu_op_fields` parameter. + +Available fields: `'Input Dims'`, `'Input type'`, `'Input Strides'`, `'Concrete Inputs'`. + +```python +root = tree.traverse_parents_and_print( + event_interest, + cpu_op_fields=('Input Dims', 'Input type') +) +``` + +``` +Node: + UID: 41, Category: cpu_op, Name: aten::convolution + Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], []] + Input type: [float, float, float] +1-up: + UID: 40, Category: cpu_op, Name: aten::conv2d + Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], [1], [2, 2], [1, 1], [1, 1], [1]] + Input type: [float, float, int, int, int, int, int] +2-up: + UID: 40139, Category: python_function, Name: +3-up: + UID: 40138, Category: python_function, Name: torch/utils/_device.py(100): __torch_function__ +4-up: + UID: 40137, Category: python_function, Name: torch/nn/modules/conv.py(554): _conv_forward +5-up: + UID: 40136, Category: python_function, Name: torch/nn/modules/conv.py(558): forward +6-up: + UID: 40135, Category: python_function, Name: torch/nn/modules/module.py(1736): _wrapped_call_impl +7-up: + UID: 40134, Category: python_function, Name: torch/nn/modules/module.py(1747): _call_impl +8-up: + UID: 40133, Category: python_function, Name: transformers/models/owlv2/modeling_owlv2.py(395): forward +... +``` + +## Related topics + +- [Tree performance analysis](../how-to/tree-perf-analysis.md) +- [Event replay](../how-to/event-replay.md) +- [Torch profiling analysis](../conceptual/torch-profiling-analysis.md) +- [API reference](../reference/api-reference.md) +- [What is TraceLens?](../what-is-tracelens.md) diff --git a/docs/conf.py b/docs/conf.py index be3247276..94041d68f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -27,6 +27,11 @@ external_toc_path = "./sphinx/_toc.yml" +# rocm-docs-core (>=1.x) renders Jupyter notebooks through myst-nb. The tutorial +# notebooks ship with their captured outputs and need traces or GPUs to run, so +# don't re-execute them at build time. +nb_execution_mode = "off" + html_theme = "rocm_docs_theme" # fmt: off html_theme_options = { diff --git a/docs/how-to/compare-perf-reports.md b/docs/how-to/compare-perf-reports.md new file mode 100644 index 000000000..720b64f8f --- /dev/null +++ b/docs/how-to/compare-perf-reports.md @@ -0,0 +1,118 @@ + + +# Compare performance reports in TraceLens +```{meta} +:description: Learn how to compare two or more TraceLens performance reports with the compare_perf_reports_pytorch tool to diff per-op, kernel, and roofline metrics in a single workbook. +:keywords: TraceLens, compare performance reports, compare_perf_reports_pytorch, xlsx, diff, ops_summary, kernel_summary, roofline, ROCm, PyTorch profiler +``` + +This topic shows how to compare multiple performance reports that you've already +generated with `generate_perf_report_pytorch.py`, using the +`compare_perf_reports_pytorch.py` script +(`TraceLens/Reporting/compare_perf_reports_pytorch.py`). The result is a single +workbook with side-by-side metrics and per-metric diffs. + +```{note} +This topic covers comparing generated *reports* (the `.xlsx` or `.csv` outputs). +To compare raw traces by their morphological tree structure, see +[Compare two traces in TraceLens](./compare-traces.md), which also documents the +SDK-based `TraceDiff` workflow. +``` + +## Before you begin + +- TraceLens installed (see [Install TraceLens](../install/installation.md)). +- At least two reports (`.xlsx`) generated with + [TraceLens_generate_perf_report_pytorch](./generate-perf-report-pytorch.md). + +## What it takes in + +| Input | Description | +|-------|-------------| +| `*.xlsx` files | TraceLens reports you want to compare. Provide at least two. | +| Optional `--names` | Human-readable tags for each report. If omitted, the script falls back to the base filenames. | + +## How to call it + +```bash +python compare_perf_reports.py \ + baseline.xlsx \ + candidate.xlsx \ + --names baseline candidate \ + --sheets all \ + -o comparison.xlsx +``` + +Alternatively, you can call the entry point directly after installing TraceLens, +which avoids needing to know the script's path: + +```bash +TraceLens_compare_perf_reports_pytorch \ + baseline.xlsx \ + candidate.xlsx \ + --names baseline candidate \ + --sheets all \ + -o comparison.xlsx +``` + +Common flags: + +| Flag | Default | Purpose | +|------|---------|---------| +| `-o, --output` | `comparison.xlsx` | Name of the merged workbook. | +| `--names` | `` | Custom tags (must match the number of reports). | +| `--sheets` | `all` | Limit processing to a subset: `gpu_timeline`, `ops_summary`, `kernel_summary`, `ops_all`, `roofline`, or `all`. | + +## What comes out + +The script writes one workbook (`comparison.xlsx` unless you override it) +containing multiple sheets: + +| Sheet | When you get it | What it shows | +|-------|-----------------|---------------| +| `gpu_timeline` | `--sheets gpu_timeline` or `all` | End-to-end GPU activity by type (`compute`, `memcpy`, and so on) with per-report timings plus `time ms___diff` and `time ms___pct`. | +| `ops_summary` | `--sheets ops_summary` or `all` | Per-op aggregates keyed on `name`. Sorted by the baseline's `total_direct_kernel_time_ms`. Unhelpful columns (for example cumulative %) are stripped from non-baseline reports. When comparing PyTorch traces, this sheet is generated. For rocprof traces without `ops_summary`, it automatically falls back to `kernel_summary`. | +| `kernel_summary` | `--sheets kernel_summary` or `all` | Kernel-level summary for rocprof reports, keyed on `name`. Similar to `ops_summary` but uses rocprof-specific columns like `Total Kernel Time (ms)` and `Count`. When `--sheets all` is used with rocprof reports, this is generated automatically if `ops_summary` is not available. | +| `ops_all_*` | `--sheets ops_all` or `all` | Three sheets per variant tag: `ops_all_intersect_` (op instances present in both baseline and variant), `ops_all_only_baseline_` (ops only the baseline ran), and `ops_all_only_variant_` (ops only the variant ran). Columns irrelevant to a given view are hidden, not deleted. | +| `_*` | `--sheets roofline` or `all` | Same intersect / only-baseline / only-variant breakdown for each roofline group: `GEMM`, `SDPA_fwd`, `SDPA_bwd`, `CONV_fwd`, `CONV_bwd`, `UnaryElementwise`, `BinaryElementwise`. | + +Hidden columns stay in the file (for power users) but are invisible in Excel by +default. + +## Diff math + +For every metric you ask it to track (`diff_cols` in the code), the script +computes: + +```text +metric___diff # variant - baseline +metric___pct # 100 * diff / baseline +``` + +## Design decisions to know + +- *Outer merge, never inner* — if an op vanished, you'll see it. +- *Baseline is the first report* — choose its order deliberately. +- *Column prefixing* — every metric becomes `::metric`, so you can safely concatenate arbitrary reports. +- *Sheet-specific pruning* — the script aggressively hides noise (for example `median`, `UID`) to keep the output readable. You can always unhide these in Excel if you need them. +- *Excel 31-char rule* — sheet names are truncated to fit; no data loss, just shorter labels. + +```{note} +A planned enhancement is morphology-aware diffing: understanding the call-stack +tree and comparing at the lowest common call-stack level. For example, if a +baseline leaf op is `cudnn_convolution` and the variant is `miopen_convolution`, +the diff would recognize that the lowest common level is `convolution` and +compare the two there. +``` + +## Related topics + +- [Compare two traces in TraceLens](./compare-traces.md) +- [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) +- [Generate a rocprof performance report](./generate-perf-report-rocprof.md) +- [Generate a report](./generate-reports.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/generate-perf-report-pytorch.md b/docs/how-to/generate-perf-report-pytorch.md index d57507813..c5888af32 100644 --- a/docs/how-to/generate-perf-report-pytorch.md +++ b/docs/how-to/generate-perf-report-pytorch.md @@ -23,7 +23,7 @@ Before generating a report, confirm you have the following: ```{note} If you don't have a trace yet, see the -[PyTorch profiling guide](https://github.com/AMD-AGI/TraceLens/blob/main/docs_original/conceptual/torch_profiling_guide.ipynb) +[PyTorch profiling walkthrough](../tutorials/torch-profiling.ipynb) for instructions on capturing one with `torch.profiler`. ``` @@ -77,7 +77,7 @@ For the GPU timeline, a low computation percentage with significant idle time indicates poor compute/communication overlap; use `--micro_idle_thresh_us` to split very short idle gaps into their own category. -See [Performance report column definitions](https://github.com/AMD-AGI/TraceLens/blob/main/docs_original/perf_report_columns.md) +See [Performance report column reference](../reference/perf-report-columns.md) for what each column means. ## Roofline classification diff --git a/docs/how-to/gpu-event-analysis.md b/docs/how-to/gpu-event-analysis.md new file mode 100644 index 000000000..8cf05f950 --- /dev/null +++ b/docs/how-to/gpu-event-analysis.md @@ -0,0 +1,98 @@ + + +# Analyze a GPU timeline with GPUEventAnalyser +```{meta} +:description: Learn how to use the TraceLens GPUEventAnalyser component standalone to extract GPU timeline metrics such as computation, communication, memcpy, and idle time from a PyTorch or JAX trace. +:keywords: TraceLens, GPUEventAnalyser, JaxGPUEventAnalyser, GPU timeline, computation time, communication time, memcpy, idle time, exposed communication, PyTorch profiler, JAX, ROCm +``` + +`GPUEventAnalyser` is a reusable component designed to analyze a GPU timeline and extract key performance metrics. While it's used within [TreePerf](../how-to/tree-perf-analysis.md), it can also be used independently, and this topic focuses on that standalone usage — you don't need the CPU-side tree to run it. + +## Before you begin + +- TraceLens installed (see [Install TraceLens](../install/installation.md)). +- A trace file containing GPU events: an unzipped PyTorch profiler JSON trace, or a gzipped JAX trace for the JAX workflow. + +## Key features + +- *GPU timeline breakdown*: computes key GPU activity metrics, including: + - *Computation time*: time spent in computation kernels (for example, matrix multiplications, convolutions). + - *Communication time*: time spent in communication kernels (for example, NCCL operations for distributed training). + - *Memcpy time*: time spent in memory copy operations between host and device or across devices. + - *Idle time*: periods where the GPU is not executing any computation, communication, or memcpy operations. + - *Exposed communication*: communication time that does not overlap with computation. + - *Exposed memcpy*: memcpy time that does not overlap with computation or communication. +- *Reusable across profiling formats*: although `GPUEventAnalyser` is designed for PyTorch's JSON trace format, it can be adapted to other profiling formats by inheriting the class and reimplementing `get_gpu_event_lists()`. + +## Analyze a PyTorch trace (standalone) + +`GPUEventAnalyser` works directly from a list of trace events, so you can run it on its own without building the CPU-side tree. Load the trace JSON, pass its `traceEvents` to `GPUEventAnalyser`, and call `get_breakdown_df()`: + +```python +import json +import sys +from TraceLens import GPUEventAnalyser + +path = sys.argv[1] # this expects the JSON file (unzipped) + +with open(path, 'r') as f: + data = json.load(f) + +events = data['traceEvents'] +my_gpu_event_analyser = GPUEventAnalyser(events) +df = my_gpu_event_analyser.get_breakdown_df() +print(df) +``` + +Example output: + +| type | time ms | percent | +| --------------------- | --------- | --------- | +| computation_time | 4184.32 | 96.10 | +| exposed_comm_time | 160.85 | 3.69 | +| exposed_memcpy_time | 0.19 | 0.00 | +| busy_time | 4345.36 | 99.80 | +| idle_time | 8.53 | 0.20 | +| total_time | 4353.88 | 100.00 | +| total_comm_time | 292.92 | 6.73 | +| total_memcpy_time | 0.19 | 0.00 | + +## Analyze a JAX trace + +JAX describes events slightly differently, and includes all GPUs in a single trace, using the `JaxGPUEventAnalyser` class. When you use `GPUEventAnalyser` for JAX traces (enabled by passing `jax=True` to the analysis functions), the `compute_metrics()` and `get_breakdown_df()` methods return events from GPU 0. + +To access the traces for all devices, call `get_gpu_event_lists_jax()` to obtain a dictionary of `{pid: event_lists}`, where `pid` is the process id (1-n for n GPUs, a number greater than 100 for the CPU event list). To create a Pandas dataframe for each GPU, call `get_breakdown_df_multigpu()`, which returns a dictionary of `{gpu_index: DataFrame}` for `gpuindex` in `[0, num_gpus)`. The inherited `get_breakdown_df` function returns the results from GPU 0. + +```python +import gzip +import json +import sys +from TraceLens import JaxGPUEventAnalyser + +path = sys.argv[1] # this expects the zipped JSON file produced by the profiler + +with gzip.open(path, 'r') as fin: + data = json.loads(fin.read().decode('utf-8')) + +events = data['traceEvents'] +my_gpu_event_analyser = JaxGPUEventAnalyser(events) +for gpu, df in my_gpu_event_analyser.get_breakdown_df_multigpu().items(): + print(f"GPU {gpu}") + print(df) +``` + +## Customize for other profiling formats + +To adapt `GPUEventAnalyser` for other profiling formats, subclass it and reimplement the `get_gpu_event_lists()` method to correctly extract GPU events. See the `JaxGPUEventAnalyser` class for an example. + +## Related topics + +- [Analyze GPU performance with TreePerf](../how-to/tree-perf-analysis.md) +- [Trace2Tree](../conceptual/trace2tree.md) +- [Generate a JAX performance report](../how-to/generate-perf-report-jax.md) +- [Generate a PyTorch performance report](../how-to/generate-perf-report-pytorch.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/nccl-analysis.md b/docs/how-to/nccl-analysis.md new file mode 100644 index 000000000..34bcaae9d --- /dev/null +++ b/docs/how-to/nccl-analysis.md @@ -0,0 +1,100 @@ + + +# Analyze collectives with the NcclAnalyser SDK +```{meta} +:description: Learn how to use the TraceLens NcclAnalyser Python SDK to extract per-rank collective metrics like communication latency, bandwidth, and synchronization skew from PyTorch traces. +:keywords: TraceLens, NcclAnalyser, NCCL, RCCL, collective communication, algorithm bandwidth, bus bandwidth, skew, alltoallv, MoE, ROCm, PyTorch profiler +``` + +In distributed deep learning, analyzing the performance of collective +communication operations is crucial for diagnosing and optimizing performance at +scale. `NcclAnalyser` is a Python SDK that parses and analyzes NVIDIA Collective +Communications Library (NCCL) and ROCm Collective Communications Library (RCCL) +kernel events from PyTorch trace files (JSON). It computes key metrics like +communication latency, message sizes, algorithm bandwidth, bus bandwidth, and +synchronization metrics (for example skew in start and end times), providing +insights into communication patterns and potential bottlenecks in your +distributed training or inference workflows. + +```{note} +This topic covers the `NcclAnalyser` SDK and its API. To generate a multi-rank +collective-communication report from the command line instead, see +[Generate a collective-communication report](./collective-report.md). +``` + +## Key features + +- *Detailed NCCL event extraction*: Parses JSON trace files to extract per-rank NCCL kernel events (those containing `nccl` in the kernel name). +- *Correlated events via collective ID*: Each collective operation is assigned a unique `collective_id`, generated by combining the Process Group Name and an `index_in_group`. The `index_in_group` reflects the order in which that collective appears in the trace. +- *Latency computation for implicit-sync collectives*: For collectives like allreduce, allgather, reducescatter, and alltoall, the tool computes communication latency by taking the minimum duration across ranks to eliminate waiting time. +- *Bandwidth analysis*: Computes algorithm bandwidth based on input message size and communication latency, and finally bus bandwidth (link utilization). +- *Synchronization (wait-time) metrics*: Tracks skew in start times (how late certain ranks arrive) and skew in end times, providing insights for diagnosing load imbalance or synchronization overheads. +- *Alltoallv support*: Provides raw data for alltoallv events, which don't enforce an implicit sync pattern. Includes per-instance metrics (wall time, throughput, size imbalance) and a summary aggregation grouped by process group and dtype. An optional heatmap mode (`build_df_all2allv_heatmap`) produces per rank-pair send volumes, useful for diagnosing Mixture-of-Experts (MoE) / expert-parallel routing imbalance. +- *Summary and detailed dataframes*: Supports both high-level summaries for quick insights and detailed dataframes for advanced analysis, including per-rank metadata and performance metrics. Power users can build custom pipelines and analyses on top of the detailed dataframes. +- *PyTorch support*: Currently built for PyTorch trace files, with the potential to extend support to other frameworks. + +## Before you begin + +- TraceLens installed (see [Install TraceLens](../install/installation.md)). +- Per-rank PyTorch profiler traces from a distributed run (one trace per rank). + +## Quick start + +`NcclAnalyser` can generate both a per-collective dataframe and a global summary. +More features are demonstrated in the +[`nccl_analyser_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nccl_analyser_example.ipynb) +notebook. + +### Quick summary of implicit-sync collectives + +```python +from TraceLens import NcclAnalyser +import os + +# Define the root directory and create file paths for all ranks +root_dir = '/path/to/your/trace/files/directory' +world_size = 8 +list_profile_filepaths = [os.path.join(root_dir, f'rank{i}_trace.json') for i in range(world_size)] + +# Initialize the NCCL Analyser +my_nccl_analyser = NcclAnalyser(list_profile_filepaths, world_size) + +# Generate the summarized dataframe for implicit-sync collectives +df_summary = my_nccl_analyser.build_df_summary_nccl_implicit_sync_cat(agg_metrics=['mean']) +print(df_summary.head()) + +# Save the summary to CSV +df_summary.to_csv('nccl_summary.csv', index=False) +``` + +The summarized dataframe: + +- Groups events by collective type, message size, and data type to compute aggregated metrics. +- For communication performance, computes communication latency, algorithm bandwidth, and bus bandwidth. +- For synchronization delay, computes metrics like skew in start times, which shows the wait time. This is based on the difference between the earliest and latest arrival across the ranks for a given collective. + +### Example summarized dataframe + +| Collective name | In msg size (MB) | dtype | comm latency (µs)_mean | count | Total latency (ms) | algo bw (GB/s)_mean | bus bw (GB/s)_mean | skew in start time (µs)_mean | +|-----------------|------------------|-------|------------------------|-------|--------------------|---------------------|--------------------|------------------------------| +| _allgather_base | 204.00 | BFloat16 | 6041.88 | 318 | 1921.32 | 33.00 | 28.88 | 11779.36 | +| _reduce_scatter_base | 3264.06 | Float | 11662.77 | 160 | 1866.04 | 273.43 | 239.25 | 60238.77 | +| _reduce_scatter_base | 8016.03 | Float | 22988.50 | 2 | 45.98 | 340.53 | 297.96 | 146.48 | +| _allgather_base | 501.00 | BFloat16 | 11920.84 | 2 | 23.84 | 41.04 | 35.91 | 15405.14 | +| allreduce | 0.00 | Float | 18.58 | 6 | 0.11 | 0.00 | 0.00 | 936.63 | + +Note that the last row's message size is just rounded down to 0. + +Modify the file paths for your profiles in the `nccl_analyser_example.ipynb` +notebook to get analysis instantly. + +## Related topics + +- [Generate a collective-communication report](./collective-report.md) +- [Compare two traces in TraceLens](./compare-traces.md) +- [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/origami-integration.md b/docs/how-to/origami-integration.md new file mode 100644 index 000000000..c3eb9e79c --- /dev/null +++ b/docs/how-to/origami-integration.md @@ -0,0 +1,149 @@ + + +# Estimate simulated kernel times with Origami in TraceLens +```{meta} +:description: Learn how to enable Origami in TraceLens to estimate simulated GEMM and SDPA kernel times from a GPU architecture description. +:keywords: TraceLens, Origami, rocm-origami, GEMM, SDPA, performance model, simulation, gpu_arch_json_path, ROCm, roofline +``` + +TraceLens can estimate simulated GEMM and SDPA kernel times using *Origami* +(ROCm's performance modeling library) when you provide a GPU architecture +description and explicitly opt in. This is optional: `pip install TraceLens` +doesn't install Origami. + +## What Origami does in TraceLens + +- GEMM and SDPA perf models call Origami's Python bindings to predict a duration in microseconds for forward (and SDPA backward where applicable). +- Results show up in perf reports under columns such as `Origami Time (µs)`, `Origami TFLOPS/s`, `Origami TB/s`, and `Pct Origami` (relative to measured kernel busy time), when simulation uses Origami. +- Roofline metrics from `--gpu_arch_json_path` are separate; they don't require Origami. Origami adds *simulated* timing on top when enabled. + +## Installation + +### Python package + +Install the published package (PyPI name `rocm-origami`): + +```bash +pip install rocm-origami +``` + +Note that installing Origami currently (as of April 2026) requires that ROCm is +installed on the system, because Origami can use the HIP library to detect the +GPU currently installed in the system and use it as an architectural model. +TraceLens doesn't currently use this functionality, but it currently can't be +removed from Origami. + +### System environment + +Origami's wheels and bindings expect a ROCm runtime on the machine (a GPU isn't +required for pure Python simulation in many cases, but library loading may +depend on your setup). The project's continuous integration (CI) uses an AMD +ROCm container and installs `rocm-origami` alongside TraceLens (see +[`.github/workflows/regression-tests.yml`](https://github.com/AMD-AGI/TraceLens/blob/main/.github/workflows/regression-tests.yml)). + +If `import origami` fails after `pip install`, check: + +- Python version and wheel compatibility for `rocm-origami`. +- `LD_LIBRARY_PATH` and ROCm install paths required by the Origami wheel you use. + +## When TraceLens uses Origami + +Simulation is implemented in `TraceLens/PerfModel/perf_model.py` +(`GEMM.get_simulation_time_func`): + +- If `enable_origami` is true and the perf model has the needed architecture and parameters, TraceLens uses Origami. +- If `enable_origami` is false, TraceLens doesn't call Origami; simulated times are omitted for that path. + +So you need both: + +- A valid GPU architecture (see below), and +- `enable_origami=True` (CLI flag or Python API). + +## GPU architecture JSON + +Pass the same JSON file you use for roofline analysis with +`--gpu_arch_json_path`. It must include fields Origami expects (for example GPU +name, frequency, memory bandwidth, and CU count), as consumed by +`OrigamiHelper.get_hardware` in `TraceLens/PerfModel/origami_helper.py`. + +See [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) +for the general format of the architecture JSON and its use in roofline +analysis. + +## Command-line usage + +### PyTorch perf report + +```bash +TraceLens_generate_perf_report_pytorch \ + --profile_json_path path/to/profile.json.gz \ + --gpu_arch_json_path path/to/gpu_arch.json \ + --enable-origami \ + --output_csvs_dir ./out_csvs +``` + +Or: + +```bash +python -m TraceLens.Reporting.generate_perf_report_pytorch \ + --profile_json_path path/to/profile.json.gz \ + --gpu_arch_json_path path/to/gpu_arch.json \ + --enable-origami \ + --output_csvs_dir ./out_csvs +``` + +### vLLM-oriented PyTorch report + +Same pattern; the entry point mirrors the PyTorch script (`--enable-origami`). + +### JAX perf report + +```bash +TraceLens_generate_perf_report_jax \ + --profile_path path/to/trace.xplane.pb \ + --gpu_arch_json_path path/to/gpu_arch.json \ + --enable-origami \ + --output_csvs_dir ./out_csvs +``` + +### Standalone GEMM/SDPA simulator helper + +`TraceLens/PerfModel/run_perf_model.py`: + +```bash +python -m TraceLens.PerfModel.run_perf_model --op gemm ... --enable_origami +``` + +## Python API + +When building a `TreePerfAnalyzer` (or `JaxTreePerfAnalyzer`) in code, pass: + +```python +TreePerfAnalyzer.from_file( + profile_filepath="profile.json.gz", + arch=gpu_arch_dict, # or load JSON + enable_origami=True, +) +``` + +Reporting helpers such as `generate_perf_report_pytorch` accept +`enable_origami=True` and forward it to the analyzer. + +## Troubleshooting + +| Symptom | What to check | +|---------|---------------| +| No Origami columns in CSVs | Confirm `--enable-origami` (or API `enable_origami=True`) and `--gpu_arch_json_path`. | +| Message on stderr about `origami` import | Install `rocm-origami` and fix ROCm/library paths. | +| Unsupported dtype warning | The Origami path supports a fixed set of dtypes (for example fp16, bf16, fp32, fp64, fp8); others skip simulation. | + +## Related topics + +- [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) +- [Generate a JAX performance report](./generate-perf-report-jax.md) +- [Generate a PyTorch inference performance report](./generate-perf-report-pytorch-inference.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/tree-perf-analysis.md b/docs/how-to/tree-perf-analysis.md new file mode 100644 index 000000000..72abcc4e3 --- /dev/null +++ b/docs/how-to/tree-perf-analysis.md @@ -0,0 +1,94 @@ + + +# Analyze GPU performance with TreePerf +```{meta} +:description: Learn how to use the TraceLens TreePerf software development kit to compute model- and operation-level GPU performance metrics from a PyTorch profiler trace. +:keywords: TraceLens, TreePerf, TreePerfAnalyzer, Trace2Tree, GPU performance, roofline, FLOPS, PyTorch profiler, ROCm, perf model +``` + +`TreePerf` is a Python software development kit (SDK) that works together with the `Trace2Tree` project. During profiling, PyTorch generates a trace JSON file, which `Trace2Tree` parses into a tree data structure that represents the hierarchical dependencies between CPU operations and GPU kernel executions. `TreePerf` builds on this tree structure to compute performance metrics at both the model and operation levels, so you can analyze, interpret, and optimize AI models with the detailed performance insights that are essential for architectural design and performance optimization. + +## Before you begin + +- TraceLens installed (see [Install TraceLens](../install/installation.md)). +- A PyTorch profiler trace JSON file for the model you want to analyze. +- A basic understanding of how `Trace2Tree` builds the tree (see [Trace2Tree](../conceptual/trace2tree.md)). + +## Key ideas + +- *Tree structure for GPU execution analysis*: the hierarchical tree structure, generated by `Trace2Tree`, enables straightforward computation of GPU execution times. By linking CPU operations to their corresponding GPU kernel launches, it allows seamless aggregation of kernel execution times and performance metrics at various levels of granularity. +- *Performance metrics from JSON parsing*: metrics such as floating-point operations per second (FLOPS) and FLOPS/Byte are derived by extracting operation parameters from the JSON event data structure. These parameters are parsed and fed into performance models, enabling precise computation of performance metrics. + +## Key features + +### GPU timeline breakdown + +`TreePerf` provides a high-level view of GPU activity, which includes busy time, idle time, communication time, and so on. This timeline breakdown is computed by `GPUEventAnalyser`. For a standalone walkthrough of these metrics and how they're defined, see [Analyze a GPU timeline with GPUEventAnalyser](../how-to/gpu-event-analysis.md). + +Example output: + +| type | time ms | percent | +|-------------------------------|--------------|------------| +| busy_time | 6521.458211 | 99.927717 | +| computation_time | 6318.257587 | 96.814092 | +| exposed_communication_time | 203.057890 | 3.111438 | +| exposed_memcpy_time | 0.142734 | 0.002187 | +| idle_time | 4.717306 | 0.072283 | +| total_time | 6526.175517 | 100.000000 | + +### GPU compute time breakdown by CPU op + +Analyze the performance breakdown by examining the lowest-level CPU operations (from the call stack perspective) and the time they "induce" on the GPU. Unlike traditional methods that directly look at CPU and GPU durations, this feature provides insight into how CPU operations translate into GPU kernel launches, offering a more stable and interpretable abstraction of performance. + +Example output showing the top 5 ops sorted by the total GPU time each op induces: + +| name | Count | total_direct_kernel_time_ms | Percentage (%) | Cumulative Percentage (%) | +|------------------------------------------------------------|-------|-----------------------------|----------------|---------------------------| +| aten::mm | 126 | 5576.76 | 88.73 | 88.73 | +| flash_attn::_flash_attn_backward | 8 | 213.62 | 3.40 | 92.13 | +| flash_attn::_flash_attn_forward | 8 | 119.65 | 1.90 | 94.04 | +| aten::copy_ | 4 | 69.96 | 1.11 | 95.15 | +| triton_poi_fused_add_fill_mul_sigmoid_silu_sub_0 | 8 | 43.19 | 0.69 | 95.84 | + +### Roofline metrics + +Example output for `aten::mm` showing the top 5 param combos sorted by the total GPU time each param combo induces: + +| name | param: M | param: N | param: K | param: bias | FLOPS/Byte_first | TFLOPS/s_mean | +|---------|----------|----------|----------|-------------|------------------|---------------| +| aten::mm | 73728 | 28672 | 8192 | False | 5864.73 | 698.19 | +| aten::mm | 73728 | 8192 | 28672 | False | 5864.73 | 719.59 | +| aten::mm | 28672 | 8192 | 73728 | False | 5864.73 | 740.51 | +| aten::mm | 73728 | 128256 | 8192 | False | 6972.01 | 628.10 | +| aten::mm | 8192 | 28672 | 73728 | False | 5864.73 | 599.95 | + +## Add a new operation + +Adding new operations is simple, and contributions are welcome: + +- In [`perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/perf_model.py): + - Parse operation shapes from the JSON trace. + - Write the performance model (FLOPS, bytes) or reuse an existing one. +- In [`torch_op_mapping.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/torch_op_mapping.py): map the operation to the perf model here. + +## Try it in a notebook + +For more details and a walkthrough, check out the [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) notebook. + +```{note} +Replace the profile path in `tree_perf_example.ipynb` with your profile file to get insights instantly. +``` + +Once you're familiar with the workflows, you can directly use or modify the [`generate_perf_report_pytorch.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/Reporting/generate_perf_report_pytorch.py) script to generate a report Excel sheet quickly. + +## Related topics + +- [Trace2Tree](../conceptual/trace2tree.md) +- [Analyze a GPU timeline with GPUEventAnalyser](../how-to/gpu-event-analysis.md) +- [Generate a PyTorch performance report](../how-to/generate-perf-report-pytorch.md) +- [Replay a single operation in TraceLens](../how-to/event-replay.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/index.rst b/docs/index.rst index 5a50eb7d2..53ab39c8a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -32,10 +32,25 @@ The TraceLens source code is hosted at `github.com/AMD-AGI/TraceLens ` * :doc:`Replay a single operation ` * :doc:`Fuse multi-rank traces ` + * :doc:`Analyze performance with TreePerf ` + + .. grid-item-card:: Concepts + + * :doc:`The Trace2Tree data model ` + * :doc:`Understanding PyTorch traces ` + * :doc:`GEMM analysis ` + * :doc:`Triton kernel performance model ` + + .. grid-item-card:: Tutorials + + * :doc:`PyTorch profiling walkthrough ` + * :doc:`Distributed profiling walkthrough ` + * :doc:`Anomaly detection walkthrough ` .. grid-item-card:: Reference * :doc:`API reference ` + * :doc:`Performance report columns ` For information on contributing to TraceLens, see the `Contributing guide `_. diff --git a/docs/reference/api-reference.md b/docs/reference/api-reference.md index ff32866fa..19ed92659 100644 --- a/docs/reference/api-reference.md +++ b/docs/reference/api-reference.md @@ -180,23 +180,23 @@ Split an inference trace into per-iteration or per-phase sub-traces. ## Python SDK The SDK modules live under the `TraceLens` package and can be imported to build -custom workflows. Each module has a dedicated guide in the repository `docs_original/` -directory and an example notebook under `examples/`. +custom workflows. Each module has a dedicated topic in the documentation and an +example notebook under `examples/`. | Module | Purpose | Reference | |--------|---------|-----------| -| `Trace2Tree` | Build and navigate the hierarchical event tree (Python ops → CPU dispatch → GPU kernels). | `docs_original/Trace2Tree.md`, `examples/trace2tree_example.ipynb` | -| `TreePerf` | GPU-timeline breakdown, per-op performance, and roofline metrics. | `docs_original/TreePerf.md`, `examples/tree_perf_example.ipynb` | -| `PerfModel` | Compute and roofline performance models for operators. | `docs_original/gemm_dim_eff.md`, `docs_original/triton_perf_model_walkthrough.md` | -| `NcclAnalyser` | Multi-rank collective latency/bandwidth/skew analysis. | `docs_original/NcclAnalyser.md`, `examples/nccl_analyser_example.ipynb` | -| `TraceDiff` | Morphological comparison of two trace trees. | `docs_original/TraceDiff.md`, `examples/trace_diff_example.ipynb` | -| `EventReplay` | Extract and replay isolated operations. | `docs_original/EventReplay.md`, `examples/event_replayer_example.ipynb` | -| `TraceFusion` | Merge multi-rank traces for Perfetto visualization. | `docs_original/TraceFusion.md`, `examples/trace_fusion_example.py` | -| `Reporting` | The report generators behind the CLI tools; importable to return pandas data frames. | `docs_original/generate_perf_report.md` | +| `Trace2Tree` | Build and navigate the hierarchical event tree (Python ops → CPU dispatch → GPU kernels). | [Trace2Tree data model](../conceptual/trace2tree.md), [`trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb) | +| `TreePerf` | GPU-timeline breakdown, per-op performance, and roofline metrics. | [Analyze performance with TreePerf](../how-to/tree-perf-analysis.md), [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) | +| `PerfModel` | Compute and roofline performance models for operators. | [GEMM analysis](../conceptual/gemm-analysis.md), [Triton kernel performance model](../conceptual/perf-model-walkthrough.md) | +| `NcclAnalyser` | Multi-rank collective latency/bandwidth/skew analysis. | [Analyze collectives with NcclAnalyser](../how-to/nccl-analysis.md), [`nccl_analyser_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nccl_analyser_example.ipynb) | +| `TraceDiff` | Morphological comparison of two trace trees. | [Compare two traces](../how-to/compare-traces.md), [`trace_diff_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace_diff_example.ipynb) | +| `EventReplay` | Extract and replay isolated operations. | [Replay a single operation](../how-to/event-replay.md), [`event_replayer_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/event_replayer_example.ipynb) | +| `TraceFusion` | Merge multi-rank traces for Perfetto visualization. | [Fuse multi-rank traces](../how-to/trace-fusion.md), [`trace_fusion_example.py`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace_fusion_example.py) | +| `Reporting` | The report generators behind the CLI tools; importable to return pandas data frames. | [Generate a PyTorch performance report](../how-to/generate-perf-report-pytorch.md) | | `TraceUtils` | Trace utilities, including inference-trace splitting. | — | -For report-column definitions across all sheets, see -`docs_original/perf_report_columns.md` in the repository. +For report-column definitions across all sheets, see the +[Performance report column reference](./perf-report-columns.md). ```{note} For a class- and function-level SDK reference generated directly from diff --git a/docs/reference/perf-report-columns.md b/docs/reference/perf-report-columns.md new file mode 100644 index 000000000..94595863f --- /dev/null +++ b/docs/reference/perf-report-columns.md @@ -0,0 +1,922 @@ + + +# Performance report column reference +```{meta} +:description: Reference for every sheet and column in a TraceLens performance report, including the gpu_timeline breakdown, operation-analysis sheets, roofline metrics, and collective communication analysis. +:keywords: TraceLens, performance report, column reference, gpu_timeline, ops, ops_summary, ops_unique_args, roofline, GEMM, SDPA, convolution, NCCL, coll_analysis, GFLOPS, TFLOPS, arithmetic intensity, ROCm, AMD Instinct, MI300X +``` + +This topic explains the columns in each sheet of the TraceLens performance report. The report is an Excel file with multiple sheets, and each sheet analyzes a different aspect of GPU performance. Use it as a lookup while you read a report generated with one of the how-to topics listed under [Related topics](#related-topics). + +## Overview + +The performance report Excel file contains multiple sheets analyzing different aspects of GPU performance. The core sheets are: + +| Sheet | Description | +|-------|-------------| +| `gpu_timeline` | High-level GPU time breakdown. | +| `ops` | Detailed per-operation data (base data). | +| `ops_summary_by_category` | Operations summarized by category. | +| `ops_summary` | Operations summarized by name. | +| `ops_unique_args` | Operations summarized by unique argument combinations. | + +Additional sheets can include operation-specific analysis (GEMM, SDPA_fwd, CONV_fwd, and so on), kernel summary, short kernels, and collective analysis. + +### Unit conventions + +- *Time*: all times from the trace are in microseconds (µs) unless explicitly stated otherwise (for example, `time ms` in `gpu_timeline` is in milliseconds). +- *Compute*: GFLOPS (billions of FLOPs), TFLOPS/s (trillions of FLOPs per second). +- *Memory*: MB (megabytes), GB/s (gigabytes per second), TB/s (terabytes per second). + +## The gpu_timeline sheet + +The `gpu_timeline` sheet provides a high-level breakdown of GPU time into computation, communication, memory copy, and idle time, accounting for overlaps between different types of operations. + +### Example output + +Here's a typical `gpu_timeline` sheet from a distributed training workload: + +| type | time ms | percent | +| --------------------- | --------- | --------- | +| computation_time | 56305.19 | 99.30 | +| exposed_comm_time | 240.88 | 0.42 | +| exposed_memcpy_time | 14.44 | 0.03 | +| busy_time | 56560.52 | 99.75 | +| idle_time | 143.16 | 0.25 | +| total_time | 56703.68 | 100.00 | +| total_comm_time | 17203.43 | 30.34 | +| total_memcpy_time | 14.47 | 0.03 | + +In this example: + +- 99.30% computation time, so the GPU is very efficiently utilized. +- 0.42% exposed communication, which is excellent. Most communication (30.34% total - 0.42% exposed = 29.92%) overlaps with computation. +- 0.25% idle time, so there are minimal gaps and good kernel launch efficiency. +- This workload demonstrates effective computation/communication overlap. + +### Event classification + +GPU events are classified into three categories based on their `cat` field and kernel name: + +``` +GPU Event +│ +├─ cat = "gpu_memcpy"? +│ └─ YES → Memory Copy (H2D, D2H, D2D) +│ +├─ cat = "kernel"? +│ └─ YES → Does kernel name contain "nccl"? +│ ├─ YES → Communication (AllReduce, AllGather, ReduceScatter, etc.) +│ └─ NO → Computation (GEMM, Conv, Elementwise, etc.) +│ +└─ cat = "gpu_memset"? + └─ YES → Computation (grouped here for simplicity; typically very short) +``` + +```{note} +- "Computation" includes all kernels doing work (GEMM, convolution, elementwise, and so on), not just compute-bound operations. +- Communication kernels (NCCL) include both synchronization delay and actual data transfer time. In single-rank traces, these components can't be separated, so `total_comm_time` represents the total duration. See the NCCL Analyzer documentation for multi-rank analysis that can break down communication into sync and transfer phases. +``` + +### How time is calculated + +*Step 1: merge events by category.* Events of the same category are merged across all GPU streams into non-overlapping intervals. + +Example, merging computation events: + +``` +Stream 0: ──[Kernel A]────────[Kernel B]── +Stream 1: ─────[Kernel C]──[Kernel D]───── + ↓ +Merged: ──[──────────]──[──────────]── + (overlapping kernels merged into single intervals) +``` + +*Step 2: create interval sets.* After merging, there are four sets of non-overlapping intervals: + +- `COMP` = merged computation intervals +- `COMM` = merged communication intervals +- `MEMCPY` = merged memcpy intervals +- `ALL_GPU` = merged intervals of ALL GPU events (computation + communication + memcpy) + +*Step 3: apply set arithmetic.* Exposed metrics are calculated by subtracting overlaps: + +``` +exposed_comm intervals = COMM - COMP +exposed_memcpy intervals = MEMCPY - COMP - COMM +``` + +In simple terms: + +- Exposed communication is communication time that doesn't overlap with computation. +- Exposed memcpy is memcpy time that doesn't overlap with computation or communication. + +*Step 4: sum interval durations.* Time for each metric is the sum of durations of all intervals in that set: + +``` +computation_time = sum of durations in COMP +exposed_comm_time = sum of durations in (COMM - COMP) +exposed_memcpy_time = sum of durations in (MEMCPY - COMP - COMM) +busy_time = sum of durations in ALL_GPU +idle_time = total_time - busy_time +total_comm_time = sum of durations in COMM +total_memcpy_time = sum of durations in MEMCPY +total_time = end of last GPU event - start of first GPU event +``` + +The equation: + +``` +computation_time + exposed_comm_time + exposed_memcpy_time + idle_time = total_time +``` + +### Columns + +| Column | Description | Values | +|--------|-------------|--------| +| `type` | Category of GPU time | `computation_time`, `exposed_comm_time`, `exposed_memcpy_time`, `busy_time`, `idle_time` (or `micro_idle_time` and `macro_idle_time`), `total_comm_time`, `total_memcpy_time`, `total_time` | +| `time ms` | Time in milliseconds | Actual duration for each category | +| `percent` | Percentage of total time | `(time ms / total_time) * 100` | + +### Interpreting results + +- High `computation_time` (>80%): workload is efficiently using the GPU. +- High `exposed_comm_time`: communication isn't overlapped with computation, so optimize with computation/communication overlap. +- High `exposed_memcpy_time`: memory transfers are blocking work, so optimize data movement. +- High `idle_time`: the GPU is sitting idle, so check for CPU bottlenecks, kernel launch overhead, or synchronization. + +Generated by `TreePerfAnalyzer.get_df_gpu_timeline()` using `GPUEventAnalyser.compute_metrics()`. + +## Operation analysis + +The following sections analyze CPU operations that launch GPU kernels. Each operation is analyzed for its direct GPU time impact. + +### The ops sheet (base data) + +The `ops` sheet provides detailed per-operation data showing each CPU operation that launches GPU kernels. This is the base unsummarized data; the following sheets provide different ways of summarizing this information. Each row represents one CPU operation instance from your workload that launched GPU kernels, showing exactly which kernels it launched and how long they took. + +Generated by `TreePerfAnalyzer.get_df_kernel_launchers()`. + +#### Why analyze operations instead of kernels + +When you look at a PyTorch trace, you might be tempted to analyze GPU kernels directly. However, this has significant limitations: + +- Kernel names are cryptic and ambiguous. A kernel named `Cijk_Ailk_Bljk_BBS_BH_Bias_HAS_SAV...` tells you almost nothing about what computation it's doing. The same kernel name can also map to different computations depending on input shape, dtype, and memory layout. +- Kernel names vary across platforms. The same matrix multiply appears as `nvjet_*` or `cutlass_*` on NVIDIA GPUs, but as `Cijk_*` on AMD GPUs. This makes cross-platform comparison nearly impossible. +- Operations are stable and meaningful. Names like `aten::addmm` (matrix multiply with add) or `aten::conv2d` are platform-independent and immediately tell you what computation is happening. Combined with argument information (shapes, dtypes, strides), they fully define the computation in a reproducible way. + +By analyzing at the operation level, you get insights that are portable across platforms, interpretable without deep kernel knowledge, and reproducible. + +#### Which operations are analyzed + +TraceLens analyzes leaf operations, the lowest-level CPU operations in the call stack that directly launch GPU kernels. This gives you the most granular view without double-counting. + +Example call stack (showing all layers from the trace): + +``` +└── (python_function) nn.Module: Linear_75 + └── (python_function) forward @ linear.py:124 + └── (cpu_op) aten::linear + ├── (cpu_op) aten::to + │ └── (cpu_op) aten::_to_copy + │ └── (cpu_op) aten::copy_ ← Leaf op + │ └── (cuda_runtime) hipLaunchKernel ← Runtime layer + │ └── (kernel) elementwise_kernel... ← GPU kernel + ├── (cpu_op) aten::to + │ └── (cpu_op) aten::_to_copy + │ └── (cpu_op) aten::copy_ ← Leaf op + │ └── (cuda_runtime) hipLaunchKernel ← Runtime layer + │ └── (kernel) elementwise_kernel... ← GPU kernel + └── (cpu_op) aten::linear + └── (cpu_op) aten::addmm ← Leaf op + ├── (cuda_runtime) hipLaunchKernel ← Runtime layer + │ └── (kernel) elementwise_kernel... ← GPU kernel + └── (cuda_runtime) hipExtModuleLaunchKernel ← Runtime layer + └── (kernel) Cijk_Alik_Bljk_BBS_BH... ← GPU kernel +``` + +```{note} +The `cuda_runtime` label is used by the PyTorch profiler even on ROCm platforms. It's just a naming convention. +``` + +In this example: + +- Leaf operations analyzed: `aten::copy_` (2 instances) and `aten::addmm`. +- Not included: `aten::linear`, `aten::to`, `aten::_to_copy` (these are higher-level and don't directly launch kernels). +- Why this matters: if higher-level operations were included, the same GPU time would be counted multiple times. By focusing on leaf operations, each kernel's time is attributed to exactly one operation. + +#### What CPU operations (cpu_op) are + +When you write PyTorch code in Python (like `output = model(input)`), it goes through several layers before reaching the GPU. The trace captures all these layers: + +1. *Python frontend*: your Python code calls `nn.Module` methods (labeled `python_function` in the trace). +2. *Torch dispatcher*: operations are routed through PyTorch's dispatcher, which selects the appropriate implementation based on device, dtype, and other factors (labeled `cpu_op` in the trace). +3. *Runtime layer*: CUDA/HIP API calls to launch kernels (labeled `cuda_runtime` or `cuda_driver` in the trace). +4. *GPU kernels*: the actual computation on the GPU (labeled `kernel`, `gpu_memcpy`, or `gpu_memset` in the trace). + +Operations marked as `cpu_op` in the trace are operations registered in the PyTorch dispatcher. These can be registered in C++ or Python, and represent various levels of abstraction in the execution hierarchy. The key distinction is that TraceLens analyzes the ones that directly launch kernels (the leaf operations in the call stack). The dispatcher layer is where PyTorch attaches rich metadata about the computation. + +```{note} +In the trace hierarchy there's also a runtime layer (labeled `cuda_runtime` or `cuda_driver`) between CPU operations and GPU kernels. This represents the CUDA/HIP API calls that actually launch kernels. The PyTorch profiler uses the `cuda_runtime`/`cuda_driver` naming convention even on ROCm/HIP platforms. It's a naming convention inherited from CUDA. +``` + +#### What arguments operations contain + +Each operation in the trace contains argument information that fully characterizes the computation. These arguments come directly from the JSON event's `args` field that the PyTorch profiler captures. + +Example JSON event from a trace: + +```json +{ + "name": "aten::addmm", + "cat": "cpu_op", + "ts": 1234567890, + "dur": 150, + "args": { + "Input Dims": [[1024, 512], [512, 256], [256]], + "Input type": ["c10::BFloat16", "c10::BFloat16", "c10::BFloat16"], + "Input Strides": [[512, 1], [256, 1], [1]], + "Concrete Inputs": ["", "", "1.0"] + }, + ... +} +``` + +These arguments are extracted and presented in the `ops` sheet: + +| Argument type | Description | Example (from the `aten::addmm` above) | Why it matters | +|---------------|-------------|----------------------------------------|----------------| +| `Input Dims` | Shape of input tensors | `((1024, 512), (512, 256), (256,))` | Different shapes give different performance (tiling, memory access patterns). | +| `Input type` | Data types | `('c10::BFloat16', 'c10::BFloat16', 'c10::BFloat16')` | FP32 vs BF16 vs FP16 affects speed and memory. | +| `Input Strides` | Memory layout (row-major, column-major, and so on) | `((512, 1), (256, 1), (1,))` | Strided vs contiguous affects memory bandwidth. | +| `Concrete Inputs` | Scalar/string arguments | `('', '', '1.0')` | Additional parameters that can affect algorithm selection. | + +Why shapes matter: + +``` +aten::addmm with shape (1024, 512) × (512, 256): Fast (optimized tiling) +aten::addmm with shape (1023, 511) × (511, 255): Slower (odd dimensions, less efficient) +``` + +Why strides matter: + +``` +Same operation, same shape, different strides can have different performance: + stride=(512, 1) vs stride=(1, 512) +``` + +Strides affect memory access patterns. Some strides work better for certain operations depending on how kernels access data. TraceLens captures strides so you can identify stride-dependent performance variations. + +By capturing these arguments, you can group operations by their unique argument combinations. This enables targeted analysis: + +- Identify slow cases: "Which specific input shapes are causing slowdowns?" +- Reproduce issues: "I can reproduce the slow case with these exact inputs." +- Compare across platforms: "Does this shape perform better on NVIDIA or AMD?" + +This combination of operation name plus arguments forms a unique signature that can be aggregated in the summary sheets (`ops_summary_by_category`, `ops_summary`, `ops_unique_args`), enabling you to ask questions at different levels of granularity. + +#### How GPU time is calculated + +For each operation, TraceLens calculates `total_direct_kernel_time_us` using GPU Event Analyzer to account for kernel overlaps. When an operation launches multiple kernels, some can run concurrently on different GPU streams. GPU Event Analyzer computes the actual "busy time", the wall-clock time during which at least one of the operation's kernels is executing. + +Example: + +``` +Operation: aten::addmm + ├── Kernel A: 100 µs (stream 0, executes 0-100 µs) + └── Kernel B: 80 µs (stream 1, executes 20-100 µs, overlaps with Kernel A) + +Naive sum: 100 + 80 = 180 µs ✗ (incorrect) +Actual busy time: 100 µs ✓ (kernels overlapped from 20-100 µs) +``` + +This gives you the actual wall-clock time each operation's kernels occupied the GPU. + +#### Understanding kernel_details + +`kernel_details` captures detailed information about each GPU kernel launched by an operation: kernel name, duration (in microseconds), and stream ID. + +Example from `aten::addmm`: + +```python +[ + {'name': 'elementwise_kernel', 'dur': 2.3, 'stream': 7}, # dur in µs + {'name': 'Cijk_Alik_Bljk_BBS_BH_Bias_HAS_SAV...', 'dur': 45.2, 'stream': 7} # dur in µs +] + +# Analysis: addmm = elementwise (2.3 µs) + GEMM (45.2 µs) +# → GEMM is bottleneck (95% of time), both sequential (same stream) +# → Cijk_* = Tensile GEMM (AMD), cutlass_* would be NVIDIA +``` + +Key insights from `kernel_details`: + +- Backend implementation: kernel names reveal which library is used. + - `Cijk_*`: Tensile GEMM kernels (AMD ROCm) + - `cutlass_*`: CUTLASS kernels (NVIDIA) + - `ck_tile::kentry<...FmhaFwd...>`: Composable Kernel (CK) Flash Attention (AMD) + - `void at::native::*`: PyTorch native kernels (element-wise, and so on) +- Execution breakdown: shows the performance contribution of each kernel in multi-kernel operations. +- Concurrency: same stream = sequential, different streams = potentially concurrent. + +#### Columns + +| Column | Description | Details | +|--------|-------------|---------| +| `name` | Operation name | PyTorch operation name (for example, `aten::addmm`, `aten::index_select`) | +| `op category` | Operation category | Categorized type (for example, GEMM, CONV_fwd, SDPA_fwd, other) | +| `UID` | Unique event identifier | Unique ID for this specific operation instance in the trace | +| `total_direct_kernel_time` | GPU busy time in microseconds | Wall-clock time the GPU was busy executing this operation's kernels (accounts for overlaps using GPU Event Analyzer) | +| `direct_kernel_count` | Number of kernels launched | How many GPU kernels this operation launched | +| `Input Dims` | Input tensor shapes | Tuple of shapes for each input tensor, for example `((30522, 512), (), (141,))` | +| `Input type` | Input data types | Tuple of data types for each input, for example `('c10::BFloat16', 'Scalar', 'long int')` | +| `Input Strides` | Input tensor strides | Tuple of stride tuples for each input, for example `((512, 1), (), (1,))` | +| `Concrete Inputs` | Scalar/string arguments | Additional arguments passed to the operation, for example `('', '0', '')` | +| `kernel_details` | Kernel execution details | List of dicts with kernel name, duration (µs), and stream for each kernel launched, for example `[{'name': '...', 'dur': 3.136, 'stream': 7}]` | + +#### What this data represents + +The PyTorch trace has a hierarchical structure (Python → Operations → Runtime → Kernels). This sheet provides a MECE (mutually exclusive, collectively exhaustive) flat representation focusing on the leaf operations that launch GPU work. + +- Granularity: each row is a single CPU operation instance from the trace. +- Completeness: only operations that launch GPU kernels are included (pure CPU operations aren't shown). +- Raw data: this is unsummarized, so you see every individual operation occurrence. The following sheets (`ops_summary_by_category`, `ops_summary`, `ops_unique_args`) provide different ways to aggregate this data. + +The following three sheets provide different levels of aggregation of the base `ops` data, following a progressive disclosure of complexity. + +### The ops_summary_by_category sheet (most aggregated) + +This is the highest-level summary. It groups operations into broad computational categories (GEMM, convolution, attention, and so on). Use it to quickly identify which types of operations dominate your workload. + +#### Columns + +| Column | Description | Calculation | +|--------|-------------|-------------| +| `op category` | Operation category | Possible values: GEMM, CONV_fwd, CONV_bwd, SDPA_fwd, SDPA_bwd, BN_fwd, BN_bwd, triton, elementwise, reduce, multi_tensor_apply, other | +| `Count` | Number of operations in this category | Count of unique CPU operations | +| `total_direct_kernel_time_ms` | Total GPU time in milliseconds | Sum of all GPU kernel durations launched by operations in this category | +| `Percentage (%)` | Percentage of total GPU time | `(total_direct_kernel_time_ms / sum of all kernel time) * 100` | +| `Cumulative Percentage (%)` | Running cumulative percentage | Sum of percentages from top to current row | + +#### How operations are categorized + +Operations are automatically categorized based on name patterns and kernel characteristics. Some categories are detected from the operation name, while others are detected by inspecting the launched kernel names. + +| Category | Detection method | Example operations | +|----------|------------------|--------------------| +| GEMM | Operation name | `aten::addmm`, `aten::mm`, `aten::bmm`, `aten::baddbmm` | +| CONV_fwd | Operation name | `aten::convolution`, `aten::miopen_convolution`, `aten::cudnn_convolution` | +| CONV_bwd | Operation name | `aten::convolution_backward` | +| SDPA_fwd | Operation name | `aten::_scaled_dot_product_flash_attention`, `aten::_flash_attention_forward` | +| SDPA_bwd | Operation name | `aten::_scaled_dot_product_flash_attention_backward` | +| BN_fwd | Operation name | `aten::batch_norm`, `aten::native_batch_norm`, `aten::cudnn_batch_norm` | +| BN_bwd | Operation name | `aten::native_batch_norm_backward`, `aten::cudnn_batch_norm_backward` | +| triton | Operation name | Operations starting with `triton` | +| elementwise | Kernel name inspection | Operations launching `at::native` elementwise kernels (for example, `aten::relu`, `aten::add`, `aten::mul`) | +| reduce | Kernel name inspection | Operations launching `at::native` reduce kernels | +| multi_tensor_apply | Kernel name inspection | Operations launching `multi_tensor_apply` kernels | +| other | Default | Operations not matching any above patterns | + +Use this sheet when you want a high-level answer to "What types of operations are taking the most time?" + +Generated by `TreePerfAnalyzer.get_df_kernel_launchers_summary_by_category()`. + +### The ops_summary sheet (by operation name) + +This is a mid-level summary. It groups operations by their name (for example, all `aten::addmm` calls together, all `aten::conv2d` calls together). Use it when you know which category is expensive and want to see which specific operations within that category are the culprits. + +#### Columns + +| Column | Description | Calculation | +|--------|-------------|-------------| +| `name` | Operation name | PyTorch operation name (for example, `aten::addmm`, `aten::_flash_attention_forward`) | +| `total_direct_kernel_time_sum` | Total GPU time in microseconds | Sum of all GPU kernel durations launched by this operation type | +| `Count` | Number of operations | Count of instances of this operation | +| `total_direct_kernel_time_ms` | Total GPU time in milliseconds | `total_direct_kernel_time_sum / 1000` | +| `Percentage (%)` | Percentage of total GPU time | `(total_direct_kernel_time_ms / sum of all kernel time) * 100` | +| `Cumulative Percentage (%)` | Running cumulative percentage | Sum of percentages from top to current row | +| `is_recompute` | *(Optional)* Whether this operation is part of activation recomputation | `True` or `False`. Only present when `--detect_recompute` is enabled. The same op name can appear in two rows (one for recompute, one for non-recompute). | + +What this sheet shows: + +- Each unique operation name gets one row (for example, one row for all `aten::addmm` calls). +- All instances of the same operation are aggregated together, regardless of their input shapes, dtypes, or other arguments. +- More granular than the category view, but still hides variation due to different input arguments. +- When `--detect_recompute` is enabled, rows are further split by recompute status. + +Use this sheet when you're asking, "I see GEMM is expensive. Which specific GEMM operation is the problem: `aten::addmm`, `aten::mm`, or `aten::bmm`?" + +Generated by `TreePerfAnalyzer.get_df_kernel_launchers_summary()`. + +### The ops_unique_args sheet (most detailed) + +This is the most detailed summary. It groups operations by unique combinations of operation name AND input arguments (shapes, dtypes, strides, concrete inputs). Use it to identify which specific input patterns are causing performance issues. + +#### Columns + +| Column | Description | Details | +|--------|-------------|---------| +| `name` | Operation name | PyTorch operation name | +| `Input Dims` | Input tensor dimensions | Shape of input tensors (for example, `[[1, 512, 768], [768, 768]]`) | +| `Input type` | Input tensor data types | Data types of inputs (for example, `['c10::BFloat16', 'c10::BFloat16']`) | +| `Input Strides` | Input tensor strides | Memory layout strides for each input tensor | +| `Concrete Inputs` | Scalar input values | Non-tensor inputs like kernel size, stride, padding | +| `operation_count` | Number of occurrences | How many times this exact operation+args combination appeared | +| `total_direct_kernel_time_sum` | Total GPU time in microseconds | Sum of GPU kernel time for all occurrences | +| `total_direct_kernel_time_mean` | Mean GPU time in microseconds | Average GPU time per occurrence | +| `total_direct_kernel_time_median` | Median GPU time in microseconds | Median GPU time across occurrences | +| `total_direct_kernel_time_std` | Standard deviation | Standard deviation of GPU time across occurrences (microseconds) | +| `total_direct_kernel_time_min` | Minimum GPU time | Fastest occurrence (microseconds) | +| `total_direct_kernel_time_max` | Maximum GPU time | Slowest occurrence (microseconds) | +| `ex_UID` | Example event UID | UID of one example event (for further analysis) | +| `kernel_details_summary` | Kernel execution details | Summary of which GPU kernels were launched and their statistics | +| `trunc_kernel_details` | Truncated kernel details | Shortened version of `kernel_details_summary` for readability | +| `Percentage (%)` | Percentage of total GPU time | `(total_direct_kernel_time_sum / sum of all kernel time) * 100` | +| `Cumulative Percentage (%)` | Running cumulative percentage | Sum of percentages from top to current row | +| `is_recompute` | *(Optional)* Whether this operation is part of activation recomputation | `True` or `False`. Only present when `--detect_recompute` is enabled. | + +What makes arguments "unique": + +- Same operation with different input shapes gives different rows (for example, `aten::addmm` with (1024, 512) vs (2048, 1024)). +- Same operation with different data types gives different rows (for example, BF16 vs FP32). +- Same operation with different strides gives different rows (contiguous vs transposed). +- Each unique combination of (name + Input Dims + Input type + Input Strides + Concrete Inputs) gets one row. + +What this sheet shows: + +- Statistics for each unique operation+args combination (count, mean, median, std, min, max). +- Which specific input patterns are slow vs fast. +- Performance variation across different calls to the same operation. + +Use this sheet when you're asking, "I see `aten::addmm` is expensive. Is it slow for all input shapes, or just specific ones? Are there outliers?" + +#### Understanding kernel_details_summary + +`kernel_details_summary` provides aggregated kernel statistics across all occurrences of an operation+args combination. It shows which kernels are consistently launched and their performance distribution. All durations are in microseconds (µs). + +Example for `aten::addmm` (aggregated across 150 occurrences): + +```python +[ + {'kernel_name': 'elementwise_kernel', 'count': 150, 'mean_duration_us': 2.3, 'std_dev_duration_us': 0.1}, + {'kernel_name': 'Cijk_Alik_Bljk_BBS_BH...', 'count': 150, 'mean_duration_us': 45.2, 'std_dev_duration_us': 3.5} +] + +# Analysis: addmm = elementwise (2.3 µs) + GEMM (45.2 µs) across 150 calls +# → GEMM is bottleneck, with moderate variance (std_dev=3.5) → check for outliers with ex_UID +# → elementwise is consistent (std_dev=0.1) +``` + +Use this to identify: + +- Bottlenecks: which kernel in a multi-kernel operation dominates time. For example, in the GPT-3 XL analysis, `aten::addmm` consistently showed a Tensile GEMM kernel taking 97 µs (mean) while setup kernels took <5 µs each. +- Consistency: low `std_dev` = stable, high `std_dev` = investigate outliers with `ex_UID`. For example, if `std_dev_duration_us` is 15.3 when `mean_duration_us` is 120.5, that's 12.7% variance, worth investigating. +- Backend recipe: which kernels are always launched together (for example, elementwise + GEMM for addmm). +- Call count validation: verify all occurrences launch the same kernels (same `count`). + +```{note} +`trunc_kernel_details` provides a shortened version for spreadsheet readability. +``` + +#### Deep-dive with ex_UID + +The `ex_UID` column provides a UID of one example event with this operation+arguments combination. You can use it to access the actual event object for deeper analysis: + +```python +# Get the event object +event = tree.get_UID2event(ex_UID) + +# Analyze call stack and context: +parent = tree.get_parent_event(event) # Get parent operation +children = tree.get_children_events(event) # Get child operations +gpu_events = tree.get_gpu_events(event) # Get launched GPU kernels +tree.traverse_parents_and_print(event) # See full call stack above this +tree.traverse_subtree_and_print(event) # See full call stack below this + +# Replay the operation for benchmarking: +from TraceLens import EventReplayer +replayer = EventReplayer(event, device='cuda') +replayer.replay() # Replays the exact operation with same inputs/args +``` + +This is useful when you want to investigate a specific slow case in detail or benchmark it in isolation. See [Replay a traced operation](../how-to/event-replay.md) for more on replaying operations. + +Replaying from the perf report (no trace required): you can also replay operations directly from the Excel report without needing the original trace file: + +```python +import pandas as pd +import ast +from TraceLens import EventReplayer + +# Read ops from perf report +df = pd.read_excel('perf_report.xlsx', sheet_name='ops_unique_args') + +# Convert row to event format +def row_to_event(row): + return { + 'name': row['name'], + 'args': { + 'Input Dims': ast.literal_eval(row['Input Dims']), + 'Input Strides': ast.literal_eval(row['Input Strides']), + 'Input type': ast.literal_eval(row['Input type']), + 'Concrete Inputs': ast.literal_eval(row['Concrete Inputs']), + } + } + +# Replay an operation +row = df.iloc[0] # or filter by name/args +event = row_to_event(row) +replayer = EventReplayer(event, device='cuda') +replayer.replay() + +# Get standalone repro artifacts +repro_info = replayer.get_repro_info() # Returns serializable JSON +``` + +This is particularly useful for creating standalone reproducers or benchmarking specific operations without the full model or trace. See [`examples/event_replayer_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/event_replayer_example.ipynb) for complete examples including batched replay. + +Generated by `TreePerfAnalyzer.get_df_kernel_launchers_unique_args()`. + +## Performance metrics sheets (roofline analysis) + +For certain operation categories (GEMM, CONV, SDPA, UnaryElementwise, BinaryElementwise), TraceLens generates additional sheets with roofline model metrics. These sheets help you understand how efficiently operations are using the GPU's computational and memory bandwidth capabilities. + +```{note} +While hardware counter profilers like `rocprof compute` and `nsight compute` reveal what the GPU actually executed, including effects of padding, redundant memory movement, and cache behavior, TraceLens focuses on the useful work dictated by operator semantics. Used together, these two perspectives provide a richer picture: hardware counters expose low-level execution characteristics, while TraceLens reveals the efficiency of the computation in context. +``` + +### Understanding the metrics pipeline + +The performance metrics are calculated through a 4-step pipeline: + +``` +Trace Event → Parameter Extraction → Static Metrics + Runtime → Performance Metrics + ↑ ↑ + (Compute Model) (GPU Time) +``` + +#### Step 1: event from trace + +Starting with an operation event from the trace JSON: + +```json +{ + 'name': 'aten::addmm', + 'args': { + 'Input Dims': [[6144], [40960, 1536], [1536, 6144], [], []], + 'Input type': ['c10::BFloat16', 'c10::BFloat16', 'c10::BFloat16', 'Scalar', 'Scalar'], + 'Input Strides': [...] + } +} +``` + +#### Step 2: parameter extraction + +TraceLens uses operation-specific performance models to extract relevant parameters from the event's `args` field: + +```python +# For aten::addmm: A @ B + C where A is (M, K), B is (K, N), C is (M, N) +params = { + 'M': 40960, # From Input Dims[1][0] + 'N': 6144, # From Input Dims[2][1] + 'K': 1536, # From Input Dims[1][1] + 'bias': True, # C tensor present + 'dtype': 'c10::BFloat16' # From Input type +} +``` + +Each operation type (GEMM, Conv, SDPA, and so on) has its own `get_param_details()` method that knows how to extract the relevant parameters from that operation's argument structure. See [Operation parameters reference](#operation-parameters-reference) for details on what gets extracted for each operation type. + +#### Step 3: parallel calculation + +Once parameters are extracted, two pieces of information are computed in parallel. + +Static operation metrics (via the compute model): the performance model calculates the theoretical work based on the operation type: + +```python +# GEMM compute model +GFLOPS = (2 * M * N * K) / 1e9 # 773.35 GFLOPS +Bytes_moved = (M*K + K*N + M*N) * bytes_per_elem # 618.01 MB (for BF16: 2 bytes/elem) +FLOPS_per_Byte = GFLOPS * 1e9 / Bytes_moved # 1193.38 (arithmetic intensity) +``` + +These metrics are static; they depend only on the operation parameters, not on actual execution. + +Kernel time (from Trace2Tree): the actual GPU execution time is extracted by: + +1. Finding all GPU kernels launched by this operation (using Trace2Tree's hierarchical analysis). +2. Using `GPUEventAnalyser` to compute total busy time, accounting for kernel overlaps. + +```python +T = 1884 µs # Measured kernel execution time +``` + +#### Step 4: runtime performance metrics + +Finally, static work metrics are combined with measured time to produce runtime performance: + +```python +TFLOPS/s = GFLOPS / (T / 1e6) = 773.35 / (1884 / 1e6) = 410.48 TFLOPS/s +TB/s = (Bytes_moved / 1e12) / (T / 1e6) = 0.34 TB/s +``` + +These metrics tell you: + +- TFLOPS/s: how many trillion floating-point operations per second were achieved. +- TB/s: how many terabytes per second of memory bandwidth were utilized. + +### Why this matters: roofline analysis + +The combination of TFLOPS/s, TB/s, and FLOPS/Byte (arithmetic intensity) allows you to perform roofline analysis: + +- High FLOPS/Byte (compute-intensive): performance is limited by compute throughput (TFLOPS/s). + - Example: large GEMM operations (for example, 6144×2048 × 2048×8192). + - Goal: maximize TFLOPS/s (approach the GPU's peak compute). +- Low FLOPS/Byte (memory-intensive): performance is limited by memory bandwidth (TB/s). + - Example: element-wise operations, small GEMMs (for example, 2048×2048). + - Goal: maximize TB/s (approach the GPU's peak bandwidth). + +The roofline "knee point": the boundary between memory-bound and compute-bound is determined by the GPU's hardware characteristics: + +``` +Arithmetic Intensity Threshold = Peak FLOPS / Peak Bandwidth +``` + +For example: + +- MI325X: 1300 TFLOPS / 6000 GB/s = ~217 FLOPs/Byte +- H100: 1000 TFLOPS / 3350 GB/s = ~298 FLOPs/Byte +- MI300X: 1300 TFLOPS / 5300 GB/s = ~245 FLOPs/Byte + +Operations with FLOPs/Byte below this threshold are memory-bound; operations above are compute-bound. This is why small GEMMs (FLOPs/Byte ~8-50) are memory-bound, while large GEMMs (FLOPs/Byte ~100-300) are compute-bound on these GPUs. By comparing your achieved TFLOPS/s and TB/s against the GPU's theoretical peaks, you can identify optimization opportunities. + +Interpreting performance numbers: understanding what "good" performance looks like requires comparing against theoretical peaks and max-achievable performance: + +| GPU | Peak compute (BF16) | Peak memory BW | Example utilization | +|-----|---------------------|----------------|---------------------| +| MI325X | ~1.3 PFLOPS | ~6 TB/s | 500-800 TFLOPS/s = 38-62% of peak (typical for medium GEMMs) | +| H100 | ~1.0 PFLOPS | ~3.35 TB/s | 400-700 TFLOPS/s = 40-70% of peak | +| MI300X | ~1.3 PFLOPS | ~5.3 TB/s | Similar to MI325X | + +Understanding theoretical vs. real-world performance: TraceLens uses idealized assumptions that represent upper bounds on performance. The actual roofline model has two key differences from the theoretical one: + +1. Peak FLOPS: the theoretical peak represents hardware limits, but real-world applications typically achieve lower performance due to realistic constraints. AMD's Max-Achievable FLOPS (MAF) methodology provides more realistic performance targets. For details, see: + - [Understanding Peak and Max-Achievable FLOPS](https://rocm.blogs.amd.com/software-tools-optimization/Understanding_Peak_and_Max-Achievable_FLOPS/README.html) + - [Measuring Max-Achievable FLOPS (Part 2)](https://rocm.blogs.amd.com/software-tools-optimization/measuring-max-achievable-flops-part2/README.html) +2. Arithmetic intensity: TraceLens assumes 100% cache hit rate, so each memory location is accessed once from global memory, then perfectly cached. For example, in a GEMM, matrices A and B are counted only once even if elements are reused. In reality: + - Cache misses, evictions, and redundant loads cause actual memory movement to be higher. + - This means actual arithmetic intensity is lower than TraceLens calculates. + - Impact: an operation that TraceLens shows as compute-bound (high FLOPs/Byte) might actually be memory-bound in practice. + - This is a common practice in performance modeling (see [NVIDIA's approach](https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#math-mem-bounds)). + - For typical compute-bound operations (large GEMMs, SDPA, convolutions), this limitation has minimal practical impact since they remain compute-bound even with lower arithmetic intensity. + +```{note} +Hardware profilers like `rocprof compute` or `nsight compute` measure actual memory transactions and are needed to determine true arithmetic intensity and memory-boundedness. +``` + +Real examples (from GPT-3 XL on MI325X, BF16): + +``` +Operation TFLOPS/s TB/s FLOPs/Byte Interpretation +────────────────────────────────────────────────────────────────────────────── +mm(256×256 × 256×256) 45 2.1 ~8 Memory-bound, 35% BW utilization +mm(2048×6144 × 6144×2048) 531 0.61 ~138 Compute-bound, 40% efficiency +mm(6144×2048 × 2048×2048) 624 0.71 ~117 Compute-bound, 48% efficiency +addmm(6144×2048 × 2048×8192) 762 0.59 ~203 Compute-bound, 58% efficiency +``` + +Understanding compute-bound vs. memory-bound: + +- Memory-bound (FLOPs/Byte < ~50): small GEMM with arithmetic intensity of ~8. Performance is limited by memory bandwidth (~2.1 TB/s), not compute. To optimize, focus on improving memory access patterns. +- Compute-bound (FLOPs/Byte > ~100): large GEMMs with high arithmetic intensity. Performance is limited by compute throughput (531-762 TFLOPS/s). The 40% vs 58% efficiency difference reflects kernel optimization quality (tile sizes, wave occupancy), not the compute vs. memory boundedness. + +```{note} +Arithmetic intensity (FLOPs/Byte) determines whether an operation is compute-bound or memory-bound. The percentage of peak achieved indicates optimization quality within that constraint. See [NVIDIA's GEMM Performance Guide](https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html) for more on this distinction. +``` + +### What these sheets contain + +Performance metrics sheets are generated for operations with available performance models: + +- GEMM: matrix multiply operations (addmm, mm, bmm, baddbmm, and so on). +- CONV_fwd / CONV_bwd: convolution operations. +- SDPA_fwd / SDPA_bwd: scaled dot-product attention. +- UnaryElementwise / BinaryElementwise: element-wise operations. + +Each sheet contains: + +- All columns from `ops_unique_args` (operation name, arguments, occurrences, and so on). +- Static metrics: GFLOPS, Data Moved (MB), FLOPS/Byte (calculated once from parameters). +- Compute Spec: combined compute type and precision (for example, `matrix_bf16`, `vector_fp32`). This indicates: + - `matrix_*`: operations using matrix compute units (GEMM, CONV, SDPA). + - `vector_*`: operations using vector compute units (elementwise). + - Precision: `fp8`, `fp16`, `bf16`, `fp32`, `fp64`. +- Roofline metrics (when `--gpu_arch_json_path` is provided): Roofline Time (µs), Pct Roofline; compares achieved time to the theoretical roofline bound. +- Runtime metrics: Kernel Time (µs), TFLOPS/s, TB/s (statistics across all occurrences). + - `mean`, `median`: central tendency; use median if variance is high. + - `std_dev`: variability; high `std_dev` (>10% of mean) suggests inconsistent performance. + - `min`, `max`: range; a large spread can indicate outliers worth investigating. + +```{note} +These sheets contain all the columns from `ops_unique_args`, so you can replay operations from these sheets using the same approach described in [Understanding kernel_details_summary](#understanding-kernel_details_summary). Simply read the desired performance metrics sheet (for example, `GEMM`, `SDPA_fwd`) instead of `ops_unique_args`. +``` + +Generated by `TreePerfAnalyzer.build_df_perf_metrics()` and `TreePerfAnalyzer.summarize_df_perf_metrics()`. + +### Operation parameters reference + +TraceLens extracts operation-specific parameters from trace events to calculate theoretical FLOPs and memory traffic. Each operation type has its own parameter extraction logic based on what information is needed for its performance model. + +Common sources: + +- `Input Dims`: tensor shapes. +- `Input type`: data types. +- `Concrete Inputs`: scalar arguments (stride, padding, and so on). + +Data type sizes: `fp64` = 8 bytes, `fp32` = 4 bytes, `bf16/fp16` = 2 bytes, `fp8` = 1 byte. + +#### GEMM (matrix multiply) + +| Parameter | Meaning | Used in | +|-----------|---------|---------| +| `M` | Number of rows in first matrix | All GEMM ops | +| `N` | Number of columns in second matrix | All GEMM ops | +| `K` | Inner dimension (A cols = B rows) | All GEMM ops | +| `B` | Batch size | bmm, baddbmm | +| `bias` | Whether bias is added | addmm, baddbmm | +| `dtype` | Data type (BFloat16, Float32, and so on) | All GEMM ops | + +#### Convolution + +| Parameter | Meaning | +|-----------|---------| +| `input_shape` | Input tensor shape (N, C_in, H, W, ...) | +| `filter_shape` | Filter/weight shape (C_out, C_in/groups, kH, kW, ...) | +| `stride` | Stride for convolution (for example, (1, 1)) | +| `padding` | Padding applied (for example, (0, 0)) | +| `dilation` | Dilation factor | +| `groups` | Number of groups for grouped convolution | +| `bias` | Whether bias is present | +| `dtype` | Data type | + +#### SDPA (scaled dot-product attention) + +| Parameter | Meaning | +|-----------|---------| +| `B` | Batch size | +| `N_Q` | Query sequence length | +| `N_KV` | Key/Value sequence length | +| `H_Q` | Number of query attention heads | +| `H_KV` | Number of key/value heads (for GQA/MQA) | +| `d_h_qk` | Head dimension for Q and K | +| `d_h_v` | Head dimension for V | +| `causal` | Whether causal masking is applied | +| `dropout` | Dropout probability | +| `dtype` | Data type | + +```{note} +Different attention implementations use different tensor layouts (BHND vs BNHD). +``` + +#### Element-wise operations + +| Parameter | Meaning | +|-----------|---------| +| `shape` | Tensor shape | +| `dtype` | Data type | + +For binary ops (add, mul, and so on), two shapes are extracted and broadcasting is handled automatically. + +For the specific formulas used to calculate FLOPs and memory traffic from these parameters, see the performance model implementations in [`TraceLens/PerfModel/perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/perf_model.py). + +Extending with custom operations: performance metrics sheets are only generated for operations that have a registered performance model. If your workload includes custom operations (for example, from Megatron, vLLM, or other libraries), you can extend TraceLens by: + +1. Creating a performance model class for your operation (inherit from `GEMM`, `CONV`, `SDPA`, and so on). +2. Implementing `get_param_details()`, `flops()`, and `bytes()` methods. +3. Passing an extension file via `--extension_file` when generating the report. + +See [`examples/example_megatron_extension.py`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/example_megatron_extension.py) for a complete example of extending TraceLens with custom Megatron operations. + +```{note} +If your custom operation is frequently used across multiple projects, it can be added as a native operation in TraceLens. Open an issue or reach out to discuss integration. +``` + +## Collective communication analysis + +The `coll_analysis` sheet analyzes NCCL collective communication operations from a single rank's perspective. It shows which collectives are taking the most time on this rank. + +```{note} +This is single-rank analysis. For multi-rank synchronization analysis (skew, stragglers), see [Generate a multi-rank collective report](../how-to/collective-report.md). +``` + +This sheet provides aggregated statistics for collective operations seen by this rank, grouped by collective type, process group, data type, and message size. + +### Collective identification + +| Column | Description | +|--------|-------------| +| `rank` | Rank ID (single rank from this trace) | +| `Process Group Name` | Process group identifier | +| `Process Group Ranks` | List of ranks in this process group (for example, `[0, 1, 2, 3, 4, 5, 6, 7]`) | +| `Collective name` | Type of collective operation (for example, `allreduce`, `allgather`, `reduce_scatter`) | +| `Group size` | Number of ranks in the process group | +| `dtype` | Data type (for example, `Float`, `BFloat16`) | +| `In msg nelems` | Number of elements in input message | +| `Out msg nelems` | Number of elements in output message | +| `In split size` | Input split configuration (for split collectives) | +| `Out split size` | Output split configuration (for split collectives) | +| `stream` | GPU stream ID where the collective executes | + +### Message sizes + +| Column | Description | +|--------|-------------| +| `In msg size (MB)_first` | Input message size in megabytes | +| `Out msg size (MB)_first` | Output message size in megabytes | + +### Duration statistics + +All times are in microseconds. + +| Column | Description | +|--------|-------------| +| `dur_sum` | Total duration across all occurrences | +| `dur_mean` | Mean duration per occurrence | +| `dur_std` | Standard deviation of duration | +| `dur_min` | Minimum duration | +| `dur_max` | Maximum duration | +| `operation_count` | Number of times this collective appeared | + +### Understanding the metrics + +Duration is the time this rank spends in the collective operation (in microseconds). It includes: + +- Synchronization delay waiting for other ranks. +- Actual data transfer time. + +```{note} +From a single rank's perspective, you can't determine whether time is spent waiting for other ranks (sync) or in actual communication. For multi-rank analysis with skew detection and straggler identification, use NCCL Analyzer with traces from all ranks. See [Generate a multi-rank collective report](../how-to/collective-report.md). +``` + +### Interpreting results + +- High total duration: sort by `dur_sum` to find the most time-consuming collective operations on this rank. +- High variance (large `dur_std` or difference between `dur_min` and `dur_max`): + - Indicates inconsistent performance. + - Can suggest network contention or varying degrees of synchronization delay. + - Consider investigating with multi-rank traces to identify stragglers. +- Frequent operations (high `operation_count`): + - Even if individual operations are fast, high frequency can add up (`dur_sum` accounts for this). + - Check if collectives can be batched or overlapped with computation. + +Example analysis: + +``` +If you see: +- allreduce with dur_mean=3596 µs (3.6 ms), operation_count=2 +- But dur_std=35.5 µs (low variance) +→ Collective is consistent and moderately fast + +If you see: +- allreduce with dur_mean=192.6 µs, dur_std=313.7 µs, dur_max=1019.4 µs +→ High variance! One occurrence took 1ms while another took 60µs +→ Investigate with multi-rank trace to find if this rank or another is the straggler +``` + +Generated by `NcclAnalyser.build_df_summary_long()`. Enable with the `--disable_coll_analysis` flag (enabled by default). + +## Additional sheets + +Depending on the command-line arguments used when generating the report, additional analysis sheets can be present: + +- `kernel_summary`: per-kernel statistics aggregated by kernel name (enabled with `--kernel_summary`). +- `short_kernel_histogram`, `short_kernels_summary`: analysis of very short kernels (enabled with `--short_kernel_study`). +- `unified_perf_summary`: unified perf metrics for all ops with perf models or leaf ops that launch GPU kernels. Includes GFLOPS, TFLOPS/s, Data Moved, FLOPS/Byte, TB/s metrics aggregated by unique args. When `--detect_recompute` is enabled, an `is_recompute` column is added to split rows by recompute status. + +## Common analysis workflows + +A typical top-down analysis flow: + +1. Start with `gpu_timeline`: get a high-level time breakdown (computation, communication, idle). + - High idle time points to a CPU bottleneck or kernel launch issues. + - High exposed communication points to poor overlap with computation. +2. Identify bottleneck categories (`ops_summary_by_category`): which operation types dominate? GEMM, convolution, attention, elementwise, and so on. +3. Find expensive operations (`ops_summary`): which specific operations take the most time? +4. Analyze variants (`ops_unique_args`): which input shapes/arguments are slow? + - Compare performance across different dimensions. + - Check for stride or alignment issues. +5. Deep dive with roofline (GEMM, SDPA_fwd, and so on): assess efficiency vs. hardware peaks. +6. Check collectives (`coll_analysis`): analyze communication costs in distributed training. +7. Replay operations: reproduce and benchmark specific cases in isolation. + +## Related topics + +- [Generate a PyTorch performance report](../how-to/generate-perf-report-pytorch.md) +- [Generate a JAX performance report](../how-to/generate-perf-report-jax.md) +- [Generate a rocprofv3 performance report](../how-to/generate-perf-report-rocprof.md) +- [Replay a traced operation](../how-to/event-replay.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index 2e99fcdf0..fc5b1872e 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -25,26 +25,60 @@ subtrees: title: Generate reports entries: - file: how-to/generate-perf-report-pytorch - title: PyTorch performance report + title: PyTorch performance report - file: how-to/generate-perf-report-pytorch-inference - title: PyTorch inference performance report + title: PyTorch inference performance report - file: how-to/generate-perf-report-jax - title: JAX performance report + title: JAX performance report - file: how-to/generate-perf-report-rocprof - title: rocprof performance report + title: rocprof performance report - file: how-to/collective-report - title: Collective-communication report + title: Collective-communication report + - file: how-to/compare-perf-reports + title: Compare performance reports - file: how-to/compare-traces title: Compare two traces - file: how-to/event-replay title: Replay a single operation - file: how-to/trace-fusion title: Fuse multi-rank traces + - file: how-to/tree-perf-analysis + title: Analyze performance with TreePerf + - file: how-to/gpu-event-analysis + title: Analyze a GPU timeline + - file: how-to/nccl-analysis + title: Analyze collective communication + - file: how-to/origami-integration + title: Estimate kernel times with Origami + +- caption: Concepts + entries: + - file: conceptual/trace2tree + title: The Trace2Tree data model + - file: conceptual/torch-profiling-analysis + title: Understanding PyTorch traces + - file: conceptual/shape-metadata + title: Tensor shape metadata + - file: conceptual/gemm-analysis + title: GEMM analysis + - file: conceptual/perf-model-walkthrough + title: Triton kernel performance model + +- caption: Tutorials + entries: + - file: tutorials/torch-profiling + title: PyTorch profiling walkthrough + - file: tutorials/distributed-profiling + title: Distributed profiling walkthrough + - file: tutorials/anomaly-detection + title: Anomaly detection walkthrough - caption: Reference entries: - file: reference/api-reference title: API reference + - file: reference/perf-report-columns + title: Performance report columns - caption: About entries: diff --git a/docs/sphinx/requirements.txt b/docs/sphinx/requirements.txt index f40e2d3af..c831419df 100644 --- a/docs/sphinx/requirements.txt +++ b/docs/sphinx/requirements.txt @@ -1 +1 @@ -rocm-docs-core==1.22.0 +rocm-docs-core==1.32.0 diff --git a/docs_original/conceptual/anomaly_detection_guide.ipynb b/docs/tutorials/anomaly-detection.ipynb similarity index 100% rename from docs_original/conceptual/anomaly_detection_guide.ipynb rename to docs/tutorials/anomaly-detection.ipynb diff --git a/docs_original/conceptual/distributed_profiling_guide.ipynb b/docs/tutorials/distributed-profiling.ipynb similarity index 100% rename from docs_original/conceptual/distributed_profiling_guide.ipynb rename to docs/tutorials/distributed-profiling.ipynb diff --git a/docs_original/conceptual/torch_profiling_guide.ipynb b/docs/tutorials/torch-profiling.ipynb similarity index 100% rename from docs_original/conceptual/torch_profiling_guide.ipynb rename to docs/tutorials/torch-profiling.ipynb diff --git a/docs_original/EventReplay.md b/docs_original/EventReplay.md deleted file mode 100644 index c8db3514e..000000000 --- a/docs_original/EventReplay.md +++ /dev/null @@ -1,152 +0,0 @@ - - -# Event Replay - -Optimizing GPU performance in deep learning requires isolating and benchmarking individual operations to identify bottlenecks. However, reproducing operations directly from complex model code or large profiles can be cumbersome. - -Event Replay is a Python-based tool within TraceLens that extracts and replays almost arbitrary PyTorch operations using minimal, portable Intermediate Representation (IR). It enables users to easily reproduce, analyze, and benchmark specific operators independently from the original model execution, streamlining performance optimization workflows. - ---- - -## Key Features - -- **Generic Operator Replay**: Reconstructs and benchmarks any PyTorch operator from profile data, including convolutions, GEMMs, reductions, element-wise operations, and more. -- **Minimalistic IR**: Extracts essential operator attributes (tensor shapes, strides, dtypes, and other arguments) into a lightweight, portable JSON-based IR. -- **Portable Artifacts**: Enables sharing standalone artifacts (JSON IR and scripts) with teammates or upstream repositories without requiring access to the model or TraceLens. - ---- - - -## Quick Start - -### Example: Replay a Single Event - -```python -from TraceLens import TreePerfAnalyzer, EventReplayer - -# Load profile and get event -perf_analyzer = TreePerfAnalyzer.from_file('/path/to/profile.json') -uid = 12345 # Replace with actual UID of interest -event = perf_analyzer.tree.get_UID2event(uid) - -# Initialize and replay -replayer = EventReplayer(event, device='cuda') -replayer.replay() -``` - ---- - -## Batch Replay and Benchmark - -### Extract Operator IR from TraceLens Profiles - -```python -import json - -# Extract replay IR for events of interest -repro_data = [EventReplayer(event, lazy=True).get_repro_info() for event in events_of_interest] - -with open('event_replay_ir.json', 'w') as f: - json.dump(repro_data, f, indent=4) -``` - -```bash -python batched_replay.py event_replay_ir.json -``` - -#### Example Output - -``` -[7/11] Replaying: aten::convolution - Reconstructing arguments for 'aten::convolution'... - Positional Args: - input Tensor: {'shape': [20, 128, 28, 28], 'dtype': 'c10::BFloat16', 'strides': [100352, 784, 28, 1]} - weight Tensor: {'shape': [256, 128, 3, 3], 'dtype': 'c10::BFloat16', 'strides': [1152, 9, 3, 1]} - bias Tensor?: None - stride SymInt[]: [2, 2] - padding SymInt[]: [1, 1] - dilation SymInt[]: [1, 1] - transposed bool: False - output_padding SymInt[]: [0, 0] - groups SymInt: 1 - Keyword Args: - Average time taken: 100.38 microseconds - Successfully executed aten::convolution. - Result: Tensor(shape=torch.Size([20, 256, 14, 14]), dtype=torch.bfloat16, device=cuda:0) - -[8/11] Replaying: aten::convolution - Reconstructing arguments for 'aten::convolution'... - Positional Args: - input Tensor: {'shape': [20, 256, 14, 14], 'dtype': 'c10::BFloat16', 'strides': [50176, 196, 14, 1]} - weight Tensor: {'shape': [512, 256, 3, 3], 'dtype': 'c10::BFloat16', 'strides': [2304, 9, 3, 1]} - bias Tensor?: None - stride SymInt[]: [2, 2] - padding SymInt[]: [1, 1] - dilation SymInt[]: [1, 1] - transposed bool: False - output_padding SymInt[]: [0, 0] - groups SymInt: 1 - Keyword Args: - Average time taken: 92.83 microseconds - Successfully executed aten::convolution. - Result: Tensor(shape=torch.Size([20, 512, 7, 7]), dtype=torch.bfloat16, device=cuda:0) -... ---- Replay Summary --- -Total operations in file: 11 -Attempted replays: 11 -Successful replays: 11 -Errors encountered: 0 - -``` -------------------- -### Creating Standalone Replay Artifacts - -You can optionally package the extracted replay IR and scripts into a standalone zip file for easy sharing and reproduction, independent of the original model code or TraceLens repository. - -Artifacts included: -- `event_replay_ir.json`: Serialized operator replay instructions. -- `utils.py`: Tensor creation and helper utilities. -- `batched_replay.py`: Script to batch replay and benchmark operations. -- `batched_replay_readme.md`: Instructions for running the replay. - -Example packaging code: - -```python -import zipfile -import os -from TraceLens.EventReplay import utils as tl_utils -from TraceLens.EventReplay import batched_replay - -files = [ - OUTPUT_REPRO_FILE, - tl_utils.__file__, - batched_replay.__file__, - batched_replay.__file__.replace('batched_replay.py', 'batched_replay_readme.md') -] - -zip_file_path = '/path/to/replay_code.zip' -with zipfile.ZipFile(zip_file_path, 'w') as zipf: - for file in files: - zipf.write(file, arcname=os.path.basename(file)) - -print(f"Created zip file: {zip_file_path}") -``` ---- - -## Use Cases - -- **Performance Debugging**: Quickly isolate and reproduce performance issues from large models. -- **Regression Testing**: Automate benchmarks to detect performance regressions at the operator level. -- **Kernel Development**: Extract minimal reproducers for GPU kernel optimization and debugging. -- **Numerical Validation**: Evaluate numerical correctness and stability of isolated operations across hardware. -- **Hardware Counter Profiling**: Use with hardware counters to analyze performance bottlenecks in specific operations. - ---- - -## Notes - -- Event Replay uses randomized data based on extracted tensor shapes; thus, replay timings approximate real-world performance. diff --git a/docs_original/Inference_analysis.md b/docs_original/Inference_analysis.md deleted file mode 100644 index 52d6c1db9..000000000 --- a/docs_original/Inference_analysis.md +++ /dev/null @@ -1,728 +0,0 @@ - - -# 🚀 TraceLens Inference Performance Analysis - -TraceLens now provides comprehensive support for inference use cases, with a focus on inference serving optimization. This documentation covers: - -- 📋 **Overview** - New features for inference trace analysis -- 🔧 **Trace Collection** - Methodologies and setup -- 📊 **Analysis Tools** - Available workflows and usage -- 🗺️ **Roadmap** - Upcoming improvements - -## ✨ Key Features - - -| Feature | Description | -| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| **Agentic Analysis** | Agentic workflows for single-trace analysis for performance improvement recommendations | -| **Graph Execution Analysis** | Merge graph capture and graph reply traecfiles for augmenting graph execution tracefile with callstack and shape information | -| **TraceDiff** | Extended to support inference traces with Lowest Common Ancestor (LCA) analysis for kernel correlation across platforms | -| **Roofline Analysis** | Custom roofline models for key inference operations (fused MoE, unified attention) with prefill/decode request annotations. | -| **Trace Splitting** | Splitting of large tracefiles into steady-state regions, per-iteration traces, and phase-specific analyses | - - -## Supported Frameworks and Execution Modes - -TraceLens features for inference analysis have been primarily tested with vLLM and SGLang. Here is a summary of the different execution modes and supported features. - - -| Mode | Shapes/Roofline analysis | Agent Analysis | Limitations | -| ----------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Eager only | Yes | Supported; proposed patches are recommended to include roofline information for attention operations | Eager mode execution may employ different compilation strategies, which can result in differences in kernels and fusions compared to graph execution mode. | -| Graph execution only | Non‑graph kernels | Limited | Categorization, call stacks, and shapes are available only for attention kernels if full_and_piecewise mode is used | -| Graph execution + eager mode trace | Limited | Limited | Kernel categorization might not be as accurate as eager or graph+capture | -| Graph execution + Graph capture$^1$ | Yes | Yes (patches required) | | - - - $^1$ Graph mode analysis using graph capture and graph replay traces is supported for vLLM and SGLang (proposed patches required). - -## 📖 Quickstart Guide - -### Step 1: Installation - -Install TraceLens from GitHub (requires AMD-AGI organization access): - -```bash -pip install git+https://github.com/AMD-AGI/TraceLens.git -``` - -### Step 2: Trace Collection - -There are two ways to collect inference traces for TraceLens analysis: - -- **Option A — Use the Profiling agent** *(recommended)*: an agentic skill bundled with TraceLens that drives a Magpie LLM inference benchmark, applies the Docker / framework patches for you, tunes the profiler window, runs the benchmark, and splits the resulting trace into analysis-ready windows. -- **Option B — Manual profiling**: build (or patch) your own image, configure the profiler yourself, and run the benchmark by hand. Use this if you are not using Magpie or want full control over every step. - -#### Option A: Use the Profiling Agent (recommended) - -Follow [`TraceLens/Agent/Profiling/README.md`](../TraceLens/Agent/Profiling/README.md). The skill handles trace collection and splitting end-to-end; you can skip the rest of Step 2 and Step 3. - -#### Option B: Manual Profiling - -The remainder of Step 2 covers manual trace collection — building or patching the inference framework, configuring the profiler, and running the benchmark yourself. - -##### Build a Docker image using the [provided scripts](../examples/custom_workflows/inference_analysis/) (recommended for manual flow) - -###### vLLM Script - -A unified build script is provided that supports multiple vLLM versions. It takes a version tag (`v14`, `v15`, `v16`, `v17`, `v18`, `v19`, `v20`, `v21`, `v22`, `v23`, or `v24`) as the first argument, followed by the path to your local TraceLens clone and any standard `docker build` flags. The script selects the correct base image and patch file automatically. - - -| Version | Base Image | vLLM Version | Patch File | -| ------- | ------------------------------------------------------------- | ------------ | --------------------------- | -| `v14` | `rocm/vllm-dev:preview_releases_rocm_v0.14.0_20260120` | v0.14.0 | `config_vllm_v0.14.0.patch` | -| `v15` | `rocm/vllm-dev:preview_releases_rocm_v0.15.0_20260130` | v0.15.0 | `config_vllm_v0.15.0.patch` | -| `v16` | `rocm/vllm-dev:preview_rocm70_releases_rocm_v0.16.0_20260223` | v0.16.0 | `config_vllm_v0.16.0.patch` | -| `v17` | `vllm/vllm-openai-rocm:v0.17.0` | v0.17.0 | `config_vllm_v0.17.0.patch` | -| `v18` | `vllm/vllm-openai-rocm:v0.18.0` | v0.18.0 | `config_vllm_v0.18.0.patch` | -| `v19` | `vllm/vllm-openai-rocm:v0.19.0` | v0.19.0 | `config_vllm_v0.19.0.patch` | -| `v20` | `rocm/vllm-dev:preview_v0.20.0_20260429` | v0.20.0 | `config_vllm_v0.20.0.patch` | -| `v21` | `vllm/vllm-openai-rocm:v0.21.0` | v0.21.0 | `config_vllm_v0.21.0.patch` | -| `v22` | `vllm/vllm-openai-rocm:v0.22.0` | v0.22.0 | `config_vllm_v0.22.0.patch` | -| `v23` | `vllm/vllm-openai-rocm:v0.23.0` | v0.23.0 | `config_vllm_v0.23.0.patch` | -| `v24` | `vllm/vllm-openai-rocm:v0.24.0` | v0.24.0 | `config_vllm_v0.24.0.patch` | - - -```bash -bash examples/custom_workflows/inference_analysis/build_docker_vllm.sh \ - v16 \ - /path/to/TraceLens \ - -t tracelens-vllm -``` - -To use a custom base Docker image instead of the default for the selected version, pass `--base-image`: - -```bash -bash examples/custom_workflows/inference_analysis/build_docker_vllm.sh \ - v18 \ - /path/to/TraceLens \ - --base-image my-registry/vllm:nightly \ - -t tracelens-vllm:custom -``` - -Then create a container from the image. - -###### SGLang Script - -The build script for SGLang supports SGLang 0.5.9 and 0.5.11. It takes the path to the local TraceLens clone, the SGLang version (`--sglang-version`, default 0.5.9), and the GPU type (`--gpu-type`, default mi350). MI300 and MI350/MI355 are supported. - - -| SGLang Version | GPU Type | Base Image | -| -------------- | -------- | --------------------------------------- | -| `0.5.9` | MI300 | `lmsysorg/sglang:v0.5.9-rocm700-mi30x` | -| `0.5.9` | MI350/MI355 | `lmsysorg/sglang:v0.5.9-rocm700-mi35x` | -| `0.5.11` | MI300 | `lmsysorg/sglang:v0.5.11-rocm720-mi30x` | -| `0.5.11` | MI350/MI355 | `lmsysorg/sglang:v0.5.11-rocm720-mi35x` | -| `0.5.12` | MI300 | `lmsysorg/sglang:v0.5.12-rocm720-mi30x` | -| `0.5.12` | MI350/MI355 | `lmsysorg/sglang:v0.5.12-rocm720-mi35x` | - - -```bash -bash examples/custom_workflows/inference_analysis/build_docker_sglang.sh \ - /path/to/TraceLens \ - --sglang-version 0.5.11 \ - --gpu-type mi350 \ - -t tracelens-sglang -``` - -Then create a container from the image. - -##### Apply framework patches manually (alternative to building a new image) - -If you prefer to patch an existing environment instead of building a new image, apply patches to your inference framework to: - -- Add custom annotations with request packing information (See [roofline conceptual details](#roofline-analysis)) -- Capture graph mode execution phases for augmentation by TraceLens - -**Steps:** - -1. **Locate your inference engine:** - For vLLM: - ```bash - python -c "import vllm; import os; print(os.path.dirname(vllm.__file__))" - ``` - For SGLang: - ```bash - python -c "import sglang; import os; print(os.path.dirname(sglang.__file__))" - ``` - -2. **Find and apply the relevant patch:** - - Select by framework and version - - Apply: `cd /path/to/framework/../ && git apply /path/to/patchfile` - vLLM patches are in [vllm_roofline_patches](../examples/custom_workflows/inference_analysis/vllm_patches) - SGLang patches are in [sglang_roofline_patches](../examples/custom_workflows/inference_analysis/sglang_roofline_patches/) - -##### Collection Parameters - -- **Eager or Graph Execution Steady-State Window:** Large tracefiles are expected. Most inference serving benchmarks use `NUM_PROMPTS = 10 × CONC` with OSL sampling ratio R. We recommend tracing `(((R+1)/2) * 5 * OSL) ± (16 * OSL / CONC)` execution steps (which represents peak concurrency with prefill-decode mix). See [steady-state region identification](#steady-state-region-and-trace-splitting) for more details. User might need to increase the timeout limit in certain inference frameworks to allow storing the trace in the middle of the execution (e.g., VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=1200 for vLLM). -- **Graph Capture Mode:** The recommended patchfile will trace the graph capture phase and store corresponding tracefiles. -- **Profiler Setup:** Enable CPU-side call-stack and shape capture. For example, vLLM supports `profiler-config.torch_profiler_record_shapes` and `profiler-config.torch_profiler_with_stack`. - -##### Trace collection options - -###### vLLM - -The `config_vllm_v*.patch` patches add two `ProfilerConfig` flags that control graph-capture profiling and trace annotation detail. These patches are available for v0.14–v0.24. Pass the flags as server arguments: - - -| Flag | Type | Default | Description | -| -------------------------------------------------- | ------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `--profiler-config.capture_torch_profiler_dir DIR` | `str` | `""` | Absolute path to a directory where a PyTorch profiler trace of the CUDA graph capture phase will be saved (rank 0 only). Requires `--profiler-config.profiler torch`. Leave empty to disable graph capture profiling. | -| `--profiler-config.detailed_trace_annotation` | `bool` | `False` | When `True`, execution-step annotations include roofline metrics (`sk`, `sqsq`, `sqsk`) for both context and generation requests. When `False`, annotations record only request counts and token counts. Enable this for full roofline analysis; leave disabled for lighter-weight traces. | - - -**Example** — enable both flags alongside a standard steady-state window profile: - -```bash ---profiler-config.profiler torch \ ---profiler-config.torch_profiler_dir /workspace/torch_trace \ ---profiler-config.capture_torch_profiler_dir /workspace/torch_trace/capture_traces \ ---profiler-config.detailed_trace_annotation True \ ---profiler-config.delay_iterations 5402 \ ---profiler-config.max_iterations 256 \ ---profiler-config.ignore_frontend True -``` - -> **Note:** `capture_torch_profiler_dir` is only available when `--profiler-config.profiler torch` is set. The capture trace is written once at server startup during CUDA graph construction; the steady-state replay trace is written to `torch_profiler_dir` during the benchmark run. Pass both paths to `generate_perf_report_pytorch_inference` via `--capture_folder` and `--profile_json_path` respectively. - -###### SGLang - -1. While doing the profiling of the execution step, pass the parameter `shape_discovery=True` in the profile request to enable shape discovery and registration for operations which are not covered in default SGLang profile. -2. While doing the profiling of the execution step, pass the parameter `roofline_annotations=True` in the profile request to annotate trace with more detailed information useful for roofline annotations. -3. To profile the graph capture phase, while server startup provide the `--enable-profile-cuda-graph` server argument. This will save a trace file per batch size but it misses shape information for some operations, to ensure more diverse coverage, provide the `--enable-shape-discovery-for-cuda-graph-profile` server argument. - -### Step 3: Trace Preparation (Optional) - -This optional step reads the collected trace and splits it into smaller trace files or execution‑phase‑specific trace files. - -Option 1: Find steady-state region of execution (highest concurrency) and separate prefill-decode and decode-only execution steps (supports vLLM v0.14–v0.24 and SGLang v0.5.9; using the patchfile is recommended). This is recommended if the tracefile is large and the user wants to extract a few representative steps automatically. - -```python -python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz -o ./steady_state_analysis \ - --find-steady-state --num-steps 256 -``` - -Output: A tracefile containing {num-steps} contiguous execution steps where close to maximum concurrency is observed, plus contiguous prefill-decode mix and decode-only steady-state tracefiles extracted from this window with no idle gaps between execution steps. - -**Refining steady-state window selection with `--CONC`, `--OSL`, and `--R`** - -By default, the mixed steady-state window is selected by matching the empirically observed prefill-decode to total-steps ratio of the trace. If the benchmark parameters are known, passing `--CONC`, `--OSL`, and `--R` lets the tool compute an *ideal* perfilldecodemix_steps/total_steps ratio analytically and use that to drive window selection instead: - - -| Argument | Type | Description | -| -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `--CONC` | `int` | Expected peak concurrency (number of concurrent requests). A warning is printed if the observed trace peak differs from this value. | -| `--OSL` | `float` | Maximum output sequence length (decode tokens per request). Each request's OSL is sampled from `[R × OSL, OSL]`. | -| `--R` | `float` | OSL sampling range ratio in `[0, 1]`. `R=0` means all requests use exactly `OSL` tokens; `R=1` means OSL is uniform in `[0, OSL]`. | - - -When all three are provided, the tool derives: - -``` -ideal_prefilldecodemix_to_totalsteps_ratio = (CONC × 2) / (OSL × (1 + R)) -``` - -and uses this as the reference ratio for mixed-window selection, overriding the empirical estimate. `--num-steps` is also automatically raised to `ceil(1 / ideal_prefilldecodemix_to_totalsteps_ratio)` if it is too small to capture a representative decode/prefill-decode mix. - -Example — benchmark with CONC=32, OSL=1024, R=0.8: - -```python -python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz \ - -o ./steady_state_analysis \ - --find-steady-state --num-steps 256 \ - --CONC 32 --OSL 1024 --R 0.8 -``` - -Option 2: One tracefile per eager/graph execution step (supports vLLM v0.13 or higher, SGLang v0.5.9, and Atom 0.1.1). This is recommended if the user wants to perform analysis on an isolated execution step. - -```python -python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz -o ./output --store-single-iteration -``` - -Output: Single trace file per execution step. - -Option 3: Limit the search of steady-state region to a limited window - -```python -python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz -o ./output --iterations 10:20 --find-steady-state --num-steps 256 \ - --CONC 32 --OSL 1024 --R 0.8 -``` - -### Step 4: Generate Performance Report - -Performance report generation is supported for both eager-mode and graph-mode (capture + replay) traces. - -**Eager or graph replay traces (no graph capture folder):** - -```bash -python -m TraceLens.Reporting.generate_perf_report_pytorch_inference \ - --profile_json_path /path/to/trace.json \ - --output_xlsx_path perf_report.xlsx \ - --group_by_parent_module \ - --group_by_kernel_count \ - --enable_pseudo_ops -``` - -**Graph replay traces augmented with graph capture traces:** - -When a `--capture_folder` is provided, the script automatically classifies graph capture traces (batch sizes, full vs. piecewise mode) and merges their call-stack and shape information into the graph replay tree before generating the report. - -```bash -python -m TraceLens.Reporting.generate_perf_report_pytorch_inference \ - --profile_json_path /path/to/graph/replay/trace.json \ - --capture_folder /path/to/capture/traces/folder \ - --output_xlsx_path perf_report.xlsx \ - --group_by_parent_module \ - --group_by_kernel_count \ - --enable_pseudo_ops -``` - -**Additional options:** - - -| Flag | Description | -| --------------------------- | ------------------------------------------------------------ | -| `--output_csvs_dir DIR` | Write per-sheet CSV files instead of a single Excel workbook | -| `--gpu_arch_json_path PATH` | Provide a GPU architecture spec for roofline analysis | - - -### Step 5: Compare Traces with TraceDiff (Eager-mode only) - -Compare two tracefiles and analyze execution differences using Lowest Common Ancestor (LCA) analysis: - -```python -import sys -from TraceLens import TreePerfAnalyzer, TraceDiff - -file1, file2 = sys.argv[1], sys.argv[2] - -# Build performance trees -print(f"Creating tree1 from {file1}...") -perf_analyzer1 = TreePerfAnalyzer.from_file(file1, add_python_func=True) -tree1 = perf_analyzer1.tree - -print(f"Creating tree2 from {file2}...") -perf_analyzer2 = TreePerfAnalyzer.from_file(file2, add_python_func=True) -tree2 = perf_analyzer2.tree - -# Generate diff report -td = TraceDiff(tree1, tree2) -td.generate_tracediff_report() -td.print_tracediff_report_files("rprt_diff_pruned", prune_non_gpu=True) - -print("✅ Pruned TraceDiff reports (GPU only) written to rprt_diff_pruned/") -``` - -> **Recommendations:** Ensure both tracefiles use similar execution setup (profiled steps, OSL range, concurrency) and the same execution mode (eager/graph) for meaningful comparisons. - -### Step 6: Agentic Trace Analysis (Skip Step 4 and 5) - -Generate a performance analysis and comparison report (if comparing two traces), along with optimization opportunity analysis, automatically using an LLM agent. - -- Performance analysis: This is the recommended first step, and it leverages TraceLens roofline models for performance bridge gap analysis. Please follow [these instructions](../TraceLens/Agent/Analysis/README.md). - ---- - -## 🐞 TraceLens: Report a Bug or Feature Request - -Please include the following details when reporting an issue. Please use internal or direct channels to share sensitive data. - -1. 🖥️ Environment Details - - -| Item | Details | -| -------------------------------- | ----------------------------------- | -| **Inference Engine and Version** | (e.g., vLLM, SGLang) | -| **Execution Mode** | (e.g., Eager, Graph, Graph+Capture) | -| **Hardware** | (e.g., GPU model) | -| **Profiler Config** | (e.g. Torch profiler config) | - - -1. ▶️ Scripts/Commands Used - -The scripts and commands used to generate a performance analysis report using TraceLens to reproduce the issue. - -1. ❗ Error/Unexpected Behavior -2. 📂 Trace Files Used for Analysis -3. (Optional) 🧪 Expected Output Overview for Feature Request - ---- - -## 📚 Examples & Use Cases - -*Example notebooks and scripts coming soon* 🔄 - ---- - -## 🔬 Conceptual Details - -### [TraceDiff: Lowest Common Ancestor (LCA) Analysis](#tracediff-lca-analysis) - -`TraceDiff` is a trace comparison tool that analyzes execution differences between two inference traces (baseline and variant) by constructing a merged tree and identifying structural similarities and differences using **Lowest Common Ancestor (LCA) analysis**. - -#### The Problem - -When comparing two execution traces from different platforms, frameworks, or configurations: - -- Kernel names may differ (e.g., platform-specific optimizations) -- Execution paths may have insertions, deletions, or reorderings -- GPU operations may be fused differently -- We need to **correlate related operations** across traces - -#### The Solution: Lowest Common Ancestor - -The **Lowest Common Ancestor** is the nearest parent CPU operation or Python function that is **common to both traces** in the merged execution tree. A combination of **position**- and **name**-based comparison rules is used to match two operations or functions. It serves as an anchor point for correlating GPU kernels and operations that differ between traces. - -**Key Insight:** If two GPU kernels have the same LCA, they likely serve the same computational purpose, even if their implementations differ. - -#### How It Works - -1. Tree Alignment with Wagner-Fischer Algorithm - -- Uses dynamic programming to align execution trees from both traces -- Identifies three types of nodes: - - **Combined**: Operations present in both traces (potential LCA candidates) - - **Trace1-only**: Operations unique to baseline - - **Trace2-only**: Operations unique to variant -- Normalizes operation names by removing variable parts (memory addresses, line numbers) - -1. Merged Tree Construction - Creates a unified tree structure where: - -- Each node has a unique `merged_id` -- Nodes track UIDs from both original traces (`uid1`, `uid2`) -- Parent-child relationships are preserved from both traces -- The merged tree maintains execution hierarchy - -1. LCA Identification - For GPU operations that differ between traces: - -``` -Trace 1: Trace 2: -┌─────────────┐ ┌─────────────┐ -│ attention │ ◄── LCA ──►│ attention │ (Combined node) -└──────┬──────┘ └──────┬──────┘ - │ │ - ┌───┴───┐ ┌───┴───┐ - │ │ │ │ - GPU_K1 GPU_K2 GPU_K3 GPU_K4 (Different kernels) -(trace1-only) (trace2-only) -``` - -The `attention` operation is the **LCA** for all four GPU kernels, indicating they all serve the same high-level computation despite different implementations. - -1. Performance Correlation - The LCA enables meaningful comparisons: - -- **Kernel Grouping**: All GPU kernels under the same LCA are functionally related -- **Time Aggregation**: Sum kernel times under each LCA for apples-to-apples comparison -- **Shape Analysis**: Compare input dimensions at the LCA level -- **Optimization Identification**: Spot fusion opportunities or inefficiencies - -1. LCA example: - -Example snippet - -``` -├── nn.Module: Attention_0 -│ └── torch/nn/modules/module.py(1779): _call_impl -│ └── combined: vllm/attention/layer.py(310): forward | vllm/attention/layer.py(290): forward -│ ├── combined: torch/_ops.py(1243): __call__ | torch/_ops.py(1244): __call__ -│ │ └── combined: | -│ │ └── vllm::unified_attention_with_output -│ │ └── vllm/attention/utils/kv_transfer_utils.py(36): wrapper -│ │ └── combined: vllm/attention/layer.py(858): unified_attention_with_output | vllm/attention/layer.py(852): unified_attention_with_output -│ │ └── combined: vllm/v1/attention/backends/rocm_attn.py(256): forward | vllm/v1/attention/backends/flashinfer.py(1064): forward -│ │ ├── combined: vllm/attention/ops/paged_attn.py(31): write_to_paged_cache | torch/_ops.py(1244): __call__ -│ │ │ └── combined: vllm/_custom_ops.py(2156): reshape_and_cache | -│ │ │ └── combined: torch/_ops.py(1243): __call__ | _C_cache_ops::reshape_and_cache_flash -│ │ │ ├── >> trace1: -│ │ │ │ └── >> trace1: _C_cache_ops::reshape_and_cache -│ │ │ │ └── >> trace1: hipLaunchKernel -│ │ │ │ └── >> trace1: void vllm::reshape_and_cache_kernel<__hip_bfloat16, __hip_bfloat16, (vllm::Fp8KVCacheDataType)0>(__hip_bfloat16 const*, __hip_bfloat16 const*, __hip_bfloat16*, __hip_bfloat16*, long const*, int, int, int, int, int, int, float const*, float const*) -│ │ │ └── << trace2: cudaLaunchKernel -│ │ │ └── << trace2: void vllm::reshape_and_cache_flash_kernel<__nv_bfloat16, unsigned char, (vllm::Fp8KVCacheDataType)1>(__nv_bfloat16 const*, __nv_bfloat16 const*, unsigned char*, unsigned char*, long const*, long, long, long, long, long, int, int, int, float const*, float const*) -``` - -#### Output: TraceDiff Report - -The generated report includes: - - -| Column | Description | -| --------------------------------- | ------------------------------------ | -| `name` | GPU kernel name | -| `cpu_op_name` | Immediate parent CPU operation | -| `source` | `trace1` or `trace2` | -| `Input Dims` | Tensor shapes at CPU operation level | -| `kernel_time` | GPU kernel execution time (μs) | -| `**lowest_common_ancestor_name**` | **Name of the LCA operation** | -| `**lowest_common_ancestor_id`** | **Merged tree ID of the LCA** | -| `nn_module_stack` | PyTorch module hierarchy | - - -### [Roofline Analysis](#roofline-analysis) - -#### Inference Attention - -In inference serving, multiple requests are batched together. Each request has its own sequence lengths (N_Q, N_KV). -**Notation:** - - -| Symbol | Description | -| ----------------- | ------------------------------------------------------------------- | -| B | Batch size (1 per request in paged attention) | -| N_Q | Number of query tokens | -| N_KV | Number of key/value tokens (context length) | -| H_Q | Number of query heads | -| H_KV | Number of KV heads (H_KV ≤ H_Q; equal for MHA, smaller for GQA/MQA) | -| d_h_qk | Head dimension for queries and keys | -| d_h_v | Head dimension for values | -| R_C | Number of context (prefill) requests in the batch | -| R_G | Number of generation (decode) requests in the batch | -| R | Total number of requests (R = R_C + R_G) | -| N_Q^(i), N_KV^(i) | Query and KV token counts for the i-th request | - - -**Standard SDPA Attention (Single Request)** - -Attention consists of two matrix multiplications per head: - -1. **QK^T (score computation):** `2 * B * N_Q * N_KV * H_Q * d_h_qk` -2. **Score × V (value aggregation):** `2 * B * N_Q * N_KV * H_Q * d_h_v` - -For causal attention, roughly half the score matrix is masked out: - -``` -FLOPS = (2 * B * N_Q * N_KV * H_Q * d_h_qk + 2 * B * N_Q * N_KV * H_Q * d_h_v) / 2 -``` - -``` -Elements Moved = -Q: B * N_Q * H_Q * d_h_qk -K: B * N_KV * H_KV * d_h_qk -V: B * N_KV * H_KV * d_h_v -Output: B * N_Q * H_Q * d_h_v -``` - -**Inference Paged Attention** - -For calculating total Flops and bytes moved for inference paged attention, we **sum over the computation requirement of all requests individually** (B = 1 per request). - -Requests fall into two categories: - -- **Context (prefill) requests** — processing input tokens; attention is causal within the current chunk -- **Generation (decode) requests** — generating new tokens; attention is non-causal (queries attend to all past KV tokens). Typically N_Q = 1, but approaches like speculative decoding may produce multiple query tokens per request. - -**1. Flops Calculation** - -**Prefill Requests (First Chunk or Full Context)** - -When chunked prefill is not enabled, this is the first (and only) chunk, so N_KV = N_Q and attention is causal: - -``` - R_C -FLOPS_prefill = Σ (2 * N_Q(i) * N_KV(i) * H_Q * d_h_qk + 2 * N_Q(i) * N_KV(i) * H_Q * d_h_v) / 2 - i=1 -``` - -**Prefill Requests (Chunked Prefill, nth Chunk)** - -With chunked prefill, the nth chunk has KV tokens from all previous chunks already cached. The attention matrix for one such request looks like: - -``` - Keys (N_KV) - ◄──── N_KV - N_Q ────►◄──── N_Q ───► - ┌──────────────────────┬──────────────┐ ▲ - │ │╲ │ │ - │ │ ╲ (masked) │ │ - │ Non-causal │ ╲ │ │ - Queries │ (full rectangle) │ ╲ │ N_Q - │ │ ╲ │ │ - │ attend to previous │ Causal ╲ │ │ - │ chunks' KV cache │ (self) ╲ │ │ - └──────────────────────┴──────────────┘ ▼ - ◄────── previous ──────►◄── current ──► - chunks chunk -``` - -The attention computation splits into two regions: - -a. **Current chunk attending to previous chunks** — this region is a full (non-causal) rectangle of shape N_Q × (N_KV − N_Q) -b. **Current chunk attending to itself** — this region is causal (lower-triangular), so we halve - -For the **first chunk** (no chunking, or first chunk of chunked prefill), N_KV = N_Q, so the rectangle vanishes and the entire matrix is causal: - -``` - Keys (N_KV = N_Q) - ◄──── N_Q ─────► - ┌──────────────┐ ▲ - │╲ │ │ - │ ╲ (masked) │ │ - │ ╲ │ │ - │ ╲ │ N_Q Queries - │ ╲ │ │ - │ Causal ╲ │ │ - │ (entire) ╲ │ │ - └──────────────┘ ▼ -``` - -``` - R_C -FLOPS_chunked = Σ [ 2 * N_Q(i) * (N_KV(i) - N_Q(i)) * H_Q * d_h_qk - i=1 - + 2 * N_Q(i) * (N_KV(i) - N_Q(i)) * H_Q * d_h_v - + (2 * N_Q(i)² * H_Q * d_h_qk + 2 * N_Q(i)² * H_Q * d_h_v) / 2 ] -``` - -Both cases (first chunk and nth chunk) simplify to a **single unified formula**: - -``` - R_C -FLOPS_context = Σ [ (2 * N_Q(i) * N_KV(i) * H_Q * d_h_qk + 2 * N_Q(i) * N_KV(i) * H_Q * d_h_v) - i=1 - - (2 * N_Q(i)² * H_Q * d_h_qk + 2 * N_Q(i)² * H_Q * d_h_v) / 2 ] -``` - -This works because: - -- When N_KV = N_Q (first chunk): `full - full/2 = full/2`, which is causal -- When N_KV > N_Q (nth chunk): `full rectangle - self-triangle`, which is the non-causal rectangle plus the causal self-attention - -**Generation Requests** - -Generation requests attend to all cached KV tokens (N_KV = context length so far). Typically N_Q = 1 (autoregressive decoding), but techniques like speculative decoding may have N_Q > 1. The attention is non-causal: - -``` - R_G -FLOPS_generation = Σ (2 * N_Q(i) * N_KV(i) * H_Q * d_h_qk + 2 * N_Q(i) * N_KV(i) * H_Q * d_h_v) - i=1 -``` - -``` -FLOPS_total = FLOPS_context + FLOPS_generation -``` - -**2. Elements Moved** - -The total memory traffic sums over all requests. Each request reads its Q, K, V tensors and writes the output. With GQA/MQA, the KV cache uses H_KV heads (not H_Q), reducing KV memory traffic. - -Ignoring cases with shared KV pages between requests: - -``` - R -Elements_moved = Σ ( N_Q(i) * H_Q * d_h_qk // Q read - i=1 - + N_KV(i) * H_KV * d_h_qk // K read (from paged KV cache) - + N_KV(i) * H_KV * d_h_v // V read (from paged KV cache) - + N_Q(i) * H_Q * d_h_v ) // Output write -``` - -where R = R_C + R_G is the total number of requests. - -Note that B = 1 per request in paged attention, so the batch dimension is absorbed into the summation. - -**Practical Roofline Analysis Without Per-Request Details** - -Importantly, we do **not** need the details of individual requests to perform roofline analysis. Inspecting the formulas above, the only per-request quantities that appear are `N_Q(i)`, `N_KV(i)`, and their products. The full FLOPS and memory traffic expressions can be evaluated using just these **aggregate statistics**, computed separately for context and generation requests: - - -| Aggregate | Used in | -| -------------- | ---------------------------------------------------- | -| R_C, R_G | Request counts | -| Σ N_Q | Elements moved (Q read, Output write) | -| Σ N_KV | Elements moved (K read, V read) | -| Σ (N_Q * N_KV) | FLOPS (full rectangle term) | -| Σ (N_Q²) | FLOPS (causal self-attention correction for prefill) | - - -We obtain these aggregates by applying `torch.record_function(annotation)` to vLLM's execution steps. A single execution step can contain a mix of both context (prefill) and generation (decode) requests, so the annotation encodes the aggregate statistics **separately** for context and generation requests within that step (e.g., R_C, R_G, Σ N_Q for context, Σ N_Q for generation, etc.). These annotations are stored as `user_annotation` events in the PyTorch profiler trace, making roofline analysis possible directly from the trace without any additional instrumentation or runtime logging. - -### [Steady-State Region and Trace Splitting](#steady-state-region-and-trace-splitting) - -Inference serving execution consists of three phases: - -1. **Ramp-up:** The initial few steps where one or more requests are being batched. -2. **Ramp-down:** The last few trailing steps where the final batch of requests finishes. -3. **Steady state:** Defined as the execution steps with the highest concurrency. Once steady state is reached, execution consists of: - - Decode‑only steps - - Prefill‑decode steps, typically containing one prefill request packed with ~CONC−1 decode requests. - -For performance analysis, we are interested in profiling only the steady‑state steps: - -1. Prefill‑decode steps -2. Decode‑only steps with large context sizes (towards the end of a request) - -**Parameters Relevant to Inference Serving** - -- **NUM_PROMPTS**: typically `10 × CONC` -- **CONC**: number of concurrent requests that can be batched together -- **R**: Random‑range ratio used for sampling ISL and OSL -- **OSL**: Maximum output sequence length. Output sequence length per request is sampled uniformly in: -`[ R × OSL , OSL ]` -- **ISL**: assumed to be lower than the chunk size - -We assume inference serving benchmark schedules requests at an infinite rate, and conservatively treat the first **CONC** steps as the *ramp‑up* phase. - -With these parameters, execution step ranges where groups of CONC requests complete: - -``` -1 × R × OSL to 1 × OSL e.g. 0.8 OSL – 1 OSL -2 × R × OSL to 2 × OSL e.g. 1.6 OSL – 2 OSL -3 × R × OSL to 3 × OSL e.g. 2.4 OSL – 3 OSL -4 × R × OSL to 4 × OSL e.g. 3.2 OSL – 4 OSL -... -N × R × OSL to N × OSL - -Where, N = NUM_PROMPTS / CONC -``` - -``` -TOTAL_STEPS = NUM_PROMPTS × Avg(OSL) / CONC -TOTAL_PrefillDecode_Steps = NUM_PROMPTS -TOTAL_DecodeOnly_Steps= NUM_PROMPTS × ( (Avg(OSL) − CONC) / CONC ) -``` - -Since inference serving benchmarks commonly use `R = Random Range Ratio` to sample output sequence lengths from `[R * OSL, OSL]`, the most useful steady‑state profiling window lies in: - -``` -5 * R * OSL – 5 * OSL -``` - -Here, the probability distribution of a request finishing at step t is non-uniform, with the highest probability at ((R+1)/2) * 5 * OSL. - -This region exhibits: - -- Fully saturated concurrency -- Representative mix of decode-only and prefill-decode steps -- Minimal warm-up or tail artifacts - -This makes the recommended window for performance profiling: - -``` -max_iters = ( 16 * OSL/CONC ) # The number of execution steps to be profiled. The multiplier 16 is used to ensure that the profiling window has ~16 execution steps with prefill+decode mix requests. The max_iters value might need clamping for extreme values of OSL/CONC. - -delay_iters = ( ((R+1)/2) * 5 * OSL ) - (max_iters/2) # The execution step where profiler starts. -``` - -#### Trace Splitting - -The trace splitting workflow provides three key features. Note that trace splitting assumes vLLM v0.14 or higher (tested through v0.24), or use of our provided patches, to ensure that relevant annotations (batch size, request counts, etc.) are included in execution step metadata. - -1. **Split into individual execution steps:** Decompose the entire trace into per-step files, extracting batch size from annotations or kernels for shape-focused analysis and comparison. -2. **Identify steady-state region:** Detect execution steps with near-maximum concurrency. The algorithm identifies large windows with concurrency close to peak levels and selects a representative steady-state region based on prefill-decode and decode-only step composition. When benchmark parameters are known, pass `--CONC`, `--OSL`, and `--R` to `split_inference_trace_annotation` to override the empirical reference ratio with the analytically derived ideal PD ratio — see [Step 3](#step-3-trace-preparation-optional) for details. -3. **Separate phase analysis:** Further decompose steady-state into prefill-decode and decode-only traces. Since prefill and decode have different computational bottlenecks, separate analysis enables targeted performance optimization. - -### [Trace Availability-Analysis Trade-off](#trace-availability-analysis-trade-off) - -Balancing complete trace capture versus analysis complexity. - ---- - -**Last Updated:** May 2026 -**Maintainers:** AMD-AGI Performance and Optimization Team -**Repository:** [github.com/AMD-AGI/TraceLens](https://github.com/AMD-AGI/TraceLens) diff --git a/docs_original/NcclAnalyser.md b/docs_original/NcclAnalyser.md deleted file mode 100755 index acddc5e5b..000000000 --- a/docs_original/NcclAnalyser.md +++ /dev/null @@ -1,80 +0,0 @@ - - -# NCCL Analyser - -In distributed deep learning, analyzing the performance of collective communication operations is crucial for diagnosing and optimizing **performance at scale**. **NCCL Analyser** is a Python SDK designed to parse and analyze NCCL kernel events from PyTorch trace files (JSON). It computes key metrics like **communication latency**, **message sizes**, **algorithm bandwidth**, **bus bandwidth**, and **synchronization metrics** (e.g., skew in start/end times), providing insights into communication patterns and potential bottlenecks in your distributed training or inference workflows. - - ---- - -## Key Features - - -- **Detailed NCCL Event Extraction**: Parses JSON trace files to extract per-rank NCCL kernel events (those containing _nccl_ in the kernel name). - -- **Correlated Events via Collective ID**: Each collective operation is assigned a unique `collective_id`, generated by combining the **Process Group Name** and an `index_in_group`. The `index_in_group` reflects the order in which that collective appears in the trace. - -- **Latency Computation for Implicit-Sync Collectives**: For collectives like allreduce, allgather, reducescatter, and alltoall, the tool computes communication latency by taking the minimum duration across ranks to eliminate waiting time. - -- **Bandwidth Analysis**: Computes algorithm bandwidth based on input msg size and communication latency and finally bus bandwidth (link utilization). - -- **Synchronization (Wait-Time) Metrics**: Tracks **skew in start times** (how late certain ranks arrive) and **skew in end times**, providing insights for diagnosing load imbalance or synchronization overheads. - -- **Alltoallv Support**: Provides raw data for alltoallv events, which do not enforce an implicit sync pattern. Includes per-instance metrics (wall time, throughput, size imbalance) and a summary aggregation grouped by process group and dtype. An optional heatmap mode (`build_df_all2allv_heatmap`) produces per rank-pair send volumes, useful for diagnosing MoE/expert-parallel routing imbalance. - -- **Summary & Detailed Dataframes**: Supports both high-level summaries for quick insights and detailed dataframes for advanced analysis, including per-rank metadata and performance metrics. We suggest **power users** to build their custom pipelines and analyses on top of detailed dfs. - -- **PyTorch Support**: Currently built for PyTorch trace files, with the potential to extend support to other frameworks. - ---- - -## Quick Start - -The NcclAnalyser can generate both per collective data frame as well as a global summary. There are more features demonstrated in [example notebook](../examples/nccl_analyser_example.ipynb) - - -### Example: Quick Summary of Implicit Sync Collectives - -```python -from TraceLens import NcclAnalyser -import os - -# Define the root directory and create file paths for all ranks -root_dir = '/path/to/your/trace/files/directory' -world_size = 8 -list_profile_filepaths = [os.path.join(root_dir, f'rank{i}_trace.json') for i in range(world_size)] - -# Initialize the NCCL Analyser -my_nccl_analyser = NcclAnalyser(list_profile_filepaths, world_size) - -# Generate the summarized dataframe for implicit-sync collectives -df_summary = my_nccl_analyser.build_df_summary_nccl_implicit_sync_cat(agg_metrics=['mean']) -print(df_summary.head()) - -# Save the summary to CSV -df_summary.to_csv('nccl_summary.csv', index=False) - -``` -**Summarized Dataframe**: -- Groups events by collective type, message size, and data type to compute aggregated metrics. -- For communication performance we compute communication latency, algorithm bandwidth, and bus bandwidth. -- For synchronisation delay we compute metrics like skew in start times which shows the wait time. This is based on the difference of earliest and latest arrival across the ranks for a given collective. - -#### Example Summarized Dataframe - -| Collective name | In msg size (MB) | dtype | comm latency (µs)_mean | count | Total latency (ms) | algo bw (GB/s)_mean | bus bw (GB/s)_mean | skew in start time (µs)_mean | -|----------------------|------------------|----------|------------------------|-------|---------------------|---------------------|---------------------|-----------------------------| -| _allgather_base | 204.00 | BFloat16 | 6041.88 | 318 | 1921.32 | 33.00 | 28.88 | 11779.36 | -| _reduce_scatter_base | 3264.06 | Float | 11662.77 | 160 | 1866.04 | 273.43 | 239.25 | 60238.77 | -| _reduce_scatter_base | 8016.03 | Float | 22988.50 | 2 | 45.98 | 340.53 | 297.96 | 146.48 | -| _allgather_base | 501.00 | BFloat16 | 11920.84 | 2 | 23.84 | 41.04 | 35.91 | 15405.14 | -| allreduce | 0.00 | Float | 18.58 | 6 | 0.11 | 0.00 | 0.00 | 936.63 | - - -Note that the last row in msg size is just rounded down to 0. - -**Modify the filepaths for your profiles in nccl_analyser_example.ipynb notebook and get analysis instantly!** diff --git a/docs_original/Trace2Tree.md b/docs_original/Trace2Tree.md deleted file mode 100755 index 2e8dd9f28..000000000 --- a/docs_original/Trace2Tree.md +++ /dev/null @@ -1,109 +0,0 @@ - - -# Trace2Tree - -In GPU applications performance analysis, understanding the relationship between host CPU operations and corresponding GPU kernel executions is crucial for analyzing bottlenecks. The PyTorch profiler provides a JSON trace file containing events with timestamps and durations but lacks explicit call stack dependency information. - -Trace2Tree is the underlying tree structure component used by TraceLens to parse trace files and build hierarchical dependency relationships from host CPU operations to GPU kernels. **It is recommended to access this functionality through the `TreePerfAnalyzer` interface** rather than using Trace2Tree directly. - ---- - -## Key Features - -- **Hierarchical Dependency Tree**: Constructs a tree structure linking CPU operations to GPU kernel launches, enabling detailed analysis of the ops lowering and perfomance. -- **Extensible SDK**: Provides a framework for custom analyses, such as identifying GPU time for CPU operations or pinpointing bottlenecks. -- **Lightweight Design**: Minimal dependencies and a straightforward codebase for easy integration and use. -- **PyTorch Support**: Built for PyTorch profiler JSON traces, with potential for future support of other frameworks. - ---- - -## Quick Start - -> **💡 Tip:** See [`examples/trace2tree_example.ipynb`](../examples/trace2tree_example.ipynb) for a complete interactive tutorial. - -### Example: Build and traverse tree - -#### 1. Load the Trace data via TreePerfAnalyzer -```python -from TraceLens.TreePerf import TreePerfAnalyzer - -# Load trace data using TreePerfAnalyzer -# Set add_python_func=True to include Python function call stack in the tree -# This allows you to trace GPU kernels all the way back to your Python code -trace_file = '/path/to/trace.json' -analyzer = TreePerfAnalyzer.from_file(trace_file, add_python_func=True) - -# Access the underlying tree structure -tree = analyzer.tree -``` - -#### 2. Find an Operation to Analyze - -```python -# Find an operation of interest -event_interest = next( - evt for evt in tree.events - if evt.get('name') == 'aten::convolution' and evt.get('cat') == 'cpu_op' -) -``` - -#### 3. Traverse Subtree - -Visualize the entire subtree rooted at this operation: - -```python -tree.traverse_subtree_and_print(event_interest) -``` - -``` -└── UID: 41, Category: cpu_op, Name: aten::convolution - └── UID: 42, Category: cpu_op, Name: aten::_convolution - └── UID: 43, Category: cpu_op, Name: aten::miopen_convolution - ├── UID: 104314, Category: cuda_runtime, Name: hipExtModuleLaunchKernel - │ └── UID: 107846, Category: kernel, Name: Im2d2Col_v2, Duration: 45.063 - └── UID: 104318, Category: cuda_runtime, Name: hipExtModuleLaunchKernel - └── UID: 107848, Category: kernel, Name: Cijk_Ailk_Bljk_BBS_BH... -``` - -#### 4. Traverse Parent Chain - -Trace back through all parent events to see the full call stack. You can optionally include CPU operation details like input dimensions, types, and strides using the `cpu_op_fields` parameter: - -Available fields: `'Input Dims'`, `'Input type'`, `'Input Strides'`, `'Concrete Inputs'` - -```python -root = tree.traverse_parents_and_print( - event_interest, - cpu_op_fields=('Input Dims', 'Input type') -) -``` - -``` -Node: - UID: 41, Category: cpu_op, Name: aten::convolution - Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], []] - Input type: [float, float, float] -1-up: - UID: 40, Category: cpu_op, Name: aten::conv2d - Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], [1], [2, 2], [1, 1], [1, 1], [1]] - Input type: [float, float, int, int, int, int, int] -2-up: - UID: 40139, Category: python_function, Name: -3-up: - UID: 40138, Category: python_function, Name: torch/utils/_device.py(100): __torch_function__ -4-up: - UID: 40137, Category: python_function, Name: torch/nn/modules/conv.py(554): _conv_forward -5-up: - UID: 40136, Category: python_function, Name: torch/nn/modules/conv.py(558): forward -6-up: - UID: 40135, Category: python_function, Name: torch/nn/modules/module.py(1736): _wrapped_call_impl -7-up: - UID: 40134, Category: python_function, Name: torch/nn/modules/module.py(1747): _call_impl -8-up: - UID: 40133, Category: python_function, Name: transformers/models/owlv2/modeling_owlv2.py(395): forward -... -``` \ No newline at end of file diff --git a/docs_original/TraceDiff.md b/docs_original/TraceDiff.md deleted file mode 100644 index 8cb8c8355..000000000 --- a/docs_original/TraceDiff.md +++ /dev/null @@ -1,145 +0,0 @@ - - -# TraceDiff - -TraceDiff is a Python API and a component of TraceLens for comparing two PyTorch Kineto trace files. It allows users to identify, visualize, and analyze differences between execution traces at both the operation and kernel levels. - -Unlike a simple leaf-level operation comparison, TraceDiff considers the morphological structure of traces to automatically determine the lowest common node. This improves accuracy when dealing with differences in operator lowering at the host call stack — for example, `aten::convolution` lowering to `aten::miopen_convolution` on ROCm and `aten::cudnn_convolution` on CUDA. A leaf-level comparison alone would treat these as completely different operations, whereas TraceDiff can automatically match them at the appropriate level. - -TraceDiff is particularly useful for regression analysis, performance debugging, and assessing the impact of code or environment changes on GPU workloads. - - ---- - -## Key Features - -- **Automated Tree Comparison**: Builds hierarchical event trees from two traces and identifies points of difference (PODs) using a recursive diff algorithm. -- **Tree Diff Visualization**: Produces a diff output file that highlights matched and unmatched operations between traces. -- **Detailed and Summary Reports**: Generates CSV reports with kernel time statistics and aggregated summaries for each operation. -- **UID Mapping**: Provides a mapping between event UIDs in the two traces, enabling cross-referencing and deeper analysis. -- **Seamless Integration**: Designed to work with TraceLens's TraceToTree objects and PyTorch profiler JSON traces. - ---- - -## Quick Start - - -### Example: Compare Two Traces and Generate Reports - -```python -from TraceLens import TreePerfAnalyzer, TraceDiff -import json - -# Load two trace files into tree perf analyzer -trace_file1 = "/path/to/trace1.json" -trace_file2 = "/path/to/trace2.json" - -perf_analyzer1 = TreePerfAnalyzer.from_file(trace_file1) -perf_analyzer2 = TreePerfAnalyzer.from_file(trace_file2) -tree1 = perf_analyzer1.tree -tree2 = perf_analyzer2.tree - -# Compare and analyze the trees -td = TraceDiff(tree1, tree2) -td.generate_tracediff_report() # Generates DataFrames, does NOT write files -td.print_tracediff_report_files('rprt_diff') # Writes all reports to files in 'rprt_diff/' -``` - - - -**Output files:** -- `rprt_diff/merged_tree_output.txt`: Text visualization of the merged tree, showing matched and unmatched nodes. -- `rprt_diff/diff_stats.csv`: Detailed kernel and op statistics for each operation (see below for example and explanation). -- `rprt_diff/diff_stats_unique_args_summary.csv`: Aggregated summary statistics by op name and unique args. -- `rprt_diff/diff_stats_names_summary_df`: Aggregated summary stats by op name - giving top level summary. - ---- - - -## Output File Examples and Interpretation - -#### diff_stats_names_summary_df.csv - - - -**Example (first 5 rows):** - -| name | row_count | kernel_time_trace1_sum_ms | kernel_time_trace2_sum_ms | diff_sum_ms | abs_diff_sum_ms | -|-----------------------------|-----------|---------------------------|---------------------------|--------------|-----------------| -| aten::convolution_backward | 736 | 541.957809 | 366.136090 | -175.821719 | 198.297619 | -| aten::_convolution | 736 | 229.175081 | 157.807700 | -71.367381 | 85.731275 | -| aten::_batch_norm_impl_index| 448 | 129.995936 | 43.081600 | -86.914335 | 86.914335 | -| aten::mm | 300 | 78.684444 | 84.654093 | 5.969649 | 11.982847 | -| FlashAttnFuncBackward | 25 | 59.776381 | 54.930648 | -4.845733 | 4.845733 | - - - -#### diff_stats.csv - -This file contains detailed statistics for every op instance, including input shapes, types, kernel times, and kernel names. It is useful for fine-grained analysis and debugging. - -#### diff_stats_unique_args_summary.csv - -Midway between the detailed op wise view and the name summary this is a summary per argument of an operation. - -**How to use:** -- Drill down to individual op instances to investigate outliers or mismatches. -- Use the detailed input and kernel info to correlate with model code or trace events. - ---- - -## Accessing DataFrames and UID Mapping - -TraceDiff provides methods to access the detailed and summary DataFrames directly, as well as a `merged_uid_map` to cross-reference events between the two traces. This is useful for linking statistics or visualizations. - -### Accessing DataFrames - -```python -# After running td.generate_tracediff_report(): -df_stats = td.diff_stats_df # Detailed per-op DataFrame -df_unique_args_summary = td.diff_stats_unique_args_summary_df -df_name_summary = td.diff_stats_name_summary_df - -if df is not None: - print(df.head()) -if df_unique_args_summary is not None: - print(df_unique_args_summary.head()) -if df_name_summary is not None: - print(df_name_summary.head()) -``` - -### UID Mapping Example - -```python -# Get the corresponding UID in tree2 for a given UID in tree1 -uid1 = next(iter(td.baseline.cpu_root_nodes)) -uid2 = td.get_corresponding_uid(1, uid1) -if uid2 != -1: - print(f"Tree1 UID {uid1} corresponds to Tree2 UID {uid2}") -else: - print("No match found for this UID in tree2.") -``` - ---- - - -## Use Cases - -- **Performance Regression Analysis**: Quickly identify which operations or kernels have changed between two runs. -- **Debugging and Optimization**: Pinpoint new bottlenecks or regressions introduced by code or environment changes. -- **Cross-Trace Linking**: Map and compare specific events or kernels between two traces for deeper investigation. - ---- - - -## Notes - -- TraceDiff is designed for PyTorch profiler JSON traces and requires TraceToTree objects as input. -- For more advanced usage, see the example notebook: `examples/trace_diff_example.ipynb`. -- Output folder and file names can be customized via the API. -- The API now separates report generation (`generate_tracediff_report`) from file output (`print_tracediff_report_files`). -- DataFrames are only available after running `generate_tracediff_report()`. diff --git a/docs_original/TraceFusion.md b/docs_original/TraceFusion.md deleted file mode 100755 index 07ca3ffca..000000000 --- a/docs_original/TraceFusion.md +++ /dev/null @@ -1,102 +0,0 @@ - - -## TraceFusion - -In distributed deep learning, diagnosing issues like straggling ranks, load imbalance, or bottlenecks requires a **global view** of events across all ranks. TraceFusion is a Python SDK for merging trace files across ranks in distributed training and inference setups. With customization options for filtering events and defining file paths, TraceFusion simplifies the preparation of traces for seamless rendering in **Perfetto**. -Note that: TraceFusion is **only for visual analysis in PerfettoUI** and not for automated analysis. - ---- - -## Key Features - -- **Custom Filtering**: Easily define filtering logic to include or exclude specific events. For example, merge traces for a subset of ranks, focus only on GPU events, or narrow down further to NCCL kernel events only. -- **PyTorch Support**: Built primarily for PyTorch trace files, with potential support for other frameworks in the future. -- **Lightweight and Simple**: A dependency-free and straightforward codebase makes it easy to integrate and extend. - ---- - -## Quick Start - -Here's how to use TraceFusion to merge and process trace files for distributed training or inference: - -### Example 1: Basic Usage - -```python -from TraceLens import TraceFuse -import os - -# Define file paths for each rank -root_profiles = '/path/to/profiles/' -world_size = 8 -list_profile_files = [os.path.join(root_profiles, f'pytorch_profile_rank{i}_step120.json') for i in range(world_size)] - -# Initialize TraceFusion (sequential by default) -fuser = TraceFuse(list_profile_files) - -# Merge and Save traces -output_file = os.path.join(root_profiles, 'merged_trace_all_events.json') -fuser.merge_and_save(output_file) - -# By default, Python function category events are skipped to save memory. -# To include them, set include_pyfunc=True. -``` - -### Example 1b: Using Multiprocessing for Faster Processing - -```python -from TraceLens import TraceFuse -import os - -# Define file paths for each rank -root_profiles = '/path/to/profiles/' -world_size = 8 -list_profile_files = [os.path.join(root_profiles, f'pytorch_profile_rank{i}_step120.json') for i in range(world_size)] - -# Initialize TraceFusion with multiprocessing for faster processing -# Can provide significant speedup (system-dependent) -fuser = TraceFuse(list_profile_files, use_multiprocessing=True) - -# Optional: control number of workers (defaults to os.cpu_count()) -# fuser = TraceFuse(list_profile_files, use_multiprocessing=True, max_workers=32) - -# Merge and Save traces -output_file = os.path.join(root_profiles, 'merged_trace_all_events.json') -fuser.merge_and_save(output_file) -``` - -### Example 2: Advanced Usage - -```python -from TraceLens import TraceFuse -import os - -# Define file paths for rank 0 on each node -world_size = 64 -profile_files = {i: os.path.join('/path/to/profiles/', f'pytorch_profile_rank{i}_step120.json') for i in range(0, world_size, 8)} - -# Initialize TraceFusion -fuser = TraceFuse(profile_files) - -# Custom filter for NCCL kernels -def filter_nccl_kernels(event): - return ('cat' in event and 'args' in event and event['cat'] in ['kernel', 'gpu_user_annotation'] and 'nccl' in event['name']) - -# Merge and Save traces -output_file = '/path/to/profiles/merged_trace_nccl.json' -fuser.merge_and_save(output_file, filter_fn=filter_nccl_kernels) -``` - ---- - -### What's Inside? - -TraceFusion merges `traceEvents` across ranks by: -1. **Appending Events**: Combines all events from multiple ranks into a single list. -2. **Adjusting Process IDs**: Modifies `pid` so that traces for each rank render correctly in the UI. -3. **Correcting Flow Linking**: Updates `External id` for events and `id` for corresponding `ac2g` events to ensure accurate flow linking in the UI. - -These adjustments ensure seamless visualization in **Perfetto**, with clear rank separation and correct flow rendering. diff --git a/docs_original/TraceLens - Democratizing AI Performance Analysis - Adeem Jassani, AMD.pdf b/docs_original/TraceLens - Democratizing AI Performance Analysis - Adeem Jassani, AMD.pdf deleted file mode 100644 index 1ad86b289454976b7a1ec583935d1ef18008ce67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1290824 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

a)v+Wz zHbf3&Xz{ERl_XN-NV~19w;}sIOjJr*qAj^l^YX4BAKe46BSF5RNw&=4E4xKWYUmRSb;zUl7ske6yaFljEr;gepw?878UK!%hrN_EgE7>O8dO*t%ZNl;x;;>uPG(lSh=qTiKGi@;roBi~ zTi;6}sv(da3c}o*+-gS;rDxIz_N#|-1V$Q+zizj1jI}<4tAv*db$cm7ZL-cskNdx7 z$}sd;w85nLW7(|kwQhCDILLb$?zx?Gw9C!iWmJUzqBUQcT*&ZeYlRCfYFl;omFy1s#7!GQzzmh%t6aqj8%^pIN9NEc^tf?l637Wm20VeH)AwHE z80Wa<%6ksv5lt0sgSJPT!+%jKeR<=eIoq0=HT&VAhStl{!@xtqCEF@WQbp_BKp6g-K9a{ezR;cd2;`Fh;i_``45{`n&!nvFsz#2ov zc0g+@59fnsT|&6L9J#floe&GO-Ni1e0-sZ~z?|{IsIjjbUsHOlnlYEgps6(*TvAC- z6ytalH1?W9+rDn3ow9~#Dvjy_>fGeXVq=ad3X4Z*xEQV+262sdj7;TCvyc%^ISStCcWWQ0v zjZ>8Ju|c%MzR^G7F9G^H|NhnUt(w>>p7nLm+*A(=GmJ7izOlOwbY}634t(0AORaHK z_koC^%(G$yhqlgVo-1D<<{Kth>bKh6)?MX~q8@OkXA3}0(1hWX9x9n$Am&+Gn8cO; zYnGBe*;_&`A~tA&&8ei&2KOi|jD~(x>6o_^#NkE)sTgd0`i$r2x)AmWOXpfnA(TZc zb}R_x-D2-i1HBly#(xCapR-JGmhe$CV(Gi2NYPm#%$*WcK=Hm@?UwH-<}k*49@vh=v_w9bb+NR>5jYVlD?p z3}(Eb7iFlP%#*9@<<`s$)0Y9-WLh2DGq#ulqqQp}v_CE1kPtM)A>Ar3F@#h`8kq>1 za>H{9`0%uiF$}7h zTWB=blRh|Fg`jB^`o(!~g~8%HrNnt$kt@Pn>@Kz*l*J-Do~$Ap)r_M8j4z@cyv!93 zyLD(BdX#dBh(uD{Hlh`-(vV#GxK<2uEY6dmrchm8#nn(?`I{NUjwi$lbAEwVs5nUY zgZT2n5Bt_Qd64XZU|Sx163`;hZeRuyuzY5AL3UCt%&qXn_I=C?5qt|*5Z6FFRGA%{ zo2CKB+eJINy|VY42Jh$eZ0NhIz8;aDPwC-}8|DvQ%(jTnSX|MlTdy~_QLrtSb`8~@ z&3%t6+wyCo=3ihfVD{*H+P`i|D$-qC1iBxeGp53Sgxb}+mw5@Pk@%i{&W+NA0+!^I(J8Gy5;?tPptr&b|lRuGM)E~upLr@-) z5iIeK0vBiStgHIYT)WYvv-ogz@7WQnXxJR7X;7AMIXN}4NqKC|qe3^+bh1y`g@rZT zhkcq{C893ODR%c0=E}WukPOXj?3JFBfmX)qJJ+}-(F`h+*!Ovd2C{KYjIKyhUyc=3 z2yGB+piSaVh}bHCO@I%EC($}Xie{8{>^5;IcpCnCfN6a~^`EBSazR2+k*4(@HXu<$ zMDa0wO@VW#g_!}T!G($7BS{69R>6hyLW@CiQA5=6&83BD;2Zeo0Oc$Q&3(U!3&QC9 ze+y|Zz~4fT016KZ9~3$aMu->UiGL$4%nSd_zXud+LwMu+McfoV;{RJn1;PFnHUv(1 zPWaZ)AHIK!bO7YvVos>&;H};RI1MFC2j9VemlmRp@9uj9lDjB;_m`-%L4iZd2Ry9D z4+~_!6o3u7M~@%;jl)v#YZpDH?_Eg8oYSAkQrS<%ceNXE7042E5PkP%|&5X->)VM0uH|;!1Ooa;Lsz0T%ZtGd`>ChV2tJpUEilmuzep7 z^C#)@$)LKVrkb8YO_3p~mbj>t8_^Ty{b;i?3Y+Y7=@!2*sg?{zsn7?hmIP+3TQd>4 zeTXGMQeQeCIzT>XR5)?49%ZIS&Zns@06c5xguL?jayShaH8}M|tp#nW=vt{-Zp&pO z4pTX2HFp|KI@x`M1KzNTz=hOf%KTrxb|LsQOb$lv@b9Slzi^_;V$d+Bhwi6pmrs|^ zbXivuCl-wA?7x<)8aa?DQb53cWL7o_Fo~Fs`Wep1IHYUR`dVTTnnq_3urToeHlW)F zskMp$SY2aOk(LJ3&1bj=`ECcwup3Wgk+1f-_uF#cIUsnIXng8O(OiZqWi5&OQ>=nQ9xn3{? zRObLbM6GjtvHk{}HIrG5zvzCf1idLn!E*(=So*=tpMbk_96Bd6GHR_DXZ+-dJiiT( zg?uS~tSHhC{b*JqpfQqhpq~k9Kka}*m!NWOw9Pe^0RE5-RYs}N@w>n4~1m!1n2 zV>I4#<96!{di@4g8Xb)^4@HgK$i=jJ3Uz<1eO{}^Mx7M#`|_wuSBWwae>4MR>tD{X zZL7?7<<1?(rm5=|=YcCx2tV%Mj$BLJ+_x)D9x*or_QX zeafAyqT+PYTCz*ZsegiPH|xe3g05S}$;2o{lRSA6fLi8oT&U+i5yT8b*^*Y$d!=c@ zn$J+jWV69WdEuS7eW)0e?j?SPg+o(}leYiW8< z{epcZQ)q zt}&%Ic}ygMQ|HAMJE|f1nsv+>D{ooMMqFlQE^`+a7Dx!q?x_h%uZ?9ZuA@?*CCil^ z=T()WYY9xoh)1YT>sQO#fOv}Uy1^S29m(u*4}8I3z&2XT+xuqp_IH%@%v2=Ydvbx; zdsKX{afgy$Z^jo*I@>L>HQKwV&quLv6I``WW|DWP`QfxgenK9@N)U0PrQToMx15G^ zuHm%ch@d9$HlPHqDBC5x+%!tm&(-af6UAt$!R+-%3u&e6RKt_aRCN)xE4R(W`jJudAI02El^Z$dv5NDX7S$*p@w; z8P%3xdS;M_XS%8s@y#xs(3-SfVg-o4XE8gM+(FQSO;)E}`V*NPy2 z$HLuqmcv^QUVJmFj~&=rr|~VE9gqr&3cfIe15Ehv(6fVmiW9mpQM`)YfAtSLVpg0AGWDf}cj0RI4^4@EQ-Q zgYXQ;#zjYZ!kNhBxkDVJs>F3mdP`v((?NYw+u~>s z#94utBS7af&;86RbyPv^wIys@u-9bYGxta9U3R^OyQJ|A-L?%{%XVHtePC9u&aA~9 zr^0V<-ZCSVYLPSV2d0IwjyLqrbjx^~*si441ZbbC&(rSy?qt_TnH;=nNOh1+UJ0%G zbZ;S>*~2@KOnpi!W2hyf@iF&h2J1thXX1@swjCPxB4)X-g))?JX;p?*Myp1;6s%Pi z)YHp9m^9uWUtC@`!MSlkkU4TG1k&X6Kz-df%7*uzwE7De9FpN@^a={A3E=%D>_z1qCyyODiPjw6Ig5d9ur zAVyp@M}w2Z8>7S_gi8pQNH)T>4`5u#-|{`R)KbBje2RjMx**9d33W_tA-$q$#d|$@ z{gI6C8SSa#gSNjCCbk|h>xsikbnS8wyB#q40~GafMtocl(xFyrNvn6T7L(OitJk>B z*qKRV!n>EX25i~*0a)}WgDsWizGbC>M6KIg;V4`%_&+VYSLh>UW@mK4Tc-z!WKYh z=Fmu4%9HhrW4o8I-X89FpJI6!U9r@Sfi|HCk7fAbhN8MP*& zPjODN=NVkPig#9YVUrq>WD;I{rJVM*%!=>2DbMEAV-4iWgyb{yM~v{9S4Pw&(MDAs z%$Y=EfOGY(C2?CUN{!MTs%%VQtwsrRb?VsoB&{(SIO=cd8}8P-S09g2i6gkXn$JV~ zfH#9P+4Xt^rWf}2)b}_UCK6ldw)BAYVu-f!%#g>`?`Q5XswQRCxbZdqnnrG!&f%NQ z8sXFidnk^6A8cObXClH%x@7OayMBDMylH2X$AqH)W|C9S9M^+Wlp$@P-cz2Z1sH0YExq>^d-53MXW>W%=F!$5X)L9qU;TYy6;A7A- zCEai|M{r34diC^(QkxDZTOvu2Mzv0DX^84YtQNRp4f>KN;NBC!Vi))!bomY%M=yg! zU)W)~3+8;Tdn#GLgUa{{bs;d$ZK< z`eTyS%JwYwSNEzWHhW_Hpb!iT!qzjMX%?)tjr-#WUrFp$jrj5m(?zZw%=pIexmYKO zC2op~Bwi)RO35V2?h@rOZcZ?Wg>EyaCr#N9+wGoVu|!oc1IrTU^@G-e)7qi`X1g;X&2sWQ4%j7&KEx66+YZ$mOh_3y zA;=2Cnnw#d7($IgSB`IL9ILIPcgLlZR1ngC=My{`~Hg16t*kE+e~YYKPZe=6YVCC>CrJ9 zjh+r2*WEZ%u(szxs!poN>A3kdLr>zzi08NV@)=bkMyeBr(ABeuGs=M_*lOP$*+qPk z{`|fVkthGw3_1t3afiDks@KD3V!_za(K&gPQ-2nE6;Qm&!6zW&bkrpQBtd2)1ETVzQ;wRGbS`UC zc)P2F70&4rPoZ*w(g8~5EA^`nfj7F%)uacIOeax~I32%JmKbKP1ZiO;LqenL>`UCu z=ZEW`Enqi3RYfLtKSnxDI$s=4b(ZPWHf-L3I^B1fKE*#5d*etfS$tw#bf?JaGoHu0 zN!0>ygcBVpbm9sqMMyGl$7UKZ%J zzSyxZu8w19bq|^mB#}H#td)7Fet1v>Ekvivyo-8&)nX*Qhq*naY^2f72-%8e6wEy# zvN`D@PWBu>U4ic`P{+W)z`doNkPuL~b5sZgCcy$uQs%%3E(3WpaRutKeq!I0VJXf~ z)^&tsWtE2Rtxv+ZC0*z1ya-azv#eG^H}dBqR?7Qhrcts~SN(Gs)(o%vemvQM^8^K- zS~`JDKr(}pPfuL}yH^l;i9AD{YM4>5S8{&~iT|+#FKnPz+-cO zc2E6LvIzEe1G(TZ(^n#$u<))(;?2r-%Ztb+^kq~Q#>O9V^C`Wt;zaQTFK`7NjLl?$}kCG%o+q1tKvDfJ`eqfR1Y2h2`c ztww+JF^0vqzZxwOS-mz!RYYp3E(lE>nz)%ue~yz$F4&OXXlz*`iHNQ}B`l%#is}e* zgL*;*b&1x+lUO9OiN0oC9JWoXaRmeSvRqZuHl6x3j6_C`nl(5!j(3ot62L(HS7(1v3>Yf)~Nx`CM>mCUsAaV>Vufgn9ND&e>F z&<>{%hJ5GmyD>=wRzeGK$LRXA!FzDqLOY-*`9lXoH%r!?jZ`j2bJ=zMbxXh~WYs1N zQR_jw2M(!QM{(^z0|&+kc&4`n$^GFIgd!o0ld3g*b3)=7llnsJhh^l~Imtr7I+(=- z3u^Q~!%d~(sqh5K*lR$x=~1sEcF_seeB!rPhKKlS4DQE8lGi&sw_}ZV-!ET@R2Lk$ z>U z)Dx9o&%-7#Exs1kla|6BuOn&FpODA>anaO8jRUDLx+z+p@6RDpoW}|JdhjllrMO;sW#Z1q8W^QueJyM5;0yVe{(&K@@rYo zNKSbo%_i{*+{;AeWc0&Ljrt)Nv_>EU`SnTMa$Af?FigsS2{&cQ7$y8{hC-dBC@UqV z*f7M3P<;St3cMx44CP}n>iKi4%fCW5kXnDW9q{u~p^@6-Za$ea$?CAAPR280Xgl=` z(|NNm*?mactJe>> zfY?s>nW zBk)l0M}$2Cl3qfJF0Z9(|2`z>G&=1Ls9e2o5#PG2f{TIm^czIe__N67*BKbiM~msA zW_GNkFvMMQCOzgl`MGVA)m~s=E!{}U=VI(?I36Li+Qi4gM=IYx?6q_&tDCP^zkzP0 zU|2R`6*`TaRCU(Nkh?^(Jb~e|w614Zr*2NnJ1O8g@qL=;hA0A@La^~v3VRJa^fP-` z10b(>vhgs3!{OKRtCz#FWNo@35X1;5I55-q2!7#SB|qsup#8STppj<*Uo2@{u zq`A@`HDRIrfHxQo^D7_k`zqo376mkrD}^&jfD+C(T_(nT`xaf@lgp{lZHMiLUcVmQ zHXK0FW8I%a#v#g6?F$d2CVarDV0S2*()?Zhs&^{Esgi(%G3B(6Bi!?r7e(c{u1I*Z zLaP(kdTs}E97JC^j^2%r-YJhd`l+Waavr%=$c6juubr-$ViQ8KgsHUFmj{K zBf;@C-;dgZ+LwFRch*n*cPQ@#K1-|nU!SYTE+Nr4!U08ca=Gnt?TJz;CX}p+_=q1t zFQCtx&RyE`I?kVl?Pl~09G<`t2?%s1>9y^re>$*8IT5i%va&@sB5u-i zLDkbEW`HHfS1z;jA?oQ3*W92-fy8Gr){Z^fb0liOJ58f-RfTYJx(=m&I5X*}PJ{I< zUgj_7@hBMpW?}p+raTD%k3jj!1h`%j5n~DMjzb&LBd26ZqdjeTw)Pl!-5c)J5#1U6 zm7II-iP%SWDE-$j_loD=z}URW$Ej@>F!fjdQ_~fc2#p%T?po#ncLqD_yiOeo9WVn#{MPGH&x9uHC6DeEmrP)j#8XaPA?ZeOd~NG{d4` z;F)Oe!WwH2?RHfRJsK(Zrr>^ibVV8LXAGZUKdSs*!~uzZEm${i!Slh~cdSXY*n@M( zzu#nQwPqIOX!|n*eU8yMnjmO-4BKRhH*Co9huBsGy-N&&P<#t9SAx1iV?CYk#>@wg zUs$vM=7JF4jz8J*CO@C%xMoMT(ptfG>I`6sl7&+}=cQA*1Ne>bKJP2NE(1JnC3x># zeI+X#Cf#9rxPD88%m+86yp8<684`tgeMrr-pjvMJ z3t6t7*>$3-wV$|}N}?(S!r@NWPgVkJ7_~G0jKoV=b>Nb;Xjlz)X>05HLT+{z(J2_v zRbecb0sobjs;dWA56sXx!;>XE830MB;|AzJ(^gbupgrMo^cZ z1J%>B<(=w*fu_xxi6>s1_yO&k?ExCl<95dL3yL1IT6sW2tazni!+yS}OmRhd0WFdq1Bv;iWU6CXzRcIRqPv|nl2qkbz zarj%S;RXMC>z9ye0q&K6Dy(#xrJJdg)B{RjEmaD_>nn+rz&;6Kxo@nZr?lNvIM#-a z&7md3MfEtmqIuwF?6VucBsk1J4vHZ_a8e(nJfz9D0CE7)u*p`;My9?TwM45xtCqNv z^$nK}7S~54^oRJ2AeC=N zw=#7O5vgN;zMl`AA|}Z1>`G=z8pzc`NAhNcV}odQPZIOz?o^=P8^+$y7fM&pdX>2(k3W`kA?uGbnj`E|9sF zlLtD^PIL9ek48(G7pSBmyfha_DQDOP;rxmqD=ilaj;@%qAi!=fUfRJkdIb9Y;JeFp z$Opvrs4I~xhgz?2xHV$9*{P*^7Qt5oczUa@89X6>A$RsjAfiFU2O9ONZ;Oo2YBuf7 zECdm#nCeT(W~2LMX#4=460qLQ8>iX==v#v8tT55RD$ZN$f^c0G-?DNh9p}!QS{b)O zZ7SBV6c+ZAu7~n9)J?6QBcXPpy{#lY?RPpcU-hqa%4*nX_-OE*Cs4BWB@1Y;j3Gn5 z3IcwlmxhEzQq{RJ!eFQsic&3?j7~T_X`yMcYQbsAZ1E(1bflehBId#nhN9X($l#mF ztlOywpBq;MpC}ZhFXPxcI?raD%`*+nXQc8+-^-aBD@|dRE`D0>by_cmT-joLNZ3G+5KKWXfVi^+#8~i)3JDXSe+TYyeUMJtTlE#z{H} z^;oA7>PTR zTmd764$xBO9oiLu78)x(j68A~X7w6?`g*bVqtRv4^mI(;WXph!F6OfGe&0$qqweqL~OtDtk* zRmxR`#$QY98o~-ZX@x6FRR@nKtvI-IJI8mr(ZQj@B`w{y+M@N-ezI}X*!=vw&}3ZC z9iDhT0c3A!jqG9lW4r9Q_uAGCOZ)BpcY&4zy}(0~H~qrjTGe%dX#FylAwg_w9*oU@ zL(XRTO&z+3EpM~qx^U8|v2;SveSGEZ+VIRXdbV00jE3Ti4Vo@MNZFi63 zV!u~;M!LePy`uB-G(oU1v z?e3%Lk2b#^!=-tMjdNAa`1AT_N8@Uscnoi1?)`%hFbXHeTM{H&>f zZ-I*Ns(Q${2YRWYA-yyCKZvEN9wLiDtoSoc=}v?QU$CZy=3)JYs}U)#?z8cpotpU0 zZQ$cVe_y>B78%eLzk%L0%%*j3RX^78Zqge}Qbq8#j+C>d20k;Dkkk)PXK~JEaOyQk z%9G)*s{J-XY(-xp%J5LiKx8U=cSvsI1U>Kto!mILpROZnU013Q(VVY+uAQ|ga!iL@ ztT*T2*SR>MdZ2+pY3VT7V^CKrhdg5!Plqpy=A-*$CS|JsZIws>>BS4B8h3!Fp4vhF z1iW#2{TgztR!_);AtK1NSnlJw=5)N#)ljbXd@mad_6)LX@OZQTC{0O)6Zz2TvPk4V zembZ!D0gQzxodHmnv{j?41>q@nw7k=p?(#uV|L!8I8ZtpXav>i^R$i9)rCWFqEqlw zyu*0HITV*JepH-ek-R}1X9iS!3n3T^A{<0C;q3!nP5hPyvv8~(USJ>E>nJ#jQ%!@& zy6@{dC{lKEW9{+D(Rz+5-4qmsOB3@g+ljYUBsHm0hGR0~D9X}@X_G-1rWsZo&#n z@k;{)oAN0U&UqwCrIsAh8*RnV#d`O*CvA070uYYczE^WEp&9xkgA0C^S)Q}? zbSHRN|JL$$7!_3(m~>d8|4z?oBb!S&(DBiw>=^Jv?%4~k>+YilB}?_dS$dlF3a`b0TI&ik_%H|3;1H1pTOVQUf~Dp>>2n4KX8Z+GbZ*`gI>(@0 z!V&E*Yo4?#)pGB7K2;l}4yiojIw7ryV9fRPfRx{_e$BB>fVyFQY=HKdket=daSMpw{j>f4cc{Yg3j%(!leNaEld{Eeoc zS&RlIAaNXn8TTE4M%aMya}QSAH9P{y7bc5nkshr?f~}q#TpK zouor<6Y}`)uXBHo%<6%B=c3LNrM(46J#2;)c_0s?zV?GhAc-dby4RU6C-o&^lPaum?B)A#l_qxlr*NVCdPV95XQ1Z7e6+L2v6cw-<#uMzJNIm$0 z9}fY-G~t^wfH+2lz07BPd8`a{JIr1JoNC|FrMaxCxsrf?uJ$1gcRr`Iwnb?@YxLW5 z7en!ZLY^Qmn=cp9Ao#lR+GAHCM3C(D9zY2FHxUxuo$99tFk4@_U&Or68L^%lW-3)Y z&)RJ-?y=gw%aM?;&yQulEd3_C^gyc_g;DD}YO25(6>>p{9Eb^2TtmDa+_-#ZOscJH zYyu;DoEDi*Ic*W#SUfVWeVH4AXaDj@!n}R55$9)|n@Z0BaKOZ^6vEXCXSx_MwQLbISz5iP>;t|dVkwjE*4;qEc_apJcx+>ffqTm!Vi7C|)Eb6t^AT zHgW|DdNAaM;4FCRpvDJ}dhTmYic#}Ntmlc z8r|0kjta!F*3w+@%*Hlg;v|4+V@pI{v;ga!H@)<7!+!Htz9U2zW{+bn(axZ~ zab_=bWRA5FZpt0-#8Mw|!AB6w6)_VCezl$2y49Mb4BXJ(2QREbOAFMnEvp8mL&HUR z*cS3j2*>HA$3`%>b5m|%g@oINb?dOl{e^nA%%YGcV@gA#1ThQP4=B>Xi)vyVivaYi zR)r{#$Mz%K_le_3r^}8@jTaq69DPQ~F{J1J0)9Y&zafqZl5uHsn~38JrfdqRLAv+J zO*R;}@83_=+oZu$WH`Bsi8B?bU0)=G#2hZy7n&TNm@}#HcaG1T(#T+a@P@>K;KIb} z#1p|ML(hkL!|#NC8CH2-^ZNLpFUc2sn}SR6YWzIEkAIt2Ur!%%;M{_W5zbPrKu--% z7wEAfI0SRkiwgz{a6!Gfm!jNePmjw*bkE1$+;4J8Zf+^6WOTS{P13BWp5v^I>R|^Q z0-2Rh$o5RYj_9^QG0$ z)HF)BfcHK|Q+{P}beEkaBg~L!L0?jIn_jG5qz1oIV_sk-b`U9Ig;+d@_AX0 z&mX0H*{pzDyBS7V;v7*;>-Cu1vqp`qLh}bx@4xq2PXik+G`>HF#bhp;V6wUmM1*+5BvIwr_TzDd(KP zSCO&WSa((U8q%OOxUUI6C2W;s)dp#k3DL(aIKe~b!mTKFM)pU=P+K0#a};AXVW*EF zs;G_WpmCU6YuUTKW=emi=8Nk=<68>9pK?@y=JsaPJYkNmEZ`T&3w#R#tvOtC6Vq(2 zP=M)NP6tDm47_fS-*>T|u?7Y2?|RcPGQBsxqPxIsJCjK8#tt9eR)>P&x%F3L5ZNLef5&|0|;Y?@tuqh2*~ z6i1zomW99-$q3^wwp*sQE?;?j;{q@8q|W^2OXDxd*Z=0{_^%Z+WTiEomdT$ZyeL!O3i$I@wzn z+$u>P(_IwmHM&g^Y<8Fm*zW-mHlZXacpC~ng&hNJFI;!WbI%_5@lF`;co=UIe8t1$pr7VqwtHXq zzUO7VrZ?o(nyt+bEq+v2?KW4Vt;L3I0T)d_`-9;$s&tu~Dsm&%=89Oc)ux77Z6L>N zbvwXmC*_9@==MC9i#`iQ6jy+nyFd|`C@S+>PE?jRFK=<)&ODN5kBYixPlLg;XqdWU zmqkB)7RwXRi#)XfJzOS1HU9wv zzi?I4PIvifv$tE4uQE@^M{7-b+;oB>XtVkCHXW>FqhD&HUvJaFSQei%w=OM7rGS!G znhF=t0#O%_fT*QD&ahEa@4Bsugdcy40wceC+4#$Yt;q91KXUOIoxT62tLG-!WwXCi zQ-jd-vTZ-!_xPva3n}9rtSDICt3cp~Yg16Ee2Y8JKc2sY@YuOJH6RsLp z_5SdEV_Bt5y2O7FCuuXm!4ZqPo)4YQ`@= z202?%HKjz=k~W{;J4{pkJ`yOP5wOpU0MpTJPSZ)c71e5sN~{2g7h3Izv=s=FH*6;U zc^n0te0!2MHhCB|xZ)K8LB6C|NrVCvbfjP~6k0z5jQ|Mh(PgHxAnFR1UqqiXS^RPI zJ2EGRl2ztRb}eBj|1)Oi%rEbP$uZs6S_~fAl1^E7HpR7@xMgqkv=%NbUXW@n<7t-j zb3Xr2-md}(%Q~>XD(dvua6AG;!R@((W%r=*Vs6pwJ4O|{wH19wm*0%g>%Ztg!c}dD z)*Ju$)4&5Q3m;p%X#NBB$fH0LO0vT=y|uddiOSQ8k@N$JOX+=O55FND??7SAgd@7dbf~=5CMEkvpvVbP(jx`wmnAd^Bpu95_w~jK(i;Mu0o)ci9l&1)P=N6yd|nf_ z;NDIzI_*W?pug5KeEX7AcDoI{JDWYTstBL~`@yDulU|8tVGFVWB?x)g3$C0t(;ZLW zqCIO5-?U?Du5mIlZCw2wmBvY+1)uMn*tT|k=5ah?*W9YQb*nRfg+YUFKM8^OqPYV@ zV3zhW65Vs*lxuaVQNkV4Ua3zyB7H4!`BICtQtE^Y9Loy~=sU<_y1CPWWtxE#@f3Cz$sn4x** zzL$T}TGXfAn$ui$)RzZ`r3Kc(y7{EEfPYzjUH+x?Yxxsdo&ib-YeGP(=Wh`2=DGdS zXQZDDkbm*q^}_Yy0)9Dpgls1}xNZD4VVfxD6BnN%DXxSs5lX}|t${Rf^2NOsvc&R4 z;RsJ3ccD8cWLB0H(u2RRhqyAaI$uD-d<`oJ)WOi*zM$r7f0(7%=DrEX+4cZLl(o0l zQuEddF4d(&`y%Mje%U2Ovl~un)r48nZ0%DS+F!5^1<@ol*Vu?2H2$CQuLrn;1833Q z#(!nLi#}avyh!V>7iV*Zxt~TargOcRE8Jrqvl=D@YZIjAKE z<-oO93loVXWn5hhlQc<)R7+cZB=kE8wgQ zBfqJV{5~_3lNUqzQdF-%?8AKvHkH>u^PRh%DT3I}O->uTXt;4QuXg14MZ=7fB=Pu9 zXU>{6bKZCAwq%;{ydMp(nfUM~1LOMbb4%-2ZOsf=dqhYR%$bkbsRsnN-#u4cB$6J2 zV744}Vx9d<2gjSx<`iriuPO>qRg4lo#)LLd;Pgp@{{`A)C864=eKk$Jh;Y_JKUX50 zX{mn$IV&)RSZ?$RNHdKDKu4O4lLgbNC*7F>px_?Dacw&A*KIIT4b;wNec~x}QatBA=OyppQyg{$xuArb9JAfCeNBPQcniNp+^qIU zzs0}felPu2J;|NqPic-_;;-@l;olP9R=K;xb^I!kb(&tN_^F9JMDSD#p_Xu47>8|9 z<_dXYi9Cz64`n~8)v*9LduxCon)*<)JMDsDFe%uO`kQ%!rBPN6%&z0}j0tf-|@<Ny%$IC$_nxP_cRjNc9C8iAu%pbe@79Yp zb4aqG8QcQyE{-j8&9N=AwYi8a+0}d%uU7|ET&qr1vD$-|>cxTp{>@@uE@C8yR4%ni zL<+5R?R4RJu9dErT}NERd_N!uWM<#;o5Oyre%7y2QfRt%)_RHJ;V62MVN7iEH?JWwJKaULUD|#^^XKb`MGp8@5s6r+uW>kDzA9>`4>hDyyXQh>URrKr3Vm6f8> zylA-tIVwT+XOY?3S1;FEd5P}M38t3yP?HY;+M1QCEP|NND^MKnXR?*qDq5FCK9q=! zjMhhIq9*^XsMUWK$;gjMC>p~>ZcW8Sp?L(6`XZ$j#P2iJIHrYcgIT*iP(oChdDMQl-kP5522ytSU4 zo|ipri>Jf0!E?lO+QTs(hbQ7G_YhAow5)T8Of>8r1voL*e9p)-*hd%P2dp)C#~D-M z_M3Hkxb*~m`mQpoaGMdxS&wN`Kc8LPcE+nJs|ua?-aaLnlbjs5`M<8aw_1_zyAOp( z;go`5D=XEX$8r_>m}1?&7tRtYce_WZB+x?yzIWk)!1NkR88bEBPYd z%JDjh?bxDqe^vJYk}R(`-|gPsEfjSB-CbSvzv}=0s;(+r(0PX*yx;9c)IeI(S(Ko4 z^S>lYki_xuK*S%4SiE=#NOLjgMF*YQaF^dtKj*t9zU*_0YM<)e{9rTA%x$e}N|xZv zgUi=l`rw`9JF4fM#Eiw;PU5GbO96D6AP!mubeizAxZ6;a6^R#AIYJxlpF55S5r>sMfRx zN&0tW8C%S(ER&QG<1v!3fMojpihc&tz6;0GOi1QUvLq3L1%Ra*I&vEKc#C2tODNtkCF%kXjjK==1PPWFd-byG>?8q|F9VJw4Ck) zPt}>Jt*@rnEIzffx&0VWU`;#NNk@~km2BAO%%H>cPUwIfR@-pkx!MfDYX3R*sldIl zcORRVURp|WG@eS(AD9k2HRCtq<-l1P2}Cv;q-iLf| zPn!RV{>p!B_|*8Z^jG;~bLsit`X&8azgwc;`sr2btG*ynsZIK-f9@y!7X6ccbG(9n z(*Ls0^n&)8UJhI9tb~567waW#MG7!&3o^l99C6rsNWqzw(Z_L?7HrVZ^!itN&-g0& zf9WfI>O=h2AfopAkST7d0Wv>*#6l;od=1J1Ntx&v$22 zJ)BPZi+vo2JJcUz$IlL9+ruwlxB3J1qr-2E;iu~d?nsyl>InptirX%2E4#HV)|70)F>75 zeq)Io<7?$P{37{(@M5#v#&^g){1$l!{yX^&{!Zgj`DOkM`HXDgcq4S*(|Lt2k)wQ_ z+`vn2K2xrh7s;FD`}xEC^YX{MWCUs-P4m!Je&SJg2K$B{cbgqC%*#feN)ApU``Qmr zeo|Z-JIf~2zZ18m7sNRK#0&ua@rNc%!FUEdHu)#b3J~;J0c6V~LR6w-2PQGG*mBVF zj)k*u^frl_=vM5&%V} z1Zsl}Y*qlB|Gsr=l1>dsMlq8srcyQI-RiBl{mEzX0(Au6q~3qxb&^jw^$lF0N@Ksm z^VP$&#aq>-d@D%RiDQS-iVWCEN%xp-F)`g@iy7%bpa(-b+#}kOt=gDD5O|BpD%c5f z3cQo>pha{bcr65gNAN>n25pwGwFoKhhXIHMfG!q(>m3(xD zJl?tPl03&7mZ1*H{XFRPyaL>}nyCWuJI2f@glTYxcGO0E-%8llg zcqQq@y<~Tq_%?ss{73#BGcSkv`;1SJVI(3Mw?UK*77B;W_c0f5v)hq;3x5y-OvPUY znuCLfBsprg=>fWpO+%m&y3KA=Y!O@Bw%aDyvViwbL%)fn8O12N+Pt53wdj<4D8p#Z zpjSBf2*wwQ^UVcd5?56VMgyIQ zV62Mz+chG*yGR4)IMKjX1#YLHEV-) zD%o^KI?)9JzdB7Pu|A1eo7R|$eSDR4T4R8AsRwXIN#(}rJrV3xKg+3F?Qg6Ogw<2L zU(G$fu&e3nhw;hJU%z_#^pZgKim_7&s}G$0Ir)*{7l=a(1@Fr0$8`9Xyh?TeH*(MeaXasEWyW~p^WGC) zZf`cuVKHr%5}T8=ET=n%%gLadcI2RwnA)8y;t`iEE}LVvubEG}@LCB=FK1*R+spO> zf|nqDKGQ~JH+hHY+2gj^aXmC#eLUdY(cY*AGU= z2!F|k4LEH7Gh(YR=sJ=+)dKM6h1jmW!~gzYeuw}4XD=B-6YpU373x9iQQR=`j`$Vc z5z!|{#nd}b;6nRXc*l6fFW^yaNv53oV z_jngAxICF$x4vQaRlBMx`ZuMex2_;U?W`4$@-AJKleKEsrd6vp?c&zw$<~sxGJoEB z6n^ViP59XHW7N5a!(sdJWAH z^>c=PPCYlCcYXf({O9Li7oJyssy^gV*N{?e% z^aicEHi$NK2z7w<0mxp9Tej3ghK?b)K{a?^0(mv9{^wlE$j+7;HN6W zm19i+eKQh?5k=3W8UgqNeeJbaBvuB%#J`_oKWwk3CWvu;d>twPE9xr-tM0)80jIg0 zPU(a_N68^MIsSqZ^xx1G6!_APkoyj~&A#vRN4S4r1I3P-a1@85VY&}Y=jn>D1B`rU zXQz|3WV(BXRWO2L#%2k68{e8Ybi*@SzCSp6hf1o%^{d~i>cXZ6Hj!iF!SGKN2XV23AY|Xn3Pa^@jB|470 zu1XKn-0vA3a?Wr85#ZolTmTU&@t$yI-5wTlHSli%!0Jb2~2n(I#--1*}=?3&TH zYHng-Wg1!9^7MwK>#7|2m$X&1?CY!Nb2ople|qKck?Ymu&PVrdtuAZ!2O6rB+Aa5X zt^3yH%QBscW9jgM{EVtK^VHvFl%-iCvzq*6P32j6Emw8wYv8T{et3}|T^hf{SeQ{r zM8%^JqbI{d0$>LS3V6M)fReMHinz#~9f*k7Cg#!&#l1O&Za1G-YUZ*^c_}65(~LVH zWG3n;+t`Zk;Xzk+DFMI3UPwjGyWPHY?dv$E6Xz&%3@ggNfA72Mk;4z*n%iC+eEhb} z4f$srQZ%^s;Hl=Z1bHNDP3P{$ZL2Q9xBhyd_w5()QvBlRnwpKbKK#O##`b;Dha)Dt)@w{`Okt<}Q=>lOyNs}eUXQf6+x zedU=a4M%@n)qaW3Ro;5V4+b@C#BT#OF*GM$0N6~6DL9}MV~URzFvH=}X^NubR7`iZ zuN!4pMM1#;vo`=W`x~e2rz{_5uY;%@uyrw16zj<9@ zen)ce@)b_3 z#9+e{XRb{l$j$w1-v6A$V!&nwH1XfCZ|Q{)r;D-x!M!XS3PsVx7g8L?M&TES$KD*Z zzezXPgCIEH5q0}2qmCKmJ5N42w)RQ7*yl{;C!cUHAboFwgHWQ3w#MtfCE`92%Q6y; zq9VyINs@apmLY(Y2}D1#3$med=^BYZq;CWsunq5wgoBO;{S>WNa*AEPhz;8^Aw)lHluZVi6Y}Y2 zF#=w{t^zDu9aA!9ougqplTRmR6IHa)NX?FMDRJrQMO<{so%;FghgPrt?#_mJJO0b; zg7}JPWO-d-LEVaqiskVFe%2jVe*XHst2>%+Iez_(FMgw8?4NpWY%3^Uc13IFb*=uQ z#oH;LuLV23k@0yTUcXJgK_)9xoc3#+*4gZ5Y_6sbiZR)bc*kej#(X(zWGTZ16fz##K7-J-k8mmpY0(fsM_>ErIfE z6Vzj#-EQ&Z@PGAaaba7|265ISrG!iAz0M)TaZ8j^L8xWPP zN69dn#{Gynduqw`CYJK`G_J#Ls_ptpV}Cy9*7rgKCy#w}8VK~Hs(BeDGYWbKN}4y-XMcS_t>gCooDiWZ5QrKG zQ5SzCh%-a2UMo4^$uGEkeqdpJ%$|E|_pE{TY9q&E(DOBCKj5$7Z$Lh@Dju@?91i6B zu@Be#milh>-RI-AExUaAnLfIu6vQ4yxBcwtr3YTQe(zg%FMarM*_!73CD*S_+_bEqXA9L!D!1D~ZgfZf>Uf6aQ@jyx z+`He)d%b?AUrCFkku)|JJ56>{At7BzDLm=6kd*s59PKwl!({u5vE~?~P1K)1f=8Q% z1FgGPl&)@`)^yqS1!@>8x6SXYQOxNXrS&BltLO1a*_5&FmdCdoc%vz+B-g>+G`7}} zUsW(?_sVSx{F1?-?W)1o0;VQvRg6ZN<5IgJ$jAbA59u4A(($54MG^6o%NVegfXnm) zgdRptC{`309@h8a($fgHckB*QKlb0qwS4l_)2BW;rPa)xgqkJP6wiew!j*G`?W6)I zn4sqJ)ZjBm$Et@9(Lr?ns9rl%t5uq+wey@h9V1-x*h~0r)d%$*e_t)v_3ByBt76n0 z572P77~>q`|4uPpT6}9UQHmqQ@nWvHIGE$p_8)Smv*rY$VCGX$Z5pUn5y}UdaiWPD z)CxxVnAW|}l?zS|O~Jq!Pjo3R&@qr?CAph~iidAHu;7+=zumTISZ2tTs8o>(wE>_fc z)JwrWwc#Irz7M~t<|C~}d<1Hw>z^c|)r4rdOfBj#Q{t#r2A}+VAAP6z><3&N-f^R< zct(*3X80C2R@~U_&QMI)9k$hdS}yiqjrlF=_1 zT!LT_4ZOq~B#6Wa$3sZS0S8^YtJ~{mPKJvq{HtG|o z{rLdw4~_em#Y?9bHWiX;U!#vqPisme^Eq70VcEAd2T$$?=pT(}o3NSksr57HV>IJ} zJr*Iv78*|NJ{y?)PYceUa`>7q@uX7#p&N)~R8 z*KKYIk?75Djx1@t>-8INdhNi{r3YTUx#RlwV6gp$)g9L@FD_bfeag4dHta%q&^z|Z zKD$=|&&GMZs36@rnS*qm?4h(Ym+Zc%+15;i?&w&2q3tI#5s-}FTYE=p%3Eud=#uV8 z=!(Txc3)rY4_*>>Et$zDjjps=ZR@8mzp5iDOGdSa+pB(Tx5xeEb489%VS5^|RZtjh ziH9@XZoezd* zqs(kVSmDr>B1KI_m~Qf-eRZI8K`&nqoZM_@7a#~C!TfxOb8^g;?;at1*G*lsz0;<- zFBw=>-5WisKKQ+8YnFAI63BAyZ(NZTDvk#2ZS{BYNn2iZQPHK*(zWgLGkAATi~74y z7j@W0$w1T^azDo#XBCB}3xvGOc78d{2SDel(M|FB$p8-ImHNbKKCky)E8b+q9ad~b zqFq$PxX6p5vj+L9tMh!?j=a^B6?AzkvU1i~?zA#5_Id-k0T1;fkHk#5lp&t+5kt-Q zYx{5mFlorGlQwRE?U0K$a=p93XlK8ghfM7hOC4lJ`gq{U_9(iz!V+T{IxFMZ%p-*&VuUefN4wa;F0b;*hixwXrydhdDrFFt(prI%TA%k!WoZA^Eh z&rsIwox7tW`u&H@_3=oFGdnBO<|=lFMz)k+wtQ}S$xol9-U;mMN31vDkK2C9V_xtN z&@Bp$vVbYE9F_jqDA?2&JI9W7vi}jG?LBgp`UCEH^@rR|r%s*O4khh}w!Q{RDnyaE z)9JU{1K=PFBZUMPItodlNaKoZlSB6%tTAgtEzBwCeNZ+MsrSB&slJ)Naz9o$-n6l` zbav3g8w^+x(+jh+8`mTocl~|;B{q{84A0%OSG#H&({hV4vR21Qa_omaH(WM1FDH_h zR=Th&7P)ODUG@hp;|9Rd0qr7cG0BoeGWli6B}4bUNy3tY7mT14f}if8CW?-O&{HxZ z1$s|NGJ)>{+#eAonb}6#AfV&d83j)VouP@|JMA8^zESE%%E)6nbpwn$S!$3hY1Zd( zxjI+35}b z8>9mgX%ul2#($6ST?lVPxG@J;=3svg&MEXElu_W*ws7(^*>SBM7u&I2_DPb7_xLhQ zzOcE@Ow39~B!gtwb9he5H)l{PQHn~-i#YxIgaP4djWp<@P3wFCRuu_htx+CS9f0O8&B_X@A2O;v>EP+%<~ebNSBZ{bT+O{}gbn zeU;?DYAXGQO<$WzQ)wz)kbe6G>D0L?ur=^@k-zBHq7%iqxDC={#gCO3OJ+kFEP0ou z_e(x1`7F38crw%wx+ip^)Ly!~^hoKi%hJlWmfaIJg_nd6MNE*sUhXSzC?6^RQ^j=^ zuST z-pODQ?wh?o(P18Wybm&%E+fw&|D?kj|20_SzXogk*IYwJlkzb56CDN~1~s0z7(UPGFvUls(GB-q!FP3-M@sM& z2B*{fA)>=H|Hll@r1?W$9ftfNJA34OQ%2bnGF3aDl!!&;b zgA1rkLmPD%WExt-;1bH8(A7E&{0R*+xRjN1hYr(nZltg{iT~mx{)?075+~7Ro|NA_ zDZhD=T+AuCJb)Bbfg-3JRRh$9HlhTaThIXNhreO86AiLEbKoioFg-o*u!#KAT`0&I=Gua+u_b)R(e0wo2sW7O5X`(Z-a6a zD0cwL>_y!GcLO{K&ywTyDC5{iP!u5l_*FFuF&w&}gh9xwK)qd14=tk`ZPxQHfUAvg zmpnd z?eK1r-Ps1YdKl*vxSx{8e87ovr}=lqPLCDl+O)r5&MO2^A+0qp*LbzNqEQ~Lh@ioRc{2NP17%QRs- zAeA_U6lJ2rv$^Vhvgg8 z_JAs7RWWsp3%3~F+5W8JYP1$`Wu?2BrmwLew>ET z`1OQtT*#e4cHIN-bi;K>*Avy-AgHr2;kPpYM# z&wKh#AA^b@fAKlG`o*PdIQ*@=o!k;q`k7?9pVGIK?tc*lsoF2ZYsMrUppTOx{WN}8#1XijSHzD!3o ztKF|lW}@^|3+dIloMg7Km$l(xUA8n{NqLF&tTp#BDpOoOSF1xzGF=Sr(e>a$i*|lX zC}NhK(pihbkP^%y(>gXYyOm&4?SgxhLmMDR>RDJX^Rn}-WU=0QC#=QLILA`h{A>Ks zSG4+JeJnNR?{rPWGu4(pkGTkY>CZes0Rx{y=QZfuNdq2Qx zSwDWAn4}@pZfO!4g3=~DtcLYEhD$>CRNKa7IoXzIG7ReyA7ZVfZybkIyFOQ!zB*SY zdw7k?$)4t1ou1&tcE-mof1?~z-hf7f{W@n7lQ8IEM_T6uUp7IG?n%C5_)F}uX8C&< z1u2hLdyWt&5-@xES<9IgcnAS5M(UNJIa{!}ec17SPXB@ zWt1*s+?%KKj8faot|q9`BsGUoL%B+MFc;t!_-h>JT`N0kxU^0x?Ofiqv*#1JH2UiG z;~d7h#q3Ix#vFFl#$-jGhICoBGCIz$wVi3=JeI4TQM_ziLmHU&YS^c=Q>$a~BuupW zsB9t=~@r2^FY`o@+m0b3KQV}VyR@ycul$L@1f#IEl z31!Yea&REoHQYPUU#8Ue^(n2r8#WFPDXod2MDp@PPnlw|G$qz06Wf)=gNgn&`c8A# z&Vg;iO5ebS-fpFPU~p%WzN66MBT>aqPt_r%wX1J%qtevX-#yU18SX9^*x0W$ZR;7L zHMMQ*9a8!xm$QB#sm$(O*Vo(K)u-q+LY@JrR2drBmh4WzY5nl_u4F>l*58vzD#MhH z`E5#bZ+D`9C^17BN+guTmUW4qom27{T=%t(sL6s3hablOyu zRN6(G5T%qNBwH(GDeaOvE#LDFicaVJ{@3+==Q_Xdf0fKT&vtLmec#W0-_J}jSTt@d z#EJZC>5O&SjI4Cx#L*!=Z)OCSgV3cP$l&r29F|6~sc?oNGQ->d8!VydT)4DECOZlu zM@9nrAVY}431_k)A7(@}CyvI$LB2FTml?sNK~$QMOCE%`wlevK2I3{e$Hy@Ne~}zE z-w2w^Nq|_iBq#xJ%1301bVGa&6v1WC_zWCGXY%5KoN*A1O^4#SOfVV&rZB*h#)IM+ zTo#kh2jIe!gz_Ad8XpV*;d95{L?Re)$WtiwZ{);tIrM}GJ`O^(1+2v(YsL@&#uB3e zXX7YK1W1|eh`0ngqFQ6rbJ%f7kRDTiWcS8R2N3>_+L6shf#YN@pN!B6Fe{aq$x+ z3Ji#yG&&vG5C9O!Cz=_~1T-7T$|9;2$%%{O2vuNI)Ho=d#sjo+*xwX-Y!mdN`TTer zV`B!}D3KY{WSEv>|gfIlm&u#T*Hr6yc!wZ?wjEFgg z19(D2!&uCS1NJ8r_e5((L^;8pWo3Pl&EW}60Pqb&zyPbFxHKRcIu45D0^0=I6A?}0 zMgg7?83S2?9Rk-!2wLK`uAW*m@= z9s+R!w-9yIp)~6YDWWqFk1(ZIbt-Uk`@w?7|mh*4UdQ!Byib)7={o4odX=Nkd_!m1bT z*qb{MqLN+xg9sENM502z6mlTRh3Ep!B2Ynl77hv``MZ+?{2?%dLh$jQ3z1zRg3nyY zljP%qgNVVt6e5)hktq<#+t-Uk1brkQXRiPkl8+nY1lIYG!SO=^mI#3QlOY7*C@2z< ziU9K_Qk>mEli)=1BKgn7L9Qf!9|Wc=07`&-2^4>lbAT6t0{I3|e92TIK<@&;`jC8F zDF6%6o9N?j1h9fWh!_YO5Y?UF+DY=`ygyMlYRUtpos%q zQvAOy4I)vAIEX+YQ4xW-Qpf;2B2KV^ECd49`4C5-AfkpQ>}bX%m1p&|EkOX=*@rC<|o$X z$E5SCKL4ve|EoU#Usj+0X^zYMQ;v&7fr!UhER3;0#yeruO&H(sgl7m}=tn2!z5U=B zD>4LD_k;fNV}ZgI<9pnN&&9(0dE$t#(9dv%K5N7?CH*D!6DYt=!`fr#V4blRSSzd} z)(-25wVtrj|EC$eC-Ow$LI1>F#IMBzekR~RDTs7oW&p1}QEHsg2pco<>Hn{@L|R3D z{s%Ss)I+`vK#yZbjlNgqjl8!9zuE*Yi;aVvlelp>$c@X0#X(*)KAXU$h2x+l`1BqlXm424ArEYT=zUIa{oapQWX?$ug3Rm4{KLlzz^9AT)31S0mx4~+i- zAQrM(+>mjBR2=j*nY>z0ub&bshuw6;w2_dq*Ounta&T*&Kzcqbz;?p|OkExZjY6Z9 zOhrUQXH)!`_ZV;p7n2mrPl@8ZVm3 zj^cCJczJjd(kZSaPGQhl95x-V1y4nKq?A;?Up9=pjlt`|Gm&wO(zNm8bOuCaMhPp) zzRm>Xx(kN2)MQOeVKdkQZ)IX-3eN*gGte|0ZNmJ2guc;n%wLSd0+jZ6K>_(=1SmNX z&@Y7+pim+Q4s2G2yEHrvWE^K|ys_UdwbR$Ln2>WkFY}GQLVzT9D16WaQ{OIrWAHQo zawy))kiS+Qx{WTVp~-jXUj98GUL zb%(6I{Jk^9dp}y(=gf6%r!3Nvc9>Vas=}gX>f2}Q?_Ygg(+T7fZ->aQ< zi6mvqBo-E>TvI?}fQjrApu&MfLSQ8zOHEy@3@jxk0aRR6R2+kWHIdFqSXHd@Md$c4 zWtgTkZ`rWKy>oD9PuB+++nLz5^NpQMFv$cH+qSKVCbn(cwr$(CwVCJlyxMnbx3+4l zwz~TE>2tadZucMe-u`r7eU>Wt{9ialzZj9Rl)6@W8^GDB=9dD+Kj#CBdq#$uicqG| zQO)g7mk$^%EOnt}guBMNN_tCZ;@$ZI=xJurp}ofLsqoS!GIeKeZ=i7hNF@c5^=?!d z<5Nx2rE|DhqIQR~=!I`Hhip}a?dm6sS6&~LV@+a4fyAK~(M~PMim1cuN(wLaKuP^R z46hCm()H9~SkfAZNR#u( z{y=ca$q>6~e)l_7vGZZ8M688|4&O3M7BX84pswjz84|kJiX0dZ6RTEne&>RHlFi{c zQu{O5x}lBxwjsXW>~vg%-z&a^yrBCzduT5)ypw?^i+zX$6}4Zih^%;hc9uv65WA#5F5)$&VWuM3vcwafou5Al0|Qz-8+iB&GaVv4n$vNUC|6VeIH!tK@Cl zu5K?39>L_SnL_90KObd(aL#vaWWB3l0=i=Rk(bRfSS=m2Vd0f`VdIE(u9Wo_P#UY_ ztHNXB*iB+39YQXAjs48G6uCj?c+S7WC#B=k=XvB!P-w%UgR-P zbdSQ*-eGGVrGXLn0^T~9gX=cBfOF<;5%1dD&h(dp(7m^wZW9Vq-#fT5?;aQu~cv88SQ6)v{ z9$G1}S7&uGm$13q#P|$a2H7Clid9)VYH5OgtS0}gZq{MwazhsSctBpZ9%ybtT}?AW zZ|V=D${p=YPqPT~M;hf{@oIUW^~L)siJ(1xO}%o54n(!Du&|HT(41wBH%5}z7Zgb| ze-8BaS4vhKS@I7mkO-c*j-P*gw`b_@ff;#o4!}cPlx(Hgkgzw8=6BAoJnDbJ6rKjx zRsI2Ya5#~K{o`ywc40?l;U}9WR_t~=139yv#MfI?mElU#DCi;02{0`KIj37vDb(k_ zbF}TpMWL6;O(Xb-Nm*FJw?7QgM`Nn~K$0Xh`&Cd$4k{O^=b=5AS4msjYJni9H7^hJ zP?1)3qsy$F^(Kfd@8^Zib8zTBXQB&!sy4^yf>TB#?1NexC$224 zT9zD`7h+*CM^07qBlv-{b7tjuu<8`)DHWdv-hB3cP7m-O4I3WphwO7C82dU0Aq+oT zkV1vcy$CmECeXT>W-(Tu9nsZVwQKXL`!3}u7V(;dODoRQ991rK&nD=cf8D)F8@N27 zo&720Wf>RNN4b?fT`$=W&wI+56&r1`LN+6Sy*#6nBH*CBtYO)4U}6zID=~lh?O+iJ!?b)AWT>{g?q9bCP(A?9S5)4J9bc)My;2Qt(Rt@t z#V2zEK_c^Beulu>L=my1-WBt%J&M5aV*;xe3XhipINL`DQt0A+7nXziLX`k5zc8ONTHGe158s@gJVorcIg-jWXp70{c`v!h}A!E_r`EdRz--`Cw;666iu#D$VuYF!xtkJ-rgVN97 zWxPwNM2pWBw}|8ufm@Q(8bEr{+m${x!^n8XBKp%bh#&2qRy)7p4O@T(QZz>uMYH)v zYk~U`mHYZwq6g9F=E7{7NccV|mEw%`clb`D3Al4iay{i7#gWe5fxTaEr5X<-t)$Zg_cFBH>1Bwg?J+e z90Fuu4hd1_%NO}ui&q)O??qyV^Vxp8_O%X>5*d*|o36n|HCPq0Ipe)M|LmtU0%PiT zhh2yH?qqo@8`u&94QIzm(}uQzEh4@knm}%Jt8?~))r^s$zM8NeU%LENtV|RmgDHkb z>YYzohpCAWL6|R(l{qvh6Z|wnYF1A^H#v-hYfmO$NTeh(JRSfiO<_-LainKy#0i1O zf}g=3+s~MHV_N3&hwDbSg~zu?UWE{$8$>Sn@|mqfb=Dwg1y?MI;_VYQ)jLc)_7fR; z%->Oza^a1tpWk5hfc(J4ybXE@PqzVHR5bOol?@6#>l1e-CpropUP#R*FVO&hqCvx4 z%brcVMv%N{v9N5wXK;OZ#oOV1!kt2deXSuAJxlqzicBW=xwOdpYI-aCt+~A*P_0_2 z6}L4Z?KUl>eI~0JkzgHp;1{K`lbr0&Z`o&XW8*7&1TiM&o!t#)Kq-+OnbfI&g*F!4?Sa!^xtP+QI5DLey*?2ziKGlLSfaDGfw1&U9ILe zVnD1EjQy~0ueQ6br>orHKZv{S>rip6fAJIw$YfsPOHx*JdA$iFOLz2&zO=q=WVlz; zEzrTd(Ov9-$t1iKtR+JsatrNQ^OAJzDg36sDl&@ebx2E9|Mc|Au3ZbN*ZfMFZxEVP z`ZLrh^lZgUhe?yK@ls#_Z}=oGQ6x2261rhxX=aVX^BjD+#XcK}$EucG}q^8A&*cKlyWbOajLT5EE^~D#P=c>ft5{ z0W#Mn1BAtPu5>t%9wu}5o(o>zG^56X521yxtzpW{LA;f9r-0aCwUA5adrx6OZ<=g@ zT`_S%7%(xSUO&V%^qHPN;Z`HRLn-P8Lz;$H-iSl-`WE2MAkJW1$MeIc;r06Y-D;i@ zpjn-0l9_$1hz>6`mEJwsB(um}22$bB+z zO?DH_^!NsDNJ3s(GZ{$n$#qef7)>=n#zBJC2sv$zjk}p9vzB8k+oFw*HxaDVx}FHN zx%n#w53@|V?Uwx>8mM*a&UdzBXnf>Ayo_zD@gvj3dK!p65tPlaM&n~YauvS^Q?vc@=ui3Tor#^1A zVw8bbzBNBd&t+lfK5+sp<%6 z(V<;foR6gAp3MDDd%gyH{s59q?O+Ma;l{MOqWz%GY&K+;Fh~`2#B7-#d56|X%q&n#d zwZlC+16oY97VRQkwI|d>@|!23sMd?-qD<`MwAvYH$pULe_N8HehM?RYuqJ|@>IA!4Mlwqc$RV-Y~VZuBqZZ&a(X{Q zJQuf8YD+%`oNk0io2zgz3#We;=s1B8>6Z3zS+I*Cf6*|!R@kK*B`j; zualWO(DSw>)VIy?pI(Sf`&gD8adK;nW@6x~msq>zT`W`URnok+NR0M7xBz1_%K;xxghSg@d#d;}{!EqWuP{MzgUNEj@d%*}RL%zX%~JE0SGPA;)mM--?m z;ivvlFKS~@p*poVIZ2}d@YJOo+f0j{b((nebAUK64@hc$F>9P?mB;4C*vwEv<*xJD zX_T#&e|)pmp3b)gz@)4t;_%DT7Zw|8*C`&)RkcxP=Ui0nF<#$smjj6KR9h9B$7lu< z(mC}BW(^%2&U{)S5t^J-Y(2(*C~!dR6j^(k>>aUi2s{gQw&e;{EicS#bP9fyGClM+ z#a?1ZU2!t^c^6bJijJezTclZQOB_a_Rvy_a1x z;dN;WTXxDrtgy4PzzBt3Zluj@j;u@ibEK0!FF)Q6k7ky~%En-L$6lVwgA#X}X|bdE zJuz$$f}6%oIheUpGVX`1;{t(g_%r9p3d0LYu0_$tV?#QBd41k^59MPNp)8oaP#tk@ zVb#%l z!mJx`t<`ZH_kp4`UwKhc)s)qO@Ze^7MB8UprtR_X73fdaLitPsr^?K<>DM1z&R zHM0gkdbmQ(#wA%Zkm;SUR)Hy+MVh_sud|;K#b2M8F(B9~Eox4$t0L2c=_Nl+a;86C zbrzC-^dpc#_+eNFSZDocfeBHZ|sd%*SN#nU5Nf%nB}zIZ}xj1bogAt%=x{Vy=WXU z|6u4J7UsOaEA5An?o`aus^$^Xk$=mSa z->|+9_~8(*bIA<&86OsYt?edheQatVZmjB%_V`kDTdL5xTovIucNSD*?9OJU zT&gPV)WXT@@$r^4u>LTac)0yjo__A0p|mc<*>vr$<)Lbv3n%yr?fe>9;WC^7tn5AK zMlrNcZ%>jHRLW0ge^9Jr7(=J6n@NYhOv!WTQ#;A)GMxzA1r-A|ofq0~p{wYRY(>q* z4g<1PWuQ#E>1x>wQJq|1vaIcLLNhIG30_$;;RxP@G<*_#YQ8- z=`=zT;;KjGgpQmGt_6@}IEa81o{u`3V6Nh0SclvO6LX6e1qxO@W+Qs|H;hiS=O{Hq zE*Y2vfdt*Y+w8aM$D+HoOifORCcraKS($lU9$;e37&FLxBVl8CznP)8A*HS1<)G#} z&Igok;#8=4Nz<%K5VwW3`LzYwHwx`dg}Uc<-9W?rtU05P4#Mam55;>CL0^te7r~>$ zlC9UBSp)fuy;HY5uLk$^{0%$KnlAFQ??dg`zZ%xogKqQQb}v;{CQ2RE?vvEm*KB*w zD%zdEIZu8^7<&d^s$vw{xeeB*8XB(R2o+kJ!QD@ry1FiLvUr8w7vp@mdtx8ZbhFYKgc4QKd(k;ShXcsi*( z^GDgrglW@8X*?i(MHu~Q>Ka;8wcaw8E1SwX-a>gv`wbN}(@;D>o<9QAhi#ycFF@XX zdv4Iij1&EZ&hF}XKZs$dy9R&Sw@_NS2JeEvNof3KiCn4Wy8h=hH;3b@w=dC$h7Hv1 z%_6)XHhQ4fdy9Gan8IT04AZ)%<;l%`tzl+TQsx8_n94+b?75g^4_T z7>XKl=C-;E#rKyHT0?35NlsoxZRA6yw!R`N!*!|wo=B7TR*dcC`lo80ds4z~rM6;A zE5nz#-}@bSH^#=+E^7JS?*?GlR^O|i99XFUZ0cM)rNsOcdX5G@I3hz~P-bSXjgLaM z4)MtbzwFwDCO=w+KNb>BD{2h->>J}At4ZyOQ!HpEOh5br)M@rTAN$r{sGD~M5an7X zI*p~}yq7P7YfWQ~yx~&s#Ab2(S=`24k6~t*Ipq(Q-su~w_Jb#kf^>tj6BR>>70LS9 zRisl7O6iZT+ij<3Nuo&e9b4;RPwq=+C7|1JuWr&_kryQF@?-R_@He9#BE_Ub($)xe zW?gMK%Xi_K?Doz3_ipkkDtMjeh8LZh@Ax>}t#mf7o;?>8v{etZdU>|-8LzxocNtF; zw#%9)*+%d$QJWJ{9NaM%Pn7PY&c(ArtQuZ)J^jS!(X9Ng&p<7oKkQav_8{mpuBkVj z?W9j|dLf?`K2qQz|8T$6lkgVL!{+oVG_y&t=UY%;PH6Z`x@NDP&^@4KV)~%@^xb~~ z!CJeK!NV9@8Q4468R}ZXe^J(YX7Eg3zb+tTB>YSA@GuD4>l<1*5OOjC7zCY+l}!yC zObA)oIT?g?ZNv>tjZGW~*_k;QL=69FM#s#=$RKK=Yiv)*!ptCQZRH>&WbL9($HvS- z_*X{A%*e?2w}wg{i)vm9d2(AtQs7p{{|cl`$a;3&T%cmw&uu{xZrS?_g-D^yM&v zf~$?;zjXX{)y~w$!P<^N<=+u70~q=E{#*E*{|;ZBnf>pb_$P62{ADwKnPB->{)hXw z_7&B?+W`P<|8D&sz5bE^Q)6Rd`jWCUGyjjw#>P(gSHk|KIw`d8C`FaP@Wm-jdSM5iSV&Mf_kA~Pf%v?WBsr&5Tc-LEI|1j_DA5X0D;5{Rh* zZhfaf68CeSx8i!K=RjqUcQsCq*!;{reAtgeqF|nC~$QB zr*MIA?W|79i&kWB%8C82ys{AP9?H+%O|Lo8vpas6XrE&t_i`>m86%~*v($N?E@SMM zYp1;83gx?*@Uwiw$6t0D#YGi*mP2yuwbAi7Ld;g*^!xA@9denY2;PX{{@4ZH;zd+W zM}$)CocvIpQU*Qm?}$G7z)bbTT;Ug{WXFec?SrHsa0Sm^0rrP0K(_T(;ny1p@WQyd zCHbXL=C0$-Ak=Osp#OX4PoF5;`?qX>F6QUF4JFFYwa}8RP4TDRnr{dM(p^t6h{$>e zgge~5Z|i2a@G_Sfvrhz+u}!{H44q6b$jzUvm1g&Yh%y-fp8QErEjqm@yDpA(_*fZ| zxaQs6ApSSByWC{R$4Y;(T;Wl|3d27E(c}ug!O=JeYd~~i92a1>-)0Eg3sSgYg(Ik( z4`{LVy7b9WZQ(dM@R`^J`BUT8=SOdk_~HPrTGfJ?gI^ztHYHz{>{G~hsPvW(yF(C> zB)(R){OMRF=G)6(qH;Q1AAqn*j*k=<68gov+sH#%m&KxF0;T^pvwZ z+SrqCXFVMDn=b~N{FmA3kgXHn5gy(rDG=X2QY&D`rOBk%J_VjrXu*xG#VpUL<{ldB zc5iH-n>;l5=m`=dM+f)yAAB!g&)ULZHNA)7n)@JILBl^g8@9h1CGo{sx6)_7#U?6! zd`G-FCw{J=M==m*YMW;w?hl00c!5fXiZr=P;?HBj&OkskVj9 zdybK!{P6%ynmGN=w*^n^iq1gZ7HnKpp;iasGIY%v?t_n04eXhwlKKRQFyGagp21o` zC&3X|rKRRw%B;1vZ$8qzGfoS(x8v*+Qw7qaYwRqTC=~qyzDrJ4YF?AemOj|t@V3}AVI{tV5Bg2wOY`{T*()5g$U=#5woz|C_~6xOzPdo?*`C_UZh5vc zwLHDi&{039$7~R{9V{hWJ4K5%GCJi?ggP~L!(7$GS&`fKM9xj%Y~`fN?XE$03R9-! z?5h*by{jPs+bm)|7JFvn2Zaf)FDPPMIn~^}+27a)VL~DMVpJFRfmY0i7Roa2S>aNO zr)GM7UzcvyFn(es;{@x0>o};l0o|7Xw64nNOO<2V(GQ=|6!4U#Sp`E6?Lu)kWO9yU z0x_1<$JmKadQ&K6fmWFCub$u-wTf%wtHRE*P!FAoAi7@)Ihe=o0W?KNbK|Dt3RttVedZ~c zU-E%3`D35nk$w7s?hI8tk%AB@d#_YswMw<(2CkO_krblo{H1Le=mJl#Fc zeoEHZoFP#(PF*xtY1EW_i#KP#sYsMhkS8}Z$w@($tjbjGKp_kAe4$2j1z3pbLt zS(#Pg#=wcvfkv>l#=DMeNhW&0Q3-2fIgQEfk;4YU=_@g zvGo|OgH(UfjKo16Dn#N)8IsdlVD7f4gPk>PUk0yTWcFoWfh4S#h@~^#CMw^Z(8Acp zqx4A&I@40t60He!hW_Qdl`%9L8lX-tRd6t&!a~ZthyAk(TFxA&YA`O2B$zx2oABpy zj8o(k7Z5E7EzVON=x}X3!5>6~CE)#^<<&|tXvEv1&!}+f%)ZSiZP?|3O{U?teuRL2 zmVg3%y&p+nW{n5QT_z#dFh(OcVE4F_VHA2)z6@c6{@XtqsPHu3J>qT_2pI*InmwUipL0hwdDb z0lZ~mD{rI{EMS2wvH>dx;Y?)L4wCi$ZXl)INn>;eqXkTS<}e^))9Uls1gmF-7|sy} zIV;&#`0Z$O8FkPPZ4LFMzB3w zj4Qplhm0W4Rzsmm-&3|A-$1HAgf9@63vV;T4z>V-tH`gkI?_j?E-f)^5n+WNo{o4N7>&XyhicuAyWntKl^{1wTLq+0=xPoKR7o{otiIJ9HFfUh zZVC$w5oq%0quuYp5tiWgrVfAVexrAvK%f`+51@cR&g(@1$-vbxb)YJx7WCnc24CMZ z6{&G&Z`rX;E&wl~yP$54%od{)#Y!NpNQ}b&{x%SX(gU@7Jcv$EEps*(FC~9OVW6CJ zuRyJ`up8n`q3Uo4I;7>EmfQ%!6@1$Sc>*a$5dtP7KZCICD5QiIHSLjhY+pPpJlGhU z4L%Gl9|#hNf%GM9klh_)(n>>#mzu%NmrCSO+$yP#KwwR zk;8?yOacOvlr#xtnUd1&frh}R3P9USASz4JsX{2>r4lWmCHeM}WZYG1F^6PWmy;FE zgKc^&Vm#HnF7`t{Q&PUG*>q%SN8bq$iq-oKR}jnnNG1;mQx@>|U_8N$TQs=ydX`gJqBaSiZvT?>d>h z!{uPWXKZnlt`$zDx$$SXwXMMBWQ#ymbup5f63JhS%@ZXrB`${2EJjW+RJsPa7{5>? z%t3Irv65(}d_-}qf7<}2TvoaiOa`&Zt0oGVO`t&KXOKb-$xr#IJ`1;jzfA{8?nR7~ z_aXLpbZHoCwu$klrhFehp*7CG@Gqi=6t?H7P3Gy0YNzre^#MJ2+`2Uz&yGYj_01-& z`8Hd8D{4;QB`fD;aoit**qFQxWQ9wwnJ{lKsc^-1z z@9XPX;Z8;4Z5u&GZ3+{QWw+=tg*uu{(>z_W>6wa1FCb0vmY^E#JgjY*dL{nF(c>sI3Kw+H!xghX;_Z_sItj z!VaJQ`mw4gVaaSlB2HUOf6-jT7Gvnr8e@KyeIPSOBse{}tdL)gSMBA(UpIh(++Tt> zHAe3s53MsSrw46E?xajk+nPW|%S~f28WF-xyGnzS;3d|x~xeqrT-RSy{Y5LA_S9^L_~*|iR5>i2B|P-^CN%UL z)16{a(3X=yOG*xtBsdE7%xI)lv8qn0EvTWQ7v3X}Vt0LLRO8vAjd6Zb-!tODCClRukt_ z(GLrYeufm1o}lNn{Tpu~pp@2wgfJmTS8_V$`I#GiTv7$*7B%7b3OM}g;o?5Kh4#@I z`4i9YNzE$e&BaXh%-Vhp>y?;Yw&vQCaCO%EF?0m_Tz6^BhlDY=UUbcNC&`A@t%a6o z?p&?TfB>!bRNGXfQwOsvQxBYzTIY-zGB>W>my2^-5Bs*fL;)AeKjzjExpeQVny8or zwgesbN_9oWEMDrBr(mH#0TdDiuC?aB^&^{7qwto`o$@liDXuzkOLHS@?D?I+ zQD>Mf#g}|gk|v_8ItCBk>>JkVTvjPKVn27ik^WsVXUy{0Dl9KP|l{u zyv#un*@6?e?HT%1N-SX<&Yo>Gj^aP_v@B&5FH)Yjs4 ze^L;Oxbc!N=C;TU7GAKMOQEH{ud=YzG*(SLu+FVoqo`qKPFcGMnAdh6t#^NgNW8w^ z-)rR;2fgr20>)#`0x?eToi(qAve+-G*3tL;UXN84rbE+Eqr|p2QuAc#0sb*RM*}Jk z%e&dvia*QhdB>~4bw?Fd+-E=@0I@@PtP%WB^ZtAODnWAhsQCvwV=kKf1g~VkK zSSuA2XZbL~+zd*TdA}$rZtzZ0b1W|~tqF0x&b_qV%rHnQj(qKMkD6=;y}3n>MCYt! zIT%mn#<(W*mj1!_l$kqJIZ_xa+c)-gsuQLlV`^z>oGQwNae~%o&k~09GIO0#w)+W& z`Hk5cj`s6o!8!o=(LJT$0n&=gp(kP9@%^Iskns?PAv4XutFg{HzLmhk|IO$#bV8tl zMYu4r95dMF_}Cd+UW8DF82+zp7JDTkLz$H`Vlm00>nE zDElZT847h6xdQ454Q&}ZGpdGY1I;!ME?y%3(4=OgZJ6?hkdl`DdbRVlHV==wN47^> zTAtQ+%h{z5to3L|H8=KV_tnFgMe<;^KP0^?=7?(q2xm*rF7w(V3!%M$4Ds8h)`P{X}dd z57PQrVITyha8C}&-YDk_1EdTg7GCsi>XE#2i`oxtc3jd}hf#Q0Ys4(qbhg(D^Q{bn z1(6b{B0lR(BoblU>y{g_xVo09(imf95n`Db`idu&N>sqq&({M=lTS{X`yQKZSTec1 z+L|68s*YB4_?;v6wW^vbPN_T#>PK&So^J`Cq00P)qSAs6IK#=6N@JN~Sc*0N&<~T< zu%b-@6=z=@jfpWfo^_Z<@G;(JhNji0KF|jMoV>!HTs&?VXSHWF7v#7(e-OJMg?Wq5 z3Y+I0OMnK|mkcwM{9djDaRD=4`x>Ts1Pu2J53GK_!B^tLnF^kq!B?1#1NF(a_~8!NZR_Qf=4R4MWllY* z)>-rF;vWiv0Gnp>d7EgDSCYl94v7+c5pzD$6slwsmS16Dp?e%uf+9S_Hy#D=6N`wr zF7Feq+MO>ai%K|I8NRV|J91cU~-@>t@#}2WPslN=+G6iCF)LZ_OVlW>4duD`Mu?^$xDd z&M-70oySqQFHV}NBcD#2S&D$TK`(=Aa(P%2uF$NUET_-JC5h?lYdxDi!zn^Rz^{Vu}xDH5u{# zq~5}AKW73@qvrVU2!h9zp%STBJO2k$bxy(}_F!8qZI@9H=pjh+$==CWNjzM%nOvc@8E!C#{Pr)q z#kKO@ZXZEs&BH&(`V81n`L%~VtZRZl(tGEa9z3J0$ZdzGjEqj|Y8HUVsMIyJjcO_Y2bAig9c=ygNd|^1S~ckzH&T)IB3C(8_Pvwk z)-C*HioB|PyTB};zv0^)&rMeEFFopAzw5tFWuMTmTy{(gw zdjtG6>R5`lKUgF+W|EQdvp?Y|J=MnQPcj9p`KN&eI<1}10d)qu= zJ##xaGK{8a<5VzF%6I#0v+_Jbk%|3bpJ8ZIF;(Vwt2EB9$;XhHI5~Pq#<|%VSJ<$1 z^So(C|4B0m@4bqe0V#Q1d3?z|{5Vg8^vgDkb*krtL6Fl)s$Vs(TPuGDm$}MaQNwTS zES$Om{6&+xLinDFQ}v1SK?`kC)G1u7|EFoo*lY`9P+bZMb%h}Icsg~4uS1Hv0uN2N zHyN|ph5WTB=Bwq+s3JWm9E`bi5r-&*esu_oxOJP%mkE6j*?!JAW1id{Yy}Gsx&C^A z&aYD^#HEL)b8*L6zEr`4dn;T^%_SNt*piftVas0AJ{**-D)8V~0w$Ghqx8seaE+k=|PedIhH6?+UH|~3~q^#feQ-$p~NJHhk zDUY@mAwWDLy_Yb;uXuln#5_u9L2e$#KJCzuajJ}o^>_R91qD78O%iMe33XHQlZ(1k z*2%#5_rxSVLOxefiak&N;pZ3&^&sUs!8?Q;e6AO)^zgUFyMH3~poH2b(@FrD;bS_= z1_}0HCZ&DZhtfU?743}<3<=Too@3`ay7CvL7KtK^M?{83qju)pufT-!hoBMd6IY0# zVXI?rv^cZ04RcB4=xV%bl3D{UOq?%V-P&p;bL}Gt_F3g=+KDxQF2hae*HO4hxE8Jv z8NYcFaaEz-%_Y);i@4R5i0JZ}(owjBL__4wB0)n&nP!qp@L3)WjTRr;#Sp~5gm)Dc z%hQPqOeVO2B)y96%W6`_lWX&*zW$--0~UQp*80Q*C1k=10~{)1*cmiL2}&-bGbd>w z?gaTp;-v@*U&$Ov=)ekskHkIt6dkq5FLHt6NW;U0c_rpy*tRGmf*2v{i%BFB`HeKU zD>5W%OpH_OAxXJ}2w6ED1IT!(Xej*AKL3zXmoYku7y7&uYP~pEr;HZ}Ee2sNE z_wepTbStu`yOx-l$%}!6xDIaJJ!(gUnD=HEf`0qjcFcA9CyGLlSz~jHKe3uqasPa% z10W?c6;i3vn1cOy&myA^k6Iyr6)a_EMThej`C7FK{!v7l+=L3E2qc!PtMXHJR{R4f z@@s|~i++P4`vw}2E(JBr!?|~h_|k18R^!y26UiYOgPaGT<-$i042OOlpdpMG%Uvan z8CZSWD5@00#)toNQ^1%WI&~v=unxOh&Jw)_?+N4(qLZJ?m=U$S3lK5?Fonwz2+e{} z06t{ALr%`kS_ifhG65^fG4t~u5j2_!3{kBaoi$LN;s^jz`kLY|-(6^?Am$KQ=6wf;TaYrX1~aUfnqKGB#WGK{ZmvsURt}8>luSRs+)o=XcmeQ zKdnmAK08hPYj_O~v^;EpUBsANd@!iE?oWxY3r0RZr14m`*!^w~uEfC+<~&hxO#2;v zc02yoH^opUCvv&c!rElz&kFHhhfFCWiyNw3Aw(^+8BuB9j|Y?4G>T2@x{@)dX~z-;qGl zb#VDBzg8>)OgA7*>OA9i@|*PT3G2UahvjkbvNlL)j(8|ct#r$m{9^is^JdmoczCZ@ zO(U7A+@EMeEu33hW3sZzgk2sjlOAi3kEN)r>2D`}di_hBROYn_l7mN~vL`l9`b5#E zV!C>+%(dvJmRX^8eI-#jcFYMz4#3h)X-3%`$wUrNaLgor@acd%qkJ+Zhui`ZUxZkq zC3C3khK9zkYqb}5iJW3BNUb^SW~iL>aKSL14|*b(kcFI`10t6Qf|ep(6byv z-@pPt`#>q4R>5vC(L48}-_Id@zbJSjhCSSgC_rYqp(Hsz%mPiE!HF`k}8x8KVq@P@11A=+$hYtlvrta7%M6H1WlABm4N>UC%pMyUqZ^lE>)|J zbt;!HZl<0VKRvB5uk?^&fIn8o)YgI+k+**$H8K^p@|b8(Ew!rELLxfvSjjU=={EYy z&B#5gEQiSv!6Or?c5img;FcATp0UJ*dJ#<(CIZ`3$ zu?#U2+uG08)iy_c^TsRX9sMJxC3pdlBV4@H?n3|+;iNViKcDwe*w?2#{2A7E>YoW#lNL!Tgi@u8~7^MWJUrb{ZXn<=L&uT8vt@;rny^G?5t3+Cl(~6C_D|(u~Hqz z8U(tlt8L)tUFBP8-_;yL5F8~3EL7|;$E{RGddYh?@3|z?k-2n8!O#HjQ9f8(HY0z! zOepGS=yBVGOS!u^8slJy)j6qMAqyEa8Xxhej5t^M*PcCm4sw^cjJIW~m@d4Y(Do2; z8%j2l%V-a7kN#Co0N~GcZz`IVf6<8?(HTbg9m5)yR7a{XrF}P(LC&V5-q*ta?YAt# z%r)O0Sw4n-)ew^SjB+WUS#(K6(qttVS0XBaU7$R% zw(yRSeIj#afjUDsz@NnK@Vof^+A&WB5C@W%pcru&fK3Kdfvg7beNgzIuGDZrpUB=Q zy9TeItIna{z_tpnuzWuMd?IhLJc$8mcQJtQ1btF;dG|7azL9;9b+KQk0&Nm+g6uvr znhbgm5CFX)Q6L$qh(a>@4TB~9{1Bsx?WF}V(MSOAEWjem%`{8A2af4 zmm=sYA7k^eDj?Vb0%g)`8^iY@8H4I#M1|lOzy)~%KY#^_WNZX&3u;E(vOQP@BG4xX z@(OxJ=%Prb0M5|uVmL58!1CeO`66(?&NE3&&IEn~zlHUwWUd792zSNXN`-qGY8!vU z-y%rj|9YeXmPtlTx&&gxp#yTZZ3WsGU5C9QXhQw7kAEl)@&Wc}-=)2+1^mXo z_6hP-Au4R2oWB`FGDHMcn(?8nbm4jdxrR7wU8B2(<=<4;bV&mLs2>&m-7e~t{&DRS zSgY_f?*9^V#rYR$^MArzv2gwu<_f^U{@*ZHoL{2 znHm3rsQ$lA%$%(MOCuZ0Umk!F@V_MgVH*JW>(t-$58&x3;|06t!h2u-Zf8vwaSpkgy z1D~{}?y95keWvo{k(?!2Bi1j?e~fX@M}lJ?22@JC2hA4<7^No~2}Djr4guL;M3V<( zB%2tfv}`B%h%_tE2ZW{~q{@ZxjJh@F_r=Lhcq@&;#^Y&5GSY9am%+!y$B>hYMPo-t zMaTJ60V$Daafh3*)TLZ!3#WB>5e>hUkdo(kSQwf4PKh`+A8}SCI#mO2@*1v)qRDZQ z1AsmHSUUgt^oTg|VCNqpgz@%+0?z(Ic6efJ10prMvVs=7hvg_l?EwvwLN7p372hBv zlQ%}2b8&K~$uW0i#~piHr(m4hIbcyyk-pPX6hy99qD`B()9(29QeV|~6N2E6hv)fF zYHRnW3V0C=>D_ndMWu<#iS~A|bFt}+T8nN+Sd3?8QJqV&cZcN z-pJHV5z`@Fp7fd0?T=8^2I?8I`czlfH0PBO*4!?6u zVdiIg6@EnO$lNmOaXZP21<$3MnNU>4InAo2{P8T1XHuMg)noJ=u^N+VOI(mc5H0Kb zgIWhdal?F`bHNR3?Y>u^j8(-Po;DYsqqvrl2GZHKX1tT<)gTcZ?;ACxhA$2=UzIr2#~ z*zQp(Fc;6+qTM3k<7WdYRugD_@M~j!Pnb>YSmqZH#v6sTJ(hJ-bV=`CWr=>Xp?hRJ z!KEN56qAPF2XXD@)iS{};Ve6Z3mS!2x^0a*_gn#vNt}PyyV-*QTWVAT5^=X>{lVgC zQ1m~*&|u7~dyBUgVbg?Ck1W-!(zY?FAS&_m9ElaF|A?a%GvDi9ZKIjQ zx4(zn!0u~%^{wduBcXL2+H7D=3Bkwh$)P$?RdtGSz&Hf$D9DE2uK2NaD_<+#;Tj0v zP!2T{CcdSqO^4hPw%(dRJ+&3WcZ4Cg5~{v-l@juwg1o`q%uP-jmbby_aqVel97ET8 z!I4%Zp$pI$dLm6DJloBtXYt{__fURUAtZ2L62jjFd5ATB6JHP0ze}H)Gb?-Qn3-X= z5k5I;&(dexJ0LVE>VYZV6E#O0?4#^Wx3!PRlODn{ogtZ}YBmGUxk5->WtUfI# zs%blWbaGZ8(6TFd$#rGLxo1Xw!_l@6lJJY*NAJ_UfT=_V&^xbi?uZ+XtmKOc`c z#^JR`&X{j8PYu7f#_Ty8$Jh&J9{_n!Hn%#r5|!W@K928vafU7!W(Zr zGJIO-ctU9i-H%HoF$0ReHntIEI&QVi(LJjG-?%~~+~BwYJ;A&2!f68epqLiE-y>dG z{vQBKK(xR7J}7^R521f5&cW512h0Bl4`|=QR+d!7LCdZ57C7_(B!55e<^L!;m9aoM zus?o-f7iO#U|nFZm*o%hc!`P!5<~pFY0cX|;Q{^xa!$tiw#kFMh4da*`7Y?YY`4($ zDsSXQRqumT%lGd=t9-B@wU=jTiF%(49le$QKwDr*fFcQ}4Y{C7x)S{O5V8>g33v>g zm=6EIgmX9qcps;68(QTmTWAY^!RPoK^m`t^z(4S(oFS^fH81ogk23faYCh$!_yA^n z9b9-AYn_1K@Mk*0SMwrJc!c(XMmJ>nE=XWBeFbUX3wWI#g8jIirvqLA?B$2}ql?^b z<${zH$>&rh55yw?rSv_0!2iK{{TWr#p2BW|h6i~QALO@qKkVRZklfwuf@UQ03@*@C z&>L#}Bm6Qy&ad)I0GEO+1x70z1P9u_UxZ=k4Q#zXe=D}VJAMw&z$(c*BX~RfR&0NB zw8bjrclc4#AlLYXG2DaW=o}EX5cW9^c66!2d4O3MFR>Vs-4(V~-gm=5Gv5!72K$_NJ?T*8rx~nZ_R&E+kQn0e-KYzl7~I_g6IdGL8MUTxxU>O#t}> zt!6;WFUy10^jGp$>+lPC&|3Uj-pWr{6?mQBt1@!n8?ER1OBe+$4Or8_`TH%A%%}Q6 z-Z+RRN^z^~=dIA;g^)KZew<*^AVTdup$|3sjFy3fz$6NbbX9xQzR<2k&k~ ze@GDn$=GcubY~E|G5USvxd6FFx|XEo^3U-3#o6Ru5#Ljk%$N7ZR*dl z_s=lS&ChTrepL|G+Y36gFuO&LgH*kb8U6R$)%;RGfim&dlZ!cn6L=tNIEi<_g+aIh z`ucYX2_6A&mVoQ2H|}bA)@yJMj{rP~2-e_MmM7A#SjEWGDJ&o{y^AE@kSw2Zi50lVT}k@-!~$W%lWa;0RPuEb98?>#gVp?7ar6iseMuhaPz4Va-CPf2f4n)phnyRk1HEm5kxtYz+8)<88+-l zYV~;7L95c&IK?N>1wZ>KJ}Khib#3J1+}-$AJA~3kEf;?IYml#(APXl^Q^@Zj-HQGv zxmn9KzU4n+R1bhWmHeF~IvyS@#`FdNxPyEv~V47SMyF$arxq3+vBh8<+rTe2Bg->*gYCL+7Eny zT(+581Yn-J-LqhU;}m!0$5Hv+0B!!3Rt_8j$h-<5N5Z3lb<1i)PjF7R$bwaP5V9J4 zvtdzXHZUt_Kv^lwp;{FqK8{i3=42lwQ3&|VnEJk_Jwh3?Z(3T3D z^D!Mq^c~Idu*L~0I-dhi{5&VnG5QvsQVbXImE4b=97carTCUN%Vz9V6~0akw6#|puvS`7c)lY5(aHwZL359S2TQfp zIENJ8ie66TWl7k?+eEzRfC!?LP9hfkL`4-xAPXOW&i|_@qHU}m@GINL-@oY92R-$6 zc`zPtAD3U|SqDAw_R$96-g^b9ywNw~zAJ;YpQW*!1fP@OXP$=iO{RWGSK>sYTECL# zC|PWPELEfbRGi65oWTIhZC2kO8!&neq+=jQAqwurvjG}Bg<{c@7XxO&J9g7Y@I&9B z_fa1Q*@@#49;>8hB*!9JKgZWAxPtSgWbwZsVMmnzkOArItA5QW#pyM-w=$T?58-}j zZ`s%cXj?Bm_Lrd@-C)b3)LkS!h!W&cC`lW>UBMpp#V%;uo2U4J4$uLdFLW1s zm%6$L{TIMDDOJ9A11# z)UC3ZK0$d9yoY3PB8NW)tN?tez)f-dI={$G7&V7?;MQ)&%BSJq+(e<&lcEsk{0A}4 zIar)`;hnt$_<%p-4{_`N73m8i2HxdQ?d7&rRvBvHyG_<;Jx zFf3I&dcZ;PDPA-Csv$9e}hN75o7;td`v%~Wf)HIJKXx^(6%^OtQFAkIO>ZV za22SRUj}8|+8;JVLOgJ%x;y$ChgvQ9PGzryPtfKr5Z#n6yp0IGS^mzcPAp$}@sR32Mjufyr>P$LoOAr9@rL+B9f zMPz_lKXwfK8hqOSD=>cnxt3oeyOSNINa~C@A(sZ@e2QV|%fZW;uoo+EqC4mXdy>5~ zh!g2?=^fJ#tG(KBrY`jNP!Z18-@g)(ufKodrTvXhe*vlhpPc&rsp^x%PZpl+ce3Z{ z$1nTU`d1$gp^HC)3nBT?u7mtxTYc)XhJ{mPlr1_YHm*Z_LSj;KO2<^W7jkw<&&bT` z+Rc?s-Fx)x)w>V%?bm;R3>0CHJczjp3WtvvIcjv#m1D+^D;_^#V#%b*Q%cLGmQSM@ zGb?^0p?9=D{YmkM23y zu5MkkGBeV1L< zXE;ZW%#rWTN>o&~si^SUQ8oP1K3;o;>Sn*Rrw2XfwCm~d_w=;(WSiYh?wo9Uq0{a? zQsA^V@zn99DBoS+EVFyhs`40BUZ=_tC_5Y&U@uIpDX@FF!d~bdzNDtUu%ZCdHH2C7 zo%z+)oNQ{ahM^dSk~hJ*pn(&Huqudz!rTTymIx5#O?DO(dXt<5k^--mURXKXTRgtB zupq_ZD9g$Aa(S^ZrxP!}V)B^$(mUF=rfBtriC5X>YkmD4cJJ2lrEOasGA%2^ z92hIohgZ}O$I@%S#G;9ItR_~Km3nywou*Lrb?>2EEP>? ztIR7ZWXt|wONU9ar7qagI=sRON#3OtzJu42(fTjS79U$!lk4U9|E0Ow-(ED)Su}oX zslBkiBEZ|Cl1twF?E_ld0wr&3eyNrs0ws~6sa6Q(wARk@r8L~Dr{iCU66)DaW(%ZJ z)v$fI*H$sopO#r2j^8+_$@oT&QrX2}0W!V0u1ntsUGjbjdExaM2-Y)1QOVT$dg~=^ z!(oBy>xVn-!|N;RE1QhESx&pnS-)G$&@$>56jlUJw8>~*o#Gw7rVN{?;ao_opkWP8 zzH@wohwq#?wRE=)rvA>7(ndIU`4z*;8oHpZbhjN=SJetxD=X!TUA|BeL(m(AMfFeF z?IEgDt-7jE?^R7qs?HLuW2$Nr{yLj~p$xT<2Ul}dlkRWv1bgeKv-s=k{JpaRy)9_5 z$(Cl4e^#Ix{g1R7`6Z=opCs*ACl)Uf!yXW%c!T zfD`jqO)mAPV855kWvc$E2^;#6vm@p%lSbZKHwzQgPphBmbijtBVitduL%v3KEK@V! z95!`?G7v)25@Wx%zj0C@PZP3SmF zYdgsR3T?f%njDyWMj)RV$k!t8hJ0Nhzgt_~I4CVDFBIJyO{ zp{7BWz zL|O|x3e;3j)(QamfIKY^BRrVHgBA~Ing=ixFhm=Imci&d7^z2dt3A5W%Z-)X;FTLQ zyKy{j9FLpKnj5KI>q|X>9$+!B0%*cK*%+4%y0WoCww6O(FqcEDK_r!?*#mi+SS^1~ z(K?CMjh)gwd7)w#6$2}P3xIWESEDH=DlZQGWZxdZalo0tTHqtV=YbX)>TmIciJ@Ys zHcpJwbVzsCoo;t;mG|lA&pW32^YG-}QF%9LUBRZV^axM`$z4HmS8O%-mIf3MolM#X zJPP~>C>fp!W@LgHnb=?^#%HQtA*$ckKm({jh%zz%rF~3lbQ-Wnn^|OS7HYEamW44{ z=$nPwkC3t&A=`_AYk~U$ZJm`ccUHpL8FO_8wLOpyRi!ATXidjNL>)&N%HbmE?O?Q@BleXr|V+jni>NBTbBcVA!g9#ILX5EULP#mB=Jh>5l& z=h=i#(IxS-Cw20x;B6>`VXyRF( z1Xsj|u84K6h{>*qey)hVu82Oah_0@Pyl5`tDHK7ksC1Z0d#kjwN>h1CV+4in<#KXZ zpaGn@%W+HE8Ap@OjcKj}^}m(-vq7@*#k8J|xoO${nhbx|#qqL^8E6teOJ;U? zvdwRrXPQ0cf#&Y!9CMaA)9f^-nd2-m7Mmr~5^k|tES3<9ZV?u;#5EbGJT4ij#)a5q z7NW~kS7n?0#X$wN@(yH+pwZ-w)rv&X#9>_I-CspTv+UjShSn7QywanXF7L3%gB5+Rn z`@6*e(XX&zx9BgkveMnwIx(Pdf~>dJ6_j1?ViIR6nxIeq?XguaoF6`=!gw z->;ME*Xfde4TBwp1q}{Iu+L!CXYi$c=3d%ouIe*4&`0z4akS}UK1B}I$6-EoS)We7 zp-=kH_G!b->S3<`<>B2lnvXZ+FO$Jig|o04Sm9m0q$W{1EB4)#&&LCCR7S z3NF{st@39ktCW*EJ6HKm5oUz| zSHMpj7H?ZHL`m}?N8-wqW}Wyc3PZ3Gj=(npD4TNfa`I#ov`jWd%9uFNl(=$`Bc++2 z3N+bJ9qk-OiG^1c;NQZ9fx>V6w@^NdW-Oeca`kWFqQyXYQ1Z`A77_N47p|;w8tk)B zmRVY4X|=V53(FRfI@N`XNzS)OCKsn~EiJ~(ys)hp(8BhQlnod85z{SP%;+UME)EEe z{8J?trXfjWU>5yzB7Fm;An&Bj!VONwM*;jq{!b6t?rSj&aRLUaB!K>>1aQAfOL&Yw zr`dE&{Y}RMsO!Ujrl-k6QK&yg8WWe2o9?9>>3y1He2ZEKJw{(sHVvd2!>4}3^YIFL zjQxLAKY-qozheov=F-1}aqPxDwe5T>6f<@+ta#rkQiU6%O6VCf;xJb zj&PY6EcO|9ssB4sjoO#!Ep|bmD&XNwK=0qtCfZG}&{6seonhuE&f+?LkB^zC<)H7N zG0K=_Tt|g8mWrtkt*M;Od19(IRokJRX!+E4%IJi-OK1r#rRB6%{lAhE^jG?jHDMJc zVv@FlQfRRH9}nxnvxmXSH|Zm`@D-fP9=@HQ6-#uj!wgg zvcvby#u;3R^E^UdV1L~>n}_nd!X>gb*27zTzCOkXqtwS{Tp1;*vc{Bg`J%|fhY1}P_cu*<`xl;^BW+p5sl)Q=F*PnQ}pLr zcKJH^8hu~;3}d_DHC{CitMl!Lb@Fin(`f+|OrF>aSm!l5P5-2GSR;hfK!92CdJX^pgrh-t3ZmTUKFyR^5pf9N(nTkoll(JSv2Lk+Vi^ndv7vXv+6-fesq`6y`MUm^Ls;dTztPibq!Xz?NHuAzJR0QR_t zt`U3qQJl*F=;IAs%v-cxw34p}HwMzx;y&su7KqM}=SlQE-^v}Jx#w{ZmXe7Bk2Q<=NUX+H$;(c7?WwccwRqgByc!8=p6$Z=6iwN+{Li-^+p(vhlJ0N z|MyW}t*_D->o?bh&T!lNLC-tVj*xeBM>kf@V zoBXY0Dt0-W=FqitJuL6<=~-$}zluzv85lQ*u15Vr+)&GDCG`IeS_2!fk)EJ;#53X% z#JqQk*TfQW6@5S-Xs>G?o=nH|yYyO`h?sah$71FFIHfdpIW{pcQJYeA6jZgETO)w55uBRbs??U<|6 z1-rKYg2zPX$*%8*K7DC?B0e#h)bHQpJWzmFfz+FG!iAI^ezZkrqY z#5Np(U0f_+t>Gc|q$GO?&sD|5WV=a!*O#1;mX^Vv`Ex{AA0uY|5}IM5t{$7|MMQVc zi4FAJT8p8U9z&rQS$Mhy{5#urxsT=4jzp}Yf8O$aH;1E}{PA4kqzRM)bUU=W;NSH#5h_n(s)msea&f;y|tnHeHOOm{z%86FvvWWILBjBCwFF_Gcv zPkH#eg)Df2Gb}OM8h*&vwC!mJ zAqnv|QwXTFT0u1Eje-aYN>1I@3|}%p?~jt+(;!%pdkM91LYPC8AocGT)AtII>6fyE z_?UQ6`?J)3yU=I&c61I;0<~}Q$Ze1F$U~qOGUj^`)WQSH*9YrkKt{QzS5kRe8X<0f z(pIiNX^AQi4YhPUN#&M=^62Qqa+}S<we+f&9oWGkpk+N1}&MJ{l zztkv9>N22se1DmIJ8nSkSczEwGh>SOg=s!SdcG$&G&G)*LbU-jFmyPN3M~(v7rKO( zhTdhlD|91282UIr9r_}@$glI8p~v|%{%7cq{GZT-uuu+b;x}H>nAI`o6zK!C1duFwgSLa^RYFE;( z?vul#3V`{v0sFpKg*}8T^XW@TYn-X%4u8t_b%dN(pcv3lnB%BxE6pUB55E~)8`0cb&?lU`n1Ugi*5;VN>!{U~TKF1OX9r|Uv}E|Fza zQSwTH(DQuMs=ihkR?!K2u(v;rqDyX9JJOSu=VfXRl^#s1a~ac1vOWM?TWMs6)HG zLHw#ihfEZ#(+bwfPNZ^XeOaXBZSA}Mq{r~Xy!_$ z4=z9bmZ?`}*`^`>2sRVFgRjINZ_*f!7ztG7&_NuhsKIEszlxT8FJe*k zl?8ZZk-MVBML`<~#yC-khg45k)Bzu5b?6Pcb;!j~QxCe!FRz&aJwPAq)8@2<>+B1G zbF8I4yLqDS$IY34dlAgjji{T?rq)14|sR+yWB5%-{k-1 z{fPgMcR0u5*KKu2kR926WY7TWBq`diHL|80dLJS%M*~1oLXB!#>WA|-heBMsA6~mz ztrT47x|OR~qLp$#bm}%w#S{p%nSA4N1IP*i;_@f$Qd_}naeg!aFRR%CfhA7i$M4;H z0<#Y-|M3jwg4iH~d(m(|LQf2$Mj)Ucwg#nvVks8q-K05QjOvg#dvq8psXBC%oDP6t zmdnutU0QqkT0v_c6l%mu9i=RV<}xyiS~Ez&Ym5vdjYLk(MkapgMW6LA`XEbt8OFW- z;p?6|^@$$ECrQWjt-IxtS=Xf**3OEvF1%&K?@uEhDsDaPm+zm_#BhvApZnyJX=}fS zBMh#dH-Bw=(QWlIjg^yk{A|XJC}X{jqYUvh86fqgJ5iPo5lYxB2Ll3H)_qUN@-qVM z;rihMopZUK@r1(RGYJ!7U?w6Q455X8(qtmdVa2JS{wCl;DG6mUIe;TU05qBtJf?o) zN}Yyg*O{^$1hfKCG$;eaIUo$@>2?%GP>PVG$ANO#pO86Xqvq&49+C3CcErdB+ZoKK z_T$dS2E#IF`d~ZTW?q@qE@gJ2fI+eI*{kg%S32L+2g4;;U`JTSNT&`@1(uCMlWFi3 z_{yV`gFatyve6E`fZN;BL$hG-siwqNzsGAg^w|hT!CvC+!7%dko!HOO%B8{I^@!bX z4MeO-X`E=zB#%q>CeKOUl>D9arua{hlCTpC*ok@6@rR<6n+e5)pbrM+FnAi`f06^@ zO)9uox5^cgv;j5F_rw3ATfG&VufibNH9#x}Nn+7fbmy7zSU>#RlZ=#!leQ5T9$Pa+ zLeU!SAMB~QFDClA{Rqpk3mX)g8}VLI44AC}Gs^0s6*Yc~tV4R#K7=As&;%dU9odLGR*Wc`5?0iK z;X}AUt-DI(c&dw>Mx9K~r7Ur@z?;$fhU(Xdag7#Z{ll;7HjEzV)iKK1k6yWqBuUCm zx+#@ZsT4nspT^JQ&*m@Wui}@-w)0zKf3^RW`=^t)Lo?M7vZxXr3&q2yhrS=aFnnR- zxw$1xnnb9f=tdmPt zelxT~Qtw*4WW&bOPo3LN@aLZM_T4vrvEu57|8)CR3pbn|p(W01a}PcKe)x}1-1_J> zSN`gIEhs8q86Gmdj-t{7E_>W+!nxampesdKEGFU^tHbF$(*xWd5AYz0;qcl$4q##+ zai-nI(u|E{9QFYeiIBK|i`Oa%A00-j_a1N1p{fBq2zR_jG~r-c>B?#@j6g@EZX_Z~ z;o3r!PzR0xy6N)4doh-nOhb=Qf{PO^DCSOKi|?%{&0_N^B)|*ajQ} z+Do<EJ&0>77>f28j*9)%aLuMn-XCN=B&Bd69R%D6hq4VwNi>;J8V#}tk^COiWT>1D z@k5XP=T9 z_u7rWe05yXdB;zd-m&4l^EY^Zb=hUVdU)Bghl#5T_bs^LuYbLv_r7AO?Zneozx?v* z)4Ip~W6}Cs&pvJ4x}k=}ci(-^kMF-9;UbT4(Tn^d4hpba&ooeEszC$U2V(;G#4Ea)HDl)bRzA+OpKnFe~T)FPjn)*>gsA6K(S(zvW66rmjPXpj`&<2_LGhP~CA%3uw>S_iH~A{&X49;eIU zA}lPTGd$yFNQ*h1vLYX8v?Cu$s1Z*LBNY#`B$l955>2{L6J^3^ek;gWa--OF7{P9!8t~PbuDL=hx zZktbJ9o|IYHQ4Mf-L~+Dciwr%_;U+k;{O4LFe!%eknq92;eaaGR5Nr8GPx(87<=1@DxA@*j}HS21yMr4l|k@>F-J!rZfw}wSBrQc-I zSu#CwqGYqg(vm&&NLxo4ao@?hQ?PZE%CU|qF;Ip`Y;4%nnQrKZIo&RJVi_Tp=}yD+ zQ}BIo40s-wVzIPFBo@iO!Gk@6n5ZFM%N#VaH;Mu*HxO9vH4=+KW0`i)V}!y<)vkEa zET*)i)~F>kRWn<7H|J*EjGMIN)Iz*!?Q8^MT<8UKlcyIro9&IT%Z%o9s-qElHK`Z4 zv#ws~D7qTq1k1$6T1;po05_7+M-G~l>Ith{sHbWa3m(?Z6`DsY#iQjCwpK0?Jgk9_ zmZ-@x5+9~{Qi{9yw%)frQ&TA*pt=9_Mu#xktfzF>X#@=V|a#(UMG+fQ13w%hIG z#fd+=;YX*jaW~A`N%E#e7e9XLIoHIbSoQHMhqnHD=-*QqkqN1l@x|bc<4#-xyCJyq zib;1Y9DJ5Ql)+<#d*Br_jyuDQ|8+MO0CER;9Y}#Jd_vdCELu^2N4h05g*(=FTzYb* zo9h;OeZA@K%;zau1F2Lx3kf1)WBQ4^b-}sDxxq=i?S#%G>vS@#Y-71-5D zlPNixN?T3Fl*Ljo2!?DWG7@i03BpWH5O_|OI5rZ%Q^y2B@Ur0AplNpy29y3^FyNOX zexEO$N-2Jy+wb>rEUOS1q^&ZsXw+t<08}(O8_W{ftX0aSRUfbVB*HfUXM;5C(A_E3 zuhZ5lU?J@f`uF$`_(?=4(@!)JDw|Qc0oVap^83ZAovbkIrP$qpfi1l!R5^kPpp4J`?~6&=JGX z-!L_FeE8VdG;M{;+)R%TjSG*9S5xD)N%RzkvgV{vAncF(Q~q3(PHEJI%u})FbEe6m zW8>$AR)khJ-4MDbv^7MfDJ01?0Azun%o>C;)f94>qK&TRP(n_sLPDh!S;;py3lt$x z(Kzi0I&zMxW4fc)vDnez=!aM8$xIxe;3H^uE&D9Ho87}6U@fe#m}o?z9B&#OKonXk zOuew?6Bx|<>N|@)h8V{T7}?8^m`trIQZEi3DZUNNQetV&ZL{;L7Eie|85p-kGce61 zGazPHGZ2h1IndVw`}+EN&?C-956ch@bwH^bnhzuNF|Vc9o8bc|UeGb;_N#~fG^1wjtry+Wo4a-XjH^$>CMU|# zz}YR+mwzQ3b9S44K?goVKKwR$9QiP41#jyYWZWU_O_x=E=O&w(>9|9KRp4rNKeG{6KP;kHt=$i#TuqF@Dw!Fs+w|KiVn?-he37x$+!Ll~JUR6bb91Em24N z1`C=32FI!6J!V2#Q>j$s(2VKNwYXQ*Pl95S0^L_klC{6p>Ed03ED|7Eu1(1 znE9)km%qPqHyIp{P4bVRPxQ~|oTCLZC-hF9z3!=@f6njq2&^}EN>9{(%tODJ_0S~{ zfBgV|E1EnH#h#3y&Y_2YZd+x)id)66a$nHo9lkcPI=Lq0Kv^ykN(RFCkgfIR z#MUs;MR{e6w{~9=_Z3P9KZnVK%Zy4%wpwIo;PATx?lpF|l@+#&NPe5(t)}Q8{3;S}@n5l`6jK zXhLWcBBtFM| z!X3b*v^;gOShw8%L0m~Zh%*_})3+Z%TOG{?Yo$c|gV1X~lJ7mQwvTq|h-M5mZRCm3 zdA#`n*^x>+J6c;Du@XB{0vNleJ_AoCR^Vm->QrozJ_Ex{=i-^cd!bPWLsk%p(ooRI zV?$fUvenSrc;=;{X}!iXALF(cS!n~Z(o$rlBKVg+e}Ng&R)@wgvNh~iN|A`{FJ$PZ zU=z`#6^n8PrI9jDBb?;XSXP$QG)OW@BB{mWayk-Kr6P#OQ~)Go6{|#8sbV}6S3#Od zcc)Ehyx!?pEDE5?L{#7p`H61-M*nVuhnW2*u^|Qm<}zk2bATZksdQ)?j-%0(f)<~t z+XEMKabab!easd|uRb{33O(Oo1lV)*?o-_aE#GZ}TWi}=L;evP(00Xi8(#RqOOG_d z5q!aE`(_g$8(fAm$8wZ8+M%kqUK6?{MC6z%Go3LV>zEvyY435&jNNO$H};fez+ok$ z-l*zGMAcY1W+{WVwVLItACsJ|Js+^I{W)uj4uOp$-RFEPlsj_nMQEA0EGQ=1X z#K1Gm_V$jYms-)dUg|mm=6Y&4R~s-pkH|coHYCnI0_Nd^AU*scNTT1y;SaaQgoqFw z$v-Fo_4VKc#Ny17CF+UATi=)($w#&A5HuulE*c3ib8YL2%q`f_yYi)N7kf*-Ko_T zf-ht+e@2F~7MA5uSoWoxjVX|Wxnv=iYc9y?_6c~3p{v0vQPsMt)d^j4dre2!Em~bh z)I@|`NY*uk7B~J5-3S}CSYu;6CTrtMc&ZDu!d9)=+FB~g4Y7-hd4E(XxI`#NKVQlX_hB|NY5%MtCZ&8N5<-?lrWA?R7PX^V zr6@+#trX}dF4__fi`M3TIQz-agb8^tL2Vv@_k##=k?z&I^9%Az@+Oei^WAyVp8NsC z);e3Z!`UDNs<5oH6T>0w5rBaQuv2tR9e^{&=&>Od+uJ4Ppl?t_!#*G0M#pgAlMGbY zFIIi~4Zs*|H>k65Hm)7->>3GYWmdzdgCw9U?Ny)$T2Lc3qsE&-jk~d0D_YH2X})wP zz%LLFuOQ^U8%qwaJ@oW_C!936nD+L^E%QY z$QlPw7T^#2!VAVKyf+f+@B|E@L-UUccL+rEd7ed|ru$vzhY^VU z2CN5zNDn4?n&x=f5j1iz10vlKB9c@ik+>=cb4C`nHy6sy&84!Ovzv`ERUj$KOv-k@ zr}oE0NQ*&{5R-0E^tfezwy_2PTDL}M$%LjgCgg1Y@YQ-ih9DG>Wd#y$h+Cx<07X{Z zXbJ_dtlO2i8Vo8*Kvp3hPYne8tu2Jfqxy+#E>TuriVu_m!Qu_ti=&Gi%S=pH!;dm*s~zKs8kFftGz34%m= z`a)gcLnhKqD%1Iw`M3E`c#@aeeq9$=$K#mxNz8tcZOheudiv0?N7MR5W}nYEsDWoO z(;uvbJib&hS{Q>G5Fkgw^~IH!?p#S_Ma_IEvr`klodfj!{}BoFGJLKI{ut5EJ{W~x zKNvC+vk-pk*^wx5`+}jTne|4Be-XD+O1S+4?0{{5Fw%eRILR)>k7Aj_=SGfBT7zlg z)gv>%=|kkzNcfYNBd<=w#kxQd&>D~e#PbBSLyO-J1wUzL4KH&gIhTt?5ggZQ-h}93 zGTqpyrRBJdG;V1qm>L>L6C$T>V~ljT*Xu^X9aHc)5-!N$up-MbKLI(Y1pIE~PS6i{ zO^wGDH5NmO>Y^w7ZWSRx0Cja6wA*Zuk^>4vGD7zQkk;cRIz2tzn_iq=lYTpGN&B*d zN#XqXcAo3y7xQcQ13XFdke4#!emE*W`miQvYV{Nip~$`(t!S^)irP79Lw(e<0u3pY z0ic@=poZ}qd$V(lBJ}^7f_$Am8gL$tek-6C;L*@d5{m|JsA2am7S zWy2>(?^l(hD$Vbko*QE<1UL)n#j}uJbOH%}r4Rp(eoi8|eZoHR3+4;%pm0#KJTLr( z`3v{D@P_yg<{w;xkMVIHK@iF3x&P3Ic++jx8yt5N511dY-tBnN@*+iDNnB&Tmb%Qb zieKfqo>*_DS}ZM8!P@Q^#}v4NFixaWgyzUGaV{?8#PLMKQ}hmI6Ss-qHsH8ZK zF7qv(Ht_^{Dl>_r>=qm4xA>_fo!}E5q~Ih-QatS>L4y~GQ#Nihx#GC!90E;XBQS&W z-SGx#v#;x-`Vnz_gb8nF8pTbo@x2n`fvdzQaC>@?Piz%z0k+EZ4%=bJgP zD&S+YF1Nobh=N=dabrdBzL}QrQy=21xqtZe(XpMw<6q;ewSMLC)yY;p_;t1GLEYtG zs-BRO>);jCKzy)(m#WVCmB3fVQ+3p@BHnLzvU~@0p~exxy>C8!jQtqk?=>LB3s?pq z7vvg>1U_<%E3h1S)>WUZ+BLKbmUgZBc-6@tKmGWZu;HGkKPD#MKlIKWgD>mE0A=nLrRxog^kR}8%d_Y5sPGNOOK>clJJ ztv-In_b%x8{_S|(akcarwC)+u0`J%c!oxfD6GGt*&FvLC=9SLK|0Hi}(8lGb=I8om z=a+_-rY|U6Te>IpVE$$GwcsnEx7F7&pQtPnVEIYG$>9sq%Y&=azX;wLd?@`w=y&0L znp4?6{5h}!`WtO@q@)->W}{#zrG+h#Ogb9Of^uCSWPp;(;$_d`70+fVBt6tr3TwaM z0C5q>5F2$TKp#Y53h@9?q1q37wk`{-380Js8+H88ZFEOAMs`OIM92uHBs8ltFvlEV z2u5n1y6DKgq@KRLJ$ri?qxxrjOTj>VV~-Jq!iX$5d}ryuHGC_W_83>MKWz#+LIcAG z(aIm(qB%-J5Fx~-VknQIedMH2z5IkvPk%RwZxD{)>+!;<%bfgm=Kj@fZ!Euc?q%2N zc(ml!hZYZg_TD+0Pki9Qp)PB__qHJQCSQH+PXOe6~b zu(2K067N+OD}>^k?2hYsHLB{Ji<8TeYmyt1k0#AYY0_;2FnHK0#J&4b!mfR1tF}i~ z-=xx*LDo1uT|13fJAdk}eM=A@-hvp%kKTZ)ovu*`yt`39IXH5Tu6{75etHA5S^um4_cAI|A59 zuPb;@YQ>sUn@=hP*?^o_J%8=4RZaM*5Ab%?DZjjZ(S$P<&;R4>TL7b|&i&7snSH-z zXJ=-2_Bk{A&L-JBHX&g{b|5@_LC{J8C29cyQ5*14A6O07RcAPk z(=r!??q>Ig{^|Q?#`;U}%Mg|ESy<%xk`|+vZ5H>WSs2#z;|)8n$Ftc+fn|9iWEVuW z3Lip~z_J7d5^Umv#Qp@6NTf4~L{%oFW`K~zAWDvI51qi`+k49q0z zd^3Gpd`EqZ4=+L4yi_79oG4t~9j&%_hY8TO@ zva^Z*WwT|M^IIq_V<{`d<^0YA*taC!}MNBS5iw>jVkP| zj0kTwOvFocUlH4d%V-VlW8Nr6kw4|wW;z$zm~2+h={%8nxc2xXfr zF68m1n-$QUhIFIdQr$cN4{7JXn^VBrsL(cxg4bJ@Rnyh!yxpGSA7qt~37>EPSynWM zSa2yYs}z(@<$UE~WwWwdIjEQwe~b6dI>m_3cN-rz?lvAYGDc}!)vi(F2Q$-$4$si3 zUiz&sClF-2j$lhj_}U|rcB{K}4BkR$ODdtQ-N1yVfZXs=(1c#n@UcG5Tx%{Z@*%gn zv@pn{OLu`Vy2La5D|`mc{as2^nP-S*_KJiOoHVG13`=8=PLOkDUg4Z)_TTs9p+Ahj zxwEHd{?oFB^;(?^9-R5`)@69UdNKc#Q=eHpGF``340yWPd!JY`X<)yKK5 zE`QZS3x*C5)b$^3wlja$8B1oLk8yhqlKpHnYJ(sJV^2FgSXMSR%d@P9R~uhzgX{qn0 z7N(w1AB#N$ci5f{Z%^(q>@^=?-ZKvxJ~q2WrXDsJCfGV)r|s16_u(u9DA$7ZC6{HH%X zj9xe+6iMfFq?uLVXuo1b&I)qMztF1D#>>Kc@pqDkB8QZ}#y?J)VnR}!EKiS5PtKCN z;^!onx|T{8#cz@9B6i6y_waK)-xn^9FG_ylHyHgAEBMoFnv45?#y-H_>s#x8On3}k z8%5Btl?;|L`hNn=@~o+Z%y*MSc~bBK~S#Nnj!OCLmt8 zxhp{@q|BZQIU{W&tL|OPrytYPKGDCy(pvi{jY~(!7)zje1iL6@jBKpL$YLcsE2@H~ z96(U`MQjcsVP+XO-?Qt5-#6N4X-5!i$@3AvH!!W|t zaLP>H>&{HN7}78Ag?6k9*Q2|=0ape?_xt_rr&cYgqOgOxNnf_g5+74Fhkf`E8_0SC z0iRb5TSYZx>9Qg<=u0W+ej{~|RfP`&yNx&DGKb!XMee~hvmo?W$CVxyvIFq8zD!k5 znTNW(bbqje*hUC%Xhs@D{~yD8aB?VCUw8Tzv7`ijPBUl5CT3JGc7UqkPqxZ@62sNR z@JD@7b4(hsQ6p1aw8=O!JvVsEL%A}ggQ0X2bNBm~{qCA;es}qM_mcf(Z?C=g?YHk; z`!@5@@k_C7dHj`Y4qbKi!E0ZE@9HDD_r3Re@kpi!MhkU=V88=hu!>c zejhSL3@<5F8!LwB^dp1}%^uHpCV`zi= z$OI;x%)!)r{Y&w~C(irrM30m8v2~xXe7krMx?cG$w9b~^TC?VWA3pTR%k7OW$?awv zX2Za%&mhb3kCnG>+ITx&#rgw6x96adnFD*ZxMrVe=rP=AUs>O4-)i5Mc_DKkWA&Pm zTlNaes+L?WsE73f6tf)wwH5)80jOzyh(>NKrGj`@S_uKb$x>~N&uB4QRWuegYcr^Z zvVR{Lnrk&jR?viH!hV4fq^2u(z}HJOrs;%A*2W$tkg^SjE`~_*-554(*BDx?vnmrn z0Evn-HzMs8}GPkRiohJ&7S*~ z{O~Gx3o*2gp=o93j@p68;|)t66wM;Xd1>z@Q*O|48wGw`yq>upjm#uygki0I3crk} z-c#O;f1(V=k1NMw#*5RJ)-1>_XuQ^OU3z)rZRwuIhtjJXH>7(TcZQvm8C!$-#6VaK z2D3$_KsZzHlUc8fWa$jAsaIrcMgeOQCUc%LLL*FtWGGv$tfkko#X`F**j?Lf*@v7p ze^af}6TK_i8{HCRc1QO`4@HkgnW&Vj`oRfXvwpN)N29PrwHiH4QS8cAtUE1D=57vm;(Xdfzpkw3$n?@Fgc$1Tgj^=QW zYi`0;glfuhjSVMcgRRu(zL;;>yy=88_V?4SN{XxAdg}P`r`}q%_x9Ugd+qky_foIi zPb|icvnN%bmm*xGGfu6V`1KA5`}-j%o_^2kZ>+iJjW>`k%tE?wDbj@&c$rqS-hW)C z7%0Gn#w(3?!F#A)_$ajn_EFZyjK45#GxVEYGQDj&=r{SzZZEOhE|S4Y(iz`ypjPW!<~_5n6BM59V3pSWo5lN$Vg zl~IIFmDlm%@UL)YFvRQlZhvVVA1Ng34;W0wc)%bLap4L`rRiFOH0H6+tB*Q;0TszQOS+-2m#Y>u!Lj;om*vBhK7upW|gxgZrI# zif4ZPS%sxSSO(jrZN=;97V^tN;9)Jp;<6b5j&eha+}} z913+ZkdeYWVL$vG@QntH2)V5slp7i>d@(f21jd=DXadB)eB>8b(z6W>%}vz7>sA&W zc!`jjHfPR+vx}dT8(_KkC-~P7eN8lf!NqsgM2O7CYpf8TkS^qw@=K$(MIIRSG<&EF-|rzyr8qEO8TgF-%FOysK@ z^EEZq)s!vIxq&$kDJzd%XiIk#M(>ZuW;N}Ey&#T`IF{vla+I8_%UzJ8bJ!Y%#(B`( zk7l1`mL3bmT4YNd+Q9RW(IPePf)4>)T47-&wF#Go!`yKaOTy_hs5PJXs-i z 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 Iv%)gHZLA{#$J?m}J--8F!cb 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

@%?wo^ey-D3uiof>)8ZCAc3l}gn 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�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%0A)v<%6Nj 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

^8 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≠`r% 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 z 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

=1hW7CL+e zIb*Ez16T1MgJARkn|V-4!faA8cN6p=00tOF+`dje_p;Qt`l%8^?j@IfW^<&=1c=@c zil;8{nO9u;IV(OTnOnigKy7pdW{ z^8!1^GoN{8I?XL`^araYSJvTZFc%+vA!X(TV!lAk6;lhv)RGW+))krF5uNLf%#>ob zFSf?IE|iaK(!{fYC!JCn9G&foEePJ57@}H5sZgOp#SZ}kR-Ty1(hCX?lc8p%aN9Qw zL!_HI9lBqT?#AS@6ioP0O$+JoAm}-sWtKD4e5u4{HqWjRkvoXoUm$8Wz~`vnLLpP7us=Z zXLPkEGPgt4y3F)O7P~@I7R?r!A2fA$g{FI>%e|4Ml27j=Eoyh`avi}>$}640PlW9l zx;Z1p5K~iRvLmrvt%q6no4a8M;J}U`wHa^7bG$&W*Hi=-sP(x2a>Hx3nKN1X(aTKTL15gXBLcR*puH~|xyT7qEH_>bPF~g-t(3UPX_9AWih5iU@jhj^w+ata z4pw~6@Ne~oEgK&c==|ZsB=?v}zoUg$DdvI8v*SB|bQM1cX~L3$^9;-*n`SRsNV5a! zI*puaftxW1^dg;C!MQ`|K1IX=LvVSmxm15t%Y(Tg=P`8ONpv6xHOS}&kUg)kdl$j) z{qgTt0~&z@WymHx(*W{7sO610u4ahw(zrHY6Q@YE48D2&RxQ ziG-BWq%1;R$BqZH^KZzs=<)#yS}rs}qK#{Cxp&V5iL7z`VY5)8Y;=32JWMXS0X!KB4IWn%`YY6cgt_vXWQLE{X-#PHbctK zSK4Fqnq&g=jLmmO=cLEp#J7a~D7?+0qzV-(RH&!~41=Ki zXsIYkmc+=FMC2EvPN~&J{Pw*~)M_EMAU7={=9{T+WN@USnnu0}(>L!v+zNb5*D+&pt#Lnm%<2YNnjYpqnT^F1EuadSyTHrL} zvChzRU-WBFcu9)B$XZ`y-EU|we`X$2TYG$=BfcV=!^Gyh5?`C6pOT(IF7&vN_`-%B z`)zv=cuNo-_M9j(|5CbsZ*(e5&8L%7Hd78@RsMAfZ02l915?GrbKYH zqjFs{H&M;QOmO_9+f&qLr1$k>Ur7Lbe|@}5QicmPKFQCWwHLMRO}ok*9j z5z||*+*9!%hEQx^TONkJ3V^|Ep;+-DpM6oo!*JPW(xcuW|NFT-ZRz|NpLxNhpO=Hr zyrzW*24fT|x$lNzr?~8UE<46#+xx~P16=L(^R5EoJ!y8ubLYv1oYqehKX!YetknH-BD{(L5)h)B7 zjO)F_u~pHp*T*R8HCr<2t>R&r@t}8r4qnX0pJn2Y#pqqPrMc!5Zr2`$n&8Y*(!SL2#$F!|yuivhC2~8Z|5qcE`R7uB)|g6~Z*AJTzm7G3&XzEB4PF;e~SaM%Ienr{%IE z7y>Rsp(!%io%~08e1UMD;et1?wTW12POY@0))SsVuvu(n(o<>TQ=VGRl5=vT zq?qT3QJ?=vGWo#gJ8U+mE8mRWQpho1>hv&65#Nc1e?Oy%64SG+OvQ{>#CwjP^!oNU z+$9h?%!(5XKU&Yj1cFBz?xNyX0f)4EkbOhw$aVA<3-JLcxEI;C1L?I^lp0ZR@-VVL z3CqGQ8cIC`H(z1*+mNF2TMPmr$j`!5xs}OJAPR;0k-jdZ?L2zsDtd7kobN|F?cc3I zP@zJ_-wGkvs~GK?A=4hDvj=I_L$y|=I!F_Sy^1zQfXTaHP};JlvI&DQALN!^xKh-kdP6*xm$M^_^?TIicLDnY1H3RsW#V0g9Z&6zDHmdQ#uj7nU3E}MsNAuJ8`^L0s;es*_g1Jx$3SSJ(vt$ZDQAo zso8bHB(t1NjG0PAw^1Kv>E}h^mmIf{=a-7&ZxR2AKce@J4x0|&+^9>MZAdSm+o=CX zPx-CwZHdM9WwdN#$qHEas5IxSf#F_KHqW=j>p3j0YE zrX=~ZB+e+xq9{)L{hOLR1~MonUo;4dd2Xu0!{me+HvKYA55?k_oX)1|FHx@#WZ0LY zG*QFDplvX8&}536OtG45Rgbq@%zoUKhe5-P|Mg4M@E2hO#%{bfixtr9rW@l|@{#n#6*KHxd8njBqk!5eGlL>6G~!dlz0=KARv zI-m!*YlLOOAb1g;9f0R<66YS0mlBw^jHN-tw+o`A9993g8#r$f>aW;U`hgn&=>zV1 z;oKa?-6DS213Pelqd<-Qz+0Wog8G(yc<*`Ge}lMu6z;1?^6G*9Ab#*Zd~gUqROxe2 zmqG!$1M7}}s7B6w-yrp_1b3OwJ>1H}+~uCZvUhf(dVN9yun#=PF1>Xrmy4TbtSZbTG6sai3@crbWWhz+-K zbFJ)5D?43|c7DEMLc*va2{V!~=W@3F>2pRPNmn}YEGsTn@i5bh zxDXAUtH}MKA!{Ky-IQ6akT6Z@6@`AsxKDIMKklU0dg*1f+T7G}m{-olxi zbRoAn=e0DLNmaa84_(dSSAFzScYL}Wz0_i3=$R3&TUwL2E$h3ri~6#YTHQ&lp&KdZ z38zsI{kK|TLCnjf~S;u$e`_XOAS!3c^GsL~$C0#j>g8;<7j7*oh|Tmj-dEL0C}uDN+0= zN|UlOCn>Y&MkM+JL2RZjczru%Wk!@fR`D?J1vEYpUva`uobWtG{b07HDq49EniJ_e zC2ij7!OVM68LL;N)9^0@gQW|w#Sb=r6aprlhXbeJ86WV+u-G+t{URKQ168F5O_a(r zsnU(j;ffcye<)3qvQ=eGWfZXNBY67(9L{02-(wt$UL`IJ!HYDuS!*w1>@8y81b$G$ z(>a{0x5L(;LBqELA8?(9`;%C#{;4DuPh;x_yIG9CLkzUwxq3xkC$QT~bx8)GKLron zB?g79=4%Kc5V%GR+#!aJz40;{<-{HvZ#YY`b@ zUiGd1QH|_}x8?LWsq<8|!gZJt1+2S> z05y>#mt{utiOGC&it?SQaMym%?gGDB;bF4uOoRAOkF&e{vb25g&iKL}>dS6wtvfp9 z)MsiAOW+p2qbK4y?6$5O=aJB4`6+=#8(UZQQmeXSPoH|l$0$gG-wDEjhz$3QAwT@Y4#zh_f~eXSUFyLFUaKz>rp}ZAY~__v9mbbUSmYVUq={=Um&hu z*F88-Tz8bFGe%$}0g0wIR-iJ08H~LNZ{32!MXUi$e|F=2hw%OWI)P0zTO^Bv$0M_TCG~n_ualQj@D0dMa;Mz7pZXe!zg*Y26(ZX)v6tIjBsAB`P*Did= zeR%T*ywZpFIDli@bQdeI_2Xym;SV$(=5GRvl@3IDV~OK*`dl!&+vP3d_~!R+cS=I` zN!heo%srC|uax2&PQGuptWWkGPFc>sQ5AZtNEkW)HY402_3A&K)6*#CKk&J2co<)B z-9O^1`7pxEY9_>B2&6I(rFDszvQF;=C%m;TbUKS1|4LS- zWo5DypEB%on@y}~>2x(Q$)RNGZYp!1Vg_CAW|D9;XU6M!m^SWnz)?3wt50$N8Z72aBy=W|`YFXcj08`ajC4%{93yRpbj))s?(L6xPFRiVP{E`N zBwVMmp~v~q3pwy(%6*oE)yg?|$kxqzFABb)wEL{fSi3eu1d^yQr1j)Y{JY;;#78Uiu$R!6&*ZXKHkudgEi% z|7ZMz<)WlA57U-hDpI59R7u>CbR5q6?>7dYT@}|=;fB!M_ZLYb=cC`5*q1>&Z1}v{@f7$xrv_YNdMZI z{%2SEzZ;n;kENl~*lj5`sXWZmW?fQpIZuz-%>t}5RfN!#N<9Xi=aolLLNukiuaQFl-stn9J6|)|1Mfsh_*IA)@(B<1^ zm*Vs#R(QpUuT$J3pMMv=9T%tJUxg4BJwpr*>h7E*1_B_|fVCXMPv^1C|0Oh+X~9~1 zu|5*$S&+U1Z$5%Q7O{NkDHsC50Py{<^Bp^|S++}S(E*|hZ!6$gSgLq(0NVw4`VJhr z1_y2s=c`qGHE7WAZ36WJE?_s6dVVu79l`gW!VlLQMw@`a3tVNlH7Bs0BaZaL{rb8o z4?2Pq*fD_N0NVq1JS1*aM5xf?d+^>tc=;N*6Ug?eND+?Z9x2TNQxD1HO1f9GFw%YWV%?!ibsF+ZvGmjmv z#`<&i2X?ajGc-U#!SYXh{=Q1)@Yi6oi4=8-NnS@m(SvB{RsAf65gu=sAdX1NMA zCV8JpJqU(RkfaCvA>gFW`#WkgI?`jdq$}dRXb8&tu6HxPb~9hP=+$oKmmcOH8P7od zj@a+|Er!f(J5+suxoRG!7<{7fFd8&y_`czBbmY0uB`RjR>|qoS~u=a=&QazXeK_N)4?I^5hAezS-EWoLY` z9DArQ9g$IMNmT~NNtd;liQEdoo6DSSQQfFlODZudt%(J{O?4^CdT;bm zOMUUBK5BWVs@yUYvaBx+=%KS1e7qA~9pW?PWEgZ?@!ueDlZ|A&rh>~TS#(<@FCvaz zUDRSHHDBRjI;q7rYQ|^Ya)CAwUbLe{7qRJ+QutAO>erUUd^y@ut4;Kjc|#DMz^&=v z&9=;M&8gK=EH|VUl+0uz@hF*moJu|QdUsciSTK*LN0t}rd6-b>#I_%GByv_(K39`4 zrIeT{mV0e9#p~NcXy$~MqWpd<5A#NpM^l-*HFC;0H0cdNgCRuzu7iMve-&tu+yxJL zfX@TG1Mu1qynPB@umOhyI29~!1)IxEK@d2GA3BYnpaF&MHe$tl@YWT0$zCO;YXAlg zuwLM;PmBR2>CXBIS~Wr-a1oxl0k52grzMPSz~#{IS~6+SpyAtr9_aVteW&rGW!}{c zj80&$?+OCIa~d8x4)>OYWvsyB*`R1DKzp_0jThia3FFXH1uUmv5(LCfZ09f>K7=1a z9aIOt<0L#6$7gB7HfLz7l6n zy4<RZ1Ve`fd2G`!DLau!4R7m$gc>_tO)ht< z$Jbe%4_tXR5ZEIrA4GYi%)>~^2)gU>cKnsk0ga~8nMY-t>`DmIhYa^3=-t(lnP}(c zTG;6(_EQr#-NJrK1Wpn7=F*AJ(GDkwHg8~Gntvx`=VSDc%2{C$4W!$t`A&MJLtVR6ql;c`i_bU=eD%I0 zbpAdMg8>|k)l04!DizZcpYMw=v+lE)rVpb*gNE-K2GW;|-psKxC4HDBmVSmFDL-Y? z1^36t`k9rZ^k)>u==uJ{isU+0*_XgAZbwVRf5K&NCN}kQH;$|iC*yZH<~cfM$a|P5 z)%ECbYe!_XoD8$U!>n~h$84lJcndmrHL)v=nWaWmo_96Nd@$>&>SH=ha@v1Mi9A;# zPXe}1^oYyAc10(8aA zXxj3bcsyN#I9`fP9!8R<6UqAqV;I9~%Sj+K@#3rPc$g8Ee@ejLo0x0(H=vx*f+jmV z@%`uEU@O+?0luT~{Xh5BTCy&5`9#FfE#$ss^6Uv9}!a8oitGn@?ZFs{o-Oc^52iNpAHE8$` z0qRUF8(l;zUKoPsvY1fc4D}=yY<;442=2N;Tuj!{DX7muhtdHe0hrtH#(m;8>L@(G zlf|+QU}rI55Z<^3Z|}noSJ%%%wKvmx3=L|oON2g@QHF)W6E=I7Rc@o8(q{~&Ek@_0 z!Q~BfM(E=)x<44%qa(Lj_#;V=+uKH^2Ik_?*jw|N4+=ji z3LhnLLgqi(Y_(!;R;%ps^tfGJ9(RvkUn{YQVY)ayBqF`SH}4zjrq?PYOgVZI|BTxAuAi!&rd&s}k!QUBdc@I(fo-y+ z%CH;gV&Gv<>~k-*)D@eSeK$(&BodcVFFs6wg#VT zhu7IE@w-NSZRISE8whBt z7K}xYCF}?G(!cGdR?Brs`{>_VLO+qXRY$mF>UCpgv1GucdN4J!YfNCEqB(;uF6a+! z3DkI_{*-p?>y0n;sBTAP9%iO5zSt6eZPIPZUl^b#WNDAuc7!Z#B(%GYN?UBIi(2Z4 z&!H&a2wT^s>`B~_4?XWm{94wB>7T4vC!r(gKO(4QN1p^?svM#?%W)q~rb^ut;c~UI>>F90m*vl*IK_)&y!b&> zK1ta*Ntt80*B)NL{` zj4=?d$(kbp*@tx>#t$6A4_?GCc3^65fECyd;z!TGi`6Aa0T4PuoG#+6#P2SJYxp}L z5a|^QPr2-mta7IuT=uR|coI*Z!0`2d50iyT^TT59C8s>$l_!GoEF3=!;g+=|2#qFd zG#J?#W%}(dnIvo15jKEB!UPFxy*h3gq~2||q|BD2$;?!$Y--^4w3Y<)-qjXyE2B<# z@lSsgE_a)-t`EG0hf!663bJe*w zAxnEt?DJM0W~nLkoGb~>s8Ta^ojL0nP}5*aBuqKF=~dBxtJ1)(PZuMv+Tx$u;?r&M z898t-;~Q+J(RF0GgIR5(Kc~F|Dk)Tg(XDoJ!qJ~)Z4X?T@eyD^fPfE(H! H!F=9br5uy;vZNnNet7J75^U)h0HPCh2!MK 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 S(g=hy7yH(&JB@X@*#8gF8Xi;t diff --git a/docs_original/TreePerf.md b/docs_original/TreePerf.md deleted file mode 100755 index 2a918adcb..000000000 --- a/docs_original/TreePerf.md +++ /dev/null @@ -1,68 +0,0 @@ - - -# TreePerf - -TreePerf is a Python SDK that works in conjunction with the Trace2Tree project. PyTorch generates a trace JSON file during profiling, which Trace2Tree parses into a tree data structure representing hierarchical dependencies between CPU operations and GPU kernel executions. TreePerf builds on this tree structure to compute performance metrics at both the model and operation levels. It enables users to analyze, interpret, and optimize AI models by providing detailed performance insights essential for architectural design and performance optimization. - ---- -## Key Ideas - -Key Ideas -1. Tree Structure for GPU Execution Analysis: The hierarchical tree structure, generated by Trace2Tree, enables straightforward computation of GPU execution times. By linking CPU operations to their corresponding GPU kernel launches, it allows seamless aggregation of kernel execution times and performance metrics at various levels of granularity. -2. Performance Metrics from JSON Parsing: Metrics such as FLOPS and FLOPS/Byte are derived by extracting operation parameters from the JSON event data structure. These parameters are parsed and fed into performance models, enabling precise computation of performance metrics. - ---- - -## Key Featues - -1. **GPU timeline breakdown**: Provides a high-level view of activity of the GPU which includes busy time, idle time, communication time, etc -Example output: - -| type | time ms | percent | -|-------------------------------|--------------|------------| -| busy_time | 6521.458211 | 99.927717 | -| computation_time | 6318.257587 | 96.814092 | -| exposed_communication_time | 203.057890 | 3.111438 | -| exposed_memcpy_time | 0.142734 | 0.002187 | -| idle_time | 4.717306 | 0.072283 | -| total_time | 6526.175517 | 100.000000 | - - -2. **GPU compute time breakdown by CPU op**: Analyze the performance breakdown by examining the lowest-level CPU operations (from the call stack perspective) and the time they "induce" on the GPU. -Unlike traditional methods that directly look at CPU and GPU durations, this feature provides insight into how CPU operations translate into GPU kernel launches, offering a more stable and interpretable abstraction of performance. -Example output showing top 5 ops sorted by the total GPU time each op induces: - -| name | Count | total_direct_kernel_time_ms | Percentage (%) | Cumulative Percentage (%) | -|------------------------------------------------------------|-------|-----------------------------|----------------|---------------------------| -| aten::mm | 126 | 5576.76 | 88.73 | 88.73 | -| flash_attn::_flash_attn_backward | 8 | 213.62 | 3.40 | 92.13 | -| flash_attn::_flash_attn_forward | 8 | 119.65 | 1.90 | 94.04 | -| aten::copy_ | 4 | 69.96 | 1.11 | 95.15 | -| triton_poi_fused_add_fill_mul_sigmoid_silu_sub_0 | 8 | 43.19 | 0.69 | 95.84 | - - -3. **Roofline metrics** - Example output for aten::mm showing top 5 param combos sorted by the total GPU time each param combo induces: - -| name | param: M | param: N | param: K | param: bias | FLOPS/Byte_first | TFLOPS/s_mean | -|---------|----------|----------|----------|-------------|------------------|---------------| -| aten::mm | 73728 | 28672 | 8192 | False | 5864.73 | 698.19 | -| aten::mm | 73728 | 8192 | 28672 | False | 5864.73 | 719.59 | -| aten::mm | 28672 | 8192 | 73728 | False | 5864.73 | 740.51 | -| aten::mm | 73728 | 128256 | 8192 | False | 6972.01 | 628.10 | -| aten::mm | 8192 | 28672 | 73728 | False | 5864.73 | 599.95 | - -- Adding new operations is simple (Contributions are welcome!): - - perf_model.py - - Parse operation shapes from the JSON trace - - Write the performance model (FLOPS, bytes) or reuse an existing one - - torch_op_mapping.py: Map the operation to the perf model here - -For more details and walkthrough checkout the base_example.ipynb notebook -**Replace the profile path in base_example.ipynb by your profile file and get insights instantly!** - -Once you are familiar with the workflows you can directly use or modify the **generate_perf_report.py** script to generate a report excel sheet quickly. \ No newline at end of file diff --git a/docs_original/compare_perf_reports_pytorch.md b/docs_original/compare_perf_reports_pytorch.md deleted file mode 100644 index 062c046c2..000000000 --- a/docs_original/compare_perf_reports_pytorch.md +++ /dev/null @@ -1,92 +0,0 @@ - - -## Compare TraceLens Performance Reports - -This Python script (`TraceLens/Reporting/compare_perf_reports_pytorch.py`) compares multiple performance reports generated by `generate_perf_report_pytorch.py`. - - ---- - -### 1 . What It Takes In - -| Input | Description | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------- | -| `*.xlsx` files | TraceLens reports you want to compare. Provide **at least two**. | -| Optional `--names` | Human-readable tags for each report. If omitted, the script falls back to the base filenames (handy, but sometimes messy). | - ---- - -### 2 . How to Call It - -```bash -python compare_perf_reports.py \ - baseline.xlsx \ - candidate.xlsx \ - --names baseline candidate \ - --sheets all \ - -o comparison.xlsx -``` - -Alternatively, you can call the entry point directly after installing TraceLens, which avoids needing to know the script's path: -```bash -TraceLens_compare_perf_reports_pytorch \ - baseline.xlsx \ - candidate.xlsx \ - --names baseline candidate \ - --sheets all \ - -o comparison.xlsx -``` - - -Common flags: - -| Flag | Default | Purpose | -| -------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `-o, --output` | `comparison.xlsx` | Name of the merged workbook. | -| `--names` | `` | Custom tags (must match the number of reports). | -| `--sheets` | `all` | Limit processing to a subset:
`gpu_timeline`, `ops_summary`, `kernel_summary`, `ops_all`, `roofline`, or `all`. | - ---- - -### 3 . What Comes Out - -The script writes **one workbook** (`comparison.xlsx` unless you override it) containing multiple sheets: - -| Sheet | When You Get It | What It Shows | -| ---------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `gpu_timeline` | `--sheets gpu_timeline` or `all` | End-to-end GPU activity by **type** (`compute`, `memcpy`, etc.) with per-report timings plus:
- `time ms___diff`
- `time ms___pct` | -| `ops_summary` | `--sheets ops_summary` or `all` | Per-op aggregates keyed on **`name`**. Sorted by the baseline's `total_direct_kernel_time_ms`. Unhelpful columns (e.g., cumulative %) are stripped from non-baseline reports. When comparing PyTorch traces, this sheet is generated. For rocprof traces without `ops_summary`, automatically falls back to `kernel_summary`. | -| `kernel_summary` | `--sheets kernel_summary` or `all` | Kernel-level summary for rocprof reports, keyed on **`name`**. Similar to `ops_summary` but uses rocprof-specific columns like `Total Kernel Time (ms)` and `Count`. When `--sheets all` is used with rocprof reports, this is generated automatically if `ops_summary` is not available. | -| `ops_all_*` | `--sheets ops_all` or `all` | Three sheets **per variant tag**:
• `ops_all_intersect_` – op instances present in both baseline and variant.
• `ops_all_only_baseline_` – ops only the baseline ran.
• `ops_all_only_variant_` – ops only the variant ran.
Columns irrelevant to a given view are hidden, not deleted. | -| `_*` | `--sheets roofline` or `all` | Same intersect / only\_\* breakdown for each roofline group:
`GEMM`, `SDPA_fwd`, `SDPA_bwd`, `CONV_fwd`, `CONV_bwd`, `UnaryElementwise`, `BinaryElementwise`. | - -Hidden columns stay in the file (for power users) but are invisible in Excel by default. - ---- - -### 4 . Diff Math - -For every metric you ask it to track (`diff_cols` in the code), the script computes: - -```text -metric___diff # variant - baseline -metric___pct # 100 * diff / baseline -``` ---- - -### 5 . Design Decisions You Should Know - -* **Outer merge, never inner** – if an op vanished, you’ll see it. -* **Baseline = first report** – choose wisely. -* **Column prefixing** – every metric becomes `::metric`, so you can safely concatenate arbitrary reports. -* **Sheet-specific pruning** – the script aggressively hides noise (e.g., median, UID) to keep the output readable. You can always unhide them in Excel if you need them. -* **Excel 31-char rule** – sheet names are truncated to fit; no data loss, just shorter labels. - ---- - -### 6 . Future Enhancements -1. Morphology-aware diffing – Understand the call stack tree and compare at lowest common call stack level. For example, if a baseline leaf op is 'cudnn_convolution' and the variant is 'miopen_convolution', the diff algorithm should recognize that lowest common level is 'convolution' and compare the two. \ No newline at end of file diff --git a/docs_original/conceptual/aimodels_gemms.md b/docs_original/conceptual/aimodels_gemms.md deleted file mode 100644 index 558457cb5..000000000 --- a/docs_original/conceptual/aimodels_gemms.md +++ /dev/null @@ -1,274 +0,0 @@ - - -## 📌 GEMMs in AI Workloads - -General Matrix Multiplications (GEMMs) are the **primary compute primitive** used in AI models. Efficient implementations of GEMMs are readily available through vendor-tuned libraries such as cuBLAS and hipBLAS. Therefore, whenever possible, the goal is to **reduce computation to a matrix multiply**. - -This document explains how **model-level parameters** like batch size, sequence length, and hidden dimension translate into GEMM shapes, and subsequently how these shapes map to specific **BLAS kernel calls**. - -By the end of this post, you should be equipped to understand the GEMM shapes, counts, and BLAS calls involved in **any AI model you encounter**. - ---- - -## From Model Dimensions to GEMM Shapes - -### Linear Layers in LLMs - -Let's begin by understanding how linear layers, such as the MLP **up projection**, correspond to GEMM calls. - -The input tensor shape for this operation is: -``` -X: [B, L, d_model] -``` -Here: -- `B` represents the batch size. -- `L` denotes the sequence length. -- `d_model` is the input (or hidden) dimension. - -This operation outputs a tensor with the shape: -``` -Y: [B, L, d_ff] -``` -The projection for each token can be expressed individually as: -``` -Y[b, l, :] = X[b, l, :] @ Wᵀ -``` -Where: -- `W` is the weight matrix with a shape of `[d_ff, d_model]`. - -### Flattening for GEMM - -To express this entire operation as a single GEMM, we flatten the batch and sequence dimensions of the input tensor: -``` -X_flat: [B·L, d_model] -Wᵀ:     [d_model, d_ff] -Y = X_flat @ Wᵀ -``` -This flattening yields the following GEMM shape parameters: -- `param: M = B·L` -- `param: N = d_ff` -- `param: K = d_model` - -Here, K represents the **inner or shared dimension** between the input tensors involved in the multiplication. - - -*** - -## Prefill vs Decode - -Let's now contrast the GEMM behavior during the **prefill** and **decode** phases of inference, focusing on how the sequence length (`L`) changes and affects the GEMM shapes. - -In both phases, the input tensor for an MLP computation within an LLM initially has a shape like: -``` -X: [B, L, d_model] -``` -Where `B` is the batch size, `L` is the sequence length, and `d_model` is the hidden size. This projects to an output shape of `[B, L, d_ff]`, where `d_ff` is the MLP's expansion size. - -As established earlier, to process this with a single GEMM, the batch and sequence dimensions of the input are flattened. The input effectively becomes `[B·L, d_model]` for the GEMM `X_flat @ Wᵀ`. - -The key difference between prefill and decode lies in the value of `L`: -- **Prefill Phase**: `L` is the actual input sequence length (which can be large). -- **Decode Phase**: `L` is always `1`, as the model processes one token at a time to generate the next. - -This difference in `L` directly impacts the `M` parameter of the GEMM `(M, N, K)`: - -### GEMM Shape Summary: -| Mode     | Input Shape (Conceptual) | Flattened Input Shape | GEMM Shape `(M, N, K)`              | Notes                                | -|----------|--------------------------|-----------------------|-------------------------------------|---------------------------------------| -| Prefill  | `[B, L, d_model]`        | `[B·L, d_model]`      | `(B·L, d_ff, d_model)`              | `L` is the prompt length            | -| Decode   | `[B, 1, d_model]`        | `[B·1, d_model]`      | `(B, d_ff, d_model)`                | `L=1` for generating one token at a time | - -Notice that in the decode phase, because `L=1`, the `M` parameter of the MLP GEMM becomes simply `B`. This means the computational cost of the MLP layers in decode remains constant per token regardless of the total sequence length generated so far. The dominant **O(L)** scaling cost during decode comes from the attention mechanism, not the MLPs. - -### Real-world Example: LLaMA-2 7B - -The table below shows actual data from **Tracelens** profiling, filtered specifically for MLP **up** and **gate** projection GEMMs in a LLaMA-2 7B model inference trace. - -For this trace: -- `d_model = 4096` -- `d_ff = 11008` -- Batch size: `1` (`B=1`) -- Input length (for prefill): `597` (`L=597`) -- The trace included 36 decode steps. - -| name     | param: M | param: N | param: K | param: bias | counts | -|----------|-----------|-----------|-----------|---------------|--------| -| aten::mm | 1         | 11008     | 4096      | FALSE         | 2304   | -| aten::mm | 597       | 11008     | 4096      | FALSE         | 64     | - -Interpreting these entries based on the `M` parameter: -- The entry with `param: M = 597` corresponds to the **prefill** phase GEMM `(B·L = 1·597)`, which happens once per layer at the beginning of inference. Since there are 32 layers, this GEMM is called `64` times (32 up + 32 gate). -- The entry with `param: M = 1` corresponds to the **decode** phase GEMM `(B = 1)`, where `L=1`. These occur at each decode step for every layer. With 36 decode steps and 64 GEMMs per step (32 layers * 2), this GEMM is called `36 × 64 = 2304` times. - ---- - -## 🔁 Backward Pass GEMMs - -Next, let's explore the backward pass during training. A forward pass GEMM operation like `Y = X @ Wᵀ + b` necessitates **two corresponding backward GEMMs** to compute gradients: - -```python -dX = dY @ W        # Gradient with respect to the input → resulting shape: [B·L, d_model] -dW = dYᵀ @ X       # Gradient with respect to the weight → resulting shape: [d_ff, d_model] -db = dY.sum(dim=0) # Gradient with respect to the bias   → resulting shape: [d_ff] -``` - -### GEMM Shapes: -| Operation         | GEMM Shape `(param: M, param: N, param: K)`       | Description                          | -|------------------|---------------------------------------------------|--------------------------------------| -| Forward          | `(B·L, d_ff, d_model)`                             | `X @ Wᵀ`                             | -| Backward dX      | `(B·L, d_model, d_ff)`                             | `dY @ W` (result of `[B·L, d_ff] @ [d_ff, d_model]`) | -| Backward dW      | `(d_ff, B·L, d_model)`                             | `dYᵀ @ X` (result of `[d_ff, B·L] @ [B·L, d_model]`) | - -Let's look closer at the backward GEMM shapes: -- For `dX = dY @ W`, the operation is `[B·L, d_ff] @ [d_ff, d_model]`, which results in a shape of `[B·L, d_model]`. -- For `dW = dYᵀ @ X`, the operation is `[d_ff, B·L] @ [B·L, d_model]`, yielding a shape of `[d_ff, d_model]`. - -### Real-world Example: GPT-3-XL - -This table presents data from a **Tracelens** of a single training step for **GPT-3-XL**. - -For this example: -- `d_model = 2048` -- `d_ff = 8192` -- Batch size: `5` -- Sequence length: `2048` -- Thus, `param: M` for the flattened dimension is `5 × 2048 = 10240`. - -| name        | param: M | param: N | param: K | count | -|-------------|-----------|-----------|-----------|--------| -| aten::addmm | 10240     | 8192      | 2048      | 24     | -| aten::mm    | 10240     | 2048      | 8192      | 24     | -| aten::mm    | 8192      | 2048      | 10240     | 24     | - -We can interpret each entry based on the GEMM shapes: -- The `aten::addmm` call represents the forward pass GEMM (`X @ Wᵀ`). -- The first `aten::mm` call corresponds to the backward pass for `dX` (`dY @ W`). -- The second `aten::mm` call represents the backward pass for `dW` (`dYᵀ @ X`). - -Each of these operations appears once per layer in the network. Given that GPT-3-XL has 24 layers, each of these GEMMs is called 24 times per training step, aligning with the 'count' column in the table. - ---- - - -## ⚙️ How PyTorch Calls BLAS - -To fully grasp how PyTorch leverages BLAS for operations like GEMM, we must first understand the fundamental concept of **memory layout** for tensors and how BLAS libraries interpret the data buffers they receive. - -### Memory Layout and Stride - -Despite tensors often being represented as multi-dimensional arrays, their elements are stored in linear memory. For a 2D matrix, the two primary storage conventions are: - -- **Row-major**: Elements of the same row are stored consecutively in memory. PyTorch adopts this as its default layout. -- **Column-major**: Elements of the same column are stored consecutively in memory. Many traditional BLAS libraries primarily optimize for this layout. - -PyTorch's `.stride()` method provides insight into a tensor's memory arrangement. It returns a tuple where each value indicates the byte (or element, depending on datatype size) distance in linear memory to move to the next element along that dimension. -- For a 2D tensor `T[i][j]` in **Row-major** layout, `.stride()` is typically `(num_cols, 1)`. Moving to `T[i][j+1]` requires stepping 1 element, while moving to `T[i+1][j]` requires stepping `num_cols` elements. -- For a 2D tensor `T[i][j]` in **Column-major** layout, `.stride()` is typically `(1, num_rows)`. Moving to `T[i+1][j]` requires stepping 1 element, while moving to `T[i][j+1]` requires stepping `num_rows` elements. - ---- - -### BLAS Transpose and Row-Major Output - -The core BLAS GEMM routine typically computes $C = \alpha \cdot op(A) \cdot op(B) + \beta \cdot C$, where $op(X)$ is either $X$ or $X^T$ depending on the `transA` and `transB` flags ('N' for No Transpose, 'T' for Transpose) passed to the function. By default, BLAS expects input matrices corresponding to the 'N' flag to be in column-major layout. Crucially, the resulting matrix $C$ is written into the output buffer in **column-major** format by default. - -PyTorch, however, uses row-major layout internally and desires the result of a GEMM operation to also be in row-major layout *without* an extra copy or transpose step outside of the BLAS call. PyTorch achieves this by cleverly leveraging the `trans` flags and the relationship between row-major and column-major layouts. - -A matrix $M$ stored in row-major memory has the exact same element ordering as the matrix $M^T$ stored in column-major memory. PyTorch uses this identity. To get a row-major result $C$ from a BLAS call that outputs in column-major, PyTorch requests BLAS to compute $C^T$ and write it in column-major. Since $C^T$ in column-major is $C$ in row-major, the output buffer will contain the desired row-major $C$. - -Mathematically, the operation $C = A @ B$ (where $A, B, C$ are desired in row-major) is equivalent to computing $C^T = (A @ B)^T = B^T @ A^T$. PyTorch therefore configures the BLAS call to compute $B^T @ A^T$ using the row-major data of $B$ and $A$. - -Here's how the `transA` and `transB` flags work in this context when passing **row-major data** to BLAS via a wrapper like PyTorch's: -- Passing row-major data for matrix $M$ with `trans = 'T'` tells BLAS to mathematically treat this data as $M$. (BLAS expects row-major data for 'T' if it wants to use the matrix directly). -- Passing row-major data for matrix $M$ with `trans = 'N'` tells BLAS to mathematically treat this data as $M^T$. (BLAS expects column-major data for 'N'; giving it row-major data makes it see the transpose). - -So, to compute $C^T = B^T @ A^T$ using row-major data for $B$ and $A$ and get $C$ row-major in the output buffer: -- Pass $B$'s row-major data as the first operand data (`A_data` in BLAS call). To make BLAS see $B^T$, use `transA = 'N'`. -- Pass $A$'s row-major data as the second operand data (`B_data` in BLAS call). To make BLAS see $A^T$, use `transB = 'N'`. -- The BLAS call becomes `gemm(transA='N', transB='N', ..., B_data, ..., A_data, ...)`. This computes $B^T @ A^T = C^T$. The result $C^T$ is written in column-major into the output buffer, which is precisely the desired $C$ in row-major. - -This standard trick using `transA='N'` and `transB='N'` with swapped, row-major inputs is a common way PyTorch achieves row-major output for a general matrix multiply `C = A @ B` where A, B are row-major. - ---- - - -### Linear Layer: `Y = X @ Wᵀ` - -For a linear layer computation `Y = X @ Wᵀ`, where `X` (`[M, K]`) and `W` (`[N, K]`) are in row-major layout, PyTorch desires `Y` (`[M, N]`) also in row-major. To achieve this with a BLAS routine outputting column-major, PyTorch configures BLAS to compute $Y^T = W @ X^T$. - -This involves a BLAS call computing $op(A) @ op(B)$ where $op(A)$ is $W$ and $op(B)$ is $X^T$. Using the rule that row-major data with `trans='T'` yields the matrix ($M$) and `trans='N'` yields the transpose ($M^T$): -- BLAS operand A uses $W$'s row-major data. To see $W$, `transA = 'T'`. -- BLAS operand B uses $X$'s row-major data. To see $X^T$, `transB = 'N'`. - -The BLAS call uses `(transA='T', transB='N')` with $W$'s data as the first operand and $X$'s data as the second. It computes $W @ X^T = Y^T$, writing the result in column-major, which PyTorch interprets as the desired row-major $Y$. - -### Backward Pass Operations: - -The backward pass similarly uses GEMMs configured to produce row-major gradients: - -- **`dX = dY @ W`**: With `dY` (`[M, K]`) and `W` (`[K, N]`) row-major, we need `dX` (`[M, N]`) row-major. BLAS computes $dX^T = W^T @ dY^T$. - - BLAS operand A uses $W$'s row-major data. Needs $W^T \implies$ `transA = 'N'`. - - BLAS operand B uses $dY$'s row-major data. Needs $dY^T \implies$ `transB = 'N'`. - - BLAS call uses `(transA='N', transB='N')` on $W$'s and $dY$'s data, computing $W^T @ dY^T$. - -- **`dW = dYᵀ @ X`**: With `dY` (`[K, N]`) and `X` (`[K, M]`) row-major, we need `dW` (`[N, M]`) row-major. BLAS computes $dW^T = X^T @ dY$. - - BLAS operand A uses $X$'s row-major data. Needs $X^T \implies$ `transA = 'N'`. - - BLAS operand B uses $dY$'s row-major data. Needs $dY \implies$ `transB = 'T'`. - - BLAS call uses `(transA='N', transB='T')` on $X$'s and $dY$'s data, computing $X^T @ dY$. - -In summary, for PyTorch's row-major operations: -- Forward pass `Y = X @ Wᵀ` maps to BLAS calculating $W @ X^T$ using `(T, N)` flags on the row-major data of $W$ and $X$. -- Backward pass `dX = dY @ W` maps to BLAS calculating $W^T @ dY^T$ using `(N, N)` flags on the row-major data of $W$ and $dY$. -- Backward pass `dW = dYᵀ @ X` maps to BLAS calculating $X^T @ dY$ using `(N, T)` flags on the row-major data of $X$ and $dY$. - -Let’s revisit the GPT-3-XL model gemm table from **Tracelens**: - -| name        | param: M | param: N | param: K | param: bias | param: stride_A | param: stride_B | param: transpose | -|--------------|-----------|-----------|-----------|--------------|------------------|------------------|--------------------| -| aten::addmm  | 10240     | 8192      | 2048      | TRUE         | (2048, 1)        | (1, 2048)        | (True, False)      | -| aten::mm     | 10240     | 2048      | 8192      | FALSE        | (8192, 1)        | (2048, 1)        | (False, False)     | -| aten::mm     | 8192      | 2048      | 10240     | FALSE        | (1, 8192)        | (2048, 1)        | (False, True)      | - -This table shows how `aten::addmm` (forward) and `aten::mm` (backward) calls map to underlying GEMM operations. The `param: M, N, K` values are likely the dimensions of the *PyTorch operation result* (`M x N` with inner dim `K`). The `param: transpose | (transA, transB)` are the BLAS flags used by the wrapper for the operands passed to the BLAS call. - -Let's interpret the trace entries based on our understanding that PyTorch uses row-major data and BLAS receives flags to mathematically interpret this data for computing the transpose of the desired result: - -1. **`aten::addmm` (Forward)**: Corresponds to `Y = X @ Wᵀ`. Trace flags: `(True, False)`. This matches the `(T, N)` needed for BLAS to compute $W @ X^T$. -2. **First `aten::mm` (Backward dX)**: Corresponds to `dX = dY @ W`. Trace flags: `(False, False)`. This matches the `(N, N)` needed for BLAS to compute $W^T @ dY^T$. - -3. **Second `aten::mm` (Backward dW)**: Corresponds to `dW = dYᵀ @ X`. Trace flags: `(False, True)`. This matches the `(N, T)` needed for BLAS to compute $X^T @ dY$. - - -This confirms how the trace flags correspond to the BLAS transpose configurations used with row-major input data to achieve row-major output via the $C^T = B^T A^T$ trick. - - -Lets summarize our understanding of the transpose flag by writing pseudo code for the logic: - -*(Note: This Python code snippet provides a simplified view; PyTorch's actual implementation is more intricate, accounting for the specific GEMM variant and output requirements.)* - - - -```python - -def is_col_major(T): -    return T.stride(0) == 1 and T.stride(1) >= T.shape[0] - -def get_blas_transpose_flags(A, B): -    transA = 'N' if is_col_major(A) else 'T' # If A is col-major, BLAS sees it as is ('N') -    transB = 'N' if is_col_major(B) else 'T' # If B is col-major, BLAS sees it as is ('N') -    return transA, transB - -``` - -## ⚠️ Edge Cases - - --   One common assumption is that flattening a tensor shape like `[B, L, d_model]` to `[B⋅L, d_model]` is a cost-free metadata operation. This is only true if the last dimension (`d_model`) is contiguous. - --   If the last dimension is not contiguous, PyTorch may be forced to insert a **copy** or **transpose** operation to create a physically contiguous tensor that BLAS can work with efficiently. - --   Furthermore, even if the tensor layout *could* theoretically be used by BLAS (e.g., certain striding patterns), some highly tuned BLAS libraries might lack kernels optimized for those specific layouts. In such instances, a **copy** or **transpose buffer** is inserted behind the scenes by PyTorch or the BLAS wrapper. Consequently, what the BLAS routine actually operates on might not be the original tensor directly, but rather a **temporary buffer** created for compatibility or performance. - diff --git a/docs_original/conceptual/shape_metadata_guide.md b/docs_original/conceptual/shape_metadata_guide.md deleted file mode 100644 index 55ccd80ae..000000000 --- a/docs_original/conceptual/shape_metadata_guide.md +++ /dev/null @@ -1,151 +0,0 @@ - - -# Tensor Shape Metadata in PyTorch Profiler Traces - -A practical guide to understanding when tensor shapes are available in profiler traces and how to get them when they're missing. - ---- - -## Part 1: When Do We Have Shapes? - -### The Simple Rule - -**Shapes are available when an operation goes through PyTorch's dispatcher as a `cpu_op`.** - -In profiler traces, look for events with: -- `"cat": "cpu_op"` -- `"args": { "Input Dims": [...], "Input type": [...] }` - -### What HAS Shapes - -| Operation Type | Example | Why It Works | -|---------------|---------|--------------| -| Native ATen ops | `aten::mm`, `aten::linear` | Built into PyTorch dispatcher | -| Registered custom ops | `torch.ops.mylib.my_op` | Registered via `torch.library` | -| TorchScript ops | JIT-compiled functions | Goes through dispatcher | -| Custom `autograd.Function` | User-defined forward | Forward call is dispatched | -| Distributed collectives | `record_param_comms` | Instrumented by PyTorch | - -### What DOESN'T Have Shapes - -| Operation Type | Example | Why It Fails | -|---------------|---------|--------------| -| Plain Python functions | `def my_kernel(x, y): ...` | Bypasses dispatcher | -| Triton kernels | `@triton.jit` | Called as Python function | -| FlashInfer ops | GEMM, MoE, Attention | Registration intentionally disabled | -| Backward engine events | `autograd::engine::evaluate_function:*Backward` | Empty inputs passed to profiler | - -### Quick Reference: Event Categories - -``` -cpu_op → Usually HAS shapes (exception: backward events) -python_function → NO shapes -kernel → NO shapes (GPU-side event) -cuda_runtime → NO shapes (API-level event) -``` - ---- - -## Part 2: How to Get Shapes When Missing - -### Option 1: Register as Custom Op - -Wrap the operation with `torch.library.custom_op`: - -```python -@torch.library.custom_op("mylib::triton_matmul", mutates_args=()) -def triton_matmul(a: torch.Tensor, b: torch.Tensor) -> torch.Tensor: - return my_triton_kernel(a, b) - -# Now call via torch.ops -result = torch.ops.mylib.triton_matmul(a, b) -``` - -**Result:** Event appears as `cpu_op` with `Input Dims`. - -**What is `mutates_args`?** - -Tells PyTorch which input arguments the function modifies in-place: -- `mutates_args=()` — No inputs are modified (pure function) -- `mutates_args=("output",)` — The `output` argument is modified in-place -- Required for correctness with `torch.compile` and autograd - -### Option 2: Lighter-Weight Registration (vLLM approach) - -Use the lower-level `Library` API directly: - -**Reference:** [vllm/utils/torch_utils.py:742 - `direct_register_custom_op`](https://github.com/vllm-project/vllm/blob/0b225fb7b22f8ae1f5fc8ee618640ae0983c76de/vllm/utils/torch_utils.py#L742-L780) - -```python -from torch.library import Library -from torch._library.infer_schema import infer_schema - -my_lib = Library("mylib", "FRAGMENT") - -def register_op(op_name, op_func, mutates_args=None): - schema = infer_schema(op_func, mutates_args=mutates_args or []) - my_lib.define(op_name + schema) - my_lib.impl(op_name, op_func, dispatch_key="CUDA") - -# Register -register_op("triton_matmul", triton_matmul_impl) -``` - -### Option 1 vs Option 2: When to Use Which? - -| Aspect | Option 1: `custom_op` | Option 2: `Library.define()` | -|--------|----------------------|------------------------------| -| **Simplicity** | ✅ Decorator, minimal code | ❌ More boilerplate | -| **Overhead** | Higher (full dispatcher) | Lower (direct to CUDA) | -| **torch.compile** | ✅ Full support | ✅ Works with `register_fake` | -| **Use when...** | Prototyping, one-off ops | Performance-critical paths | - ---- - -## Framework-Specific Status - -| Framework | Current State | How to Get Shapes | -|-----------|--------------|-------------------| -| **PyTorch ATen** | ✅ Has shapes | Already works | -| **vLLM (standard)** | ✅ Has shapes | Uses `direct_register_custom_op` | -| **vLLM (OAI Triton)** | ❌ Missing | Needs registration | -| **FlashInfer** | ❌ Disabled | Set `FLASHINFER_ENABLE_PROFILER_METADATA=1` (proposed) | -| **SGLang (CUDA)** | ✅ Has shapes | Uses `torch.ops.sgl_kernel.*` | -| **SGLang (Triton)** | ❌ Missing | Needs registration | - ---- - -## Summary - -1. **Shapes are tied to dispatcher registration** — If it's a `cpu_op`, it has shapes -2. **The fix is straightforward** — Register operations via `torch.library` -3. **Start simple** — Use `@torch.library.custom_op` first -4. **Optimize if needed** — Switch to `Library.define()` for lower overhead -5. **FlashInfer disabled it on purpose** — Performance vs. observability trade-off; can be re-enabled - ---- - -## Appendix - -### A1: Backward Events and Sequence Number Linking - -Backward engine events (`autograd::engine::evaluate_function:*Backward`) are `cpu_op` but don't have `Input Dims`. They have `Sequence number` instead, which links to the corresponding forward op. - -```python -def get_backward_shapes(trace_events, backward_event): - seq_num = backward_event["args"].get("Sequence number") - if seq_num is None: - return None - - # Find forward op with same sequence number - for event in trace_events: - if event.get("cat") == "cpu_op" and \ - event["args"].get("Sequence number") == seq_num and \ - "Backward" not in event.get("name", ""): - return event["args"].get("Input Dims") - return None -``` diff --git a/docs_original/conceptual/torch_profiling_analysis.md b/docs_original/conceptual/torch_profiling_analysis.md deleted file mode 100644 index 86607f949..000000000 --- a/docs_original/conceptual/torch_profiling_analysis.md +++ /dev/null @@ -1,144 +0,0 @@ - - -## Understanding PyTorch Trace: A Deep Dive into Execution and Analysis - -You followed the [PyTorch profiling guide](../conceptual/torch_profiling_guide.ipynb), collected a trace, and even opened it in [Perfetto](https://ui.perfetto.dev/). But what does that trace actually mean, and how do you read insights from it? -That’s exactly what we’ll unpack here. - -When you run a PyTorch model on a GPU, there’s a hidden dance between the CPU (host) and the GPU (accelerator). PyTorch trace lets you peek into this choreography—revealing how your code executes, where time is spent, and what might be slowing you down. - -This blog is the first in a series—here we’ll focus on **understanding single-GPU traces**. In a follow-up, we’ll move on to **multi-GPU profiling**. - - -### The Execution Model: Host, GPU, and the Async Magic -![Async Execution Example](./imgs/profiling_analysis_fig1.png) -To understand profiling, you need a mental model of how PyTorch (or any application) runs code across the CPU and GPU. -**Figure 1**: Async Execution Example - -The **host (CPU)** is the conductor. It manages processes and threads, moving through the application call stack until it issues GPU runtime or driver API calls such as `cudaLaunchKernel` or `hipLaunchKernel`. The **GPU** is the performer. It executes tasks with massive parallelism, often involving thousands of threads working on matrix multiplications, convolutions, or reductions. - -Most of these commands are asynchronous. The host queues the "commands" (kernels) and immediately continues, while the GPU independently drains its queue. This overlap is what enables high performance. Sometimes, however, the host introduces synchronization points such as `cudaDeviceSynchronize` or `hipDeviceSynchronize`. In those cases the CPU waits until the GPU finishes all queued work. Synchronization is necessary for correctness, but too many syncs can quickly turn into bottlenecks. - -One more twist: host events come with detailed call stacks (Python → C++ → runtime), so you can see exactly how an operation was triggered. GPU events, on the other hand, are flat. A GPU kernel cannot call another GPU kernel on its own—the launch must always come from the host. That’s why GPU traces appear as a simple queue of kernels, memcopies, and memsets with no stack information. - -A **kernel** itself is just a GPU function that runs across thousands of lightweight threads in parallel. In the trace, each kernel shows up as a single event: you can see when it started, how long it ran, and on which stream—but not what happened inside. To peer into that level of detail (thread execution, memory transactions, warp occupancy), you need dedicated kernel profilers such as [rocprof-compute](https://rocm.docs.amd.com/projects/rocprofiler-compute/en/latest/) for AMD GPUs or Nsight Compute for NVIDIA GPUs. These tools complement the trace view by showing what happens inside the GPU during a kernel event. - - - - ---- - -### A Simple Example - -Let’s dig deeper into what a trace actually shows. Below is a snippet from our trace. - -![Perfetto trace showing idle time between kernels](./imgs/profiling_analysis_fig2.png) -**Figure 2**: Perfetto trace highlighting idle time between convolution and batch normalization kernels. - -The red dashed region marks idle time: the GPU is waiting for the host to issue the next command. This happens when the CPU frontend cannot keep up with the GPU’s execution speed. Reducing such idle gaps is an important optimization goal. To see why these gaps occur, let’s follow the path from a high-level PyTorch call down to the GPU kernels that actually run. - ---- - -Take a simple example: - - y = nn.Conv2d(3, 64, kernel_size=3)(x) - -At the Python level, this looks like a single operation. In the trace, however, it expands into several layers: -- **Python frontend**: `nn.Conv2d` in `torch.nn` -- **ATen**: the call lowers into PyTorch’s tensor library, [ATen](https://pytorch.org/cppdocs/notes/aten.html), and shows up as `aten::conv2d` in the trace -- **Backend wrapper**: ATen provides wrappers that call into vendor libraries. On AMD GPUs, you’ll see `aten::miopen_convolution`, which wraps [MIOpen](https://rocm.docs.amd.com/projects/MIOpen/en/latest/) commands. On NVIDIA GPUs, the equivalent is `aten::cudnn_convolution`, which wraps [cuDNN](https://developer.nvidia.com/cudnn) calls -- **GPU kernels**: the backend library enqueues device kernels such as `igemm_fwd_gtcx2_nhwc` that perform the actual convolution on the GPU - -This gives us a clear understanding of how high-level code is translated into GPU execution. - - ---- -Another important detail is **tensor metadata**. Python-level operations in the trace do not carry shape information. But if you enable `record_shapes=True` in the profiler, the "cpu_op" category (like `aten::convolution`) include **input shapes, strides, and dtypes**. - -For example, in the figure below the first tensor is the activation (`[5, 64, 56, 56]`) and the second tensor is the convolution filter (`[64, 64, 3, 3]`). -![Perfetto trace showing recorded input shapes](./imgs/profiling_analysis_fig3.png) -*Figure 3: Shapes recorded on the backend op when `record_shapes=True`.* - -This metadata becomes very useful for deeper analysis and debugging—for instance, when matching trace events to model architecture, analyzing kernel efficiency, or spotting unusual stride/dtype patterns. - ---- - -That’s all you need for a clean first pass: know what the host and GPU are doing, read the timeline, and use recorded shapes to ground what you see. If you want UI shortcuts, how memcpys show up, or the structure of the raw trace file, jump to the appendix below. - -**Your Profiling Journey Begins**: Perfetto view give you the raw signals; turning them into insight is a skill you’ll build with practice. And TraceLens is here to turbocharge your journey. - ---- -### Appendix - -#### Perfetto UI Tips - -Perfetto is a powerful trace viewer, but it takes some practice to navigate effectively. A few basics: - -- **Zoom and pan** with `Ctrl + scroll` to zoom in/out; click and drag to pan. -- **Event details**: click any event to open the *Current Selection* panel below. This shows start time, duration, and arguments. With `record_shapes=True`, backend ops (in the `cpu_op` category) also show tensor shapes, dtypes, and strides. - -Perfetto also links host launches and GPU execution with arrows called *flows*. These are crucial for connecting what you see on the CPU timeline with what actually runs on the GPU. - -When you select a runtime launch event such as `hipExtModuleLaunchKernel`, the **Following Flow** jumps you forward to the GPU kernel it triggered: - -![Following flow from host launch to GPU kernel](./imgs/profiling_analysis_fig4.png) -*Figure 4: Following flow from a host launch (`hipExtModuleLaunchKernel`) to the corresponding GPU kernel event.* - -Conversely, when you select a GPU kernel event, the **Preceding Flow** takes you back to the runtime call on the host that launched it: - -![Preceding flow from GPU kernel back to host launch](./imgs/profiling_analysis_fig5.png) -*Figure 5: Preceding flow from a GPU kernel (`SubTensorOpWithScalar1d`) back to its launch on the host.* - -These flows are the bridge between the Python-level trace and the GPU execution timeline. They let you answer both: -- *Which Python/ATen op caused this kernel to run?* -- *What GPU work did this runtime call produce?* - - - ---- - -#### Memory Copy Events -Not all GPU activity is compute. Profiling traces also show **memory transfers**: - -- **H2D (Host to Device)**: copies data from CPU to GPU, usually synchronous and PCIe bandwidth-limited. -- **D2H (Device to Host)**: copies results back to CPU, also synchronous and PCIe bandwidth-limited. -- **D2D (Device to Device)**: moves data between GPU buffers, asynchronous and limited by HBM bandwidth. - -Recent versions even record measured bandwidth for these events in the trace arguments. -Importantly, memcpy events use the GPU’s DMA engines, not compute cores—so they don’t directly compete with kernel execution. - ---- - -#### JSON Format -Behind the Perfetto UI, the PyTorch profiler saves traces as JSON. Each entry is an event dictionary with: - -- **Timestamps**: `ts` (start), `dur` (duration). -- **Process/thread IDs**: `pid`, `tid`. CPU events use real PIDs/TIDs; GPU events use pseudo-PIDs for devices and TIDs for streams. -- **Category**: e.g. `python_function`, `cpu_op`, `cuda_runtime`, `kernel`, `gpu_memcpy`. -- **Args**: extra info such as shapes, dtypes, strides, or bandwidth. - -The JSON format makes traces scriptable: you can parse them to build custom reports or run automated analysis outside Perfetto. This is what exactly TraceLens does. - - -#### Autograd in the Trace - -Autograd introduces another dimension to the trace: the forward and backward passes are captured on **different threads within the same process**. In the timeline, you’ll typically see: -- `python3.x [main thread]` for the forward pass, -- `pt_autograd_0` (or similar) for the backward pass. - -These are linked at the `aten::convolution` layer of the call stack. Perfetto uses flows to connect the forward convolution op to its corresponding backward node. - -![Forward and backward convolution linked in the trace](./imgs/profiling_analysis_fig6.png) -*Figure 6: Example of `aten::convolution` (forward) linked to `ConvolutionBackward0` (backward) via flows.* - -Key points: -- The linkage happens at **`aten::convolution`**, not `aten::conv2d`. The higher-level `aten::conv2d` call funnels into `aten::convolution` before reaching the backend. -- Forward and backward both eventually call into the same GPU backend (MIOpen/cuDNN), so you’ll see similar kernel launches in both directions. -- The backward pass typically runs more kernels, since it must compute gradients for both activations and weights, making it more expensive than forward. -- Because autograd runs on its own thread, you can easily separate model execution (forward path) from gradient computation (backward path) when analyzing traces. - -Together with the flows we discussed earlier, this lets you connect *a forward convolution op* to its *exact backward counterpart* and then follow the chain down to GPU kernels. diff --git a/docs_original/conceptual/trace2tree_motivation.md b/docs_original/conceptual/trace2tree_motivation.md deleted file mode 100644 index 0cbe260d1..000000000 --- a/docs_original/conceptual/trace2tree_motivation.md +++ /dev/null @@ -1,36 +0,0 @@ - - -# Trace2Tree Motivation - -## Limitations of Direct Kernel Analysis - -Directly inspecting GPU kernel names has **two fundamental limitations**: - -* **Ambiguous semantics (and weak reproducibility)**: A single kernel name can map to many different computations depending on shape, dtype, strides/layout, etc. Shape strongly affects performance—one shape may select a fast tiled path while another shape (same op type) falls onto a slower algorithm. Because the name omits this argument context, you cannot reliably understand, compare, or reproduce the workload from the kernel string alone. Further, many kernel names are cryptic and unreadable (e.g., `Cijk_Ailk_Bljk_*`, `void cutlass_*`). - -* **Platform‑dependent / unstable naming (and weak cross‑platform comparison)**: The same high‑level operation appears under different kernel names across pltforms. For example: a single GEMM shows up as `nvjet_*` or `cutlass_*` on NVIDIA H100, and as a Tensile kernel `Cijk_Ailk_Bljk_*` on AMD MI300. These names also shift across software versions. Raw kernel strings are therefore not a stable abstraction for comparison. - -## What Trace2Tree Does - -**Trace2Tree** reconstructs a full call tree from the Python front‑end down to each GPU kernel. The tree has exactly four layers: - -1. **Python front end** – user code / `nn.Module`. -2. **Operation** – On PyTorch it is the dispatch operation ("cpu_op") e.g. `aten::mm`, `aten::addmm`, etc. On JAX the corresponding layer is the HLO operations. This is the layer that contains the arg information to contextualize the kenrel. -3. **HIP / CUDA runtime** – launch API calls. -4. **GPU kernel** – executed kernel. - -## How This Solves the Problem - -* **Disambiguates semantics**: Argument metadata at the backend op layer lets us group identical computations, attribute time, and deterministically reproduce slow cases. -* **Enables fair comparison**: Operations (`aten::mm`, HLO) are stable across platforms; by anchoring analysis there, we can compare the same operation and arguments regardless of how kernels are named underneath. -* **Flexible attribution**: GPU time can be viewed at any level—module (via its backend ops), dispatch op, runtime, or kernel—depending on the question. As an additional benefit, we can also attribute time all the way up to the Python nn.Module level, making performance insights accessible even to users outside the performance engineering field. This helps bridge the gap between model developers and low-level hardware execution. - -## Takeaway - -Kernel names are volatile and context‑free. Trace2Tree anchors analysis at the stable backend operation, enriches it with arguments, and maps the full execution stack to deliver portable, interpretable performance insight. - -That said, **kernel names are often useful** — they can offer clues about the backend implementation, algorithm variant, or compiler choices. TraceLens intends to serve as a **one-stop solution** for extracting every bit of useful signal from a trace file. Therefore, it includes features to extract and parse relevant information from kernel names where applicable. But we treat them as supplementary, not foundational. diff --git a/docs_original/gemm_dim_eff.md b/docs_original/gemm_dim_eff.md deleted file mode 100644 index 332d3739b..000000000 --- a/docs_original/gemm_dim_eff.md +++ /dev/null @@ -1,190 +0,0 @@ - - -## What's New: Deeper Efficiency Metrics -This document details a new feature in TraceLens, providing deeper insights into the efficiency of GEMM (General Matrix Multiplication) operations, specifically focusing on Tensile kernels used on ROCm GPU. This analysis complements the existing Roofline metrics by breaking down performance limitations related to how gemm computations are tiled and scheduled onto the GPU. - -By default, the tool provides Roofline metrics summarizing overall performance for operations like `aten::mm`: - -**Original Output Example:** - -| name | M | N | K | bias | FLOPS/Byte_first | TFLOPS/s_mean | -|----------|----------|----------|----------|-------------|------------------|----------------| -| aten::mm | 2048 | 2048 | 10240 | False | 930.90 | 521.57 | - - -The enhanced analysis now adds specific efficiency metrics for Tensile GEMM kernels, derived from the kernel's structure and the problem dimensions: - -**New Output Example (Tensile Kernels):** -Checkout the examples/gemm_dim_eff.ipynb for example usage. - -| name | M | N | K | ... | mt_m | mt_n | num_tiles | tile_eff | wq_eff | dim_eff | ... | TFLOPS/s_mean | -|------------|-------|------|------|-----|------|-----|---|----------|--------|----------|--------|--------| -| aten::mm | 2048 | 2048 | 10240 | ... | 256 | 64 | 256 | 1.00 | 0.84 | 0.84 | ... | 521.57 | - - - ---- - -## Key New Metrics - -- **`mt_m`, `mt_n`**: Macro-tile dimensions extracted from the kernel name. -- **`num_tiles`**: Total number of tiles after padding. -- **`tile_eff`**: Tile Quantization Efficiency. Measures efficiency loss due to input matrix dimensions not being perfectly divisible by tile dimensions. -- **`wq_eff`**: Wave Quantization Efficiency. Measures efficiency loss due to the total number of tiles not perfectly filling all compute units in the final processing wave. -- **`dim_eff`**: Net Dimension Efficiency. The product of tile_eff and wq_eff, representing the combined efficiency impact of tiling and scheduling. - ---- - -## Understanding the Concepts - -### 1. Tile Quantization Efficiency (`tile_eff`) - -Tiled computations divide matrices into smaller sub-blocks (tiles: `mt_m x mt_n`) for processing. If the matrix dimensions (M, N) are not exact multiples of these tile sizes, the implementation effectively pads the matrices to the nearest multiple of the tile size. - -**Padded Dimensions:** - - M_pad = ceil(M / mt_m) × mt_m - N_pad = ceil(N / mt_n) × mt_n - -This padding introduces extra computations on regions that don’t contribute to the final result. - -**Tile Efficiency:** - - tile_eff = (M × N) / (M_pad × N_pad) - -Values < 1 indicate wasted computation due to padding. - ---- - -### 2. Wave Quantization Efficiency (`wq_eff`) - -GPUs execute tiles across many Compute Units (CUs) also known as Streaming multi-processors (SMs). If the total number of tiles isn’t a multiple of the number of available CUs, the final wave will leave some CUs idle. - -**Total Tiles:** - - B = (M_pad × N_pad) / (mt_m × mt_n) - -**Number of Waves:** - - num_waves = ceil(B / num_cus) - -**Wave Efficiency:** - - wq_eff = B / (num_waves × num_cus) - ---- - -### 3. Net Dimension Efficiency (`dim_eff`) - -This is the combined impact: - - dim_eff = tile_eff × wq_eff ---- - -## Why These Metrics Matter: Diagnosing Bottlenecks - -For compute-bound GEMMs, actual performance is often less than peak theoretical. These metrics help explain why: - -- **Low tile_eff**: Indicates high padding overhead. -- **Low wq_eff**: Indicates poor utilization of compute units in the final wave. - -GEMM tuning can help improving these metrics to a certain extent. - -However, these are just part of the picture. Even when tiling and wave quantization are optimal, there can still be performance degradation due to: - -- **Shader clock (`sclk`) throttling**: Some workloads may not run at peak clock speeds due to power or thermal constraints. -- **Cache behavior**: Cache misses can occur even for compute-bound GEMMs, affecting throughput and instruction efficiency. - -These factors should be analyzed alongside the dimension efficiency metrics to get a complete performance picture. - ---- - -## How It's Calculated - -### Step-by-Step: - -1. **Identify Problem Shape**: Extract M, N, K from input tensors. - - > Note: In BLAS libraries, M and N are swapped relative to PyTorch's view as BLAS libraries are column major while PyTorch is row major. This mapping is handled internally. See [PyTorch source - Blas.cpp](https://github.com/pytorch/pytorch/blob/main/aten/src/ATen/native/cuda/Blas.cpp#L102-L129) for more detail. This is accounted in TraceLens as well when computing the tiles across the M and N dimensions. - -2. **Extract Tile Size**: Parse `mt_m`, `mt_n` from kernel name (e.g., `MT256x144x32` → `mt_m = 256, mt_n = 144`). - -3. **Calculate Tiles:** - ``` - float_tiles_m = M / mt_m - float_tiles_n = N / mt_n - tiles_m = ceil(float_tiles_m) - tiles_n = ceil(float_tiles_n) - num_tiles = tiles_m * tiles_n - ``` - -4. **tile_eff**: - ``` - tile_eff = (M * N) / (tiles_m * mt_m * tiles_n * mt_n) - ``` - -5. **wq_eff** (assume `num_cus` known, e.g., 304 for MI300X): - ``` - float_rounds = num_tiles / num_cus - rounds = ceil(float_rounds) - wq_eff = num_tiles / (rounds * num_cus) - ``` - -6. **dim_eff**: - ``` - dim_eff = tile_eff * wq_eff - ``` - ---- - -## Calculation Examples - -**Assuming `num_cus = 304` (e.g., MI300X)** - -### Example 1: Perfect Tiling, Suboptimal Wave Quantization -- **Input**: M = 10240, N = 2048, K = 2048 -- **Kernel Tile**: `mt_m = 256`, `mt_n = 64` - -```text -float_tiles_m = 40 -float_tiles_n = 32 -tiles_m = 40, tiles_n = 32 -tile_eff = 1.0 -num_tiles = 1280 -float_rounds = 4.21 -rounds = 5 -wq_eff = 0.842 -dim_eff = 0.842 -``` - -### Example 2: Slight Padding, Good Wave Quantization -- **Input**: M = 2048, N = 10240, K = 2048 -- **Kernel Tile**: `mt_m = 256`, `mt_n = 144` - -```text -float_tiles_m = 8 -float_tiles_n = 71.11 -tiles_m = 8, tiles_n = 72 -tile_eff ≈ 0.9877 -num_tiles = 576 -float_rounds = 1.895 -rounds = 2 -wq_eff ≈ 0.947 -dim_eff ≈ 0.935 -``` - ---- - -## Important Considerations - -- **Scope**: This analysis assumes standard tiled GEMMs. Techniques like Stream-K or Split-K are not yet modeled. -- **Relevance**: These metrics are most useful for compute-bound GEMMs. Use FLOPS/Byte to determine whether a GEMM is compute- or memory-bound. - - -## Example Usage -Checkout the [Notebook](../examples/gemm_dim_eff.ipynb) for example usage. -This is a new feature so please report any issues or suggestions to the TraceLens team. diff --git a/docs_original/generate_multi_rank_collective_report_pytorch.md b/docs_original/generate_multi_rank_collective_report_pytorch.md deleted file mode 100644 index 2905f1358..000000000 --- a/docs_original/generate_multi_rank_collective_report_pytorch.md +++ /dev/null @@ -1,180 +0,0 @@ - - -# Generate Multi-Rank Collective Report - -This utility analyzes **PyTorch JSON profile traces** from **multiple ranks** and produces a comprehensive **NCCL communication report** (Excel workbook and/or CSVs). - ---- - -## 🚀 Quick Start - -Run the script with **one** of: a directory containing trace files, a trace file **pattern** with a single `*` placeholder for rank id, or a **glob** pattern with a regex to extract the rank. - -### Directory mode -```bash -python generate_multi_rank_collective_report_pytorch.py --trace_dir /path/to/traces --world_size 8 -``` - -### Pattern mode (strict rank substitution) -```bash -python generate_multi_rank_collective_report_pytorch.py --trace_pattern "/logs/job123/rank*/trace.json" --world_size 8 -``` - -### Glob mode (tensorboard-style / arbitrary filenames) -When traces are produced by `torch.profiler.tensorboard_trace_handler`, filenames are typically not `rank{i}_trace.json`. Use `--trace_glob` with an optional `--rank_regex` to extract the rank id: -```bash -python generate_multi_rank_collective_report_pytorch.py \ - --trace_glob "/path/to/tensorboard/**/*.pt.trace.json.gz" \ - --rank_regex "rank\[(?P\d+)\]" \ - --world_size 16 -``` - -### Parallel mode (for faster processing) -```bash -python generate_multi_rank_collective_report_pytorch.py --trace_dir /path/to/traces --world_size 8 --use_multiprocessing -``` - -> **Note:** Speedup varies based on available CPU cores, trace file sizes, and disk I/O. - -> The pattern must contain exactly one `*`, which is replaced with `0, 1, ..., world_size-1` to enumerate rank file paths. - -### Installed entry point (if packaged) -If you install this script as part of a package with a console entry point, you can call it directly, e.g.: -```bash -TraceLens_generate_multi_rank_collective_report_pytorch --trace_dir /path/to/traces --world_size 8 -``` ---- - -## 📥 Input - -- **PyTorch JSON traces** captured per-rank (e.g., via `torch.profiler` with JSON export). -- Naming patterns: - - Directory mode (files inside `--trace_dir`): `rank0_trace.json`, `rank1_trace.json`, ... - - Pattern mode: `--trace_pattern "/path/to/rank*_trace.json"` - - Glob mode: `--trace_glob "/path/to/**/*.pt.trace.json.gz"` with `--rank_regex` for rank extraction - ---- - -## ⚙️ Command-Line Options - -> Provide **exactly one** of `--trace_dir`, `--trace_pattern`, or `--trace_glob`. - -| Argument | Default | Description | -|---|---|---| -| `--trace_dir` | `None` | Directory containing trace files (expects names like `rank*_trace.json`). | -| `--trace_pattern` | `None` | Template path with a **single** `*` placeholder for the rank id (strict substitution: `* → 0..world_size-1`). | -| `--trace_glob` | `None` | Glob for trace files with arbitrary names (supports `**`). Requires `--world_size` and uses `--rank_regex` to map files to ranks. | -| `--rank_regex` | `rank[\[\-_/]?(?P\d+)` | Regex used with `--trace_glob` to extract rank id. Must contain a named group `rank` or a single capture group. | -| `--world_size` | `Required` | Number of ranks in the distributed run. | -| `--output_xlsx_path` | _auto-inferred_ | Path to save the Excel workbook. If omitted, a sensible default is created (see Output Behavior). | -| `--output_csvs_dir` | `None` | If provided, writes each sheet as an individual `.csv` under this directory. | -| `--detailed_analysis` | `False` | Include detailed per-rank sheets (see below). | -| `--agg_metrics` | `mean median min max` | Aggregations to compute in summaries. Allowed: `mean`, `median`, `min`, `max` (space-separated). | -| `--use_multiprocessing` | `False` | Enable parallel trace loading using multiprocessing. Can provide speedup (system-dependent) but uses more CPU resources. | -| `--max_workers` | `os.cpu_count()` | Maximum number of worker processes for parallel loading (requires `--use_multiprocessing`). Override to limit resource usage if needed. | -| `--all2allv_heatmap` | `False` | Add an `nccl_all2allv_heatmap` sheet with per rank-pair send volumes across all all2allv invocations. Useful for diagnosing MoE/expert-parallel routing imbalance. | -| `--gpus_per_node` | _auto-detected_ | Number of GPUs per node. When known, `node_id` and `node_span` columns are added to report sheets, labeling each collective's process group as `intra_node` or `inter_node`. Auto-detected from trace `deviceProperties` if omitted. | - - ---- - -## 📊 Excel Workbook Sheets - -| Sheet Name | What it contains | -|---|---| -| `nccl_summary_implicit_sync` | Aggregated view of collectives that incurred implicit sync (AllReduce, AllGather, ReduceScatter, AllToAll balanced). Provides latency, skew, and aggregated bandwidth metrics (algorithm and bus). | -| `nccl_summary_long` | Aggregated NCCL operation stats per (rank, process group, collective, dtype, size). Includes counts and duration aggregates (sum/mean/std/min/max). | -| `nccl_long` | Per-event, per-rank NCCL records with timestamps, durations, stream, message sizes, and other attributes. Useful for drilling into specific slow ops. | -| `nccl_implicit_sync` | Per-collective implicit synchronization breakdown. Includes per-rank wait_time columns indicating time lost to implicit sync, plus timing/skew and bandwidth metrics. | -| `nccl_summary_all2allv` | Aggregated all2allv metrics by (Process Group, dtype). Includes throughput, wall time, size imbalance, and timing skew. Unlike implicit-sync collectives, all2allv uses aggregate throughput rather than algo/bus bandwidth since per-rank data sizes vary. | -| `nccl_all2allv` | Detailed All2AllV analysis: variable send/recv sizes and splits per rank, with timing and skew columns per rank. | -| `nccl_all2allv_heatmap` | *(when `--all2allv_heatmap` is set)* Per rank-pair total send volumes across all all2allv invocations. Useful for identifying hot pairs in MoE/expert-parallel routing. | -| `straggler_summary` | One row per rank with aggregated straggler metrics: total/mean wait time, how often the rank arrived last or first, and total NCCL duration. Sorted ascending by wait time so the straggler (lowest wait time) is at the top. See [Identifying Straggler Ranks](#-identifying-straggler-ranks). | - -_Notes:_ -- Summary sheets (`nccl_summary_*`, `nccl_summary_all2allv`) are **always** produced when the corresponding collective type exists in the trace; detailed per-event sheets (`nccl_long`, `nccl_implicit_sync`, `nccl_all2allv`) appear when `--detailed_analysis` is set. -- When `gpus_per_node` is known (auto-detected or set via `--gpus_per_node`), sheets that contain `rank` and/or `Process Group Ranks` columns gain `node_id` and `node_span` columns (fully aggregated summary sheets without these columns remain unchanged). `node_span` is `intra_node` when all ranks in the process group reside on the same node, or `inter_node` otherwise. You can filter or pivot on these columns in Excel to compare intra- vs inter-node communication. -- Column sets can evolve; the above reflects the provided example workbook. ---- - -## 📤 Output Behavior - -- If **neither** `--output_xlsx_path` nor `--output_csvs_dir` is specified, the tool writes an Excel file to: - - the provided `--trace_dir`, or - - the **lowest common directory** of the resolved trace files (from `--trace_pattern` or `--trace_glob`). -- If `--output_csvs_dir` is set, all sheets are written as individual CSV files under that directory. -- If `--output_xlsx_path` is set, a single Excel workbook containing all sheets is created. -- `openpyxl` is required for Excel; the tool will attempt to install it when missing. - -**Lowest Common Directory (pattern mode)** -When using `--trace_pattern`, the tool expands the pattern by replacing `*` with `0..world_size-1`, then computes the **lowest common ancestor directory** of those paths to pick a default output location. - ---- - -## 🔍 Identifying Straggler Ranks - -A **straggler** is the rank that consistently arrives last at collectives, forcing all other ranks to wait in implicit synchronization. - -### Quick answer: open `straggler_summary` - -The `straggler_summary` sheet is sorted so **the straggler is in the first row** (lowest total wait time). Example from an 8-rank Llama 70B FSDP run: - -| rank | total_wait_time_us | mean_wait_time_us | times_arrived_last | times_arrived_first | pct_arrived_last | num_collectives | total_nccl_dur_us | -|------|-------------------|-------------------|-------------------|--------------------|-----------------:|----------------:|------------------:| -| 4 | 27,195 | 55.7 | 420 | 6 | 86.1% | 488 | 3,910,753 | -| 5 | 4,660,353 | 9,549.9 | 39 | 10 | 8.0% | 488 | 8,463,896 | -| ... | ... | ... | ... | ... | ... | ... | ... | -| 0 | 13,358,753 | 27,374.5 | 3 | 320 | 0.6% | 488 | 17,203,432 | - -**How to read it:** - -| Column | What it tells you | -|--------|-------------------| -| `total_wait_time_us` | Sum of this rank's wait time across all collectives. The straggler has the **lowest** value — it arrives last, so it rarely waits. | -| `times_arrived_last` | Number of collectives where this rank was the last to arrive. The straggler dominates this column. | -| `times_arrived_first` | Number of collectives where this rank arrived first. The rank that appears here most often pays the biggest sync penalty. | -| `pct_arrived_last` | `times_arrived_last / num_collectives`. A rank at 86% is a persistent straggler. | -| `total_nccl_dur_us` | Total time inside NCCL kernels. The straggler typically has the **lowest** value — other ranks' durations are inflated by implicit-sync wait time. | - -### Next step: visualize with TraceFusion - -Once you know the straggler rank, use [TraceFusion](TraceFusion.md) to merge the straggler's trace with a fast rank (e.g. the one with the highest `times_arrived_first`) into a single file and open it in Perfetto UI. Viewing both timelines side-by-side makes it straightforward to see what compute or memory work is delaying the straggler before each collective. - -```python -from TraceLens import TraceFuse - -fuser = TraceFuse( - trace_files=["rank4_trace.json.gz", "rank0_trace.json.gz"], - output_file="straggler_vs_fast.json.gz", -) -fuser.fuse() -``` - ---- - -## Interpreting all2allv Metrics - -**Why different metrics from other collectives?** - -All2allv sends variable amounts of data per rank — there is no single "message size" or uniform workload. The standard NCCL `algo bw` and `bus bw` formulas assume ring/tree algorithms with equal data on every rank, so they don't apply. - -| Metric | What it tells you | -|--------|-------------------| -| `throughput (GB/s)` | Total data moved / wall-clock time of the collective. Compare against theoretical link bandwidth to gauge efficiency. | -| `wall_time (us)` | End-to-end time from first rank entering to last rank finishing. High values + low throughput = bottleneck. | -| `size_imbalance` | Ratio of max rank's data to mean. 1.0 = balanced. Values >> 1.0 indicate some ranks carry disproportionate load — common in MoE when some experts are "hotter" than others. | -| `max_rank_dur / min_rank_dur` | Spread in per-rank kernel time. Large spread + high imbalance = consider rebalancing expert routing or token dropping. | -| `skew in start time` | How far apart ranks enter the collective. High skew means some ranks are blocked by prior compute. | - -**Actionable guidance:** -- If `throughput` is much lower than link bandwidth and `size_imbalance` ≈ 1.0 → likely a software/driver overhead issue. -- If `throughput` is low and `size_imbalance` >> 1.0 → expert routing imbalance; the busiest rank gates the collective. -- If `skew in start time` is large → ranks are entering the collective at very different times, indicating upstream compute imbalance. -- Use the heatmap sheet (`--all2allv_heatmap`) to identify which rank pairs carry the most traffic. - ---- - diff --git a/docs_original/generate_perf_report.md b/docs_original/generate_perf_report.md deleted file mode 100644 index d5ee1b97e..000000000 --- a/docs_original/generate_perf_report.md +++ /dev/null @@ -1,177 +0,0 @@ - - -# Generate Performance Report - -This Python script (`TraceLens/Reporting/generate_perf_report_pytorch.py`) processes a PyTorch JSON profile trace and outputs an Excel workbook or CSVs with relevant information. - -Similarly (`TraceLens/Reporting/generate_perf_report_jax.py`) processes JAX XPLANE.PB profile trace. - ---- - -## 🚀 Quick Start - -Run the script with a profile JSON to generate an Excel report: - -```bash -python generate_perf_report_pytorch.py --profile_json_path path/to/profile.json -``` - -Alternatively you can directly call the entry point with the same command line args, - without the need to copy the script out of the repo. - -```bash -TraceLens_generate_perf_report_pytorch --profile_json_path path/to/profile.json -``` - -Similarly for JAX profile trace: - -```bash -python generate_perf_report_jax.py --profile_path path/to/profile.xplane.pb -``` - ---- - -## 📋 Excel Workbook Sheets - -| Sheet Name | Description | -|----------------------------|------------------------------------------------------------------------------------------------------------------| -| `gpu_timeline` | End-to-end GPU activity summary, including compute, memory copies, communication, and idle time. | -| `ops_summary_by_category` | Summary of compute time grouped by operation category (e.g., GEMM, SDPA_fwd, elementwise). | -| `ops_summary` | Summary of compute time at the individual operation level; each row corresponds to a unique operation name. | -| `ops_unique_args` | Detailed operation-level summary; each row corresponds to a unique (operation name, argument) combination. | -| `unified_perf_summary` | Unified perf metrics for all ops with perf models OR leaf ops that launch GPU kernels. Includes GFLOPS, TFLOPS/s, Data Moved, FLOPS/Byte, TB/s metrics aggregated by unique args. | -| `short_kernels_histogram` | Histogram showing the distribution of kernel durations below the short-duration threshold. | -| `short_kernels_all_details`| Detailed list of short-duration kernels, including count, total/mean time, runtime percentage, and parent op. | -| Roofline Sheets | Roofline analysis for each operation category (GEMM, CONV, etc.), including TFLOPs, TB/s, and FLOPs/byte metrics. | - -Note: JAX outputs do not include `short_kernels_histogram` or `short_kernels_all_details`, these are for PyTorch only. - -### 🎯 GPU Architecture for Roofline Analysis - -When `--gpu_arch_json_path` is provided, the report includes additional roofline metrics: - -- **Compute Spec**: Combined compute type and precision (e.g., `matrix_bf16`, `vector_fp32`) -- **Roofline Time (µs)**: Theoretical minimum time based on GPU peak capabilities -- **Pct Roofline**: Percentage of roofline achieved (higher is better) - -The GPU arch file specifies Max Achievable FLOPS (MAF) for different compute types and precisions. See [GPU Architecture Example](../examples/gpu_arch_example.md) for format details and [AMD MAF measurements](https://rocm.blogs.amd.com/software-tools-optimization/measuring-max-achievable-flops-part2/README.html#amd-maf-results) for reference values. - -📖 **For detailed column definitions and usage guide**, see [Performance Report Column Definitions](perf_report_columns.md). - ---- - -## ⚙️ Optional Arguments - -The script supports several optional arguments to customize the output report. By default, it generates an Excel file (`.xlsx`) in the trace directory. If `--output_csvs_dir` is specified, individual CSV files are written instead. - -| Argument | Default | Description | -|-----------------------------------|-------------------|-----------------------------------------------------------------------------| -| `--gpu_arch_json_path PATH` | `None` | Path to GPU architecture JSON file for roofline analysis. See [GPU Architecture Example](../examples/gpu_arch_example.md) for format details. | -| `--topk_ops N` | `None` | Limit the number of rows in the unique-args launcher table. | -| `--topk_short_kernels N` | `None` | Limit the number of rows in the short-kernel table. | -| `--topk_roofline_ops N` | `None` | Limit the number of rows in the roofline sheet. | -| `--extension_file` | `None` | Path to extension python file | -| `--include_unlinked_kernels` | `False` | Include all kernels in the gpu timeline analysis - including kernels not linked to host call stack. By default these unlinked kernels are excluded in the analysis.| -| `--micro_idle_thresh_us X` | `None` | Threshold (in microseconds) to classify idle intervals as micro idle in GPU timeline analysis. If None, all idle times are included in one category. | -| `--short_kernel_study` | `False` | Include short-kernel analysis in the report. | -| `--short_kernel_threshold_us X` | `10` | Threshold (in microseconds) to classify a kernel as "short". | -| `--short_kernel_histogram_bins B` | `100` | Number of bins to use for the short-kernel duration histogram. | -| `--detect_recompute` | `False` | Detect activation recomputation (checkpointing) and add an `is_recompute` column to `ops_summary`, `ops_unique_args`, and `unified_perf_summary`. See [Activation Recompute Detection](#-activation-recompute-detection) below. | -| `--output_xlsx_path PATH` | `` | Path to save the Excel report. Auto-inferred if not provided. | -| `--output_csvs_dir DIR` | `None` | If set, saves each sheet as a CSV file in the specified directory. | - -Note: currently JAX supports only two optional arguments `--output_xlsx_path` and `--output_csvs_dir`. - -### 📦 Output Behavior - -- If `--output_csvs_dir` is set, all output sheets are saved as individual CSV files in that directory. -- Otherwise, the script saves a single Excel file: - - If `--output_xlsx_path` is not provided, it is inferred from the input JSON trace name (e.g., `profile.json` → `profile_perf_report.xlsx`). -- The `openpyxl` package is required only for the case when we write Excel files; it will be auto-installed if missing. - -#### 🧪 Example Usage to write CSVs - - -```bash -python generate_perf_report_pytorch.py \ - --profile_json_path traces/profile.json \ - --output_csvs_dir output_csvs/ \ - --topk_ops 50 \ -``` - -## 🔍 Activation Recompute Detection - -When training with activation checkpointing (`torch.utils.checkpoint`), some forward-pass ops are recomputed during the backward pass to save memory. The `--detect_recompute` flag identifies these ops and adds an `is_recompute` column to the report, so you can see exactly how much GPU time and compute is spent on recomputation. - -### How it works - -TraceLens walks the CPU call-stack tree and finds `python_function` events from `torch/utils/checkpoint.py` corresponding to `recompute_fn`. All ops in those subtrees are marked `is_recompute=True`. This requires `python_function` events in the trace, which TraceLens enables automatically when this flag is set. - -### Usage - -```bash -TraceLens_generate_perf_report_pytorch \ - --profile_json_path path/to/trace.json \ - --detect_recompute -``` - -### What changes in the report - -The following sheets gain an `is_recompute` column that splits rows into recompute vs non-recompute: - -| Sheet | Effect | -|-------|--------| -| `ops_summary` | Same op name appears in separate rows for `is_recompute=True` and `False` | -| `ops_unique_args` | Unique (op, shape, is_recompute) combinations, each with their own time/count | -| `unified_perf_summary` | Full perf metrics split by recompute status | - -This makes it straightforward to answer questions like: -- What percentage of GPU time is recomputation? -- Which layers are being recomputed and at what cost? -- Is the recompute overhead acceptable given the memory savings? - -### Python API - -```python -from TraceLens.TreePerf import TreePerfAnalyzer - -analyzer = TreePerfAnalyzer.from_file("trace.json", detect_recompute=True) -df = analyzer.get_df_kernel_launchers(include_kernel_details=True) -print(df["is_recompute"].value_counts()) -``` - -> **Note**: When `--detect_recompute` is not set (the default), there is zero overhead — no extra columns, no tree changes, and no `python_function` parsing. - ---- - -## 🧩 Extensions: Custom Hooks for Tree and PerfModel - -The `--extension_file` argument allows users to inject custom logic into the performance report generation pipeline. This is useful for experimenting with: - -- Tree post-processing (e.g., injecting pseudo ops) -- Custom performance models for new op types -- Additional operation category definitions - -### 🔧 How to Use - -Pass a Python file path via `--extension_file`. The file can define one or more of the following optional symbols: - -| Symbol Name | Type | Description | -|-----------------------------|-----------|-----------------------------------------------------------------------------| -| `tree_postprocess_extension`| `Callable`| Called with `perf_analyzer.tree`. Use to modify the tree structure post-construction. | -| `perf_model_extension` | `dict` | A mapping from op name (str) to a custom performance model class. These will override or extend existing models. | -| `op_category_extension` | `dict` | Mapping from category-only op names to final categories, used when an op should appear in unified reports without a perf model. | - -#### 📄 Example Extension File for MegatronLM in the examples dir - -### ✅ Example Usage - -```bash -python generate_perf_report_pytorch.py \ - --profile_json_path traces/profile.json \ - --extension_file my_extension.py -``` \ No newline at end of file diff --git a/docs_original/generate_perf_report_rocprof.md b/docs_original/generate_perf_report_rocprof.md deleted file mode 100644 index 92c5fcaad..000000000 --- a/docs_original/generate_perf_report_rocprof.md +++ /dev/null @@ -1,245 +0,0 @@ - - -# Generate Performance Report from rocprofv3 - -This Python script (`TraceLens/Reporting/generate_perf_report_rocprof.py`) processes a rocprofv3 JSON profile trace and outputs an Excel workbook or CSVs with relevant performance information. - ---- - -## 🚀 Quick Start - -Run the script with a rocprofv3 results JSON to generate an Excel report: - -```bash -TraceLens_generate_perf_report_rocprof --profile_json_path path/to/908_results.json -``` - -Or use the Python module directly: - -```bash -python -m TraceLens.Reporting.generate_perf_report_rocprof --profile_json_path path/to/908_results.json -``` - ---- - -## 📋 Excel Workbook Sheets - -| Sheet Name | Description | -|---------------------------------|-------------------------------------------------------------------------------------------------------| -| `gpu_timeline` | End-to-end GPU activity summary, including kernel execution, memory operations, and idle time. | -| `kernel_summary` | Summary of kernel execution time at the individual kernel level; each row is a unique kernel name. | -| `kernel_summary_by_category` | Summary of kernel time grouped by category (e.g., GEMM, Elementwise, Attention). | -| `kernel_details` (optional) | Detailed kernel information including grid/block dimensions for each dispatch. | -| `short_kernels_summary` (opt) | Summary of kernels with duration below the short-duration threshold. | -| `short_kernel_histogram` (opt) | Histogram showing the distribution of kernel durations below the short-duration threshold. | - ---- - -## 🎯 Command-Line Options - -### Required Arguments - -- `--profile_json_path`: Path to the rocprofv3 `*_results.json` file - -### Output Options - -- `--output_xlsx_path`: Path to the output Excel file (default: auto-generated from input filename) -- `--output_csvs_dir`: Directory to save output as CSV files instead of Excel - -### Analysis Options - -- `--disable_kernel_summary`: Disable kernel summary sheets (enabled by default) -- `--kernel_details`: Include detailed kernel information with grid/block dimensions -- `--short_kernel_study`: Include short kernel analysis in the report -- `--short_kernel_threshold_us`: Threshold in microseconds for "short" kernels (default: 10) -- `--short_kernel_histogram_bins`: Number of bins for short-kernel histogram (default: 100) -- `--topk_kernels`: Limit kernel details to top K kernels by time - ---- - -## 💡 Examples - -### Basic Report Generation - -Generate a default Excel report: - -```bash -TraceLens_generate_perf_report_rocprof \ - --profile_json_path run_20251209_070939/smci350-zts-gtu-c6-25/908_results.json -``` - -This creates `908_perf_report.xlsx` in the same directory. - -### Short Kernel Analysis - -Include analysis of short-duration kernels: - -```bash -TraceLens_generate_perf_report_rocprof \ - --profile_json_path 908_results.json \ - --short_kernel_study \ - --short_kernel_threshold_us 20 -``` - -### Detailed Kernel Information - -Include grid/block dimensions for top 100 kernels: - -```bash -TraceLens_generate_perf_report_rocprof \ - --profile_json_path 908_results.json \ - --kernel_details \ - --topk_kernels 100 -``` - -### Generate CSV Files - -Output as CSV files instead of Excel: - -```bash -TraceLens_generate_perf_report_rocprof \ - --profile_json_path 908_results.json \ - --output_csvs_dir ./rocprof_analysis -``` - -### Custom Output Path - -Specify a custom output filename: - -```bash -TraceLens_generate_perf_report_rocprof \ - --profile_json_path 908_results.json \ - --output_xlsx_path my_custom_report.xlsx \ - --kernel_details \ - --short_kernel_study -``` - ---- - -## 📊 Understanding the Output - -### GPU Timeline - -Shows the breakdown of GPU activity: -- **total_time**: Total profiling duration -- **kernel**: Time spent executing kernels -- **memory**: Time spent on memory operations -- **idle**: Time when GPU was idle - -### Kernel Summary - -Aggregated statistics for each unique kernel: -- **Count**: Number of times the kernel was dispatched -- **Total Kernel Time (µs)**: Sum of all dispatch durations -- **Mean/Median/Std/Min/Max**: Statistical distribution of durations -- **Percentage (%)**: Percentage of total kernel time -- **Cumulative Percentage (%)**: Running total percentage - -### Kernel Categories - -Kernels are automatically categorized based on name patterns: -- **GEMM**: Matrix multiplication kernels -- **Elementwise**: Element-wise operations -- **Reduction**: Reduction operations -- **Convolution**: Convolution kernels -- **Normalization**: Batch norm, layer norm, etc. -- **Attention**: Flash attention and related kernels -- **Memory**: Memory copy operations -- **Other**: Uncategorized kernels - ---- - -## 🔍 rocprofv3 Format Details - -rocprofv3 uses the `rocprofiler-sdk-tool` format, which is different from PyTorch's Chrome Trace Event format: - -### Input File Structure - -```json -{ - "rocprofiler-sdk-tool": [{ - "metadata": {"pid": ..., "init_time": ..., "fini_time": ...}, - "agents": [...], - "kernel_symbols": [...], - "buffer_records": { - "kernel_dispatch": [...], - "memory_copy": [...], - "hip_api": [...], - ... - } - }] -} -``` - -### Key Data Sources - -- **kernel_dispatch**: Kernel execution records with timestamps and dispatch info -- **kernel_symbols**: Kernel names and metadata indexed by `kernel_id` -- **memory_copy**: Memory transfer operations -- **hip_api**, **hsa_api**: API call traces (when available) - ---- - -## 🆚 Comparison with PyTorch Profiler - -| Feature | rocprofv3 | PyTorch Profiler | -|---------|-----------|------------------| -| Format | rocprofiler-sdk JSON | Chrome Trace Event | -| Kernel Names | Direct from ROCm | Via PyTorch ops | -| Grid/Block Dims | ✅ Always available | ✅ Available | -| CPU Operations | ❌ Limited | ✅ Full trace | -| Memory Ops | ✅ Basic support | ✅ Full support | -| API Calls | ✅ HIP/HSA | ✅ CUDA runtime | -| Tree View | ❌ N/A | ✅ CPU call stack | - ---- - -## ⚠️ Limitations - -1. **No CPU Call Stack**: rocprofv3 focuses on GPU operations; CPU-side profiling is limited -2. **No Operator Hierarchy**: Unlike PyTorch profiler, there's no tree of CPU operations -3. **Basic Categorization**: Kernel categories are inferred from names, not semantic information -4. **Limited Metadata**: Some PyTorch-specific metadata (input shapes, args) is not available - ---- - -## 🐛 Troubleshooting - -### "Not a valid rocprofv3 file" - -Ensure your file is a `*_results.json` file from rocprofv3, not a different format. - -### "No kernel events found" - -The trace may not have captured any GPU activity. Check that: -- GPU operations were actually executed during profiling -- rocprofv3 was configured to capture kernel dispatches - -### openpyxl not installed - -Install openpyxl for Excel output: - -```bash -pip install openpyxl -``` - -Or use CSV output instead: - -```bash -TraceLens_generate_perf_report_rocprof \ - --profile_json_path trace.json \ - --output_csvs_dir ./output -``` - ---- - -## 📚 Related topics - -- [PyTorch Performance Report](generate_perf_report.md) -- [JAX Performance Report](generate_perf_report_jax.md) -- [ROCm rocprofiler-sdk Documentation](https://rocm.docs.amd.com/projects/rocprofiler-sdk/en/latest/) - diff --git a/docs_original/generate_perf_report_rocprof_pftrace.md b/docs_original/generate_perf_report_rocprof_pftrace.md deleted file mode 100644 index 312b8c3c0..000000000 --- a/docs_original/generate_perf_report_rocprof_pftrace.md +++ /dev/null @@ -1,62 +0,0 @@ - - -# Generate Performance Reports from pftrace (rocprofv3 / Perfetto) - -For **Perfetto-style** traces (e.g. rocprofv3 with `--output-format pftrace`, or JSON with a `traceEvents` array), TraceLens provides two report generators that share the same trace loading and optional **traceconv** handling (for `.pftrace` → JSON conversion). - -## CLI Reports - -| CLI | Description | Output | -|-----|-------------|--------| -| `TraceLens_generate_perf_report_pftrace_hip_activity` | Category summary per GPU, kernel/HIP/XLA summaries (NSYS-style), optional Markdown | Excel, CSV, optional `.md` | -| `TraceLens_generate_perf_report_pftrace_hip_api` | HIP API ↔ kernel correlation; latency breakdown **T = A + Q + K** (API duration, queue delay, kernel duration) | Excel, CSV | - -## Input Formats - -- `.json` — Perfetto-style JSON with a `traceEvents` array -- `.json.gz` — Gzip-compressed JSON -- `.pftrace` — Perfetto binary format - -For `.pftrace` files, **traceconv** is resolved from `PATH` or downloaded into the trace file's directory if not provided via `--traceconv`. - -## Quick Start - -### 1. Record a pftrace - -```bash -rocprofv3 --hip-trace --kernel-trace --memory-copy-trace --rccl-trace \ - --output-format pftrace -d ./v3_traces -- python3 your_app.py -``` - -### 2. Generate reports - -```bash -# Activity report: category summary per GPU, kernel/HIP/XLA summaries (NSYS-style). Optional Markdown output. -TraceLens_generate_perf_report_pftrace_hip_activity --trace_path sample.pftrace --write_md - -# API↔Kernel report: latency breakdown T = A + Q + K (API duration, queue delay, kernel duration) -TraceLens_generate_perf_report_pftrace_hip_api --trace_path sample.pftrace - -# Memory copy report: count per copy_bytes with direction (h2d/d2h/d2d and which GPU(s)) -TraceLens_generate_perf_report_pftrace_memory_copy --trace_path sample.pftrace - -# Custom Excel path: -TraceLens_generate_perf_report_pftrace_memory_copy --trace_path sample.pftrace --output_xlsx_path report.xlsx - -# CSV directory: -TraceLens_generate_perf_report_pftrace_memory_copy --trace_path sample.pftrace --output_csvs_dir ./out -``` - -## Library Usage - -Both scripts can be imported and called with a trace path; they return a dictionary of pandas DataFrames (e.g. `api_kernel_summary`, `category_summary`, `kernel_summary`, `hip_summary`). - -## Testing - -```bash -python -m pytest tests/test_pftrace_hip_api_perf_report.py tests/test_pftrace_hip_activity_report.py -v -``` diff --git a/docs_original/gpu_event_analyser.md b/docs_original/gpu_event_analyser.md deleted file mode 100644 index 65034c8d6..000000000 --- a/docs_original/gpu_event_analyser.md +++ /dev/null @@ -1,95 +0,0 @@ - - -# GPUEventAnalyser - -GPUEventAnalyser is a reusable component designed to analyze GPU timeline and extract key performance metrics. While it is used within TreePerf, it can also be used independently. - ---- - -## Key Features - -1. **GPU Timeline Breakdown**: Computes key GPU activity metrics, including: - - **Computation Time**: Time spent in computation kernels (e.g., matrix multiplications, convolutions). - - **Communication Time**: Time spent in communication kernels (e.g., NCCL operations for distributed training). - - **Memcpy Time**: Time spent in memory copy operations between host and device or across devices. - - **Idle Time**: Periods where the GPU is not executing any computation, communication, or memcpy operations. - - **Exposed Communication**: Communication time that does not overlap with computation. - - **Exposed Memcpy**: Memcpy time that does not overlap with computation or communication. - -2. **Reusable Across Profiling Formats**: Although GPUEventAnalyser is designed for PyTorch's JSON trace format, it can be adapted to other profiling formats by inheriting the class and reimplementing `get_gpu_event_lists()`. - ---- - -## Usage Example - -```python -import json -import sys -from TraceLens import GPUEventAnalyser - -path = sys.argv[1] # this expects the JSON file (unzipped) - -with open(path, 'r') as f: - data = json.load(f) - -events = data['traceEvents'] -my_gpu_event_analyser = GPUEventAnalyser(events) -df = my_gpu_event_analyser.get_breakdown_df() -print(df) -``` - -Example output: - -| type | time ms | percent | -| --------------------- | --------- | --------- | -| computation_time | 4184.32 | 96.10 | -| exposed_comm_time | 160.85 | 3.69 | -| exposed_memcpy_time | 0.19 | 0.00 | -| busy_time | 4345.36 | 99.80 | -| idle_time | 8.53 | 0.20 | -| total_time | 4353.88 | 100.00 | -| total_comm_time | 292.92 | 6.73 | -| total_memcpy_time | 0.19 | 0.00 | - ---- - -## Jax support -Jax describes events slightly differently, and includes all GPUs in a single trace, using the JaxGPUEventAnalyser class. -When using GPUEventAnalyser for JAX traces (enabled by passing "jax=True" to the analysis functions), -the compute_metrics() and get_breakdown_df() methods will return events from GPU 0. -To access the traces for all devices, call get_gpu_event_lists_jax() to obtain a dictionary of -{pid: event_lists} where pid is the process id (1-n for n GPUs, a number >100 for CPU the CPU event list). -To create a Pandas dataframe for each GPU, call get_breakdown_df_multigpu(), which will return a dictionary of -{gpu_index: DataFrame} for gpuindex in [0, num_gpus). -The inherited function get_breakdown_df will return the results from GPU 0 - -### Jax Usage Example -```python -import gzip -import json -import sys -from TraceLens import JaxGPUEventAnalyser - -path = sys.argv[1] # this expects the zipped JSON file produced by the - -with gzip.open(path, 'r') as fin: - data = json.loads(fin.read().decode('utf-8')) - -events = data['traceEvents'] -my_gpu_event_analyser = JaxGPUEventAnalyser(events) -for gpu, df in my_gpu_event_analyser.get_breakdown_df_multigpu().items(): - print(f"GPU {gpu}") - print(df) -``` - -## Customizing for Other Profiling Formats - -To adapt GPUEventAnalyser for other profiling formats, subclass it and reimplement the `get_gpu_event_lists()` method to correctly extract GPU events. -See the class JaxGPUEventAnalyser for an example. - ---- - diff --git a/docs_original/jax_analyses.md b/docs_original/jax_analyses.md deleted file mode 100644 index 19726e038..000000000 --- a/docs_original/jax_analyses.md +++ /dev/null @@ -1,98 +0,0 @@ - - -22 October 2025: The following JAX analysis modules—`summarize_gpu_events`, `summarize_gpu_gemm_events`, and related utilities—have been merged into TraceLens and will no longer be maintained as standalone modules. Example usage is similar to PyTorch. See 'docs/generate_perf_report.md'. - -```bash -python generate_perf_report_jax.py --profile_path path/to/profile.xplane.pb --output_csvs_dir save/to/dir -``` - -Jax analysis, particularly reading the protobuf files, has been tested with tensorboard 2.19.0 and tensorboard-plugin-profile 2.19.0 and protobuf 5.29.2. -Other versions may not work - -Analyze Jax computations including GEMM analysis -Run this with the xplane.pb or json.gz and jit_train_step.gfx942_gpu_after_optimizations.txt -``` -from TraceLens.TraceLens import JaxAnalyses -import sys -import pandas as pd -filename_path = sys.argv[1] -averages, categorized, additional_events = JaxAnalyses.summarize_gpu_events(filename_path) -pd.set_option('display.max_rows', None) -print("Average utilization by type of kernel") -print(averages) -print("XLA computations (% for all GPUs)") -print(categorized) -print("Uncategorized XLA computations (% for all GPUs)") -print(additional_events) -if len(sys.argv)>2: - print("GEMMs") - print(JaxAnalyses.summarize_gpu_gemm_events(sys.argv[2])) -``` - -Standalone Jax GEMM analysis from protobuf (from profiler) or xla dump (jit_train_step.gfx942_gpu_after_optimizations.txt): -``` -from TraceLens.TraceLens import JaxAnalyses -import sys -import pandas as pd -pd.set_option('display.max_rows', None) -print("GEMMs") -filename = sys.argv[1] -if filename.endswith("pb"): - gemms = JaxAnalyses.summarize_gpu_gemm_events_from_pb(filename) -else: - gemms = JaxAnalyses.summarize_gpu_gemm_events_from_xla(filename) -print(gemms) -``` - -Detailed GEMM performance metrics -``` -from TraceLens import JaxAnalyses -import sys -import pandas as pd -pd.set_option('display.max_rows', None) -pd.set_option('display.max_columns', None) -pd.set_option('display.width', None) -filename = sys.argv[1] -# num_cus: MI300X - 304; MI210: 104 -gemms = JaxAnalyses.gemm_performance_from_pb(filename, arch = {"num_cus": 104}) -print(gemms) -``` - -Anylyze Jax communications -Run this with the xplane.pb or json.gz and jit_train_step.gfx942_gpu_after_optimizations-buffer-assignment.txt -``` -from TraceLens.TraceLens import JaxAnalyses -import sys -import pandas as pd -profile_path = sys.argv[1] -xla_path = sys.argv[2] -summarized_events = JaxAnalyses.summarize_gpu_communication_events(profile_path, xla_path) -for (df, bw_data, count_data, time_by_size, range_data) in filter(lambda x: len(x[0]) > 0, summarized_events.values()): - print(f"Stats for {df['base_collective'][0]}") - print("Bandwidth") - print(bw_data) - print("counts") - print(count_data) - print("buffer sizes") - print(time_by_size) - print("time_in_ranges") - print(range_data) -``` - -Trace to tree for Jax traces, based on the "Framework Name Scope" thread in the trace -``` -import TraceLens -import sys -data=TraceLens.util.DataLoader.load_data(sys.argv[1]) -events=data['traceEvents'] -metadata = TraceLens.util.TraceEventUtils.get_metadata(events) -categorizer = TraceLens.util.TraceEventUtils.prepare_event_categorizer(events) -real_events = TraceLens.util.TraceEventUtils.non_metadata_events(events) -tree = TraceLens.TraceToTree(real_events, linking_key='correlation', event_to_category=categorizer) -tree.build_tree(True) -tree.traverse_subtree_and_print(tree.get_UID2event(tree.cpu_root_nodes[1]), False) -``` \ No newline at end of file diff --git a/docs_original/locate_node.PNG b/docs_original/locate_node.PNG deleted file mode 100755 index 4f37a1a6b17277cc56aee93c20a1da29f4769108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104490 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%0DT0bTK;dF% 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
Aoq; z=lPL7J#CHCXKoJI{&vkmpXwRxr7!Iy!i$@AX7jE8nyNm(0u?Aq~=d(pO+|`+!E)0 z^ToJmyiwG=yEIAQk?57UrKB&Wo+#|7xY^-H`Bsyn@h_sN;CXk@g%prjn6el@k?qhm z2!Fh_rz$k+`aNGD^`?tA1YGn(@c{e*TKmDKpMU*Gk-7v2*J;NF9KsG_4cFtHBWLy* zcv={wy`H*UTiaI+-ER28wr-n_D)Xx;S&`YQ&lnv+7pQkA7*=7O`EK{8HsK;+Z?_JN zi@&?qfu|A~X5%kruRp-OTih(93i;lb>)&epW*|k_9pki~eKqn6Yc^lq^ArXpPhH`| zu=S$>p;RV`&--OJsnN;%&hs92VeX&IDxOiHllGnF-CuTgIZD;xcErS;m>vUVX4e(~ z5`K6D)zaEhbc!z__wlU=&e-x_sG=wD;w-4?#)|%TYG>dD=tn}ymbU_KoxzlFk`0Z z8#=7$!U7C_(=#Ss)jQS~!gIvUCdr-XNgkr#U`8R{iPkmv`7%W(a0&ZCe!&Y8`dC%z z)wRR+xkDV?wT*jjKdBTS-$(1c@Fs$L^$kZlE{H|+Y=%U1u%;qXhcND>X59u#Zn`dL zVD7Kqy8zr*tGlzmk7@|Gwx@N;k5emuL~?U|-FZLwOE(O=4;z=#c%O&@ zr3aah6PL=ZzmI--!v^Rs2^Y|e{pcLBr9~leF-?R0$3w9nE>U`I?bHG+9ncvi<5~)AFqZ)S}+9hFAy9MZuB$u5f&B3o%y{}9Lo?P$*}E}+uBLPK+Lt>W zYvL(Ef=G5ZJ5%Cm*@eVhCQ3lU^@j1^Je%nP^`kxPdOOpF<*CG?3fP zoT~C$n#q#yj}`diZ`^TbE;$OxVtl?ai_6>_}A|VNY#ggCzS-g-0NNf}?-=*Z)X`@Yz87vb)R*kws&t zB7E|7<^GRXg=gQsE(;{{Rd9^BPU6$_pQzShE^>sg4M)LefsQ9PS7k6SKP1SB_PJ3< za=D+Usyh%8u0wXDlpRjiLFYdf7;QW9q;VbvBzGa_4n0AqryWC5rxgzKw=qSBHI#Kq z2Ww*0+k1o{9^Ie-^}3gz#$`Tt6YViB5`A2ASByw5UTl7d!32rAy+6-lTPu=xT@WBY z?#h3p*voAYOGw9cx0<{O)2A@32`O2fPySLSqd+Jgc87vi)U(qDHsnH2Gv(F_mvd6Q z8?p%VTqEJUK#V7nw2f}gr1w~pG2kd!MBY8{n)!Iq+tr)Cxw4)OsyH;7XtI zfA?dO)}E^+&#-N~DWE)3wrSol!nJD5}eET!9;*ounvLg6!45;HCRN7}(& zZW?q$HVgnt|AXOv!Oq_>)o+;be=ywdVBjBN?(Z=Ee_-|hjiu-? zX$uSnKU%lR+WsVcyZ({?;S;v$b7`6!(UY|3{3RsjjX3|)~aUo3ADyt%PVM$bd~Qq=}_W^o{SuIaO6v7Y=TF z^o(MCWmT1?mR8WpishrnkJHl9>bpTlYsj9hR|%sX6{7spb#R;0J7Rfs z?n1{)pC61*V@%DQN{Wk>KnZt@ju=GkJ_E_xupz)Z`*+^bXnlMd5gi>({5%Y*$rXb= zea9x_Iq&A{7)Xu7)SdHAgVBbLH1z2Bc-_IwwtD;W4~KzP#(SdMJPL4&6%gi|Q#CFw z#H%=~fM@wf z)7|0qPA2a%C1_t0O*7LF?$EV`$XcC$V2h4vszjX;)>L!Vu)3t^9M~ktp098FlFRli zI0Q^`ry5cW!+LX)Crf*cb(`P21yvEZ`cRLlymYKs7)bQ7*G_mFvCR)8iX8!N>fZuJ zKZjk`G$zyZ{TM@!eG2io2<@ZnBnbt4m05jfA2D)qGH zCX`kIExqI-E9DRN{L^GsnV1Ho*OSfJxS949~D2cZ4jVB zZ`HuON!{PpqFoB=_p1-6#~nqj_fm_Q1{O$a(F#TK$XEG%0{5U%e=U|jrq;8PZPYPhD(DXD%8#C4Sl%U|>EO6{AHV zrmijQ(~c!{*7mH2ED8yVb1OK4RCTN2ut}{7W;GDC!vv$SN^Bqb(RHxQDH$AN*)Xu$@`XSqKcO&SDd=kK zqGE$6{``xk^z+I$4+MuEYcra_+9u7w$*Lo^`&u)f*)}kuWpWeEIyo)G<|}FySTAT_ zhp(xxVW{)0}H6; z5*kWnkTftl*$x3;jg*)jAc8jRutYrPXnBnbi(tW4khFF>Q)Z_(?lc~h&1pfNS~fgA z!tFG85F(7Ha23THy$#gTO6b%rznnNd>Yt=YZgk3sOik~WF`JDI*o2}JrlA|m1yC8Y z{(}jJCp|>C6Q>tGe$c~8WiU{=L$KXd>=03+9&0fwPI7_+vX+z+gJ&DI!f7X;gyLi* zD0IY7t#HAfci%p(L$EZClKNX>&m*vC>b31nE4tg{Le{$QfWyQ>X_(Y~POtQV8CA%E zyzl74khQ|A`)ir(CS&EYeLPsnqTXBosAbxpPQwVXiL!mEk*EhoxyqX4LY1q87e_2h~A!%C7TLNz+`y*c}9(pG;ak|!z*rLlqHPQ(45mepXijNAr z4D9uScCkj|=-CW6(+&>BLGALZLF-~k z^#VjVRi`%UP&A49vzp`QH}Uu*n_w4%7cn+vNUzRhaI^;KgY1+{ZP@;#$s}PchTMHV z8+s~fI?=`1eBQ=mVc+WWjbO0tJQU-Ys9^*C|?@ ztUfd@R8P-FxvM|hSX12Y=r@w{r-Um#c}ZobRQK3fb&(K26=f))^+V*vs0<5CEAgi`mEXoO!S0Ob6}L zM(vZZreMnl4OH{{nsV(Zd66;3{W?Vt8<0ebq6@1+W zJq7BesCdJs^nlfs%ct0;Wa2q(T}nEd+vFv{wMn58R$uhd@$2Sud!v&X6rs9lZCT+} zxAZzi!fpVk)c+k4s0L4#L!5|9cuudw)YUQG^!L?oiJRpBs{X=Qsia>(X3A4iaI@`# z5xC1l@#f*ON1@^i%U7lE9404 zghS)qVZN=lNFy8AjW$g+*tzF6arI%yM{KWcmEe?JN3T~Y$u*eato7+Pu}GtbZ$_(4 zpv28&wqg|z*|Fj3poB7dT=t?Qsjyuc#~v!Xj?88LsC_LhUJLQSK-MEZ^B|FhS*^?s zhvzV_QTtdWP*KBxEn-v;&lYCL>brpgw(ZH}1TOo3!UP6)Ht}G~Q0iU>Wa@!R$z?_q@L&1_e0?BI+C3r0}{y zCsKvmup^4GsI3sj0qF`aO54nqUS{y#h#ZJDzkLeWfV=v~_L7=Mxo^nJR6v&C#;j@R z!kWRisIbg7_l2vV6QsyRb|Ntuj|-8V$w7+WKhpNKZ0^}nc?*dQXxDDkn-yBRCfW5r z3h)h6>2!|7=88*(K?dRE$kR66Kt>W7&r1BDPfE`CiK)Waior?0y3Y-EWkOZ)`FY#+1*`%&tFe^@`bgYS!r2(blYu(y41Mm~yBK zav})bP3+i|68KVMIGDb@xrdO zH)nl|b89rV+4N zUghb7Jjl)$w$yK-Jhg=vheR5gqOK$)CfXkq?%Olka|Tm{e)#y27%yOJIXm@fl&^1; zH8cz;dT|i|{;i9tu$01$wtv-N@hUDz5a1h{n-}_CFcY1?mvG%kO0IdNrM0O4cmi*> zIbF(Q?^|!0+!ILnR3$evEr+? zHM=onVWN$}%Kh6k3PmA≪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 f$xJ?s?axCb+Cq0LNA2b;PT`EQ0 - -# Origami with TraceLens - -TraceLens can estimate **simulated GEMM and SDPA kernel times** using **Origami** (ROCm’s performance modeling library) when you provide a GPU architecture description and explicitly opt in. This is **optional**: `pip install TraceLens` does not install Origami. - ---- - -## What Origami does in TraceLens - -- **GEMM** and **SDPA** perf models call Origami’s Python bindings to predict a duration in microseconds for forward (and SDPA backward where applicable). -- Results show up in perf reports under columns such as **Origami Time (µs)**, **Origami TFLOPS/s**, **Origami TB/s**, and **Pct Origami** (relative to measured kernel busy time), when simulation uses Origami (see [Performance Report Column Definitions](perf_report_columns.md)). -- **Roofline** metrics from `--gpu_arch_json_path` are separate; they do not require Origami. Origami adds *simulated* timing on top when enabled. - ---- - -## Installation - -### Python package - -Install the published package (PyPI name **`rocm-origami`**): - -```bash -pip install rocm-origami -``` - -Note that installing Origami currently (as of April 2026) requries that ROCm is installed on the system because Origami can use the HIP library to detect the GPU currently installed in the system and use it as an architectural model. TraceLens does not currently use this functionality but it currently cannot be removed from Origami. - -### System environment - -Origami’s wheels/bindings expect a **ROCm** runtime on the machine (GPU not required for pure Python simulation in many cases, but library loading may depend on your setup). The project’s CI uses an AMD ROCm container and installs `rocm-origami` alongside TraceLens (see `.github/workflows/regression-tests.yml`). - -If `import origami` fails after `pip install`, check: - -- Python version and wheel compatibility for `rocm-origami`. -- `LD_LIBRARY_PATH` / ROCm install paths required by the Origami wheel you use. - ---- - -## When TraceLens uses Origami vs other backends - -Simulation is implemented in `TraceLens/PerfModel/perf_model.py` (`GEMM.get_simulation_time_func`): - -1. **Otherwise**, if **`enable_origami` is true** and the perf model has the needed architecture and parameters, TraceLens uses **Origami**. - -2. If **`enable_origami` is false**, TraceLens does **not** call Origami; simulated times are omitted for that path. - -So you need **both**: - -- A valid **GPU architecture** (see below), and -- **`enable_origami=True`** (CLI flag or Python API). - ---- - -## GPU architecture JSON - -Pass the same JSON file you use for roofline analysis with **`--gpu_arch_json_path`**. It must include fields Origami expects (for example GPU name, frequency, memory bandwidth, CU count), as consumed by `OrigamiHelper.get_hardware` in `TraceLens/PerfModel/origami_helper.py`. - -See [GPU Architecture Example](../examples/gpu_arch_example.md) and [Generate Performance Report](generate_perf_report.md) for the general format. - ---- - -## Command-line usage - -### PyTorch perf report - -```bash -TraceLens_generate_perf_report_pytorch \ - --profile_json_path path/to/profile.json.gz \ - --gpu_arch_json_path path/to/gpu_arch.json \ - --enable-origami \ - --output_csvs_dir ./out_csvs -``` - -Or: - -```bash -python -m TraceLens.Reporting.generate_perf_report_pytorch \ - --profile_json_path path/to/profile.json.gz \ - --gpu_arch_json_path path/to/gpu_arch.json \ - --enable-origami \ - --output_csvs_dir ./out_csvs -``` - -### vLLM-oriented PyTorch report - -Same pattern; the entry point mirrors the PyTorch script (`--enable-origami`). - -### JAX perf report - -```bash -TraceLens_generate_perf_report_jax \ - --profile_path path/to/trace.xplane.pb \ - --gpu_arch_json_path path/to/gpu_arch.json \ - --enable-origami \ - --output_csvs_dir ./out_csvs -``` - -### Standalone GEMM/SDPA simulator helper - -`TraceLens/PerfModel/run_perf_model.py`: - -```bash -python -m TraceLens.PerfModel.run_perf_model --op gemm ... --enable_origami -``` - ---- - -## Python API - -When building a **`TreePerfAnalyzer`** (or **`JaxTreePerfAnalyzer`**) in code, pass: - -```python -TreePerfAnalyzer.from_file( - profile_filepath="profile.json.gz", - arch=gpu_arch_dict, # or load JSON - enable_origami=True, -) -``` - -Reporting helpers such as **`generate_perf_report_pytorch`** accept **`enable_origami=True`** and forward it to the analyzer. - ---- - -## Troubleshooting - -| Symptom | What to check | -|--------|----------------| -| No Origami columns in CSVs | Confirm **`--enable-origami`** (or API **`enable_origami=True`**) **and** **`--gpu_arch_json_path`**. | -| Message on stderr about `origami` import | Install **`rocm-origami`** and fix ROCm/library paths. | -| Unsupported dtype warning | Origami path supports a fixed set of dtypes (e.g. fp16, bf16, fp32, fp64, fp8); others skip simulation. | - ---- - -## Related documentation - -- [Generate Performance Report](generate_perf_report.md) — CLI overview and roofline (`--gpu_arch_json_path`). -- [Performance Report Column Definitions](perf_report_columns.md) — sheet and column meanings. diff --git a/docs_original/perf_report_columns.md b/docs_original/perf_report_columns.md deleted file mode 100644 index 34e2b5efa..000000000 --- a/docs_original/perf_report_columns.md +++ /dev/null @@ -1,982 +0,0 @@ - - -# Performance Report Column Definitions - -This document provides detailed explanations of the columns in each sheet of the TraceLens performance report. - -## Table of Contents - -1. [gpu_timeline](#1-gpu_timeline) - High-level GPU time breakdown -2. [Operation Analysis](#2-operation-analysis) - - [2.1 ops (Base Data)](#21-ops-base-data) - - [2.2 ops_summary_by_category](#22-ops_summary_by_category-most-aggregated) - - [2.3 ops_summary](#23-ops_summary-by-operation-name) - - [2.4 ops_unique_args](#24-ops_unique_args-most-detailed) -3. [Performance Metrics Sheets (Roofline Analysis)](#3-performance-metrics-sheets-roofline-analysis) - - [Understanding the Metrics Pipeline](#understanding-the-metrics-pipeline) - - [Operation Parameters Reference](#operation-parameters-reference) - - [Why This Matters: Roofline Analysis](#why-this-matters-roofline-analysis) -4. [Collective Communication Analysis](#4-collective-communication-analysis) -5. [Additional Sheets](#5-additional-sheets) -6. [Common Analysis Workflows](#6-common-analysis-workflows) -7. [Related Documentation](#7-related-documentation) - ---- - -## Overview - -The performance report Excel file contains multiple sheets analyzing different aspects of GPU performance. The core sheets are: - -1. **gpu_timeline** - High-level GPU time breakdown -2. **ops** - Detailed per-operation data (base data) -3. **ops_summary_by_category** - Operations summarized by category -4. **ops_summary** - Operations summarized by name -5. **ops_unique_args** - Operations summarized by unique argument combinations - -Additional sheets may include op-specific analysis (GEMM, SDPA_fwd, CONV_fwd, etc.), kernel summary, short kernels, and collective analysis. - -**Unit Conventions**: -- **Time**: All times from the trace are in **microseconds (µs)** unless explicitly stated otherwise (e.g., `time ms` in `gpu_timeline` is in milliseconds) -- **Compute**: GFLOPS (billions of FLOPs), TFLOPS/s (trillions of FLOPs per second) -- **Memory**: MB (megabytes), GB/s (gigabytes per second), TB/s (terabytes per second) - ---- - -## 1. gpu_timeline - -**Purpose**: Provides a high-level breakdown of GPU time into computation, communication, memory copy, and idle time, accounting for overlaps between different types of operations. - -### Example Output - -Here's a typical `gpu_timeline` sheet from a distributed training workload: - -| type | time ms | percent | -| --------------------- | --------- | --------- | -| computation_time | 56305.19 | 99.30 | -| exposed_comm_time | 240.88 | 0.42 | -| exposed_memcpy_time | 14.44 | 0.03 | -| busy_time | 56560.52 | 99.75 | -| idle_time | 143.16 | 0.25 | -| total_time | 56703.68 | 100.00 | -| total_comm_time | 17203.43 | 30.34 | -| total_memcpy_time | 14.47 | 0.03 | - -**Analysis**: -- **99.30%** computation time → GPU is very efficiently utilized -- **0.42%** exposed communication → Excellent! Most communication (30.34% total - 0.42% exposed = 29.92%) overlaps with computation -- **0.25%** idle time → Minimal gaps, good kernel launch efficiency -- This workload demonstrates effective computation/communication overlap - -### Event Classification - -GPU events are classified into three categories based on their `cat` field and kernel name: - -``` -GPU Event -│ -├─ cat = "gpu_memcpy"? -│ └─ YES → Memory Copy (H2D, D2H, D2D) -│ -├─ cat = "kernel"? -│ └─ YES → Does kernel name contain "nccl"? -│ ├─ YES → Communication (AllReduce, AllGather, ReduceScatter, etc.) -│ └─ NO → Computation (GEMM, Conv, Elementwise, etc.) -│ -└─ cat = "gpu_memset"? - └─ YES → Computation (grouped here for simplicity; typically very short) -``` - -**Notes**: -1. "Computation" includes all kernels doing work (GEMM, convolution, elementwise, etc.), not just compute-bound operations. -2. Communication kernels (NCCL) include both synchronization delay and actual data transfer time. In single-rank traces, we cannot separate these components, so `total_comm_time` represents the total duration. See the NCCL Analyzer documentation for multi-rank analysis that can break down communication into sync and transfer phases. - -### How Time is Calculated - -**Step 1: Merge events by category** - -Events of the same category are merged across all GPU streams into non-overlapping intervals. - -Example - merging computation events: -``` -Stream 0: ──[Kernel A]────────[Kernel B]── -Stream 1: ─────[Kernel C]──[Kernel D]───── - ↓ -Merged: ──[──────────]──[──────────]── - (overlapping kernels merged into single intervals) -``` - -**Step 2: Create interval sets** - -After merging, we have four sets of non-overlapping intervals: -- `COMP` = merged computation intervals -- `COMM` = merged communication intervals -- `MEMCPY` = merged memcpy intervals -- `ALL_GPU` = merged intervals of ALL GPU events (computation + communication + memcpy) - -**Step 3: Apply set arithmetic** - -Exposed metrics are calculated by subtracting overlaps: - -``` -exposed_comm intervals = COMM - COMP -exposed_memcpy intervals = MEMCPY - COMP - COMM -``` - -In simple terms: -- **Exposed communication** = communication time that doesn't overlap with computation -- **Exposed memcpy** = memcpy time that doesn't overlap with computation or communication - -**Step 4: Sum interval durations** - -Time for each metric = sum of durations of all intervals in that set - -``` -computation_time = sum of durations in COMP -exposed_comm_time = sum of durations in (COMM - COMP) -exposed_memcpy_time = sum of durations in (MEMCPY - COMP - COMM) -busy_time = sum of durations in ALL_GPU -idle_time = total_time - busy_time -total_comm_time = sum of durations in COMM -total_memcpy_time = sum of durations in MEMCPY -total_time = end of last GPU event - start of first GPU event -``` - -**The equation**: -``` -computation_time + exposed_comm_time + exposed_memcpy_time + idle_time = total_time -``` - -### Columns - -| Column | Description | Values | -|--------|-------------|--------| -| `type` | Category of GPU time | `computation_time`, `exposed_comm_time`, `exposed_memcpy_time`, `busy_time`, `idle_time` (or `micro_idle_time` and `macro_idle_time`), `total_comm_time`, `total_memcpy_time`, `total_time` | -| `time ms` | Time in milliseconds | Actual duration for each category | -| `percent` | Percentage of total time | `(time ms / total_time) * 100` | - -### Interpreting Results - -- **High `computation_time`** (>80%): Workload is efficiently using GPU -- **High `exposed_comm_time`**: Communication not overlapped with computation → optimize with computation/communication overlap -- **High `exposed_memcpy_time`**: Memory transfers blocking work → optimize data movement -- **High `idle_time`**: GPU sitting idle → check for CPU bottlenecks, kernel launch overhead, or synchronization - -**Code Reference**: Generated by `TreePerfAnalyzer.get_df_gpu_timeline()` using `GPUEventAnalyser.compute_metrics()` - ---- - -## 2. Operation Analysis - -The following sections analyze CPU operations that launch GPU kernels. Each operation is analyzed for its direct GPU time impact. - -### 2.1. ops (Base Data) - -**Purpose**: Provides detailed per-operation data showing each CPU operation that launches GPU kernels. This is the base unsummarized data; the following sheets provide different ways of summarizing this information. - -**What you'll see**: Each row represents one CPU operation instance from your workload that launched GPU kernels, showing exactly which kernels it launched and how long they took. - -**Code Reference**: Generated by `TreePerfAnalyzer.get_df_kernel_launchers()` - ---- - -#### Understanding the Analysis Approach - -**Why analyze operations instead of just kernels?** - -When you look at a PyTorch trace, you might be tempted to analyze GPU kernels directly. However, this has significant limitations: - -- **Kernel names are cryptic and ambiguous**: A kernel named `Cijk_Ailk_Bljk_BBS_BH_Bias_HAS_SAV...` tells you almost nothing about what computation it's doing. The same kernel name can also map to different computations depending on input shape, dtype, and memory layout. - -- **Kernel names vary across platforms**: The same matrix multiply appears as `nvjet_*` or `cutlass_*` on NVIDIA GPUs, but as `Cijk_*` on AMD GPUs. This makes cross-platform comparison nearly impossible. - -- **Operations are stable and meaningful**: Names like `aten::addmm` (matrix multiply with add) or `aten::conv2d` are platform-independent and immediately tell you what computation is happening. Combined with argument information (shapes, dtypes, strides), they fully define the computation in a reproducible way. - -**Result**: By analyzing at the operation level, you get insights that are portable across platforms, interpretable without deep kernel knowledge, and reproducible. (See [Trace2Tree Motivation](./conceptual/trace2tree_motivation.md) for more details.) - ---- - -#### Which Operations Are Analyzed? - -We analyze **leaf operations** - the lowest-level CPU operations in the call stack that directly launch GPU kernels. This gives you the most granular view without double-counting. - -**Example call stack** (showing all layers from trace): - -``` -└── (python_function) nn.Module: Linear_75 - └── (python_function) forward @ linear.py:124 - └── (cpu_op) aten::linear - ├── (cpu_op) aten::to - │ └── (cpu_op) aten::_to_copy - │ └── (cpu_op) aten::copy_ ← Leaf op - │ └── (cuda_runtime) hipLaunchKernel ← Runtime layer - │ └── (kernel) elementwise_kernel... ← GPU kernel - ├── (cpu_op) aten::to - │ └── (cpu_op) aten::_to_copy - │ └── (cpu_op) aten::copy_ ← Leaf op - │ └── (cuda_runtime) hipLaunchKernel ← Runtime layer - │ └── (kernel) elementwise_kernel... ← GPU kernel - └── (cpu_op) aten::linear - └── (cpu_op) aten::addmm ← Leaf op - ├── (cuda_runtime) hipLaunchKernel ← Runtime layer - │ └── (kernel) elementwise_kernel... ← GPU kernel - └── (cuda_runtime) hipExtModuleLaunchKernel ← Runtime layer - └── (kernel) Cijk_Alik_Bljk_BBS_BH... ← GPU kernel -``` - -**Note**: The `cuda_runtime` label is used by PyTorch profiler even on ROCm platforms - it's just a naming convention. - -In this example: -- **Leaf operations analyzed**: `aten::copy_` (2 instances) and `aten::addmm` -- **Not included**: `aten::linear`, `aten::to`, `aten::_to_copy` (these are higher-level and don't directly launch kernels) -- **Why this matters**: If we included higher-level operations, we'd count the same GPU time multiple times. By focusing on leaf operations, each kernel's time is attributed to exactly one operation. - ---- - -#### What Are CPU Operations (cpu_op)? - -**Understanding PyTorch's execution flow**: - -When you write PyTorch code in Python (like `output = model(input)`), it goes through several layers before reaching the GPU. The trace captures all these layers: - -1. **Python frontend**: Your Python code calls `nn.Module` methods (labeled `python_function` in trace) -2. **Torch dispatcher**: Operations are routed through PyTorch's dispatcher, which selects the appropriate implementation based on device, dtype, and other factors (labeled `cpu_op` in trace) -3. **Runtime layer**: CUDA/HIP API calls to launch kernels (labeled `cuda_runtime` or `cuda_driver` in trace) -4. **GPU kernels**: The actual computation on the GPU (labeled `kernel`, `gpu_memcpy`, or `gpu_memset` in trace) - -**What "cpu_op" means**: Operations marked as "cpu_op" in the trace are **operations registered in the PyTorch dispatcher**. These can be registered in C++ or Python, and represent various levels of abstraction in the execution hierarchy. The key distinction is that we analyze the ones that directly launch kernels (the leaf operations in the call stack). - -**Why this matters**: The dispatcher layer is where PyTorch attaches rich metadata about the computation. - -**Note on the runtime layer**: In the trace hierarchy, there's also a runtime layer (labeled `cuda_runtime` or `cuda_driver` in the trace) between CPU operations and GPU kernels. This represents the CUDA/HIP API calls that actually launch kernels. Interestingly, PyTorch profiler uses `cuda_runtime`/`cuda_driver` naming convention even on ROCm/HIP platforms - it's just a naming convention inherited from CUDA. - ---- - -#### What Arguments Do Operations Contain? - -Each operation in the trace contains valuable argument information that fully characterizes the computation. **These arguments come directly from the JSON event's `args` field** that PyTorch profiler captures: - -**Example JSON event from trace**: -```json -{ - "name": "aten::addmm", - "cat": "cpu_op", - "ts": 1234567890, - "dur": 150, - "args": { - "Input Dims": [[1024, 512], [512, 256], [256]], - "Input type": ["c10::BFloat16", "c10::BFloat16", "c10::BFloat16"], - "Input Strides": [[512, 1], [256, 1], [1]], - "Concrete Inputs": ["", "", "1.0"] - }, - ... -} -``` - -These arguments are extracted and presented in the ops sheet: - -| Argument Type | Description | Example (from above aten::addmm) | Why It Matters | -|---------------|-------------|---------|----------------| -| **Input Dims** | Shape of input tensors | `((1024, 512), (512, 256), (256,))` | Different shapes → different performance (tiling, memory access patterns) | -| **Input type** | Data types | `('c10::BFloat16', 'c10::BFloat16', 'c10::BFloat16')` | FP32 vs BF16 vs FP16 affects speed and memory | -| **Input Strides** | Memory layout (row-major, column-major, etc.) | `((512, 1), (256, 1), (1,))` | Strided vs contiguous affects memory bandwidth | -| **Concrete Inputs** | Scalar/string arguments | `('', '', '1.0')` | Additional parameters that may affect algorithm selection | - -**Example - Why shapes matter**: -``` -aten::addmm with shape (1024, 512) × (512, 256): Fast (optimized tiling) -aten::addmm with shape (1023, 511) × (511, 255): Slower (odd dimensions, less efficient) -``` - -**Example - Why strides matter**: -``` -Same operation, same shape, different strides can have different performance: - stride=(512, 1) vs stride=(1, 512) -``` -Strides affect memory access patterns. Some strides work better for certain operations depending on how kernels access data. TraceLens captures strides so you can identify stride-dependent performance variations. - -**The key insight**: By capturing these arguments, you can group operations by their **unique argument combinations**. This enables targeted analysis: -- **Identify slow cases**: "Which specific input shapes are causing slowdowns?" -- **Reproduce issues**: "I can reproduce the slow case with these exact inputs" -- **Compare across platforms**: "Does this shape perform better on NVIDIA or AMD?" - -This combination of operation name + arguments forms a unique signature that can be aggregated in the summary sheets (ops_summary_by_category, ops_summary, ops_unique_args), enabling you to ask questions at different levels of granularity. - ---- - -#### How GPU Time Is Calculated - -For each operation, we calculate `total_direct_kernel_time_us` using **GPU Event Analyzer** to account for kernel overlaps. - -**Key insight**: When an operation launches multiple kernels, some may run concurrently on different GPU streams. We use GPU Event Analyzer to compute the actual "busy time" - the wall-clock time during which at least one of the operation's kernels is executing. - -**Example**: -``` -Operation: aten::addmm - ├── Kernel A: 100 µs (stream 0, executes 0-100 µs) - └── Kernel B: 80 µs (stream 1, executes 20-100 µs, overlaps with Kernel A) - -Naive sum: 100 + 80 = 180 µs ✗ (incorrect) -Actual busy time: 100 µs ✓ (kernels overlapped from 20-100 µs) -``` - -This gives you the actual wall-clock time each operation's kernels occupied the GPU. - ---- - -#### Understanding kernel_details - -Captures detailed information about each GPU kernel launched by an operation: kernel name, duration (in microseconds), and stream ID. - -**Example from aten::addmm**: -```python -[ - {'name': 'elementwise_kernel', 'dur': 2.3, 'stream': 7}, # dur in µs - {'name': 'Cijk_Alik_Bljk_BBS_BH_Bias_HAS_SAV...', 'dur': 45.2, 'stream': 7} # dur in µs -] - -# Analysis: addmm = elementwise (2.3 µs) + GEMM (45.2 µs) -# → GEMM is bottleneck (95% of time), both sequential (same stream) -# → Cijk_* = Tensile GEMM (AMD), cutlass_* would be NVIDIA -``` - -**Key insights from kernel_details**: -- **Backend implementation**: Kernel names reveal which library is used - - `Cijk_*`: Tensile GEMM kernels (AMD ROCm) - - `cutlass_*`: CUTLASS kernels (NVIDIA) - - `ck_tile::kentry<...FmhaFwd...>`: Composable Kernel (CK) Flash Attention (AMD) - - `void at::native::*`: PyTorch native kernels (element-wise, etc.) -- **Execution breakdown**: Shows performance contribution of each kernel in multi-kernel operations -- **Concurrency**: Same stream = sequential, different streams = potentially concurrent - ---- - -#### Columns - -| Column | Description | Details | -|--------|-------------|---------| -| `name` | Operation name | PyTorch operation name (e.g., `aten::addmm`, `aten::index_select`) | -| `op category` | Operation category | Categorized type (e.g., GEMM, CONV_fwd, SDPA_fwd, other) | -| `UID` | Unique event identifier | Unique ID for this specific operation instance in the trace | -| `total_direct_kernel_time` | GPU busy time in microseconds | Wall-clock time the GPU was busy executing this operation's kernels (accounts for overlaps using GPU Event Analyzer) | -| `direct_kernel_count` | Number of kernels launched | How many GPU kernels this operation launched | -| `Input Dims` | Input tensor shapes | Tuple of shapes for each input tensor, e.g., `((30522, 512), (), (141,))` | -| `Input type` | Input data types | Tuple of data types for each input, e.g., `('c10::BFloat16', 'Scalar', 'long int')` | -| `Input Strides` | Input tensor strides | Tuple of stride tuples for each input, e.g., `((512, 1), (), (1,))` | -| `Concrete Inputs` | Scalar/string arguments | Additional arguments passed to the operation, e.g., `('', '0', '')` | -| `kernel_details` | Kernel execution details | List of dicts with kernel name, duration (µs), and stream for each kernel launched, e.g., `[{'name': '...', 'dur': 3.136, 'stream': 7}]` | - ---- - -#### What This Data Represents - -**Flat tabular view of hierarchical trace**: The PyTorch trace has a hierarchical structure (Python → Operations → Runtime → Kernels). This sheet provides a **MECE (Mutually Exclusive, Collectively Exhaustive)** flat representation focusing on the leaf operations that launch GPU work. - -- **Granularity**: Each row is a single CPU operation instance from the trace -- **Completeness**: Only operations that launch GPU kernels are included (pure CPU operations are not shown) -- **Raw data**: This is unsummarized - you see every individual operation occurrence. The following sheets (ops_summary_by_category, ops_summary, ops_unique_args) provide different ways to aggregate this data. - ---- - -The following three sheets provide different levels of aggregation of the base `ops` data, following a **progressive disclosure of complexity**: - -### 2.2. ops_summary_by_category (Most Aggregated) - -**Purpose**: Highest-level summary - groups operations into broad computational categories (GEMM, Convolution, Attention, etc.). Use this to quickly identify which types of operations dominate your workload. - -### Columns - -| Column | Description | Calculation | -|--------|-------------|-------------| -| `op category` | Operation category | Possible values: GEMM, CONV_fwd, CONV_bwd, SDPA_fwd, SDPA_bwd, BN_fwd, BN_bwd, triton, elementwise, reduce, multi_tensor_apply, other | -| `Count` | Number of operations in this category | Count of unique CPU operations | -| `total_direct_kernel_time_ms` | Total GPU time in milliseconds | Sum of all GPU kernel durations launched by operations in this category | -| `Percentage (%)` | Percentage of total GPU time | `(total_direct_kernel_time_ms / sum of all kernel time) * 100` | -| `Cumulative Percentage (%)` | Running cumulative percentage | Sum of percentages from top to current row | - -**How operations are categorized**: - -Operations are automatically categorized based on name patterns and kernel characteristics. Some categories are detected from the operation name, while others are detected by inspecting the launched kernel names. - -| Category | Detection Method | Example Operations | -|----------|-----------------|-------------------| -| GEMM | Operation name | `aten::addmm`, `aten::mm`, `aten::bmm`, `aten::baddbmm` | -| CONV_fwd | Operation name | `aten::convolution`, `aten::miopen_convolution`, `aten::cudnn_convolution` | -| CONV_bwd | Operation name | `aten::convolution_backward` | -| SDPA_fwd | Operation name | `aten::_scaled_dot_product_flash_attention`, `aten::_flash_attention_forward` | -| SDPA_bwd | Operation name | `aten::_scaled_dot_product_flash_attention_backward` | -| BN_fwd | Operation name | `aten::batch_norm`, `aten::native_batch_norm`, `aten::cudnn_batch_norm` | -| BN_bwd | Operation name | `aten::native_batch_norm_backward`, `aten::cudnn_batch_norm_backward` | -| triton | Operation name | Operations starting with `triton` | -| elementwise | Kernel name inspection | Operations launching `at::native` elementwise kernels (e.g., `aten::relu`, `aten::add`, `aten::mul`) | -| reduce | Kernel name inspection | Operations launching `at::native` reduce kernels | -| multi_tensor_apply | Kernel name inspection | Operations launching `multi_tensor_apply` kernels | -| other | Default | Operations not matching any above patterns | - -**Use this when**: You want a high-level answer to "What types of operations are taking the most time?" - -**Code Reference**: Generated by `TreePerfAnalyzer.get_df_kernel_launchers_summary_by_category()` - ---- - -### 2.3. ops_summary (By Operation Name) - -**Purpose**: Mid-level summary - groups operations by their name (e.g., all `aten::addmm` calls together, all `aten::conv2d` calls together). Use this when you know which category is expensive and want to see which specific operations within that category are the culprits. - -### Columns - -| Column | Description | Calculation | -|--------|-------------|-------------| -| `name` | Operation name | PyTorch operation name (e.g., `aten::addmm`, `aten::_flash_attention_forward`) | -| `total_direct_kernel_time_sum` | Total GPU time in microseconds | Sum of all GPU kernel durations launched by this operation type | -| `Count` | Number of operations | Count of instances of this operation | -| `total_direct_kernel_time_ms` | Total GPU time in milliseconds | `total_direct_kernel_time_sum / 1000` | -| `Percentage (%)` | Percentage of total GPU time | `(total_direct_kernel_time_ms / sum of all kernel time) * 100` | -| `Cumulative Percentage (%)` | Running cumulative percentage | Sum of percentages from top to current row | -| `is_recompute` | *(Optional)* Whether this operation is part of activation recomputation | `True` or `False`. Only present when `--detect_recompute` is enabled. Same op name may appear in two rows (one for recompute, one for non-recompute). | - -**What this shows**: -- Each unique operation name gets one row (e.g., one row for all `aten::addmm` calls) -- All instances of the same operation are aggregated together, regardless of their input shapes, dtypes, or other arguments -- More granular than category view, but still hides variation due to different input arguments -- When `--detect_recompute` is enabled, rows are further split by recompute status - -**Use this when**: "I see GEMM is expensive - which specific GEMM operation is the problem: `aten::addmm`, `aten::mm`, or `aten::bmm`?" - -**Code Reference**: Generated by `TreePerfAnalyzer.get_df_kernel_launchers_summary()` - ---- - -### 2.4. ops_unique_args (Most Detailed) - -**Purpose**: Most detailed summary - groups operations by unique combinations of operation name AND input arguments (shapes, dtypes, strides, concrete inputs). Use this to identify which specific input patterns are causing performance issues. - -### Columns - -| Column | Description | Details | -|--------|-------------|---------| -| `name` | Operation name | PyTorch operation name | -| `Input Dims` | Input tensor dimensions | Shape of input tensors (e.g., `[[1, 512, 768], [768, 768]]`) | -| `Input type` | Input tensor data types | Data types of inputs (e.g., `['c10::BFloat16', 'c10::BFloat16']`) | -| `Input Strides` | Input tensor strides | Memory layout strides for each input tensor | -| `Concrete Inputs` | Scalar input values | Non-tensor inputs like kernel size, stride, padding | -| `operation_count` | Number of occurrences | How many times this exact operation+args combination appeared | -| `total_direct_kernel_time_sum` | Total GPU time in microseconds | Sum of GPU kernel time for all occurrences | -| `total_direct_kernel_time_mean` | Mean GPU time in microseconds | Average GPU time per occurrence | -| `total_direct_kernel_time_median` | Median GPU time in microseconds | Median GPU time across occurrences | -| `total_direct_kernel_time_std` | Standard deviation | Standard deviation of GPU time across occurrences (microseconds) | -| `total_direct_kernel_time_min` | Minimum GPU time | Fastest occurrence (microseconds) | -| `total_direct_kernel_time_max` | Maximum GPU time | Slowest occurrence (microseconds) | -| `ex_UID` | Example event UID | UID of one example event (for further analysis) | -| `kernel_details_summary` | Kernel execution details | Summary of which GPU kernels were launched and their statistics | -| `trunc_kernel_details` | Truncated kernel details | Shortened version of kernel_details_summary for readability | -| `Percentage (%)` | Percentage of total GPU time | `(total_direct_kernel_time_sum / sum of all kernel time) * 100` | -| `Cumulative Percentage (%)` | Running cumulative percentage | Sum of percentages from top to current row | -| `is_recompute` | *(Optional)* Whether this operation is part of activation recomputation | `True` or `False`. Only present when `--detect_recompute` is enabled. | - -**What makes arguments "unique"**: -- Same operation with different input shapes → different rows (e.g., `aten::addmm` with (1024, 512) vs (2048, 1024)) -- Same operation with different data types → different rows (e.g., BF16 vs FP32) -- Same operation with different strides → different rows (contiguous vs transposed) -- Each unique combination of (name + Input Dims + Input type + Input Strides + Concrete Inputs) gets one row - -**What this shows**: -- Statistics for each unique operation+args combination (count, mean, median, std, min, max) -- Which specific input patterns are slow vs fast -- Performance variation across different calls to the same operation - -**Use this when**: "I see `aten::addmm` is expensive - is it slow for all input shapes, or just specific ones? Are there outliers?" - ---- - -#### Understanding kernel_details_summary - -Provides aggregated kernel statistics across all occurrences of an operation+args combination. Shows which kernels are consistently launched and their performance distribution. All durations are in microseconds (µs). - -**Example for aten::addmm** (aggregated across 150 occurrences): -```python -[ - {'kernel_name': 'elementwise_kernel', 'count': 150, 'mean_duration_us': 2.3, 'std_dev_duration_us': 0.1}, - {'kernel_name': 'Cijk_Alik_Bljk_BBS_BH...', 'count': 150, 'mean_duration_us': 45.2, 'std_dev_duration_us': 3.5} -] - -# Analysis: addmm = elementwise (2.3 µs) + GEMM (45.2 µs) across 150 calls -# → GEMM is bottleneck, with moderate variance (std_dev=3.5) → check for outliers with ex_UID -# → elementwise is consistent (std_dev=0.1) -``` - -**Use this to identify**: -- **Bottlenecks**: Which kernel in a multi-kernel operation dominates time - - Example: In the GPT-3 XL analysis, `aten::addmm` consistently showed a Tensile GEMM kernel taking 97 µs (mean) while setup kernels took <5 µs each -- **Consistency**: Low std_dev = stable, high std_dev = investigate outliers with `ex_UID` - - Example: If `std_dev_duration_us` is 15.3 when `mean_duration_us` is 120.5, that's 12.7% variance - worth investigating -- **Backend recipe**: Which kernels are always launched together (e.g., elementwise + GEMM for addmm) -- **Call count validation**: Verify all occurrences launch the same kernels (same `count`) - -**Note**: `trunc_kernel_details` provides a shortened version for spreadsheet readability. - ---- - -**Deep-dive with `ex_UID`**: - -The `ex_UID` column provides a UID of one example event with this operation+arguments combination. You can use this to access the actual event object for deeper analysis: - -```python -# Get the event object -event = tree.get_UID2event(ex_UID) - -# Analyze call stack and context: -parent = tree.get_parent_event(event) # Get parent operation -children = tree.get_children_events(event) # Get child operations -gpu_events = tree.get_gpu_events(event) # Get launched GPU kernels -tree.traverse_parents_and_print(event) # See full call stack above this -tree.traverse_subtree_and_print(event) # See full call stack below this - -# Replay the operation for benchmarking: -from TraceLens import EventReplayer -replayer = EventReplayer(event, device='cuda') -replayer.replay() # Replays the exact operation with same inputs/args -``` - -This is useful when you want to investigate a specific slow case in detail or benchmark it in isolation. See [Event Replay Documentation](./EventReplay.md) for more details on replaying operations. - -**Replaying from Perf Report (No Trace Required)**: - -You can also replay operations directly from the Excel report without needing the original trace file: - -```python -import pandas as pd -import ast -from TraceLens import EventReplayer - -# Read ops from perf report -df = pd.read_excel('perf_report.xlsx', sheet_name='ops_unique_args') - -# Convert row to event format -def row_to_event(row): - return { - 'name': row['name'], - 'args': { - 'Input Dims': ast.literal_eval(row['Input Dims']), - 'Input Strides': ast.literal_eval(row['Input Strides']), - 'Input type': ast.literal_eval(row['Input type']), - 'Concrete Inputs': ast.literal_eval(row['Concrete Inputs']), - } - } - -# Replay an operation -row = df.iloc[0] # or filter by name/args -event = row_to_event(row) -replayer = EventReplayer(event, device='cuda') -replayer.replay() - -# Get standalone repro artifacts -repro_info = replayer.get_repro_info() # Returns serializable JSON -``` - -This is particularly useful for creating standalone reproducers or benchmarking specific operations without the full model or trace. See `examples/event_replayer_example.ipynb` for complete examples including batched replay. - -**Code Reference**: Generated by `TreePerfAnalyzer.get_df_kernel_launchers_unique_args()` - ---- - -## 3. Performance Metrics Sheets (Roofline Analysis) - -For certain operation categories (GEMM, CONV, SDPA, UnaryElementwise, BinaryElementwise), TraceLens generates additional sheets with **roofline model metrics**. These sheets help you understand how efficiently operations are using the GPU's computational and memory bandwidth capabilities. - -**Important Context**: While hardware counter profilers like `rocprof compute` and `nsight compute` reveal what the GPU actually executed—including effects of padding, redundant memory movement, and cache behavior—TraceLens focuses on the useful work dictated by operator semantics. Used together, these two perspectives provide a richer picture: hardware counters expose low-level execution characteristics, while TraceLens reveals the efficiency of the computation in context. - -### Understanding the Metrics Pipeline - -The performance metrics are calculated through a 4-step pipeline: - -``` -Trace Event → Parameter Extraction → Static Metrics + Runtime → Performance Metrics - ↑ ↑ - (Compute Model) (GPU Time) -``` - -#### Step 1: Event from Trace - -Starting with an operation event from the trace JSON: - -```json -{ - 'name': 'aten::addmm', - 'args': { - 'Input Dims': [[6144], [40960, 1536], [1536, 6144], [], []], - 'Input type': ['c10::BFloat16', 'c10::BFloat16', 'c10::BFloat16', 'Scalar', 'Scalar'], - 'Input Strides': [...] - } -} -``` - -#### Step 2: Parameter Extraction - -TraceLens uses operation-specific **performance models** to extract relevant parameters from the event's `args` field: - -```python -# For aten::addmm: A @ B + C where A is (M, K), B is (K, N), C is (M, N) -params = { - 'M': 40960, # From Input Dims[1][0] - 'N': 6144, # From Input Dims[2][1] - 'K': 1536, # From Input Dims[1][1] - 'bias': True, # C tensor present - 'dtype': 'c10::BFloat16' # From Input type -} -``` - -**Note**: Each operation type (GEMM, Conv, SDPA, etc.) has its own `get_param_details()` method that knows how to extract the relevant parameters from that operation's argument structure. See [Operation Parameters Reference](#operation-parameters-reference) below for details on what gets extracted for each operation type. - -#### Step 3: Parallel Calculation - -Once parameters are extracted, two pieces of information are computed in parallel: - -**A) Static Operation Metrics** (via Compute Model) - -The performance model calculates the **theoretical work** based on the operation type: - -```python -# GEMM compute model -GFLOPS = (2 * M * N * K) / 1e9 # 773.35 GFLOPS -Bytes_moved = (M*K + K*N + M*N) * bytes_per_elem # 618.01 MB (for BF16: 2 bytes/elem) -FLOPS_per_Byte = GFLOPS * 1e9 / Bytes_moved # 1193.38 (arithmetic intensity) -``` - -These metrics are **static** - they depend only on the operation parameters, not on actual execution. - -**B) Kernel Time** (from Trace2Tree) - -The actual GPU execution time is extracted by: -1. Finding all GPU kernels launched by this operation (using Trace2Tree's hierarchical analysis) -2. Using `GPUEventAnalyser` to compute total busy time, accounting for kernel overlaps - -```python -T = 1884 µs # Measured kernel execution time -``` - -#### Step 4: Runtime Performance Metrics - -Finally, static work metrics are combined with measured time to produce **runtime performance**: - -```python -TFLOPS/s = GFLOPS / (T / 1e6) = 773.35 / (1884 / 1e6) = 410.48 TFLOPS/s -TB/s = (Bytes_moved / 1e12) / (T / 1e6) = 0.34 TB/s -``` - -These metrics tell you: -- **TFLOPS/s**: How many trillion floating-point operations per second were achieved -- **TB/s**: How many terabytes per second of memory bandwidth were utilized - -### Why This Matters: Roofline Analysis - -The combination of **TFLOPS/s**, **TB/s**, and **FLOPS/Byte** (arithmetic intensity) allows you to perform **roofline analysis**: - -- **High FLOPS/Byte** (compute-intensive): Performance is limited by compute throughput (TFLOPS/s) - - Example: Large GEMM operations (e.g., 6144×2048 × 2048×8192) - - Goal: Maximize TFLOPS/s (approach GPU's peak compute) - -- **Low FLOPS/Byte** (memory-intensive): Performance is limited by memory bandwidth (TB/s) - - Example: Element-wise operations, small GEMMs (e.g., 2048×2048) - - Goal: Maximize TB/s (approach GPU's peak bandwidth) - -**The Roofline "Knee Point"**: The boundary between memory-bound and compute-bound is determined by the GPU's hardware characteristics: - -``` -Arithmetic Intensity Threshold = Peak FLOPS / Peak Bandwidth -``` - -For example: -- **MI325X**: 1300 TFLOPS / 6000 GB/s = **~217 FLOPs/Byte** -- **H100**: 1000 TFLOPS / 3350 GB/s = **~298 FLOPs/Byte** -- **MI300X**: 1300 TFLOPS / 5300 GB/s = **~245 FLOPs/Byte** - -Operations with **FLOPs/Byte below this threshold** are memory-bound; operations **above** are compute-bound. This is why small GEMMs (FLOPs/Byte ~8-50) are memory-bound, while large GEMMs (FLOPs/Byte ~100-300) are compute-bound on these GPUs. - -By comparing your achieved TFLOPS/s and TB/s against the GPU's theoretical peaks, you can identify optimization opportunities. - -**Interpreting Performance Numbers**: - -Understanding what "good" performance looks like requires comparing against theoretical peaks and max-achievable performance: - -| GPU | Peak Compute (BF16) | Peak Memory BW | Example Utilization | -|-----|---------------------|----------------|---------------------| -| MI325X | ~1.3 PFLOPS | ~6 TB/s | 500-800 TFLOPS/s = 38-62% of peak (typical for medium GEMMs) | -| H100 | ~1.0 PFLOPS | ~3.35 TB/s | 400-700 TFLOPS/s = 40-70% of peak | -| MI300X | ~1.3 PFLOPS | ~5.3 TB/s | Similar to MI325X | - -**Understanding Theoretical vs. Real-World Performance**: - -TraceLens uses idealized assumptions that represent upper bounds on performance. The actual roofline model has two key differences from the theoretical one: - -1. **Peak FLOPS**: The theoretical peak represents hardware limits, but real-world applications typically achieve lower performance due to realistic constraints. AMD's Max-Achievable FLOPS (MAF) methodology provides more realistic performance targets. For details, see: - - [Understanding Peak and Max-Achievable FLOPS](https://rocm.blogs.amd.com/software-tools-optimization/Understanding_Peak_and_Max-Achievable_FLOPS/README.html) - - [Measuring Max-Achievable FLOPS (Part 2)](https://rocm.blogs.amd.com/software-tools-optimization/measuring-max-achievable-flops-part2/README.html) - -2. **Arithmetic Intensity**: TraceLens assumes **100% cache hit rate** — each memory location accessed once from global memory, then perfectly cached. For example, in a GEMM, matrices A and B are counted only once even if elements are reused. In reality: - - Cache misses, evictions, and redundant loads cause **actual memory movement to be higher** - - This means **actual arithmetic intensity is lower** than TraceLens calculates - - **Impact**: An operation that TraceLens shows as compute-bound (high FLOPs/Byte) might actually be memory-bound in practice - - This is a **common practice** in performance modeling (see [NVIDIA's approach](https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#math-mem-bounds)) - - For typical **compute-bound operations** (large GEMMs, SDPA, Convolutions), this limitation has minimal practical impact since they remain compute-bound even with lower arithmetic intensity - -Hardware profilers like `rocprof compute` or `nsight compute` measure actual memory transactions and are needed to determine true arithmetic intensity and memory-boundedness. - -**Real Examples** (from GPT-3 XL on MI325X, BF16): -``` -Operation TFLOPS/s TB/s FLOPs/Byte Interpretation -────────────────────────────────────────────────────────────────────────────── -mm(256×256 × 256×256) 45 2.1 ~8 Memory-bound, 35% BW utilization -mm(2048×6144 × 6144×2048) 531 0.61 ~138 Compute-bound, 40% efficiency -mm(6144×2048 × 2048×2048) 624 0.71 ~117 Compute-bound, 48% efficiency -addmm(6144×2048 × 2048×8192) 762 0.59 ~203 Compute-bound, 58% efficiency -``` - -**Understanding compute-bound vs. memory-bound**: -- **Memory-bound** (FLOPs/Byte < ~50): Small GEMM with arithmetic intensity of ~8. Performance is limited by memory bandwidth (~2.1 TB/s), not compute. To optimize, focus on improving memory access patterns. -- **Compute-bound** (FLOPs/Byte > ~100): Large GEMMs with high arithmetic intensity. Performance is limited by compute throughput (531-762 TFLOPS/s). The 40% vs 58% efficiency difference reflects kernel optimization quality (tile sizes, wave occupancy), not the compute vs. memory boundedness. - -**Important**: Arithmetic intensity (FLOPs/Byte) determines whether an operation is compute-bound or memory-bound. The percentage of peak achieved indicates optimization quality within that constraint. See [NVIDIA's GEMM Performance Guide](https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html) for more details on this distinction. - -### What These Sheets Contain - -Performance metrics sheets are generated for operations with available performance models: -- **GEMM**: Matrix multiply operations (addmm, mm, bmm, baddbmm, etc.). See [GEMMs in AI Workloads](./conceptual/aimodels_gemms.md) for how model dimensions (batch size, sequence length, hidden dimension) map to GEMM shapes. -- **CONV_fwd / CONV_bwd**: Convolution operations -- **SDPA_fwd / SDPA_bwd**: Scaled dot-product attention -- **UnaryElementwise / BinaryElementwise**: Element-wise operations - -Each sheet contains: -- All columns from `ops_unique_args` (operation name, arguments, occurrences, etc.) -- **Static metrics**: GFLOPS, Data Moved (MB), FLOPS/Byte (calculated once from parameters) -- **Compute Spec**: Combined compute type and precision (e.g., `matrix_bf16`, `vector_fp32`). This indicates: - - `matrix_*`: Operations using matrix compute units (GEMM, CONV, SDPA) - - `vector_*`: Operations using vector compute units (elementwise) - - Precision: `fp8`, `fp16`, `bf16`, `fp32`, `fp64` -- **Roofline metrics** (when `--gpu_arch_json_path` provided): Roofline Time (µs), Pct Roofline - compares achieved time to theoretical roofline bound -- **Runtime metrics**: Kernel Time (µs), TFLOPS/s, TB/s (statistics across all occurrences) - - `mean`, `median`: Central tendency - use median if variance is high - - `std_dev`: Variability - high std_dev (>10% of mean) suggests inconsistent performance - - `min`, `max`: Range - large spread may indicate outliers worth investigating - -**Note**: These sheets contain all the columns from `ops_unique_args`, so you can replay operations from these sheets using the same approach described in [Replaying from Perf Report](#replaying-from-perf-report-no-trace-required). Simply read the desired performance metrics sheet (e.g., `GEMM`, `SDPA_fwd`) instead of `ops_unique_args`. - -**Code Reference**: Generated by `TreePerfAnalyzer.build_df_perf_metrics()` and `TreePerfAnalyzer.summarize_df_perf_metrics()` - ---- - -### Operation Parameters Reference - -TraceLens extracts operation-specific parameters from trace events to calculate theoretical FLOPs and memory traffic. Each operation type has its own parameter extraction logic based on what information is needed for its performance model. - -**Common sources**: -- `Input Dims`: Tensor shapes -- `Input type`: Data types -- `Concrete Inputs`: Scalar arguments (stride, padding, etc.) - -**Data type sizes**: `fp64` = 8 bytes, `fp32` = 4 bytes, `bf16/fp16` = 2 bytes, `fp8` = 1 byte - ---- - -#### GEMM (Matrix Multiply) - -| Parameter | Meaning | Used in | -|-----------|---------|---------| -| **M** | Number of rows in first matrix | All GEMM ops | -| **N** | Number of columns in second matrix | All GEMM ops | -| **K** | Inner dimension (A cols = B rows) | All GEMM ops | -| **B** | Batch size | bmm, baddbmm | -| **bias** | Whether bias is added | addmm, baddbmm | -| **dtype** | Data type (BFloat16, Float32, etc.) | All GEMM ops | - ---- - -#### Convolution - -| Parameter | Meaning | -|-----------|---------| -| **input_shape** | Input tensor shape (N, C_in, H, W, ...) | -| **filter_shape** | Filter/weight shape (C_out, C_in/groups, kH, kW, ...) | -| **stride** | Stride for convolution (e.g., (1, 1)) | -| **padding** | Padding applied (e.g., (0, 0)) | -| **dilation** | Dilation factor | -| **groups** | Number of groups for grouped convolution | -| **bias** | Whether bias is present | -| **dtype** | Data type | - ---- - -#### SDPA (Scaled Dot-Product Attention) - -| Parameter | Meaning | -|-----------|---------| -| **B** | Batch size | -| **N_Q** | Query sequence length | -| **N_KV** | Key/Value sequence length | -| **H_Q** | Number of query attention heads | -| **H_KV** | Number of key/value heads (for GQA/MQA) | -| **d_h_qk** | Head dimension for Q and K | -| **d_h_v** | Head dimension for V | -| **causal** | Whether causal masking is applied | -| **dropout** | Dropout probability | -| **dtype** | Data type | - -**Note**: Different attention implementations use different tensor layouts (BHND vs BNHD) - ---- - -#### Element-wise Operations - -| Parameter | Meaning | -|-----------|---------| -| **shape** | Tensor shape | -| **dtype** | Data type | - -For binary ops (add, mul, etc.), two shapes are extracted and broadcasting is handled automatically. - ---- - -**FLOPs and Bytes Calculation**: For the specific formulas used to calculate FLOPs and memory traffic from these parameters, see the performance model implementations in `TraceLens/PerfModel/perf_model.py`. - -**Extending with Custom Operations**: Performance metrics sheets are only generated for operations that have a registered performance model. If your workload includes custom operations (e.g., from Megatron, vLLM, or other libraries), you can extend TraceLens by: -1. Creating a performance model class for your operation (inherit from `GEMM`, `CONV`, `SDPA`, etc.) -2. Implementing `get_param_details()`, `flops()`, and `bytes()` methods -3. Passing an extension file via `--extension_file` when generating the report - -See `examples/megatron_extension.py` for a complete example of extending TraceLens with custom Megatron operations. - -**Note**: If your custom operation is frequently used across multiple projects, we can work to add it as a native operation in TraceLens. Please open an issue or reach out to discuss integration. - ---- - -## 4. Collective Communication Analysis - -**Purpose**: Analyzes NCCL collective communication operations from a single rank's perspective. Shows which collectives are taking the most time on this rank. - -**Sheet**: `coll_analysis` - -**Note**: This is single-rank analysis. For multi-rank synchronization analysis (skew, stragglers), see [NCCL Analyzer documentation](./NcclAnalyser.md) and [Multi-Rank Collective Report](./generate_multi_rank_collective_report_pytorch.md). - -### What This Sheet Contains - -This sheet provides aggregated statistics for collective operations seen by this rank, grouped by collective type, process group, data type, and message size. - -### Key Columns - -**Collective Identification**: -| Column | Description | -|--------|-------------| -| `rank` | Rank ID (single rank from this trace) | -| `Process Group Name` | Process group identifier | -| `Process Group Ranks` | List of ranks in this process group (e.g., `[0, 1, 2, 3, 4, 5, 6, 7]`) | -| `Collective name` | Type of collective operation (e.g., `allreduce`, `allgather`, `reduce_scatter`) | -| `Group size` | Number of ranks in the process group | -| `dtype` | Data type (e.g., `Float`, `BFloat16`) | -| `In msg nelems` | Number of elements in input message | -| `Out msg nelems` | Number of elements in output message | -| `In split size` | Input split configuration (for split collectives) | -| `Out split size` | Output split configuration (for split collectives) | -| `stream` | GPU stream ID where collective executes | - -**Message Sizes**: -| Column | Description | -|--------|-------------| -| `In msg size (MB)_first` | Input message size in megabytes | -| `Out msg size (MB)_first` | Output message size in megabytes | - -**Duration Statistics** (all times in microseconds): -| Column | Description | -|--------|-------------| -| `dur_sum` | Total duration across all occurrences | -| `dur_mean` | Mean duration per occurrence | -| `dur_std` | Standard deviation of duration | -| `dur_min` | Minimum duration | -| `dur_max` | Maximum duration | -| `operation_count` | Number of times this collective appeared | - -### Understanding the Metrics - -**Duration**: Time this rank spends in the collective operation (in microseconds). This includes: -- Synchronization delay waiting for other ranks -- Actual data transfer time - -**Important**: From a single rank's perspective, we cannot determine if time is spent waiting for other ranks (sync) or in actual communication. For multi-rank analysis with skew detection and straggler identification, use NCCL Analyzer with traces from all ranks. See [NCCL Analyzer documentation](./NcclAnalyser.md). - -### Interpreting Results - -**High total duration**: Sort by `dur_sum` to find the most time-consuming collective operations on this rank. - -**High variance** (large `dur_std` or difference between `dur_min` and `dur_max`): -- Indicates inconsistent performance -- May suggest network contention or varying degrees of synchronization delay -- Consider investigating with multi-rank traces to identify stragglers - -**Frequent operations** (high `operation_count`): -- Even if individual operations are fast, high frequency can add up (`dur_sum` accounts for this) -- Check if collectives can be batched or overlapped with computation - -**Example Analysis**: -``` -If you see: -- allreduce with dur_mean=3596 µs (3.6 ms), operation_count=2 -- But dur_std=35.5 µs (low variance) -→ Collective is consistent and moderately fast - -If you see: -- allreduce with dur_mean=192.6 µs, dur_std=313.7 µs, dur_max=1019.4 µs -→ High variance! One occurrence took 1ms while another took 60µs -→ Investigate with multi-rank trace to find if this rank or another is the straggler -``` - -**Code Reference**: Generated by `NcclAnalyser.build_df_summary_long()`. Enable with `--disable_coll_analysis` flag (enabled by default). - ---- - -## 5. Additional Sheets - -Depending on the command-line arguments used when generating the report, additional analysis sheets may be present: - -- **kernel_summary**: Per-kernel statistics aggregated by kernel name (enabled with `--kernel_summary`) - -- **short_kernel_histogram**, **short_kernels_summary**: Analysis of very short kernels (enabled with `--short_kernel_study`) - -- **unified_perf_summary**: Unified perf metrics for all ops with perf models or leaf ops that launch GPU kernels. Includes GFLOPS, TFLOPS/s, Data Moved, FLOPS/Byte, TB/s metrics aggregated by unique args. When `--detect_recompute` is enabled, an `is_recompute` column is added to split rows by recompute status. - ---- - -## 6. Common Analysis Workflows - -**Typical top-down analysis flow**: - -1. **Start with `gpu_timeline`**: Get high-level time breakdown (computation, communication, idle) - - High idle time → CPU bottleneck or kernel launch issues - - High exposed communication → Poor overlap with computation - -2. **Identify bottleneck categories** (`ops_summary_by_category`): Which operation types dominate? - - GEMM, Convolution, Attention, Elementwise, etc. - -3. **Find expensive operations** (`ops_summary`): Which specific operations take the most time? - -4. **Analyze variants** (`ops_unique_args`): Which input shapes/arguments are slow? - - Compare performance across different dimensions - - Check for stride or alignment issues - -5. **Deep dive with roofline** (GEMM, SDPA_fwd, etc.): Assess efficiency vs. hardware peaks - -6. **Check collectives** (`coll_analysis`): Analyze communication costs in distributed training - -7. **Replay operations**: Reproduce and benchmark specific cases in isolation - ---- - -## 7. Related Documentation - -- [Performance Report Generation Guide](./generate_perf_report.md) - How to generate reports -- [Trace2Tree Documentation](./Trace2Tree.md) - Understanding the call stack analysis -- [GEMMs in AI Workloads](./conceptual/aimodels_gemms.md) - Understanding how model dimensions map to GEMM shapes -- [TreePerf Examples](../examples/tree_perf_example.ipynb) - Example analysis workflows -- [Call Stack Analysis Example](../examples/call_stack_analysis.ipynb) - Real workflow for debugging performance - From 4e294bfd9f94c7bc8f35b075704ce95eb1988600 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Fri, 17 Jul 2026 15:31:05 -0400 Subject: [PATCH 02/19] docs: add agentic-mode how-to and retire docs_original Author a proper how-to/agentic-mode topic from the TraceLens Agent README (analysis modes, prerequisites, chat and headless CLI usage, report anatomy, workflow architecture) and wire it into the How-to nav and landing cards. Delete the last docs_original file (the deferred Agentic_Mode symlink) and the now-empty docs_original directory, completing the migration to the ROCm docs tree. The copyright regression test now passes cleanly (the Windows-only symlink false-positive is gone). Co-authored-by: Cursor --- docs/how-to/agentic-mode.md | 229 ++++++++++++++++++++++++++++++++++ docs/index.rst | 1 + docs/sphinx/_toc.yml.in | 2 + docs_original/Agentic_Mode.md | 1 - 4 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 docs/how-to/agentic-mode.md delete mode 120000 docs_original/Agentic_Mode.md diff --git a/docs/how-to/agentic-mode.md b/docs/how-to/agentic-mode.md new file mode 100644 index 000000000..c26e4a556 --- /dev/null +++ b/docs/how-to/agentic-mode.md @@ -0,0 +1,229 @@ + + + +# Generate optimization recommendations with the TraceLens Agent +```{meta} +:description: Learn how to run the TraceLens Agent, an agentic workflow that turns a GPU trace into a prioritized, stakeholder-facing performance optimization report. +:keywords: TraceLens, TraceLens Agent, agentic analysis, performance optimization, roofline, kernel fusion, GEMM, ROCm, AMD Instinct, optimization report +``` + +This topic shows how to run the *TraceLens Agent*, an agentic performance-analysis +workflow that reads a GPU trace and produces a single stakeholder-facing report, +`analysis.md`, organized as a prioritized bottleneck list. Findings are ranked and +grouped into three tiers — compute kernel optimizations, kernel fusion +opportunities, and system-level optimizations — and each finding carries the +supporting evidence, the reasoning behind the call-out, and a concrete resolution. + +The agent combines a structured, skill-driven workflow with codified TraceLens +analysis for repeatable, reliable results. + +## Analysis modes + +The agent runs in one of two modes: + +- *Standalone* — single-trace roofline analysis. Use this when you have one trace + and want to find where performance falls short of hardware limits. This is the + recommended default. +- *Comparative* — two-trace gap analysis. The agent compares a primary trace + against a reference trace (for example, a different platform or a tuned config) + and identifies inefficiencies in the primary trace relative to the reference. + Comparative analysis works best when both traces come from the same framework; + cross-framework comparisons can produce misleading gap estimates because of + structural differences in operation call stacks. + +Support depends on the execution mode of the traced workload: + +| Execution mode | Standalone | Comparative | +|---|---|---| +| Eager | Supported | Supported | +| Graph + capture | Supported | Not supported | +| Graph | Not supported | Not supported | + +## Before you begin + +### Install TraceLens + +Install locally, or into your container or virtual environment (see +[Install TraceLens](../install/installation.md)): + +```bash +pip install git+https://github.com/AMD-AGI/TraceLens.git +``` + +### Collect a trace + +The orchestrator runs against a single `torch.profiler` trace (`.json` or +`.json.gz`). Collection is workload-specific: + +- *Training and eager inference traces* — instrument your loop with + `torch.profiler.profile(...)`, enabling CPU-side call-stack and shape capture + (`with_stack=True`, `record_shapes=True`). Profile a representative steady-state + window (a handful of post-warmup steps) and export with + `prof.export_chrome_trace(...)`. A single rank's trace is enough for per-rank + analysis. +- *vLLM or SGLang inference traces* — collection has framework-, version-, and + execution-mode-specific requirements. Follow + [Generate a PyTorch inference performance report](./generate-perf-report-pytorch-inference.md). + For graph-mode workloads you produce two artifacts: a graph-replay trace and a + graph-capture folder. In inference mode with execution mode + `graph replay + capture`, TraceLens merges call-stack and shape information from + the capture folder into the replay tree before analysis. + +### Establish a hardware baseline + +Roofline analysis compares each measured kernel against your GPU's max-achievable +TFLOPS and HBM bandwidth, so it needs a `.json` arch file for your +hardware. Bundled arch files ship with the package; if your platform isn't +included — or you want stack-specific measured values instead of published specs — +generate benchmark-derived peak TFLOPS and HBM bandwidth with the GPU +microbenchmarking suite, which writes the arch JSON in the shape the roofline +expects. + +## Run the agent from a chat + +```{note} +The examples use the Cursor IDE and CLI, but the orchestrator skills are portable +and also work with other agentic runners that support skill-file discovery. +``` + +In a chat with a capable model, invoke one of: + +- Standalone (single trace): + + ```text + Follow the analysis orchestrator installed with TraceLens and run the full + agentic analysis workflow on + ``` + +- Comparative (two traces) — always pass the *baseline* trace first: + + ```text + Follow the analysis orchestrator installed with TraceLens and run the full + agentic analysis workflow on and + ``` + +If prompted, provide the trace file path, the platform of the first trace, the +analysis mode (`default` for training and non-vLLM/SGLang eager inference, or +`inference` for vLLM/SGLang), the execution mode and capture-folder path for +inference, environment details (node, container, or virtual environment), and an +optional output directory. + +## Run the agent headless (CLI) + +Use the `agent` CLI to run the orchestrator non-interactively. Install it with: + +```bash +curl https://cursor.com/install -fsS | bash +``` + +Pass every parameter inline so no interactive prompts are needed — useful for +batch runs and continuous-integration pipelines. For example, for a default +standalone run on a remote node with a container: + +```bash +agent --model --print --force --trust \ + "Follow the analysis orchestrator installed with the TraceLens pip package + (look under TraceLens/Agent/Analysis/.cursor/skills/ in the package + installation directory) and run the full agentic analysis workflow on + with platform , analysis mode default, + node , container , output to " +``` + +For vLLM or SGLang inference, set `analysis mode inference` and add +`execution mode eager`, or `execution mode graph replay + capture` together with +`capture folder `. + +## Read the results + +Only `analysis.md` is intended for end-user review. Everything else under +`analysis_output/` is agent internals — intermediates the orchestrator and +sub-agents pass between steps (for example `system_findings/`, +`category_findings/`, `category_data/`, `metadata/`, `perf_report_csvs/`, and +`perf_report.xlsx`). + +Every report has the same top-level structure: + +1. *Executive summary* — a one-paragraph workload characterization, a metrics + table (total time, compute percentage, idle percentage, exposed-communication + percentage, and top bottleneck category), and a performance-improvement chart. +2. *Compute kernel optimizations* — a top-operations table followed by per-category + priority items (`P1`, `P2`, and so on) sorted by `impact_score`, each with an + Insight, Action, and Impact triplet. +3. *Kernel fusion opportunities* (experimental) — candidate modules to fuse. +4. *System-level optimizations* (experimental) — idle time, memory-copy overhead, + and compute/communication overlap. +5. *Detailed analysis* — per-priority-item drill-down with identification + rationale, data tables, and reasoning. + +### Programmatic interface + +Every report embeds HTML comment markers so a downstream system can consume it +without parsing prose: + +- `` … `` wraps each priority item's + Impact line; `mid` is the canonical `impact_score` and the category is the + analyzer category (`gemm`, `sdpa_fwd`, `elementwise`, `norm_fwd`, and so on). +- Per-item anchors (`#detailed-analysis-compute-pN`, `#detailed-analysis-fusion-PN`, + `#detailed-analysis-system-pN`) link each summary card to its detailed reasoning + section. + +## How the analysis works + +The workflow splits into three independently composable tiers: + +- *System-level optimizations* — issues that affect the GPU pipeline as a whole, + such as idle time, memory-copy overhead, collective-communication blocking, and + compute/communication overlap. +- *Kernel fusion opportunities* (experimental) — multi-kernel modules that could be + fused, with estimated savings. +- *Compute kernel optimizations* — per-category kernel analysis (GEMM, attention, + elementwise, and so on) focused on individual operation efficiency. + +The *analysis orchestrator* skill coordinates the workflow: it queries user +inputs, runs TraceLens to pre-compute trace data, invokes the system-level and +compute-kernel sub-agents in parallel, then validates outputs, aggregates +findings, and generates the prioritized report. The orchestrator and its +sub-agents run on a capable reasoning model declared in each agent's front matter. + +The high-level steps are: + +1. Query user inputs (comparison scope, trace paths, platforms, analysis mode, + environment setup). +2. Generate the performance report (branching on analysis mode and comparison + scope). +3. Prepare category data (GPU utilization, top operations, tree data, multi-kernel + data, category filtering) and extract fusion candidates. +4. Identify the model. +5. Run system-level analysis (CPU/idle, multi-kernel, and kernel fusion) in + parallel. +6. Run the compute-kernel sub-agents in parallel. +7. Validate sub-agent outputs for time sanity, efficiency anomalies, and coverage. +8. Aggregate results across all three tiers. +9. Generate the final `analysis.md` report. + +### Sub-agents + +System-level sub-agents cover CPU and idle analysis, memory-copy and +collective-communication patterns, and kernel fusion. Compute-kernel sub-agents +cover GEMM (`mm`, `bmm`, `addmm`), scaled dot-product attention, elementwise, +reduction, Triton-compiled kernels, Mixture-of-Experts, normalization, +convolution, and a generic analyzer for uncategorized operations. + +### Execution environments + +During the input step the orchestrator asks whether you're running locally or on a +cluster, and builds the appropriate command prefixes automatically — direct +execution, a virtual-environment activation prefix, an SSH wrapper for a remote +node, or an SSH plus container-exec wrapper for a containerized node. + +## Related topics + +- [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) +- [Generate a PyTorch inference performance report](./generate-perf-report-pytorch-inference.md) +- [Analyze performance with TreePerf](./tree-perf-analysis.md) +- [GEMM analysis](../conceptual/gemm-analysis.md) +- [The Trace2Tree data model](../conceptual/trace2tree.md) diff --git a/docs/index.rst b/docs/index.rst index 53ab39c8a..41759df83 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -33,6 +33,7 @@ The TraceLens source code is hosted at `github.com/AMD-AGI/TraceLens ` * :doc:`Fuse multi-rank traces ` * :doc:`Analyze performance with TreePerf ` + * :doc:`Generate optimization recommendations ` .. grid-item-card:: Concepts diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index fc5b1872e..40198f193 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -50,6 +50,8 @@ subtrees: title: Analyze collective communication - file: how-to/origami-integration title: Estimate kernel times with Origami + - file: how-to/agentic-mode + title: Generate optimization recommendations - caption: Concepts entries: diff --git a/docs_original/Agentic_Mode.md b/docs_original/Agentic_Mode.md deleted file mode 120000 index 9fa51d05a..000000000 --- a/docs_original/Agentic_Mode.md +++ /dev/null @@ -1 +0,0 @@ -../TraceLens/Agent/Analysis/README.md \ No newline at end of file From a6585d0169985e16ef6fefac558716edcfc220a2 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Fri, 17 Jul 2026 15:46:32 -0400 Subject: [PATCH 03/19] Reconcile README with #817 and fix install paths after rebase Co-authored-by: Cursor --- README.md | Bin 24596 -> 12298 bytes docs/how-to/agentic-mode.md | 2 +- docs/how-to/compare-perf-reports.md | 2 +- docs/how-to/gpu-event-analysis.md | 2 +- docs/how-to/nccl-analysis.md | 2 +- docs/how-to/tree-perf-analysis.md | 2 +- docs/index.rst | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8c64a58db85286ddda58b37602a9001aba14d31d..377369ebe52bf0902f3785f94724a76094cc3d21 100755 GIT binary patch literal 12298 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 X$FYBfQy*B;j`6jQz8jUc0)zKYS>S7& literal 24596 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 + * :doc:`Install TraceLens ` .. grid-item-card:: How to From 970f254a5e523e05406454f358f88a9531bab507 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Fri, 17 Jul 2026 16:28:54 -0400 Subject: [PATCH 04/19] Preserve triton- prefix on perf model walkthrough doc Co-authored-by: Cursor --- docs/conceptual/gemm-analysis.md | 2 +- ...rf-model-walkthrough.md => triton-perf-model-walkthrough.md} | 0 docs/index.rst | 2 +- docs/reference/api-reference.md | 2 +- docs/sphinx/_toc.yml.in | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename docs/conceptual/{perf-model-walkthrough.md => triton-perf-model-walkthrough.md} (100%) diff --git a/docs/conceptual/gemm-analysis.md b/docs/conceptual/gemm-analysis.md index 7bf133395..c340170dc 100644 --- a/docs/conceptual/gemm-analysis.md +++ b/docs/conceptual/gemm-analysis.md @@ -464,7 +464,7 @@ For hands-on usage, work through the [`examples/gemm_dim_eff.ipynb`](https://git ## Related topics - [Trace2Tree](../conceptual/trace2tree.md) -- [Perf model walkthrough](../conceptual/perf-model-walkthrough.md) +- [Perf model walkthrough](../conceptual/triton-perf-model-walkthrough.md) - [Torch profiling analysis](../conceptual/torch-profiling-analysis.md) - [Performance report columns](../reference/perf-report-columns.md) - [Generate a performance report from PyTorch](../how-to/generate-perf-report-pytorch.md) diff --git a/docs/conceptual/perf-model-walkthrough.md b/docs/conceptual/triton-perf-model-walkthrough.md similarity index 100% rename from docs/conceptual/perf-model-walkthrough.md rename to docs/conceptual/triton-perf-model-walkthrough.md diff --git a/docs/index.rst b/docs/index.rst index 70409dc13..fddfebb6e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -40,7 +40,7 @@ The TraceLens source code is hosted at `github.com/AMD-AGI/TraceLens ` * :doc:`Understanding PyTorch traces ` * :doc:`GEMM analysis ` - * :doc:`Triton kernel performance model ` + * :doc:`Triton kernel performance model ` .. grid-item-card:: Tutorials diff --git a/docs/reference/api-reference.md b/docs/reference/api-reference.md index 19ed92659..8472b8e8c 100644 --- a/docs/reference/api-reference.md +++ b/docs/reference/api-reference.md @@ -187,7 +187,7 @@ example notebook under `examples/`. |--------|---------|-----------| | `Trace2Tree` | Build and navigate the hierarchical event tree (Python ops → CPU dispatch → GPU kernels). | [Trace2Tree data model](../conceptual/trace2tree.md), [`trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb) | | `TreePerf` | GPU-timeline breakdown, per-op performance, and roofline metrics. | [Analyze performance with TreePerf](../how-to/tree-perf-analysis.md), [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) | -| `PerfModel` | Compute and roofline performance models for operators. | [GEMM analysis](../conceptual/gemm-analysis.md), [Triton kernel performance model](../conceptual/perf-model-walkthrough.md) | +| `PerfModel` | Compute and roofline performance models for operators. | [GEMM analysis](../conceptual/gemm-analysis.md), [Triton kernel performance model](../conceptual/triton-perf-model-walkthrough.md) | | `NcclAnalyser` | Multi-rank collective latency/bandwidth/skew analysis. | [Analyze collectives with NcclAnalyser](../how-to/nccl-analysis.md), [`nccl_analyser_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nccl_analyser_example.ipynb) | | `TraceDiff` | Morphological comparison of two trace trees. | [Compare two traces](../how-to/compare-traces.md), [`trace_diff_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace_diff_example.ipynb) | | `EventReplay` | Extract and replay isolated operations. | [Replay a single operation](../how-to/event-replay.md), [`event_replayer_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/event_replayer_example.ipynb) | diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index 40198f193..74800afbc 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -63,7 +63,7 @@ subtrees: title: Tensor shape metadata - file: conceptual/gemm-analysis title: GEMM analysis - - file: conceptual/perf-model-walkthrough + - file: conceptual/triton-perf-model-walkthrough title: Triton kernel performance model - caption: Tutorials From 73e80020c5bfebffd19c1b06c30799df6c5e78ad Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Fri, 17 Jul 2026 17:38:27 -0400 Subject: [PATCH 05/19] docs: restore all2allv spread metric, openpyxl note, and straggler example in collective report Co-authored-by: Cursor --- docs/how-to/collective-report.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/how-to/collective-report.md b/docs/how-to/collective-report.md index b231d51b5..249f166f3 100644 --- a/docs/how-to/collective-report.md +++ b/docs/how-to/collective-report.md @@ -59,6 +59,11 @@ neither `--output_xlsx_path` nor `--output_csvs_dir` is given, the workbook is written to `--trace_dir` (or the lowest common directory of the resolved traces). +```{note} +Excel output requires `openpyxl`; TraceLens installs it automatically if it's +missing. Use `--output_csvs_dir` to write CSV files instead. +``` + ## Step 2: Read the report sheets Each collective is assigned a `collective_id` (its Process Group name plus an @@ -107,6 +112,7 @@ The all2allv sheets instead report: | `throughput (GB/s)` | Total data moved / wall-clock time. Compare against link bandwidth to gauge efficiency. | | `wall_time` | End-to-end time from the first rank entering to the last finishing. | | `size_imbalance` | Max rank's data ÷ mean. `1.0` = balanced; `>> 1.0` = some ranks carry disproportionate load (common when some MoE experts are hotter than others). | +| `max_rank_dur / min_rank_dur` | Spread in per-rank kernel time. A large spread together with high `size_imbalance` points to rebalancing expert routing or dropping tokens. | | `skew in start time` | How far apart ranks enter the collective — large skew means some ranks are blocked by upstream compute. | To diagnose low throughput, check `size_imbalance`: @@ -130,6 +136,19 @@ the others to wait in implicit synchronization. Open the `straggler_summary` sheet: it's sorted so the *straggler is the first row* (lowest total wait time — it arrives last, so it rarely waits itself). +Example from an 8-rank Llama 70B FSDP run (`straggler_summary`, truncated): + +| rank | total_wait_time_us | mean_wait_time_us | times_arrived_last | times_arrived_first | pct_arrived_last | num_collectives | total_nccl_dur_us | +|------|-------------------|-------------------|--------------------|---------------------|------------------|-----------------|-------------------| +| 4 | 27,195 | 55.7 | 420 | 6 | 86.1% | 488 | 3,910,753 | +| 5 | 4,660,353 | 9,549.9 | 39 | 10 | 8.0% | 488 | 8,463,896 | +| ... | ... | ... | ... | ... | ... | ... | ... | +| 0 | 13,358,753 | 27,374.5 | 3 | 320 | 0.6% | 488 | 17,203,432 | + +Rank 4 is the straggler: the lowest total wait time, last to arrive 86% of the +time, and the lowest NCCL kernel duration (other ranks' durations are inflated +by the time they spend waiting for it). + | Column | What it tells you | |--------|-------------------| | `total_wait_time_us` | Sum of this rank's wait across all collectives. The straggler has the *lowest* value. | From bf8c3c063a715fc23d0b286a12fb1e0405d8139f Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Mon, 20 Jul 2026 11:17:12 -0400 Subject: [PATCH 06/19] docs: document inference trace collection, splitting, and roofline concepts Recover inference content that was dropped in the migration into the rendered docs: - generate-perf-report-pytorch-inference.md: restructure into an end-to-end workflow (collect -> split -> generate -> merge) with the vLLM/SGLang build tables, profiler-config flags, and the split_inference_trace_annotation steady-state workflow. - conceptual/inference-analysis.md: new page covering the paged-attention roofline model (prefill/decode FLOPS, elements moved, aggregate annotations) and the steady-state region derivation. Co-authored-by: Cursor --- docs/conceptual/inference-analysis.md | 284 ++++++++++++++++++ .../generate-perf-report-pytorch-inference.md | 278 ++++++++++++++++- docs/sphinx/_toc.yml.in | 2 + 3 files changed, 557 insertions(+), 7 deletions(-) create mode 100644 docs/conceptual/inference-analysis.md diff --git a/docs/conceptual/inference-analysis.md b/docs/conceptual/inference-analysis.md new file mode 100644 index 000000000..757d34c68 --- /dev/null +++ b/docs/conceptual/inference-analysis.md @@ -0,0 +1,284 @@ + + +# Inference performance analysis in TraceLens +```{meta} +:description: Understand the concepts behind TraceLens inference analysis - the roofline model for paged attention (prefill and decode), and the steady-state region that trace splitting targets. +:keywords: TraceLens, inference, roofline, paged attention, prefill, decode, chunked prefill, FLOPS, arithmetic intensity, steady state, vLLM, SGLang, LLM serving, ROCm, MI300X +``` + +This topic explains the concepts behind TraceLens's inference-serving analysis: +how the *roofline model* is derived for paged attention, and what the +*steady-state region* is and why it is the part of a serving trace worth +profiling. For the corresponding procedures, see +[Generate a PyTorch inference performance report](../how-to/generate-perf-report-pytorch-inference.md). + +In inference serving, multiple requests are batched together and each request +carries its own query and key/value sequence lengths. A single execution step +typically mixes *prefill* (context) and *decode* (generation) requests, which +makes per-request accounting the natural basis for a roofline model. + +## Roofline analysis for inference attention + +The following notation is used throughout this section. + +| Symbol | Description | +|--------|-------------| +| B | Batch size (1 per request in paged attention) | +| N_Q | Number of query tokens | +| N_KV | Number of key/value tokens (context length) | +| H_Q | Number of query heads | +| H_KV | Number of KV heads (H_KV ≤ H_Q; equal for MHA, smaller for GQA/MQA) | +| d_h_qk | Head dimension for queries and keys | +| d_h_v | Head dimension for values | +| R_C | Number of context (prefill) requests in the batch | +| R_G | Number of generation (decode) requests in the batch | +| R | Total number of requests (R = R_C + R_G) | +| N_Q(i), N_KV(i) | Query and KV token counts for the i-th request | + +### Standard SDPA attention (single request) + +Scaled dot-product attention consists of two matrix multiplications per head: + +1. *QK^T (score computation)*: `2 * B * N_Q * N_KV * H_Q * d_h_qk` +2. *Score × V (value aggregation)*: `2 * B * N_Q * N_KV * H_Q * d_h_v` + +For causal attention, roughly half the score matrix is masked out: + +``` +FLOPS = (2 * B * N_Q * N_KV * H_Q * d_h_qk + 2 * B * N_Q * N_KV * H_Q * d_h_v) / 2 +``` + +``` +Elements Moved = +Q: B * N_Q * H_Q * d_h_qk +K: B * N_KV * H_KV * d_h_qk +V: B * N_KV * H_KV * d_h_v +Output: B * N_Q * H_Q * d_h_v +``` + +### Paged attention (multiple requests) + +For total FLOPS and bytes moved in inference paged attention, *sum over the +compute requirement of every request individually* (B = 1 per request). Requests +fall into two categories: + +- *Context (prefill) requests* process input tokens; attention is causal within + the current chunk. +- *Generation (decode) requests* generate new tokens; attention is non-causal + (queries attend to all past KV tokens). Typically N_Q = 1, but approaches like + speculative decoding may produce multiple query tokens per request. + +#### FLOPS: prefill (context) requests + +When chunked prefill is not enabled, the first (and only) chunk has N_KV = N_Q +and attention is causal: + +``` + R_C +FLOPS_prefill = Σ (2 * N_Q(i) * N_KV(i) * H_Q * d_h_qk + 2 * N_Q(i) * N_KV(i) * H_Q * d_h_v) / 2 + i=1 +``` + +With chunked prefill, the nth chunk already has the KV tokens from all previous +chunks cached. The attention matrix for one such request splits into a +non-causal rectangle (current chunk attending to previous chunks) plus a causal +self-attention triangle (current chunk attending to itself): + +``` + Keys (N_KV) + |<---- N_KV - N_Q ---->|<---- N_Q ---->| + +----------------------+---------------+ ^ + | |\ | | + | Non-causal | \ (masked) | | + Queries | (full rectangle) | \ | N_Q + | attend to previous | Causal \ | | + | chunks' KV cache | (self) \ | | + +----------------------+---------------+ v + <----- previous ----->|<-- current --> + chunks chunk +``` + +For the first chunk (no chunking, or the first chunk of chunked prefill), +N_KV = N_Q, so the rectangle vanishes and the whole matrix is causal: + +``` + Keys (N_KV = N_Q) + |<---- N_Q ---->| + +---------------+ ^ + |\ | | + | \ (masked) | | + | \ | | + Queries | \ | N_Q + | Causal \ | | + | (entire) \ | | + +---------------+ v +``` + +Both cases (first chunk and nth chunk) simplify to a single unified formula: + +``` + R_C +FLOPS_context = Σ [ (2 * N_Q(i) * N_KV(i) * H_Q * d_h_qk + 2 * N_Q(i) * N_KV(i) * H_Q * d_h_v) + i=1 + - (2 * N_Q(i)^2 * H_Q * d_h_qk + 2 * N_Q(i)^2 * H_Q * d_h_v) / 2 ] +``` + +This works because: + +- When N_KV = N_Q (first chunk): `full - full/2 = full/2`, which is causal. +- When N_KV > N_Q (nth chunk): `full rectangle - self-triangle`, which is the + non-causal rectangle plus the causal self-attention. + +#### FLOPS: generation (decode) requests + +Generation requests attend to all cached KV tokens (N_KV = context length so +far). Typically N_Q = 1 (autoregressive decoding), but techniques like +speculative decoding may have N_Q > 1. The attention is non-causal: + +``` + R_G +FLOPS_generation = Σ (2 * N_Q(i) * N_KV(i) * H_Q * d_h_qk + 2 * N_Q(i) * N_KV(i) * H_Q * d_h_v) + i=1 +``` + +``` +FLOPS_total = FLOPS_context + FLOPS_generation +``` + +#### Elements moved + +Total memory traffic sums over all requests. Each request reads its Q, K, V +tensors and writes the output. With GQA/MQA, the KV cache uses H_KV heads (not +H_Q), reducing KV memory traffic. Ignoring cases with shared KV pages between +requests: + +``` + R +Elements_moved = Σ ( N_Q(i) * H_Q * d_h_qk // Q read + i=1 + + N_KV(i) * H_KV * d_h_qk // K read (from paged KV cache) + + N_KV(i) * H_KV * d_h_v // V read (from paged KV cache) + + N_Q(i) * H_Q * d_h_v ) // Output write +``` + +where R = R_C + R_G is the total number of requests. Because B = 1 per request in +paged attention, the batch dimension is absorbed into the summation. + +### Roofline analysis without per-request details + +Importantly, individual request details are *not* required to perform roofline +analysis. Inspecting the formulas above, the only per-request quantities that +appear are `N_Q(i)`, `N_KV(i)`, and their products. The full FLOPS and +memory-traffic expressions can be evaluated from just these aggregate +statistics, computed separately for context and generation requests: + +| Aggregate | Used in | +|-----------|---------| +| R_C, R_G | Request counts | +| Σ N_Q | Elements moved (Q read, Output write) | +| Σ N_KV | Elements moved (K read, V read) | +| Σ (N_Q * N_KV) | FLOPS (full-rectangle term) | +| Σ (N_Q^2) | FLOPS (causal self-attention correction for prefill) | + +TraceLens obtains these aggregates by applying `torch.record_function(annotation)` +to the framework's execution steps. Because a single execution step can contain a +mix of context and generation requests, the annotation encodes the aggregate +statistics *separately* for context and generation requests within that step (for +example R_C, R_G, Σ N_Q for context, Σ N_Q for generation, and so on). These +annotations are stored as `user_annotation` events in the PyTorch profiler trace, +making roofline analysis possible directly from the trace without any additional +instrumentation or runtime logging. + +The framework patches referenced in +[Generate a PyTorch inference performance report](../how-to/generate-perf-report-pytorch-inference.md) +are what add these annotations to the trace. + +## Steady-state region + +Inference-serving execution consists of three phases: + +1. *Ramp-up*: the initial few steps where requests are still being batched. +2. *Steady state*: the execution steps with the highest concurrency. +3. *Ramp-down*: the trailing steps where the final batch of requests finishes. + +Once steady state is reached, execution consists of: + +- *Decode-only steps*. +- *Prefill-decode steps*, typically containing one prefill request packed with + ~CONC−1 decode requests. + +For performance analysis, only the steady-state steps are of interest, +specifically prefill-decode steps and decode-only steps with large context sizes +(towards the end of a request). + +### Parameters relevant to inference serving + +- *NUM_PROMPTS*: typically `10 * CONC`. +- *CONC*: number of concurrent requests that can be batched together. +- *R*: random-range ratio used for sampling input and output sequence lengths. +- *OSL*: maximum output sequence length. The per-request output length is sampled + uniformly in `[R * OSL, OSL]`. +- *ISL*: assumed to be lower than the chunk size. + +Assuming the benchmark schedules requests at an effectively infinite rate, the +first CONC steps are conservatively treated as the ramp-up phase. The execution +step ranges where groups of CONC requests complete are: + +``` +1 * R * OSL to 1 * OSL e.g. 0.8 OSL - 1 OSL +2 * R * OSL to 2 * OSL e.g. 1.6 OSL - 2 OSL +3 * R * OSL to 3 * OSL e.g. 2.4 OSL - 3 OSL +4 * R * OSL to 4 * OSL e.g. 3.2 OSL - 4 OSL +... +N * R * OSL to N * OSL + +where N = NUM_PROMPTS / CONC +``` + +``` +TOTAL_STEPS = NUM_PROMPTS * Avg(OSL) / CONC +TOTAL_PrefillDecode_Steps = NUM_PROMPTS +TOTAL_DecodeOnly_Steps = NUM_PROMPTS * ((Avg(OSL) - CONC) / CONC) +``` + +### Recommended profiling window + +Since serving benchmarks commonly sample output sequence lengths from +`[R * OSL, OSL]`, the most useful steady-state profiling window lies in: + +``` +5 * R * OSL to 5 * OSL +``` + +Here, the probability of a request finishing at step t is non-uniform, peaking at +`((R+1)/2) * 5 * OSL`. This region exhibits fully saturated concurrency, a +representative mix of decode-only and prefill-decode steps, and minimal warm-up or +tail artifacts. That makes the recommended profiling window: + +``` +max_iters = 16 * OSL / CONC + # Number of execution steps to profile. The multiplier 16 targets + # ~16 execution steps with a prefill+decode mix. Clamp max_iters + # for extreme values of OSL/CONC. + +delay_iters = ((R+1)/2) * 5 * OSL - (max_iters / 2) + # Execution step where the profiler starts. +``` + +The trace-splitting workflow uses these definitions to detect the steady-state +region automatically and to separate prefill-decode from decode-only steps. When +the benchmark parameters are known, pass `--CONC`, `--OSL`, and `--R` to the +splitter to override the empirically estimated ratio with the analytically +derived one; see +[Split inference traces](../how-to/generate-perf-report-pytorch-inference.md#split-inference-traces-optional). + +## Related topics + +- [Generate a PyTorch inference performance report](../how-to/generate-perf-report-pytorch-inference.md) +- [Compare two traces in TraceLens](../how-to/compare-traces.md) +- [GEMM analysis in TraceLens](./gemm-analysis.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/generate-perf-report-pytorch-inference.md b/docs/how-to/generate-perf-report-pytorch-inference.md index b838fd5b7..aa72e7d56 100644 --- a/docs/how-to/generate-perf-report-pytorch-inference.md +++ b/docs/how-to/generate-perf-report-pytorch-inference.md @@ -7,8 +7,8 @@ See LICENSE for license information. # Generate a PyTorch inference performance report ```{meta} -:description: Learn how to generate a TraceLens performance report from a PyTorch LLM-serving (vLLM/SGLang) trace captured in graph mode, including capture-trace merging. -:keywords: TraceLens, PyTorch profiler, inference, vLLM, SGLang, CUDA graph, HIP graph, graph capture, LLM serving, FusedMoE, roofline, ROCm +:description: Learn how to collect, split, and analyze PyTorch LLM-serving (vLLM/SGLang) traces with TraceLens, including graph-capture merging for graph-mode inference. +:keywords: TraceLens, PyTorch profiler, inference, vLLM, SGLang, CUDA graph, HIP graph, graph capture, LLM serving, FusedMoE, roofline, trace splitting, steady state, ROCm ``` `TraceLens_generate_perf_report_pytorch_inference` is the inference-oriented @@ -17,22 +17,285 @@ vLLM or SGLang) that run in CUDA/HIP graph mode, and can merge the graph-capture traces back into the graph-replay trace to recover the call-stack and input-shape metadata that graph execution drops. -For training or single-run PyTorch traces, use +This topic covers the end-to-end inference workflow: collecting traces, splitting +them into steady-state windows, and generating the report. For training or +single-run PyTorch traces, use [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) -instead. +instead. For the underlying concepts (the paged-attention roofline model and the +steady-state region), see +[Inference performance analysis in TraceLens](../conceptual/inference-analysis.md). + +## Supported frameworks and execution modes + +TraceLens inference features are primarily tested with vLLM and SGLang. Feature +coverage depends on how the model is executed: + +| Mode | Shapes / roofline analysis | Agent analysis | Limitations | +|------|----------------------------|----------------|-------------| +| Eager only | Yes | Supported; proposed patches are recommended to include roofline information for attention operations | Eager execution may use different compilation strategies, resulting in different kernels and fusions than graph execution. | +| Graph execution only | Non-graph kernels | Limited | Categorization, call stacks, and shapes are available only for attention kernels if `full_and_piecewise` mode is used. | +| Graph execution + eager-mode trace | Limited | Limited | Kernel categorization may be less accurate than eager or graph+capture. | +| Graph execution + graph capture [^1] | Yes | Yes (patches required) | | + +[^1]: Graph-mode analysis using graph-capture and graph-replay traces is +supported for vLLM and SGLang (proposed patches required). ## Before you begin Before generating a report, confirm you have the following: - TraceLens installed (see [Install TraceLens](../install/install.md)). -- A graph-replay `torch.profiler` trace (`.json` or `.json.gz`). +- A graph-replay `torch.profiler` trace (`.json` or `.json.gz`). If you don't + have one yet, [collect it](#collect-inference-traces) first. - (Optional) The folder of graph-capture traces from the same run, if you want to recover shapes and call stacks (see [Merge capture traces](#merge-capture-traces)). +## Collect inference traces + +There are two ways to collect inference traces for TraceLens analysis. + +### Option A: Profiling agent (recommended) + +The Profiling agent is an agentic skill bundled with TraceLens that drives an LLM +inference benchmark, applies the Docker/framework patches for you, tunes the +profiler window, runs the benchmark, and splits the resulting trace into +analysis-ready windows. Follow +[`TraceLens/Agent/Profiling/README.md`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/Agent/Profiling/README.md). +The agent handles collection and splitting end-to-end; if you use it you can skip +the rest of this section and [Split inference traces](#split-inference-traces-optional). + +### Option B: Manual profiling + +Use manual profiling for full control over every step. Build (or patch) an image, +configure the profiler yourself, and run the benchmark by hand. + +#### Build a Docker image + +Build scripts for vLLM and SGLang are provided under +[`examples/custom_workflows/inference_analysis/`](https://github.com/AMD-AGI/TraceLens/tree/main/examples/custom_workflows/inference_analysis). + +**vLLM.** A unified build script supports multiple vLLM versions. It takes a +version tag as its first argument, followed by the path to your local TraceLens +clone and any standard `docker build` flags. The script selects the correct base +image and patch file automatically: + +| Version | Base image | vLLM version | Patch file | +|---------|-----------|--------------|------------| +| `v14` | `rocm/vllm-dev:preview_releases_rocm_v0.14.0_20260120` | v0.14.0 | `config_vllm_v0.14.0.patch` | +| `v15` | `rocm/vllm-dev:preview_releases_rocm_v0.15.0_20260130` | v0.15.0 | `config_vllm_v0.15.0.patch` | +| `v16` | `rocm/vllm-dev:preview_rocm70_releases_rocm_v0.16.0_20260223` | v0.16.0 | `config_vllm_v0.16.0.patch` | +| `v17` | `vllm/vllm-openai-rocm:v0.17.0` | v0.17.0 | `config_vllm_v0.17.0.patch` | +| `v18` | `vllm/vllm-openai-rocm:v0.18.0` | v0.18.0 | `config_vllm_v0.18.0.patch` | +| `v19` | `vllm/vllm-openai-rocm:v0.19.0` | v0.19.0 | `config_vllm_v0.19.0.patch` | +| `v20` | `rocm/vllm-dev:preview_v0.20.0_20260429` | v0.20.0 | `config_vllm_v0.20.0.patch` | +| `v21` | `vllm/vllm-openai-rocm:v0.21.0` | v0.21.0 | `config_vllm_v0.21.0.patch` | +| `v22` | `vllm/vllm-openai-rocm:v0.22.0` | v0.22.0 | `config_vllm_v0.22.0.patch` | +| `v23` | `vllm/vllm-openai-rocm:v0.23.0` | v0.23.0 | `config_vllm_v0.23.0.patch` | +| `v24` | `vllm/vllm-openai-rocm:v0.24.0` | v0.24.0 | `config_vllm_v0.24.0.patch` | + +```bash +bash examples/custom_workflows/inference_analysis/build_docker_vllm.sh \ + v16 \ + /path/to/TraceLens \ + -t tracelens-vllm +``` + +To use a custom base image instead of the default for the selected version, pass +`--base-image`: + +```bash +bash examples/custom_workflows/inference_analysis/build_docker_vllm.sh \ + v18 \ + /path/to/TraceLens \ + --base-image my-registry/vllm:nightly \ + -t tracelens-vllm:custom +``` + +**SGLang.** The SGLang build script takes the path to your local TraceLens clone, +the SGLang version (`--sglang-version`, default `0.5.9`), and the GPU type +(`--gpu-type`, default `mi350`). MI300 and MI350/MI355 are supported: + +| SGLang version | GPU type | Base image | +|----------------|----------|------------| +| `0.5.9` | MI300 | `lmsysorg/sglang:v0.5.9-rocm700-mi30x` | +| `0.5.9` | MI350/MI355 | `lmsysorg/sglang:v0.5.9-rocm700-mi35x` | +| `0.5.11` | MI300 | `lmsysorg/sglang:v0.5.11-rocm720-mi30x` | +| `0.5.11` | MI350/MI355 | `lmsysorg/sglang:v0.5.11-rocm720-mi35x` | +| `0.5.12` | MI300 | `lmsysorg/sglang:v0.5.12-rocm720-mi30x` | +| `0.5.12` | MI350/MI355 | `lmsysorg/sglang:v0.5.12-rocm720-mi35x` | + +```bash +bash examples/custom_workflows/inference_analysis/build_docker_sglang.sh \ + /path/to/TraceLens \ + --sglang-version 0.5.11 \ + --gpu-type mi350 \ + -t tracelens-sglang +``` + +Create a container from the resulting image. + +#### Apply framework patches manually + +If you prefer to patch an existing environment instead of building a new image, +apply patches to your inference framework to: + +- Add custom annotations with request-packing information (these annotations feed + the [roofline model](../conceptual/inference-analysis.md#roofline-analysis-for-inference-attention)). +- Capture graph-mode execution phases for augmentation by TraceLens. + +To apply them: + +1. Locate your inference engine: + + ```bash + # vLLM + python -c "import vllm; import os; print(os.path.dirname(vllm.__file__))" + # SGLang + python -c "import sglang; import os; print(os.path.dirname(sglang.__file__))" + ``` + +2. Select the patch for your framework and version and apply it: + + ```bash + cd /path/to/framework/../ && git apply /path/to/patchfile + ``` + + vLLM patches are in + [`vllm_patches`](https://github.com/AMD-AGI/TraceLens/tree/main/examples/custom_workflows/inference_analysis/vllm_patches); + SGLang patches are in + [`sglang_roofline_patches`](https://github.com/AMD-AGI/TraceLens/tree/main/examples/custom_workflows/inference_analysis/sglang_roofline_patches). + +#### Collection parameters + +- *Steady-state window*: Inference traces are large. Most serving benchmarks use + `NUM_PROMPTS = 10 * CONC` with OSL sampling ratio R. Trace + `((R+1)/2) * 5 * OSL ± (16 * OSL / CONC)` execution steps to capture peak + concurrency with a prefill-decode mix. See + [Steady-state region](../conceptual/inference-analysis.md#steady-state-region) + for the derivation. You may need to raise the trace-store timeout in some + frameworks to allow writing the trace mid-execution (for example + `VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=1200` for vLLM). +- *Graph-capture mode*: The recommended patch traces the graph-capture phase and + stores the corresponding trace files. +- *Profiler setup*: Enable CPU-side call-stack and shape capture (for example, + vLLM's `profiler-config.torch_profiler_record_shapes` and + `profiler-config.torch_profiler_with_stack`). + +#### Trace collection flags + +**vLLM.** The `config_vllm_v*.patch` patches (available for v0.14-v0.24) add two +`ProfilerConfig` flags. Pass them as server arguments: + +| Flag | Type | Default | Description | +|------|------|---------|-------------| +| `--profiler-config.capture_torch_profiler_dir DIR` | `str` | `""` | Directory where a profiler trace of the CUDA-graph capture phase is saved (rank 0 only). Requires `--profiler-config.profiler torch`. Leave empty to disable graph-capture profiling. | +| `--profiler-config.detailed_trace_annotation` | `bool` | `False` | When `True`, execution-step annotations include roofline metrics (`sk`, `sqsq`, `sqsk`) for context and generation requests. When `False`, annotations record only request and token counts. Enable for full roofline analysis. | + +Example - enable both flags alongside a steady-state window profile: + +```bash +--profiler-config.profiler torch \ +--profiler-config.torch_profiler_dir /workspace/torch_trace \ +--profiler-config.capture_torch_profiler_dir /workspace/torch_trace/capture_traces \ +--profiler-config.detailed_trace_annotation True \ +--profiler-config.delay_iterations 5402 \ +--profiler-config.max_iterations 256 \ +--profiler-config.ignore_frontend True +``` + +```{note} +`capture_torch_profiler_dir` is only available when `--profiler-config.profiler torch` +is set. The capture trace is written once at server startup during CUDA-graph +construction; the steady-state replay trace is written to `torch_profiler_dir` +during the benchmark. Pass both paths to the report generator via +`--capture_folder` and `--profile_json_path` respectively. +``` + +**SGLang.** In the profile request for the execution step: + +1. Pass `shape_discovery=True` to enable shape discovery and registration for + operations not covered by the default SGLang profile. +2. Pass `roofline_annotations=True` to annotate the trace with the detailed + information used for roofline analysis. +3. To profile the graph-capture phase, pass the `--enable-profile-cuda-graph` + server argument at startup. This saves one trace file per batch size but misses + shape information for some operations; add + `--enable-shape-discovery-for-cuda-graph-profile` for more diverse coverage. + +## Split inference traces (optional) + +Large traces can be split into steady-state windows or per-step files before +report generation, using `TraceLens.TraceUtils.split_inference_trace_annotation`. +Splitting assumes vLLM v0.14 or higher (tested through v0.24) or SGLang v0.5.9, +or use of the provided patches, so that annotations (batch size, request counts, +and so on) are present in the execution-step metadata. + +**Find the steady-state region** (highest concurrency) and separate +prefill-decode from decode-only steps. This is the recommended option for large +traces where you want a few representative steps extracted automatically: + +```bash +python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz \ + -o ./steady_state_analysis \ + --find-steady-state --num-steps 256 +``` + +The output is a trace of `--num-steps` contiguous steps near peak concurrency, +plus contiguous prefill-decode-mix and decode-only steady-state traces extracted +from that window with no idle gaps between steps. + +By default the mixed window is selected by matching the empirically observed +prefill-decode-to-total-steps ratio. If the benchmark parameters are known, +passing `--CONC`, `--OSL`, and `--R` computes the *ideal* ratio analytically and +uses that to drive window selection instead: + +| Argument | Type | Description | +|----------|------|-------------| +| `--CONC` | `int` | Expected peak concurrency (number of concurrent requests). A warning is printed if the observed trace peak differs. | +| `--OSL` | `float` | Maximum output sequence length (decode tokens per request). Each request's OSL is sampled from `[R * OSL, OSL]`. | +| `--R` | `float` | OSL sampling range ratio in `[0, 1]`. `R=0` means all requests use exactly `OSL` tokens; `R=1` means OSL is uniform in `[0, OSL]`. | + +When all three are provided, the tool derives: + +``` +ideal_prefilldecodemix_to_totalsteps_ratio = (CONC * 2) / (OSL * (1 + R)) +``` + +and uses it as the reference ratio, overriding the empirical estimate. +`--num-steps` is automatically raised to +`ceil(1 / ideal_prefilldecodemix_to_totalsteps_ratio)` if it is too small to +capture a representative mix: + +```bash +python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz \ + -o ./steady_state_analysis \ + --find-steady-state --num-steps 256 \ + --CONC 32 --OSL 1024 --R 0.8 +``` + +**One trace file per execution step** (vLLM v0.13+, SGLang v0.5.9, Atom 0.1.1) - +use when you want to analyze an isolated execution step: + +```bash +python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz \ + -o ./output --store-single-iteration +``` + +**Limit the steady-state search to a window** with `--iterations`: + +```bash +python -m TraceLens.TraceUtils.split_inference_trace_annotation trace.json.gz \ + -o ./output --iterations 10:20 --find-steady-state --num-steps 256 \ + --CONC 32 --OSL 1024 --R 0.8 +``` + +See [Steady-state region](../conceptual/inference-analysis.md#steady-state-region) +for what these phases mean and why this window is the one worth profiling. + ## Generate the report -Pass the graph-replay trace to generate the default Excel report: +Report generation is supported for both eager-mode and graph-mode (capture + +replay) traces. Pass the graph-replay trace to generate the default Excel report: ```bash TraceLens_generate_perf_report_pytorch_inference \ @@ -87,7 +350,8 @@ Run the tool with `--help` for the complete, version-specific argument list. ## Related topics +- [Inference performance analysis in TraceLens](../conceptual/inference-analysis.md) - [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) -- [Generate TraceLens reports](./generate-reports.md) - [Compare two traces](./compare-traces.md) +- [Generate optimization recommendations](./agentic-mode.md) - [API reference](../reference/api-reference.md) diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index 74800afbc..64df7c6f5 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -63,6 +63,8 @@ subtrees: title: Tensor shape metadata - file: conceptual/gemm-analysis title: GEMM analysis + - file: conceptual/inference-analysis + title: Inference performance analysis - file: conceptual/triton-perf-model-walkthrough title: Triton kernel performance model From f89e488088d9c00a226bab0e9c3d3df88ddcd7af Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Mon, 20 Jul 2026 11:18:20 -0400 Subject: [PATCH 07/19] docs: consolidate SDK trace analysis into one how-to, add no-trace perf model guide Reorganize the core-feature docs so the SDK story lives in one place and the analytical perf model gets its own home: - how-to/sdk-analysis.md: new consolidated guide covering tree loading and traversal (TreePerfAnalyzer), GPU timeline summaries (GPUEventAnalyser), per-op GPU time, roofline metrics, and nn.Module GPU-time attribution. Absorbs the former tree-perf-analysis.md and gpu-event-analysis.md. - conceptual/trace2tree.md: slim down to the call-tree concept; SDK traversal how-to content moved to sdk-analysis.md. - how-to/perf-model-without-trace.md: new guide for computing analytical FLOPs/bytes for GEMM/SDPA ops without any trace. - Remove tree-perf-analysis.md and gpu-event-analysis.md; repoint inbound links and update the TOC. Co-authored-by: Cursor --- docs/conceptual/trace2tree.md | 101 +---------- docs/how-to/agentic-mode.md | 2 +- docs/how-to/gpu-event-analysis.md | 98 ----------- docs/how-to/perf-model-without-trace.md | 105 +++++++++++ docs/how-to/sdk-analysis.md | 221 ++++++++++++++++++++++++ docs/how-to/tree-perf-analysis.md | 94 ---------- docs/index.rst | 2 +- docs/reference/api-reference.md | 2 +- docs/sphinx/_toc.yml.in | 8 +- 9 files changed, 339 insertions(+), 294 deletions(-) delete mode 100644 docs/how-to/gpu-event-analysis.md create mode 100644 docs/how-to/perf-model-without-trace.md create mode 100644 docs/how-to/sdk-analysis.md delete mode 100644 docs/how-to/tree-perf-analysis.md diff --git a/docs/conceptual/trace2tree.md b/docs/conceptual/trace2tree.md index 53578c6f3..49263c24c 100644 --- a/docs/conceptual/trace2tree.md +++ b/docs/conceptual/trace2tree.md @@ -45,105 +45,16 @@ Kernel names are volatile and context-free. Trace2Tree anchors analysis at the s That said, kernel names are often useful — they can offer clues about the backend implementation, algorithm variant, or compiler choices. TraceLens intends to serve as a one-stop solution for extracting every bit of useful signal from a trace file, so it includes features to extract and parse relevant information from kernel names where applicable. But it treats them as supplementary, not foundational. -## Key features +## A powerful IR for deeper analysis -- *Hierarchical dependency tree*: constructs a tree structure linking CPU operations to GPU kernel launches, enabling detailed analysis of ops lowering and performance. -- *Extensible SDK*: provides a framework for custom analyses, such as identifying GPU time for CPU operations or pinpointing bottlenecks. -- *Lightweight design*: minimal dependencies and a straightforward codebase for easy integration and use. -- *PyTorch support*: built for PyTorch profiler JSON traces, with potential for future support of other frameworks. +This tree is a powerful intermediate representation (IR) that forms the foundation of many TraceLens features. It captures both the structural and performance semantics of a workload: the hierarchical dependency between CPU operations and GPU kernel launches, the argument metadata that disambiguates each operation, and the forward-versus-backward relationship between operations. Because it's a lightweight, framework-agnostic structure (built today for PyTorch profiler JSON, with JAX support and room for more), higher-level analyses — GPU-timeline breakdowns, roofline metrics, `nn.Module` attribution, event replay, and trace diffing — all build on top of it. -## Build and traverse the tree - -```{note} -See [`examples/trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb) for a complete interactive tutorial. -``` - -### Load the trace data through TreePerfAnalyzer - -```python -from TraceLens.TreePerf import TreePerfAnalyzer - -# Load trace data using TreePerfAnalyzer -# Set add_python_func=True to include the Python function call stack in the tree -# This lets you trace GPU kernels all the way back to your Python code -trace_file = '/path/to/trace.json' -analyzer = TreePerfAnalyzer.from_file(trace_file, add_python_func=True) - -# Access the underlying tree structure -tree = analyzer.tree -``` - -### Find an operation to analyze - -```python -# Find an operation of interest -event_interest = next( - evt for evt in tree.events - if evt.get('name') == 'aten::convolution' and evt.get('cat') == 'cpu_op' -) -``` - -### Traverse a subtree - -Visualize the entire subtree rooted at this operation: - -```python -tree.traverse_subtree_and_print(event_interest) -``` - -``` -└── UID: 41, Category: cpu_op, Name: aten::convolution - └── UID: 42, Category: cpu_op, Name: aten::_convolution - └── UID: 43, Category: cpu_op, Name: aten::miopen_convolution - ├── UID: 104314, Category: cuda_runtime, Name: hipExtModuleLaunchKernel - │ └── UID: 107846, Category: kernel, Name: Im2d2Col_v2, Duration: 45.063 - └── UID: 104318, Category: cuda_runtime, Name: hipExtModuleLaunchKernel - └── UID: 107848, Category: kernel, Name: Cijk_Ailk_Bljk_BBS_BH... -``` - -### Traverse the parent chain - -Trace back through all parent events to see the full call stack. You can optionally include CPU operation details such as input dimensions, types, and strides using the `cpu_op_fields` parameter. - -Available fields: `'Input Dims'`, `'Input type'`, `'Input Strides'`, `'Concrete Inputs'`. - -```python -root = tree.traverse_parents_and_print( - event_interest, - cpu_op_fields=('Input Dims', 'Input type') -) -``` - -``` -Node: - UID: 41, Category: cpu_op, Name: aten::convolution - Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], []] - Input type: [float, float, float] -1-up: - UID: 40, Category: cpu_op, Name: aten::conv2d - Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], [1], [2, 2], [1, 1], [1, 1], [1]] - Input type: [float, float, int, int, int, int, int] -2-up: - UID: 40139, Category: python_function, Name: -3-up: - UID: 40138, Category: python_function, Name: torch/utils/_device.py(100): __torch_function__ -4-up: - UID: 40137, Category: python_function, Name: torch/nn/modules/conv.py(554): _conv_forward -5-up: - UID: 40136, Category: python_function, Name: torch/nn/modules/conv.py(558): forward -6-up: - UID: 40135, Category: python_function, Name: torch/nn/modules/module.py(1736): _wrapped_call_impl -7-up: - UID: 40134, Category: python_function, Name: torch/nn/modules/module.py(1747): _call_impl -8-up: - UID: 40133, Category: python_function, Name: transformers/models/owlv2/modeling_owlv2.py(395): forward -... -``` +You typically don't construct or traverse the tree by hand. It's accessed through the `TreePerfAnalyzer` interface, which builds the tree from a trace and exposes the navigation and metric APIs. To work with the tree in practice, see [Analyze traces with the TraceLens SDK](../how-to/sdk-analysis.md). ## Related topics -- [Tree performance analysis](../how-to/tree-perf-analysis.md) -- [Event replay](../how-to/event-replay.md) -- [Torch profiling analysis](../conceptual/torch-profiling-analysis.md) +- [Analyze traces with the TraceLens SDK](../how-to/sdk-analysis.md) +- [Replay a single operation in TraceLens](../how-to/event-replay.md) +- [Understanding PyTorch traces](../conceptual/torch-profiling-analysis.md) - [API reference](../reference/api-reference.md) - [What is TraceLens?](../what-is-tracelens.md) diff --git a/docs/how-to/agentic-mode.md b/docs/how-to/agentic-mode.md index 1a0558a2a..02d555202 100644 --- a/docs/how-to/agentic-mode.md +++ b/docs/how-to/agentic-mode.md @@ -224,6 +224,6 @@ node, or an SSH plus container-exec wrapper for a containerized node. - [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) - [Generate a PyTorch inference performance report](./generate-perf-report-pytorch-inference.md) -- [Analyze performance with TreePerf](./tree-perf-analysis.md) +- [Analyze traces with the TraceLens SDK](./sdk-analysis.md) - [GEMM analysis](../conceptual/gemm-analysis.md) - [The Trace2Tree data model](../conceptual/trace2tree.md) diff --git a/docs/how-to/gpu-event-analysis.md b/docs/how-to/gpu-event-analysis.md deleted file mode 100644 index e10eeb629..000000000 --- a/docs/how-to/gpu-event-analysis.md +++ /dev/null @@ -1,98 +0,0 @@ - - -# Analyze a GPU timeline with GPUEventAnalyser -```{meta} -:description: Learn how to use the TraceLens GPUEventAnalyser component standalone to extract GPU timeline metrics such as computation, communication, memcpy, and idle time from a PyTorch or JAX trace. -:keywords: TraceLens, GPUEventAnalyser, JaxGPUEventAnalyser, GPU timeline, computation time, communication time, memcpy, idle time, exposed communication, PyTorch profiler, JAX, ROCm -``` - -`GPUEventAnalyser` is a reusable component designed to analyze a GPU timeline and extract key performance metrics. While it's used within [TreePerf](../how-to/tree-perf-analysis.md), it can also be used independently, and this topic focuses on that standalone usage — you don't need the CPU-side tree to run it. - -## Before you begin - -- TraceLens installed (see [Install TraceLens](../install/install.md)). -- A trace file containing GPU events: an unzipped PyTorch profiler JSON trace, or a gzipped JAX trace for the JAX workflow. - -## Key features - -- *GPU timeline breakdown*: computes key GPU activity metrics, including: - - *Computation time*: time spent in computation kernels (for example, matrix multiplications, convolutions). - - *Communication time*: time spent in communication kernels (for example, NCCL operations for distributed training). - - *Memcpy time*: time spent in memory copy operations between host and device or across devices. - - *Idle time*: periods where the GPU is not executing any computation, communication, or memcpy operations. - - *Exposed communication*: communication time that does not overlap with computation. - - *Exposed memcpy*: memcpy time that does not overlap with computation or communication. -- *Reusable across profiling formats*: although `GPUEventAnalyser` is designed for PyTorch's JSON trace format, it can be adapted to other profiling formats by inheriting the class and reimplementing `get_gpu_event_lists()`. - -## Analyze a PyTorch trace (standalone) - -`GPUEventAnalyser` works directly from a list of trace events, so you can run it on its own without building the CPU-side tree. Load the trace JSON, pass its `traceEvents` to `GPUEventAnalyser`, and call `get_breakdown_df()`: - -```python -import json -import sys -from TraceLens import GPUEventAnalyser - -path = sys.argv[1] # this expects the JSON file (unzipped) - -with open(path, 'r') as f: - data = json.load(f) - -events = data['traceEvents'] -my_gpu_event_analyser = GPUEventAnalyser(events) -df = my_gpu_event_analyser.get_breakdown_df() -print(df) -``` - -Example output: - -| type | time ms | percent | -| --------------------- | --------- | --------- | -| computation_time | 4184.32 | 96.10 | -| exposed_comm_time | 160.85 | 3.69 | -| exposed_memcpy_time | 0.19 | 0.00 | -| busy_time | 4345.36 | 99.80 | -| idle_time | 8.53 | 0.20 | -| total_time | 4353.88 | 100.00 | -| total_comm_time | 292.92 | 6.73 | -| total_memcpy_time | 0.19 | 0.00 | - -## Analyze a JAX trace - -JAX describes events slightly differently, and includes all GPUs in a single trace, using the `JaxGPUEventAnalyser` class. When you use `GPUEventAnalyser` for JAX traces (enabled by passing `jax=True` to the analysis functions), the `compute_metrics()` and `get_breakdown_df()` methods return events from GPU 0. - -To access the traces for all devices, call `get_gpu_event_lists_jax()` to obtain a dictionary of `{pid: event_lists}`, where `pid` is the process id (1-n for n GPUs, a number greater than 100 for the CPU event list). To create a Pandas dataframe for each GPU, call `get_breakdown_df_multigpu()`, which returns a dictionary of `{gpu_index: DataFrame}` for `gpuindex` in `[0, num_gpus)`. The inherited `get_breakdown_df` function returns the results from GPU 0. - -```python -import gzip -import json -import sys -from TraceLens import JaxGPUEventAnalyser - -path = sys.argv[1] # this expects the zipped JSON file produced by the profiler - -with gzip.open(path, 'r') as fin: - data = json.loads(fin.read().decode('utf-8')) - -events = data['traceEvents'] -my_gpu_event_analyser = JaxGPUEventAnalyser(events) -for gpu, df in my_gpu_event_analyser.get_breakdown_df_multigpu().items(): - print(f"GPU {gpu}") - print(df) -``` - -## Customize for other profiling formats - -To adapt `GPUEventAnalyser` for other profiling formats, subclass it and reimplement the `get_gpu_event_lists()` method to correctly extract GPU events. See the `JaxGPUEventAnalyser` class for an example. - -## Related topics - -- [Analyze GPU performance with TreePerf](../how-to/tree-perf-analysis.md) -- [Trace2Tree](../conceptual/trace2tree.md) -- [Generate a JAX performance report](../how-to/generate-perf-report-jax.md) -- [Generate a PyTorch performance report](../how-to/generate-perf-report-pytorch.md) -- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/perf-model-without-trace.md b/docs/how-to/perf-model-without-trace.md new file mode 100644 index 000000000..8d543ab5e --- /dev/null +++ b/docs/how-to/perf-model-without-trace.md @@ -0,0 +1,105 @@ + + +# Model op performance without a trace +```{meta} +:description: Learn how to call the TraceLens perf model directly as an analytical library - compute FLOPs, bytes, arithmetic intensity, and roofline-bounded time from op shapes alone, with no trace or kernel launch. +:keywords: TraceLens, perf model, roofline, FLOPS, arithmetic intensity, GEMM, SDPA, analytical model, sizing study, ceiling, no trace, ROCm, MI300X +``` + +In normal use, TraceLens fuses two sources per kernel: the **perf model** supplies +analytical FLOPs and bytes from an op's shapes and dtypes, and the **trace** +supplies the measured wall-clock time. Dividing one by the other gives the +achieved `TFLOPS/s` and `TB/s` in every report. + +The perf model is just a Python library — you can call the analytical half on its +own, with **no trace and no kernel launch**. Hand it shapes, get back FLOPs and +bytes; arithmetic intensity and roofline-bounded time follow. This is useful for +sizing studies, end-to-end ceilings, and regression bounds before you run +anything. + +## Before you begin + +- TraceLens installed (see [Install TraceLens](../install/install.md)). +- The shapes and dtypes of the ops you want to model (no trace required). + +## Op coverage + +The perf model ships curated formulas for the fundamental op classes in modern +workloads — `GEMM`, `SDPA`, `CONV`, `Softmax`, `Normalization`, `GroupedGemm`, +`MoEComm`, `MambaSSD`, `FusedRoPE`, `CrossEntropy`, `CausalConv1d`, plus the +elementwise and reduction primitives — over a dozen base classes, all maintained +and tested against real traces. Every base class in +`TraceLens.PerfModel.perf_model` exposes `flops_func` and `bytes_func` (and +`*_bwd_func` variants where a backward pass applies). + +## Compute FLOPs, bytes, and arithmetic intensity + +Import the op class and call its `flops_func` / `bytes_func` with the op's shapes. +For a GEMM of shape `M × N × K`: + +```python +from TraceLens.PerfModel.perf_model import GEMM + +M, N, K = 40960, 6144, 1536 +bpe = 2 # bytes per element (bf16) + +flops = GEMM.flops_func(M, N, K, bias=False) # 2 * M * N * K +bytes_ = GEMM.bytes_func(M, N, K, False, bpe, bpe, bpe, bpe) # read A + read B + write C +arithmetic_intensity = flops / bytes_ # FLOPs per byte +``` + +Attention works the same way, with forward and backward variants: + +```python +from TraceLens.PerfModel.perf_model import SDPA + +# B, S_q, H_Q, S_kv, H_KV, d_h_qk, d_h_v, causal +flops_fwd = SDPA.flops_func(1, 4096, 64, 4096, 8, 128, 128, True) +bytes_fwd = SDPA.bytes_func(1, 4096, 64, 4096, 8, 128, 128, True, bpe) +flops_bwd = SDPA.flops_bwd_func(1, 4096, 64, 4096, 8, 128, 128, True, flash_impl=True) +``` + +## Bound the time with a roofline + +Arithmetic intensity tells you which side of the roofline an op sits on. Compare +it against the hardware's roofline knee (peak compute divided by peak bandwidth), +then take the larger of the compute-bound and bandwidth-bound times as the +achievable lower bound: + +```python +PEAK_TFLOPS_BF16 = 708.0 # MI300X matrix bf16 +HBM_BW_GBPS = 5300.0 # HBM3 + +ai_knee = (PEAK_TFLOPS_BF16 * 1e12) / (HBM_BW_GBPS * 1e9) # FLOPs/byte crossover + +def roofline_time_us(flops, bytes_): + compute_us = flops / (PEAK_TFLOPS_BF16 * 1e12) * 1e6 + bandwidth_us = bytes_ / (HBM_BW_GBPS * 1e9) * 1e6 + return max(compute_us, bandwidth_us) +``` + +This is the same analytical model TraceLens's built-in roofline analysis uses — +here applied to shapes directly instead of to a trace. The roofline is an upper +bound on achievable performance (a real kernel won't reach it), but the *ratios* +between layers and regimes are solid planning numbers that fall out of pure +arithmetic. + +## Worked example + +The +[`perf_model_without_trace.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/perf_model_without_trace.ipynb) +notebook works a full example end to end: every linear in a Llama-3-70B decoder +layer plotted as arithmetic intensity, SDPA forward and backward across sequence +length, and a per-token roofline rollup (predicted ms per token for prefill and +decode, bf16, MI300X) — all without a single trace. + +## Related topics + +- [Analyze traces with the TraceLens SDK](./sdk-analysis.md) +- [GEMM analysis in TraceLens](../conceptual/gemm-analysis.md) +- [Performance report columns](../reference/perf-report-columns.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/sdk-analysis.md b/docs/how-to/sdk-analysis.md new file mode 100644 index 000000000..23cc2a9ba --- /dev/null +++ b/docs/how-to/sdk-analysis.md @@ -0,0 +1,221 @@ + + +# Analyze traces with the TraceLens SDK +```{meta} +:description: Learn how to use the TraceLens Python SDK (TreePerfAnalyzer) to build a call tree from a trace, navigate it, and compute GPU-timeline, per-operation, roofline, and nn.Module-level performance metrics. +:keywords: TraceLens, TreePerfAnalyzer, TreePerf, Trace2Tree, GPUEventAnalyser, SDK, GPU timeline, roofline, FLOPS, nn.Module, PyTorch profiler, JAX, ROCm +``` + +The TraceLens SDK builds a hierarchical call tree from a profiler trace and +computes performance metrics on top of it. `TreePerfAnalyzer` is the main entry +point: it wraps [`Trace2Tree`](../conceptual/trace2tree.md) (which parses the +trace into a CPU-to-GPU dependency tree) and exposes methods to navigate that tree +and derive metrics at the timeline, operation, roofline, and `nn.Module` levels. + +This topic is the narrated reference for the SDK. Each section links a runnable +notebook you can execute against your own trace. + +## On this page + +- [Build and navigate the tree](#build-and-navigate-the-tree) +- [GPU timeline breakdown](#gpu-timeline-breakdown) +- [Per-operation GPU time](#per-operation-gpu-time) +- [Roofline metrics](#roofline-metrics) +- [nn.Module attribution](#nnmodule-attribution) +- [Add a new operation](#add-a-new-operation) + +## Before you begin + +- TraceLens installed (see [Install TraceLens](../install/install.md)). +- A PyTorch profiler trace JSON file for the model you want to analyze. +- A basic understanding of how `Trace2Tree` builds the tree (see + [The Trace2Tree data model](../conceptual/trace2tree.md)). + +## Build and navigate the tree + +Load a trace with `TreePerfAnalyzer.from_file`. Pass `add_python_func=True` to +include the Python call stack, so you can trace GPU kernels all the way back to +your Python code: + +```python +from TraceLens.TreePerf import TreePerfAnalyzer + +analyzer = TreePerfAnalyzer.from_file("/path/to/trace.json", add_python_func=True) +tree = analyzer.tree +``` + +Once you have an event of interest, the tree exposes navigation helpers: + +- `tree.traverse_subtree_and_print(event)` — visualize the subtree rooted at an + operation (its runtime calls and GPU kernels). +- `tree.traverse_parents_and_print(event, cpu_op_fields=(...))` — walk the parent + chain up to the Python frame that launched it; `cpu_op_fields` optionally shows + op details (`'Input Dims'`, `'Input type'`, `'Input Strides'`, `'Concrete Inputs'`). +- `tree.get_parent_event(event)`, `tree.get_children_events(event)`, and + `tree.get_gpu_events(event)` — direct parent/child/kernel access. + +For example, `traverse_subtree_and_print` on an `aten::convolution` op shows how +the dispatch op lowers to runtime launches and kernels: + +``` +└── UID: 41, Category: cpu_op, Name: aten::convolution + └── UID: 42, Category: cpu_op, Name: aten::_convolution + └── UID: 43, Category: cpu_op, Name: aten::miopen_convolution + ├── UID: 104314, Category: cuda_runtime, Name: hipExtModuleLaunchKernel + │ └── UID: 107846, Category: kernel, Name: Im2d2Col_v2, Duration: 45.063 + └── UID: 104318, Category: cuda_runtime, Name: hipExtModuleLaunchKernel + └── UID: 107848, Category: kernel, Name: Cijk_Ailk_Bljk_BBS_BH... +``` + +For a full interactive walkthrough of tree navigation, see +[`trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb). + +## GPU timeline breakdown + +`get_df_gpu_timeline()` returns a high-level view of GPU activity — computation, +communication, memcpy, exposed (non-overlapped) communication, busy, and idle +time: + +```python +analyzer.get_df_gpu_timeline() +``` + +Example output: + +| type | time ms | percent | +|------|---------|---------| +| busy_time | 6521.46 | 99.93 | +| computation_time | 6318.26 | 96.81 | +| exposed_communication_time | 203.06 | 3.11 | +| exposed_memcpy_time | 0.14 | 0.00 | +| idle_time | 4.72 | 0.07 | +| total_time | 6526.18 | 100.00 | + +This breakdown is computed by `GPUEventAnalyser`, which works directly from a list +of GPU events. It operates on **any GPU timeline** (PyTorch, JAX, and others) and +uses **no host-side call stack**, so you can run it standalone without building +the CPU-side tree: + +```python +import json +from TraceLens import GPUEventAnalyser + +with open("/path/to/trace.json") as f: + events = json.load(f)["traceEvents"] + +df = GPUEventAnalyser(events).get_breakdown_df() +``` + +For JAX traces (which describe events differently and include all GPUs in one +trace), use `JaxGPUEventAnalyser`; `get_breakdown_df_multigpu()` returns a +`{gpu_index: DataFrame}` mapping. To adapt the analyzer to another profiling +format, subclass it and reimplement `get_gpu_event_lists()`. + +## Per-operation GPU time + +Break GPU time down by the lowest-level CPU operations (from the call-stack +perspective) and the time they *induce* on the GPU. This is a more stable, +interpretable abstraction than raw kernel durations: + +```python +df = analyzer.get_df_kernel_launchers(include_kernel_details=True) +analyzer.get_df_kernel_launchers_summary(df) # grouped by op name +analyzer.get_df_kernel_launchers_unique_args(df, include_pct=True) # by op + unique args +``` + +Example op-name summary (top rows by induced GPU time): + +| name | Count | total_direct_kernel_time_ms | Percentage (%) | +|------|-------|-----------------------------|----------------| +| aten::mm | 126 | 5576.76 | 88.73 | +| flash_attn::_flash_attn_backward | 8 | 213.62 | 3.40 | +| flash_attn::_flash_attn_forward | 8 | 119.65 | 1.90 | +| aten::copy_ | 4 | 69.96 | 1.11 | + +Pass `event_name="aten::mm"` to `get_df_kernel_launchers_unique_args` to drill +into a single op's argument combinations. + +## Roofline metrics + +For modeled op classes (GEMM, SDPA, CONV, and more), `TreePerf` computes +analytical FLOPs and bytes and combines them with measured time to yield achieved +efficiency (`TFLOPS/s`, `TB/s`, `FLOPS/Byte`): + +```python +from TraceLens.PerfModel.torch_op_mapping import build_sheet_category_to_op_names + +categories = build_sheet_category_to_op_names(analyzer.op_to_perf_model_class_map) +gemm_events = [e for e in analyzer.tree.events if e["name"] in categories["GEMM"]] + +df_gemm = analyzer.build_df_perf_metrics(gemm_events, include_kernel_details=True) +analyzer.summarize_df_perf_metrics(df_gemm, ["mean"]) # group by M, N, K, bias +``` + +For how these metrics are defined and modeled, see +[GEMM analysis](../conceptual/gemm-analysis.md) and the +[performance report columns](../reference/perf-report-columns.md) reference. To +compute the same metrics from shapes alone, without a trace, see +[Model op performance without a trace](./perf-model-without-trace.md). The +[`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) +notebook walks through roofline metrics for every modeled category. + +## nn.Module attribution + +GPU time can be attributed all the way up to the Python `nn.Module` hierarchy, +making performance insights accessible without call-stack expertise. Build a +latency tree rooted at a module and traverse it: + +```python +analyzer = TreePerfAnalyzer.from_file("/path/to/trace.json", add_python_func=True) +tree = analyzer.tree + +event = next(e for e in tree.events if e["name"] == "nn.Module: DeepseekV2DecoderLayer_2") +analyzer.build_nn_module_latency_tree(event) + +# navigate the module hierarchy +children = tree.get_nn_module_children(event) # list of module UIDs +parent = tree.get_nn_module_parent(event) # parent module UID +``` + +Each node carries its aggregated `GPU Time`, so you can print a module-level +breakdown (GPU µs and percent of parent) that mirrors your model architecture: + +``` +└── nn.Module: DeepseekV2DecoderLayer_2 ..................... (10233.51) + ├── nn.Module: DeepseekV2AttentionMLA_2 ................. (6775.96) + │ ├── nn.Module: RadixAttention_2 ..................... (3204.62) + │ ├── nn.Module: RowParallelLinear_4 ................. (1446.40) + │ └── Non-nn.Module GPU Ops ........................... (399.22) + └── nn.Module: DeepseekV2MLP_2 .......................... (3154.66) +``` + +See +[`nn_module_view.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nn_module_view.ipynb) +for the full traversal, including a recursive pretty-printer. + +## Add a new operation + +Extending the perf model to a new op is straightforward, and contributions are +welcome: + +- In [`perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/perf_model.py): + parse the operation's shapes from the trace and write (or reuse) a performance + model that returns FLOPs and bytes. +- In [`torch_op_mapping.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/torch_op_mapping.py): + map the operation name to that perf model. + +Once you're comfortable with these workflows, the +[`generate_perf_report_pytorch.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/Reporting/generate_perf_report_pytorch.py) +script packages them into a ready-made Excel report. + +## Related topics + +- [The Trace2Tree data model](../conceptual/trace2tree.md) +- [Model op performance without a trace](./perf-model-without-trace.md) +- [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) +- [Replay a single operation in TraceLens](./event-replay.md) +- [API reference](../reference/api-reference.md) diff --git a/docs/how-to/tree-perf-analysis.md b/docs/how-to/tree-perf-analysis.md deleted file mode 100644 index 9c01e0057..000000000 --- a/docs/how-to/tree-perf-analysis.md +++ /dev/null @@ -1,94 +0,0 @@ - - -# Analyze GPU performance with TreePerf -```{meta} -:description: Learn how to use the TraceLens TreePerf software development kit to compute model- and operation-level GPU performance metrics from a PyTorch profiler trace. -:keywords: TraceLens, TreePerf, TreePerfAnalyzer, Trace2Tree, GPU performance, roofline, FLOPS, PyTorch profiler, ROCm, perf model -``` - -`TreePerf` is a Python software development kit (SDK) that works together with the `Trace2Tree` project. During profiling, PyTorch generates a trace JSON file, which `Trace2Tree` parses into a tree data structure that represents the hierarchical dependencies between CPU operations and GPU kernel executions. `TreePerf` builds on this tree structure to compute performance metrics at both the model and operation levels, so you can analyze, interpret, and optimize AI models with the detailed performance insights that are essential for architectural design and performance optimization. - -## Before you begin - -- TraceLens installed (see [Install TraceLens](../install/install.md)). -- A PyTorch profiler trace JSON file for the model you want to analyze. -- A basic understanding of how `Trace2Tree` builds the tree (see [Trace2Tree](../conceptual/trace2tree.md)). - -## Key ideas - -- *Tree structure for GPU execution analysis*: the hierarchical tree structure, generated by `Trace2Tree`, enables straightforward computation of GPU execution times. By linking CPU operations to their corresponding GPU kernel launches, it allows seamless aggregation of kernel execution times and performance metrics at various levels of granularity. -- *Performance metrics from JSON parsing*: metrics such as floating-point operations per second (FLOPS) and FLOPS/Byte are derived by extracting operation parameters from the JSON event data structure. These parameters are parsed and fed into performance models, enabling precise computation of performance metrics. - -## Key features - -### GPU timeline breakdown - -`TreePerf` provides a high-level view of GPU activity, which includes busy time, idle time, communication time, and so on. This timeline breakdown is computed by `GPUEventAnalyser`. For a standalone walkthrough of these metrics and how they're defined, see [Analyze a GPU timeline with GPUEventAnalyser](../how-to/gpu-event-analysis.md). - -Example output: - -| type | time ms | percent | -|-------------------------------|--------------|------------| -| busy_time | 6521.458211 | 99.927717 | -| computation_time | 6318.257587 | 96.814092 | -| exposed_communication_time | 203.057890 | 3.111438 | -| exposed_memcpy_time | 0.142734 | 0.002187 | -| idle_time | 4.717306 | 0.072283 | -| total_time | 6526.175517 | 100.000000 | - -### GPU compute time breakdown by CPU op - -Analyze the performance breakdown by examining the lowest-level CPU operations (from the call stack perspective) and the time they "induce" on the GPU. Unlike traditional methods that directly look at CPU and GPU durations, this feature provides insight into how CPU operations translate into GPU kernel launches, offering a more stable and interpretable abstraction of performance. - -Example output showing the top 5 ops sorted by the total GPU time each op induces: - -| name | Count | total_direct_kernel_time_ms | Percentage (%) | Cumulative Percentage (%) | -|------------------------------------------------------------|-------|-----------------------------|----------------|---------------------------| -| aten::mm | 126 | 5576.76 | 88.73 | 88.73 | -| flash_attn::_flash_attn_backward | 8 | 213.62 | 3.40 | 92.13 | -| flash_attn::_flash_attn_forward | 8 | 119.65 | 1.90 | 94.04 | -| aten::copy_ | 4 | 69.96 | 1.11 | 95.15 | -| triton_poi_fused_add_fill_mul_sigmoid_silu_sub_0 | 8 | 43.19 | 0.69 | 95.84 | - -### Roofline metrics - -Example output for `aten::mm` showing the top 5 param combos sorted by the total GPU time each param combo induces: - -| name | param: M | param: N | param: K | param: bias | FLOPS/Byte_first | TFLOPS/s_mean | -|---------|----------|----------|----------|-------------|------------------|---------------| -| aten::mm | 73728 | 28672 | 8192 | False | 5864.73 | 698.19 | -| aten::mm | 73728 | 8192 | 28672 | False | 5864.73 | 719.59 | -| aten::mm | 28672 | 8192 | 73728 | False | 5864.73 | 740.51 | -| aten::mm | 73728 | 128256 | 8192 | False | 6972.01 | 628.10 | -| aten::mm | 8192 | 28672 | 73728 | False | 5864.73 | 599.95 | - -## Add a new operation - -Adding new operations is simple, and contributions are welcome: - -- In [`perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/perf_model.py): - - Parse operation shapes from the JSON trace. - - Write the performance model (FLOPS, bytes) or reuse an existing one. -- In [`torch_op_mapping.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/torch_op_mapping.py): map the operation to the perf model here. - -## Try it in a notebook - -For more details and a walkthrough, check out the [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) notebook. - -```{note} -Replace the profile path in `tree_perf_example.ipynb` with your profile file to get insights instantly. -``` - -Once you're familiar with the workflows, you can directly use or modify the [`generate_perf_report_pytorch.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/Reporting/generate_perf_report_pytorch.py) script to generate a report Excel sheet quickly. - -## Related topics - -- [Trace2Tree](../conceptual/trace2tree.md) -- [Analyze a GPU timeline with GPUEventAnalyser](../how-to/gpu-event-analysis.md) -- [Generate a PyTorch performance report](../how-to/generate-perf-report-pytorch.md) -- [Replay a single operation in TraceLens](../how-to/event-replay.md) -- [API reference](../reference/api-reference.md) diff --git a/docs/index.rst b/docs/index.rst index fddfebb6e..c4f6e0135 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -32,7 +32,7 @@ The TraceLens source code is hosted at `github.com/AMD-AGI/TraceLens ` * :doc:`Replay a single operation ` * :doc:`Fuse multi-rank traces ` - * :doc:`Analyze performance with TreePerf ` + * :doc:`Analyze traces with the TraceLens SDK ` * :doc:`Generate optimization recommendations ` .. grid-item-card:: Concepts diff --git a/docs/reference/api-reference.md b/docs/reference/api-reference.md index 8472b8e8c..6078fb478 100644 --- a/docs/reference/api-reference.md +++ b/docs/reference/api-reference.md @@ -186,7 +186,7 @@ example notebook under `examples/`. | Module | Purpose | Reference | |--------|---------|-----------| | `Trace2Tree` | Build and navigate the hierarchical event tree (Python ops → CPU dispatch → GPU kernels). | [Trace2Tree data model](../conceptual/trace2tree.md), [`trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb) | -| `TreePerf` | GPU-timeline breakdown, per-op performance, and roofline metrics. | [Analyze performance with TreePerf](../how-to/tree-perf-analysis.md), [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) | +| `TreePerf` | GPU-timeline breakdown, per-op performance, and roofline metrics. | [Analyze traces with the TraceLens SDK](../how-to/sdk-analysis.md), [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) | | `PerfModel` | Compute and roofline performance models for operators. | [GEMM analysis](../conceptual/gemm-analysis.md), [Triton kernel performance model](../conceptual/triton-perf-model-walkthrough.md) | | `NcclAnalyser` | Multi-rank collective latency/bandwidth/skew analysis. | [Analyze collectives with NcclAnalyser](../how-to/nccl-analysis.md), [`nccl_analyser_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nccl_analyser_example.ipynb) | | `TraceDiff` | Morphological comparison of two trace trees. | [Compare two traces](../how-to/compare-traces.md), [`trace_diff_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace_diff_example.ipynb) | diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index 64df7c6f5..fca3c6dac 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -42,10 +42,10 @@ subtrees: title: Replay a single operation - file: how-to/trace-fusion title: Fuse multi-rank traces - - file: how-to/tree-perf-analysis - title: Analyze performance with TreePerf - - file: how-to/gpu-event-analysis - title: Analyze a GPU timeline + - file: how-to/sdk-analysis + title: Analyze traces with the SDK + - file: how-to/perf-model-without-trace + title: Model op performance without a trace - file: how-to/nccl-analysis title: Analyze collective communication - file: how-to/origami-integration From b8ee31566917eead2b5a16339be8f7cc5bdabf38 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Mon, 20 Jul 2026 12:14:16 -0400 Subject: [PATCH 08/19] chore: add Deval as code owner for conceptual inference doc Co-authored-by: Cursor --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 81418e0f9..e6132f149 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -26,6 +26,7 @@ /TraceLens/TraceUtils/split_inference_trace_annotation.py @devalshahamd /examples/custom_workflows/inference_analysis/ @devalshahamd /docs/how-to/generate-perf-report-pytorch-inference.md @devalshahamd +/docs/conceptual/inference-analysis.md @devalshahamd /tests/test_inference_perf_report.py @devalshahamd /tests/traces/inference/ @devalshahamd From 1562f71ab9e3dd7c2290604d437f7d2584d0a071 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Mon, 20 Jul 2026 12:22:59 -0400 Subject: [PATCH 09/19] docs: add roofline example table, fold add-new-op into roofline, fix SDK-vs-report framing Co-authored-by: Cursor --- docs/how-to/sdk-analysis.md | 48 ++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/docs/how-to/sdk-analysis.md b/docs/how-to/sdk-analysis.md index 23cc2a9ba..244c2eee8 100644 --- a/docs/how-to/sdk-analysis.md +++ b/docs/how-to/sdk-analysis.md @@ -19,6 +19,12 @@ and derive metrics at the timeline, operation, roofline, and `nn.Module` levels. This topic is the narrated reference for the SDK. Each section links a runnable notebook you can execute against your own trace. +If you just need the standard metrics in a spreadsheet, the +[`generate_perf_report_pytorch.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/Reporting/generate_perf_report_pytorch.py) +script packages everything covered here into a ready-made Excel report. Reach for +the SDK when you need more than that report offers — custom filtering, ad-hoc +aggregations, support for a new operation, or programmatic access to the tree. + ## On this page - [Build and navigate the tree](#build-and-navigate-the-tree) @@ -26,7 +32,6 @@ notebook you can execute against your own trace. - [Per-operation GPU time](#per-operation-gpu-time) - [Roofline metrics](#roofline-metrics) - [nn.Module attribution](#nnmodule-attribution) -- [Add a new operation](#add-a-new-operation) ## Before you begin @@ -155,6 +160,18 @@ df_gemm = analyzer.build_df_perf_metrics(gemm_events, include_kernel_details=Tru analyzer.summarize_df_perf_metrics(df_gemm, ["mean"]) # group by M, N, K, bias ``` +Example GEMM summary (grouped by shape, mean across occurrences): + +| M | N | K | bias | Count | kernel_time_ms | TFLOPS/s | FLOPS/Byte | +|------|------|------|-------|-------|----------------|----------|------------| +| 4096 | 4096 | 4096 | False | 32 | 0.412 | 334.1 | 682.7 | +| 8192 | 1024 | 8192 | False | 16 | 0.298 | 461.2 | 512.0 | +| 2048 | 2048 | 2048 | True | 48 | 0.061 | 281.5 | 341.3 | + +`FLOPS/Byte` is the operation's arithmetic intensity; comparing achieved +`TFLOPS/s` against the device peak tells you whether each shape is compute- or +memory-bound. + For how these metrics are defined and modeled, see [GEMM analysis](../conceptual/gemm-analysis.md) and the [performance report columns](../reference/perf-report-columns.md) reference. To @@ -163,6 +180,20 @@ compute the same metrics from shapes alone, without a trace, see [`tree_perf_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/tree_perf_example.ipynb) notebook walks through roofline metrics for every modeled category. +### Add a new operation + +Roofline metrics are only available for modeled op classes, but extending the +perf model to a new op is straightforward, and contributions are welcome: + +- In [`perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/perf_model.py): + parse the operation's shapes from the trace and write (or reuse) a performance + model that returns FLOPs and bytes. +- In [`torch_op_mapping.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/torch_op_mapping.py): + map the operation name to that perf model. + +Once mapped, the op is picked up automatically by `build_df_perf_metrics` and by +the report generator. + ## nn.Module attribution GPU time can be attributed all the way up to the Python `nn.Module` hierarchy, @@ -197,21 +228,6 @@ See [`nn_module_view.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nn_module_view.ipynb) for the full traversal, including a recursive pretty-printer. -## Add a new operation - -Extending the perf model to a new op is straightforward, and contributions are -welcome: - -- In [`perf_model.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/perf_model.py): - parse the operation's shapes from the trace and write (or reuse) a performance - model that returns FLOPs and bytes. -- In [`torch_op_mapping.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/PerfModel/torch_op_mapping.py): - map the operation name to that perf model. - -Once you're comfortable with these workflows, the -[`generate_perf_report_pytorch.py`](https://github.com/AMD-AGI/TraceLens/blob/main/TraceLens/Reporting/generate_perf_report_pytorch.py) -script packages them into a ready-made Excel report. - ## Related topics - [The Trace2Tree data model](../conceptual/trace2tree.md) From 020d276b19f8af00f49bdf940009059ca3d4ab17 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Mon, 20 Jul 2026 12:39:08 -0400 Subject: [PATCH 10/19] docs: fix fabricated nn.Module numbers and align roofline table to real SDK output - Remove invented per-module GPU-time values from the nn.Module attribution diagram; show the real pretty-printer format with placeholders and defer actual numbers to the notebook. Fix the label to Non-nn.Module GPU Time. - Correct the roofline example table to the real summarize_df_perf_metrics schema (param: M/N/K/bias, FLOPS/Byte_first, TFLOPS/s_mean) using values from the legacy tree-perf doc. - Restore the parent-chain traversal example and GPU-timeline metric definitions that were dropped when the legacy docs were consolidated. Co-authored-by: Cursor --- docs/how-to/sdk-analysis.md | 69 +++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/docs/how-to/sdk-analysis.md b/docs/how-to/sdk-analysis.md index 244c2eee8..f53bffdcc 100644 --- a/docs/how-to/sdk-analysis.md +++ b/docs/how-to/sdk-analysis.md @@ -76,6 +76,24 @@ the dispatch op lowers to runtime launches and kernels: └── UID: 107848, Category: kernel, Name: Cijk_Ailk_Bljk_BBS_BH... ``` +Walking the other direction, `traverse_parents_and_print` traces an op back +through the runtime and Python frames all the way to the model's `forward`, and +with `cpu_op_fields` it annotates each level with argument metadata: + +``` +Node: + UID: 41, Category: cpu_op, Name: aten::convolution + Input Dims: [[1, 768, 24, 24], [768, 768, 3, 3], []] + Input type: [float, float, float] +1-up: + UID: 40, Category: cpu_op, Name: aten::conv2d +2-up: + UID: 40139, Category: python_function, Name: +... +5-up: + UID: 40136, Category: python_function, Name: torch/nn/modules/conv.py(558): forward +``` + For a full interactive walkthrough of tree navigation, see [`trace2tree_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace2tree_example.ipynb). @@ -100,6 +118,16 @@ Example output: | idle_time | 4.72 | 0.07 | | total_time | 6526.18 | 100.00 | +The metrics are defined as: + +- **computation_time** — time in compute kernels (GEMMs, convolutions, and so on). +- **communication_time** — time in collective/communication kernels (for example, NCCL/RCCL). +- **memcpy_time** — time in host-device or device-device memory copies. +- **exposed_communication_time** / **exposed_memcpy_time** — the portion of + communication or memcpy that does *not* overlap computation (the part that + actually costs wall-clock time). +- **busy_time** / **idle_time** — time the GPU is doing anything vs. nothing. + This breakdown is computed by `GPUEventAnalyser`, which works directly from a list of GPU events. It operates on **any GPU timeline** (PyTorch, JAX, and others) and uses **no host-side call stack**, so you can run it standalone without building @@ -160,17 +188,18 @@ df_gemm = analyzer.build_df_perf_metrics(gemm_events, include_kernel_details=Tru analyzer.summarize_df_perf_metrics(df_gemm, ["mean"]) # group by M, N, K, bias ``` -Example GEMM summary (grouped by shape, mean across occurrences): +Example `aten::mm` summary (top rows by induced GPU time, grouped by shape): -| M | N | K | bias | Count | kernel_time_ms | TFLOPS/s | FLOPS/Byte | -|------|------|------|-------|-------|----------------|----------|------------| -| 4096 | 4096 | 4096 | False | 32 | 0.412 | 334.1 | 682.7 | -| 8192 | 1024 | 8192 | False | 16 | 0.298 | 461.2 | 512.0 | -| 2048 | 2048 | 2048 | True | 48 | 0.061 | 281.5 | 341.3 | +| name | param: M | param: N | param: K | param: bias | FLOPS/Byte_first | TFLOPS/s_mean | +|---------|----------|----------|----------|-------------|------------------|---------------| +| aten::mm | 73728 | 28672 | 8192 | False | 5864.73 | 698.19 | +| aten::mm | 73728 | 8192 | 28672 | False | 5864.73 | 719.59 | +| aten::mm | 28672 | 8192 | 73728 | False | 5864.73 | 740.51 | +| aten::mm | 73728 | 128256 | 8192 | False | 6972.01 | 628.10 | `FLOPS/Byte` is the operation's arithmetic intensity; comparing achieved -`TFLOPS/s` against the device peak tells you whether each shape is compute- or -memory-bound. +`TFLOPS/s_mean` against the device peak tells you whether each shape is compute- +or memory-bound. For how these metrics are defined and modeled, see [GEMM analysis](../conceptual/gemm-analysis.md) and the @@ -212,21 +241,25 @@ children = tree.get_nn_module_children(event) # list of module UIDs parent = tree.get_nn_module_parent(event) # parent module UID ``` -Each node carries its aggregated `GPU Time`, so you can print a module-level -breakdown (GPU µs and percent of parent) that mirrors your model architecture: +Each node carries its aggregated `GPU Time`, so a recursive walk prints a +module-level breakdown that mirrors your model architecture. Every line is +annotated with the module's `GPU Time` (in µs) and its percentage of the parent, +with a `Non-nn.Module GPU Time` entry for GPU ops that don't belong to a child +module: ``` -└── nn.Module: DeepseekV2DecoderLayer_2 ..................... (10233.51) - ├── nn.Module: DeepseekV2AttentionMLA_2 ................. (6775.96) - │ ├── nn.Module: RadixAttention_2 ..................... (3204.62) - │ ├── nn.Module: RowParallelLinear_4 ................. (1446.40) - │ └── Non-nn.Module GPU Ops ........................... (399.22) - └── nn.Module: DeepseekV2MLP_2 .......................... (3154.66) +nn.Module: DeepseekV2DecoderLayer_2 GPU Time: <µs>, Pct Parent: <%> +├── nn.Module: DeepseekV2AttentionMLA_2 GPU Time: <µs>, Pct Parent: <%> +│ ├── nn.Module: RadixAttention_2 +│ ├── nn.Module: RowParallelLinear_4 +│ └── Non-nn.Module GPU Time +└── nn.Module: DeepseekV2MLP_2 ``` -See +Run [`nn_module_view.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nn_module_view.ipynb) -for the full traversal, including a recursive pretty-printer. +against your own trace to produce the full tree with real per-module times; it +includes the recursive pretty-printer used above. ## Related topics From abf5672056795f719b09daeaf5ede05de0eb3ee9 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Mon, 20 Jul 2026 12:42:54 -0400 Subject: [PATCH 11/19] docs: restore real nn.Module GPU-time tree from the TraceLens poster The per-module numbers removed in the previous commit were not fabricated - they come from the published torch-conference poster (a DeepSeek-V2 decoder layer). Restore the full tree with the authoritative values and include the nodes that had been dropped (RMSNorm, ReplicatedLinear, ColumnParallelLinear, DeepseekScalingRotaryEmbedding, and the DeepseekV2MLP children). Co-authored-by: Cursor --- docs/how-to/sdk-analysis.md | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/docs/how-to/sdk-analysis.md b/docs/how-to/sdk-analysis.md index f53bffdcc..6f64eb539 100644 --- a/docs/how-to/sdk-analysis.md +++ b/docs/how-to/sdk-analysis.md @@ -242,24 +242,36 @@ parent = tree.get_nn_module_parent(event) # parent module UID ``` Each node carries its aggregated `GPU Time`, so a recursive walk prints a -module-level breakdown that mirrors your model architecture. Every line is -annotated with the module's `GPU Time` (in µs) and its percentage of the parent, -with a `Non-nn.Module GPU Time` entry for GPU ops that don't belong to a child +module-level breakdown that mirrors your model architecture. The example below is +a single DeepSeek-V2 decoder layer, with each module annotated by its GPU time +(µs) and a `Non-nn.Module GPU Ops` entry for GPU work not owned by a child module: ``` -nn.Module: DeepseekV2DecoderLayer_2 GPU Time: <µs>, Pct Parent: <%> -├── nn.Module: DeepseekV2AttentionMLA_2 GPU Time: <µs>, Pct Parent: <%> -│ ├── nn.Module: RadixAttention_2 -│ ├── nn.Module: RowParallelLinear_4 -│ └── Non-nn.Module GPU Time -└── nn.Module: DeepseekV2MLP_2 + (GPU Time μs) +└── nn.Module: DeepseekV2DecoderLayer_2 ..................... (10233.51) + ├── nn.Module: RMSNorm_8 ................................ (148.46) + ├── nn.Module: DeepseekV2AttentionMLA_2 ................. (6775.96) + │ ├── nn.Module: ReplicatedLinear_4 ................... (817.78) + │ ├── nn.Module: RMSNorm_9 ............................ (19.67) + │ ├── nn.Module: ColumnParallelLinear_2 ............... (268.80) + │ ├── nn.Module: ReplicatedLinear_5 ................... (469.98) + │ ├── nn.Module: RMSNorm_10 ........................... (10.21) + │ ├── nn.Module: DeepseekScalingRotaryEmbedding_0 ..... (139.27) + │ ├── nn.Module: RadixAttention_2 ..................... (3204.62) + │ ├── nn.Module: RowParallelLinear_4 ................. (1446.40) + │ └── Non-nn.Module GPU Ops ........................... (399.22) + ├── nn.Module: RMSNorm_11 .............................. (154.43) + └── nn.Module: DeepseekV2MLP_2 ......................... (3154.66) + ├── nn.Module: MergedColumnParallelLinear_2 ........ (1592.94) + ├── nn.Module: SiluAndMul_2 ....................... (84.44) + └── nn.Module: RowParallelLinear_5 ................ (1477.28) ``` -Run +See [`nn_module_view.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/nn_module_view.ipynb) -against your own trace to produce the full tree with real per-module times; it -includes the recursive pretty-printer used above. +for the full traversal against your own trace, including the recursive +pretty-printer. ## Related topics From 3ca99adad2ac0278afa0386d949860e1b911e373 Mon Sep 17 00:00:00 2001 From: Tharun Adithya Srikrishnan Date: Mon, 20 Jul 2026 18:03:47 +0000 Subject: [PATCH 12/19] Align TraceLens Agent Documentation --- README.md | 5 +- TraceLens/Agent/Analysis/README.md | 21 ++-- docs/how-to/{agentic-mode.md => agent.md} | 108 +++++++++--------- .../generate-perf-report-pytorch-inference.md | 2 +- docs/index.rst | 2 +- docs/sphinx/_toc.yml.in | 4 +- 6 files changed, 73 insertions(+), 69 deletions(-) rename docs/how-to/{agentic-mode.md => agent.md} (66%) diff --git a/README.md b/README.md index 377369ebe..6abde1e88 100755 --- a/README.md +++ b/README.md @@ -130,6 +130,7 @@ Each format's linked doc covers its full CLI reference. For PyTorch report compa | Compare PyTorch Reports | [docs/how-to/compare-perf-reports.md](docs/how-to/compare-perf-reports.md) | | Multi-Rank Collective Report | [docs/how-to/collective-report.md](docs/how-to/collective-report.md) | | Performance Report Columns | [docs/reference/perf-report-columns.md](docs/reference/perf-report-columns.md) | +| TraceLens Agent | [docs/how-to/agent.md](docs/how-to/agent.md) | --- @@ -155,6 +156,4 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on branching, commi - [GEMM analysis in TraceLens](docs/conceptual/gemm-analysis.md) - [The Trace2Tree data model](docs/conceptual/trace2tree.md) -- [PyTorch profiling walkthrough](docs/tutorials/torch-profiling.ipynb) - -For more background and conceptual topics, browse the [documentation site](docs/index.rst). +- [PyTorch profiling walkthrough](docs/tutorials/torch-profiling.ipynb) \ No newline at end of file diff --git a/TraceLens/Agent/Analysis/README.md b/TraceLens/Agent/Analysis/README.md index 3fdbcbc02..452cfd76c 100644 --- a/TraceLens/Agent/Analysis/README.md +++ b/TraceLens/Agent/Analysis/README.md @@ -60,8 +60,8 @@ pip install -e . The orchestrator runs against a single PyTorch profiler trace (`.json` or `.json.gz`). Collection is workload-specific: -- **Training and eager inference traces**: Instrument your loop with `torch.profiler.profile(...)`, enabling CPU-side call-stack and shape capture (`with_stack=True`, `record_shapes=True`). Profile a representative steady-state window (a handful of training/inference steps, post-warmup) and dump the trace via `prof.export_chrome_trace(...)`. A single rank's trace is sufficient for per-rank analysis. -- **vLLM / SGLang inference traces**: Trace collection has framework-, version-, and execution-mode-specific requirements (custom Docker images or framework patches to add roofline annotations, profiler-config flags for graph-capture profiling, steady-state window selection, optional trace splitting). Follow the canonical topic in [Generate a PyTorch inference performance report](../../../docs/how-to/generate-perf-report-pytorch-inference.md). For graph-mode workloads you will produce **two artifacts**: a graph-replay trace and a graph-capture folder; TraceLens (in inference mode with execution mode `graph replay + capture`) merges call-stack and shape information from the capture folder into the replay tree before analysis. +- **Generic Eager Traces**: Instrument your loop with `torch.profiler.profile(...)`, enabling CPU-side call-stack and shape capture (`with_stack=True`, `record_shapes=True`). Profile a representative steady-state window (a handful of steps, post-warmup) and log the trace with `prof.export_chrome_trace(...)`. A single rank's trace is enough for per-rank analysis. The [PyTorch profiling walkthrough](../../../docs/tutorials/torch-profiling.ipynb) walks through this end to end. +- **Inference Traces with Graph Capture**: Collection has framework-specific requirements. Follow guidelines in [Generate a PyTorch inference report](../../../docs/how-to/generate-perf-report-pytorch-inference.md). The [Profiling skill](../Profiling/README.md) automates vLLM/SGLang benchmarking and PyTorch profiler trace collection via [Magpie](https://github.com/AMD-AGI/Magpie), producing analysis-ready traces. For graph-mode workloads you produce two artifacts: a graph-replay trace and a graph-capture folder. In inference mode with execution mode `graph replay + capture`, TraceLens merges call-stack and shape information from the capture folder into the replay tree before analysis. ### 3. Establish a hardware performance baseline @@ -267,16 +267,17 @@ flowchart TD Sdpa --> CatFindings Others --> CatFindings - SysFindings --> Step8["Step 8: Validate"] - CatFindings --> Step8 - Step8 --> Step9["Step 9: Aggregate"] - Step9 --> Step11["Step 11: Final Report"] + SysFindings --> Agg["Step 7.5: Aggregate"] + CatFindings --> Agg + Agg --> Step8["Step 8: Validate"] + Step8 --> Step9["Step 9: Report Prep + Model ID"] + Step9 --> Step10["Step 10: Final Report"] ``` ### Orchestrator The **Analysis Orchestrator** skill coordinates the entire analysis workflow. -It queries user inputs, runs TraceLens to pre-compute trace data, and invokes system-level and compute kernel sub-agents in parallel. Finally, it validates outputs, aggregates findings, and generates a prioritized stakeholder report. +It queries user inputs, runs TraceLens to pre-compute trace data, and invokes system-level and compute kernel sub-agents in parallel. Finally, it aggregates and validates findings, identifies the model, and generates a prioritized stakeholder report. ### Workflow Steps @@ -284,12 +285,12 @@ It queries user inputs, runs TraceLens to pre-compute trace data, and invokes sy 0. Query User Inputs (Comparison scope, Trace path(s), Platform(s), Analysis Mode, Environment Setup) 1. Generate Performance Report (branches on analysis mode and comparison scope) 2-5. Prepare Category Data (GPU Util, Top Ops, Tree Data, Multi-Kernel Data, Category Filtering) + Fusion Candidate Extraction → category_data/fusion_candidates.json + kernel_fusion_metrics.json -5.5. Model Identification (subagent) → metadata/model_info.json 6. System-Level Analysis (CPU/Idle + Multi-Kernel + Kernel Fusion, PARALLEL) → system_findings/ 7. Compute Kernel Subagents (PARALLEL) → category_findings/ +7.5. Aggregate per-category Compute Kernel findings → priority_data.json (globally ranked) 8. Validate Subagent Outputs (time sanity, efficiency anomalies, coverage) -9. Aggregate Results: System-Level + Kernel Fusion + Compute Kernel Recommendations -10. Generate Final Report (analysis.md) +9. Prepare Report Data + Model Identification (subagent) → metadata/model_info.json +10. Generate Final Report (analysis.md): compose System-Level + Kernel Fusion + Compute Kernel sections ``` ### Sub-Agents diff --git a/docs/how-to/agentic-mode.md b/docs/how-to/agent.md similarity index 66% rename from docs/how-to/agentic-mode.md rename to docs/how-to/agent.md index 02d555202..a00d77046 100644 --- a/docs/how-to/agentic-mode.md +++ b/docs/how-to/agent.md @@ -14,9 +14,9 @@ See LICENSE for license information. This topic shows how to run the *TraceLens Agent*, an agentic performance-analysis workflow that reads a GPU trace and produces a single stakeholder-facing report, `analysis.md`, organized as a prioritized bottleneck list. Findings are ranked and -grouped into three tiers — compute kernel optimizations, kernel fusion -opportunities, and system-level optimizations — and each finding carries the -supporting evidence, the reasoning behind the call-out, and a concrete resolution. +grouped into three tiers: compute kernel optimizations, kernel fusion +opportunities, and system-level optimizations. Each finding carries the supporting +evidence, the reasoning behind the call-out, and a concrete resolution. The agent combines a structured, skill-driven workflow with codified TraceLens analysis for repeatable, reliable results. @@ -25,14 +25,13 @@ analysis for repeatable, reliable results. The agent runs in one of two modes: -- *Standalone* — single-trace roofline analysis. Use this when you have one trace - and want to find where performance falls short of hardware limits. This is the - recommended default. -- *Comparative* — two-trace gap analysis. The agent compares a primary trace - against a reference trace (for example, a different platform or a tuned config) +- *Standalone*: Single-trace roofline analysis. Use this when you have one trace + and want to find where performance falls short of hardware limits, find system bottlenecks or fusion opportunities. This is the recommended default. +- *Comparative*: Two-trace gap analysis. The agent compares a primary trace + against a reference trace, for example a different platform or a tuned config, and identifies inefficiencies in the primary trace relative to the reference. - Comparative analysis works best when both traces come from the same framework; - cross-framework comparisons can produce misleading gap estimates because of + Comparative analysis works best when both traces come from the same framework. + Cross-framework comparisons can produce misleading gap estimates because of structural differences in operation call stacks. Support depends on the execution mode of the traced workload: @@ -59,16 +58,19 @@ pip install git+https://github.com/AMD-AGI/TraceLens.git The orchestrator runs against a single `torch.profiler` trace (`.json` or `.json.gz`). Collection is workload-specific: -- *Training and eager inference traces* — instrument your loop with +- *Generic Eager Traces*: Instrument your loop with `torch.profiler.profile(...)`, enabling CPU-side call-stack and shape capture (`with_stack=True`, `record_shapes=True`). Profile a representative steady-state - window (a handful of post-warmup steps) and export with + window of a handful of post-warmup steps, then log the trace with `prof.export_chrome_trace(...)`. A single rank's trace is enough for per-rank analysis. -- *vLLM or SGLang inference traces* — collection has framework-, version-, and - execution-mode-specific requirements. Follow +- *Inference Traces with Graph Capture*: Collection has framework-specific + requirements. Follow [Generate a PyTorch inference performance report](./generate-perf-report-pytorch-inference.md). - For graph-mode workloads you produce two artifacts: a graph-replay trace and a + The Profiling Skill automates + vLLM/SGLang benchmarking and PyTorch profiler trace collection via + Magpie, producing analysis-ready traces. For + graph-mode workloads you produce two artifacts: a graph-replay trace and a graph-capture folder. In inference mode with execution mode `graph replay + capture`, TraceLens merges call-stack and shape information from the capture folder into the replay tree before analysis. @@ -77,10 +79,10 @@ The orchestrator runs against a single `torch.profiler` trace (`.json` or Roofline analysis compares each measured kernel against your GPU's max-achievable TFLOPS and HBM bandwidth, so it needs a `.json` arch file for your -hardware. Bundled arch files ship with the package; if your platform isn't -included — or you want stack-specific measured values instead of published specs — +hardware. Bundled arch files ship with the package. If your platform isn't +included, or you want stack-specific measured values instead of published specs, generate benchmark-derived peak TFLOPS and HBM bandwidth with the GPU -microbenchmarking suite, which writes the arch JSON in the shape the roofline +microbenchmarking suite. It writes the arch JSON in the shape the roofline expects. ## Run the agent from a chat @@ -99,7 +101,7 @@ In a chat with a capable model, invoke one of: agentic analysis workflow on ``` -- Comparative (two traces) — always pass the *baseline* trace first: +- Comparative (two traces) ```text Follow the analysis orchestrator installed with TraceLens and run the full @@ -120,8 +122,8 @@ Use the `agent` CLI to run the orchestrator non-interactively. Install it with: curl https://cursor.com/install -fsS | bash ``` -Pass every parameter inline so no interactive prompts are needed — useful for -batch runs and continuous-integration pipelines. For example, for a default +Pass every parameter inline so no interactive prompts are needed. This is useful +for batch runs and continuous-integration pipelines. For example, for a default standalone run on a remote node with a container: ```bash @@ -140,23 +142,21 @@ For vLLM or SGLang inference, set `analysis mode inference` and add ## Read the results Only `analysis.md` is intended for end-user review. Everything else under -`analysis_output/` is agent internals — intermediates the orchestrator and -sub-agents pass between steps (for example `system_findings/`, -`category_findings/`, `category_data/`, `metadata/`, `perf_report_csvs/`, and -`perf_report.xlsx`). +`analysis_output/` is agent internal: intermediates the orchestrator and +sub-agents pass between steps. Every report has the same top-level structure: -1. *Executive summary* — a one-paragraph workload characterization, a metrics +1. *Executive summary*: A one-paragraph workload characterization, a metrics table (total time, compute percentage, idle percentage, exposed-communication - percentage, and top bottleneck category), and a performance-improvement chart. -2. *Compute kernel optimizations* — a top-operations table followed by per-category - priority items (`P1`, `P2`, and so on) sorted by `impact_score`, each with an - Insight, Action, and Impact triplet. -3. *Kernel fusion opportunities* (experimental) — candidate modules to fuse. -4. *System-level optimizations* (experimental) — idle time, memory-copy overhead, + percentage, and top bottleneck category), and a representative chart. +2. *Compute kernel optimizations*: Top-operations table followed by per-category + priority items (`P1`, `P2`, and so on) sorted by `impact_score`. Each item + carries an Insight, Action, and Impact triplet. +3. *Kernel fusion opportunities* (experimental): Candidate modules to fuse. +4. *System-level optimizations* (experimental): Idle time, memory-copy overhead, and compute/communication overlap. -5. *Detailed analysis* — per-priority-item drill-down with identification +5. *Detailed analysis*: Per-priority-item drill-down with identification rationale, data tables, and reasoning. ### Programmatic interface @@ -164,30 +164,34 @@ Every report has the same top-level structure: Every report embeds HTML comment markers so a downstream system can consume it without parsing prose: -- `` … `` wraps each priority item's - Impact line; `mid` is the canonical `impact_score` and the category is the - analyzer category (`gemm`, `sdpa_fwd`, `elementwise`, `norm_fwd`, and so on). +- `` … + `` wraps each priority item's Impact line; `mid` is the + canonical `impact_score` and `` is the analyzer category (`gemm`, + `sdpa_fwd`, `elementwise`, `norm_fwd`, and so on). +- `` … `` wraps the Top + Operations table at the start of the Compute kernel optimizations section. - Per-item anchors (`#detailed-analysis-compute-pN`, `#detailed-analysis-fusion-PN`, `#detailed-analysis-system-pN`) link each summary card to its detailed reasoning section. -## How the analysis works +## Analysis workflow The workflow splits into three independently composable tiers: -- *System-level optimizations* — issues that affect the GPU pipeline as a whole, +- *System-level optimizations*: Issues that affect the GPU pipeline as a whole, such as idle time, memory-copy overhead, collective-communication blocking, and compute/communication overlap. -- *Kernel fusion opportunities* (experimental) — multi-kernel modules that could be +- *Kernel fusion opportunities* (experimental): Multi-kernel modules that could be fused, with estimated savings. -- *Compute kernel optimizations* — per-category kernel analysis (GEMM, attention, - elementwise, and so on) focused on individual operation efficiency. +- *Compute kernel optimizations*: Per-category kernel analysis (GEMM, attention, + elementwise, etc.) focused on individual operation efficiency. -The *analysis orchestrator* skill coordinates the workflow: it queries user +The analysis orchestrator skill coordinates the workflow: it queries user inputs, runs TraceLens to pre-compute trace data, invokes the system-level and -compute-kernel sub-agents in parallel, then validates outputs, aggregates -findings, and generates the prioritized report. The orchestrator and its -sub-agents run on a capable reasoning model declared in each agent's front matter. +compute-kernel sub-agents in parallel, aggregates and validates their findings, +identifies the model, and generates the prioritized report. The orchestrator and +its sub-agents run on a capable reasoning model declared in each agent's front +matter. The high-level steps are: @@ -197,19 +201,19 @@ The high-level steps are: scope). 3. Prepare category data (GPU utilization, top operations, tree data, multi-kernel data, category filtering) and extract fusion candidates. -4. Identify the model. -5. Run system-level analysis (CPU/idle, multi-kernel, and kernel fusion) in +4. Run system-level analysis (CPU/idle, multi-kernel, and kernel fusion) in parallel. -6. Run the compute-kernel sub-agents in parallel. +5. Run the compute-kernel sub-agents in parallel. +6. Aggregate the per-category findings into a globally ranked list. 7. Validate sub-agent outputs for time sanity, efficiency anomalies, and coverage. -8. Aggregate results across all three tiers. +8. Prepare report data and identify the model. 9. Generate the final `analysis.md` report. ### Sub-agents System-level sub-agents cover CPU and idle analysis, memory-copy and collective-communication patterns, and kernel fusion. Compute-kernel sub-agents -cover GEMM (`mm`, `bmm`, `addmm`), scaled dot-product attention, elementwise, +cover GEMM, scaled dot-product attention, elementwise, reduction, Triton-compiled kernels, Mixture-of-Experts, normalization, convolution, and a generic analyzer for uncategorized operations. @@ -225,5 +229,5 @@ node, or an SSH plus container-exec wrapper for a containerized node. - [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) - [Generate a PyTorch inference performance report](./generate-perf-report-pytorch-inference.md) - [Analyze traces with the TraceLens SDK](./sdk-analysis.md) -- [GEMM analysis](../conceptual/gemm-analysis.md) -- [The Trace2Tree data model](../conceptual/trace2tree.md) +- [Trace2Tree data model](../conceptual/trace2tree.md) +- [GEMM analysis](../conceptual/gemm-analysis.md) \ No newline at end of file diff --git a/docs/how-to/generate-perf-report-pytorch-inference.md b/docs/how-to/generate-perf-report-pytorch-inference.md index aa72e7d56..65907a94a 100644 --- a/docs/how-to/generate-perf-report-pytorch-inference.md +++ b/docs/how-to/generate-perf-report-pytorch-inference.md @@ -353,5 +353,5 @@ Run the tool with `--help` for the complete, version-specific argument list. - [Inference performance analysis in TraceLens](../conceptual/inference-analysis.md) - [Generate a PyTorch performance report](./generate-perf-report-pytorch.md) - [Compare two traces](./compare-traces.md) -- [Generate optimization recommendations](./agentic-mode.md) +- [Agentically orchestrate and generate optimization recommendations](./agent.md) - [API reference](../reference/api-reference.md) diff --git a/docs/index.rst b/docs/index.rst index c4f6e0135..e61866ef2 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -33,7 +33,7 @@ The TraceLens source code is hosted at `github.com/AMD-AGI/TraceLens ` * :doc:`Fuse multi-rank traces ` * :doc:`Analyze traces with the TraceLens SDK ` - * :doc:`Generate optimization recommendations ` + * :doc:`Agentic performance analysis with the TraceLens Agent ` .. grid-item-card:: Concepts diff --git a/docs/sphinx/_toc.yml.in b/docs/sphinx/_toc.yml.in index fca3c6dac..099ebb965 100644 --- a/docs/sphinx/_toc.yml.in +++ b/docs/sphinx/_toc.yml.in @@ -50,8 +50,8 @@ subtrees: title: Analyze collective communication - file: how-to/origami-integration title: Estimate kernel times with Origami - - file: how-to/agentic-mode - title: Generate optimization recommendations + - file: how-to/agent + title: Agentic performance analysis with the TraceLens Agent - caption: Concepts entries: From 4bb2d16105a18097fe88c949e0ddeafd135b5a3e Mon Sep 17 00:00:00 2001 From: Tharun Adithya Srikrishnan Date: Mon, 20 Jul 2026 19:59:35 +0000 Subject: [PATCH 13/19] Update README.md --- TraceLens/Agent/Analysis/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/TraceLens/Agent/Analysis/README.md b/TraceLens/Agent/Analysis/README.md index 452cfd76c..6f8180fb3 100644 --- a/TraceLens/Agent/Analysis/README.md +++ b/TraceLens/Agent/Analysis/README.md @@ -80,7 +80,11 @@ Roofline analysis compares each measured kernel against your GPU's max-achievabl ``` "Follow the analysis orchestrator installed with TraceLens and run the full agentic analysis workflow on " ``` - - Comparative (two traces): + - Standalone (single graph replay trace with capture trace directory): + ``` + "Follow the analysis orchestrator installed with TraceLens and run the full agentic analysis workflow on with capture folder " + ``` + - Comparative (two eager traces): ``` "Follow the analysis orchestrator installed with TraceLens and run the full agentic analysis workflow on and " ``` @@ -321,7 +325,7 @@ It queries user inputs, runs TraceLens to pre-compute trace data, and invokes sy The orchestrator and all 13 sub-agents currently run on **`claude-opus-4-7-high`**, declared in each agent file's front matter under `.cursor/agents/`. The full set: `cpu-idle-analyzer`, `multi-kernel-analyzer`, `kernel-fusion-analyzer`, `model-identification-agent`, `gemm-analyzer`, `sdpa-analyzer`, `elementwise-analyzer`, `reduce-analyzer`, `triton-analyzer`, `moe-analyzer`, `norm-analyzer`, `convolution-analyzer`, `generic-op-analyzer`. -### Supported Standalone Analysis Modes +### Supported Analysis Modes The orchestrator supports two analysis modes, selected during Step 0: From 1c6c71e70eca961ffee068546c9ce37a47392a8f Mon Sep 17 00:00:00 2001 From: Deval Shah Date: Tue, 21 Jul 2026 00:16:14 +0000 Subject: [PATCH 14/19] Minor edits --- docs/about/release-notes.md | 2 +- docs/how-to/generate-perf-report-pytorch-inference.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/about/release-notes.md b/docs/about/release-notes.md index 6cce191ff..11c604ae2 100644 --- a/docs/about/release-notes.md +++ b/docs/about/release-notes.md @@ -34,7 +34,7 @@ This release includes the following report generators. a unique-argument table, roofline metrics, and an optional short-kernel study. Compressed traces (`.zip`, `.gz`) are supported. - **PyTorch inference reports:** `TraceLens_generate_perf_report_pytorch_inference` - adds analysis for LLM-serving traces (vLLM/SGLang). It merges CUDA-graph + adds analysis for LLM-serving traces (vLLM/SGLang). It merges HIP/CUDA-graph capture traces into graph-replay traces (`--capture_folder`) to recover call-stack and shape information lost in graph mode, and uses per-step request annotations (prefill/decode counts and token statistics) to drive diff --git a/docs/how-to/generate-perf-report-pytorch-inference.md b/docs/how-to/generate-perf-report-pytorch-inference.md index 65907a94a..b0b61af7d 100644 --- a/docs/how-to/generate-perf-report-pytorch-inference.md +++ b/docs/how-to/generate-perf-report-pytorch-inference.md @@ -8,7 +8,7 @@ See LICENSE for license information. # Generate a PyTorch inference performance report ```{meta} :description: Learn how to collect, split, and analyze PyTorch LLM-serving (vLLM/SGLang) traces with TraceLens, including graph-capture merging for graph-mode inference. -:keywords: TraceLens, PyTorch profiler, inference, vLLM, SGLang, CUDA graph, HIP graph, graph capture, LLM serving, FusedMoE, roofline, trace splitting, steady state, ROCm +:keywords: TraceLens, PyTorch profiler, inference, vLLM, SGLang, HIP graph, CUDA graph, graph capture, LLM serving, FusedMoE, roofline, trace splitting, steady state, ROCm ``` `TraceLens_generate_perf_report_pytorch_inference` is the inference-oriented @@ -188,7 +188,7 @@ To apply them: | Flag | Type | Default | Description | |------|------|---------|-------------| -| `--profiler-config.capture_torch_profiler_dir DIR` | `str` | `""` | Directory where a profiler trace of the CUDA-graph capture phase is saved (rank 0 only). Requires `--profiler-config.profiler torch`. Leave empty to disable graph-capture profiling. | +| `--profiler-config.capture_torch_profiler_dir DIR` | `str` | `""` | Directory where a profiler trace of the HIP/CUDA-graph capture phase is saved (rank 0 only). Requires `--profiler-config.profiler torch`. Leave empty to disable graph-capture profiling. | | `--profiler-config.detailed_trace_annotation` | `bool` | `False` | When `True`, execution-step annotations include roofline metrics (`sk`, `sqsq`, `sqsk`) for context and generation requests. When `False`, annotations record only request and token counts. Enable for full roofline analysis. | Example - enable both flags alongside a steady-state window profile: @@ -205,7 +205,7 @@ Example - enable both flags alongside a steady-state window profile: ```{note} `capture_torch_profiler_dir` is only available when `--profiler-config.profiler torch` -is set. The capture trace is written once at server startup during CUDA-graph +is set. The capture trace is written once at server startup during HIP/CUDA-graph construction; the steady-state replay trace is written to `torch_profiler_dir` during the benchmark. Pass both paths to the report generator via `--capture_folder` and `--profile_json_path` respectively. From a0f999d383d338ef1a0fb1dc14b292b4a3644bb5 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Tue, 21 Jul 2026 14:25:46 -0400 Subject: [PATCH 15/19] docs: trim redundant Before you begin in inference report guide Drop the trace-file prerequisites that duplicated the Collect and Merge sections that immediately follow; keep only the genuine prerequisites (install + an inference setup). Addresses review feedback. Co-authored-by: Cursor --- docs/how-to/generate-perf-report-pytorch-inference.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/how-to/generate-perf-report-pytorch-inference.md b/docs/how-to/generate-perf-report-pytorch-inference.md index b0b61af7d..5172de65d 100644 --- a/docs/how-to/generate-perf-report-pytorch-inference.md +++ b/docs/how-to/generate-perf-report-pytorch-inference.md @@ -42,13 +42,8 @@ supported for vLLM and SGLang (proposed patches required). ## Before you begin -Before generating a report, confirm you have the following: - - TraceLens installed (see [Install TraceLens](../install/install.md)). -- A graph-replay `torch.profiler` trace (`.json` or `.json.gz`). If you don't - have one yet, [collect it](#collect-inference-traces) first. -- (Optional) The folder of graph-capture traces from the same run, if you want to - recover shapes and call stacks (see [Merge capture traces](#merge-capture-traces)). +- An LLM inference setup to profile (this guide uses vLLM or SGLang on MI300X). ## Collect inference traces From 40faad84eed11f3627f60785d22c692f3f1d0f07 Mon Sep 17 00:00:00 2001 From: Kyle Hoffmeyer <97640268+kyle-hoffmeyer@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:31:34 -0500 Subject: [PATCH 16/19] Add brief comparative agent description to compare-traces.md (#832) Brief specification in `compare-traces.md`. More thorough specification in `agent.md`. --- docs/how-to/compare-traces.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/how-to/compare-traces.md b/docs/how-to/compare-traces.md index 63233e5a3..426e7d969 100644 --- a/docs/how-to/compare-traces.md +++ b/docs/how-to/compare-traces.md @@ -15,8 +15,8 @@ This topic shows how to quantify the impact of a change by comparing two TraceLens reports side by side — for example, a baseline against a candidate after a code, library, or hardware change. -TraceLens offers two ways to compare traces, depending on how precise you need -the matching to be: +TraceLens offers three ways to compare traces, depending on how precise you need +the matching to be and the level of analysis you need: - **[Perf-report comparison](#perf-report-comparison):** compares two finished reports by **op name**, matching each sheet's rows (per-op aggregates, kernels, @@ -26,13 +26,13 @@ the matching to be: compares traces by their *morphological tree structure*, matching ops at the lowest common node. Use it when op names differ between traces (for example, across hardware, libraries, or framework versions) or when you need finer-grained, - programmatic analysis. + programmatic analysis. For an end-to-end analysis, the **[Comparative TraceLens Agent](#tracelens-agent-comparative-mode)** wraps TraceDiff in an agentic workflow that automates the comparison and provides optimization recommendations. ## Before you begin - TraceLens installed (see [Install TraceLens](../install/install.md)). -- Two generated reports (`.xlsx`), one per configuration. Generate them with - [TraceLens_generate_perf_report_pytorch](./generate-perf-report-pytorch.md). +- For perf-report comparison: two generated reports (`.xlsx`), one + per configuration. Generate them with [TraceLens_generate_perf_report_pytorch](./generate-perf-report-pytorch.md). ## Perf-report comparison @@ -186,9 +186,17 @@ See the [`trace_diff_example.ipynb`](https://github.com/AMD-AGI/TraceLens/blob/main/examples/trace_diff_example.ipynb) notebook for a worked example. +## TraceLens Agent (comparative mode) + +The Comparative TraceLens Agent is an agentic workflow that uses TraceDiff to analyze traces +and outputs a prioritized, stakeholder-facing optimization report. It's best used when you want +automated gap analysis with concrete optimization recommendations rather than +raw data tables. For more information, see here: [TraceLens Agent](./agent.md) + ## Related topics - [What is TraceLens?](../what-is-tracelens.md) - [Install TraceLens](../install/install.md) - [Generate a report](generate-reports.md) +- [Generate optimization recommendations with the TraceLens Agent](./agent.md) - [API reference](../reference/api-reference.md) From 5322ac1d62cb066656964dd69e93be1a2f9f17e9 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Tue, 21 Jul 2026 14:31:38 -0400 Subject: [PATCH 17/19] docs: fix double space in inference keywords meta Co-authored-by: Cursor --- docs/how-to/generate-perf-report-pytorch-inference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/how-to/generate-perf-report-pytorch-inference.md b/docs/how-to/generate-perf-report-pytorch-inference.md index 5172de65d..5c848932b 100644 --- a/docs/how-to/generate-perf-report-pytorch-inference.md +++ b/docs/how-to/generate-perf-report-pytorch-inference.md @@ -8,7 +8,7 @@ See LICENSE for license information. # Generate a PyTorch inference performance report ```{meta} :description: Learn how to collect, split, and analyze PyTorch LLM-serving (vLLM/SGLang) traces with TraceLens, including graph-capture merging for graph-mode inference. -:keywords: TraceLens, PyTorch profiler, inference, vLLM, SGLang, HIP graph, CUDA graph, graph capture, LLM serving, FusedMoE, roofline, trace splitting, steady state, ROCm +:keywords: TraceLens, PyTorch profiler, inference, vLLM, SGLang, HIP graph, CUDA graph, graph capture, LLM serving, FusedMoE, roofline, trace splitting, steady state, ROCm ``` `TraceLens_generate_perf_report_pytorch_inference` is the inference-oriented From 92d2a4a2236d6d181647474f00d9cb7445209c32 Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Tue, 21 Jul 2026 14:37:11 -0400 Subject: [PATCH 18/19] docs: keep compare-traces as two comparison methods, agent as TraceDiff extension The comparative agent wraps TraceDiff (one of the two matching methods) rather than being a third way to compare, so revert the intro to two ways and keep the agent framed as an extension of TraceDiff. Also tidy trailing whitespace. Co-authored-by: Cursor --- docs/how-to/compare-traces.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/how-to/compare-traces.md b/docs/how-to/compare-traces.md index 426e7d969..e2030806a 100644 --- a/docs/how-to/compare-traces.md +++ b/docs/how-to/compare-traces.md @@ -15,8 +15,8 @@ This topic shows how to quantify the impact of a change by comparing two TraceLens reports side by side — for example, a baseline against a candidate after a code, library, or hardware change. -TraceLens offers three ways to compare traces, depending on how precise you need -the matching to be and the level of analysis you need: +TraceLens offers two ways to compare traces, depending on how precise you need +the matching to be: - **[Perf-report comparison](#perf-report-comparison):** compares two finished reports by **op name**, matching each sheet's rows (per-op aggregates, kernels, @@ -188,10 +188,10 @@ notebook for a worked example. ## TraceLens Agent (comparative mode) -The Comparative TraceLens Agent is an agentic workflow that uses TraceDiff to analyze traces +The Comparative TraceLens Agent is an agentic workflow that uses TraceDiff to analyze traces and outputs a prioritized, stakeholder-facing optimization report. It's best used when you want automated gap analysis with concrete optimization recommendations rather than -raw data tables. For more information, see here: [TraceLens Agent](./agent.md) +raw data tables. For more information, see [TraceLens Agent](./agent.md). ## Related topics From 5c8fcac2a75c13df7bccf9610db0aba94f7f7b3a Mon Sep 17 00:00:00 2001 From: Adeem Jassani Date: Tue, 21 Jul 2026 14:49:53 -0400 Subject: [PATCH 19/19] docs: replace remaining 'accelerator' with 'GPU' per ROCm style (#829) Co-authored-by: Cursor --- docs/about/release-notes.md | 2 +- docs/conceptual/torch-profiling-analysis.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/about/release-notes.md b/docs/about/release-notes.md index 11c604ae2..5c0c9e1dc 100644 --- a/docs/about/release-notes.md +++ b/docs/about/release-notes.md @@ -67,7 +67,7 @@ This release includes the following analysis features. dtypes, strides, and concrete inputs to isolate problematic input patterns. - **Roofline modeling:** Computes arithmetic intensity (FLOPs/byte) and classifies operations as compute- or memory-bound relative to a target - accelerator's roofline knee point. Optional Origami-based simulated GEMM/SDPA + GPU's roofline knee point. Optional Origami-based simulated GEMM/SDPA timings are available when a GPU architecture specification is provided. - **Activation-recompute detection** and **kernel-overlap** sheets for deeper PyTorch analysis. diff --git a/docs/conceptual/torch-profiling-analysis.md b/docs/conceptual/torch-profiling-analysis.md index cde3c7ee5..165e46f68 100644 --- a/docs/conceptual/torch-profiling-analysis.md +++ b/docs/conceptual/torch-profiling-analysis.md @@ -12,7 +12,7 @@ See LICENSE for license information. Once you've collected a PyTorch trace and opened it in [Perfetto](https://ui.perfetto.dev/), the next question is what the trace actually means and how you read insights from it. This topic unpacks that for a *single-GPU* trace. Multi-GPU profiling is covered separately. -When you run a PyTorch model on a GPU, there's a hidden interplay between the CPU (host) and the GPU (accelerator). A PyTorch trace lets you observe this choreography, revealing how your code executes, where time is spent, and what might be slowing you down. +When you run a PyTorch model on a GPU, there's a hidden interplay between the CPU (host) and the GPU (device). A PyTorch trace lets you observe this choreography, revealing how your code executes, where time is spent, and what might be slowing you down. ## The execution model: host, GPU, and asynchronous launches