diff --git a/.github/action_configs/labeler.yml b/.github/action_configs/labeler.yml
index 1523e5fa038..4095e548448 100644
--- a/.github/action_configs/labeler.yml
+++ b/.github/action_configs/labeler.yml
@@ -1,49 +1,81 @@
# See help here: https://github.com/marketplace/actions/labeler
dependencies:
- - 'requirements.txt'
- - '**/setup.py'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'requirements.txt'
+ - '**/setup.py'
NNCF PT:
- - 'examples/torch/**/*!(.md)'
- - 'examples/post_training_quantization/torch/**/*!(.md)'
- - 'nncf/torch/**/*!(.md)'
- - 'tests/torch/**/*!(.md)'
- - 'nncf/quantization/**/torch_backend.py'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'examples/torch/**/*!(.md)'
+ - 'examples/post_training_quantization/torch/**/*!(.md)'
+ - 'nncf/torch/**/*!(.md)'
+ - 'tests/torch/**/*!(.md)'
+ - 'nncf/quantization/**/torch_backend.py'
NNCF TF:
- - 'examples/tensorflow/**/*!(.md)'
- - 'examples/post_training_quantization/tensorflow/**/*!(.md)'
- - 'nncf/tensorflow/**/*!(.md)'
- - 'tests/tensorflow/**/*!(.md)'
- - 'nncf/quantization/**/tf_backend.py'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'examples/tensorflow/**/*!(.md)'
+ - 'examples/post_training_quantization/tensorflow/**/*!(.md)'
+ - 'nncf/tensorflow/**/*!(.md)'
+ - 'tests/tensorflow/**/*!(.md)'
+ - 'nncf/quantization/**/tf_backend.py'
NNCF ONNX:
- - 'examples/onnx/**/*!(.md)'
- - 'examples/post_training_quantization/onnx/**/*!(.md)'
- - 'nncf/onnx/**/*!(.md)'
- - 'tests/onnx/**/*!(.md)'
- - 'nncf/quantization/**/onnx_backend.py'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'examples/onnx/**/*!(.md)'
+ - 'examples/post_training_quantization/onnx/**/*!(.md)'
+ - 'nncf/onnx/**/*!(.md)'
+ - 'tests/onnx/**/*!(.md)'
+ - 'nncf/quantization/**/onnx_backend.py'
NNCF OpenVINO:
- - 'examples/openvino/**/*!(.md)'
- - 'examples/post_training_quantization/openvino/**/*!(.md)'
- - 'nncf/openvino/**/*!(.md)'
- - 'tests/openvino/**/*!(.md)'
- - 'nncf/quantization/**/openvino_backend.py'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'examples/openvino/**/*!(.md)'
+ - 'examples/post_training_quantization/openvino/**/*!(.md)'
+ - 'nncf/openvino/**/*!(.md)'
+ - 'tests/openvino/**/*!(.md)'
+ - 'nncf/quantization/**/openvino_backend.py'
NNCF PTQ:
- - 'nncf/quantization/**/*!(.md)'
- - 'tests/post_training/**/*!(.md)'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'nncf/quantization/**/*!(.md)'
+ - 'tests/post_training/**/*!(.md)'
documentation:
- - '**/*.md'
- - 'docs/**/*'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - '**/*.md'
+ - 'docs/**/*'
experimental:
- - 'nncf/experimental/**/*!(.md)'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'nncf/experimental/**/*!(.md)'
NNCF Common:
- - 'examples/common/**/*!(.md)'
- - 'nncf/common/**/*!(.md)'
- - 'tests/common/**/*!(.md)'
+- any:
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'examples/common/**/*!(.md)'
+ - 'nncf/common/**/*!(.md)'
+ - 'tests/common/**/*!(.md)'
+
+release target:
+- any:
+ - base-branch:
+ - '^release_v*'
diff --git a/.github/workflows/api_changes_check.yml b/.github/workflows/api_changes_check.yml
index 9ff99ceb994..5815795f88c 100644
--- a/.github/workflows/api_changes_check.yml
+++ b/.github/workflows/api_changes_check.yml
@@ -2,7 +2,7 @@ name: API changes check
permissions: read-all
on:
- pull_request_target:
+ pull_request:
branches:
- develop
@@ -41,37 +41,24 @@ jobs:
echo ${CHANGED_FILES}
CHANGED_FILES=$(echo $CHANGED_FILES | tr '\n' ' ')
echo "changed_files=${CHANGED_FILES}" >> $GITHUB_OUTPUT
- - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
- if: ${{ !(contains(steps.diff.outputs.changed_files, 'differ')) && contains(github.event.pull_request.labels.*.name, 'API') }}
- with:
- github-token: ${{ secrets.ADD_LABELS_WITH_REST_API }}
- script: |
- github.rest.issues.removeLabel({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- name: "API"
- })
- - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+
+ - name: Add label
if: ${{ contains(steps.diff.outputs.changed_files, 'differ') }}
+ run: |
+ echo '{"pr_number": "${{ github.event.pull_request.number }}", "action": "add"}' > api_status.json
+
+ - name: Remove label
+ if: ${{ !(contains(steps.diff.outputs.changed_files, 'differ')) && contains(github.event.pull_request.labels.*.name, 'API') }}
+ run: |
+ echo '{"pr_number": "${{ github.event.pull_request.number }}", "action": "remove"}' > api_status.json
+
+ - name: No change label
+ if: ${{ !(contains(steps.diff.outputs.changed_files, 'differ')) && !contains(github.event.pull_request.labels.*.name, 'API') }}
+ run: |
+ echo '{"pr_number": "${{ github.event.pull_request.number }}", "action": "none"}' > api_status.json
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
with:
- github-token: ${{ secrets.ADD_LABELS_WITH_REST_API }}
- script: |
- github.rest.issues.addLabels({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- labels: ["API"]
- })
- - name: Add release label
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
- if: ${{ contains(github.event.pull_request.base.ref, 'release_v') }}
- with:
- github-token: ${{ secrets.ADD_LABELS_WITH_REST_API }}
- script: |
- github.rest.issues.addLabels({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- labels: ["release_target"]
- })
+ name: api_status
+ path: api_status.json
diff --git a/.github/workflows/api_set_label.yml b/.github/workflows/api_set_label.yml
new file mode 100644
index 00000000000..020226cbcfe
--- /dev/null
+++ b/.github/workflows/api_set_label.yml
@@ -0,0 +1,61 @@
+name: Set API label
+permissions: read-all
+
+on:
+ workflow_run:
+ workflows: ["API changes check"]
+ types:
+ - completed
+
+jobs:
+ update_labels:
+ runs-on: ubuntu-latest
+
+ permissions:
+ pull-requests: write
+
+ steps:
+ - name: Download artifact
+ id: download-artifact
+ uses: dawidd6/action-download-artifact@bf251b5aa9c2f7eeb574a96ee720e24f801b7c11 # v6
+ with:
+ run_id: ${{ github.event.workflow_run.id }}
+ name: api_status
+
+ - name: Get api_status
+ run: cat api_status.json
+
+ - name: Set output value
+ id: status
+ run: |
+ echo "action=$(cat api_status.json | jq -r .action)" >> $GITHUB_OUTPUT
+ echo "pr_number=$(cat api_status.json | jq -r .pr_number)" >> $GITHUB_OUTPUT
+
+ - name: Print outputs
+ run: echo ${{ steps.status.outputs.action }} ${{ steps.status.outputs.pr_number }}
+
+ - name: Add label
+ uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+ if: ${{ steps.status.outputs.action == 'add' }}
+ with:
+ github-token: "${{ secrets.GITHUB_TOKEN }}"
+ script: |
+ github.rest.issues.addLabels({
+ issue_number: ${{ steps.status.outputs.pr_number }},
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ labels: ["API"]
+ })
+
+ - name: Remove label
+ uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+ if: ${{ steps.status.outputs.action == 'remove' }}
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ github.rest.issues.removeLabel({
+ issue_number: ${{ steps.status.outputs.pr_number }},
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ labels: "API"
+ })
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 41652356355..d9b3d78194e 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -10,7 +10,7 @@ jobs:
pull-requests: write
runs-on: ubuntu-20.04
steps:
- - uses: actions/labeler@ac9175f8a1f3625fd0d4fb234536d26811351594 # v4.3.0
+ - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
configuration-path: '.github/action_configs/labeler.yml'
diff --git a/.github/workflows/post_pr_merge.yml b/.github/workflows/post_pr_merge.yml
index 9b34f92c46f..09c23143f7a 100644
--- a/.github/workflows/post_pr_merge.yml
+++ b/.github/workflows/post_pr_merge.yml
@@ -11,7 +11,7 @@ name: Post-PR merge actions
permissions: read-all
on:
- pull_request_target:
+ pull_request:
branches:
- develop
types:
diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml
index e72b0e32244..0af09cbeae7 100644
--- a/.github/workflows/precommit.yml
+++ b/.github/workflows/precommit.yml
@@ -229,3 +229,18 @@ jobs:
token: ${{ secrets.CODECOV_TOKEN }}
name: coverage_tensorflow
flags: TENSORFLOW
+ tools:
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
+ with:
+ lfs: true
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
+ with:
+ python-version: 3.8.18
+ cache: pip
+ - name: Install NNCF and test requirements
+ run: |
+ pip install -r tests/tools/requirements.txt
+ - name: Run tools precommit test scope
+ run: PYTHONPATH=./ pytest -ra tests/tools
diff --git a/MANIFEST.in b/MANIFEST.in
index 601d338aa4a..e4af5d0cef4 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -2,3 +2,4 @@ graft nncf/torch/extensions
graft nncf/common/hardware/configs
include LICENSE
include licensing/third-party-programs.txt
+include docs/PyPiPublishing.md
diff --git a/Makefile b/Makefile
index 08b3dad7713..db7a70cada0 100644
--- a/Makefile
+++ b/Makefile
@@ -145,10 +145,10 @@ test-torch:
pytest ${COVERAGE_ARGS} tests/torch -m "not weekly and not nightly and not models_hub" --junitxml ${JUNITXML_PATH} $(DATA_ARG)
test-torch-cpu:
- pytest ${COVERAGE_ARGS} ${NUM_WORKERS_ARG} tests/torch -ra -m "not cuda and not weekly and not nightly and not models_hub"
+ pytest ${COVERAGE_ARGS} ${NUM_WORKERS_ARG} tests/torch -ra -m "not cuda and not weekly and not nightly and not models_hub" --junitxml ${JUNITXML_PATH}
test-torch-cuda:
- pytest ${COVERAGE_ARGS} tests/torch -ra -m "cuda and not weekly and not nightly and not models_hub"
+ pytest ${COVERAGE_ARGS} tests/torch -ra -m "cuda and not weekly and not nightly and not models_hub" --junitxml ${JUNITXML_PATH}
test-torch-nightly:
pytest ${COVERAGE_ARGS} tests/torch -m nightly --junitxml ${JUNITXML_PATH} $(DATA_ARG)
diff --git a/README.md b/README.md
index 9929b92255c..b3dbbae07c9 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
[Usage](#usage) •
[Tutorials and Samples](#demos-tutorials-and-samples) •
[Third-party integration](#third-party-repository-integration) •
-[NNCF Model Zoo](./docs/ModelZoo.md)
+[Model Zoo](./docs/ModelZoo.md)
[![GitHub Release](https://img.shields.io/github/v/release/openvinotoolkit/nncf?color=green)](https://github.com/openvinotoolkit/nncf/releases)
[![Website](https://img.shields.io/website?up_color=blue&up_message=docs&url=https%3A%2F%2Fdocs.openvino.ai%2Flatest%2Fopenvino_docs_model_optimization_guide.html)](https://docs.openvino.ai/nncf)
@@ -37,6 +37,7 @@ learning frameworks.
| :------------------------------------------------------------------------------------------------------- | :-------: | :-------: | :-----------: | :-----------: |
| [Post-Training Quantization](./docs/usage/post_training_compression/post_training_quantization/Usage.md) | Supported | Supported | Supported | Supported |
| [Weights Compression](./docs/usage/post_training_compression/weights_compression/Usage.md) | Supported | Supported | Not supported | Not supported |
+| [Activation Sparsity](./nncf/experimental/torch/sparsify_activations/ActivationSparsity.md) | Not supported | Experimental |Not supported| Not supported |
### Training-Time Compression Algorithms
@@ -351,7 +352,6 @@ A list of notebooks demonstrating OpenVINO conversion and inference together wit
| Demo Model | Compression Algorithm | Backend | Domain |
|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------:|:---------:|:--------------------------------------------------------------------:|
| [YOLOv8](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/yolov8-optimization)
[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/yolov8-optimization/yolov8-object-detection.ipynb) | Post-Training Quantization | OpenVINO | Object Detection,
KeyPoint Detection,
Instance Segmentation |
-| [YOLOv7](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/yolov7-optimization) | Post-Training Quantization | OpenVINO | Object Detection |
| [EfficientSAM](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/efficient-sam) | Post-Training Quantization | OpenVINO | Image Segmentation |
| [Segment Anything Model](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/segment-anything) | Post-Training Quantization | OpenVINO | Image Segmentation |
| [OneFormer](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/oneformer-segmentation) | Post-Training Quantization | OpenVINO | Image Segmentation |
@@ -370,7 +370,6 @@ A list of notebooks demonstrating OpenVINO conversion and inference together wit
| [Grammar Error Correction](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/grammar-correction) | Post-Training Quantization | OpenVINO | NLP, Grammar Correction |
| [LLM Instruction Following](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-question-answering) | Weight Compression | OpenVINO | NLP, Instruction Following |
| [Dolly 2.0](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/dolly-2-instruction-following) | Weight Compression | OpenVINO | NLP, Instruction Following |
-| [Stable-Zephyr-3b](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/stable-zephyr-3b-chatbot) | Weight Compression | OpenVINO | NLP, Chat Bot |
| [LLM Chat Bots](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-chatbot) | Weight Compression | OpenVINO | NLP, Chat Bot |
### Post-Training Quantization Examples
@@ -440,12 +439,12 @@ conda install -c conda-forge nncf
- Ubuntu\* 18.04 or later (64-bit)
- Python\* 3.8 or later
- Supported frameworks:
- - PyTorch\* >=2.2, <2.4
+ - PyTorch\* >=2.3, <2.5
- TensorFlow\* >=2.8.4, <=2.15.1
- ONNX\* ==1.16.0
- OpenVINO\* >=2022.3.0
-This repository is tested on Python* 3.8.10, PyTorch* 2.3.0 (NVidia CUDA\* Toolkit 12.1) and TensorFlow* 2.12.1 (NVidia CUDA\* Toolkit 11.8).
+This repository is tested on Python* 3.8.10, PyTorch* 2.4.0 (NVidia CUDA\* Toolkit 12.1) and TensorFlow* 2.12.1 (NVidia CUDA\* Toolkit 11.8).
## NNCF Compressed NNCF Model Zoo
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index b43c17627de..391d8e115a5 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1,5 +1,41 @@
# Release Notes
+## New in Release 2.13.0
+
+Post-training Quantization:
+
+- Features:`
+ - (OpenVINO) Added support for combining GPTQ with AWQ and Scale Estimation (SE) algorithms in `nncf.compress_weights()` for more accurate weight compression of LLMs. Thus, the following combinations with GPTQ are now supported: AWQ+GPTQ+SE, AWQ+GPTQ, GPTQ+SE, GPTQ.
+ - (OpenVINO) Added LoRA Correction Algorithm to further improve the accuracy of int4 compressed models on top of other algorithms - AWQ and Scale Estimation. It can be enabled via the optional `lora_correction` parameter of the `nncf.compress_weights()` API. The algorithm increases compression time and incurs a negligible model size overhead. Refer to [accuracy/footprint trade-off](docs/usage/post_training_compression/weights_compression/Usage.md#accuracyfootprint-trade-off) for different int4 compression methods.
+ - (PyTorch) Added implementation of the experimental Post-training Activation Pruning algorithm. Refer to [Activation Sparsity](nncf/experimental/torch/sparsify_activations/ActivationSparsity.md) for details.
+ - Added a memory monitoring tool for logging the memory a piece of python code or a script allocates. Refer to [NNCF tools](tools/README.md) for details.
+- Fixes:
+ - (OpenVINO) Fixed the quantization of Convolution and LSTMSequence operations in cases where some inputs are part of a ShapeOF subgraph.
+ - (OpenVINO) Fixed issue with the FakeConvert duplication for FP8.
+ - Fixed Smooth Quant algorithm issue in case of the incorrect shapes.
+ - Fixed non-deterministic layer-wise scheduling.
+- Improvements:
+ - (OpenVINO) Increased hardware-fused pattern coverage.
+ - Improved progress bar logic during weights compression for more accurate remaining time estimation.
+ - Extended Scale estimation bitness range support for the `nncf.compress_weights()`.
+ - Removed extra logging for the algorithm-generated ignored scope.
+- Tutorials:
+ - [Post-Training Optimization of Flux.1 Model](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/flux.1-image-generation/flux.1-image-generation.ipynb)
+ - [Post-Training Optimization of PixArt-α Model](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/pixart/pixart.ipynb)
+ - [Post-Training Optimization of InternVL2 Model](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/internvl2/internvl2.ipynb)
+ - [Post-Training Optimization of Qwen2Audio Model](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/qwen2-audio/qwen2-audio.ipynb)
+ - [Post-Training Optimization of NuExtract Model](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/nuextract-structure-extraction/nuextract-structure-extraction.ipynb)
+ - [Post-Training Optimization of MiniCPM-V2 Model](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/minicpm-v-multimodal-chatbot/minicpm-v-multimodal-chatbot.ipynb)
+
+Compression-aware training:
+
+- Fixes:
+ - (PyTorch) Fixed some scenarios of NNCF patching interfering with `torch.compile`.
+
+Requirements:
+
+- Updated PyTorch (2.4.0) and Torchvision (0.19.0) versions.
+
## New in Release 2.12.0
Post-training Quantization:
@@ -40,7 +76,6 @@ Compression-aware training:
Requirements:
- Updated Tensorflow (2.15) version. This version requires Python 3.9-3.11.
-- Added NumPy 2.0 support.
## New in Release 2.11.0
diff --git a/constraints.txt b/constraints.txt
index 9d055e5a01d..fe0e42aace1 100644
--- a/constraints.txt
+++ b/constraints.txt
@@ -1,9 +1,9 @@
# Openvino
-openvino==2024.3.0
+openvino==2024.4.0
# Pytorch
-torch==2.3.0
-torchvision==0.18.0
+torch==2.4.0
+torchvision==0.19.0
# ONNX
onnx==1.16.0
@@ -20,3 +20,4 @@ pytest-mock==3.12.0
pytest-dependency==0.6.0
pytest-ordering==0.6
pytest-xdist==3.5.0
+pytest-forked==1.6.0
diff --git a/docs/Installation.md b/docs/Installation.md
index 214cf2e5564..807ff4f793b 100644
--- a/docs/Installation.md
+++ b/docs/Installation.md
@@ -43,7 +43,8 @@ as well as the supported versions of Python:
| NNCF | OpenVINO | PyTorch | ONNX | TensorFlow | Python |
|-----------|------------|----------|----------|------------|--------|
-| `develop` | `2024.3.0` | `2.3.0` | `1.16.0` | `2.15.1` | `3.8`* |
+| `develop` | `2024.4.0` | `2.4.0` | `1.16.0` | `2.15.1` | `3.8`* |
+| `2.13.0` | `2024.4.0` | `2.4.0` | `1.16.0` | `2.15.1` | `3.8`* |
| `2.12.0` | `2024.3.0` | `2.3.0` | `1.16.0` | `2.15.1` | `3.8`* |
| `2.11.0` | `2024.2.0` | `2.3.0` | `1.16.0` | `2.12.0` | `3.8` |
| `2.10.0` | `2024.1.0` | `2.2.1` | `1.16.0` | `2.12.0` | `3.8` |
diff --git a/docs/PyPiPublishing.md b/docs/PyPiPublishing.md
new file mode 100644
index 00000000000..2ac6ebfd097
--- /dev/null
+++ b/docs/PyPiPublishing.md
@@ -0,0 +1,142 @@
+[![GitHub Release](https://img.shields.io/github/v/release/openvinotoolkit/nncf?color=green)](https://github.com/openvinotoolkit/nncf/releases)
+[![Website](https://img.shields.io/website?up_color=blue&up_message=docs&url=https%3A%2F%2Fdocs.openvino.ai%2Flatest%2Fopenvino_docs_model_optimization_guide.html)](https://docs.openvino.ai/nncf)
+[![Apache License Version 2.0](https://img.shields.io/badge/license-Apache_2.0-green.svg)](https://github.com/openvinotoolkit/nncf?tab=Apache-2.0-1-ov-file#readme)
+[![PyPI Downloads](https://static.pepy.tech/badge/nncf)](https://pypi.org/project/nncf/)
+
+# Neural Network Compression Framework (NNCF)
+
+Neural Network Compression Framework (NNCF) provides a suite of post-training
+and training-time algorithms for optimizing inference of neural networks in
+[OpenVINO™](https://docs.openvino.ai) with a minimal accuracy drop.
+
+NNCF is designed to work with models from [PyTorch](https://pytorch.org/),
+[TensorFlow](https://www.tensorflow.org/), [ONNX](https://onnx.ai/) and
+[OpenVINO™](https://docs.openvino.ai).
+
+The framework is organized as a Python package that can be built and used
+as a standalone tool. Its architecture is unified to make adding different
+compression algorithms easy for both PyTorch and TensorFlow.
+
+NNCF provides samples that demonstrate the usage of compression algorithms
+for different use cases and models. See compression results achievable
+with the NNCF-powered samples on the
+[NNCF Model Zoo page](https://github.com/openvinotoolkit/nncf/blob/develop/docs/ModelZoo.md).
+
+For more information about NNCF, see:
+
+- [NNCF repository](https://github.com/openvinotoolkit/nncf)
+- [User documentation](https://docs.openvino.ai/nncf)
+- [NNCF API documentation](https://openvinotoolkit.github.io/nncf/autoapi/nncf/)
+- [Usage examples](https://github.com/openvinotoolkit/nncf/tree/develop/docs/usage)
+- [Notebook tutorials](https://github.com/openvinotoolkit/openvino_notebooks/blob/latest/notebooks/README.md#model-training)
+
+## Table of contents
+
+- [Key Features](#key-features)
+- [Installation](#installation-guide)
+- [Third-party integration](#third-party-repository-integration)
+- [NNCF Compressed Model Zoo](#nncf-compressed-model-zoo)
+
+## Key Features
+
+### Post-Training Compression Algorithms
+
+| Compression algorithm | OpenVINO | PyTorch | TensorFlow | ONNX |
+| :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------: | :-------: | :-----------: | :-----------: |
+| [Post-Training Quantization](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/post_training_compression/post_training_quantization/Usage.md) | Supported | Supported | Supported | Supported |
+| [Weight Compression](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/post_training_compression/weights_compression/Usage.md) | Supported | Supported | Not supported | Not supported |
+| [Activation Sparsity](https://github.com/openvinotoolkit/nncf/blob/develop/nncf/experimental/torch/sparsify_activations/ActivationSparsity.md) | Not supported | Experimental |Not supported| Not supported |
+
+### Training-Time Compression Algorithms
+
+| Compression algorithm | PyTorch | TensorFlow |
+| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | :-----------: |
+| [Quantization Aware Training](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/training_time_compression/quantization_aware_training/Usage.md) | Supported | Supported |
+| [Mixed-Precision Quantization](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/training_time_compression/other_algorithms/LegacyQuantization.md#mixed-precision-quantization) | Supported | Not supported |
+| [Sparsity](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/training_time_compression/other_algorithms/Sparsity.md) | Supported | Supported |
+| [Filter pruning](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/training_time_compression/other_algorithms/Pruning.md) | Supported | Supported |
+| [Movement pruning](https://github.com/openvinotoolkit/nncf/blob/develop/nncf/experimental/torch/sparsity/movement/MovementSparsity.md) | Experimental | Not supported |
+
+- Automatic, configurable model graph transformation to obtain the compressed
+ model.
+ > **NOTE**: Limited support for TensorFlow models. Only models created using
+ Sequential or Keras Functional API are supported.
+- Common interface for compression methods.
+- GPU-accelerated layers for faster compressed model fine-tuning.
+- Distributed training support.
+- Git patch for prominent third-party repository
+ ([huggingface-transformers](https://github.com/huggingface/transformers))
+ demonstrating the process of integrating NNCF into custom training pipelines.
+- Seamless combination of pruning, sparsity, and quantization algorithms. Refer
+ to [optimum-intel](https://github.com/huggingface/optimum-intel/tree/main/examples/openvino)
+ for examples of joint (movement) pruning, quantization, and distillation
+ (JPQD), end-to-end from NNCF optimization to compressed OpenVINO IR.
+- Exporting PyTorch compressed models to ONNX\* checkpoints and TensorFlow
+ compressed models to SavedModel or Frozen Graph format, ready to use with
+ [OpenVINO™ toolkit](https://docs.openvino.ai).
+- Support for [Accuracy-Aware model training](https://github.com/openvinotoolkit/nncf/blob/develop/docs/usage/training_time_compression/other_algorithms/Usage.md#accuracy-aware-model-training)
+ pipelines via the [Adaptive Compression Level Training](https://github.com/openvinotoolkit/nncf/blob/develop/docs/accuracy_aware_model_training/AdaptiveCompressionLevelTraining.md)
+ and [Early Exit Training](https://github.com/openvinotoolkit/nncf/blob/develop/docs/accuracy_aware_model_training/EarlyExitTraining.md).
+
+## Installation Guide
+
+NNCF can be installed as a regular PyPI package:
+
+```bash
+pip install nncf
+```
+
+For detailed installation instructions, refer to the
+[Installation](https://github.com/openvinotoolkit/nncf/blob/develop/docs/Installation.md) guide.
+
+### System Requirements
+
+- Ubuntu 18.04 or later (64-bit)
+- Python 3.8 or later
+- Supported frameworks:
+ - PyTorch >=2.2, <2.5
+ - TensorFlow >=2.8.4, <=2.15.1
+ - ONNX ==1.16.0
+ - OpenVINO >=2022.3.0
+
+## Third-party Repository Integration
+
+NNCF may be easily integrated into training/evaluation pipelines of third-party
+repositories.
+
+- [OpenVINO Training Extensions](https://github.com/openvinotoolkit/training_extensions)
+
+ NNCF is integrated into OpenVINO Training Extensions as a model optimization
+ backend. You can train, optimize, and export new models based on available
+ model templates as well as run the exported models with OpenVINO.
+
+- [HuggingFace Optimum Intel](https://huggingface.co/docs/optimum/intel/optimization_ov)
+
+ NNCF is used as a compression backend within the renowned `transformers`
+ repository in HuggingFace Optimum Intel.
+
+## NNCF Compressed Model Zoo
+
+A list of models and compression results for them can be found at our
+[NNCF Model Zoo page](https://github.com/openvinotoolkit/nncf/blob/develop/docs/ModelZoo.md).
+
+## Citing
+
+```bi
+@article{kozlov2020neural,
+ title = {Neural network compression framework for fast model inference},
+ author = {Kozlov, Alexander and Lazarevich, Ivan and Shamporov, Vasily and Lyalyushkin, Nikolay and Gorbachev, Yury},
+ journal = {arXiv preprint arXiv:2002.08679},
+ year = {2020}
+}
+```
+
+## Telemetry
+
+NNCF as part of the OpenVINO™ toolkit collects anonymous usage data for the
+purpose of improving OpenVINO™ tools. You can opt-out at any time by running
+the following command in the Python environment where you have NNCF installed:
+
+`opt_in_out --opt_out`
+
+More information available on [OpenVINO telemetry](https://docs.openvino.ai/nightly/about-openvino/additional-resources/telemetry.html).
diff --git a/docs/usage/post_training_compression/weights_compression/Usage.md b/docs/usage/post_training_compression/weights_compression/Usage.md
index faa8ad43473..40a3749498f 100644
--- a/docs/usage/post_training_compression/weights_compression/Usage.md
+++ b/docs/usage/post_training_compression/weights_compression/Usage.md
@@ -1,20 +1,20 @@
-### Weights Compression
+## Weights Compression
[OpenVINO](https://github.com/openvinotoolkit/openvino) is the preferred backend to run Weights Compression with, and PyTorch is also supported.
-#### The algorithm description
+### The algorithm description
The Weights Compression algorithm is aimed at compressing the weights of the models and can be used to optimize the model footprint and performance of large models where the size of weights is relatively larger than the size of activations, for example, Large Language Models (LLM). The algorithm compresses weights for Linear, Convolution and Embedding layers.
-#### Supported modes
+### Supported modes
By default, weights are compressed asymmetrically to 8-bit integer data type - "INT8_ASYM" mode.
-OpenVINO backend also supports 3 modes of mixed precision weight quantization with a 4-bit data type as a primary precision - INT4_SYM, INT4_ASYM, NF4, E2M1. The primary precision in case of INT4_SYM mode is signed 4-bit integer and weights are quantized to it [symmetrically](/docs/usage/training_time_compression/other_algorithms/LegacyQuantization.md#symmetric-quantization) without zero point. In case of INT4_ASYM mode - unsigned 4-bit integer and weight are quantized to it [asymmetrically](/docs/usage/training_time_compression/other_algorithms/LegacyQuantization.md#asymmetric-quantization) with a typical non-fixed zero point. In case of NF4 mode - [nf4](https://arxiv.org/pdf/2305.14314v1.pdf) data type without zero point. In case of E2M1 mode - [e2m1](https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf) data type without zero point and has 8bit [E8M0](https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf) scale.
+OpenVINO backend also supports 4 modes of mixed precision weight quantization with a 4-bit data type as a primary precision - INT4_SYM, INT4_ASYM, NF4, E2M1. The primary precision in case of INT4_SYM mode is signed 4-bit integer and weights are quantized to it [symmetrically](/docs/usage/training_time_compression/other_algorithms/LegacyQuantization.md#symmetric-quantization) without zero point. In case of INT4_ASYM mode - unsigned 4-bit integer and weight are quantized to it [asymmetrically](/docs/usage/training_time_compression/other_algorithms/LegacyQuantization.md#asymmetric-quantization) with a typical non-fixed zero point. In case of NF4 mode - [nf4](https://arxiv.org/pdf/2305.14314v1.pdf) data type without zero point. In case of E2M1 mode - [e2m1](https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf) data type without zero point and has 8bit [E8M0](https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf) scale.
All 4-bit modes have a grouped quantization support, when small group of weights (e.g. 128) in the channel dimension share quantization parameters (scale).
All embeddings, convolutions and last linear layers are always compressed to 8-bit integer data type. To quantize embeddings and last linear layers to 4-bit, use `all_layers=True`.
Percent of the rest layers compressed to 4-bit can be configured by "ratio" parameter. E.g. ratio=0.9 means 90% of layers compressed to the corresponding 4-bit data type and the rest to 8-bit asymmetric integer data type.
-#### User guide
+### User guide
- Compress weights asymmetrically to 8-bit integer data type.
@@ -61,7 +61,8 @@ nncf_dataset = nncf.Dataset(data_source, transform_fn)
compressed_model = compress_weights(model, mode=CompressWeightsMode.INT4_SYM, ratio=0.8, dataset=nncf_dataset) # model is openvino.Model object
```
-- Accuracy of the 4-bit compressed models also can be improved by using AWQ, Scale Estimation or GPTQ algorithms over data-based mixed-precision algorithm. These algorithms work by equalizing a subset of weights to minimize the difference between the original precision and the 4-bit precision. The AWQ algorithm can be used in conjunction with either the Scale Estimation or GPTQ algorithm. However, Scale Estimation and GPTQ algorithms are mutually exclusive and cannot be used together. Below are examples demonstrating how to enable the AWQ, Scale Estimation or GPTQ algorithms:
+- Accuracy of the 4-bit compressed models also can be improved by using AWQ, Scale Estimation, GPTQ or Lora Correction algorithms over data-based mixed-precision algorithm. These algorithms work by equalizing a subset of weights to minimize the difference between the original precision and the 4-bit precision.
+Unlike all others, the Lora Correction algorithm inserts an additional Linear layers for reducing quantization noise and further accuracy improvement. Inevitably, this approach introduces a memory and a runtime overheads, but they are negligible, since the inserted weight much smaller and can be quantized to 8-bit. The AWQ, Scale Estimation (SE) and Lora Correction (LC) algo can be used in any combination together: AWQ + SE, AWQ + LC, SE + LC, AWQ + SE + LC. The GPTQ algorithm can be combined with AWQ and Scale Estimation in any combination: AWQ + GPTQ, GPTQ + SE, AWQ + GPTQ + SE. Below are examples demonstrating how to enable the AWQ, Scale Estimation, GPTQ or Lora Correction algorithms:
Prepare the calibration dataset for data-based algorithms:
@@ -135,6 +136,16 @@ model.model = compress_weights(model.model,
gptq=True)
```
+- How to compress 80% of layers to 4-bit integer with a default data-based mixed precision algorithm and Lora Correction algorithm. It requires setting `lora_correction` to `True` additionally to data-based mixed-precision algorithm.
+
+```python
+model.model = compress_weights(model.model,
+ mode=CompressWeightsMode.INT4_SYM,
+ ratio=0.8,
+ dataset=nncf_dataset,
+ lora_correction=True)
+```
+
- `NF4` mode can be considered for improving accuracy, but currently models quantized to nf4 should not be faster models
quantized to 8-bit asymmetric integer. Here's the example how to compress weights to nf4 data type with group size = 128.
Different `group_size` and `ratio` are also supported.
@@ -153,7 +164,9 @@ from nncf import compress_weights, CompressWeightsMode
compressed_model = compress_weights(model, mode=CompressWeightsMode.E2M1, group_size=32, all_layers=True)
```
-#### Evaluation results
+### Evaluation results
+
+#### Data-free Mixed-Precision on Lambada OpenAI dataset
Here is the perplexity and model size before and after weight compression for different language models on the [Lambada OpenAI dataset](https://github.com/openai/gpt-2/issues/131#issuecomment-497136199).
`g32` refers to the group size equals to 32, `r60` - to the ratio equals to 0.6.
@@ -312,6 +325,8 @@ Here is the perplexity and model size before and after weight compression for di
+#### Data-aware Mixed-Precision and AWQ methods on Wikitext dataset
+
Here is the word perplexity with data-free and data-aware mixed-precision INT4-INT8 weight compression for different language models on the [wikitext dataset](https://arxiv.org/pdf/1609.07843.pdf).
`data` suffix refers to the data-aware mixed-precision.
`data_awq` suffix refers to the data-aware mixed-precision with modified [AWQ](https://arxiv.org/abs/2306.00978) algorithm.
@@ -414,8 +429,10 @@ This modification applies only for patterns `MatMul-Multiply-MatMul` (for exampl
+#### Scale Estimation and GPTQ methods on Lambada OpenAI dataset
+
Here is the perplexity and accuracy with data-free and data-aware mixed-precision INT4-INT8 weight compression for different language models on the [lambada openai dataset](https://huggingface.co/datasets/EleutherAI/lambada_openai).
-`_scale` suffix refers to the data-aware mixed-precision with Scale Estimation algorithm. `_gptq` suffix refers to the data-aware mixed-precision with GPTQ algorithm.
+`_scale` suffix refers to the data-aware mixed-precision with Scale Estimation algorithm. `_gptq` suffix refers to the data-aware mixed-precision with GPTQ algorithm. `_gptq_scale` suffix refers to the use of GPTQ algorithm with the Scale estimation algorithm to calculate the quantization parameters.
`r100` means that embeddings and lm_head have INT8 precision and all other linear layers have INT4 precision.
@@ -430,6 +447,12 @@ Here is the perplexity and accuracy with data-free and data-aware mixed-precisio
0.5925 |
6.3024 |
+
+ |
+ int4_sym_r100_gs64_gptq_scale |
+ 0.5795 |
+ 7.1507 |
+
|
int4_sym_r100_gs64_gptq |
@@ -460,7 +483,13 @@ Here is the perplexity and accuracy with data-free and data-aware mixed-precisio
0.595 |
7.037 |
-
+
+ |
+ int4_sym_r100_gs64_gptq_scale |
+ 0.5909 |
+ 7.391 |
+
+
|
int4_sym_r100_gs64_gptq |
0.567 |
@@ -478,6 +507,12 @@ Here is the perplexity and accuracy with data-free and data-aware mixed-precisio
0.6839 |
4.1681 |
+
+ |
+ int4_sym_r100_gs128_gptq_scale |
+ 0.6757 |
+ 4.5107 |
+
|
int4_sym_r100_gs128_scale |
@@ -516,16 +551,262 @@ Here is the perplexity and accuracy with data-free and data-aware mixed-precisio
-#### Limitations
+#### Accuracy/Footprint trade-off
+
+Below are the tables showing the accuracy/footprint trade-off for `Qwen/Qwen2-7B` and
+`microsoft/Phi-3-mini-4k-instruct` compressed with different options.
+
+Compression ratio is defined as the ratio between the size of fp32 model and size of the compressed one.
+Accuracy metrics are measured on 4 tasks [lambada openai](https://huggingface.co/datasets/EleutherAI/lambada_openai), [wikitext](https://arxiv.org/pdf/1609.07843.pdf),
+[winogrande](https://arxiv.org/abs/1907.10641), [WWB](https://github.com/openvinotoolkit/openvino.genai/tree/master/llm_bench/python/who_what_benchmark/whowhatbench).
+The `average relative error` in the tables below is the mean of relative errors for each of four tasks with respect to
+the metric value for fp32 model. All int4 models are compressed group-wise with `group_size=128` and `mode=CompressionMode.INT4_SYM` and
+with calibration dataset based on 128 samples from `wikitext-2-v1`. Int8 model is compressed with `mode=CompressionMode.INT8_ASYM`.
+The following advanced parameters were used for AWQ, Scale Estimation and Lora Correction algorithms:
+
+```python
+AdvancedCompressionParameters(
+ awq_params=AdvancedAWQParameters(32, 0.05, 0.0, 1.0, 100),
+ scale_estimation_params=AdvancedScaleEstimationParameters(32, 5, 10, -1.0),
+ lora_correction_params=AdvancedLoraCorrectionParameters(adapter_rank=)
+)
+```
+
+The tables clearly shows the followings:
+
+- More layers in 8 bit does improve accuracy, but it increases the footprint a lot.
+- Scale Estimation, AWQ, GPTQ do improve accuracy of the baseline int4 model without footprint increase.
+- Lora correction algorithm improves the accuracy of int4 models further with a footprint much less compared to mixed-precision models with the same or worse accuracy.
+
+Accuracy/footprint trade-off for `Qwen/Qwen2-7B`:
+
+
+
+ Mode |
+ %int4 |
+ %int8 |
+ lora rank |
+ average relative error |
+ compression rate |
+
+
+
+ fp32 |
+ 0% |
+ 0% |
+ |
+ 0.0% |
+ 1.0x |
+
+
+ int8 |
+ 0% |
+ 100% |
+ |
+ 7.9% |
+ 3.9x |
+
+
+ int4 + awq + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 256 |
+ 16.5% |
+ 5.8x |
+
+
+ int4 + awq + scale estimation |
+ 40% |
+ 60% |
+ |
+ 17.1% |
+ 4.7x |
+
+
+ int4 + awq + scale estimation |
+ 60% |
+ 40% |
+ |
+ 17.1% |
+ 5.2x |
+
+
+ int4 + awq + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 32 |
+ 17.4% |
+ 6.5x |
+
+
+ int4 + awq + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 8 |
+ 17.5% |
+ 6.6x |
+
+
+ int4 + awq + scale estimation |
+ 80% |
+ 20% |
+ |
+ 17.5% |
+ 5.8x |
+
+
+ int4 + awq + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 16 |
+ 18.0% |
+ 6.6x |
+
+
+ int4 + awq + scale estimation |
+ 100% |
+ 0% |
+ |
+ 18.4% |
+ 6.7x |
+
+
+ int4 + awq + scale estimation + gptq |
+ 100% |
+ 0% |
+ |
+ 20.2% |
+ 6.7x |
+
+
+ int4 |
+ 100% |
+ 0% |
+ |
+ 21.4% |
+ 6.7x |
+
+
+
+Accuracy/footprint trade-off for `microsoft/Phi-3-mini-4k-instruct`:
+
+
+
+ Mode |
+ %int4 |
+ %int8 |
+ lora rank |
+ average relative error |
+ compression rate |
+
+
+
+ fp32 |
+ 0% |
+ 0% |
+ |
+ 0.0% |
+ 1.0x |
+
+
+ int8 |
+ 0% |
+ 100% |
+ |
+ 7.3% |
+ 4.0x |
+
+
+ int4 + scale estimation |
+ 40% |
+ 60% |
+ |
+ 16.9% |
+ 4.9x |
+
+
+ int4 + scale estimation |
+ 60% |
+ 40% |
+ |
+ 18.4% |
+ 5.5x |
+
+
+ int4 + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 256 |
+ 18.7% |
+ 6.2x |
+
+
+ int4 + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 16 |
+ 20.5% |
+ 7.3x |
+
+
+ int4 + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 32 |
+ 20.6% |
+ 7.2x |
+
+
+ int4 + scale estimation |
+ 80% |
+ 20% |
+ |
+ 21.3% |
+ 6.3x |
+
+
+ int4 + scale estimation + gptq |
+ 100% |
+ 0% |
+ |
+ 21.7% |
+ 7.4x |
+
+
+ int4 + scale estimation + lora correction |
+ 100% |
+ 0% |
+ 8 |
+ 22.1% |
+ 7.3x |
+
+
+ int4 + scale estimation |
+ 100% |
+ 0% |
+ |
+ 24.5% |
+ 7.4x |
+
+
+ int4 |
+ 100% |
+ 0% |
+ |
+ 25.3% |
+ 7.4x |
+
+
+
+### Limitations
- The algorithm is supported for OpenVINO and PyTorch models.
- The compression applies in-place.
- The compressed model is not trainable.
- INT4_SYM, INT4_ASYM, NF4 and E2M1 modes, grouped quantization and mixed precision selection is available for OpenVINO backend only.
-- NF4 support is experimental - models quantized to nf4 should not be faster models quantized to 8-bit integer.
-- E2M1 support is experimental - models quantized to e2m1 should not be faster models quantized to 8-bit integer.
+- NF4, E2M1 support is experimental on GPU and NPU - models quantized to nf4/e2m1 should not be faster models quantized to 8-bit integer.
-#### Additional resources
+### Additional resources
- [LLM Weight Compression](https://docs.openvino.ai/2024/openvino-workflow/model-optimization-guide/weight-compression.html)
- [Large Language Model Inference Guide](https://docs.openvino.ai/2024/learn-openvino/llm_inference_guide.html)
@@ -538,5 +819,4 @@ List of notebooks demonstrating OpenVINO conversion and inference together with
- [LLM Instruction Following](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-question-answering)
- [Dolly 2.0](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/dolly-2-instruction-following)
-- [Stable-Zephyr-3b](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/stable-zephyr-3b-chatbot)
- [LLM Chat Bots](https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-chatbot)
diff --git a/examples/llm_compression/openvino/tiny_llama/requirements.txt b/examples/llm_compression/openvino/tiny_llama/requirements.txt
index 390b0576817..c3fbdb2081f 100644
--- a/examples/llm_compression/openvino/tiny_llama/requirements.txt
+++ b/examples/llm_compression/openvino/tiny_llama/requirements.txt
@@ -1,3 +1,4 @@
transformers
datasets==2.14.7
optimum-intel[openvino]
+onnx<1.16.2
diff --git a/examples/llm_compression/openvino/tiny_llama_find_hyperparams/requirements.txt b/examples/llm_compression/openvino/tiny_llama_find_hyperparams/requirements.txt
index 8006b47e464..9c33456cb8b 100644
--- a/examples/llm_compression/openvino/tiny_llama_find_hyperparams/requirements.txt
+++ b/examples/llm_compression/openvino/tiny_llama_find_hyperparams/requirements.txt
@@ -1,6 +1,7 @@
datasets
whowhatbench @ git+https://github.com/andreyanufr/who_what_benchmark.git
numpy>=1.23.5
-openvino==2024.3
+openvino==2024.4
optimum-intel[openvino]>=1.13.0
transformers>=4.35.2
+onnx<1.16.2
diff --git a/examples/post_training_quantization/onnx/mobilenet_v2/requirements.txt b/examples/post_training_quantization/onnx/mobilenet_v2/requirements.txt
index f3b4e2fea66..4b37523b0c1 100644
--- a/examples/post_training_quantization/onnx/mobilenet_v2/requirements.txt
+++ b/examples/post_training_quantization/onnx/mobilenet_v2/requirements.txt
@@ -4,4 +4,4 @@ scikit-learn
fastdownload
onnx==1.16.0
onnxruntime==1.17.1
-openvino==2024.3
+openvino==2024.4
diff --git a/examples/post_training_quantization/onnx/yolov8_quantize_with_accuracy_control/requirements.txt b/examples/post_training_quantization/onnx/yolov8_quantize_with_accuracy_control/requirements.txt
index fac6de7326d..39a2975bb85 100644
--- a/examples/post_training_quantization/onnx/yolov8_quantize_with_accuracy_control/requirements.txt
+++ b/examples/post_training_quantization/onnx/yolov8_quantize_with_accuracy_control/requirements.txt
@@ -1,3 +1,3 @@
ultralytics==8.0.170
onnx==1.16.0
-openvino==2024.3
+openvino==2024.4
diff --git a/examples/post_training_quantization/openvino/anomaly_stfpm_quantize_with_accuracy_control/requirements.txt b/examples/post_training_quantization/openvino/anomaly_stfpm_quantize_with_accuracy_control/requirements.txt
index 055c6b90034..860f9fd1f83 100644
--- a/examples/post_training_quantization/openvino/anomaly_stfpm_quantize_with_accuracy_control/requirements.txt
+++ b/examples/post_training_quantization/openvino/anomaly_stfpm_quantize_with_accuracy_control/requirements.txt
@@ -1,2 +1,2 @@
anomalib==0.6.0
-openvino==2024.3
+openvino==2024.4
diff --git a/examples/post_training_quantization/openvino/mobilenet_v2/requirements.txt b/examples/post_training_quantization/openvino/mobilenet_v2/requirements.txt
index 52503386460..b813ce41f94 100644
--- a/examples/post_training_quantization/openvino/mobilenet_v2/requirements.txt
+++ b/examples/post_training_quantization/openvino/mobilenet_v2/requirements.txt
@@ -2,4 +2,4 @@ torchvision
tqdm
scikit-learn
fastdownload
-openvino==2024.3
+openvino==2024.4
diff --git a/examples/post_training_quantization/openvino/yolov8/requirements.txt b/examples/post_training_quantization/openvino/yolov8/requirements.txt
index 3cd424be136..d76435e18c4 100644
--- a/examples/post_training_quantization/openvino/yolov8/requirements.txt
+++ b/examples/post_training_quantization/openvino/yolov8/requirements.txt
@@ -1,3 +1,3 @@
ultralytics==8.0.170
-onnx>=1.12.0
-openvino==2024.3
+onnx>=1.12.0,<1.16.2
+openvino==2024.4
diff --git a/examples/post_training_quantization/openvino/yolov8_quantize_with_accuracy_control/requirements.txt b/examples/post_training_quantization/openvino/yolov8_quantize_with_accuracy_control/requirements.txt
index 3cd424be136..d76435e18c4 100644
--- a/examples/post_training_quantization/openvino/yolov8_quantize_with_accuracy_control/requirements.txt
+++ b/examples/post_training_quantization/openvino/yolov8_quantize_with_accuracy_control/requirements.txt
@@ -1,3 +1,3 @@
ultralytics==8.0.170
-onnx>=1.12.0
-openvino==2024.3
+onnx>=1.12.0,<1.16.2
+openvino==2024.4
diff --git a/examples/post_training_quantization/tensorflow/mobilenet_v2/main.py b/examples/post_training_quantization/tensorflow/mobilenet_v2/main.py
index 8d95dff80df..bf4707e6dc6 100644
--- a/examples/post_training_quantization/tensorflow/mobilenet_v2/main.py
+++ b/examples/post_training_quantization/tensorflow/mobilenet_v2/main.py
@@ -22,7 +22,6 @@
import nncf
-tfds.display_progress_bar(enable=False)
ROOT = Path(__file__).parent.resolve()
WEIGHTS_URL = "https://huggingface.co/alexsu52/mobilenet_v2_imagenette/resolve/main/tf_model.h5"
DATASET_CLASSES = 10
diff --git a/examples/post_training_quantization/tensorflow/mobilenet_v2/requirements.txt b/examples/post_training_quantization/tensorflow/mobilenet_v2/requirements.txt
index b4c21a5026b..7f51755575c 100644
--- a/examples/post_training_quantization/tensorflow/mobilenet_v2/requirements.txt
+++ b/examples/post_training_quantization/tensorflow/mobilenet_v2/requirements.txt
@@ -2,4 +2,4 @@ tensorflow~=2.12.0; python_version < '3.9'
tensorflow~=2.15.1; python_version >= '3.9'
tensorflow-datasets
tqdm
-openvino==2024.3
+openvino==2024.4
diff --git a/examples/post_training_quantization/torch/mobilenet_v2/requirements.txt b/examples/post_training_quantization/torch/mobilenet_v2/requirements.txt
index 5fee9a504e7..5a04422318d 100644
--- a/examples/post_training_quantization/torch/mobilenet_v2/requirements.txt
+++ b/examples/post_training_quantization/torch/mobilenet_v2/requirements.txt
@@ -1,5 +1,5 @@
fastdownload==0.0.7
-openvino==2024.3
+openvino==2024.4
scikit-learn
-torch==2.3.0
-torchvision==0.18.0
+torch==2.4.0
+torchvision==0.19.0
diff --git a/examples/post_training_quantization/torch/ssd300_vgg16/requirements.txt b/examples/post_training_quantization/torch/ssd300_vgg16/requirements.txt
index 9043dbc0d70..685f414a2e9 100644
--- a/examples/post_training_quantization/torch/ssd300_vgg16/requirements.txt
+++ b/examples/post_training_quantization/torch/ssd300_vgg16/requirements.txt
@@ -1,7 +1,7 @@
fastdownload==0.0.7
onnx==1.16.0
-openvino==2024.3
+openvino==2024.4
pycocotools==2.0.7
-torch==2.3.0
+torch==2.4.0
torchmetrics==1.0.1
-torchvision==0.18.0
+torchvision==0.19.0
diff --git a/examples/quantization_aware_training/torch/resnet18/requirements.txt b/examples/quantization_aware_training/torch/resnet18/requirements.txt
index 502f833bcf1..040eb6d97dd 100644
--- a/examples/quantization_aware_training/torch/resnet18/requirements.txt
+++ b/examples/quantization_aware_training/torch/resnet18/requirements.txt
@@ -1,4 +1,4 @@
fastdownload==0.0.7
-openvino==2024.3
-torch==2.3.0
-torchvision==0.18.0
+openvino==2024.4
+torch==2.4.0
+torchvision==0.19.0
diff --git a/nncf/__init__.py b/nncf/__init__.py
index 9af922c21a5..64449545310 100644
--- a/nncf/__init__.py
+++ b/nncf/__init__.py
@@ -45,8 +45,13 @@
from nncf.quantization.advanced_parameters import (
AdvancedAccuracyRestorerParameters as AdvancedAccuracyRestorerParameters,
)
+from nncf.quantization.advanced_parameters import AdvancedAWQParameters as AdvancedAWQParameters
from nncf.quantization.advanced_parameters import AdvancedBiasCorrectionParameters as AdvancedBiasCorrectionParameters
+from nncf.quantization.advanced_parameters import AdvancedCompressionParameters as AdvancedCompressionParameters
+from nncf.quantization.advanced_parameters import AdvancedGPTQParameters as AdvancedGPTQParameters
+from nncf.quantization.advanced_parameters import AdvancedLoraCorrectionParameters as AdvancedLoraCorrectionParameters
from nncf.quantization.advanced_parameters import AdvancedQuantizationParameters as AdvancedQuantizationParameters
+from nncf.quantization.advanced_parameters import AdvancedScaleEstimationParameters as AdvancedScaleEstimationParameters
from nncf.quantization.advanced_parameters import AdvancedSmoothQuantParameters as AdvancedSmoothQuantParameters
from nncf.quantization.advanced_parameters import OverflowFix as OverflowFix
from nncf.scopes import IgnoredScope as IgnoredScope
diff --git a/nncf/common/factory.py b/nncf/common/factory.py
index 6616f9dbe3a..c5a921c8068 100644
--- a/nncf/common/factory.py
+++ b/nncf/common/factory.py
@@ -41,6 +41,10 @@ def create(model: TModel) -> NNCFGraph:
if model_backend == BackendType.OPENVINO:
from nncf.openvino.graph.nncf_graph_builder import GraphConverter
+ return GraphConverter.create_nncf_graph(model)
+ if model_backend == BackendType.TORCH_FX:
+ from nncf.experimental.torch.fx.nncf_graph_builder import GraphConverter
+
return GraphConverter.create_nncf_graph(model)
if model_backend == BackendType.TORCH:
return model.nncf.get_graph()
@@ -72,6 +76,10 @@ def create(model: TModel, inplace: bool = False) -> ModelTransformer:
from nncf.torch.model_transformer import PTModelTransformer
return PTModelTransformer(model)
+ if model_backend == BackendType.TORCH_FX:
+ from nncf.experimental.torch.fx.model_transformer import FXModelTransformer
+
+ return FXModelTransformer(model)
raise nncf.UnsupportedBackendError(
"Cannot create backend-specific model transformer because {} is not supported!".format(model_backend.value)
)
@@ -95,7 +103,7 @@ def create(model: TModel) -> Engine:
from nncf.openvino.engine import OVNativeEngine
return OVNativeEngine(model)
- if model_backend == BackendType.TORCH:
+ if model_backend in (BackendType.TORCH, BackendType.TORCH_FX):
from nncf.torch.engine import PTEngine
return PTEngine(model)
@@ -151,6 +159,10 @@ def create(model: TModel, dataset: Dataset) -> aggregator.StatisticsAggregator:
from nncf.torch.statistics.aggregator import PTStatisticsAggregator
return PTStatisticsAggregator(dataset)
+ if model_backend == BackendType.TORCH_FX:
+ from nncf.experimental.torch.fx.statistics.aggregator import FXStatisticsAggregator
+
+ return FXStatisticsAggregator(dataset)
raise nncf.UnsupportedBackendError(
"Cannot create backend-specific statistics aggregator because {} is not supported!".format(
model_backend.value
diff --git a/nncf/common/graph/graph.py b/nncf/common/graph/graph.py
index 128c4cc3e3f..2e442b8ba42 100644
--- a/nncf/common/graph/graph.py
+++ b/nncf/common/graph/graph.py
@@ -348,20 +348,52 @@ def get_input_edges(self, node: NNCFNode) -> List[NNCFGraphEdge]:
edges.extend(self._get_edges(from_node, node))
return sorted(edges, key=lambda x: x.input_port_id)
+ def get_input_edge_by_port_id(self, node: NNCFNode, port_id: int) -> NNCFGraphEdge:
+ """
+ Returns the input edge for a given node, where edge.input_port_id == port_id is True.
+
+ :param node: The node for which to retrieve the input edge.
+ :param port_id: The ID of the input port to filter the edges.
+ :return: An input edge connected to the specified input port ID of the
+ given node.
+ """
+ edges = [e for e in self.get_input_edges(node) if e.input_port_id == port_id]
+ if len(edges) == 0:
+ raise nncf.ValidationError(
+ f"Node {node.node_name} does not contain input edge connected to {port_id} port ID."
+ )
+
+ if len(edges) > 1:
+ raise nncf.InternalError(
+ "Unsupported graph. More than one edge was found for a given node by the specified input port ID."
+ )
+ return edges[0]
+
def get_output_edges(self, node: NNCFNode) -> List[NNCFGraphEdge]:
"""
Returns edges of output tensors sorted by output port ID.
:param node: Producer node.
- :return: List of output edges for the node sorted by output port ID.
+ :return: List of output edges for the node sorted by output port ID.
"""
-
output_nodes = self.get_next_nodes(node)
edges = []
for to_node in output_nodes:
edges.extend(self._get_edges(node, to_node))
return sorted(edges, key=lambda x: x.output_port_id)
+ def get_output_edges_by_port_id(self, node: NNCFNode, port_id: int) -> List[NNCFGraphEdge]:
+ """
+ Returns a list of output edges for a given node, filtered by the specified
+ output port ID (edge.output_port_id == port_id).
+
+ :param node: The node for which to retrieve the output edges.
+ :param port_id: The ID of the output port to filter the edges.
+ :return: A list of the output edges connected to the specified output port ID
+ of the given node.
+ """
+ return [e for e in self.get_output_edges(node) if e.output_port_id == port_id]
+
def _get_edges(self, from_node: NNCFNode, to_node: NNCFNode) -> List[NNCFGraphEdge]:
edges = []
edge = self.get_edge(from_node, to_node)
diff --git a/nncf/common/graph/patterns/manager.py b/nncf/common/graph/patterns/manager.py
index 08bae0000af..2c32e3abf56 100644
--- a/nncf/common/graph/patterns/manager.py
+++ b/nncf/common/graph/patterns/manager.py
@@ -47,7 +47,7 @@ def _get_backend_hw_patterns_map(backend: BackendType) -> Dict[HWFusedPatternNam
Dict[HWFusedPatternNames, Callable[[], GraphPattern]], OPENVINO_HW_FUSED_PATTERNS.registry_dict
)
return registry
- if backend == BackendType.TORCH:
+ if backend in (BackendType.TORCH, BackendType.TORCH_FX):
from nncf.torch.hardware.fused_patterns import PT_HW_FUSED_PATTERNS
registry = cast(Dict[HWFusedPatternNames, Callable[[], GraphPattern]], PT_HW_FUSED_PATTERNS.registry_dict)
@@ -77,7 +77,7 @@ def _get_backend_ignored_patterns_map(
Dict[IgnoredPatternNames, Callable[[], GraphPattern]], OPENVINO_IGNORED_PATTERNS.registry_dict
)
return registry
- if backend == BackendType.TORCH:
+ if backend in (BackendType.TORCH, BackendType.TORCH_FX):
from nncf.torch.quantization.ignored_patterns import PT_IGNORED_PATTERNS
registry = cast(Dict[IgnoredPatternNames, Callable[[], GraphPattern]], PT_IGNORED_PATTERNS.registry_dict)
diff --git a/nncf/common/graph/patterns/patterns.py b/nncf/common/graph/patterns/patterns.py
index 89f7f2cd749..1acbaf4b6d8 100644
--- a/nncf/common/graph/patterns/patterns.py
+++ b/nncf/common/graph/patterns/patterns.py
@@ -330,6 +330,8 @@ class HWFusedPatternNames(Enum):
ACTIVATIONS_SCALE_SHIFT = PatternDesc("activations_scale_shift")
ARITHMETIC_ACTIVATIONS = PatternDesc("arithmetic_activations")
ARITHMETIC_ACTIVATIONS_BATCH_NORM = PatternDesc("arithmetic_activations_batch_norm")
+ # StyleGan2
+ ARITHMETIC_ACTIVATIONS_ARITHMETIC = PatternDesc("arithmetic_activations_arithmetic")
ARITHMETIC_ACTIVATIONS_SCALE_SHIFT = PatternDesc("arithmetic_activations_scale_shift")
ARITHMETIC_BATCH_NORM = PatternDesc("arithmetic_batch_norm")
ARITHMETIC_BATCH_NORM_ACTIVATIONS = PatternDesc("arithmetic_batch_norm_activations")
@@ -348,6 +350,9 @@ class HWFusedPatternNames(Enum):
LINEAR_ARITHMETIC_ACTIVATIONS_ARITHMETIC = PatternDesc("linear_arithmetic_activations_arithmetic")
LINEAR_BATCH_NORM = PatternDesc("linear_batch_norm")
LINEAR_BATCH_NORM_ACTIVATIONS = PatternDesc("linear_batch_norm_activations")
+ # MaskRCNN_Resnet_Atrous
+ LINEAR_BATCH_TO_SPACE_SCALE_SHIFT_ACTIVATIONS = PatternDesc("linear_batch_to_space_scale_shift_activations")
+ LINEAR_BATCH_TO_SPACE_ARITHMETIC_ACTIVATIONS = PatternDesc("linear_batch_to_space_arithmetic_activations")
LINEAR_BATCH_NORM_SCALE_SHIFT_ACTIVATIONS = PatternDesc("linear_batch_norm_scale_shift_activations")
LINEAR_SCALE_SHIFT_ACTIVATIONS = PatternDesc("linear_scale_shift_activations")
LINEAR_CONST_MULTIPLY = PatternDesc("linear_const_multiply")
diff --git a/nncf/common/graph/transformations/commands.py b/nncf/common/graph/transformations/commands.py
index 7128f2793c0..c350978edd7 100644
--- a/nncf/common/graph/transformations/commands.py
+++ b/nncf/common/graph/transformations/commands.py
@@ -54,7 +54,7 @@ class TargetType(IntEnum):
`PRE_LAYER_OPERATION` - a location before the associated PT-module or TF-layer
execution, for which the local attributes of said
PT-module or TF-layer are accessible
- `POST_LAYER_OPERATION` - a location before the associated PT-module or TF-layer
+ `POST_LAYER_OPERATION` - a location after the associated PT-module or TF-layer
execution, for which the local attributes of said
PT-module or TF-layer are accessible
`OPERATION_WITH_WEIGHTS` - same as PRE_LAYER_OPERATION, but targets weights
diff --git a/nncf/common/hardware/configs/cpu.json b/nncf/common/hardware/configs/cpu.json
index 0cd5290ae6d..ae6a6645044 100644
--- a/nncf/common/hardware/configs/cpu.json
+++ b/nncf/common/hardware/configs/cpu.json
@@ -279,6 +279,7 @@
{"type": "Transpose"},
{"type": "Tile"},
{"type": "StridedSlice"},
+ {"type": "Slice"},
{"type": "ShuffleChannels"},
{"type": "Broadcast"},
{"type": "Pad"},
diff --git a/nncf/common/hardware/configs/gpu.json b/nncf/common/hardware/configs/gpu.json
index 9e6d0e3378b..39cb1cc6573 100644
--- a/nncf/common/hardware/configs/gpu.json
+++ b/nncf/common/hardware/configs/gpu.json
@@ -247,6 +247,7 @@
{"type": "Crop"},
{"type": "Transpose"},
{"type": "Tile"},
- {"type": "StridedSlice"}
+ {"type": "StridedSlice"},
+ {"type": "Slice"}
]
}
diff --git a/nncf/common/hardware/configs/npu.json b/nncf/common/hardware/configs/npu.json
index 7999bd874e9..15af02a9f60 100644
--- a/nncf/common/hardware/configs/npu.json
+++ b/nncf/common/hardware/configs/npu.json
@@ -372,6 +372,7 @@
{"type": "Transpose"},
{"type": "Tile"},
{"type": "StridedSlice"},
+ {"type": "Slice"},
{"type": "ShuffleChannels"},
{"type": "Broadcast"},
{"type": "Pad"},
diff --git a/nncf/common/hardware/opset.py b/nncf/common/hardware/opset.py
index c01e950b417..91fafe0b09c 100644
--- a/nncf/common/hardware/opset.py
+++ b/nncf/common/hardware/opset.py
@@ -54,6 +54,7 @@ class HWConfigOpName:
EMBEDDINGBAG = "EmbeddingBag"
PAD = "Pad"
STRIDEDSLICE = "StridedSlice"
+ SLICE = "Slice"
GELU = "Gelu"
LSTMSEQUENCE = "LSTMSequence"
GRUSEQUENCE = "GRUSequence"
diff --git a/nncf/common/logging/track_progress.py b/nncf/common/logging/track_progress.py
index 90455fab2ef..51fecafdd92 100644
--- a/nncf/common/logging/track_progress.py
+++ b/nncf/common/logging/track_progress.py
@@ -18,6 +18,7 @@
from rich.progress import ProgressColumn
from rich.progress import ProgressType
from rich.progress import Task
+from rich.progress import TaskID
from rich.progress import TaskProgressColumn
from rich.progress import TextColumn
from rich.progress import TimeElapsedColumn
@@ -59,6 +60,65 @@ def render(self, task: "Task") -> Text:
return Text(text._text[0], style=INTEL_BLUE_COLOR)
+class WeightedProgress(Progress):
+ """
+ A class to perform a weighted progress tracking.
+ """
+
+ def update(self, task_id: TaskID, **kwargs) -> None:
+ task = self._tasks[task_id]
+
+ advance = kwargs.get("advance", None)
+ if advance is not None:
+ kwargs["advance"] = self.weighted_advance(task, advance)
+
+ completed = kwargs.get("completed", None)
+ if completed is not None:
+ kwargs["completed"] = self.get_weighted_completed(task, completed)
+
+ super().update(task_id, **kwargs)
+
+ def advance(self, task_id: TaskID, advance: float = 1) -> None:
+ if advance is not None:
+ task = self._tasks[task_id]
+ advance = self.weighted_advance(task, advance)
+ super().advance(task_id, advance)
+
+ def reset(self, task_id: TaskID, **kwargs) -> None:
+ task = self._tasks[task_id]
+
+ completed = kwargs.get("completed", None)
+ if completed is not None:
+ kwargs["completed"] = self.get_weighted_completed(task, completed)
+
+ super().reset(task_id, **kwargs)
+
+ if completed == 0:
+ task.fields["completed_steps"] = 0
+
+ @staticmethod
+ def weighted_advance(task: Task, advance: float) -> float:
+ """
+ Perform weighted advancement based on an integer step value.
+ """
+ if advance % 1 != 0:
+ raise Exception(f"Unexpected `advance` value: {advance}.")
+ advance = int(advance)
+ current_step = task.fields["completed_steps"]
+ weighted_advance = sum(task.fields["weights"][current_step : current_step + advance])
+ task.fields["completed_steps"] = current_step + advance
+ return weighted_advance
+
+ @staticmethod
+ def get_weighted_completed(task: Task, completed: float) -> float:
+ """
+ Get weighted `completed` corresponding to an integer `completed` field.
+ """
+ if completed % 1 != 0:
+ raise Exception(f"Unexpected `completed` value: {completed}.")
+ return sum(task.fields["weights"][: int(completed)])
+
+
class track:
def __init__(
self,
@@ -77,6 +137,7 @@ def __init__(
update_period: float = 0.1,
disable: bool = False,
show_speed: bool = True,
+ weights: Optional[List[float]] = None,
):
"""
Track progress by iterating over a sequence.
@@ -98,11 +159,14 @@ def __init__(
:param update_period: Minimum time (in seconds) between calls to update(). Defaults to 0.1.
:param disable: Disable display of progress.
:param show_speed: Show speed if the total isn't known. Defaults to True.
+ :param weights: List of progress weights for each sequence element. Weights should be proportional to the time
+ it takes to process sequence elements. Useful when processing time is strongly non-uniform.
:return: An iterable of the values in the sequence.
"""
self.sequence = sequence
- self.total = total
+ self.weights = weights
+ self.total = sum(self.weights) if self.weights is not None else total
self.description = description
self.update_period = update_period
self.task = None
@@ -120,7 +184,13 @@ def __init__(
bar_width=None,
),
TaskProgressColumn(show_speed=show_speed),
- IterationsColumn(),
+ )
+ )
+ # Do not add iterations column for weighted tracking because steps will be in weighted coordinates
+ if self.weights is None:
+ self.columns.append(IterationsColumn())
+ self.columns.extend(
+ (
SeparatorColumn(),
TimeElapsedColumnWithStyle(),
SeparatorColumn(disable_if_no_total=True), # disable because time remaining will be empty
@@ -130,7 +200,8 @@ def __init__(
disable = disable or (hasattr(sequence, "__len__") and len(sequence) == 0)
- self.progress = Progress(
+ progress_cls = Progress if weights is None else WeightedProgress
+ self.progress = progress_cls(
*self.columns,
auto_refresh=auto_refresh,
console=console,
@@ -141,16 +212,25 @@ def __init__(
)
def __iter__(self) -> Iterable[ProgressType]:
- with self.progress:
+ with self:
yield from self.progress.track(
- self.sequence, total=self.total, description=self.description, update_period=self.update_period
+ self.sequence,
+ total=self.total,
+ task_id=self.task,
+ description=self.description,
+ update_period=self.update_period,
)
def __enter__(self):
- self.progress.start()
- self.task = self.progress.add_task(self.description, total=self.total)
+ kwargs = {}
+ if self.weights is not None:
+ kwargs["weights"] = self.weights
+ kwargs["completed_steps"] = 0
+ self.task = self.progress.add_task(self.description, total=self.total, **kwargs)
+ self.progress.__enter__()
return self
def __exit__(self, *args):
+ self.progress.__exit__(*args)
+ self.progress.remove_task(self.task)
self.task = None
- self.progress.stop()
diff --git a/nncf/common/quantization/quantizer_propagation/graph.py b/nncf/common/quantization/quantizer_propagation/graph.py
index e4072e5a503..a9e488ee754 100644
--- a/nncf/common/quantization/quantizer_propagation/graph.py
+++ b/nncf/common/quantization/quantizer_propagation/graph.py
@@ -769,6 +769,35 @@ def recursive_helper(curr_node_key: str, target_node_list: List[str]):
recursive_helper(node_key, ret_node_key_list)
return ret_node_key_list
+ def all_outputs_are_quantized(self, node_key) -> bool:
+ """
+ Returns True if all pathes from the given node to the first
+ input quantable nodes have an activation quantizer, False otherwise.
+
+ :param node_key: Given node key.
+ :return: True if all pathes from the given node to the first
+ input quantable nodes have an activation quantizer, False otherwise.
+ """
+
+ nodes_keys_stack = deque(self.successors(node_key))
+ while nodes_keys_stack:
+ node_key = nodes_keys_stack.popleft()
+ node = self.nodes[node_key]
+ node_type = node[QuantizerPropagationStateGraph.NODE_TYPE_NODE_ATTR]
+ if node_type == QuantizerPropagationStateGraphNodeType.OPERATOR:
+ trait = node[QuantizerPropagationStateGraph.QUANTIZATION_TRAIT_NODE_ATTR]
+ if trait != QuantizationTrait.QUANTIZATION_AGNOSTIC:
+ return False
+ elif node_type in [
+ QuantizerPropagationStateGraphNodeType.PRE_HOOK,
+ QuantizerPropagationStateGraphNodeType.POST_HOOK,
+ ]:
+ quantizer = node[QuantizerPropagationStateGraph.PROPAGATING_QUANTIZER_NODE_ATTR]
+ if quantizer:
+ continue
+ nodes_keys_stack.extend(self.successors(node_key))
+ return True
+
def get_paths_to_immediately_dominating_insertion_points(
self, insertion_point_node_key: str
) -> List[PropagationPath]:
diff --git a/nncf/common/quantization/quantizer_propagation/solver.py b/nncf/common/quantization/quantizer_propagation/solver.py
index 230b314ac20..f16771efcf2 100644
--- a/nncf/common/quantization/quantizer_propagation/solver.py
+++ b/nncf/common/quantization/quantizer_propagation/solver.py
@@ -1233,6 +1233,13 @@ def check_branching_transition(
dom_op_quantizers = set()
for op_node_key in dom_op_node_keys:
op_node = quant_prop_graph.nodes[op_node_key]
+
+ # Check all branches have a quantizer on it before the merge
+ if op_node["op_meta"].target_input_ports is not None:
+ all_branches_are_quantized = quant_prop_graph.all_outputs_are_quantized(branching_node_key)
+ if not all_branches_are_quantized:
+ return TransitionStatus.SHOULD_NOT_TRANSITION
+
trait = op_node[QuantizerPropagationStateGraph.QUANTIZATION_TRAIT_NODE_ATTR]
affecting_prop_quantizers = op_node[QuantizerPropagationStateGraph.AFFECTING_PROPAGATING_QUANTIZERS_ATTR]
if affecting_prop_quantizers:
diff --git a/nncf/common/utils/backend.py b/nncf/common/utils/backend.py
index 7589aabb739..a76c0b8670d 100644
--- a/nncf/common/utils/backend.py
+++ b/nncf/common/utils/backend.py
@@ -20,6 +20,7 @@
class BackendType(Enum):
TORCH = "Torch"
+ TORCH_FX = "TorchFX"
TENSORFLOW = "Tensorflow"
ONNX = "ONNX"
OPENVINO = "OpenVINO"
@@ -33,6 +34,7 @@ def get_available_backends() -> List[BackendType]:
"""
frameworks = [
("torch", BackendType.TORCH),
+ ("torch.fx", BackendType.TORCH_FX),
("tensorflow", BackendType.TENSORFLOW),
("onnx", BackendType.ONNX),
("openvino.runtime", BackendType.OPENVINO),
@@ -51,14 +53,27 @@ def get_available_backends() -> List[BackendType]:
def is_torch_model(model: TModel) -> bool:
"""
- Returns True if the model is an instance of torch.nn.Module, otherwise False.
+ Returns True if the model is an instance of torch.nn.Module and not a torch.fx.GraphModule, otherwise False.
:param model: A target model.
- :return: True if the model is an instance of torch.nn.Module, otherwise False.
+ :return: True if the model is an instance of torch.nn.Module and not torch.fx.GraphModule, otherwise False.
"""
import torch # type: ignore
+ import torch.fx # type: ignore
- return isinstance(model, torch.nn.Module)
+ return not isinstance(model, torch.fx.GraphModule) and isinstance(model, torch.nn.Module)
+
+
+def is_torch_fx_model(model: TModel) -> bool:
+ """
+ Returns True if the model is an instance of torch.fx.GraphModule, otherwise False.
+
+ :param model: A target model.
+ :return: True if the model is an instance of torch.fx.GraphModule, otherwise False.
+ """
+ import torch.fx
+
+ return isinstance(model, torch.fx.GraphModule)
def is_tensorflow_model(model: TModel) -> bool:
@@ -118,6 +133,9 @@ def get_backend(model: TModel) -> BackendType:
"""
available_backends = get_available_backends()
+ if BackendType.TORCH_FX in available_backends and is_torch_fx_model(model):
+ return BackendType.TORCH_FX
+
if BackendType.TORCH in available_backends and is_torch_model(model):
return BackendType.TORCH
diff --git a/nncf/experimental/torch/fx/__init__.py b/nncf/experimental/torch/fx/__init__.py
new file mode 100644
index 00000000000..2e49d63977d
--- /dev/null
+++ b/nncf/experimental/torch/fx/__init__.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/nncf/experimental/torch/fx/commands.py b/nncf/experimental/torch/fx/commands.py
new file mode 100644
index 00000000000..064e08a223a
--- /dev/null
+++ b/nncf/experimental/torch/fx/commands.py
@@ -0,0 +1,37 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Callable, Union
+
+import torch.fx
+
+from nncf.common.graph.transformations.commands import Command
+from nncf.common.graph.transformations.commands import TransformationPriority
+from nncf.common.graph.transformations.commands import TransformationType
+
+
+class FXApplyTransformationCommand(Command):
+ """
+ Command to apply given transformation to a model.
+ """
+
+ def __init__(
+ self,
+ transformation_fn: Callable[[torch.fx.GraphModule], None],
+ priority: Union[TransformationPriority, int] = TransformationPriority.DEFAULT_PRIORITY,
+ ):
+ """
+ :param transformation_fn: Target transformation function.
+ :param priority: Transformation priority.
+ """
+ super().__init__(TransformationType.INSERT)
+ self.transformation_fn = transformation_fn
+ self.priority = priority
diff --git a/nncf/experimental/torch/fx/model_transformer.py b/nncf/experimental/torch/fx/model_transformer.py
new file mode 100644
index 00000000000..caf90dfac6d
--- /dev/null
+++ b/nncf/experimental/torch/fx/model_transformer.py
@@ -0,0 +1,133 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from collections import defaultdict
+from typing import List
+
+import torch
+import torch.fx
+from torch.fx.passes.split_utils import split_by_tags
+
+from nncf.common.graph.model_transformer import ModelTransformer
+from nncf.experimental.torch.fx.commands import FXApplyTransformationCommand
+from nncf.experimental.torch.fx.node_utils import get_graph_node_by_name
+from nncf.torch.graph.transformations.commands import PTModelExtractionCommand
+from nncf.torch.graph.transformations.layout import PTTransformationLayout
+
+
+class FXModelTransformer(ModelTransformer):
+ """
+ Applies transformations upon Torch FX model.
+ """
+
+ def __init__(self, model: torch.fx.GraphModule):
+ super().__init__(model)
+
+ self._command_transformation_ordered_pairs = [
+ (FXApplyTransformationCommand, self._apply_transformation),
+ (PTModelExtractionCommand, self._apply_model_extraction),
+ ]
+
+ def transform(self, transformation_layout: PTTransformationLayout) -> torch.fx.GraphModule:
+ """
+ Transforms the target model according to given transformation layout.
+
+ :param transformation_layout: Given transformation layout.
+ :return: Target model transformered according to the given transformation layout.
+ """
+ # TODO(dlyakhov): Manage priorities of transformations.
+ transformations = transformation_layout.transformations
+ aggregated_transformations = defaultdict(list)
+ for transformation in transformations:
+ aggregated_transformations[transformation.__class__].append(transformation)
+
+ model = self._model
+ for transformation_cls, transformation_fn in self._command_transformation_ordered_pairs:
+ transformations = aggregated_transformations[transformation_cls]
+ if transformations:
+ model = transformation_fn(model, transformations)
+
+ # Do not use model.graph.eliminate_dead_code()
+ # because the computational statistics code
+ # is interpolated as dead code.
+ model.recompile()
+ return model
+
+ @staticmethod
+ def _apply_model_extraction(
+ model: torch.fx.GraphModule,
+ transformations: List[PTModelExtractionCommand],
+ ) -> torch.fx.GraphModule:
+ """
+ Returns a submodel extracted from the given model by the given transformation.
+
+ :param model: Given model.
+ :param transformations: List of one transformation which specifies
+ how to retrieve a submodule from the model. In case list contains
+ more than one element this function raises an assert.
+ :return: Returns a submodel extracted from the given model by the given transformation.
+ """
+ transformation = transformations[-1]
+ assert len(transformation.input_node_names) == 1
+ assert transformation.input_node_names == transformation.output_node_names
+ node_name = transformation.input_node_names[0]
+
+ tags = ["before", "extracted", "after"]
+ i = 0
+ for node in model.graph.nodes:
+ if node.name == node_name:
+ node.tag = tags[1]
+ weights = [node.all_input_nodes[1]]
+ while weights:
+ w_node = weights.pop()
+ assert w_node.tag in tags[0:2]
+ w_node.tag = tags[1]
+ weights.extend(w_node.all_input_nodes)
+ i = 2
+ continue
+ node.tag = tags[i]
+
+ # TODO(dlyakhov): reduce memory consumption by
+ # more optimal splitting implementation.
+ splitted_gm = split_by_tags(model, tags)
+
+ extracted_model = splitted_gm.extracted
+ graph: torch.fx.Graph = extracted_model.graph
+ # Check extracted model has inputs.
+ # It is possible to have two constant inputs
+ # for the target layer, an placeholder is being
+ # placed to the input port.
+ target_node = get_graph_node_by_name(graph, node_name)
+ input_node = target_node.all_input_nodes[0]
+ if input_node.op != "placeholder":
+ with graph.inserting_before(target_node):
+ new_input_node = graph.create_node(
+ "placeholder", "placeholder_node", (), {}, name="placeholder_graph_node"
+ )
+ target_node.replace_input_with(input_node, new_input_node)
+ extracted_model.graph.eliminate_dead_code()
+ return extracted_model
+
+ @staticmethod
+ def _apply_transformation(
+ model: torch.fx.GraphModule,
+ transformations: List[FXApplyTransformationCommand],
+ ) -> torch.fx.GraphModule:
+ """
+ Applies transformations to the given model.
+
+ :param model: Target model.
+ :param transformations: Transformations to apply to the model.
+ :return: Target model after all transformations were applied.
+ """
+ for transformation in transformations:
+ transformation.transformation_fn(model)
+ return model
diff --git a/nncf/experimental/torch/fx/nncf_graph_builder.py b/nncf/experimental/torch/fx/nncf_graph_builder.py
new file mode 100644
index 00000000000..946ac27ce84
--- /dev/null
+++ b/nncf/experimental/torch/fx/nncf_graph_builder.py
@@ -0,0 +1,188 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Tuple
+
+import torch.fx
+
+import nncf.torch.graph.operator_metatypes as om
+from nncf.common.graph import NNCFNode
+from nncf.common.graph.layer_attributes import BaseLayerAttributes
+from nncf.common.graph.layer_attributes import ConvolutionLayerAttributes
+from nncf.common.graph.layer_attributes import Dtype
+from nncf.common.graph.operator_metatypes import UnknownMetatype
+from nncf.common.logging import nncf_logger
+from nncf.experimental.torch.fx.node_utils import get_tensor_constant_from_node
+from nncf.torch.dynamic_graph.layer_attributes_handlers import apply_args_defaults
+from nncf.torch.graph.graph import PTNNCFGraph
+from nncf.torch.graph.operator_metatypes import PT_OPERATOR_METATYPES
+
+
+class GraphConverter:
+ """
+ Builds the NNCFGraph from an torch.fx.GraphModule instance.
+ """
+
+ def _get_layer_attributes(
+ node: torch.fx.Node, metatype: om.OperatorMetatype, model: torch.fx.GraphModule
+ ) -> BaseLayerAttributes:
+ """
+ Collects layer attributes for the given node.
+
+ :param node: Given node.
+ :param metatype: Given node metatype.
+ :param model: Target GraphModule instance.
+ :return: Given node layer attributes.
+ """
+ if metatype in [om.PTConv1dMetatype, om.PTConv2dMetatype, om.PTConv3dMetatype]:
+ conv_default_args = [(arg.name, arg.default_value) for arg in node.target._schema.arguments]
+ kwargs = apply_args_defaults(node.args, node.kwargs, conv_default_args)
+
+ weight_node = kwargs["weight"]
+ if weight_node.op != "get_attr":
+ # Convs with constant subgraphs or two inputs are not supported yet.
+ return None
+ weight = get_tensor_constant_from_node(weight_node, model)
+ return ConvolutionLayerAttributes(
+ weight_requires_grad=False,
+ in_channels=weight.shape[0],
+ out_channels=weight.shape[1],
+ kernel_size=list(weight.shape[2:]),
+ stride=kwargs["stride"],
+ dilations=kwargs["dilation"],
+ groups=kwargs["groups"],
+ padding_values=kwargs["padding"],
+ transpose=False,
+ )
+ return None
+
+ @staticmethod
+ def _get_node_type_and_metatype(
+ node: torch.fx.Node, model: torch.fx.GraphModule
+ ) -> Tuple[str, om.OperatorMetatype]:
+ """
+ Retrieves node's type and metatype.
+
+ :param node: Given node.
+ :param model: Given GraphModule.
+ :return: Node's type and metatype.
+ """
+ if node.op == "placeholder":
+ node_type = "input"
+ node_metatype = om.PTInputNoopMetatype
+ elif node.op == "output":
+ node_type = "output"
+ node_metatype = om.PTOutputNoopMetatype
+ elif node.op == "get_attr":
+ node_type = "get_attr"
+ node_metatype = om.PTConstNoopMetatype
+ elif node.op in ("call_function",):
+ if hasattr(node.target, "overloadpacket"):
+ node_type = str(node.target.overloadpacket).split(".")[1]
+ elif node.target.__name__ == "getitem":
+ node_type = "__getitem__"
+ else:
+ # TODO(dlyakhov): get correct nodes types from this nodes as well
+ node_type = str(node.target)
+ node_metatype = PT_OPERATOR_METATYPES.get_operator_metatype_by_op_name(node_type)
+ else:
+ node_type = node.op
+ node_metatype = UnknownMetatype
+ if node_metatype is UnknownMetatype:
+ nncf_logger.debug(f"Unknown metatype for node: {node}")
+
+ if node_metatype.get_subtypes():
+ layer_attrs = GraphConverter._get_layer_attributes(node, node_metatype, model)
+ node_subtype = node_metatype.determine_subtype(layer_attrs)
+ node_metatype = node_subtype or node_metatype
+ return node_type, node_metatype
+
+ @staticmethod
+ def create_nncf_graph(model: torch.fx.GraphModule) -> PTNNCFGraph:
+ """
+ Creates NNCFGraph from GraphModule.
+ All nodes from model which have valid metatype are added to NNCFGraph.
+ Then, corresponding edges are added to the NNCFGraph with shape, type, output and input port ids.
+
+ :param model: torch fx GraphModule.
+ :return: NNCFGraph.
+ """
+
+ nncf_graph = PTNNCFGraph()
+
+ for source_node in model.graph.nodes:
+ node_type, node_metatype = GraphConverter._get_node_type_and_metatype(source_node, model)
+
+ nncf_graph.add_nncf_node(
+ node_name=source_node.name,
+ node_type=node_type,
+ node_metatype=node_metatype,
+ )
+
+ for source_node in model.graph.nodes:
+ source_nncf_node = nncf_graph.get_node_by_name(source_node.name)
+ for idx, dist_node in enumerate(source_node.users):
+ dist_node_id = nncf_graph.get_node_by_name(dist_node.name).node_id
+ input_port_id, output_port_id, tensor_shape = GraphConverter.get_edge_params(
+ model, source_node, source_nncf_node, dist_node, idx
+ )
+
+ nncf_graph.add_edge_between_nncf_nodes(
+ source_nncf_node.node_id,
+ dist_node_id,
+ tensor_shape=tensor_shape,
+ input_port_id=input_port_id,
+ output_port_id=output_port_id,
+ dtype=Dtype.FLOAT,
+ )
+ return nncf_graph
+
+ @staticmethod
+ def get_edge_params(
+ model: torch.fx.GraphModule,
+ source_node: torch.fx.Node,
+ source_nncf_node: NNCFNode,
+ dist_node: torch.fx.Node,
+ output_idx: int,
+ ) -> Tuple[int, int, Tuple[int, ...]]:
+ """
+ Retrieves edge params from the given source_node and dist_node pair.
+
+ :param model: A torch.fx.GraphModule instance.
+ :param source_node: Source node in format of torch.fx.Node.
+ :param source_nncf_node: Source node in format of NNCFNode.
+ :param dist_node: Distance node in format of torch.fx.Node.
+ :param output_idx: Output indes of the source_node.
+ :return: Tuple of edge parameters: edge input port id, edge output port id and
+ edge tensor shape.
+ """
+ output_port_id = 0
+ tensor_shape = None
+ if source_node.op in ("get_attr",):
+ tensor_shape = tuple(getattr(model, source_node.target).shape)
+ elif "val" in source_node.meta:
+ if source_nncf_node.metatype is om.PTBatchNormMetatype:
+ tensor = source_node.meta["val"][0]
+ elif source_nncf_node.metatype in [om.PTSplitMetatype, om.PTMaxMetatype, om.PTMinMetatype]:
+ tensor = source_node.meta["val"][output_idx]
+ # Assume every outputs corresponds to an unique output_port_id
+ output_port_id = output_idx
+ else:
+ tensor = source_node.meta["val"]
+ if isinstance(tensor, torch.Tensor):
+ tensor_shape = tuple(tensor.shape)
+
+ if tensor_shape is None:
+ # TODO(dlyakhov): Refactor algorithms to always have knowns edges shapes.
+ nncf_logger.debug(f"Edge shape between {source_node.name} and {dist_node.name} is unknown.")
+
+ input_port_id = dist_node.all_input_nodes.index(source_node)
+ return input_port_id, output_port_id, tensor_shape
diff --git a/nncf/experimental/torch/fx/node_utils.py b/nncf/experimental/torch/fx/node_utils.py
new file mode 100644
index 00000000000..a0757ea027c
--- /dev/null
+++ b/nncf/experimental/torch/fx/node_utils.py
@@ -0,0 +1,51 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import torch.fx
+
+
+# TODO(dlyakhov): Use torch.fx.graph.find_nodes method instead after
+# torch version update (>= 2.4)
+def get_graph_node_by_name(graph: torch.fx.Graph, name: str) -> torch.fx.Node:
+ """
+ Retrieves a node with the specified name from the grpah.
+ Raises a runtime error if graph does not contain node with
+ the given name.
+
+ :param graph: Given torch fx graph.
+ :param name: Target node name.
+ :return: A graph node with the given name.
+ """
+ for node in graph.nodes:
+ if node.name == name:
+ return node
+ raise RuntimeError(f"Node with name {name} is not found")
+
+
+def get_tensor_constant_from_node(constant_node: torch.fx.Node, model: torch.fx.GraphModule) -> torch.nn.Parameter:
+ """
+ Retrieves tensor from the given constant node.
+
+ :param constant_node: Given constant node.
+ :param model: Given model.
+ :return: Torch tensor referenced by the given constant node.
+ """
+ if constant_node is None:
+ return None
+ if constant_node.op != "get_attr":
+ raise RuntimeError(f"Given node op == {constant_node.op}, but get_attr is expected.")
+ target_atoms = constant_node.target.split(".")
+ attr_itr = model
+ for i, atom in enumerate(target_atoms):
+ if not hasattr(attr_itr, atom):
+ raise RuntimeError(f"Node referenced nonexistent target {'.'.join(target_atoms[:i])}")
+ attr_itr = getattr(attr_itr, atom)
+ return attr_itr
diff --git a/nncf/experimental/torch/fx/quantization/__init__.py b/nncf/experimental/torch/fx/quantization/__init__.py
new file mode 100644
index 00000000000..2e49d63977d
--- /dev/null
+++ b/nncf/experimental/torch/fx/quantization/__init__.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/nncf/experimental/torch/fx/quantization/quantize_model.py b/nncf/experimental/torch/fx/quantization/quantize_model.py
new file mode 100644
index 00000000000..01aebf68c1f
--- /dev/null
+++ b/nncf/experimental/torch/fx/quantization/quantize_model.py
@@ -0,0 +1,107 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from copy import deepcopy
+from typing import Optional
+
+import torch
+import torch.fx
+from torch.ao.quantization.pt2e.duplicate_dq_pass import DuplicateDQPass
+from torch.ao.quantization.pt2e.port_metadata_pass import PortNodeMetaForQDQ
+from torch.ao.quantization.pt2e.qat_utils import _fold_conv_bn_qat
+from torch.ao.quantization.pt2e.utils import _disallow_eval_train
+from torch.fx import GraphModule
+from torch.fx.passes.infra.pass_manager import PassManager
+
+import nncf
+from nncf.common.factory import NNCFGraphFactory
+from nncf.common.logging import nncf_logger
+from nncf.common.quantization.structs import QuantizationPreset
+from nncf.data import Dataset
+from nncf.experimental.torch.fx.transformations import apply_quantization_transformations
+from nncf.experimental.torch.fx.transformations import revert_quantization_transformations
+from nncf.parameters import ModelType
+from nncf.parameters import QuantizationMode
+from nncf.parameters import TargetDevice
+from nncf.quantization.advanced_parameters import AdvancedQuantizationParameters
+from nncf.quantization.algorithms.post_training.algorithm import PostTrainingQuantization
+from nncf.scopes import IgnoredScope
+
+DEFAULT_RANGE_TYPE = "mean_min_max"
+
+
+def quantize_impl(
+ model: torch.fx.GraphModule,
+ calibration_dataset: Dataset,
+ mode: Optional[QuantizationMode] = None,
+ preset: Optional[QuantizationPreset] = None,
+ target_device: TargetDevice = TargetDevice.ANY,
+ subset_size: int = 300,
+ fast_bias_correction: bool = True,
+ model_type: Optional[ModelType] = None,
+ ignored_scope: Optional[IgnoredScope] = None,
+ advanced_parameters: Optional[AdvancedQuantizationParameters] = None,
+) -> torch.nn.Module:
+ """
+ Implementation of the `quantize()` method for the Torch FX backend.
+ """
+ nncf_logger.warning(
+ "Experimental Torch FX quantization backend is being used for the given torch.fx.GraphModule model."
+ " Torch FX PTQ is an experimental feature, consider using Torch or OpenVino PTQ backends"
+ " in case of errors or a poor model performance."
+ )
+ if fast_bias_correction is False:
+ raise ValueError(f"fast_bias_correction={fast_bias_correction} is not supported")
+ if target_device == TargetDevice.CPU_SPR:
+ raise nncf.InternalError("target_device == CPU_SPR is not supported")
+ if mode is not None:
+ raise ValueError(f"mode={mode} is not supported")
+
+ original_graph_meta = model.meta
+
+ copied_model = deepcopy(model)
+
+ quantization_algorithm = PostTrainingQuantization(
+ preset=preset,
+ target_device=target_device,
+ subset_size=subset_size,
+ fast_bias_correction=fast_bias_correction,
+ model_type=model_type,
+ ignored_scope=ignored_scope,
+ advanced_parameters=advanced_parameters,
+ )
+
+ # To make it easier for bias correction algorithms,
+ # biases are being separated by the followng calls.
+ apply_quantization_transformations(copied_model)
+
+ nncf_graph = NNCFGraphFactory.create(copied_model)
+ quantized_model = quantization_algorithm.apply(copied_model, nncf_graph, dataset=calibration_dataset)
+
+ # Revert applied transformation to keep original model
+ # bias configuration.
+ revert_quantization_transformations(quantized_model)
+
+ # Magic. Without this call compiled model
+ # is not preformant
+ quantized_model = GraphModule(quantized_model, quantized_model.graph)
+
+ quantized_model = _fold_conv_bn_qat(quantized_model)
+ pm = PassManager([DuplicateDQPass()])
+
+ quantized_model = pm(quantized_model).graph_module
+ pm = PassManager([PortNodeMetaForQDQ()])
+ quantized_model = pm(quantized_model).graph_module
+
+ quantized_model.meta.update(original_graph_meta)
+ quantized_model = _disallow_eval_train(quantized_model)
+
+ return quantized_model
diff --git a/nncf/experimental/torch/fx/statistics/__init__.py b/nncf/experimental/torch/fx/statistics/__init__.py
new file mode 100644
index 00000000000..2e49d63977d
--- /dev/null
+++ b/nncf/experimental/torch/fx/statistics/__init__.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/nncf/experimental/torch/fx/statistics/aggregator.py b/nncf/experimental/torch/fx/statistics/aggregator.py
new file mode 100644
index 00000000000..9f109147d83
--- /dev/null
+++ b/nncf/experimental/torch/fx/statistics/aggregator.py
@@ -0,0 +1,123 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict
+
+import numpy as np
+import torch
+
+from nncf.common.factory import TModel
+from nncf.common.graph.graph import NNCFGraph
+from nncf.common.graph.transformations.commands import TransformationPriority
+from nncf.common.graph.transformations.layout import TransformationLayout
+from nncf.common.tensor_statistics.aggregator import StatisticPointsContainer
+from nncf.common.tensor_statistics.aggregator import StatisticsAggregator
+from nncf.experimental.common.tensor_statistics.collectors import TensorCollector
+from nncf.experimental.torch.fx.commands import FXApplyTransformationCommand
+from nncf.experimental.torch.fx.transformations import leaf_module_insertion_transformation_builder
+from nncf.tensor import Tensor
+from nncf.torch.graph.transformations.commands import PTTargetPoint
+from nncf.torch.nncf_network import NNCFNetwork
+from nncf.torch.return_types import maybe_get_values_from_torch_return_type
+
+
+class TensorCollectorModule(torch.nn.Module):
+ """
+ torch.nn.Module which calls given collector in forward
+ """
+
+ def __init__(self, collector: TensorCollector):
+ super().__init__()
+ self._collector = collector
+
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
+ """
+ Register inputs hook function.
+
+ :parameter x: tensor to register in hook.
+ :return: tensor to register in hook.
+ """
+ x_unwrapped = maybe_get_values_from_torch_return_type(x)
+ self._collector.register_input_for_all_reducers(Tensor(x_unwrapped))
+ return x
+
+
+class FXStatisticsAggregator(StatisticsAggregator):
+ HOOKS_GROUP_NAME = "statistics_hooks"
+
+ def collect_statistics(self, model: NNCFNetwork, graph: NNCFGraph) -> None:
+ with torch.no_grad():
+ super().collect_statistics(model, graph)
+ # All statistics are collected as a dead code,
+ # so eliminate dead core removed statistcs collector
+ # from the target model. No additional code required
+ # for that, horay!
+ model.graph.eliminate_dead_code()
+ model.recompile()
+
+ def _register_statistics(self, outputs: Dict[str, Tensor], statistic_points: StatisticPointsContainer) -> None:
+ return
+
+ @staticmethod
+ def _get_statistic_collector_name(tp: PTTargetPoint, module_to_insert: torch.nn.Module) -> str:
+ """
+ Compouses unique statistic collector name according to given target point and module.
+
+ :param tp: Given target point.
+ :param module_to_insert: Given statistic collection module.
+ :return: Unique statistic collector name according to given target point and module.
+ """
+ return "_".join(
+ [
+ tp.target_node_name,
+ str(tp.input_port_id),
+ str(tp.target_type.value),
+ str(id(module_to_insert)),
+ ]
+ )
+
+ def _get_transformation_layout_extra_outputs(
+ self, statistic_points: StatisticPointsContainer
+ ) -> TransformationLayout:
+ transformation_layout = TransformationLayout()
+ transformation_commands = []
+
+ for _statistic_points in statistic_points.values():
+ for _statistic_point in _statistic_points:
+ for collectors in _statistic_point.algorithm_to_tensor_collectors.values():
+ for collector in collectors:
+ tp = _statistic_point.target_point
+ module_to_insert = TensorCollectorModule(collector)
+ target_module_name = self._get_statistic_collector_name(tp, module_to_insert)
+ transformation = leaf_module_insertion_transformation_builder(
+ module_to_insert, [tp], target_module_name
+ )
+ transformation_commands.append(
+ FXApplyTransformationCommand(
+ transformation, TransformationPriority.FP32_TENSOR_STATISTICS_OBSERVATION
+ )
+ )
+
+ for transformation_command in transformation_commands:
+ transformation_layout.register(transformation_command)
+
+ return transformation_layout
+
+ @staticmethod
+ def _get_merged_statistic_points(
+ statistic_points: StatisticPointsContainer, model: TModel, graph: NNCFGraph
+ ) -> StatisticPointsContainer:
+ # TODO(dlyakhov): mirgate to experimental statistic collector and use common merging algorithm
+ return statistic_points
+
+ @staticmethod
+ def _process_outputs(outputs: Dict[str, np.ndarray]) -> Dict[str, Tensor]:
+ return outputs
diff --git a/nncf/experimental/torch/fx/transformations.py b/nncf/experimental/torch/fx/transformations.py
new file mode 100644
index 00000000000..d15172e93d0
--- /dev/null
+++ b/nncf/experimental/torch/fx/transformations.py
@@ -0,0 +1,597 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Callable, List, Optional
+
+import torch
+import torch.fx
+from torch.ao.quantization.fx.utils import create_getattr_from_value
+from torch.ao.quantization.pt2e.utils import fold_bn_weights_into_conv_node
+from torch.quantization.fake_quantize import FakeQuantize
+
+import nncf
+from nncf.common.graph.graph import NNCFNode
+from nncf.common.graph.transformations.commands import TargetType
+from nncf.experimental.torch.fx.node_utils import get_graph_node_by_name
+from nncf.experimental.torch.fx.node_utils import get_tensor_constant_from_node
+from nncf.torch.graph.transformations.commands import PTTargetPoint
+
+TransformationFNType = Callable[[torch.fx.GraphModule], None]
+
+
+def _set_new_node_meta(new_node: torch.fx.Node, prev_node: torch.fx.Node, target_module: torch.nn.Module):
+ """
+ Sets correct meta \"val\" value to the new node.
+
+ :param new_node: The new node.
+ :param prev_node: Input node of the new node.
+ New node expected to have only one input node.
+ :param target_module: Module which is being called by the new node.
+ """
+ val = prev_node.meta["val"]
+ val = val if isinstance(val, tuple) else (val,)
+ retval = []
+ for t in val:
+ retval.append(torch.ones(t.shape))
+
+ with torch.no_grad():
+ new_node.meta["val"] = target_module(*val)
+
+
+def module_insertion_transformation_builder(
+ module_to_insert: torch.nn.Module, target_points: List[PTTargetPoint], target_module_name: str
+) -> TransformationFNType:
+ """
+ Returns transformation which inserts given module to a target model
+ and calls given module after each target points replacing inputs/outputs
+ of the target node.
+
+ :param module_to_insert: Given torch.nn.Module to insert.
+ :param target_points: Target points to insert the target module.
+ :param target_module_name: Target model attribute name for the module_to_insert.
+ :returns: Transformation which which inserts given module to a target model
+ and calls given module after each target points.
+ """
+
+ def module_insertion_transformation(model: torch.fx.GraphModule):
+ module_attr_name = _set_module_to_the_graph_module(model, module_to_insert, target_module_name)
+ # Insert call_module nodes to the model
+ graph = model.graph
+ for idx, target_point in enumerate(target_points):
+ new_node = _insert_call_module(graph, target_point, module_attr_name, f"{module_attr_name}_{idx}")
+ target_node = get_graph_node_by_name(graph, target_point.target_node_name)
+
+ if target_point.target_type == TargetType.OPERATOR_POST_HOOK:
+ _set_new_node_meta(new_node, target_node, module_to_insert)
+ with graph.inserting_after(target_node):
+ for user in target_node.users:
+ if user is new_node:
+ continue
+ user.replace_input_with(target_node, new_node)
+
+ else:
+ prev_node = target_node.args[target_point.input_port_id]
+ _set_new_node_meta(new_node, prev_node, module_to_insert)
+ target_node.replace_input_with(prev_node, new_node)
+
+ return module_insertion_transformation
+
+
+def leaf_module_insertion_transformation_builder(
+ module_to_insert: torch.nn.Module, target_points: List[PTTargetPoint], target_module_name: str
+) -> TransformationFNType:
+ """
+ Returns transformation which inserts given module to a target model
+ and calls given module after each target points.
+
+ :param module_to_insert: Given torch.nn.Module to insert.
+ :param target_points: Target points to insert the target module.
+ :param target_module_name: Target model attribute name for the module_to_insert.
+ :returns: Transformation which which inserts given module to a target model
+ and calls given module after each target points.
+ """
+
+ def leaf_module_insertion_transformation(model: torch.fx.GraphModule):
+ module_attr_name = _set_module_to_the_graph_module(model, module_to_insert, target_module_name)
+ # Insert call_module nodes to the model
+ graph = model.graph
+ for idx, target_point in enumerate(target_points):
+ _insert_call_module(graph, target_point, module_attr_name, f"{module_attr_name}_{idx}")
+
+ return leaf_module_insertion_transformation
+
+
+def bias_update_transformation_builder(node: NNCFNode, value: torch.Tensor) -> TransformationFNType:
+ """
+ Return transformation which updates constant of the given node with bias to the given value.
+
+ :param node: Node with bias which requires bias constant update.
+ :param value: New value to use as the bias constant.
+ :return: Transformation which updates constant of the given node with bias to the given value.
+ """
+
+ def bias_update_transformation(model: torch.fx.GraphModule):
+ graph = model.graph
+ target_node_name = node.node_name
+ graph_node = get_graph_node_by_name(graph, target_node_name)
+ if len(graph_node.users) != 1:
+ raise nncf.InternalError(f"Node with bias have {len(graph_node.users)} users, 1 expected.")
+
+ bias_node = next(iter(graph_node.users))
+ constant_update_fn(model, bias_node, value, input_port_id=1)
+
+ return bias_update_transformation
+
+
+def constant_update_transformation_builder(node: NNCFNode, value: torch.Tensor) -> TransformationFNType:
+ """
+ Return transformation which updates constant of the given node to the given value.
+
+ :param node: Node which requires bias constant update.
+ :param value: New value to use as the node constant.
+ :return: Transformation which updates constant of the given node to the given value.
+ """
+
+ def constant_update_transformation(model: torch.fx.GraphModule):
+ constant_update_fn(model, get_graph_node_by_name(model.graph, node.node_name), value, input_port_id=1)
+
+ return constant_update_transformation
+
+
+def constant_update_fn(model: torch.fx.GraphModule, node: torch.fx.Node, value: torch.Tensor, input_port_id: int = 1):
+ """
+ Updates constant of given node on the given input port id with given value.
+
+ :param model: Target torch GraphModule.
+ :param node: Given graph node.
+ :param value: New value to use as the node constant.
+ :param input_port_id: Target constant input port id.
+ """
+ graph = model.graph
+ with graph.inserting_before(node):
+ new_constant = create_getattr_from_value(model, graph, node.name + "_updated_constant", value)
+
+ args = list(node.args)
+ # A bias node suppose to have constant on the second input port.
+ if args[input_port_id].op != "get_attr":
+ raise nncf.InternalError(
+ f"Constant on input port {input_port_id} for {node} is expected,"
+ f" but node {args[input_port_id]} is present."
+ )
+ args[input_port_id] = new_constant
+ node.args = tuple(args)
+ graph.eliminate_dead_code()
+
+
+def qdq_insertion_transformation_builder(
+ quantizer: FakeQuantize, target_points: List[PTTargetPoint]
+) -> TransformationFNType:
+ """
+ Returns transformation which inserts quantize-dequantize operations with parameters
+ inherited from the given quantizer to each given target point.
+
+ :param quantizer: Quantizer module to inherit quantization parameters from.
+ :param target_points: List of target point used to insert quantize-dequantize pairs.
+ :return: Transformation which inserts quantize-dequantize operations with parameters
+ inherited from the given quantizer to each given target point.
+ """
+
+ def qdq_insertion_transformation(model: torch.fx.GraphModule):
+ if any(tp.target_type != TargetType.OPERATION_WITH_WEIGHTS for tp in target_points) and len(target_points) > 1:
+ raise RuntimeError(
+ "Insertion of shared qdq pair for the weights is not supported."
+ " Please use non shared qdq pairs for the weights quantization."
+ )
+ for target_point in target_points:
+ insert_one_qdq(model, target_point, quantizer)
+
+ return qdq_insertion_transformation
+
+
+def insert_one_qdq(model: torch.fx.GraphModule, target_point: PTTargetPoint, quantizer: FakeQuantize):
+ """
+ Inserts quantize-dequantize after the target node to the target model.
+
+ :param model: Target model.
+ :param target_node: Target node, quantizer-dequantizer pair is inserted just after the
+ target node.
+ :param quantizer: Quantizer module to inherit quantization parameters from.
+ """
+
+ # Copied from torch.ao.quantization.quantize_pt2e.convert_pt2e
+ # 1. extract information for inserting q/dq node from activation_post_process
+ node_type = "call_function"
+ quantize_op: Optional[Callable] = None
+
+ dtype = torch.int8 if quantizer.quant_min < 0 else torch.uint8
+ if quantizer.is_per_channel:
+ qparams = {
+ "_scale_": quantizer.scale,
+ "_zero_point_": quantizer.zero_point,
+ "_axis_": quantizer.ch_axis,
+ "_quant_min_": quantizer.quant_min,
+ "_quant_max_": quantizer.quant_max,
+ "_dtype_": dtype,
+ }
+ quantize_op = torch.ops.quantized_decomposed.quantize_per_channel.default
+ dequantize_op = torch.ops.quantized_decomposed.dequantize_per_channel.default
+ else:
+ qparams = {
+ "_scale_": float(quantizer.scale),
+ "_zero_point_": int(quantizer.zero_point),
+ "_quant_min_": quantizer.quant_min,
+ "_quant_max_": quantizer.quant_max,
+ "_dtype_": dtype,
+ }
+ quantize_op = torch.ops.quantized_decomposed.quantize_per_tensor.default
+ dequantize_op = torch.ops.quantized_decomposed.dequantize_per_tensor.default
+
+ # 2. replace activation_post_process node with quantize and dequantize
+ graph = model.graph
+ target_node = get_graph_node_by_name(graph, target_point.target_node_name)
+ # TODO(dlyakhov): use metatype to get correct input_port_id
+ # Do not quantize already quantized nodes
+ # inserting_before handle only order in the graph generated code.
+ # so, inserting quantize-dequantize and all constant nodes before the usage of the nodes
+ with graph.inserting_before(target_node):
+ quantize_op_inputs = [target_node]
+ for key, value_or_node in qparams.items():
+ # TODO(dlyakhov): we can add the information of whether a value needs to
+ # be registered as an attribute in qparams dict itself
+ if key in ["_scale_", "_zero_point_"] and (not isinstance(value_or_node, (float, int))):
+ # For scale and zero_point values we register them as buffers in the root module.
+ # However, note that when the values are not tensors, as in the case of
+ # per_tensor quantization, they will be treated as literals.
+ # However, registering them as a node seems to cause issue with dynamo
+ # tracing where it may consider tensor overload as opposed to default.
+ # With extra check of scale and zero_point being scalar, it makes
+ # sure that the default overload can be used.
+ # TODO(dlaykhov): maybe need more complex attr name here
+ qparam_node = create_getattr_from_value(model, graph, target_node.name + key, value_or_node)
+ quantize_op_inputs.append(qparam_node)
+ else:
+ # for qparams that are not scale/zero_point (like axis, dtype) we store
+ # them as literals in the graph.
+ quantize_op_inputs.append(value_or_node)
+
+ input_node = get_input_node(target_point, target_node)
+ quantize_op_inputs[0] = input_node
+
+ ctx_manager = get_ctx_manager(graph, target_point)
+ with ctx_manager(target_node):
+ quantized_node = graph.create_node(node_type, quantize_op, tuple(quantize_op_inputs), {})
+
+ # use the same qparams from quantize op
+ dq_inputs = [quantized_node] + quantize_op_inputs[1:]
+ if target_point.target_type == TargetType.OPERATOR_POST_HOOK:
+ user_dq_nodes = []
+ with graph.inserting_after(quantized_node):
+ for user in target_node.users:
+ if user is quantized_node:
+ continue
+ user_dq_nodes.append((user, graph.call_function(dequantize_op, tuple(dq_inputs), {})))
+
+ for user, dq_node in user_dq_nodes:
+ user.replace_input_with(target_node, dq_node)
+ elif target_point.target_type in [TargetType.OPERATOR_PRE_HOOK, TargetType.OPERATION_WITH_WEIGHTS]:
+ with graph.inserting_after(quantized_node):
+ dq_node = graph.call_function(dequantize_op, tuple(dq_inputs), {})
+
+ args = list(target_node.args)
+ args[target_point.input_port_id] = dq_node
+ target_node.args = tuple(args)
+ else:
+ raise nncf.InternalError(f"Unexpected target type: {target_point.target_type}")
+
+
+def _insert_call_module(
+ graph: torch.fx.Graph, target_point: PTTargetPoint, module_attr_name: str, graph_node_name: str
+):
+ """
+ Inserts module call node to the graph after the target node.
+
+ :param graph: Graph to insert module call node.
+ :param target_node: Target node, module call node is being iserted just after the target node.
+ :param module_attr_name: The name of the graph attribute which keeps the target module.
+ :param graph_node_name: Target name for module call node.
+ :return: Inserted module call node.
+ """
+ target_node = get_graph_node_by_name(graph, target_point.target_node_name)
+ input_node = get_input_node(target_point, target_node)
+ ctx_manager = get_ctx_manager(graph, target_point)
+ with ctx_manager(target_node):
+ return graph.create_node("call_module", module_attr_name, (input_node,), {}, name=graph_node_name)
+
+
+def get_input_node(target_point: PTTargetPoint, target_node: torch.fx.Node) -> torch.fx.Node:
+ """
+ Returns an input node according to the given target point.
+
+ :param target_point: Given target point.
+ :param target_node: The target node of the given target point.
+ :return: An input node according to the given target point.
+ """
+ target_type = target_point.target_type
+ if target_type not in [
+ TargetType.OPERATOR_PRE_HOOK,
+ TargetType.OPERATOR_POST_HOOK,
+ TargetType.OPERATION_WITH_WEIGHTS,
+ ]:
+ raise nncf.InternalError(f"Unexpected target type: {target_type}")
+ if target_type == TargetType.OPERATOR_POST_HOOK:
+ return target_node
+ return target_node.args[target_point.input_port_id]
+
+
+def get_ctx_manager(graph: torch.fx.Graph, target_point: PTTargetPoint) -> Callable:
+ """
+ Return insertion context manager according to the given target point.
+ An insertion context manager sets the point at which create_node and
+ companion methods will insert into the torch.fx.Graph.
+
+ :param graph: torch.fx.Graph instance.
+ :param target_point: Given target point.
+ :return: Insertion context manager according to the given target point.
+ """
+ if target_point.target_type not in [
+ TargetType.OPERATOR_PRE_HOOK,
+ TargetType.OPERATOR_POST_HOOK,
+ TargetType.OPERATION_WITH_WEIGHTS,
+ ]:
+ raise nncf.InternalError(f"Unexpected target type: {target_point.target_type}")
+
+ if target_point.target_type == TargetType.OPERATOR_POST_HOOK:
+ return graph.inserting_after
+ return graph.inserting_before
+
+
+def _set_module_to_the_graph_module(
+ model: torch.fx.GraphModule,
+ module_to_insert: torch.nn.Module,
+ module_name_in_model: str,
+) -> str:
+ """
+ Sets given module to the given torch.fx.GraphModule with unique name.
+
+ :param graph: Target torch.fx.Graph.
+ :param module_to_insert: Module to insert to the target graph.
+ :param module_name_in_model: Target model attribute name for the module_to_insert.
+ :return: A graph module attribute name which keep given module.
+ """
+ assert not hasattr(model, module_name_in_model)
+ setattr(model, module_name_in_model, module_to_insert)
+ return module_name_in_model
+
+
+def _is_supported_batch_norm_for_training(node: torch.fx.Node):
+ """
+ Return True if the given node refers to an aten batch norm op QAT supports.
+ """
+ supported_ops = [
+ torch.ops.aten._native_batch_norm_legit.default,
+ torch.ops.aten.cudnn_batch_norm.default,
+ torch.ops.aten.miopen_batch_norm.default,
+ ]
+ return node.target in supported_ops
+
+
+def _is_bn_node(node: torch.fx.Node):
+ return (
+ _is_supported_batch_norm_for_training(node)
+ or node.target == torch.ops.aten._native_batch_norm_legit_no_training.default
+ )
+
+
+def fuse_conv_bn(model: torch.fx.GraphModule) -> None:
+ """
+ BatchNorm operations have 3 output ports, to make it easier for algorithms to work with
+ the target graph BatchNorm operations are being fused
+
+ :param model: Model to apply transformations to.
+ """
+ has_bn = any(_is_bn_node(node) for node in model.graph.nodes)
+ if not has_bn:
+ return
+
+ for node in model.graph.nodes:
+ if node.op != "call_function" or not _is_bn_node(node):
+ continue
+ bn_node = node
+
+ node = bn_node.args[0]
+ if not _is_conv(node):
+ continue
+ conv_node = node
+ conv_weight_node = conv_node.args[1]
+ conv_bias_node = conv_node.args[2] if len(conv_node.args) > 2 else None
+ fold_bn_weights_into_conv_node(conv_node, conv_weight_node, conv_bias_node, bn_node, model)
+
+ model.graph.eliminate_dead_code()
+ model.recompile()
+
+
+def apply_quantization_transformations(model: torch.fx.GraphModule) -> None:
+ """
+ Applies quantization transformations to the model.
+ :param model: Model to apply transformations to.
+ """
+ # BatchNorm operations have 3 output ports,
+ # to make it easier for algorithms to work
+ # with the target graph BatchNorm operations
+ # are being fused
+ fuse_conv_bn(model)
+ separate_conv_and_bias(model)
+ separate_linear_and_bias(model)
+
+
+def revert_quantization_transformations(model: torch.fx.GraphModule) -> None:
+ """
+ Reverts quantization transformations from the model.
+ :param model: Model to revert transformations from.
+ """
+ merge_conv_and_bias(model)
+ merge_linear_and_bias(model)
+
+
+def _is_linear(n: torch.fx.Node) -> bool:
+ """
+ Return whether the node refers to an aten linear op.
+
+ :param n: The given node.
+ :return: True if given node is a linear node, else False.
+ """
+ return n.op == "call_function" and n.target in (torch.ops.aten.linear.default,)
+
+
+def _is_conv(n: torch.fx.Node):
+ """
+ Return whether the node refers to an aten conv op.
+ """
+ return n.op == "call_function" and n.target in (
+ torch.ops.aten.conv1d.default,
+ torch.ops.aten.conv2d.default,
+ )
+
+
+def separate_linear_and_bias(model: torch.fx.GraphModule):
+ """
+ Separates one joined linear+bias node to two nodes: conv and bias.
+ Needed as nncf does not expect joined conv
+
+ :param model: Target model.
+ """
+ add_node_target = torch.ops.aten.add_.Tensor
+ for n in model.graph.nodes:
+ if not _is_linear(n):
+ continue
+ if len(n.args) < 3 or n.args[2] is None:
+ continue
+ linear_node = n
+ linear_bias_node = linear_node.args[2]
+ while linear_bias_node.op != "get_attr":
+ # Assume zero argument is on a path to the constant
+ linear_bias_node = linear_bias_node.args[0]
+ linear_bias_value = get_tensor_constant_from_node(linear_bias_node, model)
+ args = list(n.args)
+ args[2] = None
+ linear_node.args = tuple(args)
+ with model.graph.inserting_after(linear_node):
+ new_linear_bias_node = create_getattr_from_value(
+ model,
+ model.graph,
+ linear_bias_node.name + "_",
+ linear_bias_value,
+ )
+ with model.graph.inserting_after(new_linear_bias_node):
+ add_node = model.graph.create_node(
+ "call_function", add_node_target, (linear_node, new_linear_bias_node), {}
+ )
+ for user in list(linear_node.users):
+ if user is add_node:
+ continue
+ user.replace_input_with(linear_node, add_node)
+ if "val" in linear_node.meta:
+ add_node.meta["val"] = linear_node.meta["val"]
+ model.graph.eliminate_dead_code()
+ model.recompile()
+
+
+def separate_conv_and_bias(model: torch.fx.GraphModule):
+ """
+ Separates one joined conv+bias node to two nodes: conv and bias.
+ Needed as nncf does not expect joined conv
+
+ :param model: Target model.
+ """
+ add_node_target = torch.ops.aten.add_.Tensor
+ for n in model.graph.nodes:
+ if not _is_conv(n):
+ continue
+ if len(n.args) < 3 or n.args[2] is None:
+ continue
+ conv_node = n
+ dims = len(get_tensor_constant_from_node(conv_node.args[1], model).shape)
+ conv_bias_node = conv_node.args[2]
+ conv_bias_value = get_tensor_constant_from_node(conv_bias_node, model)
+ args = list(n.args)
+ args[2] = None
+ conv_node.args = tuple(args)
+ with model.graph.inserting_after(conv_node):
+ new_conv_bias_node = create_getattr_from_value(
+ model, model.graph, conv_bias_node.name + "_", conv_bias_value.reshape((1, -1) + (1,) * (dims - 2))
+ )
+ with model.graph.inserting_after(new_conv_bias_node):
+ add_node = model.graph.create_node("call_function", add_node_target, (conv_node, new_conv_bias_node), {})
+ for user in list(conv_node.users):
+ if user is add_node:
+ continue
+ user.replace_input_with(conv_node, add_node)
+
+ if "val" in conv_node.meta:
+ add_node.meta["val"] = conv_node.meta["val"]
+ model.graph.eliminate_dead_code()
+ model.recompile()
+
+
+def merge_conv_and_bias(model: torch.fx.GraphModule):
+ """
+ Merges two separate conv and bias nodes to a one node: conv+bias.
+ Needed as nncf does not expect joined conv
+
+ :param model: Target model.
+ """
+ _merge_node_and_bias(model, _is_conv)
+
+
+def merge_linear_and_bias(model: torch.fx.GraphModule):
+ """
+ Merges two separate linear and bias nodes to a one node: linear+bias.
+
+ :param model: Target model.
+ """
+ _merge_node_and_bias(model, _is_linear)
+
+
+def _merge_node_and_bias(model: torch.fx.GraphModule, is_target_node: Callable[[torch.fx.Node], bool]):
+ """
+ Merges two separate node and bias node to a one node: node+bias.
+ Check which node should be merged by the given `is_target_node` predicate.
+
+ :param model: Target model.
+ :param is_target_node: Predicate to specify nodes which should be merged with the bias
+ """
+ add_node_targets = (torch.ops.aten.add_.Tensor,)
+ for n in model.graph.nodes:
+ if not is_target_node(n):
+ continue
+ if len(n.args) > 2 and n.args[2] is not None:
+ continue
+ bias_node = next(iter(n.users))
+ if len(n.users) > 1 or bias_node.target not in add_node_targets:
+ continue
+ conv_node = n
+ const_node = None
+ for node in bias_node.all_input_nodes:
+ if node is not conv_node:
+ const_node = node
+ break
+ assert const_node is not None
+ bias_value = get_tensor_constant_from_node(const_node, model).squeeze()
+ with model.graph.inserting_before(conv_node):
+ new_bias_node = create_getattr_from_value(model, model.graph, const_node.name + "_", bias_value)
+ args = list(conv_node.args)
+ args[2] = new_bias_node
+ conv_node.args = tuple(args)
+ for user in list(bias_node.users):
+ user.replace_input_with(bias_node, conv_node)
+
+ model.graph.eliminate_dead_code()
+ model.recompile()
diff --git a/nncf/experimental/torch/sparsify_activations/ActivationSparsity.md b/nncf/experimental/torch/sparsify_activations/ActivationSparsity.md
new file mode 100644
index 00000000000..c0d94ceac05
--- /dev/null
+++ b/nncf/experimental/torch/sparsify_activations/ActivationSparsity.md
@@ -0,0 +1,146 @@
+### Activation Sparsity (experimental feature)
+
+The `sparsify_activations` algorithm is a post-training method designed to introduce sparsity into the activations of a neural network. This process reduces the number of active neurons during inference by masking out neurons based on their magnitude relative to a calibrated static threshold.
+
+The algorithm sparsifies the input of a layer by applying the following function:
+
+$$
+sparsify(X) =
+\begin{cases}
+X & \text{if } |X| > \tau \\
+0 & \text{if } |X| \le \tau
+\end{cases}
+$$
+
+The magnitude threshold $\tau$ that corresponds to a desired level of sparsity is determined by the statistical quantile value of activations collected via an input dataset:
+
+$$
+\tau = Quantile(|X|,\ target\ sparsity)
+$$
+
+`sparsify_activations` automates the process of identifying the pruning thresholds based on user-specified layers, target sparsities and input dataset.
+
+> Note: This feature is **experimental** and intended solely for evaluation of sparsity-task performance. While activation sparsity can improve inference efficiency of decoding phase for Large Language Models (LLMs) ([Liu et al., 2023](https://arxiv.org/abs/2310.17157)), it neccessitates optimized runtime kernels, which are in development.
+
+#### Example Usage
+
+Below is an example of applying `sparsify_activations` algorithm to a torch model. Optionally, you can also call `nncf.compress_weights()` before sparsification to get an optimized model with quantized weights and sparse activations.
+
+```python
+import nncf
+from nncf.experimental.torch.sparsify_activations import sparsify_activations, TargetScope
+
+model = ... # Your model
+dataset = ... # Calibration set
+
+# (Optional) Weight-only quantization
+model = nncf.compress_weights(
+ model=model,
+ mode=nncf.CompressWeightsMode.INT8_ASYM,
+ dataset=dataset,
+)
+
+# Activation sparsification
+model = sparsify_activations(
+ model=model,
+ dataset=dataset,
+ target_sparsity_by_scope={
+ TargetScope(patterns=[".*up_proj.*", ".*gate_proj.*"]): 0.3,
+ TargetScope(patterns=[".*down_proj.*",]): 0.5,
+ }
+)
+```
+
+In this example, we first conduct data-free INT8 asymmetric weight quantization on the model. Then we do activation sparsification, setting the target activation sparsity to 30% for all the layers containing the keywords "up_proj" and "gate_proj", and 50% for layers with "down_proj" keyword.
+
+#### Interface Details
+
+- `model`: The model to be sparsified. Currently only Torch backend is supported.
+- `dataset`: An `nncf.Dataset` instance used to calibrate the pruning thresholds.
+- `target_sparsity_by_scope`: A dictionary that defines the target activation sparsity level for specified layers. For each item, the key is an instance of `TargetScope` class representing the layers to match in the model's NNCF graph; the corresponding value is a float number in the range [0, 1] representing the target sparsity level. `TargetScope` supports absolute and REGEX-based name matching.
+
+ - Example:
+
+ ```python
+ {
+ # Target sparsity is 60% for node "Dummy/Linear[layer]/linear_0" in the model graph
+ TargetScope(names=["Dummy/Linear[layer]/linear_0"]): 0.6,
+ # Target sparsity is 30% for the layers whose name contains "up_proj" or "down_proj".
+ TargetScope(patterns=[".*up_proj.*", ".*down_proj.*"]): 0.3,
+ }
+ ```
+
+- `ignored_scope`: Optional. If specified, it should be an instance of `nncf.IgnoredScope` class that defines the nodes in the model graph to be ignored by this algorithm. Note that unsupported layer types are already filtered out internally, so there is no need to mention them in `ignored_scope`. The algorithm currently only supports Linear layers, as they benefit most from dynamic sparse activations by reducing memory read bandwidth for the large Linear layer weights used in LLMs.
+
+#### Evaluation results
+
+Here is the word perplexity for different language models on a subset of [wikitext dataset](https://arxiv.org/abs/1609.07843), with maximum context length set as 2048. In the table, "int8_asym" means the model weights are asymmetrically quantized to INT8. "up/gate/down" means the up, gate, and down projection layers in the [Gated Linear Units](https://arxiv.org/abs/1612.08083) (GLU) style feed forward networks. "Avg. Activation Sparsity" column shows the average activation sparsity on the evaluation samples. For example, "down50%" means that on average the input activations of all "down" layers have a sparsity of 50%.
+
+
+
+ Model |
+ Mode |
+ Avg. Activation Sparsity |
+ Word Perplexity (↓) |
+
+
+ meta-llama/Llama-2-7b-hf |
+ fp32 |
+ - |
+ 9.242 |
+
+
+ |
+ sparse_activation |
+ up/gate30% + down50% |
+ 9.508 |
+
+
+ |
+ int8_asym + sparse_activation |
+ up/gate30% + down50% |
+ 9.511 |
+
+
+ meta-llama/Meta-Llama-3-8B-Instruct |
+ fp32 |
+ - |
+ 10.802 |
+
+
+ |
+ sparse_activation |
+ up/gate30% + down50% |
+ 11.294 |
+
+
+ |
+ int8_asym + sparse_activation |
+ up/gate30% + down50% |
+ 11.302 |
+
+
+ mistralai/Mixtral-8x7B-Instruct-v0.1 |
+ fp32 |
+ - |
+ 6.224 |
+
+
+ |
+ sparse_activation |
+ up/gate40% + down50% |
+ 6.561 |
+
+
+ |
+ int8_asym + sparse_activation |
+ up/gate40% + down50% |
+ 6.579 |
+
+
+
+#### Known Limitations
+
+1. Currently activation sparsity only supports Torch backend. Consequently, this restricts the available compression modes to 8-bit integer modes when using `nncf.compress_weights()` before activation sparsification. More information on supported modes can be found at [Weights Compression](../../../../docs/usage/post_training_compression/weights_compression/Usage.md#limitations).
+2. Actual activation sparsity during inference is dynamic and per input basis, deviation from the target should be expected. In our local experiments, the statistical mean of actual activation sparsity aligned to the target when thresholds are calibrated on datasets similar to the final task.
+3. Similar to other compression methods, model accuracy and activation sparsity are trade-off at play. For LLMs like [Llama](https://llama.meta.com), it is recommended to start with 30%~50% sparsity for the Linear layers in feed-forward networks.
diff --git a/nncf/experimental/torch/sparsify_activations/__init__.py b/nncf/experimental/torch/sparsify_activations/__init__.py
new file mode 100644
index 00000000000..ecfaa78cc4f
--- /dev/null
+++ b/nncf/experimental/torch/sparsify_activations/__init__.py
@@ -0,0 +1,13 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from nncf.experimental.torch.sparsify_activations.sparsify_activations_impl import sparsify_activations # noqa: F401
+from nncf.experimental.torch.sparsify_activations.target_scope import TargetScope # noqa: F401
diff --git a/nncf/experimental/torch/sparsify_activations/sparsify_activations_impl.py b/nncf/experimental/torch/sparsify_activations/sparsify_activations_impl.py
new file mode 100644
index 00000000000..83a7a418911
--- /dev/null
+++ b/nncf/experimental/torch/sparsify_activations/sparsify_activations_impl.py
@@ -0,0 +1,264 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from abc import ABC
+from abc import abstractmethod
+from typing import Dict, List, Optional, Type, TypeVar
+
+import nncf
+from nncf.common import factory
+from nncf.common.factory import NNCFGraphFactory
+from nncf.common.graph.graph import NNCFGraph
+from nncf.common.graph.graph import NNCFNode
+from nncf.common.graph.operator_metatypes import OperatorMetatype
+from nncf.common.logging.track_progress import track
+from nncf.common.scopes import should_consider_scope
+from nncf.common.utils.backend import BackendType
+from nncf.common.utils.backend import get_backend
+from nncf.data import Dataset
+from nncf.experimental.torch.sparsify_activations.target_scope import TargetScope
+from nncf.experimental.torch.sparsify_activations.target_scope import get_target_node_names_from_target_scope
+from nncf.scopes import IgnoredScope
+from nncf.scopes import get_ignored_node_names_from_ignored_scope
+from nncf.torch.model_creation import is_wrapped_model
+from nncf.torch.model_creation import wrap_model
+
+TModel = TypeVar("TModel")
+
+
+class SparsifyActivationsAlgoBackend(ABC):
+ """
+ Abstract class for activation sparsification algorithm backend.
+ """
+
+ CALIBRATION_TRACKING_DESC = "Conducting Activations Sparsifier Calibration"
+
+ @staticmethod
+ def do_inference(model: TModel, dataset: Dataset):
+ """
+ Conducts model inference on given dataset to calibrate the activation sparsifiers.
+
+ :param model: The model with activation sparsifiers.
+ :param dataset: The calibration dataset to update the sparsifiers.
+ """
+ engine = factory.EngineFactory.create(model)
+ for input_data in track(
+ dataset.get_inference_data(),
+ total=dataset.get_length(),
+ description=SparsifyActivationsAlgoBackend.CALIBRATION_TRACKING_DESC,
+ ):
+ engine.infer(input_data)
+
+ @property
+ @abstractmethod
+ def supported_metatypes(self) -> List[Type[OperatorMetatype]]:
+ """
+ Property for the backend-specific metatypes for supported layers.
+ """
+
+ @abstractmethod
+ def insert_sparsifiers(
+ self,
+ model: TModel,
+ graph: NNCFGraph,
+ target_sparsity_by_node: Dict[NNCFNode, float],
+ ) -> TModel:
+ """
+ Inserts the activation sparsifiers to the model.
+
+ :param model: The model to conduct activation sparsification.
+ :param graph: The model's NNCF graph.
+ :param target_sparsity_by_node: The target sparsity level for the input activation in each given node layer.
+ :return: The model with inserted activation sparsifiers.
+ """
+
+ @abstractmethod
+ def calibrate_sparsifiers(self, model: TModel, graph: NNCFGraph, dataset: Dataset) -> TModel:
+ """
+ Calibrates the thresholds in the activation sparsifiers.
+
+ :param model: The model with inserted activation sparsifiers.
+ :param graph: The model's NNCF graph.
+ :param dataset: The calibration dataset to update the thresholds in the sparsifiers.
+ :return: The model with calibrated activation sparsifiers.
+ """
+
+
+class SparsifyActivationsAlgorithm:
+ """
+ Implementation of activation sparsification algorithm.
+ """
+
+ def __init__(
+ self,
+ target_sparsity_by_scope: Dict[TargetScope, float],
+ ignored_scope: IgnoredScope,
+ ):
+ """
+ :param target_sparsity_by_scope: A dictionary that defines the target sparsity level for specified layers.
+ :param ignored_scope: An ignored scope that defines the list of model control flow
+ graph nodes to be ignored during activation sparsification.
+ """
+ self._target_sparsity_by_scope = target_sparsity_by_scope
+ self._ignored_scope = ignored_scope
+ self._backend_entity: SparsifyActivationsAlgoBackend = None
+
+ @property
+ def available_backends(self) -> List[BackendType]:
+ """
+ Supported backends for this algorithm.
+ """
+ return [BackendType.TORCH]
+
+ def apply(
+ self,
+ model: TModel,
+ graph: NNCFGraph,
+ dataset: Dataset,
+ ) -> TModel:
+ """
+ Applies the algorithm to the given model.
+
+ :param model: The model to be sparsified.
+ :param graph: The model's NNCF graph.
+ :param dataset: The dataset to calibrate the activation sparsifiers.
+ :return: The sparsified model.
+ """
+ self._set_backend_entity(model)
+ target_sparsity_by_node = self._get_target_sparsity_by_node(graph)
+ sparse_model = self.do_sparsification(model, graph, target_sparsity_by_node, dataset)
+ return sparse_model
+
+ def do_sparsification(
+ self,
+ model: TModel,
+ graph: NNCFGraph,
+ target_sparsity_by_node: Dict[NNCFNode, float],
+ dataset: Dataset,
+ ):
+ """
+ Transforms the model into a sparsified one with node-specific target activation sparsity levels.
+
+ :param model: The model to be sparsified.
+ :param graph: The model's NNCF graph.
+ :param target_sparsity_by_node: A dictionary that defines the target sparsity level
+ for specified node layers.
+ :param dataset: The dataset to calibrate the activation sparsifiers.
+ :return: The sparsified model.
+ """
+ model = self._backend_entity.insert_sparsifiers(model, graph, target_sparsity_by_node)
+ model = self._backend_entity.calibrate_sparsifiers(model, graph, dataset)
+ return model
+
+ def _set_backend_entity(self, model: TModel) -> None:
+ """
+ Creates a helper class with a backend-specific logic of the algorithm.
+
+ :param model: Backend-specific input model.
+ """
+ model_backend = get_backend(model)
+ if model_backend == BackendType.TORCH:
+ from nncf.experimental.torch.sparsify_activations.torch_backend import PTSparsifyActivationsAlgoBackend
+
+ self._backend_entity = PTSparsifyActivationsAlgoBackend()
+ else:
+ raise nncf.UnsupportedBackendError(
+ f"{model_backend.value} backend is not supported for `sparsify_activations`."
+ )
+
+ def _get_target_sparsity_by_node(self, graph: NNCFGraph) -> Dict[NNCFNode, float]:
+ """
+ Collects nodes in the model's graph corresponding to the layers for sparsification.
+
+ :param graph: NNCFGraph instance.
+ :return: A dictionary with nodes and the corresponding target sparsity level.
+ """
+ supported_metatypes = self._backend_entity.supported_metatypes
+ ignored_names = get_ignored_node_names_from_ignored_scope(
+ self._ignored_scope, graph, strict=self._ignored_scope.validate
+ )
+ target_sparsity_by_node = {}
+ for scope, target_sparsity in self._target_sparsity_by_scope.items():
+ target_names = get_target_node_names_from_target_scope(scope, graph, strict=scope.validate)
+ for node_name in target_names:
+ node = graph.get_node_by_name(node_name)
+ if node.metatype not in supported_metatypes or not should_consider_scope(
+ node.node_name, ignored_scopes=ignored_names
+ ):
+ continue
+ if node in target_sparsity_by_node:
+ raise nncf.ValidationError(
+ f'"{node.node_name}" is matched by multiple items in `target_sparsity_by_scope`.'
+ )
+ target_sparsity_by_node[node] = target_sparsity
+ if not target_sparsity_by_node:
+ raise nncf.ValidationError("No layers to conduct activation sparsification.")
+ return target_sparsity_by_node
+
+
+def sparsify_activations(
+ model: TModel,
+ dataset: Dataset,
+ target_sparsity_by_scope: Dict[TargetScope, float],
+ ignored_scope: Optional[IgnoredScope] = None,
+) -> TModel:
+ """
+ Post-training activation sparsification on the given model.
+
+ This algorithm sparsifies the input activations in supported layers based on a calibration
+ dataset. The goal is to zero out neurons with small activation values around 0, thereby
+ roughly achieving the target sparsity at a statistical level.
+
+ Note that currently only linear layers are supported.
+
+ :param model: The model to be sparsified.
+ :param dataset: The dataset to calibrate the activation sparsifiers.
+ :param target_sparsity_by_scope: Defines the target activation sparsity level
+ for specified layers. For each item, the key is an instance of `TargetScope` class
+ representing the layers to match in the model's NNCF graph; the corresponding value
+ is a float number in the range [0, 1] representing the target sparsity level.
+
+ Example:
+ .. code-block:: python
+ {
+ # Target sparsity is 60% for node "Dummy/Linear[layer]/linear_0" in the model graph
+ TargetScope(names=["Dummy/Linear[layer]/linear_0"]): 0.6,
+ # Target sparsity is 30% for the layers whose name contains "up_proj" or "down_proj".
+ TargetScope(patterns=[".*up_proj.*", ".*down_proj.*"]): 0.3,
+ }
+
+ :param ignored_scope: Optional. It defines the nodes in the model graph that should be
+ ignored during activation sparsification. Note that unsupported layer types are already
+ filtered out internally, so there is no need to mention them in `ignored_scope`.
+ :return: The sparsified model.
+ """
+
+ for scope, target_sparsity in target_sparsity_by_scope.items():
+ if target_sparsity < 0.0 or target_sparsity > 1.0:
+ raise ValueError(f'Target sparsity for scope "{scope}" should be in range [0, 1].')
+
+ if ignored_scope is None:
+ ignored_scope = IgnoredScope()
+
+ backend = get_backend(model)
+ if backend == BackendType.TORCH and not is_wrapped_model(model):
+ example_input = next(iter(dataset.get_inference_data()))
+ model = wrap_model(
+ model,
+ example_input=example_input,
+ trace_parameters=True,
+ )
+
+ algorithm = SparsifyActivationsAlgorithm(target_sparsity_by_scope, ignored_scope)
+
+ graph = NNCFGraphFactory.create(model)
+ sparse_model = algorithm.apply(model, graph, dataset)
+ return sparse_model
diff --git a/nncf/experimental/torch/sparsify_activations/target_scope.py b/nncf/experimental/torch/sparsify_activations/target_scope.py
new file mode 100644
index 00000000000..eb09718224a
--- /dev/null
+++ b/nncf/experimental/torch/sparsify_activations/target_scope.py
@@ -0,0 +1,108 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from dataclasses import dataclass
+from typing import Set
+
+import nncf
+from nncf.common.graph.graph import NNCFGraph
+from nncf.scopes import IgnoredScope
+from nncf.scopes import get_difference_ignored_scope
+from nncf.scopes import get_matched_ignored_scope_info
+
+
+@dataclass
+class TargetScope(IgnoredScope):
+ """
+ Specifies the target portions in a model graph.
+
+ Example:
+
+ .. code-block:: python
+ # Specified by node names:
+ node_names = ['node_1', 'node_2', 'node_3']
+ target_scope = TargetScope(names=node_names)
+
+ # Specified using regular expressions:
+ patterns = ['.*node_\\d']
+ target_scope = TargetScope(patterns=patterns)
+
+ # Specified by operation types, e.g.,
+
+ # OpenVINO opset https://docs.openvino.ai/latest/openvino_docs_ops_opset.html
+ operation_types = ['Multiply', 'GroupConvolution', 'Interpolate']
+ target_scope = TargetScope(types=operation_types)
+
+ # ONNX opset https://github.com/onnx/onnx/blob/main/docs/Operators.md
+ operation_types = ['Mul', 'Conv', 'Resize']
+ target_scope = TargetScope(types=operation_types)
+
+ # Specifies by subgraphs:
+ from nncf import Subgraph
+ target_scope = TargetScope(subgraphs=[
+ Subgraph(inputs=["node_1"], outputs=["node_3"])
+ ])
+
+ **Note:** Operation types must be specified according to the model framework.
+
+ :param names: List of target node names.
+ :param patterns: List of regular expressions that define patterns for names of target nodes.
+ :param types: List of target operation types.
+ :param subgraphs: List of target subgraphs.
+ :param validate: If set to True, then a RuntimeError will be raised if any target scope does not match
+ in the model graph.
+ """
+
+ def __hash__(self) -> int:
+ return hash(
+ (
+ frozenset(self.names),
+ frozenset(self.patterns),
+ frozenset(self.types),
+ frozenset((frozenset(subgraph.inputs), frozenset(subgraph.outputs)) for subgraph in self.subgraphs),
+ self.validate,
+ )
+ )
+
+
+def get_target_node_names_from_target_scope(
+ target_scope: TargetScope, nncf_graph: NNCFGraph, strict: bool = True
+) -> Set[str]:
+ """
+ Returns NNCF node names from the graph that are matched by target scope.
+ If strict is True, raises nncf.ValidationError if no rule is matched.
+
+ :param target_scope: Target scope specifying the matching rules.
+ :param nncf_graph: The graph.
+ :param strict: Whether target_scope must match at least one node or not.
+ :return: NNCF node names from the given graph matched by target scope.
+ """
+ matched_target_scope, matches = get_matched_ignored_scope_info(target_scope, [nncf_graph])
+ if strict:
+ _check_target_scope_strictly_matched(target_scope, matched_target_scope)
+ return set().union(*matches.values())
+
+
+def _check_target_scope_strictly_matched(target_scope: TargetScope, matched_target_scope: TargetScope):
+ """
+ Passes when target_scope and matched_target_scope are equal, otherwise raises ValidationError.
+
+ :param target_scope: The given target scope.
+ :param matched_target_scope: The actual target scope matched in a graph.
+ """
+ unmatched_scope = get_difference_ignored_scope(target_scope, matched_target_scope)
+ error_messages = []
+ for match_type in ("names", "types", "patterns", "subgraphs"):
+ unmatched_rules = getattr(unmatched_scope, match_type)
+ if unmatched_rules:
+ error_messages.append(f"The following {match_type} are not found in the graph: {unmatched_rules}.")
+ if error_messages:
+ raise nncf.ValidationError("\n".join(error_messages))
diff --git a/nncf/experimental/torch/sparsify_activations/torch_backend.py b/nncf/experimental/torch/sparsify_activations/torch_backend.py
new file mode 100644
index 00000000000..a10f12c6518
--- /dev/null
+++ b/nncf/experimental/torch/sparsify_activations/torch_backend.py
@@ -0,0 +1,199 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict, List, Type, TypeVar
+
+import torch
+import torch.nn as nn
+
+import nncf
+from nncf.common.graph.graph import NNCFGraph
+from nncf.common.graph.graph import NNCFNode
+from nncf.common.graph.operator_metatypes import CONST_NOOP_METATYPES
+from nncf.common.graph.operator_metatypes import OperatorMetatype
+from nncf.common.graph.transformations.commands import TargetType
+from nncf.data import Dataset
+from nncf.experimental.torch.sparsify_activations.sparsify_activations_impl import SparsifyActivationsAlgoBackend
+from nncf.tensor.functions.torch_numeric import quantile
+from nncf.torch.graph import operator_metatypes as om
+from nncf.torch.graph.transformations.commands import PTSharedFnInsertionCommand
+from nncf.torch.graph.transformations.commands import PTTargetPoint
+from nncf.torch.graph.transformations.layout import PTTransformationLayout
+from nncf.torch.model_transformer import PTModelTransformer
+from nncf.torch.nncf_network import NNCFNetwork
+from nncf.torch.utils import training_mode_switcher
+
+ACTIVATIONS_SPARSIFIER_PREFIX = "activations_sparsifier"
+TModel = TypeVar("TModel")
+
+
+class ActivationsSparsifier(nn.Module):
+ """
+ Sparsifies input activations by masking out values around zero.
+ """
+
+ def __init__(self, target_sparsity: float, alpha: float = 0.2):
+ """
+ :param target_sparsity: The target activation sparsity level.
+ :param alpha: The exponential moving average decay factor in range (0, 1) for calibrating
+ the threshold. A larger alpha will give more weight to the most recent batches.
+ """
+ super().__init__()
+ self.target_sparsity = target_sparsity
+ if alpha <= 0.0 or alpha >= 1.0:
+ raise ValueError("The decay factor `alpha` should be in range (0, 1).")
+ self.alpha = alpha
+ self.register_buffer("running_threshold", torch.tensor(float("-inf")))
+ self.register_buffer("num_batches_tracked", torch.tensor(0))
+ self.running_threshold: torch.Tensor
+ self.num_batches_tracked: torch.Tensor
+ self._freeze = True
+
+ @staticmethod
+ def calculate_threshold(x: torch.Tensor, target_sparsity: float) -> torch.Tensor:
+ """
+ Calculates the threshold to sparsify the input tensor with target sparsity if locations of
+ `x.abs() <= threshold` are zeroed out.
+
+ :param x: The input tensor.
+ :param target_sparsity: The target sparsity level on the input tensor.
+ :return: The threshold value.
+ """
+ return quantile(x.detach().abs().view(-1), q=target_sparsity, axis=0)
+
+ @property
+ def freeze(self):
+ return self._freeze
+
+ @freeze.setter
+ def freeze(self, value: bool):
+ self._freeze = value
+
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
+ if not self.freeze:
+ threshold = self.calculate_threshold(x, self.target_sparsity)
+ self._update(threshold, dtype=x.dtype)
+ mask = torch.le(x.abs(), self.running_threshold)
+ x = torch.masked_fill(x, mask, 0.0)
+ return x
+
+ def reset_running_stats(self):
+ """
+ Resets the running threshold and the number of tracked batches to the initial stage.
+ """
+ self.running_threshold.fill_(float("-inf"))
+ self.num_batches_tracked.zero_()
+
+ def extra_repr(self) -> str:
+ return f"target_sparsity={self.target_sparsity}"
+
+ def _update(self, threshold: torch.Tensor, dtype: torch.dtype) -> torch.Tensor:
+ """
+ Updates the running threshold by exponential moving average with decaying adjustment.
+ The updating logic is similar to `pandas.DataFrame.ewm(adjust=True)`.
+
+ :param threshold: The threshold value derived from this batch to update the running threshold.
+ :param dtype: Data type of the updated running threshold.
+ :return: The updated running threshold.
+ """
+ if self.num_batches_tracked == 0:
+ running_threshold = threshold
+ else:
+ beta = 1.0 - self.alpha
+ old_running_threshold = self.running_threshold.to(device=threshold.device, dtype=torch.float64)
+ running_threshold = (
+ threshold.to(torch.float64) * self.alpha
+ + old_running_threshold * beta * (1 - beta**self.num_batches_tracked)
+ ) / (1 - beta ** (self.num_batches_tracked + 1))
+ self.running_threshold = running_threshold.type(dtype)
+ self.num_batches_tracked += 1
+ return self.running_threshold
+
+
+class PTSparsifyActivationsAlgoBackend(SparsifyActivationsAlgoBackend):
+ """
+ Torch backend for the activation sparsification algorithm.
+ """
+
+ SUPPORTED_METATYPES = [om.PTLinearMetatype]
+
+ @staticmethod
+ def get_sparsifiers(model: NNCFNetwork) -> List[ActivationsSparsifier]:
+ """
+ Finds all the activation sparsifiers in the model.
+
+ :param model: The model with activation sparsifiers.
+ :return: List of activation sparsifiers.
+ """
+ return [m for m in model.nncf.modules() if isinstance(m, ActivationsSparsifier)]
+
+ @property
+ def supported_metatypes(self) -> List[Type[OperatorMetatype]]:
+ return PTSparsifyActivationsAlgoBackend.SUPPORTED_METATYPES
+
+ def insert_sparsifiers(
+ self,
+ model: NNCFNetwork,
+ graph: NNCFGraph,
+ target_sparsity_by_node: Dict[NNCFNode, float],
+ ) -> NNCFNetwork:
+ transformation_layout = PTTransformationLayout()
+ for node, target_sparsity in target_sparsity_by_node.items():
+ activation_port_id = self._get_activation_port_id(node, graph)
+ sparsifier = ActivationsSparsifier(target_sparsity=target_sparsity)
+ sparsifier_name = f"{ACTIVATIONS_SPARSIFIER_PREFIX}_{node.node_name.replace('.', '_')}"
+ transformation_layout.register(
+ PTSharedFnInsertionCommand(
+ [
+ PTTargetPoint(
+ target_type=TargetType.PRE_LAYER_OPERATION,
+ target_node_name=node.node_name,
+ input_port_id=activation_port_id,
+ )
+ ],
+ sparsifier,
+ sparsifier_name,
+ )
+ )
+
+ transformed_model = PTModelTransformer(model).transform(transformation_layout)
+ return transformed_model
+
+ def calibrate_sparsifiers(self, model: NNCFNetwork, graph: NNCFGraph, dataset: Dataset) -> NNCFNetwork:
+ sparsifiers = self.get_sparsifiers(model)
+ for sparsifier in sparsifiers:
+ sparsifier.reset_running_stats()
+ sparsifier.freeze = False
+ with training_mode_switcher(model, is_training=False):
+ with torch.no_grad():
+ self.do_inference(model, dataset)
+ for sparsifier in sparsifiers:
+ sparsifier.freeze = True
+ return model
+
+ @staticmethod
+ def _get_activation_port_id(node: NNCFNode, graph: NNCFGraph) -> int:
+ """
+ Finds the input activation port id for the node.
+
+ :param node: The node to find its activation port id.
+ :param graph: The NNCF graph containing the node.
+ :return: The activation port id.
+ """
+ activation_ports = []
+ for prev_node in graph.get_previous_nodes(node):
+ edge = graph.get_edge(prev_node, node)
+ if prev_node.metatype in CONST_NOOP_METATYPES or edge.input_port_id in node.metatype.weight_port_ids:
+ continue
+ activation_ports.append(edge.input_port_id)
+ if len(activation_ports) != 1:
+ raise nncf.InternalError(f'Cannot find activation port for node "{node}".')
+ return activation_ports[0]
diff --git a/nncf/onnx/graph/node_utils.py b/nncf/onnx/graph/node_utils.py
index ccb2e38b8ca..d3778b3f7d3 100644
--- a/nncf/onnx/graph/node_utils.py
+++ b/nncf/onnx/graph/node_utils.py
@@ -172,9 +172,13 @@ def _get_activation_tensor_shape(
:return: None, if there is no shape info, otherwise - tensor shape.
"""
if target_point.type == TargetType.PRE_LAYER_OPERATION:
- shape = nncf_graph.get_input_edges(node)[target_point.port_id].tensor_shape
+ edge = nncf_graph.get_input_edge_by_port_id(node, target_point.port_id)
+ shape = edge.tensor_shape
elif target_point.type == TargetType.POST_LAYER_OPERATION:
- shape = nncf_graph.get_output_edges(node)[target_point.port_id].tensor_shape
+ # NOTE: Assumes that all output edges for the `node` with `output_port_id`
+ # equal to `target_point.port_id` should have the same `tensor_shape` value.
+ edges = nncf_graph.get_output_edges_by_port_id(node, target_point.port_id)
+ shape = edges[0].tensor_shape
else:
raise NotImplementedError(f"Unsupported target point type {target_point.type}.")
if not shape: # ONNX model can not have a shape of a edge, even after shape inference.
diff --git a/nncf/openvino/graph/metatypes/groups.py b/nncf/openvino/graph/metatypes/groups.py
index c19d2bae83c..799b6ce92bd 100644
--- a/nncf/openvino/graph/metatypes/groups.py
+++ b/nncf/openvino/graph/metatypes/groups.py
@@ -38,6 +38,7 @@
ov_metatypes.OVSpaceToDepthMetatype,
ov_metatypes.OVBatchToSpaceMetatype,
ov_metatypes.OVSpaceToBatchMetatype,
+ # ov_metatypes.OVSliceMetatype removed from the agnostic list cause of 149909 ticket.
# OVReluMetatype is not considered to be QUANTIZATION_AGNOSTIC, because:
# 1. Runtime doesn't provide performance benefits by quantizing the stand-alone RELU's (ticket: 59548)
# 2. It's frequently better for the end accuracy to have quantizers set up after the RELU
diff --git a/nncf/openvino/graph/metatypes/openvino_metatypes.py b/nncf/openvino/graph/metatypes/openvino_metatypes.py
index 424ef81b914..87a2677c0d7 100644
--- a/nncf/openvino/graph/metatypes/openvino_metatypes.py
+++ b/nncf/openvino/graph/metatypes/openvino_metatypes.py
@@ -565,6 +565,13 @@ class OVStridedSliceMetatype(OVOpMetatype):
hw_config_names = [HWConfigOpName.STRIDEDSLICE]
+@OV_OPERATOR_METATYPES.register()
+class OVSliceMetatype(OVOpMetatype):
+ name = "SliceOp"
+ op_names = ["Slice"]
+ hw_config_names = [HWConfigOpName.SLICE]
+
+
@OV_OPERATOR_METATYPES.register()
class OVExpMetatype(OVOpMetatype):
name = "ExpOp"
diff --git a/nncf/openvino/graph/model_transformer.py b/nncf/openvino/graph/model_transformer.py
index a080dec1118..85aeb90585c 100644
--- a/nncf/openvino/graph/model_transformer.py
+++ b/nncf/openvino/graph/model_transformer.py
@@ -592,10 +592,11 @@ def _apply_model_extraction_transformation(
output_node = name_to_node_mapping[output_name]
result_name = get_result_node_name(output_name, output_port_id)
- if output_node.get_element_type() != outputs_type:
- output_node = opset.convert(output_node, destination_type=outputs_type)
- new_result = opset.result(output_node, name=result_name)
- result_tensor_names = [result_name] + list(output_node.output(0).get_names())
+ output_port = output_node.output(output_port_id)
+ if output_port.get_element_type() != outputs_type:
+ output_port = opset.convert(output_node, destination_type=outputs_type).output(0)
+ new_result = opset.result(output_port, name=result_name)
+ result_tensor_names = [result_name] + list(output_port.get_names())
OVModelTransformer._update_tensor_names([new_result.get_output_tensor(0)], result_tensor_names)
results.append(new_result)
diff --git a/nncf/openvino/graph/node_utils.py b/nncf/openvino/graph/node_utils.py
index 619c4fa27a6..e39c4e49467 100644
--- a/nncf/openvino/graph/node_utils.py
+++ b/nncf/openvino/graph/node_utils.py
@@ -167,10 +167,10 @@ def get_node_with_bias_value(add_node: NNCFNode, nncf_graph: NNCFGraph) -> Optio
const_port_ids = add_node.layer_attributes.get_const_port_ids()
assert len(const_port_ids) == 1
bias_port_id = const_port_ids[0]
- bias_constant = nncf_graph.get_input_edges(add_node)[bias_port_id].from_node
+ bias_constant = nncf_graph.get_input_edge_by_port_id(add_node, bias_port_id).from_node
if bias_constant.metatype == OVConvertMetatype:
- bias_constant = nncf_graph.get_input_edges(bias_constant)[0].from_node
+ bias_constant = nncf_graph.get_input_edge_by_port_id(bias_constant, 0).from_node
return bias_constant if bias_constant.metatype == OVConstantMetatype else None
diff --git a/nncf/openvino/hardware/fused_patterns.py b/nncf/openvino/hardware/fused_patterns.py
index 12d6052880f..901e0ee7f75 100644
--- a/nncf/openvino/hardware/fused_patterns.py
+++ b/nncf/openvino/hardware/fused_patterns.py
@@ -498,6 +498,14 @@ def create_arithmetic_activations() -> GraphPattern:
return arithmetic
+@OPENVINO_HW_FUSED_PATTERNS.register(HWFusedPatternNames.ARITHMETIC_ACTIVATIONS_ARITHMETIC)
+def create_arithmetic_activations_arithmetic() -> GraphPattern:
+ arithmetic_activations = create_arithmetic_activations()
+ arithmetic = arithmetic_operations()
+ arithmetic_activations.join_patterns(arithmetic)
+ return arithmetic_activations
+
+
@OPENVINO_HW_FUSED_PATTERNS.register(HWFusedPatternNames.BATCH_NORM_ACTIVATIONS)
def create_batch_norm_activations() -> GraphPattern:
batch_norm = batch_normalization_operations()
@@ -658,6 +666,32 @@ def create_linear_biased_activation_scale_shift() -> GraphPattern:
return linear_biased
+@OPENVINO_HW_FUSED_PATTERNS.register(HWFusedPatternNames.LINEAR_BATCH_TO_SPACE_SCALE_SHIFT_ACTIVATIONS)
+def create_linear_batch_to_space_scale_shift_activations() -> GraphPattern:
+ linear = linear_operations()
+ batch_to_space = batch_to_space_operation()
+ scale_shift = create_scale_shift()
+ activations = atomic_activations_operations()
+
+ linear.join_patterns(batch_to_space)
+ linear.join_patterns(scale_shift)
+ linear.join_patterns(activations)
+ return linear
+
+
+@OPENVINO_HW_FUSED_PATTERNS.register(HWFusedPatternNames.LINEAR_BATCH_TO_SPACE_ARITHMETIC_ACTIVATIONS)
+def create_linear_batch_to_space_arithmetic_activations() -> GraphPattern:
+ linear = linear_operations()
+ batch_to_space = batch_to_space_operation()
+ arithmetic = arithmetic_operations()
+ activations = atomic_activations_operations()
+
+ linear.join_patterns(batch_to_space)
+ linear.join_patterns(arithmetic)
+ linear.join_patterns(activations)
+ return linear
+
+
@OPENVINO_HW_FUSED_PATTERNS.register(HWFusedPatternNames.LINEAR_ELEMENTWISE)
def create_linear_elementwise() -> GraphPattern:
linear = linear_operations()
@@ -740,6 +774,14 @@ def unsqueeze_operation() -> GraphPattern:
return pattern
+def batch_to_space_operation() -> GraphPattern:
+ pattern = GraphPattern()
+ pattern.add_node(
+ **{GraphPattern.LABEL_ATTR: "BATCH_TO_SPACE", GraphPattern.METATYPE_ATTR: om.OVBatchToSpaceMetatype}
+ )
+ return pattern
+
+
def create_input_convert_transpose() -> GraphPattern:
pattern = GraphPattern()
model_input = pattern.add_node(
diff --git a/nncf/openvino/quantization/quantize_model.py b/nncf/openvino/quantization/quantize_model.py
index d2db3eaf947..dbd8b7adf77 100644
--- a/nncf/openvino/quantization/quantize_model.py
+++ b/nncf/openvino/quantization/quantize_model.py
@@ -437,6 +437,7 @@ def compress_weights_impl(
subset_size: int,
scale_estimation: bool,
gptq: bool,
+ lora_correction: bool,
advanced_parameters: Optional[AdvancedCompressionParameters] = None,
) -> ov.Model:
"""
@@ -455,6 +456,7 @@ def compress_weights_impl(
subset_size,
scale_estimation,
gptq,
+ lora_correction,
advanced_parameters,
)
graph = NNCFGraphFactory.create(model)
diff --git a/nncf/quantization/advanced_parameters.py b/nncf/quantization/advanced_parameters.py
index e5e5f94229a..6702ae8bae2 100644
--- a/nncf/quantization/advanced_parameters.py
+++ b/nncf/quantization/advanced_parameters.py
@@ -288,9 +288,9 @@ class AdvancedScaleEstimationParameters:
:type weight_penalty: float
"""
- subset_size: int = 32
+ subset_size: int = 64
initial_steps: int = 5
- scale_steps: int = 10
+ scale_steps: int = 5
weight_penalty: float = -1.0
@@ -314,6 +314,33 @@ class AdvancedGPTQParameters:
subset_size: int = 128
+@api()
+@dataclass
+class AdvancedLoraCorrectionParameters:
+ """
+ Contains advanced parameters for lora correction algorithm.
+
+ :param adapter_rank: rank of lora adapters. Defaults to 16.
+ :type adapter_rank: int
+ :param num_iterations: number of correction iterations. Defaults to 3.
+ :type num_iterations: int
+ :param apply_regularization: Whether to add a regularization during the correction process. Defaults to True.
+ Helpful for big rank values to avoid overfitting.
+ :type apply_regularization: bool
+ :param subset_size: Number of data samples for lora correction algorithm. Defaults to 128.
+ :type subset_size: int
+ :param use_int8_adapters: Whether to 8-bit quantize lora adapters, otherwise they kept in the original weights
+ precision. Defaults to True.
+ :type use_int8_adapters: bool
+ """
+
+ adapter_rank: int = 8
+ num_iterations: int = 3
+ apply_regularization: bool = True
+ subset_size: int = 128
+ use_int8_adapters: bool = True
+
+
@api()
@dataclass
class AdvancedCompressionParameters:
@@ -337,6 +364,9 @@ class AdvancedCompressionParameters:
# Advanced GPTQ algorithm parameters
gptq_params: AdvancedGPTQParameters = field(default_factory=AdvancedGPTQParameters)
+ # Advanced Lora Correction algorithm parameters
+ lora_correction_params: AdvancedLoraCorrectionParameters = field(default_factory=AdvancedLoraCorrectionParameters)
+
@api()
@dataclass
diff --git a/nncf/quantization/algorithms/accuracy_control/ranker.py b/nncf/quantization/algorithms/accuracy_control/ranker.py
index 3332f527cd8..8d90223c1b2 100644
--- a/nncf/quantization/algorithms/accuracy_control/ranker.py
+++ b/nncf/quantization/algorithms/accuracy_control/ranker.py
@@ -30,7 +30,7 @@
from nncf.quantization.algorithms.accuracy_control.evaluator import Evaluator
from nncf.quantization.algorithms.accuracy_control.rank_functions import create_normalized_mse_func
from nncf.quantization.algorithms.accuracy_control.subset_selection import select_subset
-from nncf.quantization.passes import remove_shapeof_subgraphs
+from nncf.quantization.passes import find_shapeof_subgraphs
TModel = TypeVar("TModel")
TPModel = TypeVar("TPModel")
@@ -109,11 +109,13 @@ def find_groups_of_quantizers_to_rank(self, quantized_model_graph: NNCFGraph) ->
*self._algo_backend.get_start_nodes_for_activation_path_tracing(quantized_model_graph),
]
- quantized_model_graph_without_shapeof = remove_shapeof_subgraphs(
- deepcopy(quantized_model_graph),
+ shapeof_subgraphs = find_shapeof_subgraphs(
+ quantized_model_graph,
self._algo_backend.get_shapeof_metatypes(),
input_nodes,
)
+ quantized_model_graph_without_shapeof = deepcopy(quantized_model_graph)
+ quantized_model_graph_without_shapeof.remove_nodes_from(shapeof_subgraphs)
for quantizer_node in reversed(quantizers):
if processed.get(quantizer_node.node_name, False):
diff --git a/nncf/quantization/algorithms/bias_correction/openvino_backend.py b/nncf/quantization/algorithms/bias_correction/openvino_backend.py
index 5e629addd52..cbcdd662c82 100644
--- a/nncf/quantization/algorithms/bias_correction/openvino_backend.py
+++ b/nncf/quantization/algorithms/bias_correction/openvino_backend.py
@@ -100,7 +100,7 @@ def is_quantized_weights(node: NNCFNode, nncf_graph: NNCFGraph) -> bool:
return False
const_port_ids = node.layer_attributes.get_const_port_ids()
assert len(const_port_ids) == 1
- weight_node = nncf_graph.get_input_edges(node)[const_port_ids[0]].from_node
+ weight_node = nncf_graph.get_input_edge_by_port_id(node, const_port_ids[0]).from_node
return weight_node.metatype in FAKE_QUANTIZE_OPERATIONS
@staticmethod
diff --git a/nncf/quantization/algorithms/fast_bias_correction/algorithm.py b/nncf/quantization/algorithms/fast_bias_correction/algorithm.py
index ff7836035c9..3d104cad3c9 100644
--- a/nncf/quantization/algorithms/fast_bias_correction/algorithm.py
+++ b/nncf/quantization/algorithms/fast_bias_correction/algorithm.py
@@ -93,7 +93,7 @@ def __init__(
@property
def available_backends(self) -> List[BackendType]:
- return [BackendType.ONNX, BackendType.OPENVINO, BackendType.TORCH]
+ return [BackendType.ONNX, BackendType.OPENVINO, BackendType.TORCH, BackendType.TORCH_FX]
def _set_backend_entity(self, model: TModel) -> None:
"""
@@ -116,6 +116,12 @@ def _set_backend_entity(self, model: TModel) -> None:
from nncf.quantization.algorithms.fast_bias_correction.torch_backend import PTFastBiasCorrectionAlgoBackend
self._backend_entity = PTFastBiasCorrectionAlgoBackend()
+ elif model_backend == BackendType.TORCH_FX:
+ from nncf.quantization.algorithms.fast_bias_correction.torch_fx_backend import (
+ FXFastBiasCorrectionAlgoBackend,
+ )
+
+ self._backend_entity = FXFastBiasCorrectionAlgoBackend()
else:
raise nncf.UnsupportedBackendError(
"Cannot return backend-specific entity because {} is not supported!".format(model_backend.value)
diff --git a/nncf/quantization/algorithms/fast_bias_correction/openvino_backend.py b/nncf/quantization/algorithms/fast_bias_correction/openvino_backend.py
index 8a45d72d528..1f92559eeb8 100644
--- a/nncf/quantization/algorithms/fast_bias_correction/openvino_backend.py
+++ b/nncf/quantization/algorithms/fast_bias_correction/openvino_backend.py
@@ -95,7 +95,7 @@ def is_quantized_weights(node: NNCFNode, nncf_graph: NNCFGraph) -> bool:
return False
const_port_ids = node.layer_attributes.get_const_port_ids()
assert len(const_port_ids) == 1
- weight_node = nncf_graph.get_input_edges(node)[const_port_ids[0]].from_node
+ weight_node = nncf_graph.get_input_edge_by_port_id(node, const_port_ids[0]).from_node
return weight_node.metatype in FAKE_QUANTIZE_OPERATIONS
@staticmethod
diff --git a/nncf/quantization/algorithms/fast_bias_correction/torch_fx_backend.py b/nncf/quantization/algorithms/fast_bias_correction/torch_fx_backend.py
new file mode 100644
index 00000000000..883e72283ed
--- /dev/null
+++ b/nncf/quantization/algorithms/fast_bias_correction/torch_fx_backend.py
@@ -0,0 +1,119 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict, List, Optional, Tuple
+
+import numpy as np
+import torch
+import torch.fx
+
+import nncf.torch.graph.operator_metatypes as om
+from nncf.common.graph import NNCFGraph
+from nncf.common.graph import NNCFNode
+from nncf.common.graph.definitions import NNCFGraphNodeType
+from nncf.common.graph.transformations.commands import TargetType
+from nncf.experimental.common.tensor_statistics.collectors import TensorCollector
+from nncf.experimental.torch.fx.commands import FXApplyTransformationCommand
+from nncf.experimental.torch.fx.node_utils import get_graph_node_by_name
+from nncf.experimental.torch.fx.node_utils import get_tensor_constant_from_node
+from nncf.experimental.torch.fx.transformations import bias_update_transformation_builder
+from nncf.quantization.algorithms.fast_bias_correction.backend import FastBiasCorrectionAlgoBackend
+from nncf.tensor import Tensor
+from nncf.torch.graph.transformations.commands import PTModelExtractionCommand
+from nncf.torch.graph.transformations.commands import PTTargetPoint
+from nncf.torch.nncf_network import NNCFNetwork
+from nncf.torch.tensor_statistics.collectors import get_mean_statistic_collector
+
+
+class FXFastBiasCorrectionAlgoBackend(FastBiasCorrectionAlgoBackend):
+ TARGET_TYPE_TO_PT_INS_TYPE_MAP = {
+ TargetType.PRE_LAYER_OPERATION: TargetType.OPERATOR_PRE_HOOK,
+ TargetType.POST_LAYER_OPERATION: TargetType.OPERATOR_POST_HOOK,
+ }
+
+ @staticmethod
+ def target_point(target_type: TargetType, target_node_name: str, port_id: int) -> PTTargetPoint:
+ if NNCFGraphNodeType.INPUT_NODE in target_node_name or target_type == TargetType.POST_LAYER_OPERATION:
+ port_id = None
+ if target_type in FXFastBiasCorrectionAlgoBackend.TARGET_TYPE_TO_PT_INS_TYPE_MAP:
+ target_type = FXFastBiasCorrectionAlgoBackend.TARGET_TYPE_TO_PT_INS_TYPE_MAP[target_type]
+ return PTTargetPoint(target_type, target_node_name, input_port_id=port_id)
+
+ @staticmethod
+ def create_bias_correction_command(
+ node: NNCFNode, bias_value: Tensor, nncf_graph: NNCFGraph
+ ) -> FXApplyTransformationCommand:
+ return FXApplyTransformationCommand(bias_update_transformation_builder(node, bias_value.data))
+
+ @staticmethod
+ def model_extraction_command(
+ input_ids: List[Tuple[str, int]], output_ids: List[Tuple[str, int]]
+ ) -> PTModelExtractionCommand:
+ return PTModelExtractionCommand([input_ids[0][0]], [output_ids[0][0]])
+
+ @staticmethod
+ def mean_statistic_collector(
+ channel_axis: int,
+ inplace: bool,
+ num_samples: Optional[int] = None,
+ window_size: Optional[int] = None,
+ ) -> TensorCollector:
+ return get_mean_statistic_collector(num_samples, channel_axis, window_size)
+
+ @staticmethod
+ def get_sub_input_output_names(subgraph: NNCFNetwork) -> Tuple[str, str]:
+ # Pytorch does not have name for extracted node
+ return None, None
+
+ @staticmethod
+ def create_input_data(shape: Tuple[int], data: List[Tensor], input_name: str, channel_axis: int) -> torch.Tensor:
+ blob = torch.zeros(shape, dtype=data[0].data.dtype, device=data[0].data.device)
+ for j, idx in enumerate(np.ndindex(blob.shape[channel_axis])):
+ index = tuple(slice(None) if i != channel_axis else idx for i in range(blob.ndim))
+ blob[index] = data[j].data
+ return blob
+
+ @staticmethod
+ def get_bias_value(node: NNCFNode, nncf_graph: NNCFGraph, model: torch.fx.GraphModule) -> Tensor:
+ bias_node = nncf_graph.get_next_nodes(node)[0]
+ # TODO(dlyakhov): make a node_name_vs_node map to speed up the process
+ graph_bias_node = get_graph_node_by_name(model.graph, bias_node.node_name)
+ return Tensor(get_tensor_constant_from_node(graph_bias_node.all_input_nodes[1], model))
+
+ @staticmethod
+ def get_activation_port_ids_for_bias_node(node: NNCFNode) -> Tuple[int, int]:
+ return 0, 0
+
+ @staticmethod
+ def process_model_output(raw_data: Dict, output_name: str) -> Tensor:
+ return Tensor(raw_data)
+
+ @staticmethod
+ def is_quantized_weights(node: NNCFNode, nncf_graph: NNCFGraph) -> bool:
+ weight_node = nncf_graph.get_previous_nodes(node)[1]
+ return "dequantize" in weight_node.node_type
+
+ @staticmethod
+ def is_node_with_bias(node: NNCFNode, nncf_graph: NNCFGraph) -> bool:
+ # Assumes that all biases were unfused
+ if node.metatype in (om.PTConv1dMetatype, om.PTConv2dMetatype, om.PTConv3dMetatype, om.PTLinearMetatype):
+ next_nodes = nncf_graph.get_next_nodes(node)
+ if len(next_nodes) != 1:
+ return False
+ return next_nodes[0].metatype in (om.PTAddMetatype,)
+
+ @staticmethod
+ def get_node_names_for_input_output_statistics(node: NNCFNode, nncf_graph: NNCFGraph) -> Tuple[str, str]:
+ return node.node_name, node.node_name
+
+ @staticmethod
+ def get_activation_channel_axis(node: NNCFNode, pord_id: int, input_shape: Tuple[int]) -> int:
+ return node.metatype.output_channel_axis
diff --git a/nncf/quantization/algorithms/layerwise/scheduler.py b/nncf/quantization/algorithms/layerwise/scheduler.py
index d2d1461dd38..8abc03400c0 100644
--- a/nncf/quantization/algorithms/layerwise/scheduler.py
+++ b/nncf/quantization/algorithms/layerwise/scheduler.py
@@ -9,6 +9,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+from collections import OrderedDict
from copy import deepcopy
from dataclasses import dataclass
from dataclasses import field
@@ -101,7 +102,7 @@ def schedule(
"""
# Initialize input nodes and create a copy of the graph for inference
input_nodes = graph.get_input_nodes()
- inference_graph = transform_to_inference_graph(deepcopy(graph), input_nodes, [], [])
+ inference_graph = transform_to_inference_graph(deepcopy(graph), input_nodes, [], [], [])
steps = []
visited_map = {node: False for node in inference_graph.get_all_nodes()}
@@ -177,26 +178,31 @@ def schedule(
old_input_nodes = set()
new_input_nodes = set()
for p in paths:
- target_output_nodes = set()
+ target_outputs = []
additional_output_nodes = set()
for output_node in p.output_nodes:
- if output_node in target_nodes:
- target_output_nodes.add(output_node)
- elif output_node in p.input_nodes:
- reuse_input_nodes.add(output_node)
- else:
- # filter additional output nodes
- for prev_node in inference_graph.get_previous_nodes(output_node):
- if prev_node not in p.output_nodes:
- additional_output_nodes.add(output_node)
- break
- if not target_output_nodes:
+ try:
+ target_node_index = target_nodes.index(output_node)
+ target_outputs.append((target_node_index, output_node))
+ except ValueError:
+ if output_node in p.input_nodes:
+ reuse_input_nodes.add(output_node)
+ else:
+ # filter additional output nodes
+ for prev_node in inference_graph.get_previous_nodes(output_node):
+ if prev_node not in p.output_nodes:
+ additional_output_nodes.add(output_node)
+ break
+ if not target_outputs:
continue
+ target_outputs.sort(key=lambda target_output: target_output[0])
+ target_output_nodes = [output[1] for output in target_outputs]
+
old_input_nodes |= p.input_nodes
- new_input_nodes |= target_output_nodes | additional_output_nodes
+ new_input_nodes |= set(target_output_nodes) | additional_output_nodes
subgraph_inputs = list(p.inputs)
- step_target_nodes = {}
+ step_target_nodes = OrderedDict()
subgraph_outputs = []
for node in target_output_nodes:
target_edge = {}
diff --git a/nncf/quantization/algorithms/min_max/algorithm.py b/nncf/quantization/algorithms/min_max/algorithm.py
index 3320224d242..6306f6736c2 100644
--- a/nncf/quantization/algorithms/min_max/algorithm.py
+++ b/nncf/quantization/algorithms/min_max/algorithm.py
@@ -328,7 +328,7 @@ def _init_cache(self) -> None:
@property
def available_backends(self) -> List[BackendType]:
- return [BackendType.ONNX, BackendType.OPENVINO, BackendType.TORCH]
+ return [BackendType.ONNX, BackendType.OPENVINO, BackendType.TORCH, BackendType.TORCH_FX]
def _get_quantizer_constraints(
self,
@@ -381,6 +381,10 @@ def _set_backend_entity(self, model: TModel) -> None:
from nncf.quantization.algorithms.min_max.openvino_backend import OVMinMaxAlgoBackend
self._backend_entity = OVMinMaxAlgoBackend()
+ elif model_backend == BackendType.TORCH_FX:
+ from nncf.quantization.algorithms.min_max.torch_fx_backend import FXMinMaxAlgoBackend
+
+ self._backend_entity = FXMinMaxAlgoBackend()
elif model_backend == BackendType.TORCH:
from nncf.quantization.algorithms.min_max.torch_backend import PTMinMaxAlgoBackend
@@ -504,57 +508,44 @@ def _get_ignored_names(
user_ignored_names = get_ignored_node_names_from_ignored_scope(
self._ignored_scope, nncf_graph, strict=self._ignored_scope.validate
)
-
- ignored_scope = self._get_ignored_scope(inference_nncf_graph, ignored_patterns)
- autogenerated_ignored_names = get_ignored_node_names_from_ignored_scope(ignored_scope, nncf_graph, strict=False)
-
- ignored_names = {name: IgnoreReason.AUTOGENERATED for name in autogenerated_ignored_names}
-
- ignored_names_by_layer_attributes = self._backend_entity.get_ignored_names_by_layer_attributes(
- inference_nncf_graph
- )
-
- ignored_scope_by_algorithm = self._get_ignored_scope_by_algorithm(inference_nncf_graph)
- ignored_names_by_algorithm = get_ignored_node_names_from_ignored_scope(
- ignored_scope_by_algorithm, nncf_graph, strict=False
+ autogenerated_ignored_names = self._get_ignored_names_by_ignored_patterns(
+ inference_nncf_graph, ignored_patterns
)
-
- ignored_names.update({name: IgnoreReason.AUTOGENERATED for name in ignored_names_by_layer_attributes})
-
- ignored_names.update({name: IgnoreReason.AUTOGENERATED for name in ignored_names_by_algorithm})
-
+ autogenerated_ignored_names |= self._backend_entity.get_ignored_names_by_layer_attributes(inference_nncf_graph)
+ autogenerated_ignored_names |= self._get_ignored_names_by_algorithm(inference_nncf_graph)
+ ignored_names = {name: IgnoreReason.AUTOGENERATED for name in autogenerated_ignored_names}
# User ignored scope has higher priority
ignored_names.update({name: IgnoreReason.USER_REQUESTED for name in user_ignored_names})
-
return ignored_names
- def _get_ignored_scope(self, inference_nncf_graph: NNCFGraph, ignored_patterns: GraphPattern) -> IgnoredScope:
+ def _get_ignored_names_by_ignored_patterns(
+ self, inference_nncf_graph: NNCFGraph, ignored_patterns: GraphPattern
+ ) -> Set[str]:
"""
- Returns IgnoredScope with node names matched ignored_patterns.
+ Returns node names matched ignored_patterns.
:param nncf_graph: Inference graph without constant flows.
:param ignored_patterns: Ignored patterns.
:return: IgnoredScope with all node names matched ignored_patterns.
"""
- nncf_node_names = []
+ nncf_node_names = set()
for subgraph in inference_nncf_graph.find_matching_subgraphs(ignored_patterns, strict=False):
for nncf_node in subgraph:
- nncf_node_names.append(nncf_node.node_name)
+ nncf_node_names.add(nncf_node.node_name)
+ return nncf_node_names
- return IgnoredScope(names=nncf_node_names)
-
- def _get_ignored_scope_by_algorithm(self, inference_nncf_graph: NNCFGraph) -> IgnoredScope:
+ def _get_ignored_names_by_algorithm(self, inference_nncf_graph: NNCFGraph) -> Set[str]:
"""
- Returns IgnoredScope with node ignored_algorithms matched `quantization`.
+ Returns node names for ignored_algorithms matched `quantization`.
:param inference_nncf_graph: Inference NNCFGraph instance.
:return: IgnoredScope with corresponded nodes.
"""
- nncf_node_names = []
+ nncf_node_names = set()
for nncf_node in inference_nncf_graph.get_all_nodes():
if "ptq_quantization" in nncf_node.ignored_algorithms:
- nncf_node_names.append(nncf_node.node_name)
- return IgnoredScope(names=nncf_node_names)
+ nncf_node_names.add(nncf_node.node_name)
+ return nncf_node_names
def _get_scope_overrides(self, inference_nncf_graph: NNCFGraph) -> Dict:
"""
@@ -646,21 +637,24 @@ def _add_weight_quantization_target_point(
Adds weight quantization target point to the set of existing points.
:param quantization_point: SingleConfigQuantizationPoint for the needed layer.
- :param model: Model in the original framework.
:param nncf_graph: The built NNCFGraph of the model.
"""
weight_quantization_target_points = self._get_weight_quantization_target_points(quantization_point, nncf_graph)
for weight_quantization_target_point in weight_quantization_target_points:
self._quantization_target_points_to_qconfig[weight_quantization_target_point] = quantization_point.qconfig
- def _add_activation_quantization_target_point(self, quantization_point: SingleConfigQuantizationPoint) -> None:
+ def _add_activation_quantization_target_point(
+ self, quantization_point: SingleConfigQuantizationPoint, nncf_graph: NNCFGraph
+ ) -> None:
"""
Adds activation quantization target point to the set of existing points.
- :param nncf_graph: NNCFGraph instance for working with the graph and nodes.
:param quantization_point: SingleConfigQuantizationPoint for the needed layer.
+ :param nncf_graph: NNCFGraph instance for working with the graph and nodes.
"""
- activation_quantization_target_point = self._get_activation_quantization_target_point(quantization_point)
+ activation_quantization_target_point = self._get_activation_quantization_target_point(
+ quantization_point, nncf_graph
+ )
self._quantization_target_points_to_qconfig[activation_quantization_target_point] = quantization_point.qconfig
def _get_weight_quantization_target_points(
@@ -684,12 +678,13 @@ def _get_weight_quantization_target_points(
return weight_quantization_target_points
def _get_activation_quantization_target_point(
- self, quantization_point: SingleConfigQuantizationPoint
+ self, quantization_point: SingleConfigQuantizationPoint, nncf_graph: NNCFGraph
) -> SingleConfigQuantizationPoint:
"""
Returns activation quantization target point to the set of existing points.
:param quantization_point: SingleConfigQuantizationPoint for the needed layer.
+ :param nncf_graph: NNCFGraph instance for working with the graph and nodes.
:return: SingleConfigQuantizationPoint for the needed layer.
"""
node_name = quantization_point.insertion_point.target_node_name
@@ -701,7 +696,23 @@ def _get_activation_quantization_target_point(
)
# If quantization of node's output or Model Input node
else:
- output_port_id = 0
+ # NOTE: Assumes that the operation has output edges only from one output port because
+ # we haven't encountered a model with operations that have multiple output edges with different
+ # output port IDs. Currently, such models are not supported. Usually, `output_port_id = 0` is used.
+ # However, there are operations, such as LSTMSequence, where the `output_port_id` changes from case
+ # to case. Therefore, the code below is required to dynamically determine the `output_port_id` where
+ # the quantize operation should be inserted."
+ node = nncf_graph.get_node_by_name(node_name)
+ unique_output_port_ids = set(e.output_port_id for e in nncf_graph.get_output_edges(node))
+ if len(unique_output_port_ids) > 1:
+ nncf_logger.warning(
+ f"Cannot determine the output_port_id for the operation: {node_name}, "
+ "output_port_id = 0 will be used."
+ )
+ output_port_id = 0
+ else:
+ output_port_id = next(iter(unique_output_port_ids))
+
activation_quantization_target_point = self._backend_entity.target_point(
TargetType.POST_LAYER_OPERATION, node_name, output_port_id
)
@@ -731,6 +742,7 @@ def _find_quantization_target_points(
self._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
self._backend_entity.shapeof_metatypes,
self._backend_entity.dropout_metatypes,
+ self._backend_entity.preserved_metatypes,
)
quantizer_setup = self._get_quantizer_setup(nncf_graph, inference_nncf_graph, hw_patterns, ignored_patterns)
@@ -743,7 +755,7 @@ def _find_quantization_target_points(
if quantization_point.is_weight_quantization_point():
self._add_weight_quantization_target_point(quantization_point, nncf_graph)
elif quantization_point.is_activation_quantization_point():
- self._add_activation_quantization_target_point(quantization_point)
+ self._add_activation_quantization_target_point(quantization_point, nncf_graph)
else:
raise nncf.InternalError("Incorrect quantization point")
return self._quantization_target_points_to_qconfig, self._unified_scale_groups
@@ -783,7 +795,9 @@ def _collect_unified_groups(
# Only activation quantizers can be unified
if quantization_point.is_activation_quantization_point():
- activation_target_point = self._get_activation_quantization_target_point(quantization_point)
+ activation_target_point = self._get_activation_quantization_target_point(
+ quantization_point, nncf_graph
+ )
unified_scale_group.append(activation_target_point)
else:
weight_target_points = self._get_weight_quantization_target_points(quantization_point, nncf_graph)
@@ -918,6 +932,7 @@ def filter_func(point: StatisticPoint) -> bool:
transformation_layout.register(
self._backend_entity.create_convert_insertion_command(quantization_target_point, parameters)
)
+ unified_ops_list.add(quantization_target_point)
continue
parameters = calculate_quantizer_parameters(unified_values, qconfig, q_group, narrow_range)
commands = self._backend_entity.create_unified_scales_quantizers_insertion_commands(
@@ -1096,8 +1111,8 @@ def _is_node_after_producers(node):
# In the case of the two quantizers without the branching after them,
# it needs to check that all quantizers follows after producer nodes.
if _is_node_after_producers(fq_1_producer) and _is_node_after_producers(fq_2_producer):
- fq_1_prod_shape = np.prod(nncf_graph.get_output_edges(fq_1_producer)[0].tensor_shape)
- fq_2_prod_shape = np.prod(nncf_graph.get_output_edges(fq_2_producer)[0].tensor_shape)
+ fq_1_prod_shape = np.prod(nncf_graph.get_output_edges_by_port_id(fq_1_producer, 0)[0].tensor_shape)
+ fq_2_prod_shape = np.prod(nncf_graph.get_output_edges_by_port_id(fq_2_producer, 0)[0].tensor_shape)
# Then it needs to remove quantizer with the smallest shape.
if fq_1_prod_shape >= fq_2_prod_shape:
diff --git a/nncf/quantization/algorithms/min_max/backend.py b/nncf/quantization/algorithms/min_max/backend.py
index 1084e2d0dab..73befbe90c7 100644
--- a/nncf/quantization/algorithms/min_max/backend.py
+++ b/nncf/quantization/algorithms/min_max/backend.py
@@ -32,6 +32,14 @@
class MinMaxAlgoBackend(ABC):
+ @property
+ @abstractmethod
+ def preserved_metatypes(self) -> List[OperatorMetatype]:
+ """
+ Property for backend-specific metatypes that require preserving float subgraphs
+ when removing the ShapeOf subgraph.
+ """
+
@property
@abstractmethod
def mat_mul_metatypes(self) -> List[OperatorMetatype]:
@@ -280,7 +288,7 @@ def get_ignored_metatypes(model_type: ModelType, device: TargetDevice) -> List[O
@staticmethod
@abstractmethod
- def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> List[str]:
+ def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> Set[str]:
"""
Returns names of ignored nodes based on layer_attributes.
diff --git a/nncf/quantization/algorithms/min_max/onnx_backend.py b/nncf/quantization/algorithms/min_max/onnx_backend.py
index 5abf5073f9e..ce750026a43 100644
--- a/nncf/quantization/algorithms/min_max/onnx_backend.py
+++ b/nncf/quantization/algorithms/min_max/onnx_backend.py
@@ -46,6 +46,10 @@
class ONNXMinMaxAlgoBackend(MinMaxAlgoBackend):
+ @property
+ def preserved_metatypes(self) -> List[OperatorMetatype]:
+ return []
+
@property
def mat_mul_metatypes(self) -> List[OperatorMetatype]:
return MATMUL_METATYPES
@@ -243,8 +247,8 @@ def get_ignored_metatypes(model_type: ModelType, device: TargetDevice) -> List[O
return types
@staticmethod
- def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> List[str]:
- return []
+ def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> Set[str]:
+ return set()
@staticmethod
def get_weight_nodes(nncf_graph: NNCFGraph) -> List[NNCFNode]:
diff --git a/nncf/quantization/algorithms/min_max/openvino_backend.py b/nncf/quantization/algorithms/min_max/openvino_backend.py
index fb8f7d82187..fbb420f308e 100644
--- a/nncf/quantization/algorithms/min_max/openvino_backend.py
+++ b/nncf/quantization/algorithms/min_max/openvino_backend.py
@@ -43,6 +43,10 @@
class OVMinMaxAlgoBackend(MinMaxAlgoBackend):
+ @property
+ def preserved_metatypes(self) -> List[OperatorMetatype]:
+ return [om.OVConvolutionMetatype, om.OVLSTMSequenceMetatype]
+
@property
def mat_mul_metatypes(self) -> List[OperatorMetatype]:
return [om.OVMatMulMetatype]
@@ -138,10 +142,16 @@ def create_convert_insertion_command(
def get_target_point_shape(nncf_graph: NNCFGraph, node: NNCFNode, target_point: OVTargetPoint) -> Tuple[int, ...]:
if target_point.is_weight_target_point():
return node.layer_attributes.constant_attributes[target_point.port_id]["shape"]
+
if target_point.type == TargetType.PRE_LAYER_OPERATION:
- return nncf_graph.get_input_edges(node)[target_point.port_id].tensor_shape
+ edge = nncf_graph.get_input_edge_by_port_id(node, target_point.port_id)
+ return edge.tensor_shape
elif target_point.type == TargetType.POST_LAYER_OPERATION:
- return nncf_graph.get_output_edges(node)[target_point.port_id].tensor_shape
+ # NOTE: Assumes that all output edges for the `node` with `output_port_id`
+ # equal to `target_point.port_id` should have the same `tensor_shape` value.
+ edges = nncf_graph.get_output_edges_by_port_id(node, target_point.port_id)
+ return edges[0].tensor_shape
+
raise NotImplementedError(f"Unsupported target point type {target_point.type}.")
@staticmethod
@@ -230,15 +240,15 @@ def get_ignored_metatypes(model_type: ModelType, device: TargetDevice) -> List[O
return types
@staticmethod
- def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> List[str]:
- ignored_names = []
+ def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> Set[str]:
+ ignored_names = set()
target_nodes = nncf_graph.get_nodes_by_metatypes([om.OVGRUSequenceMetatype])
for node in target_nodes:
if (
isinstance(node.layer_attributes, OVLayerAttributes)
and node.layer_attributes.input_attributes["linear_before_reset"]
):
- ignored_names.append(node.node_name)
+ ignored_names.add(node.node_name)
return ignored_names
@staticmethod
diff --git a/nncf/quantization/algorithms/min_max/torch_backend.py b/nncf/quantization/algorithms/min_max/torch_backend.py
index dc53ee781d9..98e41e03745 100644
--- a/nncf/quantization/algorithms/min_max/torch_backend.py
+++ b/nncf/quantization/algorithms/min_max/torch_backend.py
@@ -56,6 +56,10 @@
class PTMinMaxAlgoBackend(MinMaxAlgoBackend):
+ @property
+ def preserved_metatypes(self) -> List[OperatorMetatype]:
+ return []
+
TARGET_TYPE_TO_PT_INS_TYPE_MAP = {
TargetType.PRE_LAYER_OPERATION: TargetType.OPERATOR_PRE_HOOK,
TargetType.POST_LAYER_OPERATION: TargetType.OPERATOR_POST_HOOK,
@@ -358,8 +362,8 @@ def get_ignored_metatypes(model_type: ModelType, device: TargetDevice) -> List[O
return types
@staticmethod
- def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> List[str]:
- return []
+ def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> Set[str]:
+ return set()
@staticmethod
def get_weight_nodes(nncf_graph: NNCFGraph) -> List[NNCFNode]:
diff --git a/nncf/quantization/algorithms/min_max/torch_fx_backend.py b/nncf/quantization/algorithms/min_max/torch_fx_backend.py
new file mode 100644
index 00000000000..4f82a1e0c8c
--- /dev/null
+++ b/nncf/quantization/algorithms/min_max/torch_fx_backend.py
@@ -0,0 +1,357 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Dict, List, Optional, Set, Tuple
+
+import torch
+
+import nncf
+import nncf.torch.graph.operator_metatypes as om
+from nncf.common.graph.definitions import NNCFGraphNodeType
+from nncf.common.graph.graph import NNCFGraph
+from nncf.common.graph.graph import NNCFNode
+from nncf.common.graph.operator_metatypes import OperatorMetatype
+from nncf.common.graph.transformations.commands import TargetType
+from nncf.common.graph.transformations.commands import TransformationCommand
+from nncf.common.hardware.config import HWConfig
+from nncf.common.quantization.structs import QuantizationScheme as QuantizationMode
+from nncf.common.quantization.structs import QuantizerConfig
+from nncf.experimental.common.tensor_statistics.collectors import AGGREGATORS_MAP
+from nncf.experimental.common.tensor_statistics.collectors import TensorCollector
+from nncf.experimental.common.tensor_statistics.statistics import MinMaxTensorStatistic
+from nncf.experimental.torch.fx.commands import FXApplyTransformationCommand
+from nncf.experimental.torch.fx.transformations import qdq_insertion_transformation_builder
+from nncf.parameters import ModelType
+from nncf.parameters import TargetDevice
+from nncf.quantization.advanced_parameters import StatisticsType
+from nncf.quantization.algorithms.min_max.backend import MinMaxAlgoBackend
+from nncf.quantization.fake_quantize import FakeConvertParameters
+from nncf.quantization.fake_quantize import FakeQuantizeParameters
+from nncf.quantization.range_estimator import AggregatorType
+from nncf.quantization.range_estimator import RangeEstimatorParameters
+from nncf.torch.graph.graph import PTNNCFGraph
+from nncf.torch.graph.graph import PTTargetPoint
+from nncf.torch.graph.transformations.commands import PTSharedFnInsertionCommand
+from nncf.torch.hardware.config import PTHWConfig
+from nncf.torch.model_graph_manager import get_weight_tensor_port_ids
+from nncf.torch.nncf_network import NNCFNetwork
+from nncf.torch.quantization.default_quantization import DEFAULT_PT_QUANT_TRAIT_TO_OP_DICT
+from nncf.torch.quantization.layers import QUANTIZATION_MODULES
+from nncf.torch.quantization.layers import AsymmetricQuantizer
+from nncf.torch.quantization.layers import BaseQuantizer
+from nncf.torch.quantization.layers import PTQuantizerSpec
+from nncf.torch.quantization.layers import get_scale_shape
+from nncf.torch.quantization.strip import convert_to_torch_fakequantizer
+from nncf.torch.tensor_statistics.collectors import PT_REDUCERS_MAP
+
+
+class FXMinMaxAlgoBackend(MinMaxAlgoBackend):
+ TARGET_TYPE_TO_PT_INS_TYPE_MAP = {
+ TargetType.PRE_LAYER_OPERATION: TargetType.OPERATOR_PRE_HOOK,
+ TargetType.POST_LAYER_OPERATION: TargetType.OPERATOR_POST_HOOK,
+ }
+
+ @property
+ def preserved_metatypes(self) -> List[OperatorMetatype]:
+ return []
+
+ @property
+ def mat_mul_metatypes(self) -> List[OperatorMetatype]:
+ return [om.PTLinearMetatype, om.PTMatMulMetatype]
+
+ @property
+ def post_processing_metatypes(self) -> List[OperatorMetatype]:
+ return []
+
+ @property
+ def shapeof_metatypes(self) -> List[OperatorMetatype]:
+ return []
+
+ @property
+ def dropout_metatypes(self) -> List[OperatorMetatype]:
+ return [om.PTDropoutMetatype]
+
+ @property
+ def read_variable_metatypes(self) -> List[OperatorMetatype]:
+ return []
+
+ @property
+ def conv_metatypes(self) -> List[OperatorMetatype]:
+ return [om.PTConv1dMetatype, om.PTConv2dMetatype, om.PTConv3dMetatype]
+
+ @property
+ def overflow_fix_metatypes(self) -> List[OperatorMetatype]:
+ return [
+ om.PTConv1dMetatype,
+ om.PTConv2dMetatype,
+ om.PTConv3dMetatype,
+ om.PTLinearMetatype,
+ om.PTConvTranspose1dMetatype,
+ om.PTConvTranspose2dMetatype,
+ om.PTConvTranspose3dMetatype,
+ ]
+
+ @property
+ def add_metatypes(self) -> List[OperatorMetatype]:
+ return [om.PTAddMetatype]
+
+ @property
+ def group_conv_metatypes(self) -> List[OperatorMetatype]:
+ return self.conv_metatypes
+
+ @property
+ def scaled_dot_product_attention_metatypes(self) -> List[OperatorMetatype]:
+ return [om.PTScaledDotProductAttentionMetatype]
+
+ @property
+ def scales_unification_map(self) -> Dict[OperatorMetatype, OperatorMetatype]:
+ return {om.PTCatMetatype: self.overflow_fix_metatypes}
+
+ @property
+ def hw_config(self) -> HWConfig:
+ return PTHWConfig
+
+ @property
+ def quant_trait_op_dict(self) -> Dict[int, OperatorMetatype]:
+ return DEFAULT_PT_QUANT_TRAIT_TO_OP_DICT
+
+ @staticmethod
+ def get_start_nodes_for_activation_path_tracing(nncf_graph: PTNNCFGraph) -> List[NNCFNode]:
+ return nncf_graph.get_input_nodes()
+
+ @staticmethod
+ def target_point(target_type: TargetType, target_node_name: str, port_id: int) -> PTTargetPoint:
+ if NNCFGraphNodeType.INPUT_NODE in target_node_name or target_type == TargetType.POST_LAYER_OPERATION:
+ port_id = None
+ if target_type in FXMinMaxAlgoBackend.TARGET_TYPE_TO_PT_INS_TYPE_MAP:
+ target_type = FXMinMaxAlgoBackend.TARGET_TYPE_TO_PT_INS_TYPE_MAP[target_type]
+ return PTTargetPoint(target_type, target_node_name, input_port_id=port_id)
+
+ @staticmethod
+ def create_convert_insertion_command(
+ target_point: PTTargetPoint,
+ parameters: FakeConvertParameters,
+ ) -> TransformationCommand:
+ raise nncf.InternalError("FakeConvert insertion not implemented in PyTorch backend!")
+
+ @staticmethod
+ def get_target_point_shape(nncf_graph: PTNNCFGraph, node: NNCFNode, target_point: PTTargetPoint) -> Tuple[int, ...]:
+ return nncf_graph.get_input_shape_for_insertion_point(target_point)
+
+ @staticmethod
+ def get_weight_quantization_axes(node: NNCFNode, target_point: PTTargetPoint, ndims: int) -> Tuple[int]:
+ # TODO(dlyakhov): support transpose conv and other cases
+ return (0,)
+
+ @staticmethod
+ def get_statistic_collector(
+ range_estimator_params: RangeEstimatorParameters,
+ use_abs_max: bool,
+ reduction_axes: Optional[Tuple[int, ...]],
+ aggregation_axes: Optional[Tuple[int, ...]],
+ inplace: bool,
+ num_samples: Optional[int] = None,
+ ) -> TensorCollector:
+ collector = TensorCollector(MinMaxTensorStatistic)
+ for params, container_key in zip(
+ [range_estimator_params.min, range_estimator_params.max],
+ [MinMaxTensorStatistic.MIN_STAT, MinMaxTensorStatistic.MAX_STAT],
+ ):
+ if params.statistics_type not in PT_REDUCERS_MAP:
+ raise nncf.InternalError(
+ f"Statistic type: {params.statistics_type} is not supported for Torch PTQ backend yet."
+ )
+
+ if params.aggregator_type not in AGGREGATORS_MAP:
+ raise nncf.InternalError(
+ f"Aggregator type: {params.aggregator_type} is not supported for Torch PTQ backend yet."
+ )
+
+ statistic_type = params.statistics_type
+ if statistic_type in [StatisticsType.QUANTILE, StatisticsType.ABS_QUANTILE]:
+ # TODO(dlyakhov): merge two quantile aggregators in one
+ if container_key == MinMaxTensorStatistic.MIN_STAT:
+ quantile = params.quantile_outlier_prob
+ else:
+ quantile = 1 - params.quantile_outlier_prob
+ reducer = PT_REDUCERS_MAP[statistic_type](reduction_axes=reduction_axes, quantile=[quantile])
+ else:
+ if use_abs_max and statistic_type == StatisticsType.MAX:
+ statistic_type = StatisticsType.ABS_MAX
+ reducer = PT_REDUCERS_MAP[statistic_type](reduction_axes=reduction_axes)
+
+ kwargs = {
+ "num_samples": num_samples,
+ "aggregation_axes": aggregation_axes,
+ }
+ if params.aggregator_type in [AggregatorType.MEAN_NO_OUTLIERS, AggregatorType.MEDIAN_NO_OUTLIERS]:
+ kwargs.update({"quantile": params.quantile_outlier_prob})
+ aggregator = AGGREGATORS_MAP[params.aggregator_type](**kwargs)
+
+ collector.register_statistic_branch(container_key, reducer, aggregator)
+ return collector
+
+ @staticmethod
+ def get_weight_tensor_port_ids(node: NNCFNode, graph: NNCFGraph) -> List[Optional[int]]:
+ return get_weight_tensor_port_ids(node, graph)
+
+ @staticmethod
+ def get_weight_name(nncf_graph: NNCFGraph, target_point: PTTargetPoint) -> str:
+ weighted_node = nncf_graph.get_node_by_name(target_point.target_node_name)
+ weight = nncf_graph.get_previous_nodes(weighted_node)[target_point.input_port_id]
+ return weight.node_name
+
+ @staticmethod
+ def should_quantize_weight(weight_name: str, quantized_weight_names: Set[str]) -> bool:
+ # If the nodes share one weight tensor, we should have only one quantizer on that
+ return weight_name not in quantized_weight_names
+
+ @staticmethod
+ def get_weight_config(config: QuantizerConfig, model: NNCFNetwork) -> QuantizerConfig:
+ return config
+
+ @staticmethod
+ def _get_input_scale_shape(
+ nncf_graph: NNCFGraph, target_point: PTTargetPoint, per_channel: bool
+ ) -> Tuple[Tuple[int, ...], Tuple[int, ...], int]:
+ is_weights = target_point.is_weight_target_point()
+ if is_weights:
+ # TODO(dlyakhov): support transpose conv/ make channel_idx common
+ channel_idx = 0
+ else:
+ channel_idx = 1 # channel dim for activations
+
+ input_shape = nncf_graph.get_input_shape_for_insertion_point(target_point)
+ scale_shape = tuple(
+ get_scale_shape(input_shape, is_weights=is_weights, per_channel=per_channel, channel_idx=channel_idx)
+ )
+
+ return input_shape, scale_shape, channel_idx
+
+ @staticmethod
+ def _create_quantizer(
+ quantizer_config: QuantizerConfig,
+ scale_shape: Tuple,
+ parameters: FakeQuantizeParameters,
+ target_type: TargetType,
+ ) -> BaseQuantizer:
+ mode = quantizer_config.mode
+ quantizer_cls = QUANTIZATION_MODULES.get(mode)
+ narrow_range = target_type == TargetType.OPERATION_WITH_WEIGHTS and mode == QuantizationMode.SYMMETRIC
+ quantizer_spec = PTQuantizerSpec.from_config(
+ quantizer_config,
+ narrow_range=narrow_range,
+ scale_shape=scale_shape,
+ half_range=False,
+ logarithm_scale=False,
+ is_quantized_on_export=False,
+ compression_lr_multiplier=None,
+ )
+ quantizer = quantizer_cls(quantizer_spec)
+
+ # Fill it with minmax
+ # TODO(dlyakhov) Prevent creation of intermediate objects like nncf quantizer.
+ FXMinMaxAlgoBackend._fill_quantizer_parameters(quantizer, parameters, quantizer_spec.scale_shape)
+ # Convert to the torch fake quantizer
+ torch_fq = convert_to_torch_fakequantizer(quantizer)
+ return torch_fq
+
+ @staticmethod
+ def _fill_quantizer_parameters(quantizer: BaseQuantizer, parameters: FakeQuantizeParameters, scale_shape) -> None:
+ if isinstance(quantizer, AsymmetricQuantizer):
+ quantizer.input_low = torch.nn.Parameter(parameters.input_low.data.reshape(scale_shape))
+ input_range = parameters.input_high - parameters.input_low
+ # Subtract eps from the input_range to make quantizer parameters equal to
+ # original parameters on the forward call.
+ quantizer.input_range = torch.nn.Parameter((input_range.data - quantizer.eps).reshape(scale_shape))
+ else:
+ quantizer.signed = bool(torch.any(parameters.input_low.data < 0))
+ # Subtract eps from the scale to make quantizer parameters equal to
+ # original parameters on the forward call.
+ quantizer.scale = torch.nn.Parameter((parameters.input_high.data - quantizer.eps).reshape(scale_shape))
+
+ @staticmethod
+ def create_quantizer_insertion_command(
+ nncf_graph: NNCFGraph,
+ target_point: PTTargetPoint,
+ quantizer_config: QuantizerConfig,
+ parameters: FakeQuantizeParameters,
+ ) -> FXApplyTransformationCommand:
+ _, scale_shape, _ = FXMinMaxAlgoBackend._get_input_scale_shape(
+ nncf_graph, target_point, quantizer_config.per_channel
+ )
+
+ quantizer = FXMinMaxAlgoBackend._create_quantizer(
+ quantizer_config, scale_shape, parameters, target_point.target_type
+ )
+ transformation = qdq_insertion_transformation_builder(quantizer, [target_point])
+ return FXApplyTransformationCommand(transformation)
+
+ @staticmethod
+ def create_unified_scales_quantizers_insertion_commands(
+ nncf_graph: NNCFGraph,
+ target_points: List[PTTargetPoint],
+ quantizer_config: QuantizerConfig,
+ parameters: FakeQuantizeParameters,
+ ) -> List[PTSharedFnInsertionCommand]:
+ _, scale_shape, _ = FXMinMaxAlgoBackend._get_input_scale_shape(
+ nncf_graph, target_points[0], quantizer_config.per_channel
+ )
+
+ quantizer = FXMinMaxAlgoBackend._create_quantizer(
+ quantizer_config, scale_shape, parameters, target_points[0].target_type
+ )
+
+ transformations = []
+ for tp in target_points:
+ transformation = qdq_insertion_transformation_builder(quantizer, [tp])
+ transformations.append(FXApplyTransformationCommand(transformation))
+ return transformations
+
+ @staticmethod
+ def get_ignored_metatypes(model_type: ModelType, device: TargetDevice) -> List[OperatorMetatype]:
+ types = []
+ if model_type == ModelType.TRANSFORMER:
+ types = [
+ om.PTAddMetatype,
+ om.PTPowerMetatype,
+ om.PTSubMetatype,
+ om.PTAvgPool2dMetatype,
+ om.PTAvgPool3dMetatype,
+ om.PTMeanMetatype,
+ om.PTSumMetatype,
+ om.PTReduceL2,
+ om.PTDivMetatype,
+ om.PTMaxMetatype,
+ om.PTSqueezeMetatype,
+ om.PTLayerNormMetatype,
+ om.PTModuleLayerNormMetatype,
+ om.PTGroupNormMetatype,
+ om.PTModuleGroupNormMetatype,
+ # Batchnorm
+ om.PTBatchNormMetatype,
+ om.PTModuleBatchNormMetatype,
+ ]
+ if device != TargetDevice.CPU_SPR:
+ types.append(om.PTMulMetatype)
+ return types
+
+ @staticmethod
+ def get_ignored_names_by_layer_attributes(nncf_graph: NNCFGraph) -> Set[str]:
+ return set()
+
+ @staticmethod
+ def get_weight_nodes(nncf_graph: NNCFGraph) -> List[NNCFNode]:
+ return [
+ node
+ for node in nncf_graph.get_all_nodes()
+ if issubclass(node.metatype, om.PTOperatorMetatype) and node.metatype.weight_port_ids
+ ]
diff --git a/nncf/quantization/algorithms/smooth_quant/algorithm.py b/nncf/quantization/algorithms/smooth_quant/algorithm.py
index ec3dedbff5f..83aefc6709a 100644
--- a/nncf/quantization/algorithms/smooth_quant/algorithm.py
+++ b/nncf/quantization/algorithms/smooth_quant/algorithm.py
@@ -70,7 +70,7 @@ def __init__(
@property
def available_backends(self) -> List[BackendType]:
- return [BackendType.OPENVINO, BackendType.TORCH]
+ return [BackendType.OPENVINO, BackendType.TORCH, BackendType.TORCH_FX]
def _set_backend_entity(self, model: TModel) -> None:
"""
@@ -87,6 +87,10 @@ def _set_backend_entity(self, model: TModel) -> None:
from nncf.quantization.algorithms.smooth_quant.torch_backend import PTSmoothQuantAlgoBackend
self._backend_entity = PTSmoothQuantAlgoBackend()
+ elif model_backend == BackendType.TORCH_FX:
+ from nncf.quantization.algorithms.smooth_quant.torch_fx_backend import FXSmoothQuantAlgoBackend
+
+ self._backend_entity = FXSmoothQuantAlgoBackend()
else:
raise nncf.UnsupportedBackendError(
"Cannot return backend-specific entity because {} is not supported!".format(model_backend.value)
@@ -108,8 +112,8 @@ def apply(
node_groups = self._group_nodes_by_source(nodes_to_smooth_data, graph)
- best_scale = None
for group_id, nodes in track(node_groups.items(), description="Applying Smooth Quant"):
+ best_scale = None
best_ratio = 0.0
empty_statistic = False
for node_to_smooth in nodes:
@@ -130,7 +134,7 @@ def apply(
activations_value = self._clip_statistics(activations_value)
- weight_value = self._backend_entity.get_weight_value(node_to_smooth, model)
+ weight_value = self._backend_entity.get_weight_value(node_to_smooth, model, graph)
weight_statistics = self._process_weight_statistics(node_to_smooth, weight_value)
weight_statistics = self._clip_statistics([weight_statistics])
@@ -155,7 +159,7 @@ def apply(
continue
for node_to_smooth in nodes:
- weight_value = self._backend_entity.get_weight_value(node_to_smooth, model)
+ weight_value = self._backend_entity.get_weight_value(node_to_smooth, model, graph)
weights_scale = self._calculate_weight_scale(best_scale, node_to_smooth, weight_value)
scaled_weight = weight_value * weights_scale
weight_update_command = self._backend_entity.weight_update_command(node_to_smooth, scaled_weight.data)
@@ -210,8 +214,7 @@ def _group_nodes_by_source(self, nodes_to_smooth: List[Dict], nncf_graph: NNCFGr
for node_data in nodes_to_smooth:
node_to_smooth = node_data["node_to_smooth"]
input_act_port = node_data["input_act_port"]
-
- source_node = nncf_graph.get_input_edges(node_to_smooth)[input_act_port].from_node
+ source_node = nncf_graph.get_input_edge_by_port_id(node_to_smooth, input_act_port).from_node
edge = nncf_graph.get_edge(source_node, node_to_smooth)
# Such group_id (with node, ports, and shape as a hash) allows us to be confident
# that all sensitive parameters are equal for successor nodes are equal.
@@ -288,8 +291,7 @@ def _get_nodes_to_smooth_data(self, nncf_graph: NNCFGraph, node_metatypes: List[
continue
activation_port_id = self._backend_entity.get_activations_port_id(node_with_weight, nncf_graph)
- input_edges = nncf_graph.get_input_edges(node_with_weight)
- activation_node = input_edges[activation_port_id].from_node
+ activation_node = nncf_graph.get_input_edge_by_port_id(node_with_weight, activation_port_id).from_node
# Skipping agnostic layers as inputs to propagate quantizer
# Only for Convolution layers
@@ -367,7 +369,7 @@ def _calculate_input_reduction_axes(self, nncf_graph: NNCFGraph, node: NNCFNode,
:param input_port: Specified input port id.
:return: Calculated reduction axes.
"""
- shape = nncf_graph.get_input_edges(node)[input_port].tensor_shape
+ shape = nncf_graph.get_input_edge_by_port_id(node, input_port).tensor_shape
reduction_axes = tuple([])
if len(shape) > 1:
channel_axis = self._backend_entity.get_activation_channel_axis(node, input_port)
diff --git a/nncf/quantization/algorithms/smooth_quant/backend.py b/nncf/quantization/algorithms/smooth_quant/backend.py
index ecee83d65dd..3db81d95300 100644
--- a/nncf/quantization/algorithms/smooth_quant/backend.py
+++ b/nncf/quantization/algorithms/smooth_quant/backend.py
@@ -113,26 +113,17 @@ def get_abs_max_channel_collector(
@staticmethod
@abstractmethod
- def get_weight_value(node_with_weight: NNCFNode, model: TModel, port_id: int) -> Tensor:
+ def get_weight_value(node_with_weight: NNCFNode, model: TModel, port_id: int, nncf_graph: NNCFGraph) -> Tensor:
"""
Returns the weight value for the node with weight.
:param node_with_weight: The node with weight.
:param model: The model that contains this operation.
:param port_id: The input port ID to get weight input.
+ :param nncf_graph: NNCFGraph instance.
:return: The weight value.
"""
- @staticmethod
- @abstractmethod
- def get_weight_tensor_port_id(node: NNCFNode) -> int:
- """
- Returns node's input port indices with weights tensors.
-
- :param node: NNCFNode to find its weights input port indices.
- :return: Weights input port indices.
- """
-
@staticmethod
@abstractmethod
def weight_update_command(
diff --git a/nncf/quantization/algorithms/smooth_quant/openvino_backend.py b/nncf/quantization/algorithms/smooth_quant/openvino_backend.py
index e4b9bf784ae..8a8a74490ee 100644
--- a/nncf/quantization/algorithms/smooth_quant/openvino_backend.py
+++ b/nncf/quantization/algorithms/smooth_quant/openvino_backend.py
@@ -86,7 +86,7 @@ def get_abs_max_channel_collector(
return collector
@staticmethod
- def get_weight_value(node_with_weight: NNCFNode, model: ov.Model) -> Tensor:
+ def get_weight_value(node_with_weight: NNCFNode, model: ov.Model, nncf_graph: NNCFGraph) -> Tensor:
port_id = OVSmoothQuantAlgoBackend.get_weight_tensor_port_id(node_with_weight)
return Tensor(get_weight_value(node_with_weight, model, port_id))
@@ -147,7 +147,7 @@ def calculate_port_based_channel_axis(port_id: int, transpose: bool) -> int:
@staticmethod
def is_node_with_shared_weight(node: NNCFNode, nncf_graph: NNCFGraph) -> bool:
weight_port_id = OVSmoothQuantAlgoBackend.get_weight_tensor_port_id(node)
- weight_node = nncf_graph.get_input_edges(node)[weight_port_id].from_node
+ weight_node = nncf_graph.get_input_edge_by_port_id(node, weight_port_id).from_node
return len(nncf_graph.get_next_nodes(weight_node)) > 1
@staticmethod
diff --git a/nncf/quantization/algorithms/smooth_quant/torch_backend.py b/nncf/quantization/algorithms/smooth_quant/torch_backend.py
index eb0b5760974..15d247bb64d 100644
--- a/nncf/quantization/algorithms/smooth_quant/torch_backend.py
+++ b/nncf/quantization/algorithms/smooth_quant/torch_backend.py
@@ -119,22 +119,13 @@ def get_abs_max_channel_collector(
return collector
@staticmethod
- def get_weight_value(node_with_weight: NNCFNode, model: NNCFNetwork) -> Tensor:
- weight_node = get_const_node(
- node_with_weight, node_with_weight.metatype.weight_port_ids[0], model.nncf.get_graph()
- )
+ def get_weight_value(node_with_weight: NNCFNode, model: NNCFNetwork, nncf_graph: NNCFGraph) -> Tensor:
+ weight_node = get_const_node(node_with_weight, node_with_weight.metatype.weight_port_ids[0], nncf_graph)
if weight_node is None:
raise RuntimeError(f"{node_with_weight} node has no weight node.")
weight_data = get_const_data(weight_node, model)
return Tensor(weight_data)
- @staticmethod
- def get_weight_tensor_port_id(node: NNCFNode) -> int:
- const_ids = node.layer_attributes.get_const_port_ids()
- if len(const_ids) != 1:
- raise RuntimeError(f"Found more than 1 port for {node.node_name} node")
- return const_ids[0]
-
@staticmethod
def weight_update_command(node_with_weight: NNCFNode, weight_value: np.ndarray) -> OVWeightUpdateCommand:
return create_command_to_update_weight(node_with_weight, weight_value)
diff --git a/nncf/quantization/algorithms/smooth_quant/torch_fx_backend.py b/nncf/quantization/algorithms/smooth_quant/torch_fx_backend.py
new file mode 100644
index 00000000000..2b4bb7b37b9
--- /dev/null
+++ b/nncf/quantization/algorithms/smooth_quant/torch_fx_backend.py
@@ -0,0 +1,155 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Callable, List, Tuple
+
+import torch.fx
+
+import nncf.torch.graph.operator_metatypes as om
+from nncf.common.graph import NNCFGraph
+from nncf.common.graph import NNCFNode
+from nncf.common.graph.operator_metatypes import OperatorMetatype
+from nncf.common.graph.transformations.commands import TargetType
+from nncf.common.quantization.quantizer_propagation.structs import QuantizationTrait
+from nncf.common.tensor_statistics.statistic_point import StatisticPoint
+from nncf.experimental.common.tensor_statistics.collectors import MaxAggregator
+from nncf.experimental.common.tensor_statistics.collectors import TensorCollector
+from nncf.experimental.torch.fx.commands import FXApplyTransformationCommand
+from nncf.experimental.torch.fx.node_utils import get_tensor_constant_from_node
+from nncf.experimental.torch.fx.transformations import constant_update_transformation_builder
+from nncf.experimental.torch.fx.transformations import get_graph_node_by_name
+from nncf.experimental.torch.fx.transformations import module_insertion_transformation_builder
+from nncf.openvino.graph.transformations.commands import OVMultiplyInsertionCommand
+from nncf.openvino.graph.transformations.commands import OVWeightUpdateCommand
+from nncf.quantization.algorithms.smooth_quant.backend import SmoothQuantAlgoBackend
+from nncf.tensor import Tensor
+from nncf.torch.graph.transformations.commands import PTTargetPoint
+from nncf.torch.model_graph_manager import get_const_node
+from nncf.torch.quantization.default_quantization import DEFAULT_PT_QUANT_TRAIT_TO_OP_DICT
+from nncf.torch.tensor_statistics.collectors import PTAbsMaxReducer
+
+PT_PRE_LAYER_TARGET_TYPE = TargetType.OPERATOR_PRE_HOOK
+
+
+class FXSQMultiply(torch.nn.Module):
+ def __init__(self, scale: torch.Tensor):
+ super().__init__()
+ self._scale_value = scale
+
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
+ return torch.mul(x, self._scale_value)
+
+
+class FXSmoothQuantAlgoBackend(SmoothQuantAlgoBackend):
+ @property
+ def convolution_metatypes(self) -> List[OperatorMetatype]:
+ return [
+ om.PTConv1dMetatype,
+ om.PTConv2dMetatype,
+ om.PTConv3dMetatype,
+ ]
+
+ @property
+ def matmul_metatypes(self) -> List[OperatorMetatype]:
+ return [om.PTLinearMetatype]
+
+ @property
+ def quantize_agnostic_metatypes(self) -> List[OperatorMetatype]:
+ return DEFAULT_PT_QUANT_TRAIT_TO_OP_DICT[QuantizationTrait.QUANTIZATION_AGNOSTIC]
+
+ @staticmethod
+ def pre_layer_target_type() -> TargetType:
+ return PT_PRE_LAYER_TARGET_TYPE
+
+ @staticmethod
+ def target_point(target_type: TargetType, target_node_name: str, port_id: int) -> PTTargetPoint:
+ return PTTargetPoint(target_type, target_node_name, input_port_id=port_id)
+
+ @staticmethod
+ def is_node_with_weights(node: NNCFNode) -> bool:
+ # Metatypes of linears and convolutions guarantee
+ # all nodes with the metatypes have weights, we can skip
+ # this check by returning True.
+ return True
+
+ @staticmethod
+ def get_activations_port_id(node: NNCFNode, nncf_graph: NNCFGraph) -> int:
+ return 0
+
+ @staticmethod
+ def get_abs_max_channel_collector(
+ num_samples: int, stats_reduction_axes: Tuple[int], inplace: bool, branch_key: str
+ ) -> TensorCollector:
+ collector = TensorCollector()
+ reducer = PTAbsMaxReducer(reduction_axes=stats_reduction_axes)
+ aggregator = MaxAggregator(num_samples=num_samples)
+ collector.register_statistic_branch(branch_key, reducer, aggregator)
+ return collector
+
+ @staticmethod
+ def get_weight_value(node_with_weight: NNCFNode, model: torch.fx.GraphModule, nncf_graph: NNCFGraph) -> Tensor:
+ weight_node = get_const_node(node_with_weight, node_with_weight.metatype.weight_port_ids[0], nncf_graph)
+ if weight_node is None:
+ raise RuntimeError(f"{node_with_weight} node has no weight node.")
+ graph_node = get_graph_node_by_name(model.graph, weight_node.node_name)
+ weight_data = get_tensor_constant_from_node(graph_node, model)
+ return Tensor(weight_data.data)
+
+ @staticmethod
+ def weight_update_command(node_with_weight: NNCFNode, weight_value: torch.Tensor) -> OVWeightUpdateCommand:
+ return FXApplyTransformationCommand(constant_update_transformation_builder(node_with_weight, weight_value.data))
+
+ @staticmethod
+ def scale_insertion_command(
+ source_node: NNCFNode,
+ scale_value: torch.Tensor,
+ source_output_port_id: int,
+ nodes: List[NNCFNode],
+ scale_node_name: str,
+ ) -> OVMultiplyInsertionCommand:
+ input_port_id = 0
+ target_points = []
+ for node in nodes:
+ target_points.append(PTTargetPoint(PT_PRE_LAYER_TARGET_TYPE, node.node_name, input_port_id=input_port_id))
+
+ sq_multiply = FXSQMultiply(scale_value)
+ return FXApplyTransformationCommand(
+ module_insertion_transformation_builder(sq_multiply, target_points, scale_node_name)
+ )
+
+ @staticmethod
+ def get_activation_channel_axis(node: NNCFNode, port_id: int) -> int:
+ if node.metatype == om.PTLinearMetatype:
+ return -1
+ # TODO: Add activation axis calculation when MatMul will be supported
+ return 1
+
+ @staticmethod
+ def get_weight_channel_axis(node: NNCFNode) -> int:
+ # TODO: Add activation axis calculation when MatMul will be supported
+ return 1
+
+ @staticmethod
+ def is_node_with_shared_weight(node: NNCFNode, nncf_graph: NNCFGraph) -> bool:
+ # TODO(dlyakhov): Support shared layers in TorchFX.
+ # Ref: 149316
+ return False
+
+ @staticmethod
+ def get_filter_fn_for_statistics(activation_port_id: int, algorithm_key: str) -> Callable[[StatisticPoint], bool]:
+ def filter_func(point: StatisticPoint) -> bool:
+ return (
+ algorithm_key in point.algorithm_to_tensor_collectors
+ and point.target_point.type == PT_PRE_LAYER_TARGET_TYPE
+ and point.target_point.input_port_id == activation_port_id
+ )
+
+ return filter_func
diff --git a/nncf/quantization/algorithms/weight_compression/activation_stats.py b/nncf/quantization/algorithms/weight_compression/activation_stats.py
new file mode 100644
index 00000000000..359887e7769
--- /dev/null
+++ b/nncf/quantization/algorithms/weight_compression/activation_stats.py
@@ -0,0 +1,43 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import List, Tuple
+
+from nncf.tensor import Tensor
+from nncf.tensor import functions as fns
+
+
+def process_stats(stats: List[Tensor], subset_size: int) -> Tuple[Tensor, Tensor]:
+ """
+ It's a processing of activations shared between AWQ, Scale Estimation and LoRA Correction algorithms.
+
+ :param stats: list of activation statistics for a layer that contains N tensors with shape [SeqLen, HiddenDim]
+ :type stats: List[TTensor]
+ :param subset_size: The number of samples for AWQ.
+ :type subset_size: int
+ :return: tuple of the following tensors:
+ s - maximum channel magnitude across samples [HiddenDim]
+ X - average channel magnitude across tokens in the sequence [HiddenDim, SampleSize]
+ :rtype: Tuple[TTensor, TTensor]
+ """
+ X = fns.stack([fns.mean(stat, axis=0) for stat in stats]) # [Batch, HiddenDim]
+ X_full = fns.transpose(X) # [HiddenDim, Batch]
+
+ # prevent high memory and time consumption
+ if X_full.shape[1] > subset_size:
+ lens = [stat.shape[0] for stat in stats]
+ step = X_full.shape[1] // subset_size
+ idxs = [i[0] for i in sorted(enumerate(lens), key=lambda x: -x[1])][::step]
+ X = X_full[:, idxs] # [HiddenDim, SampleSize]
+ else:
+ X = X_full
+ s = fns.max(fns.abs(X_full), axis=1) # [HiddenDim]
+ return s, X
diff --git a/nncf/quantization/algorithms/weight_compression/algorithm.py b/nncf/quantization/algorithms/weight_compression/algorithm.py
index a448d185f45..1b2af0fd9a3 100644
--- a/nncf/quantization/algorithms/weight_compression/algorithm.py
+++ b/nncf/quantization/algorithms/weight_compression/algorithm.py
@@ -29,10 +29,12 @@
from nncf.parameters import CompressWeightsMode
from nncf.parameters import SensitivityMetric
from nncf.quantization.advanced_parameters import AdvancedCompressionParameters
+from nncf.quantization.advanced_parameters import convert_to_dict_recursively
from nncf.quantization.algorithms.algorithm import Algorithm
from nncf.quantization.algorithms.weight_compression.awq import AWQ
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
from nncf.quantization.algorithms.weight_compression.gptq import GPTQ
+from nncf.quantization.algorithms.weight_compression.lora_correction import LoraCorrectionAlgorithm
from nncf.quantization.algorithms.weight_compression.mixed_precision import MIXED_PRECISION_CRITERIA
from nncf.quantization.algorithms.weight_compression.scale_estimation import ScaleEstimation
from nncf.quantization.algorithms.weight_compression.weight_lowering import WeightCompressionConfig
@@ -65,6 +67,7 @@ def __init__(
subset_size: int,
scale_estimation: bool,
gptq: bool,
+ lora_correction: bool,
advanced_parameters: Optional[AdvancedCompressionParameters] = None,
):
"""
@@ -97,6 +100,7 @@ def __init__(
quantization precision.
:param scale_estimation: determines whether to use or not scale estimation for 4 bit layers.
:param gptq: determines whether to use or not GPTQ algorithm.
+ :param lora_correction: determines whether to use or not LoRA Correction algorithm.
:param advanced_parameters: advanced parameters for algorithms in compression pipeline.
"""
super().__init__()
@@ -113,13 +117,19 @@ def __init__(
self._subset_size = subset_size
self._scale_estimation = scale_estimation
self._gptq = gptq
+ self._lora_correction = lora_correction
self._advanced_parameters = (
advanced_parameters if advanced_parameters is not None else AdvancedCompressionParameters()
)
if self._gptq:
gptq_params = self._advanced_parameters.gptq_params
- self._gptq_algo = GPTQ(gptq_params.damp_percent, gptq_params.block_size, gptq_params.subset_size)
+ self._gptq_algo = GPTQ(
+ damp_percent=gptq_params.damp_percent,
+ block_size=gptq_params.block_size,
+ subset_size=gptq_params.subset_size,
+ scale_estimation=self._scale_estimation,
+ )
self._gptq_statistics = None
@property
@@ -374,25 +384,8 @@ def apply(
scales = {}
zero_points = {}
- if (
- self._scale_estimation
- and activations is not None
- and self._mode not in [CompressWeightsMode.NF4, CompressWeightsMode.E2M1]
- ):
- scale_estimation_params = self._advanced_parameters.scale_estimation_params
- scale_algo = ScaleEstimation(
- model,
- self._backend_entity.name_to_node_mapping,
- all_weight_params,
- nodes_to_compress,
- activations,
- scale_estimation_params.subset_size,
- scale_estimation_params.initial_steps,
- scale_estimation_params.scale_steps,
- scale_estimation_params.weight_penalty,
- )
- scales = scale_algo.apply(model, graph)
-
+ lora_correction_algo = None
+ description = "Applying Weight Compression"
if self._gptq:
model, scales, zero_points = self._gptq_algo.apply(
model=model,
@@ -402,17 +395,43 @@ def apply(
statistic_points=self._gptq_statistics,
backend_entity=self._backend_entity,
)
+ else:
+ if (
+ self._scale_estimation
+ and activations is not None
+ and self._mode not in [CompressWeightsMode.NF4, CompressWeightsMode.E2M1]
+ ):
+ scale_estimation_params = self._advanced_parameters.scale_estimation_params
+ scale_algo = ScaleEstimation(
+ model,
+ self._backend_entity.name_to_node_mapping,
+ all_weight_params,
+ nodes_to_compress,
+ activations,
+ scale_estimation_params.subset_size,
+ scale_estimation_params.initial_steps,
+ scale_estimation_params.scale_steps,
+ scale_estimation_params.weight_penalty,
+ )
+ scales = scale_algo.apply(model, graph)
+
+ if self._lora_correction:
+ lora_correction_params = self._advanced_parameters.lora_correction_params
+ lora_correction_algo = LoraCorrectionAlgorithm(activations, lora_correction_params)
+ description += " with correction of low-rank adapters"
# Sort weight params to start compression with the bigger constants. This lowers peak memory footprint.
all_weight_params = sorted(all_weight_params, key=lambda wp: wp.num_weights, reverse=True)
+ all_weight_sizes = [wp.num_weights for wp in all_weight_params]
# Compress model using weight compression parameters
transformed_model = self._backend_entity.transform_model(
model,
graph,
- track(all_weight_params, description="Applying Weight Compression"),
+ track(all_weight_params, description=description, weights=all_weight_sizes),
scales,
zero_points,
+ lora_correction_algo,
)
self._backend_entity.dump_parameters(
@@ -427,6 +446,8 @@ def apply(
"awq": self._awq,
"scale_estimation": self._scale_estimation,
"gptq": self._gptq,
+ "lora_correction": self._lora_correction,
+ "advanced_parameters": convert_to_dict_recursively(self._advanced_parameters),
},
algo_name="weight_compression",
)
@@ -444,7 +465,7 @@ def _get_activation_node_and_port(self, node: NNCFNode, nncf_graph: NNCFGraph) -
:return: Tuple with the activation node and port id.
"""
activation_port = self._backend_entity.get_activation_port_id(node, nncf_graph)
- activation_edge = nncf_graph.get_input_edges(node)[activation_port]
+ activation_edge = nncf_graph.get_input_edge_by_port_id(node, activation_port)
activation_node = activation_edge.from_node
port_id = activation_edge.output_port_id
return activation_node, port_id
@@ -526,7 +547,7 @@ def _get_activations(
statistics_aggregator = StatisticsAggregatorFactory.create(model, dataset)
statistics_aggregator.register_statistic_points(statistic_container)
- if self._gptq:
+ if self._gptq and not self._awq:
self._gptq_statistics = self._gptq_algo.get_statistic_points(
model, graph, nodes_to_compress, self._backend_entity
)
diff --git a/nncf/quantization/algorithms/weight_compression/awq.py b/nncf/quantization/algorithms/weight_compression/awq.py
index 5f160575195..c0c05d76e5b 100644
--- a/nncf/quantization/algorithms/weight_compression/awq.py
+++ b/nncf/quantization/algorithms/weight_compression/awq.py
@@ -25,9 +25,10 @@
from nncf.common.utils.backend import BackendType
from nncf.common.utils.backend import get_backend
from nncf.quantization.algorithms.algorithm import Algorithm
+from nncf.quantization.algorithms.weight_compression.activation_stats import process_stats
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_dequantization
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_integer_quantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_quantization
from nncf.quantization.passes import transform_to_inference_graph
from nncf.tensor import functions as fns
@@ -101,9 +102,6 @@ def _set_backend_entity(self, model: TModel) -> None:
Creates a helper class with a backed-specific logic of the algorithm.
:param model: Backend-specific input model.
- :param all_weight_params: List of all weight parameters.
- :param nodes_to_compress: List of nodes for processing.
- :param activations: The input activations of the layers considered for compression.
"""
model_backend = get_backend(model)
@@ -135,7 +133,7 @@ def apply(
"""
matches = []
- inference_nncf_graph = transform_to_inference_graph(deepcopy(graph), [], [], [])
+ inference_nncf_graph = transform_to_inference_graph(deepcopy(graph), [], [], [], [])
nx_graph = inference_nncf_graph.get_nx_graph_copy()
for _, pattern_graph in self._patterns.items():
matches.extend(find_subgraphs_matching_pattern(nx_graph, pattern_graph(), strict=False))
@@ -197,17 +195,7 @@ def apply(
config = wp.compression_config
- stats = self._activations[k]
- X = fns.stack([fns.mean(stat, axis=0) for stat in stats])
- X = fns.transpose(X)
-
- s = fns.max(fns.abs(X), axis=1)
-
- if X.shape[1] > self._subset_size:
- lens = [stat.shape[0] for stat in stats]
- step = X.shape[1] // self._subset_size
- idxs = [i[0] for i in sorted(enumerate(lens), key=lambda x: -x[1])][::step]
- X = X[:, idxs]
+ s, X = process_stats(self._activations[k], self._subset_size)
top_k = max(int(s.shape[0] * self._percent_to_apply), 1)
topk_idxs = fns.argsort(-s)[:top_k]
@@ -257,10 +245,10 @@ def apply(
for _ in range(self._steps):
cur_scale = gscale**alpha
- g_compressed_weighs, g_c_scale, g_c_zp = do_integer_quantization(
+ g_compressed_weighs, g_c_scale, g_c_zp = do_int_quantization(
gweight * cur_scale, reduction_axis, awq_config
)
- g_decompressed_weighs = do_dequantization(g_compressed_weighs, g_c_scale, g_c_zp)
+ g_decompressed_weighs = do_int_dequantization(g_compressed_weighs, g_c_scale, g_c_zp)
sacts = gacts / fns.unsqueeze(cur_scale, 1)
cur_out = fns.matmul(g_decompressed_weighs, sacts)
diff --git a/nncf/quantization/algorithms/weight_compression/backend.py b/nncf/quantization/algorithms/weight_compression/backend.py
index 324ce1089ad..c14b860a093 100644
--- a/nncf/quantization/algorithms/weight_compression/backend.py
+++ b/nncf/quantization/algorithms/weight_compression/backend.py
@@ -127,6 +127,34 @@ def transform_model(
:return: The transformed model.
"""
+ @abstractmethod
+ def insert_adapters(
+ self, wc_params: WeightCompressionParameters, lora_A: Tensor, lora_B: Tensor, int8_lora: bool
+ ) -> None:
+ """
+ Expands a model's execution graph following the Low-Rank Adaptation (LoRA) concept.
+
+ It inserts two additional Linear layers with weight matrices of low rank that are executed in parallel to the
+ target Linear layer.
+
+ Before insertion:
+
+ ----INPUT
+ \
+ orig.MM--------------------------------OUTPUT
+
+ After insertion:
+
+ ----INPUT ----lora_A.MM----lora_B.MM----\
+ \ add----OUTPUT
+ orig.MM--------------------------/
+
+ :param wc_params: Parameters for weight compression.
+ :param lora_A: weights for the first LoRA matrix.
+ :param lora_B: weights for the second LoRA matrix.
+ :param int8_lora: indicates whether the LoRA matrices should be compressed to 8-bit.
+ """
+
@staticmethod
@abstractmethod
def target_point(target_type: TargetType, target_node_name: str, port_id: int) -> TargetPoint:
diff --git a/nncf/quantization/algorithms/weight_compression/gptq.py b/nncf/quantization/algorithms/weight_compression/gptq.py
index fe179aa1957..bd6518c86ad 100644
--- a/nncf/quantization/algorithms/weight_compression/gptq.py
+++ b/nncf/quantization/algorithms/weight_compression/gptq.py
@@ -25,12 +25,13 @@
from nncf.quantization.algorithms.weight_compression.backend import WeightCompressionAlgoBackend
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionConfig
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
+from nncf.quantization.algorithms.weight_compression.scale_estimation import ScaleEstimation
from nncf.quantization.algorithms.weight_compression.weight_lowering import calculate_integer_quantization_params
from nncf.quantization.algorithms.weight_compression.weight_lowering import calculate_nf4_scale
-from nncf.quantization.algorithms.weight_compression.weight_lowering import calculate_nf4_weight
from nncf.quantization.algorithms.weight_compression.weight_lowering import calculate_quantized_weight
-from nncf.quantization.algorithms.weight_compression.weight_lowering import decompress_nf4_weight
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_nf4_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_nf4_quantization
from nncf.tensor import Tensor
from nncf.tensor import functions as fns
from nncf.tensor.definitions import TensorDataType
@@ -44,10 +45,7 @@ class GPTQ:
"""
def __init__(
- self,
- damp_percent: float = 0.1,
- block_size: int = 128,
- subset_size: int = 128,
+ self, damp_percent: float = 0.1, block_size: int = 128, subset_size: int = 128, scale_estimation: bool = False
):
"""
:param damp_percent: The percent of the average Hessian diagonal to use for dampening,
@@ -58,6 +56,7 @@ def __init__(
self._damp_percent = damp_percent
self._block_size = block_size
self._subset_size = subset_size
+ self._scale_estimation = scale_estimation
self._backend = None
self._backend_entity = None
@@ -124,10 +123,9 @@ def apply(
CompressWeightsMode.INT8_SYM,
]:
continue
- assert len(inputs) == 1
_, input_tensors = next(iter(inputs.items()))
hessian = self._calculate_hessian(node, input_tensors)
- scale, zero_point = self._quantize_weights(model, graph, wc_params, hessian)
+ scale, zero_point = self._quantize_weights(model, graph, wc_params, hessian, input_tensors)
scales[wc_params.weight_name] = scale
zero_points[wc_params.weight_name] = zero_point
@@ -193,7 +191,12 @@ def _calculate_hessian(self, node: NNCFNode, inputs: List[Tensor]) -> Tensor:
return hessian
def _quantize_weights(
- self, model: TModel, graph: NNCFGraph, wc_params: WeightCompressionParameters, hessian: Tensor
+ self,
+ model: TModel,
+ graph: NNCFGraph,
+ wc_params: WeightCompressionParameters,
+ hessian: Tensor,
+ inputs: List[Tensor],
):
"""
Quantizes the weights of the model based on the calculated Hessian matrix.
@@ -260,19 +263,35 @@ def _quantize_weights(
scale = calculate_nf4_scale(weight_tensor[:, (i1 + i) : (i1 + i + group_size)], reduction_axes)
scales.append(scale)
else:
- scale, zero_point = calculate_integer_quantization_params(
- weight_tensor[:, (i1 + i) : (i1 + i + group_size)], reduction_axes, block_compression_config
- )
- scales.append(scale)
- zero_points.append(zero_point)
+ if self._scale_estimation and block_compression_config.num_bits == 4:
+ activations = [inp.squeeze()[:, (i1 + i) : (i1 + i + group_size)] for inp in inputs]
+ scale, zero_point = ScaleEstimation.calculate_quantization_params(
+ self._backend_entity,
+ activations,
+ weight_tensor[:, (i1 + i) : (i1 + i + group_size)],
+ reduction_axes,
+ wc_params.compression_config,
+ )
+ scales.append(scale.squeeze(axis=1))
+ zero_points.append(zero_point if zero_point is None else zero_point.squeeze(axis=1))
+ else:
+ scale, zero_point = calculate_integer_quantization_params(
+ weight_tensor[:, (i1 + i) : (i1 + i + group_size)],
+ reduction_axes,
+ block_compression_config,
+ )
+ scales.append(scale)
+ zero_points.append(zero_point)
if block_compression_config.mode == CompressWeightsMode.NF4:
- compressed_weights = calculate_nf4_weight(fns.unsqueeze(weight_col, 1), scales[-1])
- quantized_col = decompress_nf4_weight(compressed_weights, scales[-1])
+ compressed_weights = do_nf4_quantization(
+ fns.unsqueeze(weight_col, 1), scales[-1], is_normalized_weight=False
+ )
+ quantized_col = do_nf4_dequantization(compressed_weights, scales[-1], reduction_axis=-1)
else:
compressed_weights = calculate_quantized_weight(
fns.unsqueeze(weight_col, 1), block_compression_config, scales[-1], zero_points[-1]
)
- quantized_col = do_dequantization(compressed_weights, scales[-1], zero_points[-1])
+ quantized_col = do_int_dequantization(compressed_weights, scales[-1], zero_points[-1])
quantized_col = fns.flatten(quantized_col)
quantized_block[:, i] = quantized_col
loss_block[:, i] = (weight_col - quantized_col) ** 2 / hessian_diag_val**2
diff --git a/nncf/quantization/algorithms/weight_compression/lora_correction.py b/nncf/quantization/algorithms/weight_compression/lora_correction.py
new file mode 100644
index 00000000000..8907cb64a2c
--- /dev/null
+++ b/nncf/quantization/algorithms/weight_compression/lora_correction.py
@@ -0,0 +1,269 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from pathlib import Path
+from typing import Dict, List, Optional, Tuple
+
+import matplotlib.pyplot as plt
+import pandas as pd
+
+from nncf.common.logging import nncf_logger
+from nncf.common.utils.debug import DEBUG_LOG_DIR
+from nncf.common.utils.debug import is_debug
+from nncf.parameters import CompressWeightsMode
+from nncf.quantization.advanced_parameters import AdvancedLoraCorrectionParameters
+from nncf.quantization.algorithms.weight_compression.activation_stats import process_stats
+from nncf.quantization.algorithms.weight_compression.config import WeightCompressionConfig
+from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_nf4_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_nf4_quantization
+from nncf.tensor import Tensor
+from nncf.tensor import functions as fns
+from nncf.tensor.definitions import TensorDataType
+
+
+class DebugInterface:
+ """
+ Utility class to collect and dump debug information of the Lora Correction algorithm.
+ """
+
+ def __init__(self):
+ self._noise_per_layer = {}
+
+ def add_noises(self, layer_name: str, value: float):
+ self._noise_per_layer[layer_name] = value
+
+ def dump_data(self):
+ if not self._noise_per_layer:
+ return
+ dump_dir = Path(DEBUG_LOG_DIR) / "lora"
+ dump_dir.mkdir(parents=True, exist_ok=True)
+
+ layer_dir = dump_dir / "per_layer"
+ layer_dir.mkdir(parents=True, exist_ok=True)
+
+ df = pd.DataFrame(self._noise_per_layer)
+ losses_path = dump_dir / "noises.csv"
+ nncf_logger.debug(f"Quantization noise through the correction process is saved to: {losses_path}")
+ df.to_csv(losses_path)
+
+ for name in df.columns:
+ plt.plot(df[name])
+ filename = name.replace("/", "_") + ".jpg"
+ plt.savefig(layer_dir / filename)
+ plt.clf()
+
+ delta = df.iloc[0] - df.iloc[-1]
+ nncf_logger.debug(f"Is quantization noise reduced for all layers: {all(delta > 0)}")
+
+ _, ax = plt.subplots(1)
+ ax.plot(delta)
+ ax.set_xticklabels([])
+ delta_path = dump_dir / "qnoise_change.jpg"
+ nncf_logger.debug(f"Saving change in quantization noise for each layer to: {delta_path}")
+ plt.savefig(delta_path)
+ plt.clf()
+
+
+class LoraCorrectionAlgorithm:
+ """
+ Contains implementation of LoRA Correction algorithm.
+
+ The method reduces quantization noise after weight compression using low rank adapters.
+ """
+
+ def __init__(self, activations: Dict[str, List[Tensor]], lora_correction_params: AdvancedLoraCorrectionParameters):
+ """
+ :param activations: The input activations of the layers considered for compression.
+ :param lora_correction_params: parameters to configure the algorithm.
+ """
+ self._activations = activations
+ self._lora_correction_params = lora_correction_params
+ self._debug_interface = DebugInterface() if is_debug() else None
+
+ def __del__(self):
+ if self._debug_interface is not None:
+ self._debug_interface.dump_data()
+
+ @property
+ def use_int8_adapters(self) -> bool:
+ return self._lora_correction_params.use_int8_adapters
+
+ def is_applicable(self, wc_params: WeightCompressionParameters):
+ return wc_params.compression_config.num_bits == 4
+
+ def calculate_adapters(
+ self, weight: Tensor, compressed_weight: Tensor, wc_params: WeightCompressionParameters
+ ) -> Tuple[Tensor, Tensor, List[float]]:
+ """
+ Calculates low rank matrices for a given original and compressed weights.
+
+ :param weight: original floating-point weight matrix.
+ :param compressed_weight: compressed weight matrix.
+ :param wc_params: parameters of weight compression.
+ :return: two low rank matrices in the order of execution of corresponding linear layers.
+ """
+ layer_name = wc_params.node_with_weight.node_name
+ layer_activations = self._activations[layer_name]
+ is_debug = self._debug_interface is not None
+ lora_A, lora_B, mean_noises = self.calculate_low_rank_matrices(
+ weight,
+ compressed_weight,
+ wc_params.compression_config,
+ wc_params.reduction_axes,
+ self._lora_correction_params,
+ layer_activations,
+ is_debug,
+ )
+ if is_debug:
+ self._debug_interface.add_noises(layer_name, mean_noises)
+ return lora_A, lora_B
+
+ @staticmethod
+ def calculate_low_rank_matrices(
+ weight: Tensor,
+ compressed_weight: Tensor,
+ compression_config: WeightCompressionConfig,
+ reduction_axes: Tuple[int, ...],
+ lora_correction_params: AdvancedLoraCorrectionParameters,
+ layer_activations: List[Tensor],
+ is_debug: Optional[bool] = False,
+ ):
+ """
+ Calculates low rank matrices for a given original and compressed weights.
+ The low rank matrices obtained by applying singular value decomposition (SVD) with lower rank for the
+ difference between original weight and fake-quantized ones.
+ Then, an iterative algorithm refines them. It solves a system of linear equations alternately fixing
+ one matrix, then another.
+
+ :param weight: original floating-point weight matrix.
+ :param compressed_weight: compressed weight matrix.
+ :param compression_config: configuration of weight compression for the weight node.
+ :param reduction_axes: axes along which different statistics reduced.
+ :param lora_correction_params: parameters to configure the algorithm.
+ :param layer_activations: list of activation statistics for a layer that contains
+ N tensors with shape [SeqLen, HiddenDim].
+ :param is_debug: whether to collect debug information, defaults to False.
+ :return: two low rank matrices in the order of execution of corresponding linear layers and list of mean noises.
+ Noises are collected from each step of the algorithm if debug was enabled.
+ First low rank matrix has shape=[R, H], the second - [O, R], where R - rank, H/O - hidden/output dimension.
+ """
+ rank, num_iterations, apply_regularization, subset_size = (
+ lora_correction_params.adapter_rank,
+ lora_correction_params.num_iterations,
+ lora_correction_params.apply_regularization,
+ lora_correction_params.subset_size,
+ )
+ mode = compression_config.mode
+ assert len(reduction_axes) == 1, "Assumed a single reduction axis"
+ reduction_axis = reduction_axes[0] if compression_config.group_size != -1 else -1
+ if mode in (CompressWeightsMode.INT4_SYM, CompressWeightsMode.INT4_ASYM):
+ fq_weights = do_int_dequantization(
+ compressed_weight.tensor,
+ compressed_weight.scale,
+ compressed_weight.zero_point,
+ reduction_axis,
+ )
+ elif mode == CompressWeightsMode.NF4:
+ indexes = do_nf4_quantization(compressed_weight.tensor, compressed_weight.scale, is_normalized_weight=True)
+ fq_weights = do_nf4_dequantization(indexes, compressed_weight.scale, reduction_axis)
+ else:
+ raise ValueError(
+ f"{mode.value} mode is invalid for Lora Correction algorithm. Supported modes: INT4_SYM, INT4_ASYM, NF4"
+ )
+ # fq_w + residual = w => residual = w - fq_w
+ svd_residual = fns.astype(weight - fq_weights, TensorDataType.float32)
+
+ # O stands for output dimension, H - input dimension or hidden size, SS - samples size, R - rank.
+ # reduction axes is all axes except output dimension in linear/conv layers.
+ if reduction_axes[0] == 1:
+ svd_residual = fns.transpose(svd_residual)
+ residual = svd_residual.clone() # [H, O]
+
+ s, X = process_stats(layer_activations, subset_size) # [H], [H, SS]
+ X = fns.transpose(X) # [SS, H]
+ if compression_config.group_size > 0:
+ # Multiply residual of weights by maximum channel magnitude of activations normalized per quantization
+ # group. As a consequence, weights corresponding to a "noisy" activations has a higher error to correct.
+ # Empirically, it leads to a better accuracy.
+ gs = compression_config.group_size
+ n_gs = s.shape[0] // gs
+ for i in range(n_gs):
+ offset = i * gs
+ denum = fns.sum(s[offset : offset + gs])
+ s[offset : offset + gs] = s[offset : offset + gs] / denum
+ denum = fns.max(s[offset : offset + gs])
+ s[offset : offset + gs] = s[offset : offset + gs] / denum
+ s = fns.expand_dims(s, 1) # [H, 1]
+ svd_residual = svd_residual * s # [H, O]
+
+ # Low-rank approximation.
+ U_full, S_full, V_full = fns.linalg.svd(svd_residual, full_matrices=False)
+ U = U_full[:, :rank] # [H, R]
+ S = fns.diag(S_full[:rank]) # [R, R]
+ V = V_full[:rank, :] # [R, O]
+ V = S @ V # [R, O]
+
+ # An iterative algorithm for correction (refinement) of the low-rank adapters.
+ mean_noises = []
+ noise = X @ residual # [SS, H] * [H, O] = [SS, O]
+ for i in range(num_iterations):
+ # Part 1: U is fixed, find V.
+ XU = X @ U # [SS, R]
+ if not apply_regularization:
+ # X @ U @ V = noise ---> a @ x = b
+ new_V = fns.linalg.lstsq(XU, noise, driver="gelsy")
+ else:
+ # 1) U @ V = res <--- regularization
+ # 2) X @ U @ V = noise
+ # |U X @ U| @ V = |res noise|
+ UXU = fns.concatenate([U, XU], axis=0) # [H + SS, R]
+ noiseR = fns.concatenate([residual, noise], axis=0) # [H + SS, O]
+ new_V = fns.linalg.lstsq(UXU, noiseR, driver="gelsy")
+ if is_debug:
+ if i == 0:
+ init_noise = noise
+ mean_noise_before_svd = fns.mean(fns.abs(init_noise)).item()
+ mean_noise_after_svd = fns.mean(fns.abs(init_noise - XU @ V)).item()
+ mean_noises.extend([mean_noise_before_svd, mean_noise_after_svd])
+ mean_noise_after_correct = fns.mean(fns.abs(init_noise - XU @ new_V)).item()
+ mean_noises.append(mean_noise_after_correct)
+ nncf_logger.debug(
+ f"{i} Correction U: {mean_noise_before_svd}, {mean_noise_after_svd}, {mean_noise_after_correct}"
+ )
+ V = new_V
+
+ # Part 2: V is fixed, find U.
+ VI = fns.linalg.pinv(V) # [O, R]
+ noiseVI = noise @ VI # [R, SS]
+ if not apply_regularization:
+ # VI = V^-1
+ # 1) X @ U @ V = noise
+ # 1) X @ U = noise @ VI ---> a @ x = b
+ U = fns.linalg.lstsq(X, noiseVI, driver="gelsy")
+ else:
+ # VI = V^-1, E - identity matrix
+ # 1) U @ V = res <--- regularization
+ # 1) E @ U = res @ VI
+ # 2) X @ U @ V = noise
+ # 2) X @ U = noise @ VI
+ # |E X| = | (UI @ res) (UI @ noise) |
+ E = fns.eye(U.shape[0], backend=U.backend, dtype=U.dtype) # [H, H]
+ EX = fns.concatenate([E, X], axis=0) # [H + SS, H]
+ noiseR = fns.concatenate([residual @ VI, noiseVI], axis=0) # [H + SS, R]
+ U = fns.linalg.lstsq(EX, noiseR, driver="gelsy")
+ if is_debug:
+ mean_noise_after_correct = fns.mean(fns.abs(init_noise - X @ U @ V)).item()
+ mean_noises.append(mean_noise_after_correct)
+ nncf_logger.debug(
+ f"{i} Correction V: {mean_noise_before_svd}, {mean_noise_after_svd}, {mean_noise_after_correct}"
+ )
+ return fns.transpose(U), fns.transpose(V), mean_noises
diff --git a/nncf/quantization/algorithms/weight_compression/mixed_precision.py b/nncf/quantization/algorithms/weight_compression/mixed_precision.py
index 1f211886529..63f90b2677c 100644
--- a/nncf/quantization/algorithms/weight_compression/mixed_precision.py
+++ b/nncf/quantization/algorithms/weight_compression/mixed_precision.py
@@ -19,8 +19,8 @@
from nncf.quantization.algorithms.weight_compression.backend import WeightCompressionAlgoBackend
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionConfig
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_dequantization
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_integer_quantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_quantization
from nncf.quantization.algorithms.weight_compression.weight_lowering import get_integer_quantization_error
from nncf.tensor import Tensor
from nncf.tensor import functions as fns
@@ -177,8 +177,8 @@ def _calc_weight_sensitivity(self, weight_param: WeightCompressionParameters) ->
if weight.dtype != TensorDataType.float32:
weight = weight.astype(TensorDataType.float32)
- compressed_weights, scale, zero_point = do_integer_quantization(weight, reduction_axes, backup_config)
- decompressed_weight = do_dequantization(compressed_weights, scale, zero_point)
+ compressed_weights, scale, zero_point = do_int_quantization(weight, reduction_axes, backup_config)
+ decompressed_weight = do_int_dequantization(compressed_weights, scale, zero_point)
decompressed_weight = decompressed_weight.reshape(orig_shape)
return fns.linalg.norm(decompressed_weight - weight, ord="fro").item()
diff --git a/nncf/quantization/algorithms/weight_compression/openvino_backend.py b/nncf/quantization/algorithms/weight_compression/openvino_backend.py
index 53011c39d41..78313374d9f 100644
--- a/nncf/quantization/algorithms/weight_compression/openvino_backend.py
+++ b/nncf/quantization/algorithms/weight_compression/openvino_backend.py
@@ -34,6 +34,7 @@
from nncf.quantization.algorithms.weight_compression.backend import WeightCompressionAlgoBackend
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionConfig
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
+from nncf.quantization.algorithms.weight_compression.lora_correction import LoraCorrectionAlgorithm
from nncf.quantization.algorithms.weight_compression.weight_lowering import compress_weight
from nncf.tensor import Tensor
from nncf.tensor.definitions import TensorDataType
@@ -131,6 +132,110 @@ def set_weight(
del const_node
+ def insert_adapters(
+ self, wc_params: WeightCompressionParameters, lora_A: Tensor, lora_B: Tensor, int8_lora: bool
+ ) -> None:
+ input_node = self.name_to_node_mapping[wc_params.node_with_weight.node_name].input_value(0)
+ activation_dtype = input_node.get_element_type()
+ should_add_convert_node = activation_dtype != ov.Type.f16
+ mm_node = self.name_to_node_mapping[wc_params.node_with_weight.node_name]
+
+ if int8_lora:
+ const_node_name = wc_params.node_with_weight.node_name
+ int8_compression_config = WeightCompressionConfig(mode=CompressWeightsMode.INT8_ASYM, group_size=-1)
+ A_W, _ = self._create_compression_subgraph(
+ weight=lora_A,
+ compression_config=int8_compression_config,
+ reduction_axes=wc_params.reduction_axes,
+ const_node_name=const_node_name + "_lora_A",
+ weight_port_id=1,
+ const_dtype=activation_dtype,
+ should_add_convert_node=should_add_convert_node,
+ )
+ B_W, _ = self._create_compression_subgraph(
+ weight=lora_B,
+ compression_config=int8_compression_config,
+ reduction_axes=wc_params.reduction_axes,
+ const_node_name=const_node_name + "_lora_B",
+ weight_port_id=1,
+ const_dtype=activation_dtype,
+ should_add_convert_node=should_add_convert_node,
+ )
+ else:
+ A_W = opset.constant(lora_A.data)
+ B_W = opset.constant(lora_B.data)
+
+ A_MM = opset.matmul(input_node, A_W, transpose_a=False, transpose_b=True)
+ B_MM = opset.matmul(A_MM, B_W, transpose_a=False, transpose_b=True)
+
+ node_output_port = mm_node.output(0)
+ node_output_source_ports = node_output_port.get_target_inputs()
+ add = opset.add(mm_node, B_MM)
+ for node_output_source_port in node_output_source_ports:
+ node_output_source_port.replace_source_output(add.output(0))
+
+ def _create_compression_subgraph(
+ self,
+ weight: Tensor,
+ compression_config: WeightCompressionConfig,
+ reduction_axes: Tuple[int, ...],
+ const_node_name: str,
+ weight_port_id: int,
+ const_dtype,
+ should_add_convert_node: bool,
+ layer_scales: Optional[Tensor] = None,
+ layer_zero_points: Optional[Tensor] = None,
+ ):
+ scale_dtype = ov.Type.f16
+ if compression_config.mode == CompressWeightsMode.NF4:
+ compression_dtype = ov.Type.nf4
+ elif compression_config.mode == CompressWeightsMode.E2M1:
+ compression_dtype = ov.Type.f4e2m1
+ scale_dtype = ov.Type.f8e8m0
+ elif compression_config.mode == CompressWeightsMode.INT4_SYM:
+ compression_dtype = ov.Type.i4
+ elif compression_config.mode == CompressWeightsMode.INT4_ASYM:
+ compression_dtype = ov.Type.u4
+ elif compression_config.mode == CompressWeightsMode.INT8_SYM:
+ compression_dtype = ov.Type.i8
+ elif compression_config.mode == CompressWeightsMode.INT8_ASYM:
+ compression_dtype = ov.Type.u8
+ else:
+ raise ValueError(f"{compression_config.mode.value} is not supported.")
+
+ original_shape = weight.shape
+ compressed_weight = compress_weight(weight, reduction_axes, compression_config, layer_scales, layer_zero_points)
+
+ compressed_const = opset.constant(compressed_weight.tensor.data, dtype=compression_dtype, name=const_node_name)
+ converted_const = opset.convert(compressed_const, ov.Type.f16)
+ if compressed_weight.zero_point is not None and compressed_weight.tensor.dtype == TensorDataType.uint8:
+ zero_point_const = opset.constant(
+ compressed_weight.zero_point.data,
+ dtype=compression_dtype,
+ name=f"{const_node_name}/zero_point",
+ )
+ converted_zero_point = opset.convert(zero_point_const, ov.Type.f16)
+ converted_const = opset.subtract(
+ converted_const, converted_zero_point, name=f"{const_node_name}/zero_point/subtract"
+ )
+
+ scale_const = opset.constant(compressed_weight.scale.data, dtype=scale_dtype, name=f"{const_node_name}/scale")
+ if scale_dtype != ov.Type.f16:
+ scale_const = opset.convert(scale_const, ov.Type.f16)
+
+ mul = opset.multiply(
+ converted_const,
+ scale_const,
+ name=f"{const_node_name}/fq_weights_{weight_port_id}",
+ )
+
+ if compression_config.group_size != -1:
+ mul = opset.reshape(mul, output_shape=original_shape, special_zero=False)
+
+ if should_add_convert_node:
+ mul = opset.convert(mul, const_dtype, name=f"{const_node_name}/fq_weights_{weight_port_id}/convert")
+ return mul, compressed_weight
+
def transform_model(
self,
model: ov.Model,
@@ -138,31 +243,15 @@ def transform_model(
weight_compression_parameters: Iterable[WeightCompressionParameters],
precomputed_scales: Dict[str, Tensor] = None,
precomputed_zero_points: Dict[str, Tensor] = None,
+ lora_correction_algo: LoraCorrectionAlgorithm = None,
) -> ov.Model:
for wc_params in weight_compression_parameters:
- compression_config = wc_params.compression_config
- scale_dtype = ov.Type.f16
- if compression_config.mode == CompressWeightsMode.NF4:
- compression_dtype = ov.Type.nf4
- elif compression_config.mode == CompressWeightsMode.E2M1:
- compression_dtype = ov.Type.f4e2m1
- scale_dtype = ov.Type.f8e8m0
- elif compression_config.mode == CompressWeightsMode.INT4_SYM:
- compression_dtype = ov.Type.i4
- elif compression_config.mode == CompressWeightsMode.INT4_ASYM:
- compression_dtype = ov.Type.u4
- elif compression_config.mode == CompressWeightsMode.INT8_SYM:
- compression_dtype = ov.Type.i8
- elif compression_config.mode == CompressWeightsMode.INT8_ASYM:
- compression_dtype = ov.Type.u8
- else:
- raise ValueError(f"{compression_config.mode.value} is not supported.")
-
const_attributes = wc_params.node_with_weight.layer_attributes.constant_attributes[wc_params.weight_port_id]
const_node_name = const_attributes["name"]
const_node = self.name_to_node_mapping[const_node_name]
const_node_output = const_node.output(0)
const_dtype = const_node_output.get_element_type()
+ weight = Tensor(get_const_value(const_node))
should_add_convert_node = False
if const_dtype != ov.Type.f16:
@@ -171,55 +260,30 @@ def transform_model(
should_add_convert_node = True
break
- weight = Tensor(get_const_value(const_node))
- original_shape = weight.shape
- compressed_weight = compress_weight(
- weight,
- wc_params.reduction_axes,
- compression_config,
- None if precomputed_scales is None else precomputed_scales.get(wc_params.weight_name),
- None if precomputed_zero_points is None else precomputed_zero_points.get(wc_params.weight_name),
- )
-
- compressed_const = opset.constant(
- compressed_weight.tensor.data, dtype=compression_dtype, name=const_node_name
+ layer_scales = None if precomputed_scales is None else precomputed_scales.get(wc_params.weight_name)
+ layer_zero_points = (
+ None if precomputed_zero_points is None else precomputed_zero_points.get(wc_params.weight_name)
)
- converted_const = opset.convert(compressed_const, ov.Type.f16)
- if compressed_weight.zero_point is not None and compressed_weight.tensor.dtype == TensorDataType.uint8:
- zero_point_const = opset.constant(
- compressed_weight.zero_point.data,
- dtype=compression_dtype,
- name=f"{const_node_name}/zero_point",
- )
- converted_zero_point = opset.convert(zero_point_const, ov.Type.f16)
- converted_const = opset.subtract(
- converted_const, converted_zero_point, name=f"{const_node_name}/zero_point/subtract"
- )
-
- scale_const = opset.constant(
- compressed_weight.scale.data, dtype=scale_dtype, name=f"{const_node_name}/scale"
- )
- if scale_dtype != ov.Type.f16:
- scale_const = opset.convert(scale_const, ov.Type.f16)
-
- mul = opset.multiply(
- converted_const,
- scale_const,
- name=f"{const_node_name}/fq_weights_{wc_params.weight_port_id}",
+ mul, compressed_weight = self._create_compression_subgraph(
+ weight=weight,
+ compression_config=wc_params.compression_config,
+ reduction_axes=wc_params.reduction_axes,
+ const_node_name=const_node_name,
+ weight_port_id=wc_params.weight_port_id,
+ const_dtype=const_dtype,
+ should_add_convert_node=should_add_convert_node,
+ layer_scales=layer_scales,
+ layer_zero_points=layer_zero_points,
)
- if compression_config.group_size != -1:
- mul = opset.reshape(mul, output_shape=original_shape, special_zero=False)
-
- if should_add_convert_node:
- mul = opset.convert(
- mul, const_dtype, name=f"{const_node_name}/fq_weights_{wc_params.weight_port_id}/convert"
- )
-
mul_output = mul.output(0)
for target_input in const_node.output(0).get_target_inputs():
target_input.replace_source_output(mul_output)
+ if lora_correction_algo is not None and lora_correction_algo.is_applicable(wc_params):
+ adapters = lora_correction_algo.calculate_adapters(weight, compressed_weight, wc_params)
+ self.insert_adapters(wc_params, *adapters, int8_lora=lora_correction_algo.use_int8_adapters)
+
# reset name_to_node_mapping
self.name_to_node_mapping = None
diff --git a/nncf/quantization/algorithms/weight_compression/scale_estimation.py b/nncf/quantization/algorithms/weight_compression/scale_estimation.py
index 557db0886ca..712c5fd955d 100644
--- a/nncf/quantization/algorithms/weight_compression/scale_estimation.py
+++ b/nncf/quantization/algorithms/weight_compression/scale_estimation.py
@@ -19,16 +19,18 @@
from nncf.common.tensor_statistics.statistic_point import StatisticPointsContainer
from nncf.common.utils.backend import BackendType
from nncf.common.utils.backend import get_backend
+from nncf.quantization.algorithms.weight_compression.activation_stats import process_stats
+from nncf.quantization.algorithms.weight_compression.backend import WeightCompressionAlgoBackend
+from nncf.quantization.algorithms.weight_compression.config import WeightCompressionConfig
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_dequantization
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_integer_quantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_quantization
from nncf.quantization.algorithms.weight_compression.weight_lowering import reshape_weight_for_grouped_quantization
+from nncf.tensor import Tensor
from nncf.tensor import TensorDataType
from nncf.tensor import functions as fns
TModel = TypeVar("TModel")
-TTensor = TypeVar("TTensor")
-TWeightType = TypeVar("TWeightType")
class ScaleEstimation:
@@ -36,13 +38,15 @@ class ScaleEstimation:
Scale estimation algorithm implementation.
"""
+ compress_decompress_cache = {}
+
def __init__(
self,
model: TModel,
name_to_node_mapping: Dict[str, Any],
all_weight_params: List[WeightCompressionParameters],
nodes_to_compress: List[NNCFNode],
- activations: Optional[Dict[str, TTensor]] = None,
+ activations: Optional[Dict[str, List[Tensor]]] = None,
subset_size: int = 32,
initial_steps: int = 5,
scale_steps: int = 10,
@@ -102,7 +106,7 @@ def apply(
graph: NNCFGraph,
statistic_points: Optional[StatisticPointsContainer] = None,
dataset: Optional[Dataset] = None,
- ) -> Dict[str, TTensor]:
+ ) -> Dict[str, Tensor]:
"""
Estimates better scale for the int4 nodes in the model.
Minimizes per-group difference between floating point MatMul and
@@ -117,8 +121,7 @@ def apply(
:return: Dict with pairs (weight name, estimated scale).
"""
- compress_decompress_cache = {}
- res = dict()
+ scales = dict()
for wp in track(self._all_weight_params, description="Applying Scale Estimation"):
weight_name = wp.weight_name
@@ -126,185 +129,222 @@ def apply(
config = wp.compression_config
if config.num_bits != 4 or node_name not in self._activations:
- res[weight_name] = None
+ scales[weight_name] = None
continue
stats = self._activations[node_name]
- reduction_axis = wp.reduction_axes[0]
weight_data = self._backend_entity.get_weight_names_and_port_ids(wp.node_with_weight, graph)
if len(weight_data) != 1: # not supported by the algorithm
continue
_, weight_port_id = weight_data[0]
- X = fns.stack([fns.mean(stat, axis=0) for stat in stats])
- X_full = fns.transpose(X)
-
- # prevent high memory and time consumption
- if X_full.shape[1] > self._subset_size:
- lens = [stat.shape[0] for stat in stats]
- step = X_full.shape[1] // self._subset_size
- idxs = [i[0] for i in sorted(enumerate(lens), key=lambda x: -x[1])][::step]
- X = X_full[:, idxs]
- else:
- X = X_full
-
- s = fns.max(fns.abs(X_full), axis=1)
-
weight = self._backend_entity.get_weight(wp.node_with_weight, weight_port_id, model, graph)
- weight = weight.astype(TensorDataType.float32)
- eps = fns.finfo(weight).eps
- if reduction_axis == 0:
- weight = fns.transpose(weight)
- reduction_axis = 1
+ scales[weight_name], _ = self.calculate_quantization_params(
+ self._backend_entity,
+ stats,
+ weight,
+ wp.reduction_axes,
+ config,
+ self._subset_size,
+ self._initial_steps,
+ self._scale_steps,
+ self._weight_penalty,
+ )
- group_size = config.group_size if config.group_size != -1 else weight.shape[reduction_axis]
- cur_config = deepcopy(config)
- cur_config.group_size = group_size
+ return scales
- original_weight = fns.zeros_like(weight) + weight
+ @staticmethod
+ def calculate_quantization_params(
+ backend_entity: WeightCompressionAlgoBackend,
+ activations: List[Tensor],
+ weight: Tensor,
+ reduction_axes: Tuple[int, ...],
+ config: WeightCompressionConfig,
+ subset_size: int = 32,
+ initial_steps: int = 5,
+ scale_steps: int = 10,
+ weight_penalty: float = -1.0,
+ ) -> Tensor:
+ """
+ Calculates the quantization parameters for a given set of weights and activations.
+ This function estimates the optimal quantization scale for weight compression by
+ minimizing the difference between floating-point operations and operations with
+ quantized weights.
+
+ The function uses an iterative process:
+ 1. Initial scale rectification based on activation statistics.
+ 2. A grid search to further refine the scale parameters.
+
+ :param backend_entity: The backend-specific implementation of the weight compression algorithm.
+ :param activations: List of activation tensors corresponding to the layers being quantized.
+ :param weight: The weight tensor that is being quantized.
+ :param reduction_axes: Tuple specifying the axes along which the reduction is performed for quantization.
+ :param config: Configuration parameters for the weight compression, including quantization settings.
+ :param subset_size: The number of samples to use for scale estimation. Defaults to 32.
+ :param initial_steps: The number of steps for initial scale rectification using activation statistics.
+ Defaults to 5.
+ :param scale_steps: The number of steps for refining the scale using a grid search. Defaults to 10.
+ :param weight_penalty: Penalty coefficient applied to the difference between floating-point
+ and quantized weights. A value of -1 disables the penalty. Defaults to -1.0.
+ :return: A tensor containing the calculated quantization scales and zero points if applicable.
+ """
+ reduction_axis = reduction_axes[0]
- compressed_weights, scale, zp = do_integer_quantization(original_weight, reduction_axis, cur_config)
- if zp is not None:
- zp = zp.astype(scale.dtype)
- q_weights = do_dequantization(compressed_weights, scale, zp, reduction_axis)
+ s, X = process_stats(activations, subset_size)
- s = fns.unsqueeze(s, 0)
- s, _ = reshape_weight_for_grouped_quantization(s, reduction_axis, group_size)
+ weight = weight.astype(TensorDataType.float32)
+ eps = fns.finfo(weight).eps
- original_weight, _ = reshape_weight_for_grouped_quantization(original_weight, reduction_axis, group_size)
+ if reduction_axis == 0:
+ weight = fns.transpose(weight)
+ reduction_axis = 1
- # all weight in group has importance based on corresponding input activations
- importance = fns.ones_like(original_weight)
- importance = importance * s
+ group_size = config.group_size if config.group_size != -1 else weight.shape[reduction_axis]
+ cur_config = deepcopy(config)
+ cur_config.group_size = group_size
- target, zero_mask = get_target_zero_mask(compressed_weights, zp)
- importance = fns.where(zero_mask, 0.0, importance)
-
- # normalize importances for every group of weights to make sum of them equal to 1.0
- denum = fns.sum(importance, axis=2, keepdims=True)
- importance = importance / (denum + eps)
-
- X, _ = reshape_weight_for_grouped_quantization(X, 0, group_size)
- q_weights, _ = reshape_weight_for_grouped_quantization(q_weights, reduction_axis, group_size)
- best_diffs = None
- result_scale = None
-
- fp_outs = fns.matmul(fns.transpose(original_weight, (1, 0, 2)), X)
- q_outs = fns.matmul(fns.transpose(q_weights, (1, 0, 2)), X)
-
- # metric for minimization with shape [C_OUT, N_GROUPS], N_GROUPS = C_IN / GROUP_SIZE
- min_max_scale_diffs = fns.mean((fp_outs - q_outs) ** 2, axis=-1)
- min_max_scale_diffs = fns.transpose(min_max_scale_diffs, (1, 0))
- if self._weight_penalty > 0.0:
- min_max_scale_diffs += self._weight_penalty * fns.mean((q_weights - original_weight) ** 2, axis=-1)
-
- zp_shape = zp.shape if zp is not None else None
- key = [(wp.compression_config.mode, wp.compression_config.num_bits) + q_weights.shape + scale.shape]
- if zp is not None:
- key += zp_shape
- key = tuple(key)
- if key in compress_decompress_cache:
- compress_decompress_model = compress_decompress_cache[key]["compress_decompress_model"]
- compress_model = compress_decompress_cache[key]["compress_model"]
- else:
- compress_decompress_model = self._backend_entity.get_compress_decompress_pipeline(
- wp.compression_config, q_weights.shape, scale.shape, zp_shape
- )
- compress_model = self._backend_entity.get_compress_pipeline(
- wp.compression_config, q_weights.shape, scale.shape, zp_shape
- )
- compress_decompress_cache[key] = {
- "compress_decompress_model": compress_decompress_model,
- "compress_model": compress_model,
- }
-
- zero_scale = 0.001
- zero_mask = zero_scale * zero_mask.astype(original_weight.dtype)
+ original_weight = fns.zeros_like(weight) + weight
- input_tensors = [original_weight.data, None]
- if zp is not None:
- input_tensors.append(zp.data)
- # iterative rectification of initial scale
- for i in range(self._initial_steps):
- near_to_ideal_scale = estimate_scales(original_weight, target, zero_mask, importance)
- input_tensors[1] = near_to_ideal_scale.data
+ compressed_weights, scale, zp = do_int_quantization(original_weight, reduction_axis, cur_config)
+ if zp is not None:
+ zp = zp.astype(scale.dtype)
+ q_weights = do_int_dequantization(compressed_weights, scale, zp, reduction_axis)
- out = compress_decompress_model(input_tensors)
- q_weights_ = fns.zeros_like(original_weight) + out
- q_outs = fns.matmul(fns.transpose(q_weights_, (1, 0, 2)), X)
+ s = fns.unsqueeze(s, 0)
+ s, _ = reshape_weight_for_grouped_quantization(s, reduction_axis, group_size)
- ideal_scale_diffs = fns.mean((fp_outs - q_outs) ** 2, axis=-1)
- ideal_scale_diffs = fns.transpose(ideal_scale_diffs, (1, 0))
- if self._weight_penalty > 0.0:
- ideal_scale_diffs += self._weight_penalty * fns.mean((q_weights_ - original_weight) ** 2, axis=-1)
+ original_weight, _ = reshape_weight_for_grouped_quantization(original_weight, reduction_axis, group_size)
- if best_diffs is None:
- best_diffs = min_max_scale_diffs
+ # all weight in group has importance based on corresponding input activations
+ importance = fns.ones_like(original_weight)
+ importance = importance * s
- mask = (ideal_scale_diffs > best_diffs).astype(best_diffs.dtype)
+ target, zero_mask = get_target_zero_mask(compressed_weights, zp)
+ importance = fns.where(zero_mask, 0.0, importance)
- best_diffs = mask * best_diffs + (1.0 - mask) * ideal_scale_diffs
+ # normalize importances for every group of weights to make sum of them equal to 1.0
+ denum = fns.sum(importance, axis=2, keepdims=True)
+ importance = importance / (denum + eps)
- mask = fns.unsqueeze(mask, axis=2)
+ X, _ = reshape_weight_for_grouped_quantization(X, 0, group_size)
+ q_weights, _ = reshape_weight_for_grouped_quantization(q_weights, reduction_axis, group_size)
+ best_diffs = None
+ result_scale = None
- if result_scale is None:
- near_to_ideal_scale = mask * scale + (1.0 - mask) * near_to_ideal_scale
- else:
- near_to_ideal_scale = mask * result_scale + (1.0 - mask) * near_to_ideal_scale
- result_scale = near_to_ideal_scale
- input_tensors[1] = near_to_ideal_scale.data
+ fp_outs = fns.matmul(fns.transpose(original_weight, (1, 0, 2)), X)
+ q_outs = fns.matmul(fns.transpose(q_weights, (1, 0, 2)), X)
- if i < self._initial_steps - 1:
- out = compress_model(input_tensors)
- compressed_weights = fns.zeros_like(original_weight) + out
- target, zero_mask = get_target_zero_mask(compressed_weights, zp)
- zero_mask = zero_scale * zero_mask.astype(original_weight.dtype)
+ # metric for minimization with shape [C_OUT, N_GROUPS], N_GROUPS = C_IN / GROUP_SIZE
+ min_max_scale_diffs = fns.mean((fp_outs - q_outs) ** 2, axis=-1)
+ min_max_scale_diffs = fns.transpose(min_max_scale_diffs, (1, 0))
+ if weight_penalty > 0.0:
+ min_max_scale_diffs += weight_penalty * fns.mean((q_weights - original_weight) ** 2, axis=-1)
- # iterative rectification of scale based on grid search
- for scale_steps in range(self._scale_steps):
- factor = 1.0 - 0.05 * scale_steps
- scaled_scale = factor * scale
+ zp_shape = zp.shape if zp is not None else None
+ key = (config.mode, config.num_bits) + q_weights.shape + scale.shape
+ if zp is not None:
+ key += zp_shape
+ if key in ScaleEstimation.compress_decompress_cache:
+ compress_decompress_model = ScaleEstimation.compress_decompress_cache[key]["compress_decompress_model"]
+ compress_model = ScaleEstimation.compress_decompress_cache[key]["compress_model"]
+ else:
+ compress_decompress_model = backend_entity.get_compress_decompress_pipeline(
+ config, q_weights.shape, scale.shape, zp_shape
+ )
+ compress_model = backend_entity.get_compress_pipeline(config, q_weights.shape, scale.shape, zp_shape)
+ ScaleEstimation.compress_decompress_cache[key] = {
+ "compress_decompress_model": compress_decompress_model,
+ "compress_model": compress_model,
+ }
+ scale_sign = scale / fns.abs(scale)
+ zero_scale = 0.001
+ zero_mask = zero_scale * zero_mask.astype(original_weight.dtype)
+
+ input_tensors = [original_weight.data, None]
+ if zp is not None:
+ input_tensors.append(zp.data)
+ # iterative rectification of initial scale
+ for i in range(initial_steps):
+ near_to_ideal_scale = estimate_scales(original_weight, target, zero_mask, importance)
+ near_to_ideal_scale = near_to_ideal_scale * scale_sign
+ input_tensors[1] = near_to_ideal_scale.data
+
+ out = compress_decompress_model(input_tensors)
+ q_weights_ = fns.zeros_like(original_weight) + out
+ q_outs = fns.matmul(fns.transpose(q_weights_, (1, 0, 2)), X)
+
+ ideal_scale_diffs = fns.mean((fp_outs - q_outs) ** 2, axis=-1)
+ ideal_scale_diffs = fns.transpose(ideal_scale_diffs, (1, 0))
+ if weight_penalty > 0.0:
+ ideal_scale_diffs += weight_penalty * fns.mean((q_weights_ - original_weight) ** 2, axis=-1)
+
+ if best_diffs is None:
+ best_diffs = min_max_scale_diffs
+
+ mask = (ideal_scale_diffs > best_diffs).astype(best_diffs.dtype)
+
+ best_diffs = mask * best_diffs + (1.0 - mask) * ideal_scale_diffs
+
+ mask = fns.unsqueeze(mask, axis=2)
+
+ if result_scale is None:
+ near_to_ideal_scale = mask * scale + (1.0 - mask) * near_to_ideal_scale
+ else:
+ near_to_ideal_scale = mask * result_scale + (1.0 - mask) * near_to_ideal_scale
+ result_scale = near_to_ideal_scale
+ input_tensors[1] = near_to_ideal_scale.data
- input_tensors[1] = scaled_scale.data
+ if i < initial_steps - 1:
out = compress_model(input_tensors)
compressed_weights = fns.zeros_like(original_weight) + out
-
target, zero_mask = get_target_zero_mask(compressed_weights, zp)
zero_mask = zero_scale * zero_mask.astype(original_weight.dtype)
- near_to_ideal_scale = estimate_scales(original_weight, target, zero_mask, importance)
- input_tensors[1] = near_to_ideal_scale.data
- out = compress_decompress_model(input_tensors)
- q_weights_ = fns.zeros_like(original_weight) + out
+ # iterative rectification of scale based on grid search
+ for scale_steps in range(scale_steps):
+ factor = 1.0 - 0.05 * scale_steps
+ scaled_scale = factor * scale
- q_outs = fns.matmul(fns.transpose(q_weights_, (1, 0, 2)), X)
- ideal_scale_diffs = fns.mean((fp_outs - q_outs) ** 2, axis=-1)
- ideal_scale_diffs = fns.transpose(ideal_scale_diffs, (1, 0))
- if self._weight_penalty > 0.0:
- ideal_scale_diffs += self._weight_penalty * fns.mean((q_weights_ - original_weight) ** 2, axis=-1)
+ input_tensors[1] = scaled_scale.data
+ out = compress_model(input_tensors)
+ compressed_weights = fns.zeros_like(original_weight) + out
- mask = (ideal_scale_diffs > best_diffs).astype(best_diffs.dtype)
+ target, zero_mask = get_target_zero_mask(compressed_weights, zp)
+ zero_mask = zero_scale * zero_mask.astype(original_weight.dtype)
+ near_to_ideal_scale = estimate_scales(original_weight, target, zero_mask, importance)
+ near_to_ideal_scale = near_to_ideal_scale * scale_sign
+
+ input_tensors[1] = near_to_ideal_scale.data
+ out = compress_decompress_model(input_tensors)
+ q_weights_ = fns.zeros_like(original_weight) + out
- best_diffs = mask * best_diffs + (1.0 - mask) * ideal_scale_diffs
+ q_outs = fns.matmul(fns.transpose(q_weights_, (1, 0, 2)), X)
+ ideal_scale_diffs = fns.mean((fp_outs - q_outs) ** 2, axis=-1)
+ ideal_scale_diffs = fns.transpose(ideal_scale_diffs, (1, 0))
+ if weight_penalty > 0.0:
+ ideal_scale_diffs += weight_penalty * fns.mean((q_weights_ - original_weight) ** 2, axis=-1)
- mask = fns.unsqueeze(mask, axis=2)
+ mask = (ideal_scale_diffs > best_diffs).astype(best_diffs.dtype)
- if result_scale is None:
- near_to_ideal_scale = mask * scale + (1.0 - mask) * near_to_ideal_scale
- else:
- near_to_ideal_scale = mask * result_scale + (1.0 - mask) * near_to_ideal_scale
- result_scale = near_to_ideal_scale
+ best_diffs = mask * best_diffs + (1.0 - mask) * ideal_scale_diffs
+
+ mask = fns.unsqueeze(mask, axis=2)
+
+ if result_scale is None:
+ near_to_ideal_scale = mask * scale + (1.0 - mask) * near_to_ideal_scale
+ else:
+ near_to_ideal_scale = mask * result_scale + (1.0 - mask) * near_to_ideal_scale
+ result_scale = near_to_ideal_scale
- if config.group_size == -1:
- result_scale = fns.squeeze(result_scale, axis=1)
- res[weight_name] = result_scale
+ if config.group_size == -1:
+ result_scale = fns.squeeze(result_scale, axis=1)
- return res
+ return result_scale, zp
-def get_target_zero_mask(compressed_weights: TTensor, zp: Optional[TTensor] = None) -> Tuple[TTensor, TTensor]:
+def get_target_zero_mask(compressed_weights: Tensor, zp: Optional[Tensor] = None) -> Tuple[Tensor, Tensor]:
"""
Computes the target values and a mask indicating zero values in the target.
@@ -320,7 +360,7 @@ def get_target_zero_mask(compressed_weights: TTensor, zp: Optional[TTensor] = No
return target, zero_mask
-def estimate_scales(weight: TTensor, target: TTensor, zero_mask: TTensor, importance: TTensor) -> TTensor:
+def estimate_scales(weight: Tensor, target: Tensor, zero_mask: Tensor, importance: Tensor) -> Tensor:
"""
Estimates scales for the given weight, target, zero mask, and importance.
diff --git a/nncf/quantization/algorithms/weight_compression/torch_backend.py b/nncf/quantization/algorithms/weight_compression/torch_backend.py
index ffdf5b415f2..eacdc5e1028 100644
--- a/nncf/quantization/algorithms/weight_compression/torch_backend.py
+++ b/nncf/quantization/algorithms/weight_compression/torch_backend.py
@@ -25,6 +25,7 @@
from nncf.parameters import CompressWeightsMode
from nncf.quantization.algorithms.weight_compression.backend import WeightCompressionAlgoBackend
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
+from nncf.quantization.algorithms.weight_compression.lora_correction import LoraCorrectionAlgorithm
from nncf.quantization.algorithms.weight_compression.weight_lowering import compress_weight
from nncf.tensor import Tensor
from nncf.tensor.definitions import TensorDataType
@@ -174,6 +175,11 @@ def set_weight(
):
pass
+ def insert_adapters(
+ self, wc_params: WeightCompressionParameters, lora_A: Tensor, lora_B: Tensor, int8_lora: bool
+ ) -> None:
+ pass
+
def transform_model(
self,
model: NNCFNetwork,
@@ -181,6 +187,7 @@ def transform_model(
weight_compression_parameters: Iterable[WeightCompressionParameters],
precomputed_scales: Dict[str, Tensor] = None,
precomputed_zero_points: Dict[str, Tensor] = None,
+ lora_correction_algo: LoraCorrectionAlgorithm = None,
) -> NNCFNetwork:
transformation_layout = TransformationLayout()
diff --git a/nncf/quantization/algorithms/weight_compression/weight_lowering.py b/nncf/quantization/algorithms/weight_compression/weight_lowering.py
index c94d014f868..cf424b5becc 100644
--- a/nncf/quantization/algorithms/weight_compression/weight_lowering.py
+++ b/nncf/quantization/algorithms/weight_compression/weight_lowering.py
@@ -45,26 +45,8 @@
],
dtype=np.float32,
)
-CENTER_OF_NF4_QUANTILES = np.array(
- [
- -0.8480964004993439,
- -0.6106329262256622,
- -0.4599952697753906,
- -0.33967943489551544,
- -0.23460740596055984,
- -0.13791173323988914,
- -0.045525018125772476,
- 0.03979014977812767,
- 0.1202552504837513,
- 0.2035212516784668,
- 0.2920137718319893,
- 0.3893125355243683,
- 0.5016634166240692,
- 0.6427869200706482,
- 0.8614784181118011,
- ],
- dtype=np.float32,
-)
+
+CENTER_OF_NF4_QUANTILES = (NF4_QUANTILES[1:] + NF4_QUANTILES[:-1]) / 2
@dataclass
@@ -87,9 +69,9 @@ def reshape_weight_for_grouped_quantization(
weight: Tensor, reduction_axes: ReductionAxes, group_size: int
) -> Tuple[Tensor, int]:
"""
- Reshapes weight for group-wise quantization and return a new reduction axis for collecting statistics per group
- dimension. Having weight with shapes [c_out, c_in] and group size = 128, shape of reshaped weight is
- [c_out, c_in // 128, 128].
+ Reshapes weight for group-wise quantization and return a reduction axis for collecting statistics per group
+ dimension. Having a transposed weight with shapes [c_out, c_in] and group size = 128, shape of reshaped weight is
+ [c_out, c_in // 128, 128], reduction axis = 1 and the returned reduction axis = 2.
:param weight: Weight array to compress.
:param reduction_axes: Axes, along which to reduce (collect) different statistics (e.g. min, max).
@@ -155,6 +137,29 @@ def calculate_e2m1_scale(weight: Tensor, reduction_axes: ReductionAxes, max_val=
return scale
+def calculate_signed_scale(weight: Tensor, reduction_axes: ReductionAxes, num_bits=4) -> Tensor:
+ """
+ Calculates the signed scale for symmetric quantization.
+
+ :param weight: Weight array to compress.
+ :param reduction_axes: Axes along which to reduce (collect) different statistics (e.g., min, max).
+ :param num_bits: number of bits in compression.
+ :return: Scale tensor.
+ """
+ level_high = 2 ** (num_bits - 1)
+
+ w_abs_min = fns.abs(fns.min(weight, axis=reduction_axes, keepdims=True))
+ w_max = fns.max(weight, axis=reduction_axes, keepdims=True)
+
+ scale = fns.where(w_abs_min >= w_max, w_abs_min, -w_max)
+ scale /= level_high
+
+ eps = fns.finfo(scale).eps
+ scale = fns.where(fns.abs(scale) < eps, eps, scale)
+
+ return scale
+
+
def calculate_normalized_weight(weight: Tensor, scale: Tensor) -> Tensor:
"""
Normalizes the weight tensor using the provided scale.
@@ -171,34 +176,42 @@ def calculate_normalized_weight(weight: Tensor, scale: Tensor) -> Tensor:
return weight / scale
-def calculate_nf4_weight(weight: Tensor, scale: Tensor) -> Tensor:
+def do_nf4_quantization(weight: Tensor, scale: Tensor, is_normalized_weight: bool = False) -> Tensor:
"""
- Quantizes the weight tensor to NF4 format.
+ Performs NF4 quantization - the floating point value is represented by floating point scale, look-up table of
+ 16 NF4 values Quantizes the weight tensor to NF4 format.
:param weight: Weight tensor to quantize.
:param scale: Scale tensor used for normalization.
- :return: Quantized weight tensor in NF4 format.
+ :param is_normalized_weight: Whether weight was scaled to [-1, 1] interval. Defaults to False.
+ :return: Tensor of indexes from 0 to 15 that represents the position in look-up table with the corresponding
+ NF4 values from -1 to 1.
"""
- norm_weight = calculate_normalized_weight(weight, scale)
-
+ norm_weight = weight if is_normalized_weight else calculate_normalized_weight(weight, scale)
center_nf4_quantiles = fns.from_numpy(CENTER_OF_NF4_QUANTILES, backend=norm_weight.backend)
- nf4_quantiles = fns.from_numpy(NF4_QUANTILES, backend=norm_weight.backend)
-
- index_of_quantile = fns.searchsorted(center_nf4_quantiles, norm_weight)
- nf4_weight = nf4_quantiles[index_of_quantile]
-
- return nf4_weight
+ indexes = fns.searchsorted(center_nf4_quantiles, norm_weight)
+ return indexes
-def decompress_nf4_weight(weight: Tensor, scale: Tensor) -> Tensor:
+def do_nf4_dequantization(indexes: Tensor, scale: Tensor, reduction_axis: int = -1) -> Tensor:
"""
Decompresses the NF4 quantized weight tensor.
- :param weight: Quantized weight tensor in NF4 format.
+ :param indexes: Tensor of indexes from 0 to 15 that represents the position in look-up table with the corresponding
+ NF4 values from -1 to 1.
:param scale: Scale tensor used for decompression.
+ :param reduction_axis: axis along which weights were reshaped for group quantization and will be reshaped back to
+ original shapes. If equals to -1, weights are not reshaped, assumed not a group quantization. Defaults to -1.
:return: Decompressed weight tensor.
"""
- return weight * scale
+ nf4_quantiles = fns.from_numpy(NF4_QUANTILES, backend=indexes.backend)
+ nf4_weight = nf4_quantiles[indexes]
+
+ decompressed_weight = nf4_weight * scale
+ if reduction_axis != -1:
+ decompressed_weight = ungroup_weights(decompressed_weight, reduction_axis)
+
+ return decompressed_weight
def calculate_normalized_weight_and_fp4_scale(
@@ -239,7 +252,8 @@ def calculate_integer_quantization_params(
weight: Tensor, reduction_axes: ReductionAxes, config: WeightCompressionConfig
) -> Tuple[Tensor, Tensor]:
"""
- Calculates the scale and zero point for integer quantization.
+ Calculates the scale and zero point for uniform quantization (INT4, INT8), when the range of values is divided into
+ equal intervals, and each interval is assigned a quant.
:param weight: Weight array to compress.
:param reduction_axes: Axes, along which to reduce (collect) different statistics (e.g. min, max).
@@ -263,12 +277,7 @@ def calculate_integer_quantization_params(
)
return scale, zero_point
- level_high = 2 ** (num_bits - 1) - 1
- scale = fns.max(fns.abs(weight), axis=reduction_axes, keepdims=True) # [a1, r//gs, 1, a2]
- scale /= level_high
- eps = fns.finfo(scale).eps
- # NOTE: adding machine epsilon to avoid division by zero
- scale = fns.where(fns.abs(scale) < eps, eps, scale)
+ scale = calculate_signed_scale(weight, reduction_axes, num_bits)
return scale, None
@@ -309,10 +318,11 @@ def calculate_quantized_weight(
compressed_weights += zero_point.astype(weight.dtype)
compressed_weights = fns.round(compressed_weights)
compressed_weights = fns.clip(compressed_weights, level_low, level_high).astype(dtype)
+
return compressed_weights
-def do_integer_quantization(
+def do_int_quantization(
weight: Tensor,
reduction_axes: ReductionAxes,
config: WeightCompressionConfig,
@@ -321,7 +331,7 @@ def do_integer_quantization(
invert_scale=False,
) -> Tuple[Tensor, Tensor, Tensor]:
"""
- The method quantizes the given weights to integer data type in accordance with the compression config.
+ The method quantizes the given weights to integer data type uniformly in accordance with the compression config.
The config defines a quantization mode:
INT8_SYM mode refers to signed int8 symmetric weight compression without zero point -
quantization to [-128, 127] range.
@@ -384,8 +394,8 @@ def get_integer_quantization_error(
if weight.dtype != TensorDataType.float32:
weight = weight.astype(TensorDataType.float32)
- compressed_weights, scale, zero_point = do_integer_quantization(weight, reduction_axes, config)
- decompressed_weight = do_dequantization(compressed_weights, scale, zero_point)
+ compressed_weights, scale, zero_point = do_int_quantization(weight, reduction_axes, config)
+ decompressed_weight = do_int_dequantization(compressed_weights, scale, zero_point)
decompressed_weight = decompressed_weight.reshape(orig_shape)
diff = (decompressed_weight - weight) ** 2
@@ -416,14 +426,32 @@ def compress_weight(
weight, reduction_axes, config.group_size, precomputed_scale, config.mode
)
return CompressedWeight(compressed_weight, scale)
- compressed_weight, scale, zero_point = do_integer_quantization(
+ compressed_weight, scale, zero_point = do_int_quantization(
weight, reduction_axes, config, precomputed_scale, precomputed_zero_point
)
return CompressedWeight(compressed_weight, scale, zero_point)
-def do_dequantization(
+def ungroup_weights(weights: Tensor, reduction_axis: int) -> Tensor:
+ """
+ Reshapes weights used for group quantization back to original shape.
+
+ :param weights: The weight to reshape.
+ :param reduction_axis: The axis, along which weights were reshaped for group quantization and will be reshaped back
+ to original shapes. If equals to -1, weights are not reshaped, assumed not a group quantization. Default to -1.
+ :return: Reshaped weight.
+ """
+ shape = list(weights.shape) # [a1, r, a2] - "r" refers to number of channels along reduction axis
+ shape[reduction_axis] = shape[reduction_axis] * shape[reduction_axis + 1]
+ shape[reduction_axis + 1] = 1
+ reshaped_weight = weights.reshape(shape)
+ reshaped_weight = fns.squeeze(reshaped_weight)
+ weights = reshaped_weight
+ return weights
+
+
+def do_int_dequantization(
compressed_weights: Tensor, scale: Tensor, zero_point: Optional[Tensor] = None, reduction_axis: int = -1
) -> Tensor:
"""
@@ -433,18 +461,14 @@ def do_dequantization(
:param compressed_weights: compressed weights.
:param scale: scale in compression/quantization.
:param zero_point: zero point in compression/quantization.
- :param reduction_axis: axis for return back for group compression.
+ :param reduction_axis: axis along which weights were reshaped for group quantization and will be reshaped back to
+ original shapes. If equals to -1: weights are not reshaped, assumed not a group quantization. Default to -1.
:return: dequantized/decompressed weights.
"""
decompressed_weight = compressed_weights - zero_point if zero_point is not None else compressed_weights
decompressed_weight = decompressed_weight.astype(scale.dtype) * scale
if reduction_axis > -1:
- shape = list(decompressed_weight.shape) # [a1, r, a2] - "r" refers to number of channels along reduction axis
- shape[reduction_axis] = shape[reduction_axis] * shape[reduction_axis + 1]
- shape[reduction_axis + 1] = 1
- reshaped_weight = decompressed_weight.reshape(shape)
- reshaped_weight = fns.squeeze(reshaped_weight)
- decompressed_weight = reshaped_weight
+ decompressed_weight = ungroup_weights(decompressed_weight, reduction_axis)
return decompressed_weight
diff --git a/nncf/quantization/passes.py b/nncf/quantization/passes.py
index f274215dc38..3d5cfa58e5f 100644
--- a/nncf/quantization/passes.py
+++ b/nncf/quantization/passes.py
@@ -14,6 +14,7 @@
from nncf.common.graph.graph import NNCFGraph
from nncf.common.graph.graph import NNCFNode
+from nncf.common.graph.layer_attributes import Dtype
from nncf.common.graph.operator_metatypes import OperatorMetatype
TModel = TypeVar("TModel")
@@ -24,6 +25,7 @@ def transform_to_inference_graph(
input_nodes: List[NNCFNode],
shapeof_metatypes: List[OperatorMetatype],
dropout_metatypes: List[OperatorMetatype],
+ preserved_metatypes: List[OperatorMetatype],
) -> NNCFGraph:
"""
This method contains inplace pipeline of the passes that uses to provide inference graph without constant flows.
@@ -34,27 +36,33 @@ def transform_to_inference_graph(
:param dropout_metatypes: List of backend-specific Dropout metatypes.
:return: NNCFGraph in the inference style.
"""
- remove_shapeof_subgraphs(nncf_graph, shapeof_metatypes, input_nodes)
- filter_constant_nodes(nncf_graph, input_nodes)
+ shapeof_subgraphs = find_shapeof_subgraphs(nncf_graph, shapeof_metatypes, input_nodes)
+ preserved_nodes = find_preserved_nodes(nncf_graph, shapeof_subgraphs, preserved_metatypes)
+ constant_subgraphs = find_constant_subgraphs(nncf_graph, input_nodes)
+
+ nodes_to_drop = set([*shapeof_subgraphs, *constant_subgraphs]).difference(preserved_nodes)
+ nncf_graph.remove_nodes_from(nodes_to_drop)
+
remove_nodes_and_reconnect_graph(nncf_graph, dropout_metatypes)
return nncf_graph
-def remove_shapeof_subgraphs(
+def find_shapeof_subgraphs(
nncf_graph: NNCFGraph,
shapeof_metatypes: List[OperatorMetatype],
input_nodes: List[NNCFNode],
-) -> NNCFGraph:
+) -> List[NNCFNode]:
"""
- Removes the ShapeOf subgraphs from the provided NNCFGraph instance inplace.
- Constant subgraph should be already removed from the given NNCFGraph.
-
- :param nncf_graph: NNCFGraph instance for the transformation.
- :param shapeof_metatypes: List of backend-specific ShapeOf metatypes.
- :param input_nodes: List of input nodes for the given NNCFGraph.
- :return: NNCFGraph without ShapeOf subgraphs.
+ Returns a list of nodes belonging to ShapeOf subgraphs.
+
+ :param nncf_graph: The input graph to be analyzed.
+ :param shapeof_metatypes: A list of metatypes representing backend-specific
+ ShapeOf operations.
+ :param input_nodes: A list of nodes designated as graph inputs. These nodes are
+ used to identify which nodes depend on input data.
+ :return: A list of nodes belonging to ShapeOf subgraphs.
"""
- nodes_to_drop = set()
+ shapeof_subgraphs = set()
shape_of_nodes = []
infer_nodes = []
@@ -70,21 +78,53 @@ def remove_shapeof_subgraphs(
nodes_queue.extend(nncf_graph.get_next_nodes(node))
for shape_of_node in shape_of_nodes:
- nodes_to_drop.add(shape_of_node.node_name)
+ shapeof_subgraphs.add(shape_of_node)
shape_of_queue = collections.deque()
shape_of_queue.extend(nncf_graph.get_next_nodes(shape_of_node))
while shape_of_queue:
node = shape_of_queue.pop()
- if node.node_name in nodes_to_drop or node.node_name in infer_nodes:
+ if node in shapeof_subgraphs or node.node_name in infer_nodes:
continue
- nodes_to_drop.add(node.node_name)
+ shapeof_subgraphs.add(node)
# traverse forward and backward to exclude full shape of subgraph
# recursion excluded due to infer_nodes list around subgraph shape
shape_of_queue.extend(nncf_graph.get_next_nodes(node) + nncf_graph.get_previous_nodes(node))
- nncf_graph.remove_nodes_from([nncf_graph.get_node_by_name(name) for name in nodes_to_drop])
- return nncf_graph
+ return list(shapeof_subgraphs)
+
+
+def find_preserved_nodes(
+ graph: NNCFGraph,
+ shapeof_subgraphs: List[NNCFNode],
+ preserved_metatypes: List[OperatorMetatype],
+) -> List[NNCFNode]:
+ """
+ :param graph: The input graph to be analyzed.
+ :param shapeof_subgraphs: A list of nodes belonging to ShapeOf subgraphs.
+ :param preserved_metatypes: Backend-specific metatypes that require preserving
+ float subgraphs when removing the ShapeOf subgraph.
+ :return: A list of nodes in float subgraphs of ShapeOf subgraphs.
+ """
+ preserved_nodes = set()
+ for node in graph.get_nodes_by_metatypes(preserved_metatypes):
+ for e in graph.get_input_edges(node):
+ if e.from_node in shapeof_subgraphs and e.dtype == Dtype.FLOAT:
+ preserved_nodes.add(e.from_node)
+
+ queue = collections.deque(preserved_nodes)
+ while queue:
+ node = queue.pop()
+
+ for e in graph.get_input_edges(node):
+ if e.from_node in preserved_nodes:
+ continue
+
+ if e.dtype == Dtype.FLOAT and e.from_node in shapeof_subgraphs:
+ queue.append(e.from_node)
+ preserved_nodes.add(e.from_node)
+
+ return list(preserved_nodes)
def remove_nodes_and_reconnect_graph(
@@ -137,20 +177,20 @@ def remove_nodes_and_reconnect_graph(
return nncf_graph
-def filter_constant_nodes(
+def find_constant_subgraphs(
nncf_graph: NNCFGraph,
input_nodes: List[NNCFNode],
-) -> NNCFGraph:
+) -> List[NNCFNode]:
"""
- Removes all Constant nodes from NNCFGraph inplace, making it inference graph.
- The traversing starts from the input nodes and nodes with weights.
+ Returns a list of nodes belonging to constant subgraphs.
- :param nncf_graph: NNCFGraph instance for the transformation.
- :param input_nodes: List of input nodes for the given NNCFGraph.
- :return: NNCFGraph without Constant nodes.
+ :param nncf_graph: The input graph to be analyzed.
+ :param input_nodes: A list of nodes designated as graph inputs. These nodes are
+ used to identify which nodes depend on input data.
+ :return: A list of nodes belonging to constant subgraphs.
"""
if not input_nodes:
- return nncf_graph
+ return []
visited_nodes = set()
nodes_queue = collections.deque(input_nodes)
@@ -161,5 +201,5 @@ def filter_constant_nodes(
visited_nodes.add(node)
nodes_queue.extend(nncf_graph.get_next_nodes(node))
constant_nodes = [node for node in nncf_graph.get_all_nodes() if node not in visited_nodes]
- nncf_graph.remove_nodes_from(constant_nodes)
- return nncf_graph
+
+ return constant_nodes
diff --git a/nncf/quantization/quantize_model.py b/nncf/quantization/quantize_model.py
index 65b804f10a8..60baeacc48e 100644
--- a/nncf/quantization/quantize_model.py
+++ b/nncf/quantization/quantize_model.py
@@ -228,7 +228,21 @@ def quantize(
ignored_scope=ignored_scope,
advanced_parameters=advanced_parameters,
)
+ if backend == BackendType.TORCH_FX:
+ from nncf.experimental.torch.fx.quantization.quantize_model import quantize_impl
+ return quantize_impl(
+ model=model,
+ calibration_dataset=calibration_dataset,
+ mode=mode,
+ preset=preset,
+ target_device=target_device,
+ subset_size=subset_size,
+ fast_bias_correction=fast_bias_correction,
+ model_type=model_type,
+ ignored_scope=ignored_scope,
+ advanced_parameters=advanced_parameters,
+ )
raise nncf.UnsupportedBackendError(f"Unsupported type of backend: {backend}")
@@ -359,6 +373,7 @@ def compress_weights(
awq: Optional[bool] = None,
scale_estimation: Optional[bool] = None,
gptq: Optional[bool] = None,
+ lora_correction: Optional[bool] = None,
advanced_parameters: Optional[AdvancedCompressionParameters] = None,
) -> TModel:
"""
@@ -405,8 +420,10 @@ def compress_weights(
:param scale_estimation: Indicates whether a scale estimation algorithm is used that minimizes the L2 error
between the original and compressed layers.
:type scale_estimation: bool
- :param gptq: Indicates whether use GPTQ algorithm.
+ :param gptq: Indicates whether to use GPTQ algorithm.
:type gptq: bool
+ :param lora_correction: Indicates whether to use Lora Correction algorithm.
+ :type lora_correction: bool
:param advanced_parameters: Advanced parameters for compression algorithms.
:type advanced_parameters: nncf.AdvancedCompressionParameters
:return: The non-trainable model with compressed weights.
@@ -431,10 +448,10 @@ def compress_weights(
f"but given {mode.value} mode."
)
- if True in [awq, scale_estimation, gptq]:
+ if True in [awq, scale_estimation, gptq, lora_correction]:
raise AttributeError(
- "Torch backend doesn`t supports scale estimation and AWQ algorithm, "
- "but awq=True or scale_estimation=True or gptq=True is specified."
+ "Torch backend does not support 'awq', 'scale_estimation', 'gptq' and 'lora_correction' options. "
+ "Set them to None."
)
if is_wrapped_model(model):
@@ -460,14 +477,14 @@ def compress_weights(
dataset is None or mode in [CompressWeightsMode.NF4, CompressWeightsMode.E2M1]
):
raise AttributeError(
- "Scale estimation or AWQ algorithm defined, but dataset is None or mode is (NF4 or E2M1)."
+ "Scale estimation or AWQ algorithm is defined, but dataset is None or mode is (NF4 or E2M1)."
)
- if gptq and (dataset is None or mode == CompressWeightsMode.E2M1):
- raise AttributeError("GPTQ algorithm defined, but dataset is None or mode is E2M1.")
+ if any((gptq, lora_correction)) and (dataset is None or mode == CompressWeightsMode.E2M1):
+ raise AttributeError("GPTQ or Lora Correction algorithm is defined, but dataset is None or mode is E2M1.")
- if gptq and scale_estimation:
+ if gptq and lora_correction:
raise AttributeError(
- "Simultaneous use of Scale estimation and GPTQ algorithms is not supported. Select one of them."
+ "Simultaneous use of Lora correction and GPTQ algorithms is not supported. Select one of them."
)
compression_weights_impl = ov_compress_weights_impl
@@ -482,11 +499,19 @@ def compress_weights(
"INT8 mode assumes per-channel quantization of all layers in 8 bit. "
"Default values of `ratio` (1) and `group_size` (-1) parameters can not be overridden"
)
- options = [all_layers, sensitivity_metric, dataset, awq, scale_estimation, gptq]
- if any(option is not None for option in options):
+ options = {
+ "all_layers": all_layers,
+ "sensitivity_metric": sensitivity_metric,
+ "dataset": dataset,
+ "awq": awq,
+ "scale_estimation": scale_estimation,
+ "gptq": gptq,
+ "lora_correction": lora_correction,
+ }
+ unsupported_for_int8 = [name for name, value in options.items() if value is not None]
+ if unsupported_for_int8:
raise AttributeError(
- "INT8 modes do not support `all_layers`, `sensitivity_metric`, `awq`, `scale_estimation`, `gptq` "
- "and `dataset` options. Set them to None."
+ f"INT8 modes do not support {', '.join(unsupported_for_int8)} option(s). Set them to None."
)
if ratio is None:
@@ -501,6 +526,8 @@ def compress_weights(
scale_estimation = False
if gptq is None:
gptq = False
+ if lora_correction is None:
+ lora_correction = False
if ignored_scope is None:
ignored_scope = IgnoredScope()
if sensitivity_metric is None:
@@ -535,6 +562,7 @@ def compress_weights(
subset_size,
scale_estimation,
gptq,
+ lora_correction,
advanced_parameters,
)
diff --git a/nncf/torch/dynamic_graph/patch_pytorch.py b/nncf/torch/dynamic_graph/patch_pytorch.py
index 5148496fea6..5d20a0d7ba6 100644
--- a/nncf/torch/dynamic_graph/patch_pytorch.py
+++ b/nncf/torch/dynamic_graph/patch_pytorch.py
@@ -371,7 +371,7 @@ def patch_torch_operators():
functions_to_patch = {}
for namespace in NamespaceTarget:
- if namespace == NamespaceTarget.EXTERNAL:
+ if namespace in [NamespaceTarget.ATEN, NamespaceTarget.EXTERNAL]:
continue
functions_to_patch[namespace] = get_all_functions_from_namespace(namespace)
diff --git a/nncf/torch/dynamic_graph/structs.py b/nncf/torch/dynamic_graph/structs.py
index c767790a92c..d8cf563107f 100644
--- a/nncf/torch/dynamic_graph/structs.py
+++ b/nncf/torch/dynamic_graph/structs.py
@@ -22,6 +22,7 @@ class NamespaceTarget(Enum):
TORCH_TENSOR = "torch.tensor"
TORCH_NN_PARAMETER = "torch.nn.parameter"
TORCH = "torch"
+ ATEN = "aten"
EXTERNAL = "external_function"
diff --git a/nncf/torch/engine.py b/nncf/torch/engine.py
index c2a7c051132..2bc17db0416 100644
--- a/nncf/torch/engine.py
+++ b/nncf/torch/engine.py
@@ -15,6 +15,8 @@
from torch import nn
from nncf.common.engine import Engine
+from nncf.common.utils.backend import BackendType
+from nncf.common.utils.backend import get_backend
class PTEngine(Engine):
@@ -30,7 +32,8 @@ def __init__(self, model: nn.Module):
"""
self._model = model
- self._model.eval()
+ if get_backend(model) == BackendType.TORCH:
+ self._model.eval()
def infer(
self, input_data: Union[torch.Tensor, Tuple[torch.Tensor], Dict[str, torch.Tensor]]
diff --git a/nncf/torch/graph/operator_metatypes.py b/nncf/torch/graph/operator_metatypes.py
index 97835f2162a..15966d62130 100644
--- a/nncf/torch/graph/operator_metatypes.py
+++ b/nncf/torch/graph/operator_metatypes.py
@@ -56,6 +56,7 @@ class PTOperatorMetatype(OperatorMetatype):
NamespaceTarget.TORCH_NN_FUNCTIONAL: [],
NamespaceTarget.TORCH_TENSOR: [],
NamespaceTarget.TORCH: [],
+ NamespaceTarget.ATEN: [],
}
subtypes: List[Type["PTOperatorMetatype"]] = []
@@ -443,7 +444,7 @@ class PTHardTanhMetatype(PTOperatorMetatype):
@PT_OPERATOR_METATYPES.register()
class PTHardSwishMetatype(PTOperatorMetatype):
name = "HardSwishOp"
- module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["hardswish"]}
+ module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["hardswish", "hardswish_"]}
num_expected_input_edges = 1
@@ -528,7 +529,7 @@ class PTGELUMetatype(PTOperatorMetatype):
@PT_OPERATOR_METATYPES.register()
class PTSILUMetatype(PTOperatorMetatype):
name = "SiluOp"
- module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["silu"]}
+ module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["silu"], NamespaceTarget.ATEN: ["silu_"]}
@PT_OPERATOR_METATYPES.register()
@@ -545,7 +546,13 @@ class PTSigmoidMetatype(PTOperatorMetatype):
class PTAddMetatype(PTOperatorMetatype):
name = "AddOp"
module_to_function_names = {
- NamespaceTarget.TORCH_TENSOR: ["add", "__add__", "__iadd__", "__radd__"],
+ NamespaceTarget.TORCH_TENSOR: [
+ "add",
+ "add_",
+ "__add__",
+ "__iadd__",
+ "__radd__",
+ ],
NamespaceTarget.TORCH: ["add"],
}
hw_config_names = [HWConfigOpName.ADD]
@@ -556,7 +563,13 @@ class PTAddMetatype(PTOperatorMetatype):
class PTSubMetatype(PTOperatorMetatype):
name = "SubOp"
module_to_function_names = {
- NamespaceTarget.TORCH_TENSOR: ["sub", "__sub__", "__isub__", "__rsub__"],
+ NamespaceTarget.TORCH_TENSOR: [
+ "sub",
+ "sub_",
+ "__sub__",
+ "__isub__",
+ "__rsub__",
+ ],
NamespaceTarget.TORCH: ["sub"],
}
hw_config_names = [HWConfigOpName.SUBTRACT]
@@ -567,7 +580,7 @@ class PTSubMetatype(PTOperatorMetatype):
class PTMulMetatype(PTOperatorMetatype):
name = "MulOp"
module_to_function_names = {
- NamespaceTarget.TORCH_TENSOR: ["mul", "__mul__", "__imul__", "__rmul__"],
+ NamespaceTarget.TORCH_TENSOR: ["mul", "mul_", "__mul__", "__imul__", "__rmul__"],
NamespaceTarget.TORCH: ["mul"],
}
hw_config_names = [HWConfigOpName.MULTIPLY]
@@ -580,6 +593,7 @@ class PTDivMetatype(PTOperatorMetatype):
module_to_function_names = {
NamespaceTarget.TORCH_TENSOR: [
"div",
+ "div_",
"__div__",
"__idiv__",
"__rdiv__",
@@ -679,7 +693,7 @@ class PTRoundMetatype(PTOperatorMetatype):
@PT_OPERATOR_METATYPES.register()
class PTDropoutMetatype(PTOperatorMetatype):
name = "DropoutOp"
- module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["dropout"]}
+ module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["dropout"], NamespaceTarget.TORCH: ["dropout_"]}
@PT_OPERATOR_METATYPES.register()
@@ -691,13 +705,19 @@ class PTThresholdMetatype(PTOperatorMetatype):
@PT_OPERATOR_METATYPES.register(is_subtype=True)
class PTModuleBatchNormMetatype(PTModuleOperatorSubtype):
name = "BatchNormOp"
- module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["batch_norm"]}
+ module_to_function_names = {
+ NamespaceTarget.TORCH_NN_FUNCTIONAL: ["batch_norm"],
+ NamespaceTarget.ATEN: ["_native_batch_norm_legit_no_training", "cudnn_batch_norm"],
+ }
@PT_OPERATOR_METATYPES.register()
class PTBatchNormMetatype(PTOperatorMetatype):
name = "BatchNormOp"
- module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["batch_norm"]}
+ module_to_function_names = {
+ NamespaceTarget.TORCH_NN_FUNCTIONAL: ["batch_norm"],
+ NamespaceTarget.ATEN: ["_native_batch_norm_legit_no_training", "cudnn_batch_norm"],
+ }
subtypes = [PTModuleBatchNormMetatype]
weight_port_ids = [3]
bias_port_id = 4
@@ -826,7 +846,8 @@ class PTGatherMetatype(PTOperatorMetatype):
name = "GatherOp"
module_to_function_names = {
NamespaceTarget.TORCH_TENSOR: ["index_select", "__getitem__"],
- NamespaceTarget.TORCH: ["gather", "index_select", "where"],
+ NamespaceTarget.TORCH: ["gather", "index_select", "select", "where"],
+ NamespaceTarget.ATEN: ["slice"],
}
@@ -841,7 +862,7 @@ class PTReshapeMetatype(PTOperatorMetatype):
name = "ReshapeOp"
module_to_function_names = {
NamespaceTarget.TORCH_TENSOR: ["reshape", "view", "flatten", "unsqueeze"],
- NamespaceTarget.TORCH: ["flatten", "unsqueeze"],
+ NamespaceTarget.TORCH: ["flatten", "unflatten", "unsqueeze"],
}
hw_config_names = [HWConfigOpName.RESHAPE, HWConfigOpName.UNSQUEEZE, HWConfigOpName.FLATTEN]
@@ -863,6 +884,7 @@ class PTSplitMetatype(PTOperatorMetatype):
NamespaceTarget.TORCH_NN_FUNCTIONAL: [],
NamespaceTarget.TORCH_TENSOR: ["split", "chunk", "unbind"],
NamespaceTarget.TORCH: ["split", "chunk", "unbind"],
+ NamespaceTarget.ATEN: ["split_with_sizes"],
}
hw_config_names = [HWConfigOpName.SPLIT, HWConfigOpName.CHUNK]
@@ -1028,7 +1050,10 @@ class PTSqrtMetatype(PTOperatorMetatype):
@PT_OPERATOR_METATYPES.register()
class PTInterpolateMetatype(PTOperatorMetatype):
name = "InterpolateOp"
- module_to_function_names = {NamespaceTarget.TORCH_NN_FUNCTIONAL: ["interpolate"]}
+ module_to_function_names = {
+ NamespaceTarget.TORCH_NN_FUNCTIONAL: ["interpolate"],
+ NamespaceTarget.ATEN: ["upsample_nearest2d", "upsample_nearest_exact2d"],
+ }
hw_config_names = [HWConfigOpName.INTERPOLATE]
num_expected_input_edges = 1
diff --git a/nncf/torch/graph/pattern_operations.py b/nncf/torch/graph/pattern_operations.py
index d9957871d87..1190079a5a6 100644
--- a/nncf/torch/graph/pattern_operations.py
+++ b/nncf/torch/graph/pattern_operations.py
@@ -10,54 +10,79 @@
# limitations under the License.
from nncf.common.graph.patterns import GraphPattern
from nncf.common.graph.patterns import merge_two_types_of_operations
+from nncf.torch.graph import operator_metatypes as om
LINEAR_OPERATIONS = {
GraphPattern.METATYPE_ATTR: [
- "linear",
- "conv1d",
- "conv2d",
- "conv3d",
- "conv_transpose1d",
- "conv_transpose2d",
- "conv_transpose3d",
- "deform_conv2d",
- "addmm",
- "bmm",
- "matmul",
- "mm",
- "baddbmm",
+ # Linear
+ om.PTLinearMetatype,
+ om.PTModuleLinearMetatype,
+ # Conv1D
+ om.PTConv1dMetatype,
+ om.PTDepthwiseConv1dSubtype,
+ om.PTModuleConv1dMetatype,
+ om.PTModuleDepthwiseConv1dSubtype,
+ # Conv2D
+ om.PTConv2dMetatype,
+ om.PTDepthwiseConv2dSubtype,
+ om.PTModuleConv2dMetatype,
+ om.PTModuleDepthwiseConv2dSubtype,
+ # Conv3D
+ om.PTConv3dMetatype,
+ om.PTDepthwiseConv3dSubtype,
+ om.PTModuleConv3dMetatype,
+ om.PTModuleDepthwiseConv3dSubtype,
+ # Transposed conv
+ om.PTConvTranspose1dMetatype,
+ om.PTModuleConvTranspose1dMetatype,
+ om.PTConvTranspose2dMetatype,
+ om.PTModuleConvTranspose2dMetatype,
+ om.PTConvTranspose3dMetatype,
+ om.PTModuleConvTranspose3dMetatype,
+ # Deform conv
+ om.PTDeformConv2dMetatype,
+ om.PTModuleDeformConv2dMetatype,
+ # MatMul
+ om.PTMatMulMetatype,
+ # Addmm
+ om.PTAddmmMetatype,
],
GraphPattern.LABEL_ATTR: "LINEAR",
}
BATCH_NORMALIZATION_OPERATIONS = {
- GraphPattern.METATYPE_ATTR: ["batch_norm", "batch_norm1d", "batch_norm2d", "batch_norm3d"],
+ GraphPattern.METATYPE_ATTR: [om.PTBatchNormMetatype, om.PTModuleBatchNormMetatype],
GraphPattern.LABEL_ATTR: "BATCH_NORMALIZATION",
}
GROUP_NORMALIZATION_OPERATIONS = {
- GraphPattern.METATYPE_ATTR: ["group_norm"],
+ GraphPattern.METATYPE_ATTR: [om.PTGroupNormMetatype, om.PTModuleGroupNormMetatype],
GraphPattern.LABEL_ATTR: "GROUP_NORMALIZATION",
}
LAYER_NORMALIZATION_OPERATIONS = {
- GraphPattern.METATYPE_ATTR: ["layer_norm"],
+ GraphPattern.METATYPE_ATTR: [om.PTLayerNormMetatype, om.PTModuleLayerNormMetatype],
GraphPattern.LABEL_ATTR: "LAYER_NORMALIZATION",
}
-RELU_OPERATIONS = {GraphPattern.METATYPE_ATTR: ["relu", "relu_", "hardtanh"], GraphPattern.LABEL_ATTR: "RELU"}
+RELU_OPERATIONS = {
+ GraphPattern.METATYPE_ATTR: [
+ om.PTRELUMetatype,
+ om.PTHardTanhMetatype,
+ ],
+ GraphPattern.LABEL_ATTR: "RELU",
+}
NON_RELU_ACTIVATIONS_OPERATIONS = {
GraphPattern.METATYPE_ATTR: [
- "elu",
- "elu_",
- "prelu",
- "leaky_relu",
- "sigmoid",
- "gelu",
- "silu",
- "hardsigmoid",
- "hardswish",
+ om.PTELUMetatype,
+ om.PTPRELUMetatype,
+ om.PTLeakyRELUMetatype,
+ om.PTSigmoidMetatype,
+ om.PTGELUMetatype,
+ om.PTSILUMetatype,
+ om.PTHardSigmoidMetatype,
+ om.PTHardSwishMetatype,
],
GraphPattern.LABEL_ATTR: "NON_RELU_ACTIVATIONS",
}
@@ -67,13 +92,6 @@
)
ARITHMETIC_OPERATIONS = {
- GraphPattern.METATYPE_ATTR: ["__iadd__", "__add__", "__mul__", "__rmul__", "__truediv__"],
+ GraphPattern.METATYPE_ATTR: [om.PTAddMetatype, om.PTSubMetatype, om.PTMulMetatype, om.PTDivMetatype],
GraphPattern.LABEL_ATTR: "ARITHMETIC",
}
-
-# This type may be useful in the future
-
-POOLING_OPERATIONS = {
- GraphPattern.METATYPE_ATTR: ["adaptive_avg_pool2d", "adaptive_avg_pool3d", "avg_pool2d", "avg_pool3d"],
- GraphPattern.LABEL_ATTR: "POOLING",
-}
diff --git a/nncf/torch/graph/transformations/serialization.py b/nncf/torch/graph/transformations/serialization.py
index 282c59453eb..abb92379bfb 100644
--- a/nncf/torch/graph/transformations/serialization.py
+++ b/nncf/torch/graph/transformations/serialization.py
@@ -29,7 +29,7 @@ def serialize_transformations(transformations_layout: TransformationLayout) -> D
"""
Serializes given transformation layout to a dict.
- :param tranformation_layout: Given transformation layout.
+ :param transformation_layout: Given transformation layout.
:return: Serialized representation of given transformation layout as a dict.
"""
transformation_commands = []
diff --git a/nncf/torch/hardware/fused_patterns.py b/nncf/torch/hardware/fused_patterns.py
index 3cff4d1ce98..48c6a38ba40 100644
--- a/nncf/torch/hardware/fused_patterns.py
+++ b/nncf/torch/hardware/fused_patterns.py
@@ -12,6 +12,7 @@
from nncf.common.graph.patterns import GraphPattern
from nncf.common.graph.patterns import HWFusedPatternNames
from nncf.common.utils.registry import Registry
+from nncf.torch.graph import operator_metatypes as om
from nncf.torch.graph.operator_metatypes import PTInputNoopMetatype
from nncf.torch.graph.pattern_operations import ARITHMETIC_OPERATIONS
from nncf.torch.graph.pattern_operations import ATOMIC_ACTIVATIONS_OPERATIONS
@@ -30,12 +31,12 @@ def create_l2_norm_operations() -> GraphPattern:
pattern = GraphPattern()
outside_pattern_node = pattern.add_node(label="*OUTSIDE_PATTERN_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- pow_node = pattern.add_node(label="POW", type="pow")
- sum_node = pattern.add_node(label="SUM", type="sum")
- sqrt_node = pattern.add_node(label="SQRT", type="sqrt")
- add_node = pattern.add_node(label="ADD", type="__add__")
- div_node = pattern.add_node(label="DIV", type="div")
- mul_node = pattern.add_node(label="MUL", type="__rmul__")
+ pow_node = pattern.add_node(label="POW", type=om.PTPowerMetatype)
+ sum_node = pattern.add_node(label="SUM", type=om.PTSumMetatype)
+ sqrt_node = pattern.add_node(label="SQRT", type=om.PTSqrtMetatype)
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ div_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
pattern.add_edge(outside_pattern_node, pow_node)
pattern.add_edge(pow_node, sum_node)
@@ -53,8 +54,8 @@ def create_l2_norm_operations() -> GraphPattern:
@PT_HW_FUSED_PATTERNS.register(HWFusedPatternNames.SHIFT_SCALE)
def create_shift_scale() -> GraphPattern:
pattern = GraphPattern()
- add_node = pattern.add_node(label="ADD, SUB", type=["__add__", "__sub__"])
- truediv_node = pattern.add_node(label="MUL, DIV", type=["__mul__", "__truediv__"])
+ add_node = pattern.add_node(label="ADD, SUB", type=[om.PTAddMetatype, om.PTSubMetatype])
+ truediv_node = pattern.add_node(label="MUL, DIV", type=[om.PTMulMetatype, om.PTDivMetatype])
pattern.add_edge(add_node, truediv_node)
return pattern
@@ -62,7 +63,7 @@ def create_shift_scale() -> GraphPattern:
@PT_HW_FUSED_PATTERNS.register(HWFusedPatternNames.INPUT_SHIFT_SCALE)
def create_input_shift_scale() -> GraphPattern:
pattern = GraphPattern()
- pattern.add_node(**{GraphPattern.LABEL_ATTR: "MODEL_INPUT", GraphPattern.METATYPE_ATTR: PTInputNoopMetatype})
+ pattern.add_node(label="MODEL_INPUT", type=PTInputNoopMetatype)
shift_scale = create_shift_scale()
pattern.join_patterns(shift_scale)
return pattern
@@ -177,8 +178,8 @@ def create_group_norm_relu_operations() -> GraphPattern:
@PT_HW_FUSED_PATTERNS.register(HWFusedPatternNames.LINEAR_CONST_MULTIPLY)
def create_linear_const_multiply() -> GraphPattern:
pattern = GraphPattern()
- linear_node = pattern.add_node(label="linear", type="linear")
- mul_node = pattern.add_node(label="MUL", type="__mul__")
+ linear_node = pattern.add_node(label="linear", type=[om.PTLinearMetatype, om.PTModuleLinearMetatype])
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
pattern.add_edge(linear_node, mul_node)
return pattern
@@ -220,8 +221,8 @@ def activation_operations() -> GraphPattern:
def create_swish_act() -> GraphPattern:
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- sigmoid_node = pattern.add_node(label="SIGMOID", type="sigmoid")
- mul_node = pattern.add_node(label="MUL", type="__mul__")
+ sigmoid_node = pattern.add_node(label="SIGMOID", type=om.PTSigmoidMetatype)
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
pattern.add_edge(input_pattern_node, sigmoid_node)
pattern.add_edge(sigmoid_node, mul_node)
@@ -235,10 +236,10 @@ def create_h_swish_act() -> GraphPattern:
# Mul -> Div version
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- add_node = pattern.add_node(label="ADD", type="__add__")
- hardtanh_node = pattern.add_node(label="HARDTANH", type="hardtanh")
- truediv_node = pattern.add_node(label="DIV", type="__truediv__")
- mul_node = pattern.add_node(label="MUL", type="__mul__")
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ hardtanh_node = pattern.add_node(label="HARDTANH", type=om.PTHardTanhMetatype)
+ truediv_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
pattern.add_edge(input_pattern_node, add_node)
pattern.add_edge(input_pattern_node, mul_node)
@@ -250,10 +251,10 @@ def create_h_swish_act() -> GraphPattern:
# Div -> Mul version
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- add_node = pattern.add_node(label="ADD", type="__add__")
- hardtanh_node = pattern.add_node(label="HARDTANH", type="hardtanh")
- mul_node = pattern.add_node(label="MUL", type="__mul__")
- truediv_node = pattern.add_node(label="DIV", type="__truediv__")
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ hardtanh_node = pattern.add_node(label="HARDTANH", type=om.PTHardTanhMetatype)
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
+ truediv_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
pattern.add_edge(input_pattern_node, add_node)
pattern.add_edge(input_pattern_node, mul_node)
@@ -265,10 +266,10 @@ def create_h_swish_act() -> GraphPattern:
# ReLU6 version - Mul -> Div
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- add_node = pattern.add_node(label="ADD", type="__add__")
- relu6_node = pattern.add_node(label="RELU6", type="relu6")
- mul_node = pattern.add_node(label="MUL", type="__mul__")
- truediv_node = pattern.add_node(label="DIV", type="__truediv__")
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ relu6_node = pattern.add_node(label="RELU6", type=om.PTRELU6Metatype)
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
+ truediv_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
pattern.add_edge(input_pattern_node, add_node)
pattern.add_edge(input_pattern_node, mul_node)
@@ -280,10 +281,10 @@ def create_h_swish_act() -> GraphPattern:
# ReLU6 version - Div -> Mul
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- add_node = pattern.add_node(label="ADD", type="__add__")
- relu6_node = pattern.add_node(label="RELU6", type="relu6")
- truediv_node = pattern.add_node(label="DIV", type="__truediv__")
- mul_node = pattern.add_node(label="MUL", type="__mul__")
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ relu6_node = pattern.add_node(label="RELU6", type=om.PTRELU6Metatype)
+ truediv_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
+ mul_node = pattern.add_node(label="MUL", type=om.PTMulMetatype)
pattern.add_edge(input_pattern_node, add_node)
pattern.add_edge(input_pattern_node, mul_node)
@@ -303,9 +304,9 @@ def create_h_sigmoid_act() -> GraphPattern:
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- add_node = pattern.add_node(label="ADD", type="__add__")
- hardtanh_node = pattern.add_node(label="HARDTANH", type="hardtanh")
- truediv_node = pattern.add_node(label="DIV", type="__truediv__")
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ hardtanh_node = pattern.add_node(label="HARDTANH", type=om.PTHardTanhMetatype)
+ truediv_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
pattern.add_edge(input_pattern_node, add_node)
pattern.add_edge(add_node, hardtanh_node)
@@ -317,9 +318,9 @@ def create_h_sigmoid_act() -> GraphPattern:
pattern = GraphPattern()
input_pattern_node = pattern.add_node(label="*INPUT_NODE*", type=GraphPattern.NON_PATTERN_NODE_TYPE)
- add_node = pattern.add_node(label="ADD", type="__add__")
- relu6_node = pattern.add_node(label="RELU6", type="relu6")
- truediv_node = pattern.add_node(label="DIV", type="__truediv__")
+ add_node = pattern.add_node(label="ADD", type=om.PTAddMetatype)
+ relu6_node = pattern.add_node(label="RELU6", type=om.PTRELU6Metatype)
+ truediv_node = pattern.add_node(label="DIV", type=om.PTDivMetatype)
pattern.add_edge(input_pattern_node, add_node)
pattern.add_edge(add_node, relu6_node)
diff --git a/nncf/torch/quantization/ignored_patterns.py b/nncf/torch/quantization/ignored_patterns.py
index b1e6c522ada..895849c244e 100644
--- a/nncf/torch/quantization/ignored_patterns.py
+++ b/nncf/torch/quantization/ignored_patterns.py
@@ -11,6 +11,7 @@
from nncf.common.graph.patterns.patterns import GraphPattern
from nncf.common.graph.patterns.patterns import IgnoredPatternNames
from nncf.common.utils.registry import Registry
+from nncf.torch.graph import operator_metatypes as om
from nncf.torch.graph.pattern_operations import ATOMIC_ACTIVATIONS_OPERATIONS
from nncf.torch.graph.pattern_operations import LINEAR_OPERATIONS
@@ -19,11 +20,11 @@
def _add_softmax_matmul(
pattern: GraphPattern,
- matmul_aliases,
- reshape_squeeze_aliases,
- gather_aliases,
- transpose_aliases,
- concat_aliases,
+ matmul_metatypes,
+ reshape_squeeze_metatypes,
+ gather_metatypes,
+ transpose_metatypes,
+ concat_metatypes,
) -> None:
# SOFTMAX RESHAPE||TRANSPOSE||GATHER||SQUEEZE||CONCAT
# \ /
@@ -32,9 +33,9 @@ def _add_softmax_matmul(
# \ /
# \ /
# MATMUL
- branch_matmul_nodes = reshape_squeeze_aliases + gather_aliases + transpose_aliases + concat_aliases
- softmax = pattern.add_node(**{GraphPattern.LABEL_ATTR: "SOFTMAX", GraphPattern.METATYPE_ATTR: "softmax"})
- matmul = pattern.add_node(**{GraphPattern.LABEL_ATTR: "MATMUL", GraphPattern.METATYPE_ATTR: matmul_aliases})
+ branch_matmul_nodes = reshape_squeeze_metatypes + gather_metatypes + transpose_metatypes + concat_metatypes
+ softmax = pattern.add_node(**{GraphPattern.LABEL_ATTR: "SOFTMAX", GraphPattern.METATYPE_ATTR: om.PTSoftmaxMetatype})
+ matmul = pattern.add_node(**{GraphPattern.LABEL_ATTR: "MATMUL", GraphPattern.METATYPE_ATTR: matmul_metatypes})
matmul_branch_nodes = pattern.add_node(
**{GraphPattern.LABEL_ATTR: "NON_PATTERN", GraphPattern.METATYPE_ATTR: branch_matmul_nodes}
)
@@ -44,11 +45,11 @@ def _add_softmax_matmul(
def _add_softmax_reshape_matmul(
pattern: GraphPattern,
- matmul_aliases,
- reshape_squeeze_aliases,
- gather_aliases,
- transpose_aliases,
- concat_aliases,
+ matmul_metatypes,
+ reshape_squeeze_metatypes,
+ gather_metatypes,
+ transpose_metatypes,
+ concat_metatypes,
) -> None:
# SOFTMAX
# \
@@ -62,12 +63,12 @@ def _add_softmax_reshape_matmul(
# \ /
# \ /
# MATMUL
- branch_matmul_nodes = reshape_squeeze_aliases + gather_aliases + transpose_aliases + concat_aliases
- softmax = pattern.add_node(**{GraphPattern.LABEL_ATTR: "SOFTMAX", GraphPattern.METATYPE_ATTR: "softmax"})
+ branch_matmul_nodes = reshape_squeeze_metatypes + gather_metatypes + transpose_metatypes + concat_metatypes
+ softmax = pattern.add_node(**{GraphPattern.LABEL_ATTR: "SOFTMAX", GraphPattern.METATYPE_ATTR: om.PTSoftmaxMetatype})
reshape = pattern.add_node(
- **{GraphPattern.LABEL_ATTR: "RESHAPE", GraphPattern.METATYPE_ATTR: reshape_squeeze_aliases}
+ **{GraphPattern.LABEL_ATTR: "RESHAPE", GraphPattern.METATYPE_ATTR: reshape_squeeze_metatypes}
)
- matmul = pattern.add_node(**{GraphPattern.LABEL_ATTR: "MATMUL", GraphPattern.METATYPE_ATTR: matmul_aliases})
+ matmul = pattern.add_node(**{GraphPattern.LABEL_ATTR: "MATMUL", GraphPattern.METATYPE_ATTR: matmul_metatypes})
matmul_branch_nodes = pattern.add_node(
**{GraphPattern.LABEL_ATTR: "RESHAPE||TRANSPOSE||GATHER", GraphPattern.METATYPE_ATTR: branch_matmul_nodes}
)
@@ -79,35 +80,28 @@ def _add_softmax_reshape_matmul(
@PT_IGNORED_PATTERNS.register(IgnoredPatternNames.MULTIHEAD_ATTENTION_OUTPUT)
def create_multihead_attention_output() -> GraphPattern:
- matmul_aliases = ["linear", "addmm", "matmul", "bmm", "mm", "baddbmm", "__matmul__"]
- reshape_squeeze_aliases = [
- "reshape",
- "view",
- "flatten",
- "unsqueeze",
- "squeeze",
- "unbind",
- ]
- gather_aliases = ["gather", "index_select", "where", "index_select", "__getitem__"]
- transpose_aliases = ["transpose", "permute", "transpose_"]
- concat_aliases = ["cat", "stack"]
+ matmul_metatypes = [om.PTLinearMetatype, om.PTAddmmMetatype, om.PTMatMulMetatype]
+ reshape_squeeze_metatypes = [om.PTReshapeMetatype, om.PTSqueezeMetatype, om.PTSplitMetatype]
+ gather_metatypes = [om.PTGatherMetatype]
+ transpose_metatypes = [om.PTTransposeMetatype]
+ concat_metatypes = [om.PTCatMetatype]
pattern = GraphPattern()
_add_softmax_matmul(
pattern,
- matmul_aliases=matmul_aliases,
- reshape_squeeze_aliases=reshape_squeeze_aliases,
- gather_aliases=gather_aliases,
- transpose_aliases=transpose_aliases,
- concat_aliases=concat_aliases,
+ matmul_metatypes=matmul_metatypes,
+ reshape_squeeze_metatypes=reshape_squeeze_metatypes,
+ gather_metatypes=gather_metatypes,
+ transpose_metatypes=transpose_metatypes,
+ concat_metatypes=concat_metatypes,
)
_add_softmax_reshape_matmul(
pattern,
- matmul_aliases=matmul_aliases,
- reshape_squeeze_aliases=reshape_squeeze_aliases,
- gather_aliases=gather_aliases,
- transpose_aliases=transpose_aliases,
- concat_aliases=concat_aliases,
+ matmul_metatypes=matmul_metatypes,
+ reshape_squeeze_metatypes=reshape_squeeze_metatypes,
+ gather_metatypes=gather_metatypes,
+ transpose_metatypes=transpose_metatypes,
+ concat_metatypes=concat_metatypes,
)
return pattern
@@ -117,16 +111,16 @@ def create_multihead_attention_output() -> GraphPattern:
def create_se_block() -> GraphPattern:
MEAN_OPERATIONS = {
GraphPattern.LABEL_ATTR: "REDUCE_MEAN",
- GraphPattern.METATYPE_ATTR: ["avg_pool2d", "adaptive_avg_pool2d", "avg_pool3d", "adaptive_avg_pool3d", "mean"],
+ GraphPattern.METATYPE_ATTR: [om.PTAvgPool2dMetatype, om.PTAvgPool3dMetatype, om.PTMeanMetatype],
GraphPattern.PATTERN_NODE_TO_EXCLUDE: True,
}
SYGMOID_OPERATIONS = {
GraphPattern.LABEL_ATTR: "SIGMOID",
- GraphPattern.METATYPE_ATTR: ["sigmoid", "hardsigmoid"],
+ GraphPattern.METATYPE_ATTR: [om.PTSigmoidMetatype, om.PTHardSigmoidMetatype],
}
MUL_OPERATION = {
GraphPattern.LABEL_ATTR: "MUL",
- GraphPattern.METATYPE_ATTR: "__mul__",
+ GraphPattern.METATYPE_ATTR: om.PTMulMetatype,
GraphPattern.PATTERN_NODE_TO_EXCLUDE: True,
}
@@ -154,10 +148,10 @@ def get_se_block_with_bias_pattern() -> GraphPattern:
any_node = pattern.add_node(label="NON_PATTERN_NODE", type=GraphPattern.NON_PATTERN_NODE_TYPE)
reduce_mean_node = pattern.add_node(**MEAN_OPERATIONS)
linear_node_1 = pattern.add_node(**LINEAR_OPERATIONS)
- add_node_1 = pattern.add_node(label="ADD_BIAS", type=["__add__", "__sub__"])
+ add_node_1 = pattern.add_node(label="ADD_BIAS", type=[om.PTAddMetatype, om.PTSubMetatype])
activation_node_1 = pattern.add_node(**ATOMIC_ACTIVATIONS_OPERATIONS)
linear_node_2 = pattern.add_node(**LINEAR_OPERATIONS)
- add_node_2 = pattern.add_node(label="ADD_BIAS", type=["__add__", "__sub__"])
+ add_node_2 = pattern.add_node(label="ADD_BIAS", type=[om.PTAddMetatype, om.PTSubMetatype])
activation_node_2 = pattern.add_node(**SYGMOID_OPERATIONS)
multiply_node = pattern.add_node(**MUL_OPERATION)
@@ -174,7 +168,7 @@ def get_se_block_with_bias_pattern() -> GraphPattern:
RESHAPE_NODES = {
GraphPattern.LABEL_ATTR: "RESHAPE",
- GraphPattern.METATYPE_ATTR: ["reshape", "view", "flatten", "unsqueeze"],
+ GraphPattern.METATYPE_ATTR: om.PTReshapeMetatype,
}
def get_se_block_with_reshape() -> GraphPattern:
@@ -206,10 +200,10 @@ def get_se_block_with_bias_and_reshape() -> GraphPattern:
reduce_mean_node = pattern.add_node(**MEAN_OPERATIONS)
reshape_node_1 = pattern.add_node(**RESHAPE_NODES)
linear_node_1 = pattern.add_node(**LINEAR_OPERATIONS)
- add_node_1 = pattern.add_node(label="ADD_BIAS", type=["__add__", "__sub__"])
+ add_node_1 = pattern.add_node(label="ADD_BIAS", type=[om.PTAddMetatype, om.PTSubMetatype])
activation_node_1 = pattern.add_node(**ATOMIC_ACTIVATIONS_OPERATIONS)
linear_node_2 = pattern.add_node(**LINEAR_OPERATIONS)
- add_node_2 = pattern.add_node(label="ADD_BIAS", type=["__add__", "__sub__"])
+ add_node_2 = pattern.add_node(label="ADD_BIAS", type=[om.PTAddMetatype, om.PTSubMetatype])
activation_node_2 = pattern.add_node(**SYGMOID_OPERATIONS)
reshape_node_2 = pattern.add_node(**RESHAPE_NODES)
multiply_node = pattern.add_node(**MUL_OPERATION)
diff --git a/nncf/torch/quantization/quantize_model.py b/nncf/torch/quantization/quantize_model.py
index e90889d0dae..d15b2890efb 100644
--- a/nncf/torch/quantization/quantize_model.py
+++ b/nncf/torch/quantization/quantize_model.py
@@ -93,6 +93,7 @@ def compress_weights_impl(
subset_size: int,
scale_estimation: bool,
gptq: bool,
+ lora_correction: bool,
advanced_parameters: Optional[AdvancedCompressionParameters] = None,
) -> torch.nn.Module:
"""
@@ -110,6 +111,7 @@ def compress_weights_impl(
subset_size,
scale_estimation,
gptq,
+ lora_correction,
advanced_parameters,
)
graph = NNCFGraphFactory.create(model)
diff --git a/nncf/version.py b/nncf/version.py
index 3325fab7383..c193ef76ddb 100644
--- a/nncf/version.py
+++ b/nncf/version.py
@@ -9,9 +9,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "2.12.0"
+__version__ = "2.13.0"
-BKC_TORCH_SPEC = "==2.3.*"
+BKC_TORCH_SPEC = "==2.4.*"
BKC_TF_SPEC = "==2.15.*"
STRICT_TF_SPEC = ">=2.9.3,<2.16.0"
diff --git a/setup.py b/setup.py
index 58e0a5e99fb..8685c9f9982 100644
--- a/setup.py
+++ b/setup.py
@@ -129,7 +129,7 @@ def find_version(*file_paths):
],
}
-with open("{}/README.md".format(here), "r", encoding="utf8") as fh:
+with open("{}/docs/PyPiPublishing.md".format(here), "r", encoding="utf8") as fh:
long_description = fh.read()
setup(
diff --git a/tests/common/accuracy_control/test_calculate_drop.py b/tests/common/accuracy_control/test_calculate_drop.py
index 50899d3eb3d..f31da6a2ef6 100644
--- a/tests/common/accuracy_control/test_calculate_drop.py
+++ b/tests/common/accuracy_control/test_calculate_drop.py
@@ -18,7 +18,7 @@
@dataclass
-class TestCase:
+class AccuracyDropTestCase:
initial_metric: float
quantized_metric: float
drop_type: DropType
@@ -31,28 +31,28 @@ class TestCase:
"ts",
[
# ABSOLUTE
- TestCase(
+ AccuracyDropTestCase(
initial_metric=0.2923,
quantized_metric=0.3185,
drop_type=DropType.ABSOLUTE,
expected_should_terminate=True,
expected_accuracy_drop=-0.0262,
),
- TestCase(
+ AccuracyDropTestCase(
initial_metric=0.3185,
quantized_metric=0.2923,
drop_type=DropType.ABSOLUTE,
expected_should_terminate=False,
expected_accuracy_drop=0.0262,
),
- TestCase(
+ AccuracyDropTestCase(
initial_metric=-0.2923,
quantized_metric=-0.3185,
drop_type=DropType.ABSOLUTE,
expected_should_terminate=False,
expected_accuracy_drop=0.0262,
),
- TestCase(
+ AccuracyDropTestCase(
initial_metric=-0.3185,
quantized_metric=-0.2923,
drop_type=DropType.ABSOLUTE,
@@ -60,28 +60,28 @@ class TestCase:
expected_accuracy_drop=-0.0262,
),
# RELATIVE
- TestCase(
+ AccuracyDropTestCase(
initial_metric=0.2923,
quantized_metric=0.3185,
drop_type=DropType.RELATIVE,
expected_should_terminate=True,
expected_accuracy_drop=None,
),
- TestCase(
+ AccuracyDropTestCase(
initial_metric=0.3185,
quantized_metric=0.2923,
drop_type=DropType.RELATIVE,
expected_should_terminate=False,
expected_accuracy_drop=0.08226059,
),
- TestCase(
+ AccuracyDropTestCase(
initial_metric=-0.2923,
quantized_metric=-0.3185,
drop_type=DropType.RELATIVE,
expected_should_terminate=False,
expected_accuracy_drop=0.0896339,
),
- TestCase(
+ AccuracyDropTestCase(
initial_metric=-0.3185,
quantized_metric=-0.2923,
drop_type=DropType.RELATIVE,
@@ -90,7 +90,7 @@ class TestCase:
),
],
)
-def test_calculate_accuracy_drop(ts: TestCase):
+def test_calculate_accuracy_drop(ts: AccuracyDropTestCase):
should_terminate, accuracy_drop = calculate_accuracy_drop(
ts.initial_metric, ts.quantized_metric, ts.max_drop, ts.drop_type
)
diff --git a/tests/common/quantization/metatypes.py b/tests/common/quantization/metatypes.py
index 2c369a52cb6..a3820f86b38 100644
--- a/tests/common/quantization/metatypes.py
+++ b/tests/common/quantization/metatypes.py
@@ -178,6 +178,12 @@ class DequantizeTestMetatype(TestMetatype):
name = "dequantize"
+@METATYPES_FOR_TEST.register()
+class ScaledDotProductAttentionMetatype(TestMetatype):
+ name = "scaled_dot_product_attention"
+ target_input_ports = [0, 1]
+
+
WEIGHT_LAYER_METATYPES = [LinearTestMetatype, Conv2dTestMetatype, MatMulTestMetatype]
@@ -189,6 +195,7 @@ class DequantizeTestMetatype(TestMetatype):
GeluTestMetatype,
LinearTestMetatype,
AddTestMetatype,
+ ScaledDotProductAttentionMetatype,
],
QuantizationTrait.CONCAT: [CatTestMetatype],
}
diff --git a/tests/common/quantization/mock_graphs.py b/tests/common/quantization/mock_graphs.py
index b8cb41ee142..db4f187939e 100644
--- a/tests/common/quantization/mock_graphs.py
+++ b/tests/common/quantization/mock_graphs.py
@@ -21,6 +21,7 @@
from nncf.common.graph.layer_attributes import BaseLayerAttributes
from nncf.common.graph.layer_attributes import ConvolutionLayerAttributes
from nncf.common.graph.layer_attributes import Dtype
+from nncf.common.graph.operator_metatypes import OperatorMetatype
from nncf.common.graph.operator_metatypes import UnknownMetatype
from nncf.common.insertion_point_graph import InsertionPointGraph
from nncf.common.insertion_point_graph import PostHookInsertionPoint
@@ -188,16 +189,26 @@ def get_mock_nncf_node_attrs(op_name=None, scope_str=None, metatype=None, type_=
def _add_nodes_with_layer_attrs(
- nx_graph: nx.DiGraph, node_keys: List[str], layer_attrs: Dict[str, BaseLayerAttributes]
+ nx_graph: nx.DiGraph,
+ node_keys: List[str],
+ layer_attrs: Dict[str, BaseLayerAttributes],
+ metatypes: Dict[str, OperatorMetatype] = None,
) -> nx.DiGraph:
for node_key in node_keys:
- nx_graph.add_node(node_key, **get_mock_nncf_node_attrs(op_name=node_key))
+ metatype = None
+ if metatypes is not None and node_key in metatypes:
+ metatype = metatypes[node_key]
+ nx_graph.add_node(node_key, **get_mock_nncf_node_attrs(op_name=node_key, metatype=metatype))
+
if node_key in layer_attrs:
nx_graph.nodes[node_key][NNCFNode.LAYER_ATTRIBUTES] = layer_attrs[node_key]
+
return nx_graph
-def get_mock_model_graph_with_mergeable_pattern() -> NNCFGraph:
+def get_mock_model_graph_with_mergeable_pattern(
+ conv2d_metatype=None, batchnorm_metatype=None, relu_metatype=None
+) -> NNCFGraph:
mock_nx_graph = nx.DiGraph()
# (A)
@@ -225,7 +236,12 @@ def get_mock_model_graph_with_mergeable_pattern() -> NNCFGraph:
padding_values=[0, 0, 0, 0],
)
}
- mock_nx_graph = _add_nodes_with_layer_attrs(mock_nx_graph, node_keys, layer_attrs)
+ metatypes = {
+ "conv2d": conv2d_metatype,
+ "batch_norm": batchnorm_metatype,
+ "relu": relu_metatype,
+ }
+ mock_nx_graph = _add_nodes_with_layer_attrs(mock_nx_graph, node_keys, layer_attrs, metatypes)
mock_nx_graph.add_edges_from(
[
@@ -238,7 +254,9 @@ def get_mock_model_graph_with_mergeable_pattern() -> NNCFGraph:
return get_nncf_graph_from_mock_nx_graph(mock_nx_graph)
-def get_mock_model_graph_with_no_mergeable_pattern() -> NNCFGraph:
+def get_mock_model_graph_with_no_mergeable_pattern(
+ conv2d_metatype=None, batchnorm_metatype=None, relu_metatype=None
+) -> NNCFGraph:
mock_nx_graph = nx.DiGraph()
# (A)
@@ -270,7 +288,12 @@ def get_mock_model_graph_with_no_mergeable_pattern() -> NNCFGraph:
padding_values=[0, 0, 0, 0],
)
}
- mock_nx_graph = _add_nodes_with_layer_attrs(mock_nx_graph, node_keys, layer_attrs)
+ metatypes = {
+ "conv2d": conv2d_metatype,
+ "batch_norm": batchnorm_metatype,
+ "relu": relu_metatype,
+ }
+ mock_nx_graph = _add_nodes_with_layer_attrs(mock_nx_graph, node_keys, layer_attrs, metatypes)
mock_nx_graph.add_edges_from(
[
@@ -285,7 +308,9 @@ def get_mock_model_graph_with_no_mergeable_pattern() -> NNCFGraph:
return get_nncf_graph_from_mock_nx_graph(mock_nx_graph)
-def get_mock_model_graph_with_broken_output_edge_pattern() -> NNCFGraph:
+def get_mock_model_graph_with_broken_output_edge_pattern(
+ conv2d_metatype=None, batchnorm_metatype=None, relu_metatype=None
+) -> NNCFGraph:
mock_nx_graph = nx.DiGraph()
# (A)
@@ -314,7 +339,12 @@ def get_mock_model_graph_with_broken_output_edge_pattern() -> NNCFGraph:
padding_values=[0, 0, 0, 0],
)
}
- mock_nx_graph = _add_nodes_with_layer_attrs(mock_nx_graph, node_keys, layer_attrs)
+ metatypes = {
+ "conv2d": conv2d_metatype,
+ "batch_norm": batchnorm_metatype,
+ "relu": relu_metatype,
+ }
+ mock_nx_graph = _add_nodes_with_layer_attrs(mock_nx_graph, node_keys, layer_attrs, metatypes)
mock_nx_graph.add_edges_from(
[
@@ -366,7 +396,7 @@ def get_randomly_connected_model_graph(op_name_keys: Set[str]) -> nx.DiGraph:
graph_len = len(op_name_keys)
mock_graph = nx.generators.gnc_graph(graph_len, None, 0)
- shuffled_op_names = random.sample(op_name_keys, len(op_name_keys))
+ shuffled_op_names = random.sample(sorted(op_name_keys), len(op_name_keys))
for idx, (_, node) in enumerate(mock_graph.nodes.items()):
op_name = shuffled_op_names[idx]
node[NNCFNode.NODE_NAME_ATTR] = get_node_name(shuffled_op_names[idx])
diff --git a/tests/common/quantization/test_layerwise_scheduler.py b/tests/common/quantization/test_layerwise_scheduler.py
index 6a59b6f63fc..41d1df61590 100644
--- a/tests/common/quantization/test_layerwise_scheduler.py
+++ b/tests/common/quantization/test_layerwise_scheduler.py
@@ -12,7 +12,7 @@
import pytest
from nncf.quantization.algorithms.layerwise.scheduler import LayerwiseScheduler
-from tests.post_training.test_templates.models import NNCFGraphCAWithBias
+from tests.cross_fw.test_templates.models import NNCFGraphCAWithBias
@pytest.mark.parametrize("add_additional_outputs", [False, True])
diff --git a/tests/common/quantization/test_minmax.py b/tests/common/quantization/test_minmax.py
index 5cec1ea20ab..2a63d3c7ac8 100644
--- a/tests/common/quantization/test_minmax.py
+++ b/tests/common/quantization/test_minmax.py
@@ -134,24 +134,23 @@ def test_mode_against_default_map(algo_params, is_error):
qconf_attr_vs_constraint_dict_to_compare = {"mode": QuantizationScheme.SYMMETRIC}
if is_error:
- try:
+ with pytest.raises(nncf.ParameterNotSupportedError):
minmax = MinMaxQuantization(**algo_params)
- except nncf.ParameterNotSupportedError:
- pytest.xfail("Caught expected error")
- minmax = MinMaxQuantization(**algo_params)
- for ref_parameter_name, ref_parameter_value in default_values_to_compare[mode_param].items():
- parameter_value = getattr(minmax, ref_parameter_name)
- assert parameter_value == ref_parameter_value
-
- global_quantizer_constraints = getattr(minmax, "_global_quantizer_constraints")
- assert (
- global_quantizer_constraints[QuantizerGroup.ACTIVATIONS].qconf_attr_vs_constraint_dict
- == qconf_attr_vs_constraint_dict_to_compare
- )
- assert (
- global_quantizer_constraints[QuantizerGroup.WEIGHTS].qconf_attr_vs_constraint_dict
- == qconf_attr_vs_constraint_dict_to_compare
- )
+ else:
+ minmax = MinMaxQuantization(**algo_params)
+ for ref_parameter_name, ref_parameter_value in default_values_to_compare[mode_param].items():
+ parameter_value = getattr(minmax, ref_parameter_name)
+ assert parameter_value == ref_parameter_value
+
+ global_quantizer_constraints = getattr(minmax, "_global_quantizer_constraints")
+ assert (
+ global_quantizer_constraints[QuantizerGroup.ACTIVATIONS].qconf_attr_vs_constraint_dict
+ == qconf_attr_vs_constraint_dict_to_compare
+ )
+ assert (
+ global_quantizer_constraints[QuantizerGroup.WEIGHTS].qconf_attr_vs_constraint_dict
+ == qconf_attr_vs_constraint_dict_to_compare
+ )
@pytest.mark.parametrize(
diff --git a/tests/common/quantization/test_passes.py b/tests/common/quantization/test_passes.py
index d737debcf8d..70d681efa01 100644
--- a/tests/common/quantization/test_passes.py
+++ b/tests/common/quantization/test_passes.py
@@ -16,21 +16,24 @@
from nncf.common.graph.layer_attributes import MultipleInputLayerAttributes
from nncf.common.graph.operator_metatypes import OperatorMetatype
-from nncf.quantization.passes import filter_constant_nodes
+from nncf.quantization.passes import find_constant_subgraphs
from nncf.quantization.passes import remove_nodes_and_reconnect_graph
-from tests.post_training.test_templates.models import NNCFGraphDropoutRemovingCase
-from tests.post_training.test_templates.models import NNCFGraphToTestConstantFiltering
+from tests.cross_fw.test_templates.models import NNCFGraphDropoutRemovingCase
+from tests.cross_fw.test_templates.models import NNCFGraphToTestConstantFiltering
from tests.shared.nx_graph import compare_nx_graph_with_reference
from tests.shared.paths import TEST_ROOT
DATA_ROOT = TEST_ROOT / "common" / "data" / "reference_graphs"
-class TestModes(Enum):
+class ParameterTestModes(Enum):
VALID = "valid"
WRONG_TENSOR_SHAPE = "wrong_dropout_node"
WRONG_PARALLEL_EDGES = "wrong_parallel_edges"
+ def __str__(self):
+ return self.value
+
def _check_graphs(dot_file_name, nncf_graph) -> None:
nx_graph = nncf_graph.get_graph_for_structure_analysis()
@@ -38,18 +41,18 @@ def _check_graphs(dot_file_name, nncf_graph) -> None:
compare_nx_graph_with_reference(nx_graph, path_to_dot, check_edge_attrs=True)
-@pytest.mark.parametrize("mode", [TestModes.VALID, TestModes.WRONG_TENSOR_SHAPE, TestModes.WRONG_PARALLEL_EDGES])
-def test_remove_nodes_and_reconnect_graph(mode: TestModes):
+@pytest.mark.parametrize("mode", ParameterTestModes)
+def test_remove_nodes_and_reconnect_graph(mode: ParameterTestModes):
dot_reference_path_before = Path("passes") / "dropout_synthetic_model_before.dot"
dot_reference_path_after = Path("passes") / "dropout_synthetic_model_after.dot"
dropout_metatype = "DROPOUT_METATYPE"
kwargs = {}
- if mode != TestModes.VALID:
+ if mode != ParameterTestModes.VALID:
kwargs.update({mode.value: True})
nncf_graph = NNCFGraphDropoutRemovingCase(dropout_metatype, **kwargs).nncf_graph
- if mode != TestModes.VALID:
+ if mode != ParameterTestModes.VALID:
with pytest.raises(AssertionError):
remove_nodes_and_reconnect_graph(nncf_graph, [dropout_metatype])
return
@@ -60,7 +63,7 @@ def test_remove_nodes_and_reconnect_graph(mode: TestModes):
@pytest.mark.parametrize("node_between_const_and_op", [False, True])
-def test_filter_constant_nodes(node_between_const_and_op):
+def test_find_constant_subgraphs(node_between_const_and_op):
dot_reference_path_before = (
Path("passes") / f"test_constant_filtering_model_before{int(node_between_const_and_op)}.dot"
)
@@ -85,5 +88,6 @@ class NodeWithWeightMetatype(OperatorMetatype):
additional_input_names = ["/Conv2_0", "/Concat_with_missed_input_0"]
input_nodes = nncf_graph.get_input_nodes() + [nncf_graph.get_node_by_name(name) for name in additional_input_names]
_check_graphs(dot_reference_path_before, nncf_graph)
- filter_constant_nodes(nncf_graph, input_nodes)
+ constant_subgraphs = find_constant_subgraphs(nncf_graph, input_nodes)
+ nncf_graph.remove_nodes_from(constant_subgraphs)
_check_graphs(dot_reference_path_after, nncf_graph)
diff --git a/tests/common/quantization/test_quantizer_propagation_solver.py b/tests/common/quantization/test_quantizer_propagation_solver.py
index 9d0171bc643..9bb6284651d 100644
--- a/tests/common/quantization/test_quantizer_propagation_solver.py
+++ b/tests/common/quantization/test_quantizer_propagation_solver.py
@@ -12,8 +12,9 @@
from collections import Counter
from collections import namedtuple
+from dataclasses import dataclass
from itertools import permutations
-from typing import Dict, List, Optional, Set, Tuple
+from typing import Callable, Dict, List, Optional, Set, Tuple
import networkx as nx
import pytest
@@ -49,6 +50,7 @@
from tests.common.quantization.metatypes import MatMulTestMetatype
from tests.common.quantization.metatypes import MaxPool2dTestMetatype
from tests.common.quantization.metatypes import MinTestMetatype
+from tests.common.quantization.metatypes import ScaledDotProductAttentionMetatype
from tests.common.quantization.metatypes import SoftmaxTestMetatype
from tests.common.quantization.mock_graphs import get_ip_graph_for_test
from tests.common.quantization.mock_graphs import get_mock_nncf_node_attrs
@@ -146,6 +148,30 @@ def get_branching_model_graph() -> NNCFGraph:
return get_nncf_graph_from_mock_nx_graph(mock_graph)
+def get_scaled_dot_product_graph():
+ mock_graph = nx.DiGraph()
+
+ node_keys = ["input", "branch_node", "reshape", "reshape_1", "reshape_2", "scaled_dot_product_attention"]
+ for node_key in node_keys:
+ mock_node_attrs = get_mock_nncf_node_attrs(op_name=node_key)
+ mock_graph.add_node(node_key, **mock_node_attrs)
+
+ mock_graph.add_edges_from(
+ [
+ ("input", "branch_node"),
+ ("branch_node", "reshape"),
+ ("branch_node", "reshape_1"),
+ ("branch_node", "reshape_2"),
+ ("reshape", "scaled_dot_product_attention"),
+ ("reshape_1", "scaled_dot_product_attention"),
+ ("reshape_2", "scaled_dot_product_attention"),
+ ]
+ )
+
+ mark_input_ports_lexicographically_based_on_input_node_key(mock_graph)
+ return get_nncf_graph_from_mock_nx_graph(mock_graph)
+
+
class MultiQPSerializedDataForTest:
def __init__(
self,
@@ -248,6 +274,38 @@ def test_setup_initial_quantizers_in_quant_prop_graph(self):
edge = qp_graph.edges[pred_ip_key, actual_key]
assert not edge[QPSG.AFFECTING_PROPAGATING_QUANTIZERS_ATTR]
+ def test_setup_initial_quantizers_sdpa(self):
+ nncf_graph = get_scaled_dot_product_graph()
+ ip_graph = get_ip_graph_for_test(nncf_graph)
+
+ qp_graph = QPSG(ip_graph)
+
+ sdpa_node_key = "5 /scaled_dot_product_attention_0"
+ quant_prop_solver = QuantizerPropagationSolver(
+ run_consistency_checks=True,
+ default_trait_to_metatype_map=DEFAULT_TEST_QUANT_TRAIT_MAP,
+ )
+
+ qp_graph = quant_prop_solver.set_allowed_quantization_types_for_operator_nodes(qp_graph)
+ qp_graph = quant_prop_solver.setup_initial_quantizers(qp_graph)
+ qp_graph.run_consistency_check()
+
+ for port_id, pred_ip_key in enumerate(qp_graph.predecessors(sdpa_node_key)):
+ node = qp_graph.nodes[sdpa_node_key]
+ pred_ip_node = qp_graph.nodes[pred_ip_key]
+ prop_quant = pred_ip_node[QPSG.PROPAGATING_QUANTIZER_NODE_ATTR]
+ if port_id in ScaledDotProductAttentionMetatype.target_input_ports:
+ assert prop_quant is not None
+ assert node[QPSG.AFFECTING_PROPAGATING_QUANTIZERS_ATTR][port_id] == prop_quant
+
+ edge = qp_graph.edges[pred_ip_key, sdpa_node_key]
+ assert edge[QPSG.AFFECTING_PROPAGATING_QUANTIZERS_ATTR] == [prop_quant]
+ else:
+ assert prop_quant is None
+
+ edge = qp_graph.edges[pred_ip_key, sdpa_node_key]
+ assert edge[QPSG.AFFECTING_PROPAGATING_QUANTIZERS_ATTR] == []
+
MergeQConfigSolution = namedtuple(
"MergeQConfigSolution", ("merge_qconfig_list", "branch_qconfig_lists_after_merge")
)
@@ -821,23 +879,36 @@ def test_merged_qconfig_list_is_independent_of_branch_qconfig_list_order(
BRANCHING_MODEL_GRAPH = get_branching_model_graph()
- BranchTransitionTestStruct = namedtuple(
- "BranchTransitionTestStruct",
- ( # Unspecified nodes are marked as quantization agnostic
- "init_node_to_trait_and_configs_dict",
- "starting_primary_quantizer_ip_node",
- "target_branching_node_for_primary_quantizer",
- "expected_status",
- ),
- )
-
class InitNodeTestStruct:
def __init__(self, quantization_trait, config, op_meta=UnknownMetatype):
self.quantization_trait = quantization_trait
self.config = config
self.op_meta = op_meta
+ @dataclass
+ class BranchTransitionTestStruct:
+ # Unspecified nodes are marked as quantization agnostic
+ init_node_to_trait_and_configs_dict: Dict[str, "TestQuantizerPropagationSolver.InitNodeTestStruct"]
+ starting_primary_quantizer_ip_node: str
+ target_branching_node_for_primary_quantizer: str
+ expected_status: TransitionStatus
+ nncf_graph_builder: Callable[[], NNCFGraph] = None
+
BRANCH_TRANSITION_TEST_CASES = [
+ # Scaled dot product attention case
+ BranchTransitionTestStruct(
+ init_node_to_trait_and_configs_dict=
+ {
+ '5 /scaled_dot_product_attention_0': InitNodeTestStruct(QuantizationTrait.INPUTS_QUANTIZABLE,
+ QuantizerConfig(), ScaledDotProductAttentionMetatype),
+ },
+ starting_primary_quantizer_ip_node=
+ InsertionPointGraph.get_pre_hook_node_key('5 /scaled_dot_product_attention_0'),
+ target_branching_node_for_primary_quantizer=InsertionPointGraph.get_post_hook_node_key('1 /branch_node_0'),
+ expected_status=TransitionStatus.SHOULD_NOT_TRANSITION,
+ nncf_graph_builder=get_scaled_dot_product_graph
+ ),
+
# Downward branches are quantization-agnostic
BranchTransitionTestStruct(
init_node_to_trait_and_configs_dict=
@@ -1117,7 +1188,10 @@ def test_check_branching_transition(self, branch_transition_test_struct: BranchT
expected_status = branch_transition_test_struct.expected_status
# Graph preparation
- nncf_graph = get_branching_model_graph()
+ if branch_transition_test_struct.nncf_graph_builder is None:
+ nncf_graph = get_branching_model_graph()
+ else:
+ nncf_graph = branch_transition_test_struct.nncf_graph_builder()
ip_graph = get_ip_graph_for_test(nncf_graph)
# Metatypes must be assigned before QPSG creation, because
@@ -1137,10 +1211,16 @@ def test_check_branching_transition(self, branch_transition_test_struct: BranchT
trait = init_node_struct.quantization_trait
quant_prop_graph.nodes[node_key][QPSG.QUANTIZATION_TRAIT_NODE_ATTR] = trait
if trait == QuantizationTrait.INPUTS_QUANTIZABLE:
- ip_node_key = InsertionPointGraph.get_pre_hook_node_key(node_key)
- prop_quant = quant_prop_graph.add_propagating_quantizer(qconfigs, ip_node_key)
- if ip_node_key == starting_primary_quantizer_ip_node:
- primary_prop_quant = prop_quant
+ target_input_ports = [0]
+ metatype = quant_prop_graph.nodes[node_key]["op_meta"]
+ if metatype.target_input_ports is not None:
+ target_input_ports = metatype.target_input_ports
+
+ for input_port_id in target_input_ports:
+ ip_node_key = InsertionPointGraph.get_pre_hook_node_key(node_key, input_port_id=input_port_id)
+ prop_quant = quant_prop_graph.add_propagating_quantizer(qconfigs, ip_node_key)
+ if ip_node_key == starting_primary_quantizer_ip_node:
+ primary_prop_quant = prop_quant
elif trait == QuantizationTrait.CONCAT and qconfigs:
# Assuming two-port concat nodes are used in the test graph, adjust as necessary
for input_port_id in [0, 1]:
diff --git a/tests/common/quantization/test_quantizer_removal.py b/tests/common/quantization/test_quantizer_removal.py
index 13596083e66..9280666382f 100644
--- a/tests/common/quantization/test_quantizer_removal.py
+++ b/tests/common/quantization/test_quantizer_removal.py
@@ -18,7 +18,7 @@
from nncf.common.graph import NNCFGraph
from nncf.common.graph.layer_attributes import Dtype
from nncf.common.quantization.quantizer_removal import find_quantizer_nodes_to_cut
-from nncf.quantization.passes import remove_shapeof_subgraphs
+from nncf.quantization.passes import find_shapeof_subgraphs
from tests.common.quantization.metatypes import CONSTANT_METATYPES
from tests.common.quantization.metatypes import METATYPES_FOR_TEST
from tests.common.quantization.metatypes import QUANTIZABLE_METATYPES
@@ -194,7 +194,7 @@ class Graph:
@dataclass
-class TestCase:
+class ParameterTestCase:
"""
:param node_name: Quantizer node's name. We want to remove this
quantizer from the model.
@@ -212,42 +212,46 @@ class TestCase:
TEST_CASES = {
"simple_graph": [
- TestCase(
+ ParameterTestCase(
"fake_quantize_119",
["fake_quantize_139", "fake_quantize_162", "fake_quantize_119"],
["add_117", "conv2d_161"],
),
- TestCase("fake_quantize_128", ["fake_quantize_134", "fake_quantize_128"], ["conv2d_127"]),
- TestCase("fake_quantize_134", ["fake_quantize_134", "fake_quantize_128"], ["conv2d_127"]),
- TestCase(
+ ParameterTestCase("fake_quantize_128", ["fake_quantize_134", "fake_quantize_128"], ["conv2d_127"]),
+ ParameterTestCase("fake_quantize_134", ["fake_quantize_134", "fake_quantize_128"], ["conv2d_127"]),
+ ParameterTestCase(
"fake_quantize_139",
["fake_quantize_139", "fake_quantize_162", "fake_quantize_119"],
["add_117", "conv2d_161"],
),
- TestCase("fake_quantize_147", ["fake_quantize_153", "fake_quantize_147"], ["conv2d_146"]),
- TestCase("fake_quantize_153", ["fake_quantize_153", "fake_quantize_147"], ["conv2d_146"]),
- TestCase(
+ ParameterTestCase("fake_quantize_147", ["fake_quantize_153", "fake_quantize_147"], ["conv2d_146"]),
+ ParameterTestCase("fake_quantize_153", ["fake_quantize_153", "fake_quantize_147"], ["conv2d_146"]),
+ ParameterTestCase(
"fake_quantize_162",
["fake_quantize_139", "fake_quantize_162", "fake_quantize_119"],
["add_117", "conv2d_161"],
),
],
- "graph_with_shapeof": [TestCase("fake_quantize_105", ["fake_quantize_105"], ["interpolate_115"])],
+ "graph_with_shapeof": [ParameterTestCase("fake_quantize_105", ["fake_quantize_105"], ["interpolate_115"])],
"simple_graph_quantize_dequantize": [
- TestCase("quantize_37", ["quantize_37", "dequantize_38", "quantize_39", "dequantize_40"], ["conv2d_41"]),
- TestCase("quantize_39", ["quantize_37", "dequantize_38", "quantize_39", "dequantize_40"], ["conv2d_41"]),
+ ParameterTestCase(
+ "quantize_37", ["quantize_37", "dequantize_38", "quantize_39", "dequantize_40"], ["conv2d_41"]
+ ),
+ ParameterTestCase(
+ "quantize_39", ["quantize_37", "dequantize_38", "quantize_39", "dequantize_40"], ["conv2d_41"]
+ ),
#
- TestCase(
+ ParameterTestCase(
"quantize_42",
["quantize_42", "dequantize_43", "quantize_44", "dequantize_45", "quantize_63", "dequantize_64"],
["conv2d_46", "add_65"],
),
- TestCase(
+ ParameterTestCase(
"quantize_44",
["quantize_42", "dequantize_43", "quantize_44", "dequantize_45", "quantize_63", "dequantize_64"],
["conv2d_46", "add_65"],
),
- TestCase(
+ ParameterTestCase(
"quantize_63",
["quantize_42", "dequantize_43", "quantize_44", "dequantize_45", "quantize_63", "dequantize_64"],
["conv2d_46", "add_65"],
@@ -295,12 +299,16 @@ def create_test_params():
@pytest.mark.parametrize("nncf_graph,test_case", TEST_PARAMS, ids=IDS)
-def test_find_quantizer_nodes_to_cut(nncf_graph: NNCFGraph, test_case: TestCase):
+def test_find_quantizer_nodes_to_cut(nncf_graph: NNCFGraph, test_case: ParameterTestCase):
quantizer_node = nncf_graph.get_node_by_name(test_case.node_name)
# As test graphs are fully connected and does not have readvariable metatype,
# this should work
input_nodes = nncf_graph.get_input_nodes()
- nncf_graph_without_shapeof = remove_shapeof_subgraphs(deepcopy(nncf_graph), SHAPEOF_METATYPES, input_nodes)
+
+ shapeof_subgraphs = find_shapeof_subgraphs(nncf_graph, SHAPEOF_METATYPES, input_nodes)
+ nncf_graph_without_shapeof = deepcopy(nncf_graph)
+ nncf_graph_without_shapeof.remove_nodes_from(shapeof_subgraphs)
+
nodes, ops = find_quantizer_nodes_to_cut(
nncf_graph_without_shapeof,
quantizer_node,
diff --git a/tests/common/requirements.txt b/tests/common/requirements.txt
index 6ee495bde6e..7ba0333267b 100644
--- a/tests/common/requirements.txt
+++ b/tests/common/requirements.txt
@@ -1,5 +1,6 @@
-c ../../constraints.txt
pytest
pytest-cov
+pytest-dependency
pytest-mock
pytest-xdist
diff --git a/tests/common/utils/test_progress_tracking.py b/tests/common/utils/test_progress_tracking.py
new file mode 100644
index 00000000000..c5fe5394fa8
--- /dev/null
+++ b/tests/common/utils/test_progress_tracking.py
@@ -0,0 +1,86 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import pytest
+
+from nncf.common.logging.track_progress import WeightedProgress
+from nncf.common.logging.track_progress import track
+
+N = 10
+
+
+def get_sequence(n):
+ return [i for i in range(n)]
+
+
+class track_wrapper:
+ def __init__(self, track):
+ self.track = track
+
+ def __iter__(self):
+ completed = 0
+ for i, value in enumerate(self.track):
+ if not self.track.progress.live.auto_refresh:
+ # There is no easy way to check this when auto refresh is enabled because _TrackThread is used
+ assert completed == self.track.progress._tasks[self.track.task].completed
+ yield value
+ completed += self.track.weights[i] if isinstance(self.track.progress, WeightedProgress) else 1
+
+
+@pytest.mark.parametrize("n", [N])
+@pytest.mark.parametrize("is_weighted", [False, True])
+@pytest.mark.parametrize("auto_refresh", [False, True])
+def test_track(n, is_weighted, auto_refresh):
+ original_sequence = get_sequence(n)
+ retrieved_sequence = [None] * n
+ for i, it in enumerate(
+ track_wrapper(
+ track(
+ original_sequence,
+ description="Progress...",
+ weights=original_sequence if is_weighted else None,
+ auto_refresh=auto_refresh,
+ )
+ )
+ ):
+ retrieved_sequence[i] = it
+ assert all(original_sequence[i] == retrieved_sequence[i] for i in range(n))
+
+
+@pytest.mark.parametrize("n", [N])
+@pytest.mark.parametrize("is_weighted", [False, True])
+@pytest.mark.parametrize("auto_refresh", [False, True])
+def test_track_no_length(n, is_weighted, auto_refresh):
+ original_sequence = get_sequence(n)
+ original_sequence_iterable = iter(original_sequence)
+ retrieved_sequence = [None] * n
+ for i, it in enumerate(
+ track_wrapper(
+ track(
+ original_sequence_iterable,
+ total=n,
+ description="Progress...",
+ weights=original_sequence if is_weighted else None,
+ auto_refresh=auto_refresh,
+ )
+ )
+ ):
+ retrieved_sequence[i] = it
+ assert all(original_sequence[i] == retrieved_sequence[i] for i in range(n))
+
+
+@pytest.mark.parametrize("n", [N])
+@pytest.mark.parametrize("is_weighted", [False, True])
+def test_track_context_manager(n, is_weighted):
+ weights = get_sequence(n)
+ with track(total=n, description="Progress...", weights=weights if is_weighted else None) as pbar:
+ for i in range(n):
+ assert pbar.progress._tasks[pbar.task].completed == (sum(weights[:i]) if is_weighted else i)
+ pbar.progress.update(pbar.task, advance=1)
diff --git a/tests/cross_fw/examples/example_scope.json b/tests/cross_fw/examples/example_scope.json
index efaca8e2f26..3bbc6325ae7 100644
--- a/tests/cross_fw/examples/example_scope.json
+++ b/tests/cross_fw/examples/example_scope.json
@@ -178,7 +178,7 @@
"fp32_top1": 55.52000045776367,
"int8_init_top1": 55.279998779296875
},
- "accuracy_metrics_after_training":{
+ "accuracy_metrics_after_training": {
"int8_top1": 57.08069620253165,
"accuracy_drop": -1.5606957447679761
},
@@ -198,7 +198,7 @@
"requirements": "examples/llm_compression/openvino/tiny_llama/requirements.txt",
"cpu": "Intel(R) Core(TM) i9-10980XE CPU @ 3.00GHz",
"accuracy_metrics": {
- "word_count": 71
+ "word_count": 65
}
},
"llm_tune_params": {
@@ -208,7 +208,7 @@
"accuracy_metrics": {
"awq": true,
"ratio": 1.0,
- "group_size": 64
+ "group_size": 128
}
},
"quantization_aware_training_torch_anomalib": {
@@ -221,7 +221,7 @@
"fp32_f1score": 0.9919999837875366,
"int8_init_f1score": 0.9767441749572754
},
- "accuracy_metrics_after_training":{
+ "accuracy_metrics_after_training": {
"int8_f1score": 0.9919999837875366,
"accuracy_drop": 0.0
},
@@ -236,4 +236,4 @@
"model_compression_rate": 3.7654144877995197
}
}
-}
+}
\ No newline at end of file
diff --git a/tests/cross_fw/examples/run_example.py b/tests/cross_fw/examples/run_example.py
index 385b3a4799c..dd87be4ce22 100644
--- a/tests/cross_fw/examples/run_example.py
+++ b/tests/cross_fw/examples/run_example.py
@@ -50,6 +50,10 @@ def post_training_quantization_openvino_mobilenet_v2_quantize() -> Dict[str, flo
def post_training_quantization_tensorflow_mobilenet_v2() -> Dict[str, float]:
+ import tensorflow_datasets as tfds
+
+ tfds.display_progress_bar(enable=False)
+
example_root = str(PROJECT_ROOT / "examples" / "post_training_quantization" / "tensorflow" / "mobilenet_v2")
return post_training_quantization_mobilenet_v2(example_root)
diff --git a/tests/post_training/data/fq_params/fq_params.json b/tests/cross_fw/test_templates/fq_params/fq_params.json
similarity index 100%
rename from tests/post_training/data/fq_params/fq_params.json
rename to tests/cross_fw/test_templates/fq_params/fq_params.json
diff --git a/tests/post_training/test_templates/helpers.py b/tests/cross_fw/test_templates/helpers.py
similarity index 98%
rename from tests/post_training/test_templates/helpers.py
rename to tests/cross_fw/test_templates/helpers.py
index da969214914..c25d138fd8c 100644
--- a/tests/post_training/test_templates/helpers.py
+++ b/tests/cross_fw/test_templates/helpers.py
@@ -184,7 +184,9 @@ def __init__(self):
self.conv_2 = self._build_conv(2, 3, 2)
self.conv_3 = self._build_conv(1, 2, 3)
self.conv_4 = self._build_conv(2, 3, 1)
- self.conv_5 = self._build_conv(3, 2, 2)
+ self.conv_5 = self._build_conv(3, 2, 1)
+ self.max_pool = torch.nn.MaxPool2d((2, 2))
+ self.conv_6 = self._build_conv(2, 3, 1)
def _build_conv(self, in_channels=1, out_channels=2, kernel_size=2):
conv = create_conv(in_channels, out_channels, kernel_size)
@@ -198,7 +200,9 @@ def forward(self, x):
x_2 = self.conv_3(x)
x_2 = self.conv_4(F.relu(x_2))
x_1_2 = torch.concat([x_1, x_2])
- return self.conv_5(F.relu(x_1_2))
+ x = self.conv_5(F.relu(x_1_2))
+ x = self.max_pool(x)
+ return self.conv_6(x)
class LinearMultiShapeModel(nn.Module):
diff --git a/tests/post_training/test_templates/models.py b/tests/cross_fw/test_templates/models.py
similarity index 100%
rename from tests/post_training/test_templates/models.py
rename to tests/cross_fw/test_templates/models.py
diff --git a/tests/post_training/test_templates/test_bias_correction.py b/tests/cross_fw/test_templates/test_bias_correction.py
similarity index 95%
rename from tests/post_training/test_templates/test_bias_correction.py
rename to tests/cross_fw/test_templates/test_bias_correction.py
index e27a8ad0868..b154e0870a7 100644
--- a/tests/post_training/test_templates/test_bias_correction.py
+++ b/tests/cross_fw/test_templates/test_bias_correction.py
@@ -21,10 +21,10 @@
from nncf.quantization.algorithms.bias_correction.algorithm import BiasCorrection
from nncf.quantization.algorithms.bias_correction.backend import BiasCorrectionAlgoBackend
from nncf.quantization.algorithms.post_training.algorithm import PostTrainingQuantization
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import MultipleConvTestModel
-from tests.post_training.test_templates.helpers import SplittedModel
-from tests.post_training.test_templates.helpers import StaticDatasetMock
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import MultipleConvTestModel
+from tests.cross_fw.test_templates.helpers import SplittedModel
+from tests.cross_fw.test_templates.helpers import StaticDatasetMock
TModel = TypeVar("TModel")
TTensor = TypeVar("TTensor")
diff --git a/tests/post_training/test_templates/test_calculate_quantizer_parameters.py b/tests/cross_fw/test_templates/test_calculate_quantizer_parameters.py
similarity index 98%
rename from tests/post_training/test_templates/test_calculate_quantizer_parameters.py
rename to tests/cross_fw/test_templates/test_calculate_quantizer_parameters.py
index 7ab3d0ab318..45bb3c65956 100644
--- a/tests/post_training/test_templates/test_calculate_quantizer_parameters.py
+++ b/tests/cross_fw/test_templates/test_calculate_quantizer_parameters.py
@@ -12,6 +12,7 @@
from abc import ABC
from abc import abstractmethod
from dataclasses import dataclass
+from pathlib import Path
import numpy as np
import pytest
@@ -24,10 +25,11 @@
from nncf.quantization.fake_quantize import FakeQuantizeParameters
from nncf.quantization.fake_quantize import calculate_quantizer_parameters
from nncf.tensor import functions as fns
-from tests.post_training.conftest import FQ_CALCULATED_PARAMETERS_PATH
from tests.shared.helpers import dump_to_json
from tests.shared.helpers import load_json
+FQ_CALCULATED_PARAMETERS_PATH = Path(__file__).parent / "fq_params" / "fq_params.json"
+
def compare_fq_parameters(ref_params, params):
assert ref_params.levels == params.levels
diff --git a/tests/post_training/test_templates/test_channel_alignment.py b/tests/cross_fw/test_templates/test_channel_alignment.py
similarity index 99%
rename from tests/post_training/test_templates/test_channel_alignment.py
rename to tests/cross_fw/test_templates/test_channel_alignment.py
index f1e0fbf440d..7995f91961c 100644
--- a/tests/post_training/test_templates/test_channel_alignment.py
+++ b/tests/cross_fw/test_templates/test_channel_alignment.py
@@ -31,8 +31,8 @@
from nncf.quantization.algorithms.channel_alignment.algorithm import ChannelAlignment
from nncf.quantization.algorithms.channel_alignment.backend import ChannelAlignmentAlgoBackend
from nncf.quantization.algorithms.channel_alignment.backend import LayoutDescriptor
-from tests.post_training.test_templates.models import NNCFGraphCA
-from tests.post_training.test_templates.models import NNCFGraphCAWithBias
+from tests.cross_fw.test_templates.models import NNCFGraphCA
+from tests.cross_fw.test_templates.models import NNCFGraphCAWithBias
EPS = 1e-3
diff --git a/tests/post_training/test_templates/test_fast_bias_correction.py b/tests/cross_fw/test_templates/test_fast_bias_correction.py
similarity index 95%
rename from tests/post_training/test_templates/test_fast_bias_correction.py
rename to tests/cross_fw/test_templates/test_fast_bias_correction.py
index edaf979d74e..899be7d9a1a 100644
--- a/tests/post_training/test_templates/test_fast_bias_correction.py
+++ b/tests/cross_fw/test_templates/test_fast_bias_correction.py
@@ -20,9 +20,9 @@
from nncf.quantization.algorithms.fast_bias_correction.algorithm import FastBiasCorrection
from nncf.quantization.algorithms.fast_bias_correction.backend import FastBiasCorrectionAlgoBackend
from nncf.quantization.algorithms.post_training.algorithm import PostTrainingQuantization
-from tests.post_training.test_templates.helpers import ConvBNTestModel
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import get_static_dataset
+from tests.cross_fw.test_templates.helpers import ConvBNTestModel
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import get_static_dataset
TModel = TypeVar("TModel")
TTensor = TypeVar("TTensor")
diff --git a/tests/post_training/test_templates/test_layerwise.py b/tests/cross_fw/test_templates/test_layerwise.py
similarity index 97%
rename from tests/post_training/test_templates/test_layerwise.py
rename to tests/cross_fw/test_templates/test_layerwise.py
index ea6227f6f2b..9bda65851a0 100644
--- a/tests/post_training/test_templates/test_layerwise.py
+++ b/tests/cross_fw/test_templates/test_layerwise.py
@@ -16,8 +16,8 @@
from nncf.common.factory import StatisticsAggregatorFactory
from nncf.quantization.algorithms.layerwise.engine import LayerwiseEngine
from nncf.tensor import functions as fns
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import get_static_dataset
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import get_static_dataset
TModel = TypeVar("TModel")
diff --git a/tests/post_training/test_templates/test_min_max.py b/tests/cross_fw/test_templates/test_min_max.py
similarity index 100%
rename from tests/post_training/test_templates/test_min_max.py
rename to tests/cross_fw/test_templates/test_min_max.py
diff --git a/tests/post_training/test_templates/test_ptq_params.py b/tests/cross_fw/test_templates/test_ptq_params.py
similarity index 99%
rename from tests/post_training/test_templates/test_ptq_params.py
rename to tests/cross_fw/test_templates/test_ptq_params.py
index c6b1ce135f0..eacf57652e7 100644
--- a/tests/post_training/test_templates/test_ptq_params.py
+++ b/tests/cross_fw/test_templates/test_ptq_params.py
@@ -236,6 +236,7 @@ def test_quantize_outputs(self, test_params, quantize_outputs):
min_max_algo._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
min_max_algo._backend_entity.shapeof_metatypes,
min_max_algo._backend_entity.dropout_metatypes,
+ min_max_algo._backend_entity.preserved_metatypes,
)
q_setup = min_max_algo._get_quantizer_setup(nncf_graph, inference_nncf_graph, hw_patterns, ignored_patterns)
act_num_q, weight_num_q = 0, 0
@@ -261,6 +262,7 @@ def test_ignored_scopes(self, test_params, ignored_scopes_data):
min_max_algo._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
min_max_algo._backend_entity.shapeof_metatypes,
min_max_algo._backend_entity.dropout_metatypes,
+ min_max_algo._backend_entity.preserved_metatypes,
)
q_setup = min_max_algo._get_quantizer_setup(nncf_graph, inference_nncf_graph, hw_patterns, ignored_patterns)
act_num_q, weight_num_q = 0, 0
@@ -286,6 +288,7 @@ def test_model_type_pass(self, test_params, model_type):
min_max_algo._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
min_max_algo._backend_entity.shapeof_metatypes,
min_max_algo._backend_entity.dropout_metatypes,
+ min_max_algo._backend_entity.preserved_metatypes,
)
q_setup = min_max_algo._get_quantizer_setup(nncf_graph, inference_nncf_graph, hw_patterns, ignored_patterns)
for quantization_point in q_setup.quantization_points.values():
@@ -384,6 +387,7 @@ def test_validate_scope(self, test_params, validate_scopes):
self.get_algo_backend().get_start_nodes_for_activation_path_tracing(nncf_graph),
[],
[],
+ [],
)
ignored_patterns = test_params["test_model_type_pass"]["ignored_patterns"]
algo = MinMaxQuantization(
diff --git a/tests/post_training/test_templates/test_quantizer_config.py b/tests/cross_fw/test_templates/test_quantizer_config.py
similarity index 93%
rename from tests/post_training/test_templates/test_quantizer_config.py
rename to tests/cross_fw/test_templates/test_quantizer_config.py
index a037ccf9ea9..a01e9ffdb8e 100644
--- a/tests/post_training/test_templates/test_quantizer_config.py
+++ b/tests/cross_fw/test_templates/test_quantizer_config.py
@@ -38,9 +38,9 @@
from nncf.quantization.algorithms.min_max.algorithm import MinMaxQuantization
from nncf.quantization.passes import transform_to_inference_graph
from nncf.quantization.range_estimator import RangeEstimatorParametersSet
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.models import NNCFGraphToTestDepthwiseConv
-from tests.post_training.test_templates.models import NNCFGraphToTestSumAggregation
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.models import NNCFGraphToTestDepthwiseConv
+from tests.cross_fw.test_templates.models import NNCFGraphToTestSumAggregation
class TemplateTestQuantizerConfig:
@@ -79,7 +79,7 @@ def conv_sum_aggregation_nncf_graph(self) -> NNCFGraphToTestSumAggregation:
pass
@dataclass
- class TestGetStatisticsCollectorParameters:
+ class GetStatisticsCollectorParameters:
target_type: TargetType
target_node_name: str
batchwise_statistics: bool
@@ -89,31 +89,31 @@ class TestGetStatisticsCollectorParameters:
@pytest.fixture(
params=[
pytest.param(
- TestGetStatisticsCollectorParameters(TargetType.PRE_LAYER_OPERATION, "/Sum_1_0", True, (2,), (1, 2)),
+ GetStatisticsCollectorParameters(TargetType.PRE_LAYER_OPERATION, "/Sum_1_0", True, (2,), (1, 2)),
),
- TestGetStatisticsCollectorParameters(
+ GetStatisticsCollectorParameters(
TargetType.POST_LAYER_OPERATION,
"/Conv_1_0",
True,
(2, 3),
(1, 2, 3),
),
- TestGetStatisticsCollectorParameters(
+ GetStatisticsCollectorParameters(
TargetType.OPERATION_WITH_WEIGHTS,
"/Conv_1_0",
True,
(1, 2, 3),
(0, 1, 2, 3),
),
- TestGetStatisticsCollectorParameters(TargetType.PRE_LAYER_OPERATION, "/Sum_1_0", False, (0, 2), (0, 1, 2)),
- TestGetStatisticsCollectorParameters(
+ GetStatisticsCollectorParameters(TargetType.PRE_LAYER_OPERATION, "/Sum_1_0", False, (0, 2), (0, 1, 2)),
+ GetStatisticsCollectorParameters(
TargetType.POST_LAYER_OPERATION,
"/Conv_1_0",
False,
(0, 2, 3),
(0, 1, 2, 3),
),
- TestGetStatisticsCollectorParameters(
+ GetStatisticsCollectorParameters(
TargetType.OPERATION_WITH_WEIGHTS,
"/Conv_1_0",
False,
@@ -122,7 +122,7 @@ class TestGetStatisticsCollectorParameters:
),
]
)
- def statistic_collector_parameters(self, request) -> TestGetStatisticsCollectorParameters:
+ def statistic_collector_parameters(self, request) -> GetStatisticsCollectorParameters:
return request.param
def test_default_quantizer_config(self, single_conv_nncf_graph):
@@ -134,6 +134,7 @@ def test_default_quantizer_config(self, single_conv_nncf_graph):
min_max_algo._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
min_max_algo._backend_entity.shapeof_metatypes,
min_max_algo._backend_entity.dropout_metatypes,
+ min_max_algo._backend_entity.preserved_metatypes,
)
q_setup = min_max_algo._get_quantizer_setup(
nncf_graph, inference_nncf_graph, hw_patterns=GraphPattern(), ignored_patterns=GraphPattern()
@@ -188,6 +189,7 @@ def test_quantizer_config_from_ptq_params_for_CPU(
min_max_algo._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
min_max_algo._backend_entity.shapeof_metatypes,
min_max_algo._backend_entity.dropout_metatypes,
+ min_max_algo._backend_entity.preserved_metatypes,
)
if signed_weights is False or signed_activations in [True, False]: # Incompatible with HW CPU config
with pytest.raises(
@@ -230,6 +232,7 @@ def test_depthwise_conv_default_quantizer_config(self, depthwise_conv_nncf_graph
min_max_algo._backend_entity.get_start_nodes_for_activation_path_tracing(nncf_graph),
min_max_algo._backend_entity.shapeof_metatypes,
min_max_algo._backend_entity.dropout_metatypes,
+ min_max_algo._backend_entity.preserved_metatypes,
)
q_setup = min_max_algo._get_quantizer_setup(
nncf_graph, inference_nncf_graph, hw_patterns=GraphPattern(), ignored_patterns=GraphPattern()
@@ -263,7 +266,7 @@ def test_get_stat_collector(
q_config_per_channel,
num_samples,
conv_sum_aggregation_nncf_graph,
- statistic_collector_parameters: TestGetStatisticsCollectorParameters,
+ statistic_collector_parameters: GetStatisticsCollectorParameters,
):
params = statistic_collector_parameters
min_max_algo = MinMaxQuantization(
@@ -277,7 +280,7 @@ def test_get_stat_collector(
port_id = None if TargetType.POST_LAYER_OPERATION else 0
ip = ActivationQuantizationInsertionPoint(params.target_node_name, port_id)
qp = SingleConfigQuantizationPoint(ip, q_config, [params.target_node_name])
- min_max_algo._add_activation_quantization_target_point(qp)
+ min_max_algo._add_activation_quantization_target_point(qp, conv_sum_aggregation_nncf_graph.nncf_graph)
else:
ip = WeightQuantizationInsertionPoint(params.target_node_name)
qp = SingleConfigQuantizationPoint(ip, q_config, [params.target_node_name])
diff --git a/tests/post_training/test_templates/test_smooth_quant.py b/tests/cross_fw/test_templates/test_smooth_quant.py
similarity index 84%
rename from tests/post_training/test_templates/test_smooth_quant.py
rename to tests/cross_fw/test_templates/test_smooth_quant.py
index 79d43bce711..f4ea260c14e 100644
--- a/tests/post_training/test_templates/test_smooth_quant.py
+++ b/tests/cross_fw/test_templates/test_smooth_quant.py
@@ -10,15 +10,15 @@
# limitations under the License.
from abc import abstractmethod
-from typing import Callable, Dict, Type, TypeVar
+from typing import Any, Callable, Dict, Type, TypeVar
import pytest
import nncf
+from nncf import IgnoredScope
from nncf.common.factory import NNCFGraphFactory
from nncf.common.factory import StatisticsAggregatorFactory
from nncf.common.graph.graph import NNCFNode
-from nncf.common.graph.transformations.commands import TransformationCommand
from nncf.experimental.common.tensor_statistics.collectors import AbsMaxReducer
from nncf.experimental.common.tensor_statistics.collectors import MaxAggregator
from nncf.parameters import ModelType
@@ -28,17 +28,23 @@
from nncf.quantization.algorithms.post_training.algorithm import PostTrainingQuantization
from nncf.quantization.algorithms.smooth_quant.algorithm import SmoothQuant
from nncf.quantization.algorithms.smooth_quant.backend import SmoothQuantAlgoBackend
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import LinearMultiShapeModel
-from tests.post_training.test_templates.helpers import NonZeroLinearModel
-from tests.post_training.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
-from tests.post_training.test_templates.helpers import get_static_dataset
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import LinearMultiShapeModel
+from tests.cross_fw.test_templates.helpers import NonZeroLinearModel
+from tests.cross_fw.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
+from tests.cross_fw.test_templates.helpers import get_static_dataset
TModel = TypeVar("TModel")
TTensor = TypeVar("TTensor")
class TemplateTestSQAlgorithm:
+ @staticmethod
+ def backend_supports_shared_layers() -> bool:
+ """
+ Returns False if backend does not support shared layers yet.
+ """
+
@staticmethod
def fn_to_type(tensor) -> TTensor:
return tensor
@@ -57,13 +63,6 @@ def get_node_name_map(self, model_cls) -> Dict[str, str]:
to nncf_grpah nodes names.
"""
- @staticmethod
- @abstractmethod
- def get_target_node_name(command: TransformationCommand):
- """
- Get target node name from a transformation command.
- """
-
@staticmethod
@abstractmethod
def get_transform_fn() -> Callable:
@@ -100,10 +99,19 @@ def get_matmul_metatype():
"""
@staticmethod
- def get_quantization_algorithm():
+ def get_ignored_scope(model_cls: Any) -> IgnoredScope:
+ """
+ Returns quantization ignored scope for given model class.
+ Default implementation is an empty ignored scope.
+ """
+ return IgnoredScope()
+
+ @staticmethod
+ def get_quantization_algorithm(ignored_scope: IgnoredScope):
return PostTrainingQuantization(
subset_size=1,
model_type=ModelType.TRANSFORMER,
+ ignored_scope=ignored_scope,
advanced_parameters=AdvancedQuantizationParameters(
overflow_fix=OverflowFix.DISABLE,
smooth_quant_alphas=AdvancedSmoothQuantParameters(matmul=0.95, convolution=0.95),
@@ -156,7 +164,7 @@ def test_smooth_quant_algo(self, model_cls, reference_values, tmpdir):
model = self.backend_specific_model(model_cls(), tmpdir)
dataset = get_static_dataset(model_cls.INPUT_SIZE, self.get_transform_fn(), self.fn_to_type)
- quantization_algorithm = self.get_quantization_algorithm()
+ quantization_algorithm = self.get_quantization_algorithm(self.get_ignored_scope(model_cls))
graph = NNCFGraphFactory.create(model)
quantized_model = quantization_algorithm.apply(model, graph, dataset=dataset)
@@ -209,6 +217,9 @@ def test_get_abs_max_channel_collector(self, inplace_statistics: bool):
),
)
def test__get_nodes_to_smooth_data(self, model_cls, references, tmpdir):
+ if not self.backend_supports_shared_layers() and model_cls is ShareWeghtsConvAndShareLinearModel:
+ pytest.skip("Current backend does not support shared weights yet.")
+
model = self.backend_specific_model(model_cls(), tmpdir)
nncf_graph = NNCFGraphFactory.create(model)
@@ -240,6 +251,13 @@ def test_empty_stats(self, mocker, tmpdir):
statistics_aggregator.register_statistic_points(algo_statistic_points)
statistics_aggregator.collect_statistics(model, graph)
+ weight_update_mock = mocker.MagicMock()
+ scale_insertion_mock = mocker.MagicMock()
+ backend_entity = algo._backend_entity
+ backend_entity.weight_update_command = weight_update_mock
+ backend_entity.scale_insertion_command = scale_insertion_mock
+ algo._set_backend_entity = lambda model: backend_entity
+
mocked_transformer = mocker.MagicMock()
mocker.patch("nncf.common.factory.ModelTransformerFactory.create", return_value=mocked_transformer)
algo.apply(model, graph, algo_statistic_points)
@@ -249,9 +267,16 @@ def test_empty_stats(self, mocker, tmpdir):
assert len(arg.transformations) == 2
mm_metatype = self.get_matmul_metatype()
- matmuls = [node for node in graph.topological_sort() if node.metatype == mm_metatype]
- for transformation in arg.transformations:
- assert self.get_target_node_name(transformation) != matmuls[0].node_name
+ target_matmul = [node for node in graph.topological_sort() if node.metatype == mm_metatype][1]
+
+ # Check weights update command
+ weight_update_mock.assert_called_once()
+ assert target_matmul == target_matmul
+
+ # Check scale insertion command
+ scale_insertion_mock.assert_called_once()
+ target_nodes = scale_insertion_mock.call_args.args[3]
+ assert target_nodes == [target_matmul]
def test_get_activation_channel_axis(self, node_metatype, layer_attributes, port_id, reference_value):
backend = self.get_backend()
diff --git a/tests/onnx/pytest.ini b/tests/onnx/pytest.ini
index 5d4ced66df5..7659952faf6 100644
--- a/tests/onnx/pytest.ini
+++ b/tests/onnx/pytest.ini
@@ -1,7 +1,7 @@
[pytest]
markers =
e2e_ptq: e2e ptq tests
- e2e_eval_original_model: original model evaluation
+ e2e_eval_reference_model: original model evaluation
python_files = test_*
xfail_strict = true
diff --git a/tests/onnx/quantization/test_bias_correction.py b/tests/onnx/quantization/test_bias_correction.py
index 2fef33e00b3..40cdf0dc8e1 100644
--- a/tests/onnx/quantization/test_bias_correction.py
+++ b/tests/onnx/quantization/test_bias_correction.py
@@ -21,11 +21,11 @@
from nncf.onnx.graph.nncf_graph_builder import GraphConverter
from nncf.onnx.graph.node_utils import get_bias_value
from nncf.quantization.algorithms.bias_correction.onnx_backend import ONNXBiasCorrectionAlgoBackend
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import MultipleConvTestModel
+from tests.cross_fw.test_templates.helpers import SplittedModel
+from tests.cross_fw.test_templates.test_bias_correction import TemplateTestBCAlgorithm
from tests.onnx.quantization.common import compare_nncf_graph
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import MultipleConvTestModel
-from tests.post_training.test_templates.helpers import SplittedModel
-from tests.post_training.test_templates.test_bias_correction import TemplateTestBCAlgorithm
from tests.shared.paths import TEST_ROOT
diff --git a/tests/onnx/quantization/test_calculation_quantizer_params.py b/tests/onnx/quantization/test_calculation_quantizer_params.py
index 8de2d758fd5..eb0a8864c1e 100644
--- a/tests/onnx/quantization/test_calculation_quantizer_params.py
+++ b/tests/onnx/quantization/test_calculation_quantizer_params.py
@@ -15,7 +15,7 @@
from nncf.onnx.quantization.quantizer_parameters import get_level_low_level_high
from nncf.quantization.fake_quantize import calculate_scale_zero_point
from nncf.tensor import Tensor
-from tests.post_training.test_templates.test_calculate_quantizer_parameters import TemplateTestFQParams
+from tests.cross_fw.test_templates.test_calculate_quantizer_parameters import TemplateTestFQParams
EPS = np.finfo(np.float32).eps
diff --git a/tests/onnx/quantization/test_classification_models_graph.py b/tests/onnx/quantization/test_classification_models_graph.py
index fb678852e7a..bb5c8232fb5 100644
--- a/tests/onnx/quantization/test_classification_models_graph.py
+++ b/tests/onnx/quantization/test_classification_models_graph.py
@@ -23,21 +23,61 @@
from tests.onnx.weightless_model import load_model_topology_with_zeros_weights
TORCHVISION_TEST_DATA = [
- (ModelToTest("resnet18", [1, 3, 224, 224]), models.resnet18(pretrained=True), {}),
+ (
+ ModelToTest("resnet18", [1, 3, 224, 224]),
+ models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1),
+ {},
+ ),
(
ModelToTest("resnet50_cpu_spr", [1, 3, 224, 224]),
- models.resnet50(pretrained=True),
+ models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V1),
{"target_device": TargetDevice.CPU_SPR},
),
- (ModelToTest("mobilenet_v2", [1, 3, 224, 224]), models.mobilenet_v2(pretrained=True), {}),
- (ModelToTest("mobilenet_v3_small", [1, 3, 224, 224]), models.mobilenet_v3_small(pretrained=True), {}),
- (ModelToTest("inception_v3", [1, 3, 224, 224]), models.inception_v3(pretrained=True), {}),
- (ModelToTest("googlenet", [1, 3, 224, 224]), models.googlenet(pretrained=True), {}),
- (ModelToTest("vgg16", [1, 3, 224, 224]), models.vgg16(pretrained=True), {}),
- (ModelToTest("shufflenet_v2_x1_0", [1, 3, 224, 224]), models.shufflenet_v2_x1_0(pretrained=True), {}),
- (ModelToTest("squeezenet1_0", [1, 3, 224, 224]), models.squeezenet1_0(pretrained=True), {}),
- (ModelToTest("densenet121", [1, 3, 224, 224]), models.densenet121(pretrained=True), {}),
- (ModelToTest("mnasnet0_5", [1, 3, 224, 224]), models.mnasnet0_5(pretrained=True), {}),
+ (
+ ModelToTest("mobilenet_v2", [1, 3, 224, 224]),
+ models.mobilenet_v2(weights=models.MobileNet_V2_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("mobilenet_v3_small", [1, 3, 224, 224]),
+ models.mobilenet_v3_small(weights=models.MobileNet_V3_Small_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("inception_v3", [1, 3, 224, 224]),
+ models.inception_v3(weights=models.Inception_V3_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("googlenet", [1, 3, 224, 224]),
+ models.googlenet(weights=models.GoogLeNet_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("vgg16", [1, 3, 224, 224]),
+ models.vgg16(weights=models.VGG16_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("shufflenet_v2_x1_0", [1, 3, 224, 224]),
+ models.shufflenet_v2_x1_0(weights=models.ShuffleNet_V2_X1_0_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("squeezenet1_0", [1, 3, 224, 224]),
+ models.squeezenet1_0(weights=models.SqueezeNet1_0_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("densenet121", [1, 3, 224, 224]),
+ models.densenet121(weights=models.DenseNet121_Weights.IMAGENET1K_V1),
+ {},
+ ),
+ (
+ ModelToTest("mnasnet0_5", [1, 3, 224, 224]),
+ models.mnasnet0_5(weights=models.MNASNet0_5_Weights.IMAGENET1K_V1),
+ {},
+ ),
]
diff --git a/tests/onnx/quantization/test_fast_bias_correction.py b/tests/onnx/quantization/test_fast_bias_correction.py
index 9a6322e9b76..0ed364ecb80 100644
--- a/tests/onnx/quantization/test_fast_bias_correction.py
+++ b/tests/onnx/quantization/test_fast_bias_correction.py
@@ -19,7 +19,7 @@
from nncf.onnx.graph.node_utils import get_bias_value
from nncf.onnx.graph.node_utils import is_node_with_bias
from nncf.quantization.algorithms.fast_bias_correction.onnx_backend import ONNXFastBiasCorrectionAlgoBackend
-from tests.post_training.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
+from tests.cross_fw.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
def get_data_from_node(model: onnx.ModelProto, node_name: str):
diff --git a/tests/onnx/quantization/test_min_max.py b/tests/onnx/quantization/test_min_max.py
index 940b6e0e7bf..5854ccf0761 100644
--- a/tests/onnx/quantization/test_min_max.py
+++ b/tests/onnx/quantization/test_min_max.py
@@ -21,11 +21,11 @@
from nncf.onnx.graph.transformations.commands import ONNXTargetPoint
from nncf.quantization.algorithms.min_max.backend import MinMaxAlgoBackend
from nncf.quantization.algorithms.min_max.onnx_backend import ONNXMinMaxAlgoBackend
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.test_min_max import MATMUL_WEIGHT_SHAPE
-from tests.post_training.test_templates.test_min_max import TemplateTestGetChannelAxes
-from tests.post_training.test_templates.test_min_max import TemplateTestGetTargetPointShape
-from tests.post_training.test_templates.test_min_max import TemplateTestMinMaxAlgorithm
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.test_min_max import MATMUL_WEIGHT_SHAPE
+from tests.cross_fw.test_templates.test_min_max import TemplateTestGetChannelAxes
+from tests.cross_fw.test_templates.test_min_max import TemplateTestGetTargetPointShape
+from tests.cross_fw.test_templates.test_min_max import TemplateTestMinMaxAlgorithm
class TestONNXMinMaxAlgorithm(TemplateTestMinMaxAlgorithm):
diff --git a/tests/onnx/quantization/test_opset_versions.py b/tests/onnx/quantization/test_opset_versions.py
index 37ca24e8fc7..c31a04f74cb 100644
--- a/tests/onnx/quantization/test_opset_versions.py
+++ b/tests/onnx/quantization/test_opset_versions.py
@@ -22,7 +22,7 @@
@pytest.mark.parametrize("opset_version", TEST_OPSETS)
def test_model_opset_version(tmp_path, opset_version):
- model = models.mobilenet_v2(pretrained=True)
+ model = models.mobilenet_v2(weights=models.MobileNet_V2_Weights.IMAGENET1K_V1)
input_shape = [1, 3, 224, 224]
x = torch.randn(input_shape, requires_grad=False)
torch.onnx.export(model, x, tmp_path / "model.onnx", opset_version=opset_version)
diff --git a/tests/onnx/quantization/test_ptq_params.py b/tests/onnx/quantization/test_ptq_params.py
index c8bcc04f533..be5ca8669d6 100644
--- a/tests/onnx/quantization/test_ptq_params.py
+++ b/tests/onnx/quantization/test_ptq_params.py
@@ -34,11 +34,11 @@
from tests.common.quantization.metatypes import Conv2dTestMetatype
from tests.common.quantization.metatypes import LinearTestMetatype
from tests.common.quantization.metatypes import SoftmaxTestMetatype
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.models import NNCFGraphToTestMatMul
+from tests.cross_fw.test_templates.test_ptq_params import TemplateTestPTQParams
from tests.onnx.models import LinearModel
from tests.onnx.models import OneDepthwiseConvolutionalModel
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.models import NNCFGraphToTestMatMul
-from tests.post_training.test_templates.test_ptq_params import TemplateTestPTQParams
def get_hw_patterns(device: TargetDevice = TargetDevice.ANY) -> GraphPattern:
diff --git a/tests/onnx/quantization/test_quantizer_config.py b/tests/onnx/quantization/test_quantizer_config.py
index 593d026d8e8..b82318b34db 100644
--- a/tests/onnx/quantization/test_quantizer_config.py
+++ b/tests/onnx/quantization/test_quantizer_config.py
@@ -16,10 +16,10 @@
from nncf.onnx.graph.metatypes.onnx_metatypes import ONNXDepthwiseConvolutionMetatype
from nncf.onnx.graph.nncf_graph_builder import ONNXLayerAttributes
from nncf.quantization.algorithms.min_max.onnx_backend import ONNXMinMaxAlgoBackend
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.models import NNCFGraphToTestDepthwiseConv
-from tests.post_training.test_templates.models import NNCFGraphToTestSumAggregation
-from tests.post_training.test_templates.test_quantizer_config import TemplateTestQuantizerConfig
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.models import NNCFGraphToTestDepthwiseConv
+from tests.cross_fw.test_templates.models import NNCFGraphToTestSumAggregation
+from tests.cross_fw.test_templates.test_quantizer_config import TemplateTestQuantizerConfig
class TestQuantizerConfig(TemplateTestQuantizerConfig):
diff --git a/tests/onnx/test_nncf_graph_builder.py b/tests/onnx/test_nncf_graph_builder.py
index 576aa55067c..8194f6858fb 100644
--- a/tests/onnx/test_nncf_graph_builder.py
+++ b/tests/onnx/test_nncf_graph_builder.py
@@ -42,16 +42,46 @@ def test_compare_nncf_graph_synthetic_models(model_cls_to_test):
CLASSIFICATION_MODEL_DEF_AND_OBJ = [
- (ModelToTest("resnet18", [1, 3, 224, 224]), models.resnet18(pretrained=True)),
- (ModelToTest("mobilenet_v2", [1, 3, 224, 224]), models.mobilenet_v2(pretrained=True)),
- (ModelToTest("mobilenet_v3_small", [1, 3, 224, 224]), models.mobilenet_v3_small(pretrained=True)),
- (ModelToTest("inception_v3", [1, 3, 224, 224]), models.inception_v3(pretrained=True)),
- (ModelToTest("googlenet", [1, 3, 224, 224]), models.googlenet(pretrained=True)),
- (ModelToTest("vgg16", [1, 3, 224, 224]), models.vgg16(pretrained=True)),
- (ModelToTest("shufflenet_v2_x1_0", [1, 3, 224, 224]), models.shufflenet_v2_x1_0(pretrained=True)),
- (ModelToTest("squeezenet1_0", [1, 3, 224, 224]), models.squeezenet1_0(pretrained=True)),
- (ModelToTest("densenet121", [1, 3, 224, 224]), models.densenet121(pretrained=True)),
- (ModelToTest("mnasnet0_5", [1, 3, 224, 224]), models.mnasnet0_5(pretrained=True)),
+ (
+ ModelToTest("resnet18", [1, 3, 224, 224]),
+ models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("mobilenet_v2", [1, 3, 224, 224]),
+ models.mobilenet_v2(weights=models.MobileNet_V2_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("mobilenet_v3_small", [1, 3, 224, 224]),
+ models.mobilenet_v3_small(weights=models.MobileNet_V3_Small_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("inception_v3", [1, 3, 224, 224]),
+ models.inception_v3(weights=models.Inception_V3_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("googlenet", [1, 3, 224, 224]),
+ models.googlenet(weights=models.GoogLeNet_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("vgg16", [1, 3, 224, 224]),
+ models.vgg16(weights=models.VGG16_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("shufflenet_v2_x1_0", [1, 3, 224, 224]),
+ models.shufflenet_v2_x1_0(weights=models.ShuffleNet_V2_X1_0_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("squeezenet1_0", [1, 3, 224, 224]),
+ models.squeezenet1_0(weights=models.SqueezeNet1_0_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("densenet121", [1, 3, 224, 224]),
+ models.densenet121(weights=models.DenseNet121_Weights.IMAGENET1K_V1),
+ ),
+ (
+ ModelToTest("mnasnet0_5", [1, 3, 224, 224]),
+ models.mnasnet0_5(weights=models.MNASNet0_5_Weights.IMAGENET1K_V1),
+ ),
]
diff --git a/tests/onnx/test_pattern_manager.py b/tests/onnx/test_pattern_manager.py
index 51b611489c8..39ca671bf3f 100644
--- a/tests/onnx/test_pattern_manager.py
+++ b/tests/onnx/test_pattern_manager.py
@@ -45,6 +45,9 @@
HWFusedPatternNames.LINEAR_BIASED_ACTIVATION_ELEMENTWISE: "Not relevant for ONNX.",
HWFusedPatternNames.MVN_SCALE_SHIFT_ACTIVATIONS: "Not relevant for ONNX.",
HWFusedPatternNames.LINEAR_ACTIVATIONS_UNSQUEEZE_BN_SQUEEZE: "Not relevant for ONNX.",
+ HWFusedPatternNames.ARITHMETIC_ACTIVATIONS_ARITHMETIC: "Not relevant for ONNX.",
+ HWFusedPatternNames.LINEAR_BATCH_TO_SPACE_ARITHMETIC_ACTIVATIONS: "Not relevant for ONNX.",
+ HWFusedPatternNames.LINEAR_BATCH_TO_SPACE_SCALE_SHIFT_ACTIVATIONS: "Not relevant for ONNX.",
}
IGNORING_IGNORED_PATTERN_REASONS = {
diff --git a/tests/onnx/test_weightless_model.py b/tests/onnx/test_weightless_model.py
index 04968c875f9..4116da98ac2 100644
--- a/tests/onnx/test_weightless_model.py
+++ b/tests/onnx/test_weightless_model.py
@@ -21,7 +21,10 @@
@pytest.mark.parametrize(
- ("model_to_test", "model"), [(ModelToTest("resnet18", [1, 3, 224, 224]), models.resnet18(pretrained=True))]
+ ("model_to_test", "model"),
+ [
+ (ModelToTest("resnet18", [1, 3, 224, 224]), models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1)),
+ ],
)
def test_save_weightless_model(tmp_path, model_to_test, model):
onnx_model_path = tmp_path / (model_to_test.model_name + ".onnx")
diff --git a/tests/openvino/conftest.py b/tests/openvino/conftest.py
index 0331e5930cc..6452c50aa26 100644
--- a/tests/openvino/conftest.py
+++ b/tests/openvino/conftest.py
@@ -39,6 +39,19 @@ def models(request):
return Path(option)
+@pytest.fixture(name="zero_seed")
+def _seed():
+ """
+ Fixture to ensure deterministic randomness across tests.
+ """
+ import random
+
+ import numpy as np
+
+ np.random.seed(0)
+ random.seed(0)
+
+
# Custom markers specifying tests to be run only if a specific option
# is present on the pytest command line must be registered here.
MARKS_VS_OPTIONS = {**COMMON_SCOPE_MARKS_VS_OPTIONS}
diff --git a/tests/openvino/native/common.py b/tests/openvino/native/common.py
index 47118916d87..8e4fa7673c8 100644
--- a/tests/openvino/native/common.py
+++ b/tests/openvino/native/common.py
@@ -22,6 +22,7 @@
from nncf.openvino.graph.nncf_graph_builder import GraphConverter
from tests.openvino.conftest import OPENVINO_NATIVE_TEST_ROOT
from tests.shared.nx_graph import compare_nx_graph_with_reference
+from tests.shared.openvino_version import get_openvino_version
def convert_torch_model(model: torch.nn.Module, input_shape: Tuple[int], tmp_path: Path) -> ov.Model:
@@ -77,22 +78,6 @@ def dump_to_json(local_path, data):
json.dump(deepcopy(data), file, indent=4, cls=NumpyEncoder)
-def get_openvino_major_minor_version() -> Tuple[int]:
- ov_version = ov.__version__
- pos = ov_version.find("-")
- if pos != -1:
- ov_version = ov_version[:pos]
-
- ov_version = version.parse(ov_version).base_version
- return tuple(map(int, ov_version.split(".")[:2]))
-
-
-def get_openvino_version() -> str:
- major_verison, minor_version = get_openvino_major_minor_version()
-
- return f"{major_verison}.{minor_version}"
-
-
def get_actual_reference_for_current_openvino(rel_path: Path) -> Path:
"""
Get path to actual reference file.
diff --git a/tests/openvino/native/data/2024.1/reference_graphs/quantized/scaled_dot_product_attention.dot b/tests/openvino/native/data/2024.1/reference_graphs/quantized/scaled_dot_product_attention.dot
index 9891a2b675a..4fa4a752a26 100644
--- a/tests/openvino/native/data/2024.1/reference_graphs/quantized/scaled_dot_product_attention.dot
+++ b/tests/openvino/native/data/2024.1/reference_graphs/quantized/scaled_dot_product_attention.dot
@@ -1,33 +1,63 @@
strict digraph {
"0 Input_1" [id=0, type=Parameter];
"1 Input_2" [id=1, type=Parameter];
-"2 Input_3" [id=2, type=Parameter];
-"3 Input_4" [id=3, type=Parameter];
-"4 Input_1/fq_output_0" [id=4, type=FakeQuantize];
-"5 Input_2/fq_output_0" [id=5, type=FakeQuantize];
-"6 ScaledDotProductAttention_5" [id=6, type=ScaledDotProductAttention];
-"7 Result" [id=7, type=Result];
-"8 Constant_2553" [id=8, type=Constant];
-"9 Constant_2552" [id=9, type=Constant];
-"10 Constant_2551" [id=10, type=Constant];
-"11 Constant_2550" [id=11, type=Constant];
-"12 Constant_2548" [id=12, type=Constant];
-"13 Constant_2547" [id=13, type=Constant];
-"14 Constant_2546" [id=14, type=Constant];
-"15 Constant_2545" [id=15, type=Constant];
-"0 Input_1" -> "4 Input_1/fq_output_0" [label="[1, 1, 1, 64]", style=solid];
-"1 Input_2" -> "5 Input_2/fq_output_0" [label="[1, 1, 1, 64]", style=solid];
-"2 Input_3" -> "6 ScaledDotProductAttention_5" [label="[1, 1, 1, 64]", style=solid];
-"3 Input_4" -> "6 ScaledDotProductAttention_5" [label="[1, 1, 1, 1]", style=solid];
-"4 Input_1/fq_output_0" -> "6 ScaledDotProductAttention_5" [label="[1, 1, 1, 64]", style=solid];
-"5 Input_2/fq_output_0" -> "6 ScaledDotProductAttention_5" [label="[1, 1, 1, 64]", style=solid];
-"6 ScaledDotProductAttention_5" -> "7 Result" [label="[1, 1, 1, 64]", style=solid];
-"8 Constant_2553" -> "5 Input_2/fq_output_0" [label="[]", style=solid];
-"9 Constant_2552" -> "5 Input_2/fq_output_0" [label="[]", style=solid];
-"10 Constant_2551" -> "5 Input_2/fq_output_0" [label="[]", style=solid];
-"11 Constant_2550" -> "5 Input_2/fq_output_0" [label="[]", style=solid];
-"12 Constant_2548" -> "4 Input_1/fq_output_0" [label="[]", style=solid];
-"13 Constant_2547" -> "4 Input_1/fq_output_0" [label="[]", style=solid];
-"14 Constant_2546" -> "4 Input_1/fq_output_0" [label="[]", style=solid];
-"15 Constant_2545" -> "4 Input_1/fq_output_0" [label="[]", style=solid];
+"2 Reshape_3835" [id=2, type=Reshape];
+"3 ScaledDotProductAttention_3850" [id=3, type=ScaledDotProductAttention];
+"4 Reshape_3837" [id=4, type=Reshape];
+"5 Result" [id=5, type=Result];
+"6 Reshape_3839/fq_input_0" [id=6, type=FakeQuantize];
+"7 Reshape_3843/fq_input_0" [id=7, type=FakeQuantize];
+"8 Reshape_3847" [id=8, type=Reshape];
+"9 Reshape_3839" [id=9, type=Reshape];
+"10 Reshape_3843" [id=10, type=Reshape];
+"11 Reshape_3849" [id=11, type=Reshape];
+"12 Reshape_3841" [id=12, type=Reshape];
+"13 Reshape_3845" [id=13, type=Reshape];
+"14 Constant_3848" [id=14, type=Constant];
+"15 Constant_3846" [id=15, type=Constant];
+"16 Constant_3836" [id=16, type=Constant];
+"17 Constant_3834" [id=17, type=Constant];
+"18 Constant_3844" [id=18, type=Constant];
+"19 Constant_3842" [id=19, type=Constant];
+"20 Reshape_3843/fq_input_0/output_high" [id=20, type=Constant];
+"21 Reshape_3843/fq_input_0/output_low" [id=21, type=Constant];
+"22 Reshape_3843/fq_input_0/input_high" [id=22, type=Constant];
+"23 Reshape_3843/fq_input_0/input_low" [id=23, type=Constant];
+"24 Constant_3840" [id=24, type=Constant];
+"25 Constant_3838" [id=25, type=Constant];
+"26 Reshape_3839/fq_input_0/output_high" [id=26, type=Constant];
+"27 Reshape_3839/fq_input_0/output_low" [id=27, type=Constant];
+"28 Reshape_3839/fq_input_0/input_high" [id=28, type=Constant];
+"29 Reshape_3839/fq_input_0/input_low" [id=29, type=Constant];
+"0 Input_1" -> "2 Reshape_3835" [label="[1, 1, 1, 64]", style=solid];
+"1 Input_2" -> "3 ScaledDotProductAttention_3850" [label="[1, 1, 1, 1]", style=solid];
+"2 Reshape_3835" -> "4 Reshape_3837" [label="[64]", style=solid];
+"3 ScaledDotProductAttention_3850" -> "5 Result" [label="[1, 1, 1, 64]", style=solid];
+"4 Reshape_3837" -> "6 Reshape_3839/fq_input_0" [label="[1, 1, 1, 64]", style=solid];
+"4 Reshape_3837" -> "7 Reshape_3843/fq_input_0" [label="[1, 1, 1, 64]", style=solid];
+"4 Reshape_3837" -> "8 Reshape_3847" [label="[1, 1, 1, 64]", style=solid];
+"6 Reshape_3839/fq_input_0" -> "9 Reshape_3839" [label="[1, 1, 1, 64]", style=solid];
+"7 Reshape_3843/fq_input_0" -> "10 Reshape_3843" [label="[1, 1, 1, 64]", style=solid];
+"8 Reshape_3847" -> "11 Reshape_3849" [label="[64]", style=solid];
+"9 Reshape_3839" -> "12 Reshape_3841" [label="[64]", style=solid];
+"10 Reshape_3843" -> "13 Reshape_3845" [label="[64]", style=solid];
+"11 Reshape_3849" -> "3 ScaledDotProductAttention_3850" [label="[1, 1, 1, 64]", style=solid];
+"12 Reshape_3841" -> "3 ScaledDotProductAttention_3850" [label="[1, 1, 1, 64]", style=solid];
+"13 Reshape_3845" -> "3 ScaledDotProductAttention_3850" [label="[1, 1, 1, 64]", style=solid];
+"14 Constant_3848" -> "11 Reshape_3849" [label="[4]", style=dashed];
+"15 Constant_3846" -> "8 Reshape_3847" [label="[1]", style=dashed];
+"16 Constant_3836" -> "4 Reshape_3837" [label="[4]", style=dashed];
+"17 Constant_3834" -> "2 Reshape_3835" [label="[1]", style=dashed];
+"18 Constant_3844" -> "13 Reshape_3845" [label="[4]", style=dashed];
+"19 Constant_3842" -> "10 Reshape_3843" [label="[1]", style=dashed];
+"20 Reshape_3843/fq_input_0/output_high" -> "7 Reshape_3843/fq_input_0" [label="[]", style=solid];
+"21 Reshape_3843/fq_input_0/output_low" -> "7 Reshape_3843/fq_input_0" [label="[]", style=solid];
+"22 Reshape_3843/fq_input_0/input_high" -> "7 Reshape_3843/fq_input_0" [label="[]", style=solid];
+"23 Reshape_3843/fq_input_0/input_low" -> "7 Reshape_3843/fq_input_0" [label="[]", style=solid];
+"24 Constant_3840" -> "12 Reshape_3841" [label="[4]", style=dashed];
+"25 Constant_3838" -> "9 Reshape_3839" [label="[1]", style=dashed];
+"26 Reshape_3839/fq_input_0/output_high" -> "6 Reshape_3839/fq_input_0" [label="[]", style=solid];
+"27 Reshape_3839/fq_input_0/output_low" -> "6 Reshape_3839/fq_input_0" [label="[]", style=solid];
+"28 Reshape_3839/fq_input_0/input_high" -> "6 Reshape_3839/fq_input_0" [label="[]", style=solid];
+"29 Reshape_3839/fq_input_0/input_low" -> "6 Reshape_3839/fq_input_0" [label="[]", style=solid];
}
diff --git a/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int4_sym.json b/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int4_sym.json
index 2d8d8b70941..17c9ea559e7 100644
--- a/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int4_sym.json
+++ b/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int4_sym.json
@@ -3,32 +3,32 @@
"scale": [
[
[
- 0.11376953125
+ -0.09954833984375
]
],
[
[
- 0.1346435546875
+ -0.11773681640625
]
],
[
[
- 0.1363525390625
+ -0.11932373046875
]
],
[
[
- 0.1422119140625
+ -0.1243896484375
]
],
[
[
- 0.1331787109375
+ -0.11651611328125
]
],
[
[
- 0.14013671875
+ -0.12261962890625
]
]
]
diff --git a/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int8_sym.json b/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int8_sym.json
index 777d418696d..aa9b2e9a55f 100644
--- a/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int8_sym.json
+++ b/tests/openvino/native/data/2024.1/reference_scales/IntegerModel_compressed_weights_int8_sym.json
@@ -2,189 +2,189 @@
"matmul_2_data": {
"compressed_weight": [
[
- 54,
- 24,
- 72,
- 127,
- 37,
- 8,
- 65
- ],
- [
- 27,
- 12,
- 78,
- 40,
- 91,
- 27,
- 127
- ],
- [
- 49,
- 14,
- 84,
- 123,
- 59,
- 127,
- 67
- ],
- [
- 54,
- 79,
- 127,
- 121,
- 59,
- 97,
- 63
- ],
- [
- 72,
- 107,
- 56,
- 100,
- 97,
- 127,
- 16
- ],
- [
- 94,
- 120,
- 125,
- 2,
- 112,
- 127,
- 124
+ -54,
+ -24,
+ -72,
+ -128,
+ -37,
+ -8,
+ -65
+ ],
+ [
+ -27,
+ -12,
+ -79,
+ -41,
+ -91,
+ -27,
+ -128
+ ],
+ [
+ -49,
+ -14,
+ -84,
+ -124,
+ -59,
+ -128,
+ -67
+ ],
+ [
+ -55,
+ -80,
+ -128,
+ -122,
+ -59,
+ -97,
+ -64
+ ],
+ [
+ -73,
+ -108,
+ -57,
+ -101,
+ -98,
+ -128,
+ -16
+ ],
+ [
+ -95,
+ -121,
+ -126,
+ -2,
+ -113,
+ -128,
+ -125
]
],
"scale": [
[
- 0.0062713623046875
+ -0.006221771240234375
],
[
- 0.007419586181640625
+ -0.007358551025390625
],
[
- 0.00751495361328125
+ -0.007457733154296875
],
[
- 0.00783538818359375
+ -0.00777435302734375
],
[
- 0.0073394775390625
+ -0.007282257080078125
],
[
- 0.007724761962890625
+ -0.007663726806640625
]
]
},
"matmul_1_data": {
"compressed_weight": [
[
- 57,
- 80,
- 5,
- 24,
- 127,
- 123
+ -57,
+ -81,
+ -5,
+ -24,
+ -128,
+ -124
],
[
- 78,
- 49,
- 127,
- 125,
- 87,
- 83
+ -79,
+ -49,
+ -128,
+ -126,
+ -88,
+ -83
],
[
- 121,
- 68,
- 24,
- 127,
- 92,
- 55
+ -122,
+ -69,
+ -24,
+ -128,
+ -93,
+ -55
],
[
- 66,
- 121,
- 127,
- 49,
- 78,
- 44
+ -67,
+ -122,
+ -128,
+ -49,
+ -78,
+ -44
],
[
- 85,
- 48,
- 56,
- 127,
- 32,
- 89
+ -85,
+ -49,
+ -56,
+ -128,
+ -33,
+ -90
],
[
- 12,
- 121,
- 114,
- 35,
- 127,
- 8
+ -12,
+ -122,
+ -115,
+ -35,
+ -128,
+ -9
]
],
"scale": [
[
- 0.005279541015625
+ -0.005237579345703125
],
[
- 0.00785064697265625
+ -0.00778961181640625
],
[
- 0.005680084228515625
+ -0.00563812255859375
],
[
- 0.007354736328125
+ -0.007297515869140625
],
[
- 0.00701141357421875
+ -0.006954193115234375
],
[
- 0.006900787353515625
+ -0.006847381591796875
]
]
},
"gather_2_data": {
"compressed_weight": [
[
- 89,
- 38,
- 6,
- 2,
- 113,
- 127
+ -89,
+ -38,
+ -6,
+ -2,
+ -114,
+ -128
],
[
- 82,
- 99,
- 74,
- 127,
- 111,
+ -83,
+ -100,
+ -74,
+ -128,
+ -112,
0
],
[
- 126,
- 5,
- 107,
- 26,
- 127,
- 80
+ -127,
+ -5,
+ -108,
+ -26,
+ -128,
+ -80
]
],
"scale": [
[
- 0.0071868896484375
+ -0.007129669189453125
],
[
- 0.00736236572265625
+ -0.007305145263671875
],
[
- 0.00679779052734375
+ -0.006744384765625
]
]
}
diff --git a/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_mixed.json b/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_mixed.json
index e8ee468c0c2..38d25338b10 100644
--- a/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_mixed.json
+++ b/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_mixed.json
@@ -45,11 +45,11 @@
]
]
},
- "LSTMSequence/fq_output_0": {
+ "LSTMSequence/fq_output_1": {
"input_low": 0.0,
- "input_high": 0.23005808889865875,
+ "input_high": 0.12186191976070404,
"output_low": 0.0,
- "output_high": 0.23005808889865875
+ "output_high": 0.12186191976070404
},
"LSTMSequence/fq_weights_5": {
"input_low": [
diff --git a/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_performance.json b/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_performance.json
index e8ee468c0c2..38d25338b10 100644
--- a/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_performance.json
+++ b/tests/openvino/native/data/2024.1/reference_scales/LSTMSequenceModel_performance.json
@@ -45,11 +45,11 @@
]
]
},
- "LSTMSequence/fq_output_0": {
+ "LSTMSequence/fq_output_1": {
"input_low": 0.0,
- "input_high": 0.23005808889865875,
+ "input_high": 0.12186191976070404,
"output_low": 0.0,
- "output_high": 0.23005808889865875
+ "output_high": 0.12186191976070404
},
"LSTMSequence/fq_weights_5": {
"input_low": [
diff --git a/tests/openvino/native/data/2024.3/reference_scales/UnifiedScalesModel_fp8_e4m3.json b/tests/openvino/native/data/2024.3/reference_scales/UnifiedScalesModel_fp8_e4m3.json
new file mode 100644
index 00000000000..55c90c92024
--- /dev/null
+++ b/tests/openvino/native/data/2024.3/reference_scales/UnifiedScalesModel_fp8_e4m3.json
@@ -0,0 +1,58 @@
+{
+ "Conv/fc_weights_1": {
+ "scale": [
+ [
+ [
+ [
+ 550.8624267578125
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 490.8214416503906
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 479.1072692871094
+ ]
+ ]
+ ]
+ ],
+ "shift": [
+ [
+ [
+ [
+ 0.0
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 0.0
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 0.0
+ ]
+ ]
+ ]
+ ]
+ },
+ "Cos/fc_output_0": {
+ "scale": 224.00006103515625,
+ "shift": 0.0
+ },
+ "Sin/fc_output_0": {
+ "scale": 224.00006103515625,
+ "shift": 0.0
+ }
+}
\ No newline at end of file
diff --git a/tests/openvino/native/data/2024.3/reference_scales/UnifiedScalesModel_fp8_e5m2.json b/tests/openvino/native/data/2024.3/reference_scales/UnifiedScalesModel_fp8_e5m2.json
new file mode 100644
index 00000000000..96b37a2404c
--- /dev/null
+++ b/tests/openvino/native/data/2024.3/reference_scales/UnifiedScalesModel_fp8_e5m2.json
@@ -0,0 +1,58 @@
+{
+ "Conv/fc_weights_1": {
+ "scale": [
+ [
+ [
+ [
+ 70510.390625
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 62825.14453125
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 61325.73046875
+ ]
+ ]
+ ]
+ ],
+ "shift": [
+ [
+ [
+ [
+ 0.0
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 0.0
+ ]
+ ]
+ ],
+ [
+ [
+ [
+ 0.0
+ ]
+ ]
+ ]
+ ]
+ },
+ "Cos/fc_output_0": {
+ "scale": 28672.0078125,
+ "shift": 0.0
+ },
+ "Sin/fc_output_0": {
+ "scale": 28672.0078125,
+ "shift": 0.0
+ }
+}
\ No newline at end of file
diff --git a/tests/openvino/native/models.py b/tests/openvino/native/models.py
index 88bdce3bac6..77ec443274f 100644
--- a/tests/openvino/native/models.py
+++ b/tests/openvino/native/models.py
@@ -490,7 +490,7 @@ def _create_ov_model(self):
x, initial_hidden_state, initial_cell_state, seq_len, W, R, B, 128, "FORWARD", name="LSTMSequence"
)
data = self._rng.random((1, 1, 128, 3)).astype(np.float32)
- matmul = opset.matmul(lstm.output(0), data, transpose_a=False, transpose_b=False, name="MatMul")
+ matmul = opset.matmul(lstm.output(1), data, transpose_a=False, transpose_b=False, name="MatMul")
result = opset.result(matmul, name="Result")
result.get_output_tensor(0).set_names(set(["Result"]))
@@ -871,15 +871,23 @@ def _create_ov_model(self):
class ScaledDotProductAttentionModel(OVReferenceModel):
def _create_ov_model(self):
- query = opset.parameter([1, 1, 1, 64], name="Input_1")
- key = opset.parameter([1, 1, 1, 64], name="Input_2")
- value = opset.parameter([1, 1, 1, 64], name="Input_3")
- attn_mask = opset.parameter([1, 1, 1, 1], name="Input_4")
-
- attn = opset.scaled_dot_product_attention(query, key, value, attn_mask)
+ input_ = opset.parameter([1, 1, 1, 64], name="Input_1")
+ attn_mask = opset.parameter([1, 1, 1, 1], name="Input_2")
+ x = opset.reshape(input_, [64], False)
+ x = opset.reshape(x, [1, 1, 1, 64], False)
+
+ # Parallel edges are not supported by PTQ for now.
+ # Ref 148498
+ inputs = []
+ for _ in range(3):
+ x_ = opset.reshape(x, [64], False)
+ x_ = opset.reshape(x_, [1, 1, 1, 64], False)
+ inputs.append(x_)
+
+ attn = opset.scaled_dot_product_attention(*inputs, attn_mask)
result = opset.result(attn, name="Result")
result.get_output_tensor(0).set_names(set(["Result"]))
- model = ov.Model([result], [query, key, value, attn_mask])
+ model = ov.Model([result], [input_, attn_mask])
return model
@@ -1131,3 +1139,20 @@ def _create_ov_model(self):
result.get_output_tensor(0).set_names(set(["Result"]))
model = ov.Model([result], [input])
return model
+
+
+class UnifiedScalesModel(OVReferenceModel):
+ def _create_ov_model(self):
+ input = opset.parameter([1, 3, 4, 2], name="Input")
+ multiply = opset.multiply(input, self._rng.random((1, 2)).astype(np.float32), name="Mul")
+ sin = opset.sin(multiply, name="Sin")
+ cos = opset.cos(multiply, name="Cos")
+ concat = opset.concat([sin, cos], axis=0)
+ kernel = self._rng.random((3, 3, 1, 1)).astype(np.float32)
+ strides = [1, 1]
+ pads = [0, 0]
+ dilations = [1, 1]
+ conv = opset.convolution(concat, kernel, strides, pads, pads, dilations, name="Conv")
+ result = opset.result(conv, name="Result")
+ model = ov.Model([result], [input])
+ return model
diff --git a/tests/openvino/native/quantization/test_calculation_quantizer_params.py b/tests/openvino/native/quantization/test_calculation_quantizer_params.py
index 217d03d6cd1..aa070771671 100644
--- a/tests/openvino/native/quantization/test_calculation_quantizer_params.py
+++ b/tests/openvino/native/quantization/test_calculation_quantizer_params.py
@@ -9,7 +9,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from nncf.tensor import Tensor
-from tests.post_training.test_templates.test_calculate_quantizer_parameters import TemplateTestFQParams
+from tests.cross_fw.test_templates.test_calculate_quantizer_parameters import TemplateTestFQParams
class TestFQParams(TemplateTestFQParams):
diff --git a/tests/openvino/native/quantization/test_channel_alignment.py b/tests/openvino/native/quantization/test_channel_alignment.py
index 7cae18d975b..a376dbd2fba 100644
--- a/tests/openvino/native/quantization/test_channel_alignment.py
+++ b/tests/openvino/native/quantization/test_channel_alignment.py
@@ -29,7 +29,7 @@
from nncf.openvino.graph.transformations.commands import OVWeightUpdateCommand
from nncf.quantization.algorithms.channel_alignment.backend import LayoutDescriptor
from nncf.quantization.algorithms.channel_alignment.openvino_backend import OVChannelAlignmentAlgoBackend
-from tests.post_training.test_templates.test_channel_alignment import TemplateTestChannelAlignment
+from tests.cross_fw.test_templates.test_channel_alignment import TemplateTestChannelAlignment
class TestOVChannelAlignment(TemplateTestChannelAlignment):
diff --git a/tests/openvino/native/quantization/test_fq_params_calculation.py b/tests/openvino/native/quantization/test_fq_params_calculation.py
index f455f1ca995..ce6fe1d356c 100644
--- a/tests/openvino/native/quantization/test_fq_params_calculation.py
+++ b/tests/openvino/native/quantization/test_fq_params_calculation.py
@@ -18,6 +18,7 @@
from nncf.common.quantization.structs import QuantizationPreset
from nncf.openvino.graph.nncf_graph_builder import GraphConverter
from nncf.openvino.statistics.aggregator import OVStatisticsAggregator
+from nncf.parameters import QuantizationMode
from nncf.quantization.advanced_parameters import OverflowFix
from nncf.quantization.algorithms.min_max.algorithm import MinMaxQuantization
from tests.openvino.native.common import convert_torch_model
@@ -28,6 +29,7 @@
from tests.openvino.native.models import FPModel
from tests.openvino.native.models import LinearModel
from tests.openvino.native.models import MatMul2DModel
+from tests.openvino.native.models import UnifiedScalesModel
from tests.openvino.native.models import WeightsModel
from tests.openvino.native.models import get_torch_model_info
from tests.shared.helpers import compare_stats
@@ -51,6 +53,14 @@ def get_fq_nodes_stats_algo(model):
"output_low": output_low,
"output_high": output_high,
}
+ elif op.get_type_name() == "FakeConvert":
+ scale = op.input_value(1).get_node().data
+ shift = op.input_value(2).get_node().data
+
+ nodes[op.get_friendly_name()] = {
+ "scale": scale,
+ "shift": shift,
+ }
return nodes
@@ -94,6 +104,31 @@ def test_synthetic_models_fq_scales(model_creator_func, preset, inplace_statisti
compare_stats(ref_nodes, nodes)
+@pytest.mark.parametrize(
+ "mode",
+ [QuantizationMode.FP8_E4M3, QuantizationMode.FP8_E5M2],
+ ids=[QuantizationMode.FP8_E4M3.value, QuantizationMode.FP8_E5M2.value],
+)
+@pytest.mark.parametrize("model_creator_func", [UnifiedScalesModel])
+def test_synthetic_models_fc_scales(model_creator_func, mode):
+ model = model_creator_func()
+ quantized_model = quantize_model(model.ov_model, {"mode": mode})
+ real_nodes = [op for op in quantized_model.get_ops() if op.get_type_name() == "FakeConvert"]
+
+ ref_stats_name = model.ref_graph_name.split(".")[0] + f"_{mode.value}.json"
+ ref_stats_path = get_actual_reference_for_current_openvino(REFERENCE_SCALES_DIR / ref_stats_name)
+ ref_nodes = load_json(ref_stats_path)
+
+ assert len(ref_nodes) == len(real_nodes), "The number of the real FakeConvert nodes is not correct"
+ stat_nodes = get_fq_nodes_stats_algo(quantized_model)
+
+ # Uncomment lines below to generate reference for new models.
+ # from tests.shared.helpers import dump_to_json
+ # dump_to_json(ref_stats_path, nodes)
+
+ compare_stats(ref_nodes, stat_nodes)
+
+
@pytest.mark.parametrize(
"overflow_fix",
[OverflowFix.DISABLE, OverflowFix.ENABLE, OverflowFix.FIRST_LAYER],
diff --git a/tests/openvino/native/quantization/test_gptq.py b/tests/openvino/native/quantization/test_gptq.py
index 11e08753f30..ad19990eac0 100644
--- a/tests/openvino/native/quantization/test_gptq.py
+++ b/tests/openvino/native/quantization/test_gptq.py
@@ -23,10 +23,10 @@
from nncf.tensor.tensor import Tensor
-def quantize(x, scale, zero, maxq):
+def quantize(x, scale, zero, minq, maxq):
if maxq < 0:
return (x > scale / 2).float() * scale + (x < zero / 2).float() * zero
- q = torch.clamp(torch.round(x / scale) + zero, 0, maxq)
+ q = torch.clamp(torch.round(x / scale) + zero, minq, maxq)
return scale * (q - zero)
@@ -81,11 +81,6 @@ def find_params(self, x, weight=False):
xmin = torch.minimum(x.min(1)[0], tmp)
xmax = torch.maximum(x.max(1)[0], tmp)
- if self.sym:
- xmax = torch.maximum(torch.abs(xmin), xmax)
- tmp = xmin < 0
- if torch.any(tmp):
- xmin[tmp] = -xmax[tmp]
tmp = (xmin == 0) & (xmax == 0)
xmin[tmp] = -1
xmax[tmp] = +1
@@ -95,8 +90,9 @@ def find_params(self, x, weight=False):
self.zero = xmin
else:
if self.sym:
- self.scale = (xmax - xmin) / (self.maxq - 1)
- self.zero = torch.full_like(self.scale, (self.maxq + 1) / 2)
+ self.scale = torch.where(-xmin > xmax, -xmin, -xmax)
+ self.scale = self.scale / ((self.maxq + 1) / 2)
+ self.zero = torch.zeros_like(self.scale)
else:
self.scale = (xmax - xmin) / self.maxq
self.zero = torch.round(-xmin / self.scale)
@@ -144,7 +140,12 @@ def find_params(self, x, weight=False):
def quantize(self, x):
if self.ready():
- return quantize(x, self.scale, self.zero, self.maxq)
+ minq = 0
+ maxq = self.maxq
+ if self.sym:
+ minq = -(self.maxq + 1) / 2
+ maxq = (self.maxq + 1) / 2 - 1
+ return quantize(x, self.scale, self.zero, minq, maxq)
return x
def enabled(self):
@@ -340,7 +341,8 @@ def test_calculate_scale_linear():
gptq._set_backend_entity(ov_model)
nodes = graph.get_all_nodes()
- H = gptq._calculate_hessian(nodes[1], [Tensor(inp) for inp in inputs])
+ wrapped_inputs = [Tensor(inp) for inp in inputs]
+ H = gptq._calculate_hessian(nodes[1], wrapped_inputs)
ref_H = ref_gptq.H.numpy()
assert np.all(np.isclose(ref_H, H.data))
@@ -350,7 +352,7 @@ def test_calculate_scale_linear():
)
wc_params.compression_config = WeightCompressionConfig(mode=CompressWeightsMode.INT4_SYM, group_size=16)
- scale, _ = gptq._quantize_weights(ov_model, graph, wc_params, H)
+ scale, _ = gptq._quantize_weights(ov_model, graph, wc_params, H, wrapped_inputs)
ref_scale = ref_scale.numpy()
scale = scale.reshape(ref_scale.shape)
assert np.all(np.isclose(ref_scale, scale.data))
diff --git a/tests/openvino/native/quantization/test_min_max.py b/tests/openvino/native/quantization/test_min_max.py
index 6873a05dd45..fcccf04bf5f 100644
--- a/tests/openvino/native/quantization/test_min_max.py
+++ b/tests/openvino/native/quantization/test_min_max.py
@@ -22,10 +22,10 @@
from nncf.openvino.graph.transformations.commands import OVTargetPoint
from nncf.quantization.algorithms.min_max.backend import MinMaxAlgoBackend
from nncf.quantization.algorithms.min_max.openvino_backend import OVMinMaxAlgoBackend
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.test_min_max import TemplateTestGetChannelAxes
-from tests.post_training.test_templates.test_min_max import TemplateTestGetTargetPointShape
-from tests.post_training.test_templates.test_min_max import TemplateTestMinMaxAlgorithm
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.test_min_max import TemplateTestGetChannelAxes
+from tests.cross_fw.test_templates.test_min_max import TemplateTestGetTargetPointShape
+from tests.cross_fw.test_templates.test_min_max import TemplateTestMinMaxAlgorithm
class TestOVMinMaxAlgorithm(TemplateTestMinMaxAlgorithm):
diff --git a/tests/openvino/native/quantization/test_ptq_params.py b/tests/openvino/native/quantization/test_ptq_params.py
index 73b73e511ea..e0200ec07f1 100644
--- a/tests/openvino/native/quantization/test_ptq_params.py
+++ b/tests/openvino/native/quantization/test_ptq_params.py
@@ -34,10 +34,10 @@
from tests.common.quantization.metatypes import Conv2dTestMetatype
from tests.common.quantization.metatypes import LinearTestMetatype
from tests.common.quantization.metatypes import SoftmaxTestMetatype
+from tests.cross_fw.test_templates.models import NNCFGraphToTestMatMul
+from tests.cross_fw.test_templates.test_ptq_params import TemplateTestPTQParams
from tests.openvino.native.models import DepthwiseConv4DModel
from tests.openvino.native.models import LinearModel
-from tests.post_training.test_templates.models import NNCFGraphToTestMatMul
-from tests.post_training.test_templates.test_ptq_params import TemplateTestPTQParams
def get_hw_patterns(device: TargetDevice = TargetDevice.ANY) -> GraphPattern:
diff --git a/tests/openvino/native/quantization/test_quantizer_config.py b/tests/openvino/native/quantization/test_quantizer_config.py
index 63472133787..020ef951009 100644
--- a/tests/openvino/native/quantization/test_quantizer_config.py
+++ b/tests/openvino/native/quantization/test_quantizer_config.py
@@ -16,10 +16,10 @@
from nncf.openvino.graph.metatypes.openvino_metatypes import OVDepthwiseConvolutionMetatype
from nncf.openvino.graph.metatypes.openvino_metatypes import OVSumMetatype
from nncf.quantization.algorithms.min_max.openvino_backend import OVMinMaxAlgoBackend
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.models import NNCFGraphToTestDepthwiseConv
-from tests.post_training.test_templates.models import NNCFGraphToTestSumAggregation
-from tests.post_training.test_templates.test_quantizer_config import TemplateTestQuantizerConfig
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.models import NNCFGraphToTestDepthwiseConv
+from tests.cross_fw.test_templates.models import NNCFGraphToTestSumAggregation
+from tests.cross_fw.test_templates.test_quantizer_config import TemplateTestQuantizerConfig
class TestQuantizerConfig(TemplateTestQuantizerConfig):
diff --git a/tests/openvino/native/quantization/test_weights_compression.py b/tests/openvino/native/quantization/test_weights_compression.py
index f313a4f2a46..c51cf667ca2 100644
--- a/tests/openvino/native/quantization/test_weights_compression.py
+++ b/tests/openvino/native/quantization/test_weights_compression.py
@@ -15,22 +15,27 @@
import numpy as np
import openvino.runtime as ov
+import pandas as pd
import pytest
from attr import dataclass
+from openvino.runtime import opset13 as opset
from nncf import CompressWeightsMode
from nncf import SensitivityMetric
+from nncf.common.utils.debug import nncf_debug
from nncf.data.dataset import Dataset
from nncf.errors import ValidationError
from nncf.experimental.common.tensor_statistics.collectors import AggregatorBase
from nncf.openvino.graph.node_utils import get_const_value
from nncf.quantization import compress_weights
+from nncf.quantization.advanced_parameters import AdvancedCompressionParameters as CompressionParams
+from nncf.quantization.advanced_parameters import AdvancedLoraCorrectionParameters as LoraParams
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionConfig
from nncf.quantization.algorithms.weight_compression.config import WeightCompressionParameters
from nncf.quantization.algorithms.weight_compression.mixed_precision import MIXED_PRECISION_CRITERIA
from nncf.quantization.algorithms.weight_compression.openvino_backend import OVWeightCompressionAlgoBackend
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_dequantization
-from nncf.quantization.algorithms.weight_compression.weight_lowering import do_integer_quantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_dequantization
+from nncf.quantization.algorithms.weight_compression.weight_lowering import do_int_quantization
from nncf.quantization.algorithms.weight_compression.weight_lowering import get_integer_quantization_error
from nncf.quantization.algorithms.weight_compression.weight_lowering import reshape_weight_for_grouped_quantization
from nncf.scopes import IgnoredScope
@@ -43,6 +48,7 @@
from tests.openvino.native.models import IdentityMatmul
from tests.openvino.native.models import IntegerModel
from tests.openvino.native.models import ModelNamedConsts
+from tests.openvino.native.models import OVReferenceModel
from tests.openvino.native.models import SequentialMatmulModel
from tests.openvino.native.models import WeightsModel
from tests.openvino.native.quantization.test_fq_params_calculation import REFERENCE_SCALES_DIR
@@ -69,6 +75,26 @@
INT4_MODES = (CompressWeightsMode.INT4_SYM, CompressWeightsMode.INT4_ASYM)
+class LMLinearModel(OVReferenceModel):
+ HIDDEN_DIM = 16
+ OUTPUT_DIM = 32
+ INPUT_SHAPE = [24, HIDDEN_DIM] # [SeqLen, HiddenDim]
+
+ def _create_ov_model(self, transpose_b: bool = True):
+ input_1 = opset.parameter(self.INPUT_SHAPE, name="Input")
+ weight_shape = self.get_weight_shape(transpose_b)
+ data = self._rng.random(weight_shape).astype(np.float32)
+ matmul = opset.matmul(input_1, data, transpose_a=False, transpose_b=transpose_b, name="MatMul")
+ result = opset.result(matmul, name="Result")
+ result.get_output_tensor(0).set_names(set(["Result"]))
+ model = ov.Model([result], [input_1])
+ return model
+
+ @classmethod
+ def get_weight_shape(cls, transpose_b: bool = True):
+ return [cls.OUTPUT_DIM, cls.HIDDEN_DIM] if transpose_b else [cls.HIDDEN_DIM, cls.OUTPUT_DIM]
+
+
def get_next_node(node):
target_inputs = node.output(0).get_target_inputs()
assert len(target_inputs) == 1
@@ -498,7 +524,7 @@ def __str__(self):
LINSPACE_INT4_ASYM = np.arange(0, 16)
TWO_ROWS_LINSPACE_INT4_ASYM = np.vstack((LINSPACE_INT4_ASYM * SCALE_1, LINSPACE_INT4_ASYM * SCALE_2))
-LINSPACE_INT4_SYM = np.arange(-7, 8)
+LINSPACE_INT4_SYM = np.arange(-8, 7)
TWO_ROWS_LINSPACE_INT4_SYM = np.vstack((LINSPACE_INT4_SYM * SCALE_1, LINSPACE_INT4_SYM * SCALE_2))
TWO_OTHER_ROWS_LINSPACE_INT4_SYM = np.vstack((LINSPACE_INT4_SYM * SCALE_3, LINSPACE_INT4_SYM * SCALE_4))
@@ -545,7 +571,7 @@ def __str__(self):
name="2 columns of of scaled [0, 15] linspace for sym",
weight=np.transpose(TWO_ROWS_LINSPACE_INT4_ASYM),
config=int4_sym_config,
- ref_error=5.87,
+ ref_error=0.63,
atol=1,
),
QuantErrorDesc(
@@ -674,6 +700,7 @@ def test_raise_error_channel_size_is_not_divisible_by_group_size():
*({"sensitivity_metric": metric} for metric in ALL_SENSITIVITY_METRICS),
{"dataset": "anything"},
{"scale_estimation": True},
+ {"lora_correction": True},
{"gptq": True},
{"awq": True},
),
@@ -684,7 +711,10 @@ def test_raise_error_with_unsupported_params_for_int8(mode, params):
@pytest.mark.parametrize("mode", INT4_MODES)
-@pytest.mark.parametrize("params", ({"dataset": "anything", "scale_estimation": True, "gptq": True},))
+@pytest.mark.parametrize(
+ "params",
+ ({"dataset": "anything", "lora_correction": True, "gptq": True},),
+)
def test_raise_error_with_unsupported_params_for_int4(mode, params):
with pytest.raises(AttributeError):
compress_weights(ov.Model([], []), mode=mode, **params)
@@ -756,6 +786,29 @@ def test_data_type_for_num_weights(mocker):
assert isinstance(params.num_weights, np.uint64)
+def check_compressed_matmul_subgraph(start_node, activation_dtype, weight_dtype, is_adapter=False):
+ # Weight scale should be in fp16 nevertheless the weight data type
+ assert start_node.input_value(1).get_node().get_element_type() == ov.Type.f16
+
+ next_node = start_node
+ if not is_adapter:
+ # lora adapters are int8 - no reshape for group quantization, it's only for int4 weights
+ next_node = get_next_node(start_node)
+ assert next_node.get_type_name() == "Reshape"
+
+ next_node = get_next_node(next_node)
+ if activation_dtype == ov.Type.f16:
+ # There should be no convert node after multiply if both weights and activations are in f16
+ assert next_node.get_type_name() != "Convert"
+ else:
+ assert next_node.get_type_name() == "Convert"
+ # In case precision of weight and activation were equal, but not f16, the convert node is manually inserted
+ # In case of lora adapter the convert is always manually inserted
+ if (activation_dtype == weight_dtype and weight_dtype != ov.Type.f16) or is_adapter:
+ ref_name = start_node.get_friendly_name() + "/convert"
+ assert next_node.get_friendly_name() == ref_name
+
+
@pytest.mark.parametrize(
"activation_dtype, weight_dtype",
[
@@ -768,27 +821,14 @@ def test_data_type_for_num_weights(mocker):
)
def test_compression_for_different_dtypes(activation_dtype, weight_dtype):
model = IdentityMatmul(weights_dtype=weight_dtype, activation_dtype=activation_dtype).ov_model
+
compressed_model = compress_weights(
model, mode=CompressWeightsMode.INT4_SYM, ratio=1, group_size=1, all_layers=True
)
- name_to_node_map = {op.get_friendly_name(): op for op in compressed_model.get_ops()}
- # Weight scale should be in fp16 nevertheless the weight data type
+ name_to_node_map = {op.get_friendly_name(): op for op in compressed_model.get_ops()}
scale_multiply_node = name_to_node_map["weights/fq_weights_1"]
- assert scale_multiply_node.input_value(1).get_node().get_element_type() == ov.Type.f16
-
- reshape_node = get_next_node(scale_multiply_node)
- assert reshape_node.get_type_name() == "Reshape"
-
- next_node = get_next_node(reshape_node)
- if activation_dtype == ov.Type.f16:
- # There should be no convert node after multiply if both weights and activations are in f16
- assert next_node.get_type_name() != "Convert"
- else:
- assert next_node.get_type_name() == "Convert"
- # In case precision of weight and activation were equal, but not f16, the convert node is manually inserted
- if activation_dtype == weight_dtype and weight_dtype != ov.Type.f16:
- assert next_node.get_friendly_name() == "weights/fq_weights_1/convert"
+ check_compressed_matmul_subgraph(scale_multiply_node, activation_dtype, weight_dtype)
DATASET_SIZE = 129
@@ -923,8 +963,8 @@ def test_np_ov_compression_decompression(mode):
config = WeightCompressionConfig(mode)
- compressed_weighs, scale, zp = do_integer_quantization(w, -1, config, invert_scale=True)
- decompressed_weighs = do_dequantization(compressed_weighs, scale, zp)
+ compressed_weighs, scale, zp = do_int_quantization(w, -1, config, invert_scale=True)
+ decompressed_weighs = do_int_dequantization(compressed_weighs, scale, zp)
compressed_weighs = compressed_weighs.data
decompressed_weighs = decompressed_weighs.data
@@ -943,6 +983,27 @@ def test_np_ov_compression_decompression(mode):
assert np.allclose(decompressed_weighs, decompressed_weighs_ov)
+@pytest.mark.parametrize(
+ ("mode", "data"),
+ (
+ (CompressWeightsMode.INT4_SYM, [-8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0, 0.0]),
+ (CompressWeightsMode.INT4_SYM, [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]),
+ (
+ CompressWeightsMode.INT4_SYM,
+ [-8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0],
+ ),
+ ),
+)
+def test_compressed_weighs_range(mode, data):
+ data = np.array(data).astype(np.float32)
+ w = Tensor(data)
+
+ config = WeightCompressionConfig(mode=mode)
+ compressed_weighs, _, _ = do_int_quantization(w, -1, config)
+
+ assert np.allclose(np.abs(compressed_weighs.data), np.abs(w.data))
+
+
@pytest.mark.parametrize("mode", INT4_NF4_MODES)
def test_call_max_var_criterion_with_dataset_gptq_neg_group_size(mode):
model = AWQMatmulModel().ov_model
@@ -955,3 +1016,201 @@ def test_call_max_var_criterion_with_dataset_gptq_neg_group_size(mode):
op_name = op.get_friendly_name()
if op.get_type_name() == "Constant" and ("/zero_point" in op_name or "/scale" in op_name):
assert op.get_shape() == [sz, 1]
+
+
+def get_shape_for_second_input(op_with_weights: ov.Node) -> List[int]:
+ return list(op_with_weights.inputs()[1].get_shape())
+
+
+@pytest.mark.parametrize(
+ "params, transpose_b",
+ ((None, True), (LoraParams(adapter_rank=4, use_int8_adapters=False), False)),
+)
+def test_lora_adapters_in_the_graph(params, transpose_b):
+ advanced_parameters = CompressionParams() if params is None else CompressionParams(lora_correction_params=params)
+ model = LMLinearModel(transpose_b=transpose_b).ov_model
+ dataset = Dataset(np.ones(inp.shape) for inp in model.inputs)
+
+ compressed_model = compress_weights(
+ model,
+ mode=CompressWeightsMode.INT4_SYM,
+ ratio=1.0,
+ group_size=8,
+ dataset=dataset,
+ all_layers=True,
+ lora_correction=True,
+ advanced_parameters=advanced_parameters,
+ )
+ input_node = compressed_model.inputs[0].node
+ target_inputs = input_node.output(0).get_target_inputs()
+ assert len(target_inputs) == 2
+ for target_input in target_inputs:
+ next_node = target_input.get_node()
+ assert next_node.type_info.name == "MatMul"
+ shape = get_shape_for_second_input(next_node)
+ if shape != LMLinearModel.get_weight_shape(transpose_b):
+ assert shape == [advanced_parameters.lora_correction_params.adapter_rank, LMLinearModel.HIDDEN_DIM]
+ node = get_next_node(next_node)
+ assert node.type_info.name == "MatMul"
+ assert get_shape_for_second_input(node) == [
+ LMLinearModel.OUTPUT_DIM,
+ advanced_parameters.lora_correction_params.adapter_rank,
+ ]
+ else:
+ node = get_next_node(next_node)
+ assert node.type_info.name == "Add"
+
+ num_u8 = sum(1 for op in compressed_model.get_ordered_ops() if op.get_element_type() == ov.Type.u8)
+ ref_u8 = 4 if advanced_parameters.lora_correction_params.use_int8_adapters else 0
+ assert ref_u8 == num_u8
+
+
+@pytest.mark.parametrize(
+ "mode, apply_regularization, is_per_channel",
+ (
+ (CompressWeightsMode.INT4_SYM, True, False),
+ (CompressWeightsMode.NF4, True, False),
+ (CompressWeightsMode.NF4, True, True),
+ ),
+)
+def test_lora_adapters_reduce_noise(zero_seed, mode, apply_regularization, is_per_channel, mocker, tmp_path):
+ mocker.patch("nncf.quantization.algorithms.weight_compression.lora_correction.DEBUG_LOG_DIR", str(tmp_path))
+
+ model_cls = LMLinearModel
+ group_size = -1 if is_per_channel else model_cls.HIDDEN_DIM // 2
+ model = model_cls().ov_model
+ n_iters = 1
+ ie = ov.Core()
+ input_data = [np.ones(inp.shape) for inp in model.inputs]
+ dataset = Dataset(input_data)
+
+ compiled_model = ie.compile_model(model, "CPU")
+ infer_request = compiled_model.create_infer_request()
+ fp32_out = infer_request.infer(input_data, share_inputs=True)
+ fp32_out = next(iter(fp32_out.values()))
+ int4_model = compress_weights(model, mode=mode, ratio=1.0, group_size=group_size, dataset=dataset, all_layers=True)
+ compiled_model = ie.compile_model(int4_model, "CPU")
+ infer_request = compiled_model.create_infer_request()
+ int4_out = infer_request.infer(input_data, share_inputs=True)
+ int4_out = next(iter(int4_out.values()))
+ noise_before = np.mean(np.abs(fp32_out - int4_out))
+
+ model = model_cls().ov_model
+
+ with nncf_debug():
+ int4_model = compress_weights(
+ model,
+ mode=mode,
+ ratio=1.0,
+ group_size=group_size,
+ dataset=dataset,
+ all_layers=True,
+ lora_correction=True,
+ advanced_parameters=CompressionParams(
+ lora_correction_params=LoraParams(
+ apply_regularization=apply_regularization, num_iterations=n_iters, adapter_rank=2
+ )
+ ),
+ )
+ compiled_model = ie.compile_model(int4_model, "CPU")
+ infer_request = compiled_model.create_infer_request()
+ int4_out = infer_request.infer(input_data, share_inputs=True)
+ int4_out = next(iter(int4_out.values()))
+ noise_after = np.mean(np.abs(fp32_out - int4_out))
+ assert noise_after < noise_before
+
+ # expect dumping of quantization noise N times: initial noise + noise after SVD + twice per each iteration
+ df = pd.read_csv(tmp_path / "lora" / "noises.csv")
+ assert len(df.index) == n_iters * 2 + 2
+
+ # difference between initial and final noise expected to be positive
+ df = df.drop(df.columns[[0]], axis=1)
+ noise_reduction = df.iloc[0] - df.iloc[-1]
+ assert all(noise_reduction > 0)
+
+
+@pytest.mark.parametrize(
+ "activation_dtype, weight_dtype",
+ [
+ (ov.Type.f32, ov.Type.f32),
+ (ov.Type.f32, ov.Type.f16),
+ (ov.Type.f32, ov.Type.bf16),
+ (ov.Type.f16, ov.Type.f16),
+ (ov.Type.bf16, ov.Type.bf16),
+ ],
+)
+def test_compression_with_lora_for_different_dtypes(activation_dtype, weight_dtype):
+ model = IdentityMatmul(weights_dtype=weight_dtype, activation_dtype=activation_dtype).ov_model
+
+ data_type = np.float16 if activation_dtype in [ov.Type.f16, ov.Type.bf16] else np.float32
+ input_data = [np.ones(inp.shape, dtype=data_type) for inp in model.inputs]
+ dataset = Dataset(input_data)
+
+ compressed_model = compress_weights(
+ model,
+ mode=CompressWeightsMode.INT4_SYM,
+ ratio=1.0,
+ group_size=1,
+ dataset=dataset,
+ all_layers=True,
+ lora_correction=True,
+ advanced_parameters=CompressionParams(
+ lora_correction_params=LoraParams(num_iterations=0, adapter_rank=3, use_int8_adapters=True)
+ ),
+ )
+
+ name_to_node_map = {op.get_friendly_name(): op for op in compressed_model.get_ops()}
+ scale_multiply_node = name_to_node_map["weights/fq_weights_1"]
+ check_compressed_matmul_subgraph(scale_multiply_node, activation_dtype, weight_dtype)
+
+ v_adapter_node = name_to_node_map["MatMul_lora_A/fq_weights_1"]
+ check_compressed_matmul_subgraph(v_adapter_node, activation_dtype, weight_dtype, True)
+
+ u_adapter_node = name_to_node_map["MatMul_lora_B/fq_weights_1"]
+ check_compressed_matmul_subgraph(u_adapter_node, activation_dtype, weight_dtype, True)
+
+
+def test_compression_with_lora_with_subset_size(mocker):
+ subset_size = 2
+ dataset_size = 4
+ model = LMLinearModel().ov_model
+ input_data = [np.ones(inp.shape) for inp in model.inputs] * dataset_size
+ dataset = Dataset(input_data)
+
+ from nncf.quantization.algorithms.weight_compression import lora_correction
+
+ get_stats_spy = mocker.spy(lora_correction, "process_stats")
+
+ compress_weights(
+ model,
+ mode=CompressWeightsMode.INT4_SYM,
+ ratio=1.0,
+ group_size=8,
+ dataset=dataset,
+ all_layers=True,
+ lora_correction=True,
+ advanced_parameters=CompressionParams(
+ lora_correction_params=LoraParams(
+ num_iterations=0, adapter_rank=3, use_int8_adapters=False, subset_size=subset_size
+ )
+ ),
+ )
+
+ get_stats_spy.assert_called_once()
+ s, X = get_stats_spy.spy_return
+ assert X.shape == (LMLinearModel.HIDDEN_DIM, subset_size)
+ assert s.shape == (LMLinearModel.HIDDEN_DIM,)
+
+
+def test_lora_with_mixed_precision():
+ model = AWQMatmulModel().ov_model
+ sz = 8
+ dataset = Dataset([np.ones([sz, sz])])
+
+ compressed_model = compress_weights(
+ model, mode=CompressWeightsMode.INT4_ASYM, ratio=0.5, group_size=-1, dataset=dataset, lora_correction=True
+ )
+ for op in compressed_model.get_ordered_ops():
+ op_name = op.get_friendly_name()
+ if op.get_type_name() == "Constant" and ("/zero_point" in op_name or "/scale" in op_name):
+ assert op.get_shape() == [sz, 1]
diff --git a/tests/openvino/native/test_bias_correction.py b/tests/openvino/native/test_bias_correction.py
index 47ba2789a36..e90ad6c92f0 100644
--- a/tests/openvino/native/test_bias_correction.py
+++ b/tests/openvino/native/test_bias_correction.py
@@ -22,12 +22,12 @@
from nncf.openvino.graph.nncf_graph_builder import GraphConverter
from nncf.openvino.graph.node_utils import get_bias_value
from nncf.quantization.algorithms.bias_correction.openvino_backend import OVBiasCorrectionAlgoBackend
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import MultipleConvTestModel
+from tests.cross_fw.test_templates.helpers import SplittedModel
+from tests.cross_fw.test_templates.test_bias_correction import TemplateTestBCAlgorithm
from tests.openvino.native.common import compare_nncf_graphs
from tests.openvino.native.common import get_actual_reference_for_current_openvino
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import MultipleConvTestModel
-from tests.post_training.test_templates.helpers import SplittedModel
-from tests.post_training.test_templates.test_bias_correction import TemplateTestBCAlgorithm
class TestOVBCAlgorithm(TemplateTestBCAlgorithm):
diff --git a/tests/openvino/native/test_fast_bias_correction.py b/tests/openvino/native/test_fast_bias_correction.py
index 32bc605a30d..d788e7b401e 100644
--- a/tests/openvino/native/test_fast_bias_correction.py
+++ b/tests/openvino/native/test_fast_bias_correction.py
@@ -19,7 +19,7 @@
from nncf.openvino.graph.node_utils import get_bias_value
from nncf.openvino.graph.node_utils import is_node_with_bias
from nncf.quantization.algorithms.fast_bias_correction.openvino_backend import OVFastBiasCorrectionAlgoBackend
-from tests.post_training.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
+from tests.cross_fw.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
class TestOVFBCAlgorithm(TemplateTestFBCAlgorithm):
diff --git a/tests/openvino/native/test_layerwise.py b/tests/openvino/native/test_layerwise.py
index c964d4c00bf..444647701c7 100644
--- a/tests/openvino/native/test_layerwise.py
+++ b/tests/openvino/native/test_layerwise.py
@@ -21,7 +21,7 @@
from nncf.quantization.algorithms.layerwise.scheduler import LayerwiseStep
from nncf.quantization.algorithms.layerwise.scheduler import NodeOutputPort
from nncf.tensor import Tensor
-from tests.post_training.test_templates.test_layerwise import TemplateTestLayerwiseEngine
+from tests.cross_fw.test_templates.test_layerwise import TemplateTestLayerwiseEngine
class TestOVLayerwiseEngine(TemplateTestLayerwiseEngine):
diff --git a/tests/openvino/native/test_smooth_quant.py b/tests/openvino/native/test_smooth_quant.py
index ef62647d4d7..c4cd64d1a18 100644
--- a/tests/openvino/native/test_smooth_quant.py
+++ b/tests/openvino/native/test_smooth_quant.py
@@ -17,16 +17,15 @@
import torch
import nncf
-from nncf.common.graph.transformations.commands import TransformationCommand
from nncf.openvino.graph.layer_attributes import OVLayerAttributes
from nncf.openvino.graph.layout import OVLayoutElem
from nncf.openvino.graph.metatypes.openvino_metatypes import OVConvolutionMetatype
from nncf.openvino.graph.metatypes.openvino_metatypes import OVMatMulMetatype
from nncf.quantization.algorithms.smooth_quant.openvino_backend import OVSmoothQuantAlgoBackend
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import LinearMultiShapeModel
-from tests.post_training.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
-from tests.post_training.test_templates.test_smooth_quant import TemplateTestSQAlgorithm
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import LinearMultiShapeModel
+from tests.cross_fw.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
+from tests.cross_fw.test_templates.test_smooth_quant import TemplateTestSQAlgorithm
OV_LINEAR_MODEL_MM_OP_MAP = {
"MatMul1": "aten::matmul/MatMul",
@@ -68,6 +67,10 @@
class TestOVSQAlgorithm(TemplateTestSQAlgorithm):
+ @staticmethod
+ def backend_supports_shared_layers() -> bool:
+ return True
+
@staticmethod
def fn_to_type(tensor) -> np.ndarray:
return np.array(tensor)
@@ -85,10 +88,6 @@ def get_node_name_map(self, model_cls) -> Dict[str, str]:
return {}
raise NotImplementedError
- @staticmethod
- def get_target_node_name(command: TransformationCommand):
- return command.target_point.target_node_name
-
@staticmethod
def get_transform_fn() -> Callable:
def transform_fn(data_item):
diff --git a/tests/post_training/README.md b/tests/post_training/README.md
index af2639c8ec7..49a16febd5f 100644
--- a/tests/post_training/README.md
+++ b/tests/post_training/README.md
@@ -48,6 +48,9 @@ It's possible to run a suite of tests for the specific compression algorithm onl
For that append `::test_weight_compression` or `::test_ptq_quantization` to the `tests/post_training/test_quantize_conformance.py`.
For instance:
+> [!WARNING]
+> It is recommended to run the test with a specific test function specified, running all tests at the same time is not tested.
+
```bash
NUM_VAL_THREADS=8 pytest --data= --output=./tmp tests/post_training/test_quantize_conformance.py::test_weight_compression
```
@@ -62,63 +65,90 @@ Additional arguments:
- `--subset-size=N` to force subset_size of calibration dataset
- `--batch-size=N` to use batch_size for calibration. Some of the models do not support --batch-size > 1. For such models, please, use --batch-size=1.
- `--benchmark` to collect throughput statistics, add `FPS` column to result.csv
-- `--extra-columns` to add additional columns to reports.csv:
- - `Stat. collection time` - time of statistic collection
- - `Bias correction time` - time of bias correction
- - `Validation time` - time of validation
+- `--extra-columns` to add additional columns to reports.csv, like time for each algorithms
+- `--memory-monitor` to using MemoryMonitor from tools/memory_monitor.py
### Examples
Run for only OV backend:
```bash
-pytest --data= -k backend_OV tests/post_training/test_quantize_conformance.py
+pytest --data= -k backend_OV tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Run for only one model:
```bash
-pytest --data= -k timm/crossvit_9_240 tests/post_training/test_quantize_conformance.py
+pytest --data= -k timm/crossvit_9_240 tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Run for only one model for OV backend:
```bash
-pytest --data= -k timm/crossvit_9_240_backend_OV tests/post_training/test_quantize_conformance.py
+pytest --data= -k timm/crossvit_9_240_backend_OV tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Only dump models:
```bash
-pytest --data= --no-eval tests/post_training/test_quantize_conformance.py
+pytest --data= --no-eval tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Fast dump models with `subset_size=1` for all models:
```bash
-pytest --data= --no-eval --subset-size 1 tests/post_training/test_quantize_conformance.py
+pytest --data= --no-eval --subset-size 1 tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Run test with collection of throughput statistics:
```bash
-pytest --data= --benchmark tests/post_training/test_quantize_conformance.py
+pytest --data= --benchmark tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Fast collection of throughput statistics:
```bash
-pytest --data= --benchmark --no-eval --subset-size 1 tests/post_training/test_quantize_conformance.py
+pytest --data= --benchmark --no-eval --subset-size 1 tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Run test with additional columns:
```bash
-pytest --data= --extra-columns tests/post_training/test_quantize_conformance.py
+pytest --data= --extra-columns tests/post_training/test_quantize_conformance.py::test_weight_compression
```
Run test with calibration dataset having batch-size=10 for all models:
```bash
-pytest --data= --batch-size 10 tests/post_training/test_quantize_conformance.py
+pytest --data= --batch-size 10 tests/post_training/test_quantize_conformance.py::test_weight_compression
+```
+
+Run test as in benchmark jobs:
+
+```bash
+pytest --data= --forked --no-eval --subset-size 300 --batch-size 1 --benchmark --extra-columns --memory-monitor tests/post_training/test_quantize_conformance.py::test_ptq_quantization
+```
+
+## Reference data
+
+The reference data section outlines the expected format for defining reference values used during parallel testing.
+
+```yml
+_backend_:
+ metric_value:
+```
+
+> [!IMPORTANT]
+> The reference file is used for parallel testing.
+> The path to the *_reference_data.yaml files is used during testing and should not be changed without updating Jenkins scripts.
+
+### Marking tests as xfail
+
+To mark a test as expected to fail (xfail) when a validation metric does not meet expectations, add the following line to the reference data:
+
+```yml
+_backend_:
+ ...
+ metrics_xfail_reason: "Issue-"
```
diff --git a/tests/post_training/conftest.py b/tests/post_training/conftest.py
index 0cc92c29866..a05d20d0d5c 100644
--- a/tests/post_training/conftest.py
+++ b/tests/post_training/conftest.py
@@ -9,11 +9,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tests.shared.paths import TEST_ROOT
-
-PTQ_TEST_ROOT = TEST_ROOT / "post_training"
-FQ_CALCULATED_PARAMETERS_PATH = PTQ_TEST_ROOT / "data" / "fq_params" / "fq_params.json"
-
def pytest_addoption(parser):
parser.addoption("--data", action="store", help="Data directory")
@@ -29,3 +24,9 @@ def pytest_addoption(parser):
action="store_true",
help="Add additional columns to reports.csv",
)
+ parser.addoption(
+ "--memory-monitor",
+ action="store_true",
+ help="Report memory using MemoryMonitor from tools/memory_monitor.py. "
+ "Warning: currently, reported memory values are not always reproducible.",
+ )
diff --git a/tests/post_training/data/ptq_reference_data.yaml b/tests/post_training/data/ptq_reference_data.yaml
index 746bd6027b6..4bacf77ff2e 100644
--- a/tests/post_training/data/ptq_reference_data.yaml
+++ b/tests/post_training/data/ptq_reference_data.yaml
@@ -10,9 +10,13 @@ hf/bert-base-uncased_backend_OV:
metric_value: null
hf/bert-base-uncased_backend_TORCH:
metric_value: null
-hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_backend_FP32:
+hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_statefull_backend_FP32:
metric_value: null
-hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_backend_OPTIMUM:
+hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_stateless_backend_FP32:
+ metric_value: null
+hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_statefull_backend_OPTIMUM:
+ metric_value: null
+hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_stateless_backend_OPTIMUM:
metric_value: null
hf/hf-internal-testing/tiny-random-gpt2_backend_FP32:
metric_value: null
@@ -22,6 +26,30 @@ hf/hf-internal-testing/tiny-random-gpt2_backend_OV:
metric_value: null
hf/hf-internal-testing/tiny-random-gpt2_backend_TORCH:
metric_value: null
+torchvision/resnet18_backend_FP32:
+ metric_value: 0.6978
+torchvision/resnet18_backend_OV:
+ metric_value: 0.6948
+torchvision/resnet18_backend_ONNX:
+ metric_value: 0.6948
+torchvision/resnet18_backend_TORCH:
+ metric_value: 0.69152
+torchvision/resnet18_backend_CUDA_TORCH:
+ metric_value: 0.69152
+torchvision/resnet18_backend_FX_TORCH:
+ metric_value: 0.6946
+torchvision/vit_b_16_backend_FP32:
+ metric_value: 0.8107
+torchvision/vit_b_16_backend_OV:
+ metric_value: 0.80948
+torchvision/vit_b_16_backend_FX_TORCH:
+ metric_value: 0.80702
+torchvision/swin_v2_s_backend_FP32:
+ metric_value: 0.83712
+torchvision/swin_v2_s_backend_OV:
+ metric_value: 0.83638
+torchvision/swin_v2_s_backend_FX_TORCH:
+ metric_value: 0.8296
timm/crossvit_9_240_backend_CUDA_TORCH:
metric_value: 0.689
timm/crossvit_9_240_backend_FP32:
@@ -180,16 +208,6 @@ timm/resnest14d_backend_OV:
metric_value: 0.75
timm/resnest14d_backend_TORCH:
metric_value: 0.7485
-timm/resnet18_backend_CUDA_TORCH:
- metric_value: 0.69748
-timm/resnet18_backend_FP32:
- metric_value: 0.71502
-timm/resnet18_backend_ONNX:
- metric_value: 0.71102
-timm/resnet18_backend_OV:
- metric_value: 0.71116
-timm/resnet18_backend_TORCH:
- metric_value: 0.70982
timm/swin_base_patch4_window7_224_backend_FP32:
metric_value: 0.85274
timm/swin_base_patch4_window7_224_backend_OV:
diff --git a/tests/post_training/data/wc_reference_data.yaml b/tests/post_training/data/wc_reference_data.yaml
index 75f704663d4..f42b379208e 100644
--- a/tests/post_training/data/wc_reference_data.yaml
+++ b/tests/post_training/data/wc_reference_data.yaml
@@ -1,21 +1,21 @@
tinyllama_data_free_backend_OV:
- metric_value: 0.72057
+ metric_value: 0.73873
num_int4: 114
num_int8: 84
tinyllama_data_aware_backend_OV:
- metric_value: 0.83853
+ metric_value: 0.85767
num_int4: 94
num_int8: 124
tinyllama_data_aware_awq_stateful_backend_OV:
- metric_value: 0.85259
+ metric_value: 0.85616
num_int4: 94
num_int8: 124
tinyllama_data_aware_awq_scale_estimation_backend_OV:
- metric_value: 0.84406
+ metric_value: 0.85502
num_int4: 94
num_int8: 124
tinyllama_data_aware_awq_scale_estimation_stateful_backend_OV:
- metric_value: 0.84171
+ metric_value: 0.85502
num_int4: 94
num_int8: 124
tinyllama_int8_data_free_backend_TORCH:
@@ -23,10 +23,16 @@ tinyllama_int8_data_free_backend_TORCH:
num_int4: 0
num_int8: 312
tinyllama_data_aware_gptq_backend_OV:
- metric_value: 0.83706
+ metric_value: 0.87134
num_int4: 94
num_int8: 124
+ metrics_xfail_reason: "Issue-148819"
tinyllama_scale_estimation_per_channel_backend_OV:
- metric_value: 0.7435
+ metric_value: 0.81389
num_int4: 188
num_int8: 124
+ metrics_xfail_reason: "Issue-148819"
+tinyllama_data_aware_lora_stateful_backend_OV:
+ metric_value: 0.83446
+ num_int4: 94
+ num_int8: 500
\ No newline at end of file
diff --git a/tests/post_training/data/wc_reference_data_2024.3.yaml b/tests/post_training/data/wc_reference_data_2024.3.yaml
deleted file mode 100644
index 607196fff61..00000000000
--- a/tests/post_training/data/wc_reference_data_2024.3.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-tinyllama_data_aware_awq_scale_estimation_backend_OV:
- metric_value: 0.84038
-tinyllama_data_aware_awq_scale_estimation_stateful_backend_OV:
- metric_value: 0.84038
-tinyllama_data_aware_gptq_backend_OV:
- metric_value: 0.81936
diff --git a/tests/post_training/data/wc_reference_data_2024.4.yaml b/tests/post_training/data/wc_reference_data_2024.4.yaml
new file mode 100644
index 00000000000..02131f283fa
--- /dev/null
+++ b/tests/post_training/data/wc_reference_data_2024.4.yaml
@@ -0,0 +1,22 @@
+tinyllama_data_aware_awq_stateful_backend_OV:
+ metric_value: 0.85571
+ num_int4: 94
+ num_int8: 124
+tinyllama_data_aware_awq_scale_estimation_backend_OV:
+ metric_value: 0.86355
+ num_int4: 94
+ num_int8: 124
+tinyllama_data_aware_awq_scale_estimation_stateful_backend_OV:
+ metric_value: 0.86355
+ num_int4: 94
+ num_int8: 124
+tinyllama_data_aware_gptq_backend_OV:
+ metric_value: 0.86521
+ num_int4: 94
+ num_int8: 124
+ metrics_xfail_reason: "Issue-148819"
+tinyllama_scale_estimation_per_channel_backend_OV:
+ metric_value: 0.80853
+ num_int4: 188
+ num_int8: 124
+ metrics_xfail_reason: "Issue-148819"
\ No newline at end of file
diff --git a/tests/post_training/data/wc_reference_data_2024.5.yaml b/tests/post_training/data/wc_reference_data_2024.5.yaml
new file mode 100644
index 00000000000..b321c426cb6
--- /dev/null
+++ b/tests/post_training/data/wc_reference_data_2024.5.yaml
@@ -0,0 +1,10 @@
+tinyllama_data_aware_gptq_backend_OV:
+ metric_value: 0.81664
+ num_int4: 94
+ num_int8: 124
+ metrics_xfail_reason: "Issue-148819"
+tinyllama_scale_estimation_per_channel_backend_OV:
+ metric_value: 0.80798
+ num_int4: 188
+ num_int8: 124
+ metrics_xfail_reason: "Issue-148819"
\ No newline at end of file
diff --git a/tests/post_training/experimental/sparsify_activations/model_scope.py b/tests/post_training/experimental/sparsify_activations/model_scope.py
new file mode 100644
index 00000000000..5a89847829d
--- /dev/null
+++ b/tests/post_training/experimental/sparsify_activations/model_scope.py
@@ -0,0 +1,116 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import copy
+from typing import Dict, List
+
+import nncf
+from nncf.experimental.torch.sparsify_activations import TargetScope
+from nncf.parameters import CompressWeightsMode
+from tests.post_training.experimental.sparsify_activations.pipelines import ImageClassificationTimmSparsifyActivations
+from tests.post_training.experimental.sparsify_activations.pipelines import LMSparsifyActivations
+from tests.post_training.pipelines.base import BackendType
+
+SPARSIFY_ACTIVATIONS_MODELS = [
+ {
+ "reported_name": "tinyllama",
+ "model_id": "tinyllama/tinyllama-1.1b-step-50k-105b",
+ "pipeline_cls": LMSparsifyActivations,
+ "compression_params": {},
+ "backends": [BackendType.FP32],
+ },
+ {
+ "reported_name": "tinyllama_ffn_sparse20",
+ "model_id": "tinyllama/tinyllama-1.1b-step-50k-105b",
+ "pipeline_cls": LMSparsifyActivations,
+ "compression_params": {
+ "compress_weights": None,
+ "sparsify_activations": {
+ "target_sparsity_by_scope": {
+ TargetScope(patterns=[".*up_proj.*", ".*gate_proj.*", ".*down_proj.*"]): 0.2,
+ }
+ },
+ },
+ "backends": [BackendType.TORCH, BackendType.CUDA_TORCH],
+ "batch_size": 8,
+ },
+ {
+ "reported_name": "tinyllama_int8_asym_data_free_ffn_sparse20",
+ "model_id": "tinyllama/tinyllama-1.1b-step-50k-105b",
+ "pipeline_cls": LMSparsifyActivations,
+ "compression_params": {
+ "compress_weights": {
+ "mode": CompressWeightsMode.INT8_ASYM,
+ },
+ "sparsify_activations": {
+ "target_sparsity_by_scope": {
+ TargetScope(patterns=[".*up_proj.*", ".*gate_proj.*", ".*down_proj.*"]): 0.2,
+ }
+ },
+ },
+ "backends": [BackendType.TORCH, BackendType.CUDA_TORCH],
+ "batch_size": 8,
+ },
+ {
+ "reported_name": "timm/deit3_small_patch16_224",
+ "model_id": "deit3_small_patch16_224",
+ "pipeline_cls": ImageClassificationTimmSparsifyActivations,
+ "compression_params": {},
+ "backends": [BackendType.FP32],
+ "batch_size": 128,
+ },
+ {
+ "reported_name": "timm/deit3_small_patch16_224_qkv_sparse20_fc1_sparse20_fc2_sparse30",
+ "model_id": "deit3_small_patch16_224",
+ "pipeline_cls": ImageClassificationTimmSparsifyActivations,
+ "compression_params": {
+ "sparsify_activations": {
+ "target_sparsity_by_scope": {
+ TargetScope(patterns=[".*qkv.*", ".*fc1.*"]): 0.2,
+ TargetScope(patterns=[".*fc2.*"]): 0.3,
+ }
+ },
+ },
+ "backends": [BackendType.TORCH, BackendType.CUDA_TORCH],
+ "batch_size": 128,
+ },
+]
+
+
+def generate_tests_scope(models_list: List[Dict]) -> Dict[str, Dict]:
+ """
+ Generate tests by names "{reported_name}_backend_{backend}"
+ """
+ tests_scope = {}
+ fp32_models = set()
+ for test_model_param in models_list:
+ model_id = test_model_param["model_id"]
+ reported_name = test_model_param["reported_name"]
+
+ for backend in test_model_param["backends"]:
+ model_param = copy.deepcopy(test_model_param)
+ if "is_batch_size_supported" not in model_param: # Set default value of is_batch_size_supported.
+ model_param["is_batch_size_supported"] = True
+ test_case_name = f"{reported_name}_backend_{backend.value}"
+ model_param["backend"] = backend
+ model_param.pop("backends")
+ if backend == BackendType.FP32:
+ if model_id in fp32_models:
+ raise nncf.ValidationError(f"Duplicate test case for {model_id} with FP32 backend")
+ fp32_models.add(model_id)
+ if test_case_name in tests_scope:
+ raise nncf.ValidationError(f"{test_case_name} already in tests_scope")
+ tests_scope[test_case_name] = model_param
+
+ return tests_scope
+
+
+SPARSIFY_ACTIVATIONS_TEST_CASES = generate_tests_scope(SPARSIFY_ACTIVATIONS_MODELS)
diff --git a/tests/post_training/experimental/sparsify_activations/pipelines.py b/tests/post_training/experimental/sparsify_activations/pipelines.py
new file mode 100644
index 00000000000..82da57caa86
--- /dev/null
+++ b/tests/post_training/experimental/sparsify_activations/pipelines.py
@@ -0,0 +1,323 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from dataclasses import dataclass
+from dataclasses import field
+from pathlib import Path
+from typing import Dict, List, Optional
+
+import numpy as np
+import openvino as ov
+import torch
+import torch.utils
+import torch.utils.data
+import torchvision
+from datasets import load_dataset
+from optimum.exporters.openvino.convert import export_from_model
+from optimum.intel.openvino import OVModelForCausalLM
+from transformers import AutoModelForCausalLM
+
+import nncf
+from nncf.experimental.torch.sparsify_activations import sparsify_activations
+from nncf.experimental.torch.sparsify_activations.sparsify_activations_impl import SparsifyActivationsAlgoBackend
+from nncf.experimental.torch.sparsify_activations.torch_backend import PTSparsifyActivationsAlgoBackend
+from nncf.torch.quantization.layers import AsymmetricWeightsDecompressor
+from nncf.torch.quantization.layers import SymmetricWeightsDecompressor
+from tests.post_training.pipelines.base import LIMIT_LENGTH_OF_STATUS
+from tests.post_training.pipelines.base import PT_BACKENDS
+from tests.post_training.pipelines.base import BackendType
+from tests.post_training.pipelines.base import NumCompressNodes
+from tests.post_training.pipelines.base import RunInfo
+from tests.post_training.pipelines.image_classification_timm import ImageClassificationTimm
+from tests.post_training.pipelines.lm_weight_compression import LMWeightCompression
+from tests.post_training.pipelines.lm_weight_compression import WCTimeStats
+from tests.torch.experimental.sparsify_activations.helpers import count_sparsifier_patterns_in_ov
+from tests.torch.helpers import set_torch_seed
+
+
+@dataclass
+class SATimeStats(WCTimeStats):
+ """
+ Contains statistics that are parsed from the stdout of Sparsify Activations tests.
+ """
+
+ time_sparsifier_calibration: Optional[str] = None
+ STAT_NAMES = [*WCTimeStats.STAT_NAMES, "Activations Sparsifier calibration time"]
+ VAR_NAMES = [*WCTimeStats.VAR_NAMES, "time_sparsifier_calibration"]
+ REGEX_PREFIX = [*WCTimeStats.REGEX_PREFIX, SparsifyActivationsAlgoBackend.CALIBRATION_TRACKING_DESC]
+
+
+@dataclass
+class SANumCompressNodes(NumCompressNodes):
+ num_sparse_activations: Optional[int] = None
+
+
+@dataclass
+class SARunInfo(RunInfo):
+ num_compress_nodes: SANumCompressNodes = field(default_factory=SANumCompressNodes)
+
+ def get_result_dict(self):
+ return {
+ "Model": self.model,
+ "Backend": self.backend.value if self.backend else None,
+ "Metric name": self.metric_name,
+ "Metric value": self.metric_value,
+ "Metric diff": self.metric_diff,
+ "Num FQ": self.num_compress_nodes.num_fq_nodes,
+ "Num int4": self.num_compress_nodes.num_int4,
+ "Num int8": self.num_compress_nodes.num_int8,
+ "Num sparse activations": self.num_compress_nodes.num_sparse_activations,
+ "RAM MiB": self.format_memory_usage(self.compression_memory_usage),
+ "Compr. time": self.format_time(self.time_compression),
+ **self.stats_from_output.get_stats(),
+ "Total time": self.format_time(self.time_total),
+ "FPS": self.fps,
+ "Status": self.status[:LIMIT_LENGTH_OF_STATUS] if self.status is not None else None,
+ }
+
+
+class SAPipelineMixin:
+ """
+ Common methods in the test pipeline for Sparsify Activations.
+ """
+
+ def __init__(
+ self,
+ reported_name: str,
+ model_id: str,
+ backend: BackendType,
+ compression_params: dict,
+ output_dir: Path,
+ data_dir: Path,
+ reference_data: dict,
+ no_eval: bool,
+ run_benchmark_app: bool,
+ params: dict = None,
+ batch_size: int = 1,
+ ):
+ super().__init__(
+ reported_name=reported_name,
+ model_id=model_id,
+ backend=backend,
+ compression_params=compression_params,
+ output_dir=output_dir,
+ data_dir=data_dir,
+ reference_data=reference_data,
+ no_eval=no_eval,
+ run_benchmark_app=run_benchmark_app,
+ params=params,
+ batch_size=batch_size,
+ )
+ self.run_info = SARunInfo(model=reported_name, backend=backend)
+
+ @staticmethod
+ def count_compressed_nodes_from_ir(model: ov.Model) -> SANumCompressNodes:
+ """
+ Get number of compressed nodes in the compressed IR.
+ """
+ num_fq_nodes = 0
+ num_int8 = 0
+ num_int4 = 0
+ for node in model.get_ops():
+ if node.type_info.name == "FakeQuantize":
+ num_fq_nodes += 1
+ for i in range(node.get_output_size()):
+ if node.get_output_element_type(i).get_type_name() in ["i8", "u8"]:
+ num_int8 += 1
+ if node.get_output_element_type(i).get_type_name() in ["i4", "u4"]:
+ num_int4 += 1
+
+ num_sparse_activations = count_sparsifier_patterns_in_ov(model)
+ return SANumCompressNodes(
+ num_fq_nodes=num_fq_nodes,
+ num_int8=num_int8,
+ num_int4=num_int4,
+ num_sparse_activations=num_sparse_activations,
+ )
+
+ def collect_data_from_stdout(self, stdout: str):
+ stats = SATimeStats()
+ stats.fill(stdout)
+ self.run_info.stats_from_output = stats
+
+ @set_torch_seed(seed=42)
+ @torch.no_grad()
+ def _compress(self):
+ """
+ Actual call of weight compression and/or activation sparsification.
+ """
+ self.compressed_model = self.model
+ if self.compression_params.get("compress_weights", None) is not None:
+ self.compressed_model = nncf.compress_weights(
+ self.compressed_model,
+ dataset=self.calibration_dataset,
+ **self.compression_params["compress_weights"],
+ )
+ if self.compression_params.get("sparsify_activations", None) is not None:
+ self.compressed_model = sparsify_activations(
+ self.compressed_model,
+ dataset=self.calibration_dataset,
+ **self.compression_params["sparsify_activations"],
+ )
+
+ def _validate(self):
+ super()._validate()
+ ref_num_sparse_activations = self.reference_data.get("num_sparse_activations", 0)
+ num_sparse_activations = self.run_info.num_compress_nodes.num_sparse_activations
+ if num_sparse_activations != ref_num_sparse_activations:
+ status_msg = f"Regression: The number of sparse activations is {num_sparse_activations}, \
+ which differs from reference {ref_num_sparse_activations}."
+ raise ValueError(status_msg)
+
+
+class LMSparsifyActivations(SAPipelineMixin, LMWeightCompression):
+ DEFAULT_SUBSET_SIZE = 32
+
+ def prepare_model(self):
+ is_stateful = self.params.get("is_stateful", False)
+
+ if self.backend in PT_BACKENDS:
+ if is_stateful:
+ raise RuntimeError(f"is_stateful={is_stateful} is not supported for PyTorch backend.")
+
+ self.model_hf = AutoModelForCausalLM.from_pretrained(
+ self.model_id,
+ torch_dtype=torch.float32,
+ device_map="cuda" if self.backend == BackendType.CUDA_TORCH else "cpu",
+ attn_implementation="eager",
+ )
+ self.model = self.model_hf
+ elif self.backend in [BackendType.OV, BackendType.FP32]:
+ if is_stateful:
+ self.fp32_model_dir = self.fp32_model_dir.parent / (self.fp32_model_dir.name + "_sf")
+ if not (self.fp32_model_dir / self.OV_MODEL_NAME).exists():
+ # export by model_id
+ self.model_hf = OVModelForCausalLM.from_pretrained(
+ self.model_id,
+ trust_remote_code=True,
+ export=True,
+ load_in_8bit=False,
+ compile=False,
+ stateful=is_stateful,
+ )
+ else:
+ # no export, load from IR. Applicable for sequential run of test cases in local environment.
+ self.model_hf = OVModelForCausalLM.from_pretrained(
+ self.fp32_model_dir, load_in_8bit=False, compile=False, stateful=is_stateful
+ )
+ self.model = self.model_hf.model
+ else:
+ raise RuntimeError(f"backend={self.backend.value} is not supported.")
+
+ if not (self.fp32_model_dir / self.OV_MODEL_NAME).exists():
+ self._dump_model_fp32()
+
+ # Use FP16 for CUDA_TORCH backend as it is more common when running LLM on CUDA.
+ if self.backend == BackendType.CUDA_TORCH:
+ self.model_hf.half()
+
+ def get_transform_calibration_fn(self):
+ process_one = super().get_transform_calibration_fn()
+
+ def transform_fn(chunk: List[Dict]):
+ samples = [process_one(data, max_tokens=128, filter_bad_tokens=False) for data in chunk]
+ inputs = {}
+ for input_name, sample_value in samples[0].items():
+ if isinstance(sample_value, torch.Tensor):
+ inputs[input_name] = torch.cat([sample[input_name] for sample in samples], dim=0)
+ elif isinstance(sample_value, np.ndarray):
+ inputs[input_name] = np.concatenate([sample[input_name] for sample in samples], axis=0)
+ elif isinstance(sample_value, ov.Tensor):
+ shape = sample_value.get_shape()
+ shape[0] = len(samples)
+ inputs[input_name] = ov.Tensor(sample_value.get_element_type(), shape)
+ else:
+ raise RuntimeError(
+ f"Failed to generate calibration set for {input_name} in type {type(sample_value)}"
+ )
+ if self.backend == BackendType.CUDA_TORCH:
+ for input_name in inputs:
+ inputs[input_name] = torch.from_numpy(inputs[input_name]).cuda()
+ return inputs
+
+ return transform_fn
+
+ def prepare_calibration_dataset(self):
+ subset_size = self.compression_params.get("subset_size") or self.DEFAULT_SUBSET_SIZE
+ dataset = (
+ load_dataset("wikitext", "wikitext-2-v1", split="train", revision="b08601e")
+ .filter(lambda example: len(example["text"].split()) > 256)
+ .shuffle(seed=42)
+ .select(range(subset_size))
+ .to_list()
+ )
+ chunks = [dataset[i : i + self.batch_size] for i in range(0, subset_size, self.batch_size)]
+ self.calibration_dataset = nncf.Dataset(chunks, self.get_transform_calibration_fn())
+
+ def save_compressed_model(self):
+ if self.backend == BackendType.CUDA_TORCH:
+ self.model_hf.float()
+ for module in self.model_hf.nncf.modules():
+ if isinstance(module, (AsymmetricWeightsDecompressor, SymmetricWeightsDecompressor)):
+ module.result_dtype = torch.float32
+ export_from_model(
+ self.model_hf, self.output_model_dir, stateful=False, compression_option="fp32", device="cuda"
+ )
+ else:
+ super().save_compressed_model()
+
+ def get_num_compressed(self):
+ """
+ Get number of quantization ops and sparsifier ops in the compressed IR.
+ """
+ if self.backend in PT_BACKENDS:
+ model = ov.Core().read_model(self.output_model_dir / self.OV_MODEL_NAME)
+ else:
+ model = self.model
+ self.run_info.num_compress_nodes = self.count_compressed_nodes_from_ir(model)
+
+ def _dump_model_fp32(self):
+ if self.backend == BackendType.CUDA_TORCH:
+ export_from_model(
+ self.model_hf, self.fp32_model_dir, stateful=False, compression_option="fp32", device="cuda"
+ )
+ else:
+ super()._dump_model_fp32()
+
+ def _compress(self):
+ super()._compress()
+ if self.backend in PT_BACKENDS:
+ # This helps reproducibility but is not needed in actual use.
+ for sparsifier in PTSparsifyActivationsAlgoBackend.get_sparsifiers(self.compressed_model):
+ original_dtype = sparsifier.running_threshold.dtype
+ sparsifier.running_threshold = sparsifier.running_threshold.half().to(original_dtype)
+
+
+class ImageClassificationTimmSparsifyActivations(SAPipelineMixin, ImageClassificationTimm):
+ DEFAULT_SUBSET_SIZE = 256
+
+ def prepare_calibration_dataset(self):
+ subset_size = self.compression_params.get("subset_size") or self.DEFAULT_SUBSET_SIZE
+ val_dataset = torchvision.datasets.ImageFolder(
+ root=self.data_dir / "imagenet" / "val", transform=self.transform
+ )
+ indices = np.random.default_rng(42).choice(len(val_dataset), size=subset_size, replace=False)
+ subset = torch.utils.data.Subset(val_dataset, indices=indices)
+ loader = torch.utils.data.DataLoader(subset, batch_size=self.batch_size, num_workers=2, shuffle=False)
+ self.calibration_dataset = nncf.Dataset(loader, self.get_transform_calibration_fn())
+
+ def get_num_compressed(self):
+ """
+ Get number of quantization ops and sparsifier ops in the compressed IR.
+ """
+ model = ov.Core().read_model(model=self.path_compressed_ir)
+ self.run_info.num_compress_nodes = self.count_compressed_nodes_from_ir(model)
diff --git a/tests/post_training/experimental/sparsify_activations/reference_data.yaml b/tests/post_training/experimental/sparsify_activations/reference_data.yaml
new file mode 100644
index 00000000000..3e368a9c185
--- /dev/null
+++ b/tests/post_training/experimental/sparsify_activations/reference_data.yaml
@@ -0,0 +1,47 @@
+tinyllama_backend_FP32:
+ metric_value: 1.0
+ num_int4: 0
+ num_int8: 0
+ num_sparse_activations: 0
+tinyllama_ffn_sparse20_backend_CUDA_TORCH:
+ metric_value: 0.7818
+ atol: 0.025
+ num_int4: 0
+ num_int8: 0
+ num_sparse_activations: 44
+tinyllama_ffn_sparse20_backend_TORCH:
+ metric_value: 0.7879
+ atol: 0.025
+ num_int4: 0
+ num_int8: 0
+ num_sparse_activations: 44
+tinyllama_int8_asym_data_free_ffn_sparse20_backend_CUDA_TORCH:
+ metric_value: 0.8044
+ atol: 0.025
+ num_int4: 0
+ num_int8: 312
+ num_sparse_activations: 44
+tinyllama_int8_asym_data_free_ffn_sparse20_backend_TORCH:
+ metric_value: 0.7846
+ atol: 0.030
+ num_int4: 0
+ num_int8: 312
+ num_sparse_activations: 44
+timm/deit3_small_patch16_224_backend_FP32:
+ metric_value: 0.8135
+ atol: 0.001
+ num_int4: 0
+ num_int8: 0
+ num_sparse_activations: 0
+timm/deit3_small_patch16_224_qkv_sparse20_fc1_sparse20_fc2_sparse30_backend_CUDA_TORCH:
+ metric_value: 0.8102
+ atol: 0.001
+ num_int4: 0
+ num_int8: 0
+ num_sparse_activations: 36
+timm/deit3_small_patch16_224_qkv_sparse20_fc1_sparse20_fc2_sparse30_backend_TORCH:
+ metric_value: 0.8102
+ atol: 0.001
+ num_int4: 0
+ num_int8: 0
+ num_sparse_activations: 36
\ No newline at end of file
diff --git a/tests/post_training/experimental/sparsify_activations/test_sparsify_activations_conformance.py b/tests/post_training/experimental/sparsify_activations/test_sparsify_activations_conformance.py
new file mode 100644
index 00000000000..ebcb1921981
--- /dev/null
+++ b/tests/post_training/experimental/sparsify_activations/test_sparsify_activations_conformance.py
@@ -0,0 +1,161 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import time
+import traceback
+from collections import OrderedDict
+from pathlib import Path
+from typing import Dict, Optional
+
+import pandas as pd
+import pytest
+import yaml
+
+from tests.post_training.experimental.sparsify_activations.model_scope import SPARSIFY_ACTIVATIONS_TEST_CASES
+from tests.post_training.experimental.sparsify_activations.pipelines import SARunInfo
+from tests.post_training.pipelines.base import BackendType
+from tests.post_training.pipelines.base import BaseTestPipeline
+from tests.post_training.test_quantize_conformance import create_short_run_info
+from tests.post_training.test_quantize_conformance import fixture_batch_size # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_data # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_extra_columns # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_no_eval # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_output # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_run_benchmark_app # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_run_fp32_backend # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_run_torch_cuda_backend # noqa: F401
+from tests.post_training.test_quantize_conformance import fixture_subset_size # noqa: F401
+from tests.post_training.test_quantize_conformance import maybe_skip_test_case
+from tests.post_training.test_quantize_conformance import write_logs
+
+
+@pytest.fixture(scope="session", name="sparsify_activations_reference_data")
+def fixture_sparsify_activations_reference_data():
+ path_reference = Path(__file__).parent / "reference_data.yaml"
+ with path_reference.open() as f:
+ data = yaml.safe_load(f)
+ for test_case in data.values():
+ test_case["atol"] = test_case.get("atol", 1e-3)
+ return data
+
+
+@pytest.fixture(scope="session", name="sparsify_activations_result_data")
+def fixture_sparsify_activations_report_data(output_dir):
+ data: Dict[str, SARunInfo] = {}
+ yield data
+ if data:
+ test_results = OrderedDict(sorted(data.items()))
+ df = pd.DataFrame(v.get_result_dict() for v in test_results.values())
+ output_dir.mkdir(parents=True, exist_ok=True)
+ df.to_csv(output_dir / "results.csv", index=False)
+
+
+def create_pipeline_kwargs(
+ test_model_param: Dict,
+ subset_size,
+ test_case_name: str,
+ reference_data: Dict[str, Dict],
+ fp32_model_params: Dict[str, Dict],
+):
+ if subset_size:
+ if "compression_params" not in test_model_param:
+ test_model_param["compression_params"] = {}
+ test_model_param["compression_params"]["subset_size"] = subset_size
+
+ print("\n")
+ print(f"Model: {test_model_param['reported_name']}")
+ print(f"Backend: {test_model_param['backend']}")
+ print(f"Comprssion params: {test_model_param['compression_params']}")
+
+ # Get target fp32 metric value
+ model_id = test_model_param["model_id"]
+ fp32_test_case_name = fp32_model_params[model_id]["reported_name"] + f"_backend_{BackendType.FP32.value}"
+ test_reference = reference_data[test_case_name]
+ test_reference["metric_value_fp32"] = reference_data[fp32_test_case_name]["metric_value"]
+
+ return {
+ "reported_name": test_model_param["reported_name"],
+ "model_id": test_model_param["model_id"],
+ "backend": test_model_param["backend"],
+ "compression_params": test_model_param["compression_params"],
+ "params": test_model_param.get("params"),
+ "reference_data": test_reference,
+ }
+
+
+@pytest.mark.parametrize("test_case_name", SPARSIFY_ACTIVATIONS_TEST_CASES.keys())
+def test_sparsify_activations(
+ sparsify_activations_reference_data: dict,
+ test_case_name: str,
+ data_dir: Path,
+ output_dir: Path,
+ sparsify_activations_result_data: Dict[str, SARunInfo],
+ no_eval: bool,
+ batch_size: int,
+ run_fp32_backend: bool,
+ run_torch_cuda_backend: bool,
+ subset_size: Optional[int],
+ run_benchmark_app: bool,
+ capsys: pytest.CaptureFixture,
+ extra_columns: bool,
+):
+ pipeline = None
+ err_msg = None
+ test_model_param = None
+ start_time = time.perf_counter()
+ try:
+ if test_case_name not in sparsify_activations_reference_data:
+ raise RuntimeError(f"{test_case_name} is not defined in `sparsify_activations_reference_data` fixture")
+ test_model_param = SPARSIFY_ACTIVATIONS_TEST_CASES[test_case_name]
+ maybe_skip_test_case(test_model_param, run_fp32_backend, run_torch_cuda_backend, batch_size)
+ fp32_model_params = {
+ tc["model_id"]: tc for tc in SPARSIFY_ACTIVATIONS_TEST_CASES.values() if tc["backend"] == BackendType.FP32
+ }
+ pipeline_cls = test_model_param["pipeline_cls"]
+ pipeline_kwargs = create_pipeline_kwargs(
+ test_model_param, subset_size, test_case_name, sparsify_activations_reference_data, fp32_model_params
+ )
+ calibration_batch_size = batch_size or test_model_param.get("batch_size", 1)
+ pipeline_kwargs.update(
+ {
+ "output_dir": output_dir,
+ "data_dir": data_dir,
+ "no_eval": no_eval,
+ "run_benchmark_app": run_benchmark_app,
+ "batch_size": calibration_batch_size,
+ }
+ )
+ pipeline: BaseTestPipeline = pipeline_cls(**pipeline_kwargs)
+ pipeline.run()
+ except Exception as e:
+ err_msg = str(e)
+ traceback.print_exc()
+
+ if pipeline is not None:
+ pipeline.cleanup_cache()
+ run_info = pipeline.run_info
+ if err_msg:
+ run_info.status = f"{run_info.status} | {err_msg}" if run_info.status else err_msg
+
+ captured = capsys.readouterr()
+ write_logs(captured, pipeline)
+
+ if extra_columns:
+ pipeline.collect_data_from_stdout(captured.out)
+ else:
+ run_info = create_short_run_info(test_model_param, err_msg, test_case_name)
+
+ run_info.time_total = time.perf_counter() - start_time
+ sparsify_activations_result_data[test_case_name] = run_info
+
+ if err_msg:
+ pytest.fail(err_msg)
diff --git a/tests/post_training/model_scope.py b/tests/post_training/model_scope.py
index e4d2694e7d3..ccaaec8e7c6 100644
--- a/tests/post_training/model_scope.py
+++ b/tests/post_training/model_scope.py
@@ -18,6 +18,7 @@
from nncf.parameters import CompressWeightsMode
from nncf.parameters import SensitivityMetric
from nncf.quantization.advanced_parameters import AdvancedCompressionParameters
+from nncf.quantization.advanced_parameters import AdvancedLoraCorrectionParameters
from nncf.quantization.advanced_parameters import AdvancedQuantizationParameters
from nncf.quantization.advanced_parameters import AdvancedScaleEstimationParameters
from nncf.quantization.advanced_parameters import AdvancedSmoothQuantParameters
@@ -27,6 +28,7 @@
from tests.post_training.pipelines.causal_language_model import CausalLMHF
from tests.post_training.pipelines.gpt import GPT
from tests.post_training.pipelines.image_classification_timm import ImageClassificationTimm
+from tests.post_training.pipelines.image_classification_torchvision import ImageClassificationTorchvision
from tests.post_training.pipelines.lm_weight_compression import LMWeightCompression
from tests.post_training.pipelines.masked_language_modeling import MaskedLanguageModelingHF
@@ -44,7 +46,7 @@
"backends": ALL_PTQ_BACKENDS + [BackendType.OPTIMUM],
},
{
- "reported_name": "hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM",
+ "reported_name": "hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_statefull",
"model_id": "hf-internal-testing/tiny-random-GPTNeoXForCausalLM",
"pipeline_cls": CausalLMHF,
"compression_params": {
@@ -52,6 +54,19 @@
"model_type": ModelType.TRANSFORMER,
"subset_size": 2,
},
+ "params": {"is_stateful": True},
+ "backends": [BackendType.OPTIMUM],
+ },
+ {
+ "reported_name": "hf/hf-internal-testing/tiny-random-GPTNeoXForCausalLM_stateless",
+ "model_id": "hf-internal-testing/tiny-random-GPTNeoXForCausalLM",
+ "pipeline_cls": CausalLMHF,
+ "compression_params": {
+ "preset": QuantizationPreset.MIXED,
+ "model_type": ModelType.TRANSFORMER,
+ "subset_size": 2,
+ },
+ "params": {"is_stateful": False},
"backends": [BackendType.OPTIMUM],
},
{
@@ -65,6 +80,37 @@
},
"backends": [BackendType.TORCH, BackendType.OV, BackendType.OPTIMUM],
},
+ # Torchvision models
+ {
+ "reported_name": "torchvision/resnet18",
+ "model_id": "resnet18",
+ "pipeline_cls": ImageClassificationTorchvision,
+ "compression_params": {},
+ "backends": [BackendType.FX_TORCH, BackendType.TORCH, BackendType.CUDA_TORCH, BackendType.OV, BackendType.ONNX],
+ "batch_size": 128,
+ },
+ {
+ "reported_name": "torchvision/vit_b_16",
+ "model_id": "vit_b_16",
+ "pipeline_cls": ImageClassificationTorchvision,
+ "compression_params": {
+ "model_type": ModelType.TRANSFORMER,
+ "advanced_parameters": AdvancedQuantizationParameters(smooth_quant_alpha=0.15),
+ },
+ "backends": [BackendType.FX_TORCH, BackendType.OV],
+ "batch_size": 1,
+ },
+ {
+ "reported_name": "torchvision/swin_v2_s",
+ "model_id": "swin_v2_s",
+ "pipeline_cls": ImageClassificationTorchvision,
+ "compression_params": {
+ "model_type": ModelType.TRANSFORMER,
+ "advanced_parameters": AdvancedQuantizationParameters(smooth_quant_alpha=0.5),
+ },
+ "backends": [BackendType.FX_TORCH, BackendType.OV],
+ "batch_size": 1,
+ },
# Timm models
{
"reported_name": "timm/crossvit_9_240",
@@ -246,14 +292,6 @@
"backends": ALL_PTQ_BACKENDS,
"batch_size": 128,
},
- {
- "reported_name": "timm/resnet18",
- "model_id": "resnet18",
- "pipeline_cls": ImageClassificationTimm,
- "compression_params": {},
- "backends": ALL_PTQ_BACKENDS,
- "batch_size": 128,
- },
{
"reported_name": "timm/swin_base_patch4_window7_224",
"model_id": "swin_base_patch4_window7_224",
@@ -415,6 +453,24 @@
},
"backends": [BackendType.OV],
},
+ {
+ "reported_name": "tinyllama_data_aware_lora_stateful",
+ "model_id": "tinyllama/tinyllama-1.1b-step-50k-105b",
+ "pipeline_cls": LMWeightCompression,
+ "compression_params": {
+ "group_size": 64,
+ "ratio": 0.8,
+ "mode": CompressWeightsMode.INT4_SYM,
+ "lora_correction": True,
+ "advanced_parameters": AdvancedCompressionParameters(
+ lora_correction_params=AdvancedLoraCorrectionParameters(
+ adapter_rank=8, num_iterations=3, apply_regularization=False, subset_size=32, use_int8_adapters=True
+ )
+ ),
+ },
+ "params": {"is_stateful": True},
+ "backends": [BackendType.OV],
+ },
]
diff --git a/tests/post_training/pipelines/base.py b/tests/post_training/pipelines/base.py
index b1f7b0a558b..3657848063c 100644
--- a/tests/post_training/pipelines/base.py
+++ b/tests/post_training/pipelines/base.py
@@ -9,6 +9,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import datetime as dt
+import gc
import os
import re
import time
@@ -30,14 +31,19 @@
import nncf
from nncf import TargetDevice
from tests.shared.command import Command
+from tools.memory_monitor import MemoryType
+from tools.memory_monitor import MemoryUnit
+from tools.memory_monitor import memory_monitor_context
DEFAULT_VAL_THREADS = 4
+METRICS_XFAIL_REASON = "metrics_xfail_reason"
class BackendType(Enum):
FP32 = "FP32"
TORCH = "TORCH"
CUDA_TORCH = "CUDA_TORCH"
+ FX_TORCH = "FX_TORCH"
ONNX = "ONNX"
OV = "OV"
OPTIMUM = "OPTIMUM"
@@ -138,6 +144,8 @@ class RunInfo:
metric_value: Optional[float] = None
metric_diff: Optional[float] = None
compression_memory_usage: Optional[int] = None
+ compression_memory_usage_rss: Optional[int] = None
+ compression_memory_usage_system: Optional[int] = None
status: Optional[str] = None
fps: Optional[float] = None
time_total: Optional[float] = None
@@ -158,7 +166,15 @@ def format_memory_usage(memory):
return int(memory)
def get_result_dict(self):
- return {
+ ram_data = {}
+ if self.compression_memory_usage_rss is None and self.compression_memory_usage_system is None:
+ ram_data["RAM MiB"] = self.format_memory_usage(self.compression_memory_usage)
+ if self.compression_memory_usage_rss is not None:
+ ram_data["RAM MiB"] = self.format_memory_usage(self.compression_memory_usage_rss)
+ if self.compression_memory_usage_system is not None:
+ ram_data["RAM MiB System"] = self.format_memory_usage(self.compression_memory_usage_system)
+
+ result = {
"Model": self.model,
"Backend": self.backend.value if self.backend else None,
"Metric name": self.metric_name,
@@ -167,14 +183,17 @@ def get_result_dict(self):
"Num FQ": self.num_compress_nodes.num_fq_nodes,
"Num int4": self.num_compress_nodes.num_int4,
"Num int8": self.num_compress_nodes.num_int8,
- "RAM MiB": self.format_memory_usage(self.compression_memory_usage),
"Compr. time": self.format_time(self.time_compression),
**self.stats_from_output.get_stats(),
"Total time": self.format_time(self.time_total),
"FPS": self.fps,
+ **ram_data,
"Status": self.status[:LIMIT_LENGTH_OF_STATUS] if self.status is not None else None,
+ "Build url": os.environ.get("BUILD_URL", ""),
}
+ return result
+
class BaseTestPipeline(ABC):
"""
@@ -194,6 +213,7 @@ def __init__(
run_benchmark_app: bool,
params: dict = None,
batch_size: int = 1,
+ memory_monitor: bool = False,
) -> None:
self.reported_name = reported_name
self.model_id = model_id
@@ -204,6 +224,7 @@ def __init__(
self.reference_data = reference_data
self.params = params or {}
self.batch_size = batch_size
+ self.memory_monitor = memory_monitor
self.no_eval = no_eval
self.run_benchmark_app = run_benchmark_app
self.output_model_dir: Path = self.output_dir / self.reported_name / self.backend.value
@@ -290,6 +311,7 @@ def validate(self) -> None:
if metric_value is not None and metric_value_fp32 is not None:
self.run_info.metric_diff = round(self.run_info.metric_value - self.reference_data["metric_value_fp32"], 5)
+ status_msg = None
if (
metric_value is not None
and metric_reference is not None
@@ -297,9 +319,13 @@ def validate(self) -> None:
):
if metric_value < metric_reference:
status_msg = f"Regression: Metric value is less than reference {metric_value} < {metric_reference}"
- raise ValueError(status_msg)
if metric_value > metric_reference:
status_msg = f"Improvement: Metric value is better than reference {metric_value} > {metric_reference}"
+
+ if status_msg is not None:
+ if METRICS_XFAIL_REASON in self.reference_data:
+ self.run_info.status = f"XFAIL: {self.reference_data[METRICS_XFAIL_REASON]} - {status_msg}"
+ else:
raise ValueError(status_msg)
def run(self) -> None:
@@ -351,7 +377,19 @@ def compress(self) -> None:
torch.set_num_threads(int(inference_num_threads))
start_time = time.perf_counter()
- self.run_info.compression_memory_usage = memory_usage(self._compress, max_usage=True)
+ if self.memory_monitor:
+ gc.collect()
+ with memory_monitor_context(
+ interval=0.1,
+ memory_unit=MemoryUnit.MiB,
+ return_max_value=True,
+ save_dir=self.output_model_dir / "ptq_memory_logs",
+ ) as mmc:
+ self._compress()
+ self.run_info.compression_memory_usage_rss = mmc.memory_data[MemoryType.RSS]
+ self.run_info.compression_memory_usage_system = mmc.memory_data[MemoryType.SYSTEM]
+ else:
+ self.run_info.compression_memory_usage = memory_usage(self._compress, max_usage=True)
self.run_info.time_compression = time.perf_counter() - start_time
def save_compressed_model(self) -> None:
@@ -367,6 +405,11 @@ def save_compressed_model(self) -> None:
)
self.path_compressed_ir = self.output_model_dir / "model.xml"
ov.serialize(ov_model, self.path_compressed_ir)
+ elif self.backend == BackendType.FX_TORCH:
+ exported_model = torch.export.export(self.compressed_model, (self.dummy_tensor,))
+ ov_model = ov.convert_model(exported_model, example_input=self.dummy_tensor.cpu(), input=self.input_size)
+ self.path_compressed_ir = self.output_model_dir / "model.xml"
+ ov.serialize(ov_model, self.path_compressed_ir)
elif self.backend == BackendType.ONNX:
onnx_path = self.output_model_dir / "model.onnx"
onnx.save(self.compressed_model, str(onnx_path))
@@ -409,14 +452,18 @@ def run_bench(self) -> None:
"""
if not self.run_benchmark_app:
return
- runner = Command(f"benchmark_app -m {self.path_compressed_ir}")
- runner.run(stdout=False)
- cmd_output = " ".join(runner.output)
-
- match = re.search(r"Throughput\: (.+?) FPS", cmd_output)
- if match is not None:
- fps = match.group(1)
- self.run_info.fps = float(fps)
+
+ try:
+ runner = Command(f"benchmark_app -m {self.path_compressed_ir}")
+ runner.run(stdout=False)
+ cmd_output = " ".join(runner.output)
+
+ match = re.search(r"Throughput\: (.+?) FPS", cmd_output)
+ if match is not None:
+ fps = match.group(1)
+ self.run_info.fps = float(fps)
+ except Exception as e:
+ print(e)
def cleanup_cache(self):
"""
diff --git a/tests/post_training/pipelines/causal_language_model.py b/tests/post_training/pipelines/causal_language_model.py
index e2df5b5a47e..17761196c46 100644
--- a/tests/post_training/pipelines/causal_language_model.py
+++ b/tests/post_training/pipelines/causal_language_model.py
@@ -24,9 +24,10 @@ class CausalLMHF(PTQTestPipeline):
"""Pipeline for causal language models from Hugging Face repository"""
def prepare_model(self) -> None:
+ is_stateful = self.params.get("is_stateful", False)
if self.backend in OV_BACKENDS + [BackendType.FP32]:
self.model_hf = OVModelForCausalLM.from_pretrained(
- self.model_id, export=True, compile=False, stateful=False
+ self.model_id, export=True, compile=False, stateful=is_stateful
)
self.model = self.model_hf.model
ov.serialize(self.model, self.fp32_model_dir / "model_fp32.xml")
diff --git a/tests/post_training/pipelines/gpt.py b/tests/post_training/pipelines/gpt.py
index 4ce16b1e723..1d850605eb4 100644
--- a/tests/post_training/pipelines/gpt.py
+++ b/tests/post_training/pipelines/gpt.py
@@ -64,10 +64,11 @@ def transform_func(data):
else:
def transform_func(data):
+ ids = np.expand_dims(data["input_ids"], axis=0)
inputs = {
- "input_ids": np.expand_dims(data["input_ids"], axis=0),
+ "input_ids": ids,
"attention_mask": np.expand_dims(data["attention_mask"], axis=0),
- "position_ids": np.ones((1, 128), dtype=np.int64),
+ "position_ids": np.ones(ids.shape, dtype=np.int64),
"beam_idx": np.zeros((1,), dtype=np.int64),
}
return inputs
diff --git a/tests/post_training/pipelines/image_classification_base.py b/tests/post_training/pipelines/image_classification_base.py
new file mode 100644
index 00000000000..22e60a5ae3b
--- /dev/null
+++ b/tests/post_training/pipelines/image_classification_base.py
@@ -0,0 +1,80 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import copy
+import os
+
+import numpy as np
+import openvino as ov
+import torch
+from sklearn.metrics import accuracy_score
+from torchvision import datasets
+
+import nncf
+from nncf.common.logging.track_progress import track
+from tests.post_training.pipelines.base import DEFAULT_VAL_THREADS
+from tests.post_training.pipelines.base import PTQTestPipeline
+
+
+class ImageClassificationBase(PTQTestPipeline):
+ """Base pipeline for Image Classification models"""
+
+ def prepare_calibration_dataset(self):
+ dataset = datasets.ImageFolder(root=self.data_dir / "imagenet" / "val", transform=self.transform)
+ loader = torch.utils.data.DataLoader(dataset, batch_size=self.batch_size, num_workers=2, shuffle=False)
+
+ self.calibration_dataset = nncf.Dataset(loader, self.get_transform_calibration_fn())
+
+ def _validate(self):
+ val_dataset = datasets.ImageFolder(root=self.data_dir / "imagenet" / "val", transform=self.transform)
+ val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=1, num_workers=2, shuffle=False)
+
+ dataset_size = len(val_loader)
+
+ # Initialize result tensors for async inference support.
+ predictions = np.zeros((dataset_size))
+ references = -1 * np.ones((dataset_size))
+
+ core = ov.Core()
+
+ if os.environ.get("INFERENCE_NUM_THREADS"):
+ # Set CPU_THREADS_NUM for OpenVINO inference
+ inference_num_threads = os.environ.get("INFERENCE_NUM_THREADS")
+ core.set_property("CPU", properties={"INFERENCE_NUM_THREADS": str(inference_num_threads)})
+
+ ov_model = core.read_model(self.path_compressed_ir)
+ compiled_model = core.compile_model(ov_model, device_name="CPU")
+
+ jobs = int(os.environ.get("NUM_VAL_THREADS", DEFAULT_VAL_THREADS))
+ infer_queue = ov.AsyncInferQueue(compiled_model, jobs)
+
+ with track(total=dataset_size, description="Validation") as pbar:
+
+ def process_result(request, userdata):
+ output_data = request.get_output_tensor().data
+ predicted_label = np.argmax(output_data, axis=1)
+ predictions[userdata] = predicted_label
+ pbar.progress.update(pbar.task, advance=1)
+
+ infer_queue.set_callback(process_result)
+
+ for i, (images, target) in enumerate(val_loader):
+ # W/A for memory leaks when using torch DataLoader and OpenVINO
+ image_copies = copy.deepcopy(images.numpy())
+ infer_queue.start_async(image_copies, userdata=i)
+ references[i] = target
+
+ infer_queue.wait_all()
+
+ acc_top1 = accuracy_score(predictions, references)
+
+ self.run_info.metric_name = "Acc@1"
+ self.run_info.metric_value = acc_top1
diff --git a/tests/post_training/pipelines/image_classification_timm.py b/tests/post_training/pipelines/image_classification_timm.py
index 601ec01d28b..3f4e159331c 100644
--- a/tests/post_training/pipelines/image_classification_timm.py
+++ b/tests/post_training/pipelines/image_classification_timm.py
@@ -9,32 +9,24 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import copy
-import os
-
import numpy as np
import onnx
import openvino as ov
import timm
import torch
-from sklearn.metrics import accuracy_score
from timm.data.transforms_factory import transforms_imagenet_eval
from timm.layers.config import set_fused_attn
-from torchvision import datasets
-import nncf
-from nncf.common.logging.track_progress import track
-from tests.post_training.pipelines.base import DEFAULT_VAL_THREADS
from tests.post_training.pipelines.base import OV_BACKENDS
from tests.post_training.pipelines.base import PT_BACKENDS
from tests.post_training.pipelines.base import BackendType
-from tests.post_training.pipelines.base import PTQTestPipeline
+from tests.post_training.pipelines.image_classification_base import ImageClassificationBase
# Disable using aten::scaled_dot_product_attention
set_fused_attn(False, False)
-class ImageClassificationTimm(PTQTestPipeline):
+class ImageClassificationTimm(ImageClassificationBase):
"""Pipeline for Image Classification model from timm repository"""
def prepare_model(self) -> None:
@@ -113,55 +105,3 @@ def transform_fn(data_item):
return {self.input_name: np.array(images, dtype=np.float32)}
return transform_fn
-
- def prepare_calibration_dataset(self):
- dataset = datasets.ImageFolder(root=self.data_dir / "imagenet" / "val", transform=self.transform)
- loader = torch.utils.data.DataLoader(dataset, batch_size=self.batch_size, num_workers=2, shuffle=False)
-
- self.calibration_dataset = nncf.Dataset(loader, self.get_transform_calibration_fn())
-
- def _validate(self):
- val_dataset = datasets.ImageFolder(root=self.data_dir / "imagenet" / "val", transform=self.transform)
- val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=1, num_workers=2, shuffle=False)
-
- dataset_size = len(val_loader)
-
- # Initialize result tensors for async inference support.
- predictions = np.zeros((dataset_size))
- references = -1 * np.ones((dataset_size))
-
- core = ov.Core()
-
- if os.environ.get("INFERENCE_NUM_THREADS"):
- # Set CPU_THREADS_NUM for OpenVINO inference
- inference_num_threads = os.environ.get("INFERENCE_NUM_THREADS")
- core.set_property("CPU", properties={"INFERENCE_NUM_THREADS": str(inference_num_threads)})
-
- ov_model = core.read_model(self.path_compressed_ir)
- compiled_model = core.compile_model(ov_model, device_name="CPU")
-
- jobs = int(os.environ.get("NUM_VAL_THREADS", DEFAULT_VAL_THREADS))
- infer_queue = ov.AsyncInferQueue(compiled_model, jobs)
-
- with track(total=dataset_size, description="Validation") as pbar:
-
- def process_result(request, userdata):
- output_data = request.get_output_tensor().data
- predicted_label = np.argmax(output_data, axis=1)
- predictions[userdata] = predicted_label
- pbar.progress.update(pbar.task, advance=1)
-
- infer_queue.set_callback(process_result)
-
- for i, (images, target) in enumerate(val_loader):
- # W/A for memory leaks when using torch DataLoader and OpenVINO
- image_copies = copy.deepcopy(images.numpy())
- infer_queue.start_async(image_copies, userdata=i)
- references[i] = target
-
- infer_queue.wait_all()
-
- acc_top1 = accuracy_score(predictions, references)
-
- self.run_info.metric_name = "Acc@1"
- self.run_info.metric_value = acc_top1
diff --git a/tests/post_training/pipelines/image_classification_torchvision.py b/tests/post_training/pipelines/image_classification_torchvision.py
new file mode 100644
index 00000000000..c42aa9ab1bb
--- /dev/null
+++ b/tests/post_training/pipelines/image_classification_torchvision.py
@@ -0,0 +1,122 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import numpy as np
+import onnx
+import openvino as ov
+import torch
+from torch._export import capture_pre_autograd_graph
+from torchvision import models
+
+from nncf.torch import disable_patching
+from tests.post_training.pipelines.base import PT_BACKENDS
+from tests.post_training.pipelines.base import BackendType
+from tests.post_training.pipelines.image_classification_base import ImageClassificationBase
+
+
+class ImageClassificationTorchvision(ImageClassificationBase):
+ """Pipeline for Image Classification model from torchvision repository"""
+
+ models_vs_imagenet_weights = {
+ models.resnet18: models.ResNet18_Weights.DEFAULT,
+ models.mobilenet_v3_small: models.MobileNet_V3_Small_Weights.DEFAULT,
+ models.vit_b_16: models.ViT_B_16_Weights.DEFAULT,
+ models.swin_v2_s: models.Swin_V2_S_Weights.DEFAULT,
+ }
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.model_weights: models.WeightsEnum = None
+ self.input_name: str = None
+
+ def prepare_model(self) -> None:
+ model_cls = models.__dict__.get(self.model_id)
+ self.model_weights = self.models_vs_imagenet_weights[model_cls]
+ model = model_cls(weights=self.model_weights)
+ model.eval()
+
+ default_input_size = [self.batch_size, 3, 224, 224]
+ self.dummy_tensor = self.model_weights.transforms()(torch.rand(default_input_size))
+ self.static_input_size = list(self.dummy_tensor.shape)
+
+ self.input_size = self.static_input_size.copy()
+ if self.batch_size > 1: # Dynamic batch_size shape export
+ self.input_size[0] = -1
+
+ if self.backend == BackendType.FX_TORCH:
+ with torch.no_grad():
+ with disable_patching():
+ self.model = capture_pre_autograd_graph(model, (self.dummy_tensor,))
+
+ elif self.backend in PT_BACKENDS:
+ self.model = model
+
+ if self.backend == BackendType.ONNX:
+ onnx_path = self.fp32_model_dir / "model_fp32.onnx"
+ additional_kwargs = {}
+ if self.batch_size > 1:
+ additional_kwargs["input_names"] = ["image"]
+ additional_kwargs["dynamic_axes"] = {"image": {0: "batch"}}
+ torch.onnx.export(
+ model, self.dummy_tensor, onnx_path, export_params=True, opset_version=13, **additional_kwargs
+ )
+ self.model = onnx.load(onnx_path)
+ self.input_name = self.model.graph.input[0].name
+
+ elif self.backend in [BackendType.OV, BackendType.FP32]:
+ with torch.no_grad():
+ self.model = ov.convert_model(model, example_input=self.dummy_tensor, input=self.input_size)
+ self.input_name = list(inp.get_any_name() for inp in self.model.inputs)[0]
+
+ self._dump_model_fp32()
+
+ # Set device after dump fp32 model
+ if self.backend == BackendType.CUDA_TORCH:
+ self.model.cuda()
+ self.dummy_tensor = self.dummy_tensor.cuda()
+
+ def _dump_model_fp32(self) -> None:
+ """Dump IRs of fp32 models, to help debugging."""
+ if self.backend in PT_BACKENDS:
+ with disable_patching():
+ ov_model = ov.convert_model(
+ torch.export.export(self.model, args=(self.dummy_tensor,)),
+ example_input=self.dummy_tensor,
+ input=self.input_size,
+ )
+ ov.serialize(ov_model, self.fp32_model_dir / "model_fp32.xml")
+
+ if self.backend == BackendType.FX_TORCH:
+ exported_model = torch.export.export(self.model, (self.dummy_tensor,))
+ ov_model = ov.convert_model(exported_model, example_input=self.dummy_tensor, input=self.input_size)
+ ov.serialize(ov_model, self.fp32_model_dir / "fx_model_fp32.xml")
+
+ if self.backend in [BackendType.FP32, BackendType.OV]:
+ ov.serialize(self.model, self.fp32_model_dir / "model_fp32.xml")
+
+ def prepare_preprocessor(self) -> None:
+ self.transform = self.model_weights.transforms()
+
+ def get_transform_calibration_fn(self):
+ if self.backend in [BackendType.FX_TORCH] + PT_BACKENDS:
+ device = torch.device("cuda" if self.backend == BackendType.CUDA_TORCH else "cpu")
+
+ def transform_fn(data_item):
+ images, _ = data_item
+ return images.to(device)
+
+ else:
+
+ def transform_fn(data_item):
+ images, _ = data_item
+ return {self.input_name: np.array(images, dtype=np.float32)}
+
+ return transform_fn
diff --git a/tests/post_training/pipelines/lm_weight_compression.py b/tests/post_training/pipelines/lm_weight_compression.py
index 31266d172f9..757232f4b63 100644
--- a/tests/post_training/pipelines/lm_weight_compression.py
+++ b/tests/post_training/pipelines/lm_weight_compression.py
@@ -8,7 +8,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-
+import gc
import os
import re
import shutil
@@ -32,6 +32,9 @@
from tests.post_training.pipelines.base import BaseTestPipeline
from tests.post_training.pipelines.base import StatsFromOutput
from tests.shared.paths import TEST_ROOT
+from tools.memory_monitor import MemoryType
+from tools.memory_monitor import MemoryUnit
+from tools.memory_monitor import memory_monitor_context
@dataclass
@@ -110,12 +113,14 @@ def prepare_preprocessor(self) -> None:
self.preprocessor = AutoTokenizer.from_pretrained(self.model_id)
def get_transform_calibration_fn(self):
- def transform_fn(data, max_tokens=128):
+ def transform_fn(data, max_tokens=128, filter_bad_tokens=True):
tokenized_text = self.preprocessor(data["text"], return_tensors="np")
-
- bad_tokens = self.preprocessor("", return_tensors="np")["input_ids"]
raw_tokens = tokenized_text["input_ids"][0, :]
- filtered_tokens = np.array(list(filter(lambda x: x not in bad_tokens, raw_tokens)))
+ if filter_bad_tokens:
+ bad_tokens = self.preprocessor("", return_tensors="np")["input_ids"]
+ filtered_tokens = np.array(list(filter(lambda x: x not in bad_tokens, raw_tokens)))
+ else:
+ filtered_tokens = raw_tokens
tokenized_text["input_ids"] = np.expand_dims(filtered_tokens, 0)
tokenized_text["attention_mask"] = tokenized_text["attention_mask"][:, : filtered_tokens.shape[0]]
@@ -176,7 +181,19 @@ def compress(self) -> None:
print("Weight compression...")
start_time = time.perf_counter()
- self.run_info.compression_memory_usage = memory_usage(self._compress, max_usage=True)
+ if self.memory_monitor:
+ gc.collect()
+ with memory_monitor_context(
+ interval=0.1,
+ memory_unit=MemoryUnit.MiB,
+ return_max_value=True,
+ save_dir=self.output_model_dir / "wc_memory_logs",
+ ) as mmc:
+ self._compress()
+ self.run_info.compression_memory_usage_rss = mmc.memory_data[MemoryType.RSS]
+ self.run_info.compression_memory_usage_system = mmc.memory_data[MemoryType.SYSTEM]
+ else:
+ self.run_info.compression_memory_usage = memory_usage(self._compress, max_usage=True)
self.run_info.time_compression = time.perf_counter() - start_time
def collect_data_from_stdout(self, stdout: str):
diff --git a/tests/post_training/requirements.txt b/tests/post_training/requirements.txt
index cd636a9a8dc..9a972694614 100644
--- a/tests/post_training/requirements.txt
+++ b/tests/post_training/requirements.txt
@@ -5,6 +5,7 @@ onnx
onnxruntime
openvino
pytest
+pytest-forked
librosa==0.10.0
memory-profiler==0.61.0
diff --git a/tests/post_training/test_quantize_conformance.py b/tests/post_training/test_quantize_conformance.py
index 719e01f8dc4..d5217fc0762 100644
--- a/tests/post_training/test_quantize_conformance.py
+++ b/tests/post_training/test_quantize_conformance.py
@@ -9,6 +9,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import re
import time
import traceback
from collections import OrderedDict
@@ -19,14 +20,17 @@
import pandas as pd
import pytest
import yaml
+from packaging import version
import nncf
-from tests.openvino.native.common import get_openvino_version
from tests.post_training.model_scope import PTQ_TEST_CASES
from tests.post_training.model_scope import WC_TEST_CASES
from tests.post_training.pipelines.base import BackendType
from tests.post_training.pipelines.base import BaseTestPipeline
from tests.post_training.pipelines.base import RunInfo
+from tests.shared.openvino_version import get_openvino_version
+
+DATA_ROOT = Path(__file__).parent / "data"
@pytest.fixture(scope="session", name="data_dir")
@@ -76,20 +80,41 @@ def fixture_extra_columns(pytestconfig):
return pytestconfig.getoption("extra_columns")
+@pytest.fixture(scope="session", name="memory_monitor")
+def fixture_memory_monitor(pytestconfig):
+ return pytestconfig.getoption("memory_monitor")
+
+
+def _parse_version(s: Path):
+ version_str = re.search(r".*_(\d+\.\d+).(?:yaml|yml)", s.name).group(1)
+ return version.parse(version_str)
+
+
def ref_data_correction(data: Dict, file_name: str):
- correction_data_path = Path(__file__).parent / "data" / f"{file_name}_{get_openvino_version()}.yaml"
- if correction_data_path.exists():
- with correction_data_path.open() as f:
+ """
+ Apply corrections from reference YAML files according current of OV version to the provided data dictionary.
+
+ This function reads correction data from YAML files that match the given
+ file name pattern (ptq|wc)_reference_data_(ov_version).yaml
+ """
+ ov_version = version.parse(get_openvino_version())
+
+ for file_path in sorted(DATA_ROOT.glob(f"{file_name}_*.yaml"), key=_parse_version):
+ file_ov_version = _parse_version(file_path)
+ if file_ov_version > ov_version:
+ break
+ with file_path.open() as f:
correction_data = yaml.safe_load(f)
-
for m_name, c_data in correction_data.items():
data[m_name].update(c_data)
+ print(f"Applied correction file {file_path}")
+
return data
@pytest.fixture(scope="session", name="ptq_reference_data")
def fixture_ptq_reference_data():
- path_reference = Path(__file__).parent / "data" / "ptq_reference_data.yaml"
+ path_reference = DATA_ROOT / "ptq_reference_data.yaml"
with path_reference.open() as f:
data = yaml.safe_load(f)
return ref_data_correction(data, "ptq_reference_data")
@@ -97,7 +122,7 @@ def fixture_ptq_reference_data():
@pytest.fixture(scope="session", name="wc_reference_data")
def fixture_wc_reference_data():
- path_reference = Path(__file__).parent / "data" / "wc_reference_data.yaml"
+ path_reference = DATA_ROOT / "wc_reference_data.yaml"
with path_reference.open() as f:
data = yaml.safe_load(f)
fp32_test_cases = defaultdict(dict)
@@ -114,7 +139,7 @@ def fixture_wc_reference_data():
@pytest.fixture(scope="session", name="ptq_result_data")
-def fixture_ptq_report_data(output_dir, run_benchmark_app):
+def fixture_ptq_report_data(output_dir, run_benchmark_app, pytestconfig):
data: Dict[str, RunInfo] = {}
yield data
@@ -126,11 +151,18 @@ def fixture_ptq_report_data(output_dir, run_benchmark_app):
df = df.drop(columns=["FPS"])
output_dir.mkdir(parents=True, exist_ok=True)
- df.to_csv(output_dir / "results.csv", index=False)
+ output_file = output_dir / "results.csv"
+
+ if pytestconfig.getoption("forked") and output_file.exists():
+ # When run test with --forked to run test in separate process
+ # Used in post_training_performance jobs
+ df.to_csv(output_file, index=False, mode="a", header=False)
+ else:
+ df.to_csv(output_file, index=False)
@pytest.fixture(scope="session", name="wc_result_data")
-def fixture_wc_report_data(output_dir):
+def fixture_wc_report_data(output_dir, run_benchmark_app, pytestconfig):
data: Dict[str, RunInfo] = {}
yield data
@@ -138,10 +170,20 @@ def fixture_wc_report_data(output_dir):
if data:
test_results = OrderedDict(sorted(data.items()))
df = pd.DataFrame(v.get_result_dict() for v in test_results.values())
- df = df.drop(columns=["FPS", "Num FQ"])
+ if not run_benchmark_app:
+ df = df.drop(columns=["FPS"])
+
+ df = df.drop(columns=["Num FQ"])
output_dir.mkdir(parents=True, exist_ok=True)
- df.to_csv(output_dir / "results.csv", index=False)
+ output_file = output_dir / "results.csv"
+
+ if pytestconfig.getoption("forked") and output_file.exists():
+ # When run test with --forked to run test in separate process
+ # Used in post_training_performance jobs
+ df.to_csv(output_file, index=False, mode="a", header=False)
+ else:
+ df.to_csv(output_file, index=False)
def maybe_skip_test_case(test_model_param, run_fp32_backend, run_torch_cuda_backend, batch_size):
@@ -222,6 +264,7 @@ def test_ptq_quantization(
run_benchmark_app: bool,
capsys: pytest.CaptureFixture,
extra_columns: bool,
+ memory_monitor: bool,
):
pipeline = None
err_msg = None
@@ -247,6 +290,7 @@ def test_ptq_quantization(
"no_eval": no_eval,
"run_benchmark_app": run_benchmark_app,
"batch_size": batch_size,
+ "memory_monitor": memory_monitor,
}
)
pipeline: BaseTestPipeline = pipeline_cls(**pipeline_kwargs)
@@ -291,6 +335,7 @@ def test_weight_compression(
run_benchmark_app: bool,
capsys: pytest.CaptureFixture,
extra_columns: bool,
+ memory_monitor: bool,
):
pipeline = None
err_msg = None
@@ -310,6 +355,7 @@ def test_weight_compression(
"no_eval": no_eval,
"run_benchmark_app": run_benchmark_app,
"batch_size": batch_size,
+ "memory_monitor": memory_monitor,
}
)
pipeline: BaseTestPipeline = pipeline_cls(**pipeline_kwargs)
@@ -337,3 +383,5 @@ def test_weight_compression(
if err_msg:
pytest.fail(err_msg)
+ if run_info.status is not None and run_info.status.startswith("XFAIL:"):
+ pytest.xfail(run_info.status)
diff --git a/tests/shared/openvino_version.py b/tests/shared/openvino_version.py
new file mode 100644
index 00000000000..b68c9b8a035
--- /dev/null
+++ b/tests/shared/openvino_version.py
@@ -0,0 +1,30 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Tuple
+
+import openvino as ov
+from packaging import version
+
+
+def get_openvino_major_minor_version() -> Tuple[int]:
+ ov_version = ov.__version__
+ pos = ov_version.find("-")
+ if pos != -1:
+ ov_version = ov_version[:pos]
+
+ ov_version = version.parse(ov_version).base_version
+ return tuple(map(int, ov_version.split(".")[:2]))
+
+
+def get_openvino_version() -> str:
+ major_version, minor_version = get_openvino_major_minor_version()
+ return f"{major_version}.{minor_version}"
diff --git a/tests/tensorflow/pytest.ini b/tests/tensorflow/pytest.ini
index 46562c67779..ecccea3c4d8 100644
--- a/tests/tensorflow/pytest.ini
+++ b/tests/tensorflow/pytest.ini
@@ -2,3 +2,5 @@
markers =
install
nightly
+ eval
+ oveval
diff --git a/tests/tensorflow/sota_checkpoints_eval.json b/tests/tensorflow/sota_checkpoints_eval.json
index 440a713a4ea..4d5c11b11f1 100644
--- a/tests/tensorflow/sota_checkpoints_eval.json
+++ b/tests/tensorflow/sota_checkpoints_eval.json
@@ -35,7 +35,9 @@
"model_description": "Inception V3",
"compression_description": "INT8 (per-tensor symmetric for weights, per-tensor asymmetric half-range for activations), Sparsity 61% (RB)",
"target_tf": 77.52,
- "target_ov": 77.51
+ "target_ov": 77.51,
+ "skip_ov": "CVS-147730 only for OV 2024.3",
+ "skip_ov_version": "2024.3"
},
"inception_v3_imagenet_magnitude_sparsity": {
"config": "examples/tensorflow/classification/configs/sparsity/inception_v3_imagenet_magnitude_sparsity.json",
@@ -395,4 +397,4 @@
}
}
}
-}
+}
\ No newline at end of file
diff --git a/tests/tensorflow/test_sota_checkpoints.py b/tests/tensorflow/test_sota_checkpoints.py
index 27f9318d15d..c9f07ee1cf4 100644
--- a/tests/tensorflow/test_sota_checkpoints.py
+++ b/tests/tensorflow/test_sota_checkpoints.py
@@ -28,6 +28,7 @@
from tests.shared.command import Command
from tests.shared.metric_thresholds import DIFF_FP32_MAX_GLOBAL
from tests.shared.metric_thresholds import DIFF_FP32_MIN_GLOBAL
+from tests.shared.openvino_version import get_openvino_version
from tests.shared.paths import DATASET_DEFINITIONS_PATH
from tests.shared.paths import PROJECT_ROOT
from tests.shared.paths import TEST_ROOT
@@ -85,6 +86,7 @@ class EvalRunParamsStruct:
diff_target_ov_min: float
diff_target_ov_max: float
skip_ov: Optional[str]
+ skip_ov_version: Optional[str]
xfail_ov: Optional[str]
@@ -163,6 +165,7 @@ def read_reference_file(ref_path: Path) -> List[EvalRunParamsStruct]:
diff_target_tf_min=sample_dict.get("diff_target_tf_min", DIFF_TARGET_TF_MIN),
diff_target_tf_max=sample_dict.get("diff_target_tf_max", DIFF_TARGET_TF_MAX),
skip_ov=sample_dict.get("skip_ov"),
+ skip_ov_version=sample_dict.get("skip_ov_version"),
xfail_ov=sample_dict.get("xfail_ov"),
)
)
@@ -473,7 +476,9 @@ def test_openvino_eval(
):
if not openvino:
pytest.skip()
- if eval_test_struct.skip_ov:
+ if eval_test_struct.skip_ov and (
+ eval_test_struct.skip_ov_version is None or eval_test_struct.skip_ov_version == get_openvino_version()
+ ):
status = f"Skip by: {eval_test_struct.skip_ov}"
collected_data.append(ResultInfo(model_name=eval_test_struct.model_name, backend="OV", status=status))
pytest.skip(status)
diff --git a/tests/tools/requirements.txt b/tests/tools/requirements.txt
new file mode 100644
index 00000000000..b3c28b380b4
--- /dev/null
+++ b/tests/tools/requirements.txt
@@ -0,0 +1,4 @@
+matplotlib
+psutil
+pytest
+tabulate>=0.9.0
\ No newline at end of file
diff --git a/tests/tools/test_memory_monitor.py b/tests/tools/test_memory_monitor.py
new file mode 100644
index 00000000000..a094625b169
--- /dev/null
+++ b/tests/tools/test_memory_monitor.py
@@ -0,0 +1,184 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import gc
+import os
+import queue
+import sys
+import time
+from pathlib import Path
+
+import numpy as np
+import pytest
+
+from tests.shared.isolation_runner import ISOLATION_RUN_ENV_VAR
+from tests.shared.isolation_runner import run_pytest_case_function_in_separate_process
+from tools.memory_monitor import MemoryMonitor
+from tools.memory_monitor import MemoryType
+from tools.memory_monitor import MemoryUnit
+from tools.memory_monitor import memory_monitor_context
+
+BYTES_TO_ALLOCATE_SMALL = 2**20 # 1 MiB
+BYTES_TO_ALLOCATE_LARGE = 100 * 2**20 # 100 MiB
+PREALLOCATE_DURATION = 0.5
+ALLOCATE_DURATION = 0.5
+DEALLOCATE_DURATION = 0.5
+BASELINE_MEMORY_VAR = "TEST_BASELINE_MEMORY"
+TEMP_DIR_VAR = "TEST_TEMP_DIR"
+
+
+if "win32" in sys.platform:
+ pytest.skip("Windows is not supported", allow_module_level=True)
+
+
+def allocate(n_bytes, sleep_before_deallocation=False, sleep_after_deallocation=False):
+ if sleep_before_deallocation:
+ time.sleep(PREALLOCATE_DURATION)
+ data = np.ones((n_bytes,), dtype=np.uint8)
+ time.sleep(ALLOCATE_DURATION)
+ del data
+ gc.collect()
+ if sleep_after_deallocation:
+ time.sleep(DEALLOCATE_DURATION)
+
+
+def test_memory_monitor_api(tmpdir):
+ tmpdir = Path(tmpdir)
+
+ memory_monitor = MemoryMonitor().start()
+ allocate(BYTES_TO_ALLOCATE_SMALL)
+ memory_monitor.stop()
+ time_values, memory_values = memory_monitor.get_data()
+
+ filename_suffix1 = "_test1"
+ memory_monitor.save_memory_logs(
+ time_values, memory_values, tmpdir, plot_title="Test", filename_suffix=filename_suffix1
+ )
+ saved_files = tuple(tmpdir.glob("*"))
+ assert len(saved_files) == 2
+ assert any(map(lambda fn: str(fn).endswith(f"{filename_suffix1}.txt"), saved_files))
+ assert any(map(lambda fn: str(fn).endswith(f"{filename_suffix1}.png"), saved_files))
+
+ filename_suffix2 = "_test2"
+ txt_filepath = next(filter(lambda fn: str(fn).endswith(".txt"), saved_files))
+ memory_monitor.save_memory_plot(txt_filepath, plot_title="Test re-plot", filename_suffix=filename_suffix2)
+ saved_files = list(tmpdir.glob("*"))
+ assert len(saved_files) == 3
+ assert any(map(lambda fn: str(fn).endswith(f"{filename_suffix2}.png"), saved_files))
+
+
+@pytest.mark.parametrize("memory_type", (MemoryType.RSS, MemoryType.SYSTEM))
+def test_memory_type(memory_type):
+ memory_monitor = MemoryMonitor(memory_type=memory_type).start()
+ allocate(BYTES_TO_ALLOCATE_SMALL)
+ memory_monitor.stop()
+ memory_monitor.get_data()
+
+
+@pytest.mark.parametrize("memory_unit", MemoryUnit.__members__.values())
+def test_memory_unit(memory_unit):
+ memory_monitor = MemoryMonitor(memory_unit=memory_unit).start()
+ allocate(BYTES_TO_ALLOCATE_SMALL)
+ memory_monitor.stop()
+ memory_monitor.get_data()
+
+
+@pytest.mark.parametrize("interval", (5e-2, 1e-1))
+def test_interval(interval):
+ memory_monitor = MemoryMonitor(interval=interval).start()
+ allocate(BYTES_TO_ALLOCATE_SMALL, sleep_before_deallocation=True, sleep_after_deallocation=True)
+ memory_monitor.stop()
+ time_values, memory_values = memory_monitor.get_data()
+ assert len(time_values) == len(memory_values)
+ assert len(time_values) == pytest.approx(
+ (PREALLOCATE_DURATION + ALLOCATE_DURATION + DEALLOCATE_DURATION) / interval, rel=1e-1
+ )
+
+
+@pytest.mark.parametrize("return_max_value", (True, False))
+def test_memory_monitor_context(tmpdir, return_max_value):
+ tmpdir = Path(tmpdir)
+ with memory_monitor_context(return_max_value=return_max_value, save_dir=tmpdir) as mmc:
+ allocate(BYTES_TO_ALLOCATE_SMALL)
+ memory_data = mmc.memory_data
+
+ assert isinstance(memory_data, dict)
+ assert MemoryType.RSS in memory_data
+ assert MemoryType.SYSTEM in memory_data
+ if return_max_value:
+ assert all(map(lambda v: isinstance(v, float), memory_data.values()))
+ else:
+ assert all(map(lambda v: isinstance(v, tuple) and len(v) == 2 and len(v[0]) == len(v[1]), memory_data.values()))
+
+ saved_files = tuple(tmpdir.glob("*"))
+ assert len(saved_files) == 8
+ assert sum(map(lambda fn: int(str(fn).endswith(".txt")), saved_files)) == 4
+ assert sum(map(lambda fn: int(str(fn).endswith(".png")), saved_files)) == 4
+
+
+def test_empty_logs(tmpdir):
+ memory_monitor = MemoryMonitor().start()
+ memory_monitor.stop()
+ memory_monitor._memory_values_queue = queue.Queue() # make sure no logs are recorded
+ time_values, memory_values = memory_monitor.get_data()
+ assert len(time_values) == len(memory_values) == 0
+ memory_monitor.save_memory_logs(time_values, memory_values, Path(tmpdir))
+
+
+@pytest.mark.skipif(ISOLATION_RUN_ENV_VAR not in os.environ, reason="Should be run via isolation proxy")
+def test_memory_values_isolated():
+ baseline_memory = float(os.environ[BASELINE_MEMORY_VAR]) if BASELINE_MEMORY_VAR in os.environ else None
+
+ memory_monitor = MemoryMonitor(memory_type=MemoryType.RSS, memory_unit=MemoryUnit.B).start()
+ bytes_to_allocate = 1 if baseline_memory is None else BYTES_TO_ALLOCATE_LARGE
+ allocate(bytes_to_allocate, sleep_before_deallocation=True, sleep_after_deallocation=True)
+ memory_monitor.stop()
+ _, memory_values = memory_monitor.get_data()
+
+ if baseline_memory is None:
+ print("\nMax memory:", max(memory_values))
+ else:
+ memory_values = list(map(lambda it: it - baseline_memory, memory_values))
+ assert max(memory_values) == pytest.approx(BYTES_TO_ALLOCATE_LARGE, rel=5e-2)
+ assert abs(memory_values[0]) < BYTES_TO_ALLOCATE_LARGE * 1e-2
+ assert abs(memory_values[-1]) < BYTES_TO_ALLOCATE_LARGE * 1e-2
+
+
+def test_memory_values():
+ # The first run of the test collects the memory that is allocated by default
+ _, stdout, _ = run_pytest_case_function_in_separate_process(test_memory_values_isolated)
+ max_mem_line = next(filter(lambda s: "Max memory:" in s, stdout.split("\n")))
+ baseline_memory = max_mem_line.split(" ")[-1]
+
+ # The second run of the test checks that the added amount of memory is correctly represented by the memory monitor
+ os.environ[BASELINE_MEMORY_VAR] = baseline_memory
+ run_pytest_case_function_in_separate_process(test_memory_values_isolated)
+ del os.environ[BASELINE_MEMORY_VAR]
+
+
+@pytest.mark.skipif(ISOLATION_RUN_ENV_VAR not in os.environ, reason="Should be run via isolation proxy")
+def test_at_exit_isolated():
+ memory_monitor = MemoryMonitor()
+ at_exit_fn = lambda: memory_monitor.save_memory_logs(*memory_monitor.get_data(), Path(os.environ[TEMP_DIR_VAR]))
+ memory_monitor.start(at_exit_fn=at_exit_fn)
+ allocate(BYTES_TO_ALLOCATE_SMALL)
+
+
+def test_at_exit(tmpdir):
+ os.environ[TEMP_DIR_VAR] = str(tmpdir)
+ run_pytest_case_function_in_separate_process(test_at_exit_isolated)
+ del os.environ[TEMP_DIR_VAR]
+
+ tmpdir = Path(tmpdir)
+ saved_files = tuple(tmpdir.glob("*"))
+ assert len(saved_files) == 2
+ assert any(map(lambda fn: str(fn).endswith(".txt"), saved_files))
+ assert any(map(lambda fn: str(fn).endswith(".png"), saved_files))
diff --git a/tests/torch/data/experimental/sparsify_activations/dummy_llama_int8_sym_weights_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/dummy_llama_int8_sym_weights_sparse_activations.dot
new file mode 100644
index 00000000000..c3e5cf0d0c9
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/dummy_llama_int8_sym_weights_sparse_activations.dot
@@ -0,0 +1,488 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 model.embed_tokens.weight" [id=1, type=nncf_model_const];
+"2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=2, type=decompress_symmetric];
+"3 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/SymmetricWeightsDecompressor/type_0" [id=3, type=type];
+"4 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0" [id=4, type=embedding];
+"5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" [id=5, type=to];
+"6 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/pow_0" [id=6, type=pow];
+"7 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/mean_0" [id=7, type=mean];
+"8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__add___0" [id=8, type=__add__];
+"9 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/rsqrt_0" [id=9, type=rsqrt];
+"10 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0" [id=10, type=__mul__];
+"11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_1" [id=11, type=to];
+"12 model.layers.0.input_layernorm.weight" [id=12, type=nncf_model_const];
+"13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" [id=13, type=__mul__];
+"14 model.layers.0.self_attn.q_proj.weight" [id=14, type=nncf_model_const];
+"15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=15, type=decompress_symmetric];
+"16 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/type_0" [id=16, type=type];
+"17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" [id=17, type=linear];
+"18 model.layers.0.self_attn.k_proj.weight" [id=18, type=nncf_model_const];
+"19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=19, type=decompress_symmetric];
+"20 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/type_0" [id=20, type=type];
+"21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" [id=21, type=linear];
+"22 model.layers.0.self_attn.v_proj.weight" [id=22, type=nncf_model_const];
+"23 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=23, type=decompress_symmetric];
+"24 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/type_0" [id=24, type=type];
+"25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" [id=25, type=linear];
+"26 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_0" [id=26, type=view];
+"27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" [id=27, type=transpose];
+"28 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_1" [id=28, type=view];
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" [id=29, type=transpose];
+"30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_2" [id=30, type=view];
+"31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_2" [id=31, type=transpose];
+"32 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" [id=32, type=cat];
+"33 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" [id=33, type=cos];
+"34 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" [id=34, type=sin];
+"35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" [id=35, type=to];
+"36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" [id=36, type=to];
+"37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0" [id=37, type=unsqueeze];
+"38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1" [id=38, type=unsqueeze];
+"39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0" [id=39, type=__mul__];
+"40 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___0" [id=40, type=__getitem__];
+"41 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___1" [id=41, type=__getitem__];
+"42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___0" [id=42, type=__neg__];
+"43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0" [id=43, type=cat];
+"44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1" [id=44, type=__mul__];
+"45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0" [id=45, type=__add__];
+"46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2" [id=46, type=__mul__];
+"47 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___2" [id=47, type=__getitem__];
+"48 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___3" [id=48, type=__getitem__];
+"49 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___1" [id=49, type=__neg__];
+"50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1" [id=50, type=cat];
+"51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3" [id=51, type=__mul__];
+"52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1" [id=52, type=__add__];
+"53 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___4" [id=53, type=__getitem__];
+"54 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_0" [id=54, type=expand];
+"55 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_0" [id=55, type=reshape];
+"56 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___5" [id=56, type=__getitem__];
+"57 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_1" [id=57, type=expand];
+"58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_1" [id=58, type=reshape];
+"59 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_3" [id=59, type=transpose];
+"60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0" [id=60, type=matmul];
+"61 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__truediv___0" [id=61, type=__truediv__];
+"62 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___2" [id=62, type=__add__];
+"63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/softmax_0" [id=63, type=softmax];
+"64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/to_0" [id=64, type=to];
+"65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/dropout_0" [id=65, type=dropout];
+"66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1" [id=66, type=matmul];
+"67 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_4" [id=67, type=transpose];
+"68 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/contiguous_0" [id=68, type=contiguous];
+"69 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_2" [id=69, type=reshape];
+"70 model.layers.0.self_attn.o_proj.weight" [id=70, type=nncf_model_const];
+"71 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=71, type=decompress_symmetric];
+"72 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/type_0" [id=72, type=type];
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" [id=73, type=linear];
+"74 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0" [id=74, type=__add__];
+"75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" [id=75, type=to];
+"76 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/pow_0" [id=76, type=pow];
+"77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/mean_0" [id=77, type=mean];
+"78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__add___0" [id=78, type=__add__];
+"79 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" [id=79, type=rsqrt];
+"80 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" [id=80, type=__mul__];
+"81 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_1" [id=81, type=to];
+"82 model.layers.0.post_attention_layernorm.weight" [id=82, type=nncf_model_const];
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" [id=83, type=__mul__];
+"84 model.layers.0.mlp.gate_proj.weight" [id=84, type=nncf_model_const];
+"85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=85, type=decompress_symmetric];
+"86 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/type_0" [id=86, type=type];
+"87 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" [id=87, type=abs];
+"88 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" [id=88, type=le];
+"89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" [id=89, type=masked_fill];
+"90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" [id=90, type=linear];
+"91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" [id=91, type=silu];
+"92 model.layers.0.mlp.up_proj.weight" [id=92, type=nncf_model_const];
+"93 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=93, type=decompress_symmetric];
+"94 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/type_0" [id=94, type=type];
+"95 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" [id=95, type=abs];
+"96 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" [id=96, type=le];
+"97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" [id=97, type=masked_fill];
+"98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" [id=98, type=linear];
+"99 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0" [id=99, type=__mul__];
+"100 model.layers.0.mlp.down_proj.weight" [id=100, type=nncf_model_const];
+"101 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=101, type=decompress_symmetric];
+"102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/type_0" [id=102, type=type];
+"103 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" [id=103, type=abs];
+"104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" [id=104, type=le];
+"105 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" [id=105, type=masked_fill];
+"106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" [id=106, type=linear];
+"107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1" [id=107, type=__add__];
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" [id=108, type=to];
+"109 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/pow_0" [id=109, type=pow];
+"110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/mean_0" [id=110, type=mean];
+"111 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__add___0" [id=111, type=__add__];
+"112 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/rsqrt_0" [id=112, type=rsqrt];
+"113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0" [id=113, type=__mul__];
+"114 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_1" [id=114, type=to];
+"115 model.layers.1.input_layernorm.weight" [id=115, type=nncf_model_const];
+"116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" [id=116, type=__mul__];
+"117 model.layers.1.self_attn.q_proj.weight" [id=117, type=nncf_model_const];
+"118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=118, type=decompress_symmetric];
+"119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/type_0" [id=119, type=type];
+"120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" [id=120, type=linear];
+"121 model.layers.1.self_attn.k_proj.weight" [id=121, type=nncf_model_const];
+"122 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=122, type=decompress_symmetric];
+"123 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/type_0" [id=123, type=type];
+"124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" [id=124, type=linear];
+"125 model.layers.1.self_attn.v_proj.weight" [id=125, type=nncf_model_const];
+"126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=126, type=decompress_symmetric];
+"127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/type_0" [id=127, type=type];
+"128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" [id=128, type=linear];
+"129 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_0" [id=129, type=view];
+"130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" [id=130, type=transpose];
+"131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_1" [id=131, type=view];
+"132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" [id=132, type=transpose];
+"133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_2" [id=133, type=view];
+"134 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_2" [id=134, type=transpose];
+"135 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" [id=135, type=cat];
+"136 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" [id=136, type=cos];
+"137 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" [id=137, type=sin];
+"138 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" [id=138, type=to];
+"139 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" [id=139, type=to];
+"140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0" [id=140, type=unsqueeze];
+"141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1" [id=141, type=unsqueeze];
+"142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0" [id=142, type=__mul__];
+"143 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___0" [id=143, type=__getitem__];
+"144 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___1" [id=144, type=__getitem__];
+"145 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___0" [id=145, type=__neg__];
+"146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0" [id=146, type=cat];
+"147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1" [id=147, type=__mul__];
+"148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0" [id=148, type=__add__];
+"149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2" [id=149, type=__mul__];
+"150 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___2" [id=150, type=__getitem__];
+"151 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___3" [id=151, type=__getitem__];
+"152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___1" [id=152, type=__neg__];
+"153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1" [id=153, type=cat];
+"154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3" [id=154, type=__mul__];
+"155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1" [id=155, type=__add__];
+"156 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___4" [id=156, type=__getitem__];
+"157 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_0" [id=157, type=expand];
+"158 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_0" [id=158, type=reshape];
+"159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___5" [id=159, type=__getitem__];
+"160 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_1" [id=160, type=expand];
+"161 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_1" [id=161, type=reshape];
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_3" [id=162, type=transpose];
+"163 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0" [id=163, type=matmul];
+"164 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__truediv___0" [id=164, type=__truediv__];
+"165 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___2" [id=165, type=__add__];
+"166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/softmax_0" [id=166, type=softmax];
+"167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/to_0" [id=167, type=to];
+"168 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/dropout_0" [id=168, type=dropout];
+"169 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1" [id=169, type=matmul];
+"170 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_4" [id=170, type=transpose];
+"171 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/contiguous_0" [id=171, type=contiguous];
+"172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_2" [id=172, type=reshape];
+"173 model.layers.1.self_attn.o_proj.weight" [id=173, type=nncf_model_const];
+"174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=174, type=decompress_symmetric];
+"175 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/type_0" [id=175, type=type];
+"176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" [id=176, type=linear];
+"177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0" [id=177, type=__add__];
+"178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" [id=178, type=to];
+"179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/pow_0" [id=179, type=pow];
+"180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/mean_0" [id=180, type=mean];
+"181 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__add___0" [id=181, type=__add__];
+"182 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" [id=182, type=rsqrt];
+"183 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" [id=183, type=__mul__];
+"184 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_1" [id=184, type=to];
+"185 model.layers.1.post_attention_layernorm.weight" [id=185, type=nncf_model_const];
+"186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" [id=186, type=__mul__];
+"187 model.layers.1.mlp.gate_proj.weight" [id=187, type=nncf_model_const];
+"188 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=188, type=decompress_symmetric];
+"189 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/type_0" [id=189, type=type];
+"190 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" [id=190, type=abs];
+"191 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" [id=191, type=le];
+"192 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" [id=192, type=masked_fill];
+"193 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" [id=193, type=linear];
+"194 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" [id=194, type=silu];
+"195 model.layers.1.mlp.up_proj.weight" [id=195, type=nncf_model_const];
+"196 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=196, type=decompress_symmetric];
+"197 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/type_0" [id=197, type=type];
+"198 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" [id=198, type=abs];
+"199 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" [id=199, type=le];
+"200 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" [id=200, type=masked_fill];
+"201 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" [id=201, type=linear];
+"202 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0" [id=202, type=__mul__];
+"203 model.layers.1.mlp.down_proj.weight" [id=203, type=nncf_model_const];
+"204 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=204, type=decompress_symmetric];
+"205 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/type_0" [id=205, type=type];
+"206 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" [id=206, type=abs];
+"207 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" [id=207, type=le];
+"208 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" [id=208, type=masked_fill];
+"209 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" [id=209, type=linear];
+"210 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1" [id=210, type=__add__];
+"211 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0" [id=211, type=to];
+"212 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/pow_0" [id=212, type=pow];
+"213 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/mean_0" [id=213, type=mean];
+"214 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__add___0" [id=214, type=__add__];
+"215 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/rsqrt_0" [id=215, type=rsqrt];
+"216 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0" [id=216, type=__mul__];
+"217 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_1" [id=217, type=to];
+"218 model.norm.weight" [id=218, type=nncf_model_const];
+"219 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1" [id=219, type=__mul__];
+"220 lm_head.weight" [id=220, type=nncf_model_const];
+"221 LlamaForCausalLM/Linear[lm_head]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=221, type=decompress_symmetric];
+"222 LlamaForCausalLM/Linear[lm_head]/SymmetricWeightsDecompressor/type_0" [id=222, type=type];
+"223 LlamaForCausalLM/Linear[lm_head]/linear_0" [id=223, type=linear];
+"224 LlamaForCausalLM/float_0" [id=224, type=float];
+"225 /nncf_model_output_0" [id=225, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "4 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0";
+"1 model.embed_tokens.weight" -> "2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "3 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/SymmetricWeightsDecompressor/type_0";
+"3 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/SymmetricWeightsDecompressor/type_0" -> "4 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0";
+"4 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0" -> "5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0";
+"5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" -> "6 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/pow_0";
+"5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" -> "10 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" -> "74 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0";
+"6 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/pow_0" -> "7 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/mean_0";
+"7 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/mean_0" -> "8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__add___0";
+"8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__add___0" -> "9 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/rsqrt_0";
+"9 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/rsqrt_0" -> "10 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"10 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0" -> "11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_1";
+"11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_1" -> "13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"12 model.layers.0.input_layernorm.weight" -> "13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"14 model.layers.0.self_attn.q_proj.weight" -> "15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "16 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/type_0";
+"16 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/type_0" -> "17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" -> "26 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_0";
+"18 model.layers.0.self_attn.k_proj.weight" -> "19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "20 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/type_0";
+"20 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/type_0" -> "21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" -> "28 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_1";
+"22 model.layers.0.self_attn.v_proj.weight" -> "23 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"23 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "24 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/type_0";
+"24 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/type_0" -> "25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" -> "30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_2";
+"26 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_0" -> "27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0";
+"27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" -> "39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0";
+"27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" -> "40 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___0";
+"27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" -> "41 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___1";
+"28 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_1" -> "29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1";
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" -> "46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2";
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" -> "47 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___2";
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" -> "48 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___3";
+"30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_2" -> "31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_2";
+"31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_2" -> "56 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___5";
+"32 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "33 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0";
+"32 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "34 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0";
+"33 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" -> "35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0";
+"34 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" -> "36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1";
+"35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" -> "37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0";
+"36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" -> "38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1";
+"37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0" -> "39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0";
+"37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0" -> "46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2";
+"38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1" -> "44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1";
+"38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1" -> "51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3";
+"39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0" -> "45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0";
+"40 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___0" -> "43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0";
+"41 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___1" -> "42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___0";
+"42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___0" -> "43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0";
+"43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0" -> "44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1";
+"44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1" -> "45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0";
+"45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0" -> "60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0";
+"46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2" -> "52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1";
+"47 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___2" -> "50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1";
+"48 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___3" -> "49 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___1";
+"49 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___1" -> "50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1";
+"50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1" -> "51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3";
+"51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3" -> "52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1";
+"52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1" -> "53 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___4";
+"53 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___4" -> "54 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_0";
+"54 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_0" -> "55 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_0";
+"55 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_0" -> "59 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_3";
+"56 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___5" -> "57 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_1";
+"57 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_1" -> "58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_1";
+"58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_1" -> "66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1";
+"59 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_3" -> "60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0";
+"60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0" -> "61 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__truediv___0";
+"61 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__truediv___0" -> "62 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___2";
+"62 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___2" -> "63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/softmax_0";
+"63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/softmax_0" -> "64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/to_0";
+"64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/to_0" -> "65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/dropout_0";
+"65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/dropout_0" -> "66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1";
+"66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1" -> "67 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_4";
+"67 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_4" -> "68 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/contiguous_0";
+"68 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/contiguous_0" -> "69 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_2";
+"69 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_2" -> "73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"70 model.layers.0.self_attn.o_proj.weight" -> "71 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"71 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "72 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/type_0";
+"72 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/type_0" -> "73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" -> "74 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0";
+"74 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0" -> "75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0";
+"75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "76 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/pow_0";
+"75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "80 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1";
+"76 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/pow_0" -> "77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/mean_0";
+"77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/mean_0" -> "78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__add___0";
+"78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__add___0" -> "79 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0";
+"79 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" -> "80 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"80 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" -> "81 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_1";
+"81 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_1" -> "83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"82 model.layers.0.post_attention_layernorm.weight" -> "83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "87 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0";
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "95 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0";
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"84 model.layers.0.mlp.gate_proj.weight" -> "85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "86 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/type_0";
+"86 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/type_0" -> "90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"87 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" -> "88 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0";
+"88 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" -> "89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" -> "90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" -> "91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0";
+"91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" -> "99 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0";
+"92 model.layers.0.mlp.up_proj.weight" -> "93 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"93 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "94 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/type_0";
+"94 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/type_0" -> "98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"95 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" -> "96 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0";
+"96 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" -> "97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" -> "98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" -> "99 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0";
+"99 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0" -> "103 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0";
+"99 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0" -> "105 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"100 model.layers.0.mlp.down_proj.weight" -> "101 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"101 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/type_0";
+"102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/type_0" -> "106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"103 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" -> "104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0";
+"104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" -> "105 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"105 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" -> "106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" -> "107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1";
+"107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1" -> "108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0";
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" -> "109 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/pow_0";
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" -> "113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" -> "177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0";
+"109 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/pow_0" -> "110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/mean_0";
+"110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/mean_0" -> "111 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__add___0";
+"111 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__add___0" -> "112 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/rsqrt_0";
+"112 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/rsqrt_0" -> "113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0" -> "114 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_1";
+"114 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_1" -> "116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"115 model.layers.1.input_layernorm.weight" -> "116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"117 model.layers.1.self_attn.q_proj.weight" -> "118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/type_0";
+"119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/SymmetricWeightsDecompressor/type_0" -> "120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" -> "129 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_0";
+"121 model.layers.1.self_attn.k_proj.weight" -> "122 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"122 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "123 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/type_0";
+"123 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/SymmetricWeightsDecompressor/type_0" -> "124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" -> "131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_1";
+"125 model.layers.1.self_attn.v_proj.weight" -> "126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/type_0";
+"127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/SymmetricWeightsDecompressor/type_0" -> "128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" -> "133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_2";
+"129 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_0" -> "130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0";
+"130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" -> "142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0";
+"130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" -> "143 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___0";
+"130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" -> "144 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___1";
+"131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_1" -> "132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1";
+"132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" -> "149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2";
+"132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" -> "150 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___2";
+"132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" -> "151 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___3";
+"133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_2" -> "134 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_2";
+"134 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_2" -> "159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___5";
+"135 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "136 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0";
+"135 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "137 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0";
+"136 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" -> "138 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0";
+"137 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" -> "139 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1";
+"138 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" -> "140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0";
+"139 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" -> "141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1";
+"140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0" -> "142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0";
+"140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0" -> "149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2";
+"141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1" -> "147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1";
+"141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1" -> "154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3";
+"142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0" -> "148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0";
+"143 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___0" -> "146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0";
+"144 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___1" -> "145 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___0";
+"145 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___0" -> "146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0";
+"146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0" -> "147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1";
+"147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1" -> "148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0";
+"148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0" -> "163 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0";
+"149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2" -> "155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1";
+"150 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___2" -> "153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1";
+"151 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___3" -> "152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___1";
+"152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___1" -> "153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1";
+"153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1" -> "154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3";
+"154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3" -> "155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1";
+"155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1" -> "156 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___4";
+"156 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___4" -> "157 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_0";
+"157 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_0" -> "158 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_0";
+"158 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_0" -> "162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_3";
+"159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___5" -> "160 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_1";
+"160 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_1" -> "161 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_1";
+"161 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_1" -> "169 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1";
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_3" -> "163 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0";
+"163 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0" -> "164 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__truediv___0";
+"164 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__truediv___0" -> "165 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___2";
+"165 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___2" -> "166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/softmax_0";
+"166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/softmax_0" -> "167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/to_0";
+"167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/to_0" -> "168 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/dropout_0";
+"168 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/dropout_0" -> "169 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1";
+"169 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1" -> "170 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_4";
+"170 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_4" -> "171 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/contiguous_0";
+"171 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/contiguous_0" -> "172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_2";
+"172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_2" -> "176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"173 model.layers.1.self_attn.o_proj.weight" -> "174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "175 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/type_0";
+"175 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/SymmetricWeightsDecompressor/type_0" -> "176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" -> "177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0";
+"177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0" -> "178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0";
+"178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/pow_0";
+"178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "183 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "210 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1";
+"179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/pow_0" -> "180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/mean_0";
+"180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/mean_0" -> "181 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__add___0";
+"181 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__add___0" -> "182 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0";
+"182 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" -> "183 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"183 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" -> "184 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_1";
+"184 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_1" -> "186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"185 model.layers.1.post_attention_layernorm.weight" -> "186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "190 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0";
+"186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "192 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "198 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0";
+"186 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "200 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"187 model.layers.1.mlp.gate_proj.weight" -> "188 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"188 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "189 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/type_0";
+"189 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/SymmetricWeightsDecompressor/type_0" -> "193 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"190 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" -> "191 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0";
+"191 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" -> "192 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"192 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" -> "193 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"193 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" -> "194 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0";
+"194 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" -> "202 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0";
+"195 model.layers.1.mlp.up_proj.weight" -> "196 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"196 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "197 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/type_0";
+"197 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/SymmetricWeightsDecompressor/type_0" -> "201 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"198 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" -> "199 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0";
+"199 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" -> "200 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"200 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" -> "201 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"201 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" -> "202 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0";
+"202 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0" -> "206 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0";
+"202 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0" -> "208 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"203 model.layers.1.mlp.down_proj.weight" -> "204 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"204 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "205 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/type_0";
+"205 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/SymmetricWeightsDecompressor/type_0" -> "209 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"206 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" -> "207 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0";
+"207 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" -> "208 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"208 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" -> "209 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"209 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" -> "210 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1";
+"210 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1" -> "211 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0";
+"211 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0" -> "212 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/pow_0";
+"211 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0" -> "216 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0";
+"212 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/pow_0" -> "213 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/mean_0";
+"213 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/mean_0" -> "214 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__add___0";
+"214 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__add___0" -> "215 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/rsqrt_0";
+"215 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/rsqrt_0" -> "216 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0";
+"216 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0" -> "217 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_1";
+"217 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_1" -> "219 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1";
+"218 model.norm.weight" -> "219 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1";
+"219 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1" -> "223 LlamaForCausalLM/Linear[lm_head]/linear_0";
+"220 lm_head.weight" -> "221 LlamaForCausalLM/Linear[lm_head]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"221 LlamaForCausalLM/Linear[lm_head]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "222 LlamaForCausalLM/Linear[lm_head]/SymmetricWeightsDecompressor/type_0";
+"222 LlamaForCausalLM/Linear[lm_head]/SymmetricWeightsDecompressor/type_0" -> "223 LlamaForCausalLM/Linear[lm_head]/linear_0";
+"223 LlamaForCausalLM/Linear[lm_head]/linear_0" -> "224 LlamaForCausalLM/float_0";
+"224 LlamaForCausalLM/float_0" -> "225 /nncf_model_output_0";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/dummy_llama_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/dummy_llama_sparse_activations.dot
new file mode 100644
index 00000000000..05ba7d8f87c
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/dummy_llama_sparse_activations.dot
@@ -0,0 +1,424 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 model.embed_tokens.weight" [id=1, type=nncf_model_const];
+"2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0" [id=2, type=embedding];
+"3 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" [id=3, type=to];
+"4 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/pow_0" [id=4, type=pow];
+"5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/mean_0" [id=5, type=mean];
+"6 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__add___0" [id=6, type=__add__];
+"7 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/rsqrt_0" [id=7, type=rsqrt];
+"8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0" [id=8, type=__mul__];
+"9 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_1" [id=9, type=to];
+"10 model.layers.0.input_layernorm.weight" [id=10, type=nncf_model_const];
+"11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" [id=11, type=__mul__];
+"12 model.layers.0.self_attn.q_proj.weight" [id=12, type=nncf_model_const];
+"13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" [id=13, type=linear];
+"14 model.layers.0.self_attn.k_proj.weight" [id=14, type=nncf_model_const];
+"15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" [id=15, type=linear];
+"16 model.layers.0.self_attn.v_proj.weight" [id=16, type=nncf_model_const];
+"17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" [id=17, type=linear];
+"18 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_0" [id=18, type=view];
+"19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" [id=19, type=transpose];
+"20 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_1" [id=20, type=view];
+"21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" [id=21, type=transpose];
+"22 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_2" [id=22, type=view];
+"23 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_2" [id=23, type=transpose];
+"24 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" [id=24, type=cat];
+"25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" [id=25, type=cos];
+"26 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" [id=26, type=sin];
+"27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" [id=27, type=to];
+"28 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" [id=28, type=to];
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0" [id=29, type=unsqueeze];
+"30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1" [id=30, type=unsqueeze];
+"31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0" [id=31, type=__mul__];
+"32 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___0" [id=32, type=__getitem__];
+"33 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___1" [id=33, type=__getitem__];
+"34 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___0" [id=34, type=__neg__];
+"35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0" [id=35, type=cat];
+"36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1" [id=36, type=__mul__];
+"37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0" [id=37, type=__add__];
+"38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2" [id=38, type=__mul__];
+"39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___2" [id=39, type=__getitem__];
+"40 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___3" [id=40, type=__getitem__];
+"41 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___1" [id=41, type=__neg__];
+"42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1" [id=42, type=cat];
+"43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3" [id=43, type=__mul__];
+"44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1" [id=44, type=__add__];
+"45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___4" [id=45, type=__getitem__];
+"46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_0" [id=46, type=expand];
+"47 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_0" [id=47, type=reshape];
+"48 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___5" [id=48, type=__getitem__];
+"49 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_1" [id=49, type=expand];
+"50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_1" [id=50, type=reshape];
+"51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_3" [id=51, type=transpose];
+"52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0" [id=52, type=matmul];
+"53 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__truediv___0" [id=53, type=__truediv__];
+"54 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___2" [id=54, type=__add__];
+"55 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/softmax_0" [id=55, type=softmax];
+"56 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/to_0" [id=56, type=to];
+"57 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/dropout_0" [id=57, type=dropout];
+"58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1" [id=58, type=matmul];
+"59 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_4" [id=59, type=transpose];
+"60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/contiguous_0" [id=60, type=contiguous];
+"61 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_2" [id=61, type=reshape];
+"62 model.layers.0.self_attn.o_proj.weight" [id=62, type=nncf_model_const];
+"63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" [id=63, type=linear];
+"64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0" [id=64, type=__add__];
+"65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" [id=65, type=to];
+"66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/pow_0" [id=66, type=pow];
+"67 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/mean_0" [id=67, type=mean];
+"68 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__add___0" [id=68, type=__add__];
+"69 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" [id=69, type=rsqrt];
+"70 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" [id=70, type=__mul__];
+"71 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_1" [id=71, type=to];
+"72 model.layers.0.post_attention_layernorm.weight" [id=72, type=nncf_model_const];
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" [id=73, type=__mul__];
+"74 model.layers.0.mlp.gate_proj.weight" [id=74, type=nncf_model_const];
+"75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" [id=75, type=abs];
+"76 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" [id=76, type=le];
+"77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" [id=77, type=masked_fill];
+"78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" [id=78, type=linear];
+"79 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" [id=79, type=silu];
+"80 model.layers.0.mlp.up_proj.weight" [id=80, type=nncf_model_const];
+"81 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" [id=81, type=abs];
+"82 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" [id=82, type=le];
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" [id=83, type=masked_fill];
+"84 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" [id=84, type=linear];
+"85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0" [id=85, type=__mul__];
+"86 model.layers.0.mlp.down_proj.weight" [id=86, type=nncf_model_const];
+"87 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" [id=87, type=abs];
+"88 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" [id=88, type=le];
+"89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" [id=89, type=masked_fill];
+"90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" [id=90, type=linear];
+"91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1" [id=91, type=__add__];
+"92 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" [id=92, type=to];
+"93 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/pow_0" [id=93, type=pow];
+"94 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/mean_0" [id=94, type=mean];
+"95 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__add___0" [id=95, type=__add__];
+"96 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/rsqrt_0" [id=96, type=rsqrt];
+"97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0" [id=97, type=__mul__];
+"98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_1" [id=98, type=to];
+"99 model.layers.1.input_layernorm.weight" [id=99, type=nncf_model_const];
+"100 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" [id=100, type=__mul__];
+"101 model.layers.1.self_attn.q_proj.weight" [id=101, type=nncf_model_const];
+"102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" [id=102, type=linear];
+"103 model.layers.1.self_attn.k_proj.weight" [id=103, type=nncf_model_const];
+"104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" [id=104, type=linear];
+"105 model.layers.1.self_attn.v_proj.weight" [id=105, type=nncf_model_const];
+"106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" [id=106, type=linear];
+"107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_0" [id=107, type=view];
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" [id=108, type=transpose];
+"109 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_1" [id=109, type=view];
+"110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" [id=110, type=transpose];
+"111 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_2" [id=111, type=view];
+"112 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_2" [id=112, type=transpose];
+"113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" [id=113, type=cat];
+"114 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" [id=114, type=cos];
+"115 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" [id=115, type=sin];
+"116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" [id=116, type=to];
+"117 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" [id=117, type=to];
+"118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0" [id=118, type=unsqueeze];
+"119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1" [id=119, type=unsqueeze];
+"120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0" [id=120, type=__mul__];
+"121 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___0" [id=121, type=__getitem__];
+"122 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___1" [id=122, type=__getitem__];
+"123 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___0" [id=123, type=__neg__];
+"124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0" [id=124, type=cat];
+"125 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1" [id=125, type=__mul__];
+"126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0" [id=126, type=__add__];
+"127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2" [id=127, type=__mul__];
+"128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___2" [id=128, type=__getitem__];
+"129 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___3" [id=129, type=__getitem__];
+"130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___1" [id=130, type=__neg__];
+"131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1" [id=131, type=cat];
+"132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3" [id=132, type=__mul__];
+"133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1" [id=133, type=__add__];
+"134 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___4" [id=134, type=__getitem__];
+"135 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_0" [id=135, type=expand];
+"136 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_0" [id=136, type=reshape];
+"137 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___5" [id=137, type=__getitem__];
+"138 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_1" [id=138, type=expand];
+"139 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_1" [id=139, type=reshape];
+"140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_3" [id=140, type=transpose];
+"141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0" [id=141, type=matmul];
+"142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__truediv___0" [id=142, type=__truediv__];
+"143 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___2" [id=143, type=__add__];
+"144 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/softmax_0" [id=144, type=softmax];
+"145 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/to_0" [id=145, type=to];
+"146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/dropout_0" [id=146, type=dropout];
+"147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1" [id=147, type=matmul];
+"148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_4" [id=148, type=transpose];
+"149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/contiguous_0" [id=149, type=contiguous];
+"150 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_2" [id=150, type=reshape];
+"151 model.layers.1.self_attn.o_proj.weight" [id=151, type=nncf_model_const];
+"152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" [id=152, type=linear];
+"153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0" [id=153, type=__add__];
+"154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" [id=154, type=to];
+"155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/pow_0" [id=155, type=pow];
+"156 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/mean_0" [id=156, type=mean];
+"157 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__add___0" [id=157, type=__add__];
+"158 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" [id=158, type=rsqrt];
+"159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" [id=159, type=__mul__];
+"160 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_1" [id=160, type=to];
+"161 model.layers.1.post_attention_layernorm.weight" [id=161, type=nncf_model_const];
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" [id=162, type=__mul__];
+"163 model.layers.1.mlp.gate_proj.weight" [id=163, type=nncf_model_const];
+"164 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" [id=164, type=abs];
+"165 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" [id=165, type=le];
+"166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" [id=166, type=masked_fill];
+"167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" [id=167, type=linear];
+"168 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" [id=168, type=silu];
+"169 model.layers.1.mlp.up_proj.weight" [id=169, type=nncf_model_const];
+"170 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" [id=170, type=abs];
+"171 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" [id=171, type=le];
+"172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" [id=172, type=masked_fill];
+"173 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" [id=173, type=linear];
+"174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0" [id=174, type=__mul__];
+"175 model.layers.1.mlp.down_proj.weight" [id=175, type=nncf_model_const];
+"176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" [id=176, type=abs];
+"177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" [id=177, type=le];
+"178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" [id=178, type=masked_fill];
+"179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" [id=179, type=linear];
+"180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1" [id=180, type=__add__];
+"181 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0" [id=181, type=to];
+"182 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/pow_0" [id=182, type=pow];
+"183 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/mean_0" [id=183, type=mean];
+"184 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__add___0" [id=184, type=__add__];
+"185 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/rsqrt_0" [id=185, type=rsqrt];
+"186 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0" [id=186, type=__mul__];
+"187 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_1" [id=187, type=to];
+"188 model.norm.weight" [id=188, type=nncf_model_const];
+"189 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1" [id=189, type=__mul__];
+"190 lm_head.weight" [id=190, type=nncf_model_const];
+"191 LlamaForCausalLM/Linear[lm_head]/linear_0" [id=191, type=linear];
+"192 LlamaForCausalLM/float_0" [id=192, type=float];
+"193 /nncf_model_output_0" [id=193, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0";
+"1 model.embed_tokens.weight" -> "2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0";
+"2 LlamaForCausalLM/LlamaModel[model]/Embedding[embed_tokens]/embedding_0" -> "3 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0";
+"3 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" -> "4 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/pow_0";
+"3 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" -> "8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"3 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_0" -> "64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0";
+"4 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/pow_0" -> "5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/mean_0";
+"5 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/mean_0" -> "6 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__add___0";
+"6 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__add___0" -> "7 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/rsqrt_0";
+"7 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/rsqrt_0" -> "8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"8 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___0" -> "9 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_1";
+"9 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/to_1" -> "11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"10 model.layers.0.input_layernorm.weight" -> "11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"11 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"12 model.layers.0.self_attn.q_proj.weight" -> "13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"13 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" -> "18 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_0";
+"14 model.layers.0.self_attn.k_proj.weight" -> "15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"15 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" -> "20 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_1";
+"16 model.layers.0.self_attn.v_proj.weight" -> "17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"17 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" -> "22 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_2";
+"18 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_0" -> "19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0";
+"19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" -> "31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0";
+"19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" -> "32 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___0";
+"19 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_0" -> "33 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___1";
+"20 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_1" -> "21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1";
+"21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" -> "38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2";
+"21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" -> "39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___2";
+"21 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_1" -> "40 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___3";
+"22 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/view_2" -> "23 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_2";
+"23 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_2" -> "48 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___5";
+"24 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0";
+"24 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "26 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0";
+"25 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" -> "27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0";
+"26 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" -> "28 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1";
+"27 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" -> "29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0";
+"28 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" -> "30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1";
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0" -> "31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0";
+"29 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_0" -> "38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2";
+"30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1" -> "36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1";
+"30 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/unsqueeze_1" -> "43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3";
+"31 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___0" -> "37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0";
+"32 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___0" -> "35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0";
+"33 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___1" -> "34 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___0";
+"34 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___0" -> "35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0";
+"35 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_0" -> "36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1";
+"36 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___1" -> "37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0";
+"37 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___0" -> "52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0";
+"38 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___2" -> "44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1";
+"39 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___2" -> "42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1";
+"40 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___3" -> "41 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___1";
+"41 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__neg___1" -> "42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1";
+"42 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/cat_1" -> "43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3";
+"43 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__mul___3" -> "44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1";
+"44 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___1" -> "45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___4";
+"45 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___4" -> "46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_0";
+"46 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_0" -> "47 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_0";
+"47 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_0" -> "51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_3";
+"48 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__getitem___5" -> "49 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_1";
+"49 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/expand_1" -> "50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_1";
+"50 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_1" -> "58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1";
+"51 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_3" -> "52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0";
+"52 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_0" -> "53 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__truediv___0";
+"53 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__truediv___0" -> "54 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___2";
+"54 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/__add___2" -> "55 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/softmax_0";
+"55 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/softmax_0" -> "56 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/to_0";
+"56 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/to_0" -> "57 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/dropout_0";
+"57 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/dropout_0" -> "58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1";
+"58 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/matmul_1" -> "59 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_4";
+"59 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/transpose_4" -> "60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/contiguous_0";
+"60 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/contiguous_0" -> "61 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_2";
+"61 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/reshape_2" -> "63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"62 model.layers.0.self_attn.o_proj.weight" -> "63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"63 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" -> "64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0";
+"64 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___0" -> "65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0";
+"65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/pow_0";
+"65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "70 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"65 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1";
+"66 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/pow_0" -> "67 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/mean_0";
+"67 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/mean_0" -> "68 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__add___0";
+"68 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__add___0" -> "69 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0";
+"69 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" -> "70 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"70 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" -> "71 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_1";
+"71 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/to_1" -> "73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"72 model.layers.0.post_attention_layernorm.weight" -> "73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0";
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "81 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0";
+"73 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"74 model.layers.0.mlp.gate_proj.weight" -> "78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"75 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" -> "76 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0";
+"76 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" -> "77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"77 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" -> "78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"78 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" -> "79 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0";
+"79 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" -> "85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0";
+"80 model.layers.0.mlp.up_proj.weight" -> "84 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"81 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" -> "82 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0";
+"82 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" -> "83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"83 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" -> "84 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"84 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" -> "85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0";
+"85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0" -> "87 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0";
+"85 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/__mul___0" -> "89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"86 model.layers.0.mlp.down_proj.weight" -> "90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"87 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" -> "88 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0";
+"88 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" -> "89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"89 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" -> "90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"90 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" -> "91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1";
+"91 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[0]/__add___1" -> "92 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0";
+"92 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" -> "93 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/pow_0";
+"92 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" -> "97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"92 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_0" -> "153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0";
+"93 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/pow_0" -> "94 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/mean_0";
+"94 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/mean_0" -> "95 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__add___0";
+"95 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__add___0" -> "96 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/rsqrt_0";
+"96 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/rsqrt_0" -> "97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0";
+"97 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___0" -> "98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_1";
+"98 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/to_1" -> "100 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"99 model.layers.1.input_layernorm.weight" -> "100 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1";
+"100 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"100 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"100 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[input_layernorm]/__mul___1" -> "106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"101 model.layers.1.self_attn.q_proj.weight" -> "102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0";
+"102 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[q_proj]/linear_0" -> "107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_0";
+"103 model.layers.1.self_attn.k_proj.weight" -> "104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0";
+"104 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[k_proj]/linear_0" -> "109 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_1";
+"105 model.layers.1.self_attn.v_proj.weight" -> "106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0";
+"106 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[v_proj]/linear_0" -> "111 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_2";
+"107 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_0" -> "108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0";
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" -> "120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0";
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" -> "121 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___0";
+"108 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_0" -> "122 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___1";
+"109 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_1" -> "110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1";
+"110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" -> "127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2";
+"110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" -> "128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___2";
+"110 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_1" -> "129 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___3";
+"111 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/view_2" -> "112 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_2";
+"112 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_2" -> "137 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___5";
+"113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "114 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0";
+"113 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cat_0" -> "115 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0";
+"114 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/cos_0" -> "116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0";
+"115 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/sin_0" -> "117 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1";
+"116 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_0" -> "118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0";
+"117 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/LlamaRotaryEmbedding[rotary_emb]/to_1" -> "119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1";
+"118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0" -> "120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0";
+"118 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_0" -> "127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2";
+"119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1" -> "125 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1";
+"119 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/unsqueeze_1" -> "132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3";
+"120 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___0" -> "126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0";
+"121 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___0" -> "124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0";
+"122 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___1" -> "123 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___0";
+"123 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___0" -> "124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0";
+"124 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_0" -> "125 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1";
+"125 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___1" -> "126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0";
+"126 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___0" -> "141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0";
+"127 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___2" -> "133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1";
+"128 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___2" -> "131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1";
+"129 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___3" -> "130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___1";
+"130 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__neg___1" -> "131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1";
+"131 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/cat_1" -> "132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3";
+"132 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__mul___3" -> "133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1";
+"133 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___1" -> "134 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___4";
+"134 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___4" -> "135 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_0";
+"135 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_0" -> "136 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_0";
+"136 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_0" -> "140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_3";
+"137 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__getitem___5" -> "138 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_1";
+"138 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/expand_1" -> "139 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_1";
+"139 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_1" -> "147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1";
+"140 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_3" -> "141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0";
+"141 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_0" -> "142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__truediv___0";
+"142 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__truediv___0" -> "143 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___2";
+"143 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/__add___2" -> "144 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/softmax_0";
+"144 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/softmax_0" -> "145 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/to_0";
+"145 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/to_0" -> "146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/dropout_0";
+"146 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/dropout_0" -> "147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1";
+"147 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/matmul_1" -> "148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_4";
+"148 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/transpose_4" -> "149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/contiguous_0";
+"149 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/contiguous_0" -> "150 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_2";
+"150 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/reshape_2" -> "152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"151 model.layers.1.self_attn.o_proj.weight" -> "152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0";
+"152 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaAttention[self_attn]/Linear[o_proj]/linear_0" -> "153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0";
+"153 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___0" -> "154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0";
+"154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/pow_0";
+"154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"154 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_0" -> "180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1";
+"155 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/pow_0" -> "156 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/mean_0";
+"156 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/mean_0" -> "157 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__add___0";
+"157 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__add___0" -> "158 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0";
+"158 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/rsqrt_0" -> "159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0";
+"159 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___0" -> "160 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_1";
+"160 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/to_1" -> "162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"161 model.layers.1.post_attention_layernorm.weight" -> "162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1";
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "164 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0";
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "170 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0";
+"162 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaRMSNorm[post_attention_layernorm]/__mul___1" -> "172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"163 model.layers.1.mlp.gate_proj.weight" -> "167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"164 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/abs_0" -> "165 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0";
+"165 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/le_0" -> "166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0";
+"166 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/ActivationsSparsifier/masked_fill_0" -> "167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0";
+"167 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[gate_proj]/linear_0" -> "168 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0";
+"168 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/SiLU[act_fn]/silu_0" -> "174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0";
+"169 model.layers.1.mlp.up_proj.weight" -> "173 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"170 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/abs_0" -> "171 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0";
+"171 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/le_0" -> "172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0";
+"172 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/ActivationsSparsifier/masked_fill_0" -> "173 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0";
+"173 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[up_proj]/linear_0" -> "174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0";
+"174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0" -> "176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0";
+"174 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/__mul___0" -> "178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"175 model.layers.1.mlp.down_proj.weight" -> "179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"176 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/abs_0" -> "177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0";
+"177 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/le_0" -> "178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0";
+"178 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/ActivationsSparsifier/masked_fill_0" -> "179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0";
+"179 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/LlamaMLP[mlp]/Linear[down_proj]/linear_0" -> "180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1";
+"180 LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/LlamaDecoderLayer[1]/__add___1" -> "181 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0";
+"181 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0" -> "182 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/pow_0";
+"181 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_0" -> "186 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0";
+"182 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/pow_0" -> "183 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/mean_0";
+"183 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/mean_0" -> "184 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__add___0";
+"184 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__add___0" -> "185 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/rsqrt_0";
+"185 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/rsqrt_0" -> "186 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0";
+"186 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___0" -> "187 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_1";
+"187 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/to_1" -> "189 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1";
+"188 model.norm.weight" -> "189 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1";
+"189 LlamaForCausalLM/LlamaModel[model]/LlamaRMSNorm[norm]/__mul___1" -> "191 LlamaForCausalLM/Linear[lm_head]/linear_0";
+"190 lm_head.weight" -> "191 LlamaForCausalLM/Linear[lm_head]/linear_0";
+"191 LlamaForCausalLM/Linear[lm_head]/linear_0" -> "192 LlamaForCausalLM/float_0";
+"192 LlamaForCausalLM/float_0" -> "193 /nncf_model_output_0";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/linear_int8_sym_weights_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/linear_int8_sym_weights_sparse_activations.dot
new file mode 100644
index 00000000000..aa24d54a2e0
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/linear_int8_sym_weights_sparse_activations.dot
@@ -0,0 +1,22 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 weight" [id=1, type=nncf_model_const];
+"2 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/SymmetricWeightsDecompressor[weights_decompressor_weight]/decompress_symmetric_0" [id=2, type=decompress_symmetric];
+"3 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/SymmetricWeightsDecompressor[weights_decompressor_weight]/type_0" [id=3, type=type];
+"4 bias" [id=4, type=nncf_model_const];
+"5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/abs_0" [id=5, type=abs];
+"6 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/le_0" [id=6, type=le];
+"7 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0" [id=7, type=masked_fill];
+"8 Linear/linear_0" [id=8, type=linear];
+"9 /nncf_model_output_0" [id=9, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/abs_0";
+"0 /nncf_model_input_0" -> "7 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0";
+"1 weight" -> "2 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/SymmetricWeightsDecompressor[weights_decompressor_weight]/decompress_symmetric_0";
+"2 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/SymmetricWeightsDecompressor[weights_decompressor_weight]/decompress_symmetric_0" -> "3 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/SymmetricWeightsDecompressor[weights_decompressor_weight]/type_0";
+"3 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/SymmetricWeightsDecompressor[weights_decompressor_weight]/type_0" -> "8 Linear/linear_0";
+"4 bias" -> "8 Linear/linear_0";
+"5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/abs_0" -> "6 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/le_0";
+"6 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/le_0" -> "7 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0";
+"7 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0" -> "8 Linear/linear_0";
+"8 Linear/linear_0" -> "9 /nncf_model_output_0";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/linear_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/linear_sparse_activations.dot
new file mode 100644
index 00000000000..a3192dfff20
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/linear_sparse_activations.dot
@@ -0,0 +1,18 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 weight" [id=1, type=nncf_model_const];
+"2 bias" [id=2, type=nncf_model_const];
+"3 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/abs_0" [id=3, type=abs];
+"4 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/le_0" [id=4, type=le];
+"5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0" [id=5, type=masked_fill];
+"6 Linear/linear_0" [id=6, type=linear];
+"7 /nncf_model_output_0" [id=7, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "3 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/abs_0";
+"0 /nncf_model_input_0" -> "5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0";
+"1 weight" -> "6 Linear/linear_0";
+"2 bias" -> "6 Linear/linear_0";
+"3 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/abs_0" -> "4 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/le_0";
+"4 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/le_0" -> "5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0";
+"5 Linear/NNCFNetworkInterface[_nncf]/ModuleDict[external_op]/ActivationsSparsifier[activations_sparsifier_Linear/linear_0]/masked_fill_0" -> "6 Linear/linear_0";
+"6 Linear/linear_0" -> "7 /nncf_model_output_0";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/three_linear_ignore1_int8_sym_weights_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/three_linear_ignore1_int8_sym_weights_sparse_activations.dot
new file mode 100644
index 00000000000..ae3f667ff3a
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/three_linear_ignore1_int8_sym_weights_sparse_activations.dot
@@ -0,0 +1,57 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 embedding.weight" [id=1, type=nncf_model_const];
+"2 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=2, type=decompress_symmetric];
+"3 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/type_0" [id=3, type=type];
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" [id=4, type=embedding];
+"5 linear1.weight" [id=5, type=nncf_model_const];
+"6 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=6, type=decompress_symmetric];
+"7 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/type_0" [id=7, type=type];
+"8 linear1.bias" [id=8, type=nncf_model_const];
+"9 ThreeLinearModel/Linear[linear1]/linear_0" [id=9, type=linear];
+"10 linear3.weight" [id=10, type=nncf_model_const];
+"11 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=11, type=decompress_symmetric];
+"12 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/type_0" [id=12, type=type];
+"13 linear3.bias" [id=13, type=nncf_model_const];
+"14 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" [id=14, type=abs];
+"15 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" [id=15, type=le];
+"16 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" [id=16, type=masked_fill];
+"17 ThreeLinearModel/Linear[linear3]/linear_0" [id=17, type=linear];
+"18 linear2.weight" [id=18, type=nncf_model_const];
+"19 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=19, type=decompress_symmetric];
+"20 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/type_0" [id=20, type=type];
+"21 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" [id=21, type=abs];
+"22 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" [id=22, type=le];
+"23 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" [id=23, type=masked_fill];
+"24 ThreeLinearModel/Linear[linear2]/linear_0" [id=24, type=linear];
+"25 /nncf_model_output_0" [id=25, type=nncf_model_output];
+"26 /nncf_model_output_1" [id=26, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "4 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"1 embedding.weight" -> "2 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"2 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "3 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/type_0";
+"3 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/type_0" -> "4 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "9 ThreeLinearModel/Linear[linear1]/linear_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "21 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "23 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"5 linear1.weight" -> "6 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"6 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "7 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/type_0";
+"7 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/type_0" -> "9 ThreeLinearModel/Linear[linear1]/linear_0";
+"8 linear1.bias" -> "9 ThreeLinearModel/Linear[linear1]/linear_0";
+"9 ThreeLinearModel/Linear[linear1]/linear_0" -> "14 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0";
+"9 ThreeLinearModel/Linear[linear1]/linear_0" -> "16 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"10 linear3.weight" -> "11 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"11 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "12 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/type_0";
+"12 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/type_0" -> "17 ThreeLinearModel/Linear[linear3]/linear_0";
+"13 linear3.bias" -> "17 ThreeLinearModel/Linear[linear3]/linear_0";
+"14 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" -> "15 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0";
+"15 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" -> "16 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"16 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" -> "17 ThreeLinearModel/Linear[linear3]/linear_0";
+"17 ThreeLinearModel/Linear[linear3]/linear_0" -> "25 /nncf_model_output_0";
+"18 linear2.weight" -> "19 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"19 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "20 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/type_0";
+"20 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/type_0" -> "24 ThreeLinearModel/Linear[linear2]/linear_0";
+"21 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" -> "22 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0";
+"22 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" -> "23 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"23 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" -> "24 ThreeLinearModel/Linear[linear2]/linear_0";
+"24 ThreeLinearModel/Linear[linear2]/linear_0" -> "26 /nncf_model_output_1";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/three_linear_ignore1_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/three_linear_ignore1_sparse_activations.dot
new file mode 100644
index 00000000000..19a4b32561e
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/three_linear_ignore1_sparse_activations.dot
@@ -0,0 +1,41 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 embedding.weight" [id=1, type=nncf_model_const];
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" [id=2, type=embedding];
+"3 linear1.weight" [id=3, type=nncf_model_const];
+"4 linear1.bias" [id=4, type=nncf_model_const];
+"5 ThreeLinearModel/Linear[linear1]/linear_0" [id=5, type=linear];
+"6 linear3.weight" [id=6, type=nncf_model_const];
+"7 linear3.bias" [id=7, type=nncf_model_const];
+"8 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" [id=8, type=abs];
+"9 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" [id=9, type=le];
+"10 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" [id=10, type=masked_fill];
+"11 ThreeLinearModel/Linear[linear3]/linear_0" [id=11, type=linear];
+"12 linear2.weight" [id=12, type=nncf_model_const];
+"13 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" [id=13, type=abs];
+"14 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" [id=14, type=le];
+"15 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" [id=15, type=masked_fill];
+"16 ThreeLinearModel/Linear[linear2]/linear_0" [id=16, type=linear];
+"17 /nncf_model_output_0" [id=17, type=nncf_model_output];
+"18 /nncf_model_output_1" [id=18, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "2 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"1 embedding.weight" -> "2 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "5 ThreeLinearModel/Linear[linear1]/linear_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "13 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "15 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"3 linear1.weight" -> "5 ThreeLinearModel/Linear[linear1]/linear_0";
+"4 linear1.bias" -> "5 ThreeLinearModel/Linear[linear1]/linear_0";
+"5 ThreeLinearModel/Linear[linear1]/linear_0" -> "8 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0";
+"5 ThreeLinearModel/Linear[linear1]/linear_0" -> "10 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"6 linear3.weight" -> "11 ThreeLinearModel/Linear[linear3]/linear_0";
+"7 linear3.bias" -> "11 ThreeLinearModel/Linear[linear3]/linear_0";
+"8 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" -> "9 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0";
+"9 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" -> "10 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"10 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" -> "11 ThreeLinearModel/Linear[linear3]/linear_0";
+"11 ThreeLinearModel/Linear[linear3]/linear_0" -> "17 /nncf_model_output_0";
+"12 linear2.weight" -> "16 ThreeLinearModel/Linear[linear2]/linear_0";
+"13 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" -> "14 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0";
+"14 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" -> "15 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"15 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" -> "16 ThreeLinearModel/Linear[linear2]/linear_0";
+"16 ThreeLinearModel/Linear[linear2]/linear_0" -> "18 /nncf_model_output_1";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/three_linear_int8_sym_weights_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/three_linear_int8_sym_weights_sparse_activations.dot
new file mode 100644
index 00000000000..c6488f1131b
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/three_linear_int8_sym_weights_sparse_activations.dot
@@ -0,0 +1,64 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 embedding.weight" [id=1, type=nncf_model_const];
+"2 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=2, type=decompress_symmetric];
+"3 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/type_0" [id=3, type=type];
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" [id=4, type=embedding];
+"5 linear1.weight" [id=5, type=nncf_model_const];
+"6 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=6, type=decompress_symmetric];
+"7 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/type_0" [id=7, type=type];
+"8 linear1.bias" [id=8, type=nncf_model_const];
+"9 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/abs_0" [id=9, type=abs];
+"10 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/le_0" [id=10, type=le];
+"11 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0" [id=11, type=masked_fill];
+"12 ThreeLinearModel/Linear[linear1]/linear_0" [id=12, type=linear];
+"13 linear3.weight" [id=13, type=nncf_model_const];
+"14 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=14, type=decompress_symmetric];
+"15 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/type_0" [id=15, type=type];
+"16 linear3.bias" [id=16, type=nncf_model_const];
+"17 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" [id=17, type=abs];
+"18 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" [id=18, type=le];
+"19 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" [id=19, type=masked_fill];
+"20 ThreeLinearModel/Linear[linear3]/linear_0" [id=20, type=linear];
+"21 linear2.weight" [id=21, type=nncf_model_const];
+"22 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/decompress_symmetric_0" [id=22, type=decompress_symmetric];
+"23 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/type_0" [id=23, type=type];
+"24 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" [id=24, type=abs];
+"25 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" [id=25, type=le];
+"26 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" [id=26, type=masked_fill];
+"27 ThreeLinearModel/Linear[linear2]/linear_0" [id=27, type=linear];
+"28 /nncf_model_output_0" [id=28, type=nncf_model_output];
+"29 /nncf_model_output_1" [id=29, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "4 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"1 embedding.weight" -> "2 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"2 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "3 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/type_0";
+"3 ThreeLinearModel/Embedding[embedding]/SymmetricWeightsDecompressor/type_0" -> "4 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "9 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/abs_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "11 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "24 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0";
+"4 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "26 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"5 linear1.weight" -> "6 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"6 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "7 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/type_0";
+"7 ThreeLinearModel/Linear[linear1]/SymmetricWeightsDecompressor/type_0" -> "12 ThreeLinearModel/Linear[linear1]/linear_0";
+"8 linear1.bias" -> "12 ThreeLinearModel/Linear[linear1]/linear_0";
+"9 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/abs_0" -> "10 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/le_0";
+"10 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/le_0" -> "11 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0";
+"11 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0" -> "12 ThreeLinearModel/Linear[linear1]/linear_0";
+"12 ThreeLinearModel/Linear[linear1]/linear_0" -> "17 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0";
+"12 ThreeLinearModel/Linear[linear1]/linear_0" -> "19 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"13 linear3.weight" -> "14 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"14 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "15 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/type_0";
+"15 ThreeLinearModel/Linear[linear3]/SymmetricWeightsDecompressor/type_0" -> "20 ThreeLinearModel/Linear[linear3]/linear_0";
+"16 linear3.bias" -> "20 ThreeLinearModel/Linear[linear3]/linear_0";
+"17 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" -> "18 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0";
+"18 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" -> "19 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"19 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" -> "20 ThreeLinearModel/Linear[linear3]/linear_0";
+"20 ThreeLinearModel/Linear[linear3]/linear_0" -> "28 /nncf_model_output_0";
+"21 linear2.weight" -> "22 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/decompress_symmetric_0";
+"22 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/decompress_symmetric_0" -> "23 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/type_0";
+"23 ThreeLinearModel/Linear[linear2]/SymmetricWeightsDecompressor/type_0" -> "27 ThreeLinearModel/Linear[linear2]/linear_0";
+"24 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" -> "25 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0";
+"25 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" -> "26 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"26 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" -> "27 ThreeLinearModel/Linear[linear2]/linear_0";
+"27 ThreeLinearModel/Linear[linear2]/linear_0" -> "29 /nncf_model_output_1";
+}
diff --git a/tests/torch/data/experimental/sparsify_activations/three_linear_sparse_activations.dot b/tests/torch/data/experimental/sparsify_activations/three_linear_sparse_activations.dot
new file mode 100644
index 00000000000..36779fe7f61
--- /dev/null
+++ b/tests/torch/data/experimental/sparsify_activations/three_linear_sparse_activations.dot
@@ -0,0 +1,48 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 embedding.weight" [id=1, type=nncf_model_const];
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" [id=2, type=embedding];
+"3 linear1.weight" [id=3, type=nncf_model_const];
+"4 linear1.bias" [id=4, type=nncf_model_const];
+"5 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/abs_0" [id=5, type=abs];
+"6 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/le_0" [id=6, type=le];
+"7 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0" [id=7, type=masked_fill];
+"8 ThreeLinearModel/Linear[linear1]/linear_0" [id=8, type=linear];
+"9 linear3.weight" [id=9, type=nncf_model_const];
+"10 linear3.bias" [id=10, type=nncf_model_const];
+"11 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" [id=11, type=abs];
+"12 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" [id=12, type=le];
+"13 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" [id=13, type=masked_fill];
+"14 ThreeLinearModel/Linear[linear3]/linear_0" [id=14, type=linear];
+"15 linear2.weight" [id=15, type=nncf_model_const];
+"16 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" [id=16, type=abs];
+"17 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" [id=17, type=le];
+"18 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" [id=18, type=masked_fill];
+"19 ThreeLinearModel/Linear[linear2]/linear_0" [id=19, type=linear];
+"20 /nncf_model_output_0" [id=20, type=nncf_model_output];
+"21 /nncf_model_output_1" [id=21, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "2 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"1 embedding.weight" -> "2 ThreeLinearModel/Embedding[embedding]/embedding_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "5 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/abs_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "7 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "16 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0";
+"2 ThreeLinearModel/Embedding[embedding]/embedding_0" -> "18 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"3 linear1.weight" -> "8 ThreeLinearModel/Linear[linear1]/linear_0";
+"4 linear1.bias" -> "8 ThreeLinearModel/Linear[linear1]/linear_0";
+"5 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/abs_0" -> "6 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/le_0";
+"6 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/le_0" -> "7 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0";
+"7 ThreeLinearModel/Linear[linear1]/ActivationsSparsifier/masked_fill_0" -> "8 ThreeLinearModel/Linear[linear1]/linear_0";
+"8 ThreeLinearModel/Linear[linear1]/linear_0" -> "11 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0";
+"8 ThreeLinearModel/Linear[linear1]/linear_0" -> "13 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"9 linear3.weight" -> "14 ThreeLinearModel/Linear[linear3]/linear_0";
+"10 linear3.bias" -> "14 ThreeLinearModel/Linear[linear3]/linear_0";
+"11 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/abs_0" -> "12 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0";
+"12 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/le_0" -> "13 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0";
+"13 ThreeLinearModel/Linear[linear3]/ActivationsSparsifier/masked_fill_0" -> "14 ThreeLinearModel/Linear[linear3]/linear_0";
+"14 ThreeLinearModel/Linear[linear3]/linear_0" -> "20 /nncf_model_output_0";
+"15 linear2.weight" -> "19 ThreeLinearModel/Linear[linear2]/linear_0";
+"16 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/abs_0" -> "17 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0";
+"17 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/le_0" -> "18 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0";
+"18 ThreeLinearModel/Linear[linear2]/ActivationsSparsifier/masked_fill_0" -> "19 ThreeLinearModel/Linear[linear2]/linear_0";
+"19 ThreeLinearModel/Linear[linear2]/linear_0" -> "21 /nncf_model_output_1";
+}
diff --git a/tests/torch/data/reference_graphs/fx/extracted/ConvolutionWithAllConstantInputsModel.dot b/tests/torch/data/reference_graphs/fx/extracted/ConvolutionWithAllConstantInputsModel.dot
new file mode 100644
index 00000000000..0cfbbf5840b
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/extracted/ConvolutionWithAllConstantInputsModel.dot
@@ -0,0 +1,11 @@
+strict digraph {
+"0 _conv_w" [id=0, type=get_attr];
+"1 add" [id=1, type=add];
+"2 placeholder_graph_node" [id=2, type=input];
+"3 conv2d" [id=3, type=conv2d];
+"4 output" [id=4, type=output];
+"0 _conv_w" -> "1 add";
+"1 add" -> "3 conv2d";
+"2 placeholder_graph_node" -> "3 conv2d";
+"3 conv2d" -> "4 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/extracted/ConvolutionWithNotTensorBiasModel.dot b/tests/torch/data/reference_graphs/fx/extracted/ConvolutionWithNotTensorBiasModel.dot
new file mode 100644
index 00000000000..47edd99d8c9
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/extracted/ConvolutionWithNotTensorBiasModel.dot
@@ -0,0 +1,11 @@
+strict digraph {
+"0 _conv_w" [id=0, type=get_attr];
+"1 add" [id=1, type=add];
+"2 arg0_1" [id=2, type=input];
+"3 conv2d" [id=3, type=conv2d];
+"4 output" [id=4, type=output];
+"0 _conv_w" -> "1 add";
+"1 add" -> "3 conv2d";
+"2 arg0_1" -> "3 conv2d";
+"3 conv2d" -> "4 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/mobilenet_v3_small.dot b/tests/torch/data/reference_graphs/fx/mobilenet_v3_small.dot
new file mode 100644
index 00000000000..449076359ce
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/mobilenet_v3_small.dot
@@ -0,0 +1,992 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 _param_constant0" [id=1, type=get_attr];
+"2 conv2d" [id=2, type=conv2d];
+"3 empty" [id=3, type=empty];
+"4 _param_constant1" [id=4, type=get_attr];
+"5 _param_constant2" [id=5, type=get_attr];
+"6 _tensor_constant0" [id=6, type=get_attr];
+"7 _tensor_constant1" [id=7, type=get_attr];
+"8 _native_batch_norm_legit_no_training" [id=8, type=_native_batch_norm_legit_no_training];
+"9 getitem" [id=9, type=__getitem__];
+"10 getitem_1" [id=10, type=__getitem__];
+"11 getitem_2" [id=11, type=__getitem__];
+"12 hardswish_" [id=12, type=hardswish_];
+"13 _param_constant3" [id=13, type=get_attr];
+"14 conv2d_1" [id=14, type=conv2d];
+"15 empty_1" [id=15, type=empty];
+"16 _param_constant4" [id=16, type=get_attr];
+"17 _param_constant5" [id=17, type=get_attr];
+"18 _tensor_constant2" [id=18, type=get_attr];
+"19 _tensor_constant3" [id=19, type=get_attr];
+"20 _native_batch_norm_legit_no_training_1" [id=20, type=_native_batch_norm_legit_no_training];
+"21 getitem_3" [id=21, type=__getitem__];
+"22 getitem_4" [id=22, type=__getitem__];
+"23 getitem_5" [id=23, type=__getitem__];
+"24 relu_" [id=24, type=relu_];
+"25 adaptive_avg_pool2d" [id=25, type=adaptive_avg_pool2d];
+"26 _param_constant6" [id=26, type=get_attr];
+"27 _param_constant7" [id=27, type=get_attr];
+"28 conv2d_2" [id=28, type=conv2d];
+"29 relu" [id=29, type=relu];
+"30 _param_constant8" [id=30, type=get_attr];
+"31 _param_constant9" [id=31, type=get_attr];
+"32 conv2d_3" [id=32, type=conv2d];
+"33 hardsigmoid" [id=33, type=hardsigmoid];
+"34 mul" [id=34, type=mul];
+"35 _param_constant10" [id=35, type=get_attr];
+"36 conv2d_4" [id=36, type=conv2d];
+"37 empty_2" [id=37, type=empty];
+"38 _param_constant11" [id=38, type=get_attr];
+"39 _param_constant12" [id=39, type=get_attr];
+"40 _tensor_constant4" [id=40, type=get_attr];
+"41 _tensor_constant5" [id=41, type=get_attr];
+"42 _native_batch_norm_legit_no_training_2" [id=42, type=_native_batch_norm_legit_no_training];
+"43 getitem_6" [id=43, type=__getitem__];
+"44 getitem_7" [id=44, type=__getitem__];
+"45 getitem_8" [id=45, type=__getitem__];
+"46 _param_constant13" [id=46, type=get_attr];
+"47 conv2d_5" [id=47, type=conv2d];
+"48 empty_3" [id=48, type=empty];
+"49 _param_constant14" [id=49, type=get_attr];
+"50 _param_constant15" [id=50, type=get_attr];
+"51 _tensor_constant6" [id=51, type=get_attr];
+"52 _tensor_constant7" [id=52, type=get_attr];
+"53 _native_batch_norm_legit_no_training_3" [id=53, type=_native_batch_norm_legit_no_training];
+"54 getitem_9" [id=54, type=__getitem__];
+"55 getitem_10" [id=55, type=__getitem__];
+"56 getitem_11" [id=56, type=__getitem__];
+"57 relu__1" [id=57, type=relu_];
+"58 _param_constant16" [id=58, type=get_attr];
+"59 conv2d_6" [id=59, type=conv2d];
+"60 empty_4" [id=60, type=empty];
+"61 _param_constant17" [id=61, type=get_attr];
+"62 _param_constant18" [id=62, type=get_attr];
+"63 _tensor_constant8" [id=63, type=get_attr];
+"64 _tensor_constant9" [id=64, type=get_attr];
+"65 _native_batch_norm_legit_no_training_4" [id=65, type=_native_batch_norm_legit_no_training];
+"66 getitem_12" [id=66, type=__getitem__];
+"67 getitem_13" [id=67, type=__getitem__];
+"68 getitem_14" [id=68, type=__getitem__];
+"69 relu__2" [id=69, type=relu_];
+"70 _param_constant19" [id=70, type=get_attr];
+"71 conv2d_7" [id=71, type=conv2d];
+"72 empty_5" [id=72, type=empty];
+"73 _param_constant20" [id=73, type=get_attr];
+"74 _param_constant21" [id=74, type=get_attr];
+"75 _tensor_constant10" [id=75, type=get_attr];
+"76 _tensor_constant11" [id=76, type=get_attr];
+"77 _native_batch_norm_legit_no_training_5" [id=77, type=_native_batch_norm_legit_no_training];
+"78 getitem_15" [id=78, type=__getitem__];
+"79 getitem_16" [id=79, type=__getitem__];
+"80 getitem_17" [id=80, type=__getitem__];
+"81 _param_constant22" [id=81, type=get_attr];
+"82 conv2d_8" [id=82, type=conv2d];
+"83 empty_6" [id=83, type=empty];
+"84 _param_constant23" [id=84, type=get_attr];
+"85 _param_constant24" [id=85, type=get_attr];
+"86 _tensor_constant12" [id=86, type=get_attr];
+"87 _tensor_constant13" [id=87, type=get_attr];
+"88 _native_batch_norm_legit_no_training_6" [id=88, type=_native_batch_norm_legit_no_training];
+"89 getitem_18" [id=89, type=__getitem__];
+"90 getitem_19" [id=90, type=__getitem__];
+"91 getitem_20" [id=91, type=__getitem__];
+"92 relu__3" [id=92, type=relu_];
+"93 _param_constant25" [id=93, type=get_attr];
+"94 conv2d_9" [id=94, type=conv2d];
+"95 empty_7" [id=95, type=empty];
+"96 _param_constant26" [id=96, type=get_attr];
+"97 _param_constant27" [id=97, type=get_attr];
+"98 _tensor_constant14" [id=98, type=get_attr];
+"99 _tensor_constant15" [id=99, type=get_attr];
+"100 _native_batch_norm_legit_no_training_7" [id=100, type=_native_batch_norm_legit_no_training];
+"101 getitem_21" [id=101, type=__getitem__];
+"102 getitem_22" [id=102, type=__getitem__];
+"103 getitem_23" [id=103, type=__getitem__];
+"104 relu__4" [id=104, type=relu_];
+"105 _param_constant28" [id=105, type=get_attr];
+"106 conv2d_10" [id=106, type=conv2d];
+"107 empty_8" [id=107, type=empty];
+"108 _param_constant29" [id=108, type=get_attr];
+"109 _param_constant30" [id=109, type=get_attr];
+"110 _tensor_constant16" [id=110, type=get_attr];
+"111 _tensor_constant17" [id=111, type=get_attr];
+"112 _native_batch_norm_legit_no_training_8" [id=112, type=_native_batch_norm_legit_no_training];
+"113 getitem_24" [id=113, type=__getitem__];
+"114 getitem_25" [id=114, type=__getitem__];
+"115 getitem_26" [id=115, type=__getitem__];
+"116 add_" [id=116, type=add_];
+"117 _param_constant31" [id=117, type=get_attr];
+"118 conv2d_11" [id=118, type=conv2d];
+"119 empty_9" [id=119, type=empty];
+"120 _param_constant32" [id=120, type=get_attr];
+"121 _param_constant33" [id=121, type=get_attr];
+"122 _tensor_constant18" [id=122, type=get_attr];
+"123 _tensor_constant19" [id=123, type=get_attr];
+"124 _native_batch_norm_legit_no_training_9" [id=124, type=_native_batch_norm_legit_no_training];
+"125 getitem_27" [id=125, type=__getitem__];
+"126 getitem_28" [id=126, type=__getitem__];
+"127 getitem_29" [id=127, type=__getitem__];
+"128 hardswish__1" [id=128, type=hardswish_];
+"129 _param_constant34" [id=129, type=get_attr];
+"130 conv2d_12" [id=130, type=conv2d];
+"131 empty_10" [id=131, type=empty];
+"132 _param_constant35" [id=132, type=get_attr];
+"133 _param_constant36" [id=133, type=get_attr];
+"134 _tensor_constant20" [id=134, type=get_attr];
+"135 _tensor_constant21" [id=135, type=get_attr];
+"136 _native_batch_norm_legit_no_training_10" [id=136, type=_native_batch_norm_legit_no_training];
+"137 getitem_30" [id=137, type=__getitem__];
+"138 getitem_31" [id=138, type=__getitem__];
+"139 getitem_32" [id=139, type=__getitem__];
+"140 hardswish__2" [id=140, type=hardswish_];
+"141 adaptive_avg_pool2d_1" [id=141, type=adaptive_avg_pool2d];
+"142 _param_constant37" [id=142, type=get_attr];
+"143 _param_constant38" [id=143, type=get_attr];
+"144 conv2d_13" [id=144, type=conv2d];
+"145 relu_1" [id=145, type=relu];
+"146 _param_constant39" [id=146, type=get_attr];
+"147 _param_constant40" [id=147, type=get_attr];
+"148 conv2d_14" [id=148, type=conv2d];
+"149 hardsigmoid_1" [id=149, type=hardsigmoid];
+"150 mul_1" [id=150, type=mul];
+"151 _param_constant41" [id=151, type=get_attr];
+"152 conv2d_15" [id=152, type=conv2d];
+"153 empty_11" [id=153, type=empty];
+"154 _param_constant42" [id=154, type=get_attr];
+"155 _param_constant43" [id=155, type=get_attr];
+"156 _tensor_constant22" [id=156, type=get_attr];
+"157 _tensor_constant23" [id=157, type=get_attr];
+"158 _native_batch_norm_legit_no_training_11" [id=158, type=_native_batch_norm_legit_no_training];
+"159 getitem_33" [id=159, type=__getitem__];
+"160 getitem_34" [id=160, type=__getitem__];
+"161 getitem_35" [id=161, type=__getitem__];
+"162 _param_constant44" [id=162, type=get_attr];
+"163 conv2d_16" [id=163, type=conv2d];
+"164 empty_12" [id=164, type=empty];
+"165 _param_constant45" [id=165, type=get_attr];
+"166 _param_constant46" [id=166, type=get_attr];
+"167 _tensor_constant24" [id=167, type=get_attr];
+"168 _tensor_constant25" [id=168, type=get_attr];
+"169 _native_batch_norm_legit_no_training_12" [id=169, type=_native_batch_norm_legit_no_training];
+"170 getitem_36" [id=170, type=__getitem__];
+"171 getitem_37" [id=171, type=__getitem__];
+"172 getitem_38" [id=172, type=__getitem__];
+"173 hardswish__3" [id=173, type=hardswish_];
+"174 _param_constant47" [id=174, type=get_attr];
+"175 conv2d_17" [id=175, type=conv2d];
+"176 empty_13" [id=176, type=empty];
+"177 _param_constant48" [id=177, type=get_attr];
+"178 _param_constant49" [id=178, type=get_attr];
+"179 _tensor_constant26" [id=179, type=get_attr];
+"180 _tensor_constant27" [id=180, type=get_attr];
+"181 _native_batch_norm_legit_no_training_13" [id=181, type=_native_batch_norm_legit_no_training];
+"182 getitem_39" [id=182, type=__getitem__];
+"183 getitem_40" [id=183, type=__getitem__];
+"184 getitem_41" [id=184, type=__getitem__];
+"185 hardswish__4" [id=185, type=hardswish_];
+"186 adaptive_avg_pool2d_2" [id=186, type=adaptive_avg_pool2d];
+"187 _param_constant50" [id=187, type=get_attr];
+"188 _param_constant51" [id=188, type=get_attr];
+"189 conv2d_18" [id=189, type=conv2d];
+"190 relu_2" [id=190, type=relu];
+"191 _param_constant52" [id=191, type=get_attr];
+"192 _param_constant53" [id=192, type=get_attr];
+"193 conv2d_19" [id=193, type=conv2d];
+"194 hardsigmoid_2" [id=194, type=hardsigmoid];
+"195 mul_2" [id=195, type=mul];
+"196 _param_constant54" [id=196, type=get_attr];
+"197 conv2d_20" [id=197, type=conv2d];
+"198 empty_14" [id=198, type=empty];
+"199 _param_constant55" [id=199, type=get_attr];
+"200 _param_constant56" [id=200, type=get_attr];
+"201 _tensor_constant28" [id=201, type=get_attr];
+"202 _tensor_constant29" [id=202, type=get_attr];
+"203 _native_batch_norm_legit_no_training_14" [id=203, type=_native_batch_norm_legit_no_training];
+"204 getitem_42" [id=204, type=__getitem__];
+"205 getitem_43" [id=205, type=__getitem__];
+"206 getitem_44" [id=206, type=__getitem__];
+"207 add__1" [id=207, type=add_];
+"208 _param_constant57" [id=208, type=get_attr];
+"209 conv2d_21" [id=209, type=conv2d];
+"210 empty_15" [id=210, type=empty];
+"211 _param_constant58" [id=211, type=get_attr];
+"212 _param_constant59" [id=212, type=get_attr];
+"213 _tensor_constant30" [id=213, type=get_attr];
+"214 _tensor_constant31" [id=214, type=get_attr];
+"215 _native_batch_norm_legit_no_training_15" [id=215, type=_native_batch_norm_legit_no_training];
+"216 getitem_45" [id=216, type=__getitem__];
+"217 getitem_46" [id=217, type=__getitem__];
+"218 getitem_47" [id=218, type=__getitem__];
+"219 hardswish__5" [id=219, type=hardswish_];
+"220 _param_constant60" [id=220, type=get_attr];
+"221 conv2d_22" [id=221, type=conv2d];
+"222 empty_16" [id=222, type=empty];
+"223 _param_constant61" [id=223, type=get_attr];
+"224 _param_constant62" [id=224, type=get_attr];
+"225 _tensor_constant32" [id=225, type=get_attr];
+"226 _tensor_constant33" [id=226, type=get_attr];
+"227 _native_batch_norm_legit_no_training_16" [id=227, type=_native_batch_norm_legit_no_training];
+"228 getitem_48" [id=228, type=__getitem__];
+"229 getitem_49" [id=229, type=__getitem__];
+"230 getitem_50" [id=230, type=__getitem__];
+"231 hardswish__6" [id=231, type=hardswish_];
+"232 adaptive_avg_pool2d_3" [id=232, type=adaptive_avg_pool2d];
+"233 _param_constant63" [id=233, type=get_attr];
+"234 _param_constant64" [id=234, type=get_attr];
+"235 conv2d_23" [id=235, type=conv2d];
+"236 relu_3" [id=236, type=relu];
+"237 _param_constant65" [id=237, type=get_attr];
+"238 _param_constant66" [id=238, type=get_attr];
+"239 conv2d_24" [id=239, type=conv2d];
+"240 hardsigmoid_3" [id=240, type=hardsigmoid];
+"241 mul_3" [id=241, type=mul];
+"242 _param_constant67" [id=242, type=get_attr];
+"243 conv2d_25" [id=243, type=conv2d];
+"244 empty_17" [id=244, type=empty];
+"245 _param_constant68" [id=245, type=get_attr];
+"246 _param_constant69" [id=246, type=get_attr];
+"247 _tensor_constant34" [id=247, type=get_attr];
+"248 _tensor_constant35" [id=248, type=get_attr];
+"249 _native_batch_norm_legit_no_training_17" [id=249, type=_native_batch_norm_legit_no_training];
+"250 getitem_51" [id=250, type=__getitem__];
+"251 getitem_52" [id=251, type=__getitem__];
+"252 getitem_53" [id=252, type=__getitem__];
+"253 add__2" [id=253, type=add_];
+"254 _param_constant70" [id=254, type=get_attr];
+"255 conv2d_26" [id=255, type=conv2d];
+"256 empty_18" [id=256, type=empty];
+"257 _param_constant71" [id=257, type=get_attr];
+"258 _param_constant72" [id=258, type=get_attr];
+"259 _tensor_constant36" [id=259, type=get_attr];
+"260 _tensor_constant37" [id=260, type=get_attr];
+"261 _native_batch_norm_legit_no_training_18" [id=261, type=_native_batch_norm_legit_no_training];
+"262 getitem_54" [id=262, type=__getitem__];
+"263 getitem_55" [id=263, type=__getitem__];
+"264 getitem_56" [id=264, type=__getitem__];
+"265 hardswish__7" [id=265, type=hardswish_];
+"266 _param_constant73" [id=266, type=get_attr];
+"267 conv2d_27" [id=267, type=conv2d];
+"268 empty_19" [id=268, type=empty];
+"269 _param_constant74" [id=269, type=get_attr];
+"270 _param_constant75" [id=270, type=get_attr];
+"271 _tensor_constant38" [id=271, type=get_attr];
+"272 _tensor_constant39" [id=272, type=get_attr];
+"273 _native_batch_norm_legit_no_training_19" [id=273, type=_native_batch_norm_legit_no_training];
+"274 getitem_57" [id=274, type=__getitem__];
+"275 getitem_58" [id=275, type=__getitem__];
+"276 getitem_59" [id=276, type=__getitem__];
+"277 hardswish__8" [id=277, type=hardswish_];
+"278 adaptive_avg_pool2d_4" [id=278, type=adaptive_avg_pool2d];
+"279 _param_constant76" [id=279, type=get_attr];
+"280 _param_constant77" [id=280, type=get_attr];
+"281 conv2d_28" [id=281, type=conv2d];
+"282 relu_4" [id=282, type=relu];
+"283 _param_constant78" [id=283, type=get_attr];
+"284 _param_constant79" [id=284, type=get_attr];
+"285 conv2d_29" [id=285, type=conv2d];
+"286 hardsigmoid_4" [id=286, type=hardsigmoid];
+"287 mul_4" [id=287, type=mul];
+"288 _param_constant80" [id=288, type=get_attr];
+"289 conv2d_30" [id=289, type=conv2d];
+"290 empty_20" [id=290, type=empty];
+"291 _param_constant81" [id=291, type=get_attr];
+"292 _param_constant82" [id=292, type=get_attr];
+"293 _tensor_constant40" [id=293, type=get_attr];
+"294 _tensor_constant41" [id=294, type=get_attr];
+"295 _native_batch_norm_legit_no_training_20" [id=295, type=_native_batch_norm_legit_no_training];
+"296 getitem_60" [id=296, type=__getitem__];
+"297 getitem_61" [id=297, type=__getitem__];
+"298 getitem_62" [id=298, type=__getitem__];
+"299 _param_constant83" [id=299, type=get_attr];
+"300 conv2d_31" [id=300, type=conv2d];
+"301 empty_21" [id=301, type=empty];
+"302 _param_constant84" [id=302, type=get_attr];
+"303 _param_constant85" [id=303, type=get_attr];
+"304 _tensor_constant42" [id=304, type=get_attr];
+"305 _tensor_constant43" [id=305, type=get_attr];
+"306 _native_batch_norm_legit_no_training_21" [id=306, type=_native_batch_norm_legit_no_training];
+"307 getitem_63" [id=307, type=__getitem__];
+"308 getitem_64" [id=308, type=__getitem__];
+"309 getitem_65" [id=309, type=__getitem__];
+"310 hardswish__9" [id=310, type=hardswish_];
+"311 _param_constant86" [id=311, type=get_attr];
+"312 conv2d_32" [id=312, type=conv2d];
+"313 empty_22" [id=313, type=empty];
+"314 _param_constant87" [id=314, type=get_attr];
+"315 _param_constant88" [id=315, type=get_attr];
+"316 _tensor_constant44" [id=316, type=get_attr];
+"317 _tensor_constant45" [id=317, type=get_attr];
+"318 _native_batch_norm_legit_no_training_22" [id=318, type=_native_batch_norm_legit_no_training];
+"319 getitem_66" [id=319, type=__getitem__];
+"320 getitem_67" [id=320, type=__getitem__];
+"321 getitem_68" [id=321, type=__getitem__];
+"322 hardswish__10" [id=322, type=hardswish_];
+"323 adaptive_avg_pool2d_5" [id=323, type=adaptive_avg_pool2d];
+"324 _param_constant89" [id=324, type=get_attr];
+"325 _param_constant90" [id=325, type=get_attr];
+"326 conv2d_33" [id=326, type=conv2d];
+"327 relu_5" [id=327, type=relu];
+"328 _param_constant91" [id=328, type=get_attr];
+"329 _param_constant92" [id=329, type=get_attr];
+"330 conv2d_34" [id=330, type=conv2d];
+"331 hardsigmoid_5" [id=331, type=hardsigmoid];
+"332 mul_5" [id=332, type=mul];
+"333 _param_constant93" [id=333, type=get_attr];
+"334 conv2d_35" [id=334, type=conv2d];
+"335 empty_23" [id=335, type=empty];
+"336 _param_constant94" [id=336, type=get_attr];
+"337 _param_constant95" [id=337, type=get_attr];
+"338 _tensor_constant46" [id=338, type=get_attr];
+"339 _tensor_constant47" [id=339, type=get_attr];
+"340 _native_batch_norm_legit_no_training_23" [id=340, type=_native_batch_norm_legit_no_training];
+"341 getitem_69" [id=341, type=__getitem__];
+"342 getitem_70" [id=342, type=__getitem__];
+"343 getitem_71" [id=343, type=__getitem__];
+"344 add__3" [id=344, type=add_];
+"345 _param_constant96" [id=345, type=get_attr];
+"346 conv2d_36" [id=346, type=conv2d];
+"347 empty_24" [id=347, type=empty];
+"348 _param_constant97" [id=348, type=get_attr];
+"349 _param_constant98" [id=349, type=get_attr];
+"350 _tensor_constant48" [id=350, type=get_attr];
+"351 _tensor_constant49" [id=351, type=get_attr];
+"352 _native_batch_norm_legit_no_training_24" [id=352, type=_native_batch_norm_legit_no_training];
+"353 getitem_72" [id=353, type=__getitem__];
+"354 getitem_73" [id=354, type=__getitem__];
+"355 getitem_74" [id=355, type=__getitem__];
+"356 hardswish__11" [id=356, type=hardswish_];
+"357 _param_constant99" [id=357, type=get_attr];
+"358 conv2d_37" [id=358, type=conv2d];
+"359 empty_25" [id=359, type=empty];
+"360 _param_constant100" [id=360, type=get_attr];
+"361 _param_constant101" [id=361, type=get_attr];
+"362 _tensor_constant50" [id=362, type=get_attr];
+"363 _tensor_constant51" [id=363, type=get_attr];
+"364 _native_batch_norm_legit_no_training_25" [id=364, type=_native_batch_norm_legit_no_training];
+"365 getitem_75" [id=365, type=__getitem__];
+"366 getitem_76" [id=366, type=__getitem__];
+"367 getitem_77" [id=367, type=__getitem__];
+"368 hardswish__12" [id=368, type=hardswish_];
+"369 adaptive_avg_pool2d_6" [id=369, type=adaptive_avg_pool2d];
+"370 _param_constant102" [id=370, type=get_attr];
+"371 _param_constant103" [id=371, type=get_attr];
+"372 conv2d_38" [id=372, type=conv2d];
+"373 relu_6" [id=373, type=relu];
+"374 _param_constant104" [id=374, type=get_attr];
+"375 _param_constant105" [id=375, type=get_attr];
+"376 conv2d_39" [id=376, type=conv2d];
+"377 hardsigmoid_6" [id=377, type=hardsigmoid];
+"378 mul_6" [id=378, type=mul];
+"379 _param_constant106" [id=379, type=get_attr];
+"380 conv2d_40" [id=380, type=conv2d];
+"381 empty_26" [id=381, type=empty];
+"382 _param_constant107" [id=382, type=get_attr];
+"383 _param_constant108" [id=383, type=get_attr];
+"384 _tensor_constant52" [id=384, type=get_attr];
+"385 _tensor_constant53" [id=385, type=get_attr];
+"386 _native_batch_norm_legit_no_training_26" [id=386, type=_native_batch_norm_legit_no_training];
+"387 getitem_78" [id=387, type=__getitem__];
+"388 getitem_79" [id=388, type=__getitem__];
+"389 getitem_80" [id=389, type=__getitem__];
+"390 _param_constant109" [id=390, type=get_attr];
+"391 conv2d_41" [id=391, type=conv2d];
+"392 empty_27" [id=392, type=empty];
+"393 _param_constant110" [id=393, type=get_attr];
+"394 _param_constant111" [id=394, type=get_attr];
+"395 _tensor_constant54" [id=395, type=get_attr];
+"396 _tensor_constant55" [id=396, type=get_attr];
+"397 _native_batch_norm_legit_no_training_27" [id=397, type=_native_batch_norm_legit_no_training];
+"398 getitem_81" [id=398, type=__getitem__];
+"399 getitem_82" [id=399, type=__getitem__];
+"400 getitem_83" [id=400, type=__getitem__];
+"401 hardswish__13" [id=401, type=hardswish_];
+"402 _param_constant112" [id=402, type=get_attr];
+"403 conv2d_42" [id=403, type=conv2d];
+"404 empty_28" [id=404, type=empty];
+"405 _param_constant113" [id=405, type=get_attr];
+"406 _param_constant114" [id=406, type=get_attr];
+"407 _tensor_constant56" [id=407, type=get_attr];
+"408 _tensor_constant57" [id=408, type=get_attr];
+"409 _native_batch_norm_legit_no_training_28" [id=409, type=_native_batch_norm_legit_no_training];
+"410 getitem_84" [id=410, type=__getitem__];
+"411 getitem_85" [id=411, type=__getitem__];
+"412 getitem_86" [id=412, type=__getitem__];
+"413 hardswish__14" [id=413, type=hardswish_];
+"414 adaptive_avg_pool2d_7" [id=414, type=adaptive_avg_pool2d];
+"415 _param_constant115" [id=415, type=get_attr];
+"416 _param_constant116" [id=416, type=get_attr];
+"417 conv2d_43" [id=417, type=conv2d];
+"418 relu_7" [id=418, type=relu];
+"419 _param_constant117" [id=419, type=get_attr];
+"420 _param_constant118" [id=420, type=get_attr];
+"421 conv2d_44" [id=421, type=conv2d];
+"422 hardsigmoid_7" [id=422, type=hardsigmoid];
+"423 mul_7" [id=423, type=mul];
+"424 _param_constant119" [id=424, type=get_attr];
+"425 conv2d_45" [id=425, type=conv2d];
+"426 empty_29" [id=426, type=empty];
+"427 _param_constant120" [id=427, type=get_attr];
+"428 _param_constant121" [id=428, type=get_attr];
+"429 _tensor_constant58" [id=429, type=get_attr];
+"430 _tensor_constant59" [id=430, type=get_attr];
+"431 _native_batch_norm_legit_no_training_29" [id=431, type=_native_batch_norm_legit_no_training];
+"432 getitem_87" [id=432, type=__getitem__];
+"433 getitem_88" [id=433, type=__getitem__];
+"434 getitem_89" [id=434, type=__getitem__];
+"435 add__4" [id=435, type=add_];
+"436 _param_constant122" [id=436, type=get_attr];
+"437 conv2d_46" [id=437, type=conv2d];
+"438 empty_30" [id=438, type=empty];
+"439 _param_constant123" [id=439, type=get_attr];
+"440 _param_constant124" [id=440, type=get_attr];
+"441 _tensor_constant60" [id=441, type=get_attr];
+"442 _tensor_constant61" [id=442, type=get_attr];
+"443 _native_batch_norm_legit_no_training_30" [id=443, type=_native_batch_norm_legit_no_training];
+"444 getitem_90" [id=444, type=__getitem__];
+"445 getitem_91" [id=445, type=__getitem__];
+"446 getitem_92" [id=446, type=__getitem__];
+"447 hardswish__15" [id=447, type=hardswish_];
+"448 _param_constant125" [id=448, type=get_attr];
+"449 conv2d_47" [id=449, type=conv2d];
+"450 empty_31" [id=450, type=empty];
+"451 _param_constant126" [id=451, type=get_attr];
+"452 _param_constant127" [id=452, type=get_attr];
+"453 _tensor_constant62" [id=453, type=get_attr];
+"454 _tensor_constant63" [id=454, type=get_attr];
+"455 _native_batch_norm_legit_no_training_31" [id=455, type=_native_batch_norm_legit_no_training];
+"456 getitem_93" [id=456, type=__getitem__];
+"457 getitem_94" [id=457, type=__getitem__];
+"458 getitem_95" [id=458, type=__getitem__];
+"459 hardswish__16" [id=459, type=hardswish_];
+"460 adaptive_avg_pool2d_8" [id=460, type=adaptive_avg_pool2d];
+"461 _param_constant128" [id=461, type=get_attr];
+"462 _param_constant129" [id=462, type=get_attr];
+"463 conv2d_48" [id=463, type=conv2d];
+"464 relu_8" [id=464, type=relu];
+"465 _param_constant130" [id=465, type=get_attr];
+"466 _param_constant131" [id=466, type=get_attr];
+"467 conv2d_49" [id=467, type=conv2d];
+"468 hardsigmoid_8" [id=468, type=hardsigmoid];
+"469 mul_8" [id=469, type=mul];
+"470 _param_constant132" [id=470, type=get_attr];
+"471 conv2d_50" [id=471, type=conv2d];
+"472 empty_32" [id=472, type=empty];
+"473 _param_constant133" [id=473, type=get_attr];
+"474 _param_constant134" [id=474, type=get_attr];
+"475 _tensor_constant64" [id=475, type=get_attr];
+"476 _tensor_constant65" [id=476, type=get_attr];
+"477 _native_batch_norm_legit_no_training_32" [id=477, type=_native_batch_norm_legit_no_training];
+"478 getitem_96" [id=478, type=__getitem__];
+"479 getitem_97" [id=479, type=__getitem__];
+"480 getitem_98" [id=480, type=__getitem__];
+"481 add__5" [id=481, type=add_];
+"482 _param_constant135" [id=482, type=get_attr];
+"483 conv2d_51" [id=483, type=conv2d];
+"484 empty_33" [id=484, type=empty];
+"485 _param_constant136" [id=485, type=get_attr];
+"486 _param_constant137" [id=486, type=get_attr];
+"487 _tensor_constant66" [id=487, type=get_attr];
+"488 _tensor_constant67" [id=488, type=get_attr];
+"489 _native_batch_norm_legit_no_training_33" [id=489, type=_native_batch_norm_legit_no_training];
+"490 getitem_99" [id=490, type=__getitem__];
+"491 getitem_100" [id=491, type=__getitem__];
+"492 getitem_101" [id=492, type=__getitem__];
+"493 hardswish__17" [id=493, type=hardswish_];
+"494 adaptive_avg_pool2d_9" [id=494, type=adaptive_avg_pool2d];
+"495 flatten" [id=495, type=flatten];
+"496 _param_constant138" [id=496, type=get_attr];
+"497 _param_constant139" [id=497, type=get_attr];
+"498 linear" [id=498, type=linear];
+"499 hardswish__18" [id=499, type=hardswish_];
+"500 dropout_" [id=500, type=dropout_];
+"501 _param_constant140" [id=501, type=get_attr];
+"502 _param_constant141" [id=502, type=get_attr];
+"503 linear_1" [id=503, type=linear];
+"504 output" [id=504, type=output];
+"0 arg0_1" -> "2 conv2d";
+"1 _param_constant0" -> "2 conv2d";
+"2 conv2d" -> "8 _native_batch_norm_legit_no_training";
+"4 _param_constant1" -> "8 _native_batch_norm_legit_no_training";
+"5 _param_constant2" -> "8 _native_batch_norm_legit_no_training";
+"6 _tensor_constant0" -> "8 _native_batch_norm_legit_no_training";
+"7 _tensor_constant1" -> "8 _native_batch_norm_legit_no_training";
+"8 _native_batch_norm_legit_no_training" -> "9 getitem";
+"8 _native_batch_norm_legit_no_training" -> "10 getitem_1";
+"8 _native_batch_norm_legit_no_training" -> "11 getitem_2";
+"9 getitem" -> "12 hardswish_";
+"12 hardswish_" -> "14 conv2d_1";
+"13 _param_constant3" -> "14 conv2d_1";
+"14 conv2d_1" -> "20 _native_batch_norm_legit_no_training_1";
+"16 _param_constant4" -> "20 _native_batch_norm_legit_no_training_1";
+"17 _param_constant5" -> "20 _native_batch_norm_legit_no_training_1";
+"18 _tensor_constant2" -> "20 _native_batch_norm_legit_no_training_1";
+"19 _tensor_constant3" -> "20 _native_batch_norm_legit_no_training_1";
+"20 _native_batch_norm_legit_no_training_1" -> "21 getitem_3";
+"20 _native_batch_norm_legit_no_training_1" -> "22 getitem_4";
+"20 _native_batch_norm_legit_no_training_1" -> "23 getitem_5";
+"21 getitem_3" -> "24 relu_";
+"24 relu_" -> "25 adaptive_avg_pool2d";
+"24 relu_" -> "34 mul";
+"25 adaptive_avg_pool2d" -> "28 conv2d_2";
+"26 _param_constant6" -> "28 conv2d_2";
+"27 _param_constant7" -> "28 conv2d_2";
+"28 conv2d_2" -> "29 relu";
+"29 relu" -> "32 conv2d_3";
+"30 _param_constant8" -> "32 conv2d_3";
+"31 _param_constant9" -> "32 conv2d_3";
+"32 conv2d_3" -> "33 hardsigmoid";
+"33 hardsigmoid" -> "34 mul";
+"34 mul" -> "36 conv2d_4";
+"35 _param_constant10" -> "36 conv2d_4";
+"36 conv2d_4" -> "42 _native_batch_norm_legit_no_training_2";
+"38 _param_constant11" -> "42 _native_batch_norm_legit_no_training_2";
+"39 _param_constant12" -> "42 _native_batch_norm_legit_no_training_2";
+"40 _tensor_constant4" -> "42 _native_batch_norm_legit_no_training_2";
+"41 _tensor_constant5" -> "42 _native_batch_norm_legit_no_training_2";
+"42 _native_batch_norm_legit_no_training_2" -> "43 getitem_6";
+"42 _native_batch_norm_legit_no_training_2" -> "44 getitem_7";
+"42 _native_batch_norm_legit_no_training_2" -> "45 getitem_8";
+"43 getitem_6" -> "47 conv2d_5";
+"46 _param_constant13" -> "47 conv2d_5";
+"47 conv2d_5" -> "53 _native_batch_norm_legit_no_training_3";
+"49 _param_constant14" -> "53 _native_batch_norm_legit_no_training_3";
+"50 _param_constant15" -> "53 _native_batch_norm_legit_no_training_3";
+"51 _tensor_constant6" -> "53 _native_batch_norm_legit_no_training_3";
+"52 _tensor_constant7" -> "53 _native_batch_norm_legit_no_training_3";
+"53 _native_batch_norm_legit_no_training_3" -> "54 getitem_9";
+"53 _native_batch_norm_legit_no_training_3" -> "55 getitem_10";
+"53 _native_batch_norm_legit_no_training_3" -> "56 getitem_11";
+"54 getitem_9" -> "57 relu__1";
+"57 relu__1" -> "59 conv2d_6";
+"58 _param_constant16" -> "59 conv2d_6";
+"59 conv2d_6" -> "65 _native_batch_norm_legit_no_training_4";
+"61 _param_constant17" -> "65 _native_batch_norm_legit_no_training_4";
+"62 _param_constant18" -> "65 _native_batch_norm_legit_no_training_4";
+"63 _tensor_constant8" -> "65 _native_batch_norm_legit_no_training_4";
+"64 _tensor_constant9" -> "65 _native_batch_norm_legit_no_training_4";
+"65 _native_batch_norm_legit_no_training_4" -> "66 getitem_12";
+"65 _native_batch_norm_legit_no_training_4" -> "67 getitem_13";
+"65 _native_batch_norm_legit_no_training_4" -> "68 getitem_14";
+"66 getitem_12" -> "69 relu__2";
+"69 relu__2" -> "71 conv2d_7";
+"70 _param_constant19" -> "71 conv2d_7";
+"71 conv2d_7" -> "77 _native_batch_norm_legit_no_training_5";
+"73 _param_constant20" -> "77 _native_batch_norm_legit_no_training_5";
+"74 _param_constant21" -> "77 _native_batch_norm_legit_no_training_5";
+"75 _tensor_constant10" -> "77 _native_batch_norm_legit_no_training_5";
+"76 _tensor_constant11" -> "77 _native_batch_norm_legit_no_training_5";
+"77 _native_batch_norm_legit_no_training_5" -> "78 getitem_15";
+"77 _native_batch_norm_legit_no_training_5" -> "79 getitem_16";
+"77 _native_batch_norm_legit_no_training_5" -> "80 getitem_17";
+"78 getitem_15" -> "82 conv2d_8";
+"78 getitem_15" -> "116 add_";
+"81 _param_constant22" -> "82 conv2d_8";
+"82 conv2d_8" -> "88 _native_batch_norm_legit_no_training_6";
+"84 _param_constant23" -> "88 _native_batch_norm_legit_no_training_6";
+"85 _param_constant24" -> "88 _native_batch_norm_legit_no_training_6";
+"86 _tensor_constant12" -> "88 _native_batch_norm_legit_no_training_6";
+"87 _tensor_constant13" -> "88 _native_batch_norm_legit_no_training_6";
+"88 _native_batch_norm_legit_no_training_6" -> "89 getitem_18";
+"88 _native_batch_norm_legit_no_training_6" -> "90 getitem_19";
+"88 _native_batch_norm_legit_no_training_6" -> "91 getitem_20";
+"89 getitem_18" -> "92 relu__3";
+"92 relu__3" -> "94 conv2d_9";
+"93 _param_constant25" -> "94 conv2d_9";
+"94 conv2d_9" -> "100 _native_batch_norm_legit_no_training_7";
+"96 _param_constant26" -> "100 _native_batch_norm_legit_no_training_7";
+"97 _param_constant27" -> "100 _native_batch_norm_legit_no_training_7";
+"98 _tensor_constant14" -> "100 _native_batch_norm_legit_no_training_7";
+"99 _tensor_constant15" -> "100 _native_batch_norm_legit_no_training_7";
+"100 _native_batch_norm_legit_no_training_7" -> "101 getitem_21";
+"100 _native_batch_norm_legit_no_training_7" -> "102 getitem_22";
+"100 _native_batch_norm_legit_no_training_7" -> "103 getitem_23";
+"101 getitem_21" -> "104 relu__4";
+"104 relu__4" -> "106 conv2d_10";
+"105 _param_constant28" -> "106 conv2d_10";
+"106 conv2d_10" -> "112 _native_batch_norm_legit_no_training_8";
+"108 _param_constant29" -> "112 _native_batch_norm_legit_no_training_8";
+"109 _param_constant30" -> "112 _native_batch_norm_legit_no_training_8";
+"110 _tensor_constant16" -> "112 _native_batch_norm_legit_no_training_8";
+"111 _tensor_constant17" -> "112 _native_batch_norm_legit_no_training_8";
+"112 _native_batch_norm_legit_no_training_8" -> "113 getitem_24";
+"112 _native_batch_norm_legit_no_training_8" -> "114 getitem_25";
+"112 _native_batch_norm_legit_no_training_8" -> "115 getitem_26";
+"113 getitem_24" -> "116 add_";
+"116 add_" -> "118 conv2d_11";
+"117 _param_constant31" -> "118 conv2d_11";
+"118 conv2d_11" -> "124 _native_batch_norm_legit_no_training_9";
+"120 _param_constant32" -> "124 _native_batch_norm_legit_no_training_9";
+"121 _param_constant33" -> "124 _native_batch_norm_legit_no_training_9";
+"122 _tensor_constant18" -> "124 _native_batch_norm_legit_no_training_9";
+"123 _tensor_constant19" -> "124 _native_batch_norm_legit_no_training_9";
+"124 _native_batch_norm_legit_no_training_9" -> "125 getitem_27";
+"124 _native_batch_norm_legit_no_training_9" -> "126 getitem_28";
+"124 _native_batch_norm_legit_no_training_9" -> "127 getitem_29";
+"125 getitem_27" -> "128 hardswish__1";
+"128 hardswish__1" -> "130 conv2d_12";
+"129 _param_constant34" -> "130 conv2d_12";
+"130 conv2d_12" -> "136 _native_batch_norm_legit_no_training_10";
+"132 _param_constant35" -> "136 _native_batch_norm_legit_no_training_10";
+"133 _param_constant36" -> "136 _native_batch_norm_legit_no_training_10";
+"134 _tensor_constant20" -> "136 _native_batch_norm_legit_no_training_10";
+"135 _tensor_constant21" -> "136 _native_batch_norm_legit_no_training_10";
+"136 _native_batch_norm_legit_no_training_10" -> "137 getitem_30";
+"136 _native_batch_norm_legit_no_training_10" -> "138 getitem_31";
+"136 _native_batch_norm_legit_no_training_10" -> "139 getitem_32";
+"137 getitem_30" -> "140 hardswish__2";
+"140 hardswish__2" -> "141 adaptive_avg_pool2d_1";
+"140 hardswish__2" -> "150 mul_1";
+"141 adaptive_avg_pool2d_1" -> "144 conv2d_13";
+"142 _param_constant37" -> "144 conv2d_13";
+"143 _param_constant38" -> "144 conv2d_13";
+"144 conv2d_13" -> "145 relu_1";
+"145 relu_1" -> "148 conv2d_14";
+"146 _param_constant39" -> "148 conv2d_14";
+"147 _param_constant40" -> "148 conv2d_14";
+"148 conv2d_14" -> "149 hardsigmoid_1";
+"149 hardsigmoid_1" -> "150 mul_1";
+"150 mul_1" -> "152 conv2d_15";
+"151 _param_constant41" -> "152 conv2d_15";
+"152 conv2d_15" -> "158 _native_batch_norm_legit_no_training_11";
+"154 _param_constant42" -> "158 _native_batch_norm_legit_no_training_11";
+"155 _param_constant43" -> "158 _native_batch_norm_legit_no_training_11";
+"156 _tensor_constant22" -> "158 _native_batch_norm_legit_no_training_11";
+"157 _tensor_constant23" -> "158 _native_batch_norm_legit_no_training_11";
+"158 _native_batch_norm_legit_no_training_11" -> "159 getitem_33";
+"158 _native_batch_norm_legit_no_training_11" -> "160 getitem_34";
+"158 _native_batch_norm_legit_no_training_11" -> "161 getitem_35";
+"159 getitem_33" -> "163 conv2d_16";
+"159 getitem_33" -> "207 add__1";
+"162 _param_constant44" -> "163 conv2d_16";
+"163 conv2d_16" -> "169 _native_batch_norm_legit_no_training_12";
+"165 _param_constant45" -> "169 _native_batch_norm_legit_no_training_12";
+"166 _param_constant46" -> "169 _native_batch_norm_legit_no_training_12";
+"167 _tensor_constant24" -> "169 _native_batch_norm_legit_no_training_12";
+"168 _tensor_constant25" -> "169 _native_batch_norm_legit_no_training_12";
+"169 _native_batch_norm_legit_no_training_12" -> "170 getitem_36";
+"169 _native_batch_norm_legit_no_training_12" -> "171 getitem_37";
+"169 _native_batch_norm_legit_no_training_12" -> "172 getitem_38";
+"170 getitem_36" -> "173 hardswish__3";
+"173 hardswish__3" -> "175 conv2d_17";
+"174 _param_constant47" -> "175 conv2d_17";
+"175 conv2d_17" -> "181 _native_batch_norm_legit_no_training_13";
+"177 _param_constant48" -> "181 _native_batch_norm_legit_no_training_13";
+"178 _param_constant49" -> "181 _native_batch_norm_legit_no_training_13";
+"179 _tensor_constant26" -> "181 _native_batch_norm_legit_no_training_13";
+"180 _tensor_constant27" -> "181 _native_batch_norm_legit_no_training_13";
+"181 _native_batch_norm_legit_no_training_13" -> "182 getitem_39";
+"181 _native_batch_norm_legit_no_training_13" -> "183 getitem_40";
+"181 _native_batch_norm_legit_no_training_13" -> "184 getitem_41";
+"182 getitem_39" -> "185 hardswish__4";
+"185 hardswish__4" -> "186 adaptive_avg_pool2d_2";
+"185 hardswish__4" -> "195 mul_2";
+"186 adaptive_avg_pool2d_2" -> "189 conv2d_18";
+"187 _param_constant50" -> "189 conv2d_18";
+"188 _param_constant51" -> "189 conv2d_18";
+"189 conv2d_18" -> "190 relu_2";
+"190 relu_2" -> "193 conv2d_19";
+"191 _param_constant52" -> "193 conv2d_19";
+"192 _param_constant53" -> "193 conv2d_19";
+"193 conv2d_19" -> "194 hardsigmoid_2";
+"194 hardsigmoid_2" -> "195 mul_2";
+"195 mul_2" -> "197 conv2d_20";
+"196 _param_constant54" -> "197 conv2d_20";
+"197 conv2d_20" -> "203 _native_batch_norm_legit_no_training_14";
+"199 _param_constant55" -> "203 _native_batch_norm_legit_no_training_14";
+"200 _param_constant56" -> "203 _native_batch_norm_legit_no_training_14";
+"201 _tensor_constant28" -> "203 _native_batch_norm_legit_no_training_14";
+"202 _tensor_constant29" -> "203 _native_batch_norm_legit_no_training_14";
+"203 _native_batch_norm_legit_no_training_14" -> "204 getitem_42";
+"203 _native_batch_norm_legit_no_training_14" -> "205 getitem_43";
+"203 _native_batch_norm_legit_no_training_14" -> "206 getitem_44";
+"204 getitem_42" -> "207 add__1";
+"207 add__1" -> "209 conv2d_21";
+"207 add__1" -> "253 add__2";
+"208 _param_constant57" -> "209 conv2d_21";
+"209 conv2d_21" -> "215 _native_batch_norm_legit_no_training_15";
+"211 _param_constant58" -> "215 _native_batch_norm_legit_no_training_15";
+"212 _param_constant59" -> "215 _native_batch_norm_legit_no_training_15";
+"213 _tensor_constant30" -> "215 _native_batch_norm_legit_no_training_15";
+"214 _tensor_constant31" -> "215 _native_batch_norm_legit_no_training_15";
+"215 _native_batch_norm_legit_no_training_15" -> "216 getitem_45";
+"215 _native_batch_norm_legit_no_training_15" -> "217 getitem_46";
+"215 _native_batch_norm_legit_no_training_15" -> "218 getitem_47";
+"216 getitem_45" -> "219 hardswish__5";
+"219 hardswish__5" -> "221 conv2d_22";
+"220 _param_constant60" -> "221 conv2d_22";
+"221 conv2d_22" -> "227 _native_batch_norm_legit_no_training_16";
+"223 _param_constant61" -> "227 _native_batch_norm_legit_no_training_16";
+"224 _param_constant62" -> "227 _native_batch_norm_legit_no_training_16";
+"225 _tensor_constant32" -> "227 _native_batch_norm_legit_no_training_16";
+"226 _tensor_constant33" -> "227 _native_batch_norm_legit_no_training_16";
+"227 _native_batch_norm_legit_no_training_16" -> "228 getitem_48";
+"227 _native_batch_norm_legit_no_training_16" -> "229 getitem_49";
+"227 _native_batch_norm_legit_no_training_16" -> "230 getitem_50";
+"228 getitem_48" -> "231 hardswish__6";
+"231 hardswish__6" -> "232 adaptive_avg_pool2d_3";
+"231 hardswish__6" -> "241 mul_3";
+"232 adaptive_avg_pool2d_3" -> "235 conv2d_23";
+"233 _param_constant63" -> "235 conv2d_23";
+"234 _param_constant64" -> "235 conv2d_23";
+"235 conv2d_23" -> "236 relu_3";
+"236 relu_3" -> "239 conv2d_24";
+"237 _param_constant65" -> "239 conv2d_24";
+"238 _param_constant66" -> "239 conv2d_24";
+"239 conv2d_24" -> "240 hardsigmoid_3";
+"240 hardsigmoid_3" -> "241 mul_3";
+"241 mul_3" -> "243 conv2d_25";
+"242 _param_constant67" -> "243 conv2d_25";
+"243 conv2d_25" -> "249 _native_batch_norm_legit_no_training_17";
+"245 _param_constant68" -> "249 _native_batch_norm_legit_no_training_17";
+"246 _param_constant69" -> "249 _native_batch_norm_legit_no_training_17";
+"247 _tensor_constant34" -> "249 _native_batch_norm_legit_no_training_17";
+"248 _tensor_constant35" -> "249 _native_batch_norm_legit_no_training_17";
+"249 _native_batch_norm_legit_no_training_17" -> "250 getitem_51";
+"249 _native_batch_norm_legit_no_training_17" -> "251 getitem_52";
+"249 _native_batch_norm_legit_no_training_17" -> "252 getitem_53";
+"250 getitem_51" -> "253 add__2";
+"253 add__2" -> "255 conv2d_26";
+"254 _param_constant70" -> "255 conv2d_26";
+"255 conv2d_26" -> "261 _native_batch_norm_legit_no_training_18";
+"257 _param_constant71" -> "261 _native_batch_norm_legit_no_training_18";
+"258 _param_constant72" -> "261 _native_batch_norm_legit_no_training_18";
+"259 _tensor_constant36" -> "261 _native_batch_norm_legit_no_training_18";
+"260 _tensor_constant37" -> "261 _native_batch_norm_legit_no_training_18";
+"261 _native_batch_norm_legit_no_training_18" -> "262 getitem_54";
+"261 _native_batch_norm_legit_no_training_18" -> "263 getitem_55";
+"261 _native_batch_norm_legit_no_training_18" -> "264 getitem_56";
+"262 getitem_54" -> "265 hardswish__7";
+"265 hardswish__7" -> "267 conv2d_27";
+"266 _param_constant73" -> "267 conv2d_27";
+"267 conv2d_27" -> "273 _native_batch_norm_legit_no_training_19";
+"269 _param_constant74" -> "273 _native_batch_norm_legit_no_training_19";
+"270 _param_constant75" -> "273 _native_batch_norm_legit_no_training_19";
+"271 _tensor_constant38" -> "273 _native_batch_norm_legit_no_training_19";
+"272 _tensor_constant39" -> "273 _native_batch_norm_legit_no_training_19";
+"273 _native_batch_norm_legit_no_training_19" -> "274 getitem_57";
+"273 _native_batch_norm_legit_no_training_19" -> "275 getitem_58";
+"273 _native_batch_norm_legit_no_training_19" -> "276 getitem_59";
+"274 getitem_57" -> "277 hardswish__8";
+"277 hardswish__8" -> "278 adaptive_avg_pool2d_4";
+"277 hardswish__8" -> "287 mul_4";
+"278 adaptive_avg_pool2d_4" -> "281 conv2d_28";
+"279 _param_constant76" -> "281 conv2d_28";
+"280 _param_constant77" -> "281 conv2d_28";
+"281 conv2d_28" -> "282 relu_4";
+"282 relu_4" -> "285 conv2d_29";
+"283 _param_constant78" -> "285 conv2d_29";
+"284 _param_constant79" -> "285 conv2d_29";
+"285 conv2d_29" -> "286 hardsigmoid_4";
+"286 hardsigmoid_4" -> "287 mul_4";
+"287 mul_4" -> "289 conv2d_30";
+"288 _param_constant80" -> "289 conv2d_30";
+"289 conv2d_30" -> "295 _native_batch_norm_legit_no_training_20";
+"291 _param_constant81" -> "295 _native_batch_norm_legit_no_training_20";
+"292 _param_constant82" -> "295 _native_batch_norm_legit_no_training_20";
+"293 _tensor_constant40" -> "295 _native_batch_norm_legit_no_training_20";
+"294 _tensor_constant41" -> "295 _native_batch_norm_legit_no_training_20";
+"295 _native_batch_norm_legit_no_training_20" -> "296 getitem_60";
+"295 _native_batch_norm_legit_no_training_20" -> "297 getitem_61";
+"295 _native_batch_norm_legit_no_training_20" -> "298 getitem_62";
+"296 getitem_60" -> "300 conv2d_31";
+"296 getitem_60" -> "344 add__3";
+"299 _param_constant83" -> "300 conv2d_31";
+"300 conv2d_31" -> "306 _native_batch_norm_legit_no_training_21";
+"302 _param_constant84" -> "306 _native_batch_norm_legit_no_training_21";
+"303 _param_constant85" -> "306 _native_batch_norm_legit_no_training_21";
+"304 _tensor_constant42" -> "306 _native_batch_norm_legit_no_training_21";
+"305 _tensor_constant43" -> "306 _native_batch_norm_legit_no_training_21";
+"306 _native_batch_norm_legit_no_training_21" -> "307 getitem_63";
+"306 _native_batch_norm_legit_no_training_21" -> "308 getitem_64";
+"306 _native_batch_norm_legit_no_training_21" -> "309 getitem_65";
+"307 getitem_63" -> "310 hardswish__9";
+"310 hardswish__9" -> "312 conv2d_32";
+"311 _param_constant86" -> "312 conv2d_32";
+"312 conv2d_32" -> "318 _native_batch_norm_legit_no_training_22";
+"314 _param_constant87" -> "318 _native_batch_norm_legit_no_training_22";
+"315 _param_constant88" -> "318 _native_batch_norm_legit_no_training_22";
+"316 _tensor_constant44" -> "318 _native_batch_norm_legit_no_training_22";
+"317 _tensor_constant45" -> "318 _native_batch_norm_legit_no_training_22";
+"318 _native_batch_norm_legit_no_training_22" -> "319 getitem_66";
+"318 _native_batch_norm_legit_no_training_22" -> "320 getitem_67";
+"318 _native_batch_norm_legit_no_training_22" -> "321 getitem_68";
+"319 getitem_66" -> "322 hardswish__10";
+"322 hardswish__10" -> "323 adaptive_avg_pool2d_5";
+"322 hardswish__10" -> "332 mul_5";
+"323 adaptive_avg_pool2d_5" -> "326 conv2d_33";
+"324 _param_constant89" -> "326 conv2d_33";
+"325 _param_constant90" -> "326 conv2d_33";
+"326 conv2d_33" -> "327 relu_5";
+"327 relu_5" -> "330 conv2d_34";
+"328 _param_constant91" -> "330 conv2d_34";
+"329 _param_constant92" -> "330 conv2d_34";
+"330 conv2d_34" -> "331 hardsigmoid_5";
+"331 hardsigmoid_5" -> "332 mul_5";
+"332 mul_5" -> "334 conv2d_35";
+"333 _param_constant93" -> "334 conv2d_35";
+"334 conv2d_35" -> "340 _native_batch_norm_legit_no_training_23";
+"336 _param_constant94" -> "340 _native_batch_norm_legit_no_training_23";
+"337 _param_constant95" -> "340 _native_batch_norm_legit_no_training_23";
+"338 _tensor_constant46" -> "340 _native_batch_norm_legit_no_training_23";
+"339 _tensor_constant47" -> "340 _native_batch_norm_legit_no_training_23";
+"340 _native_batch_norm_legit_no_training_23" -> "341 getitem_69";
+"340 _native_batch_norm_legit_no_training_23" -> "342 getitem_70";
+"340 _native_batch_norm_legit_no_training_23" -> "343 getitem_71";
+"341 getitem_69" -> "344 add__3";
+"344 add__3" -> "346 conv2d_36";
+"345 _param_constant96" -> "346 conv2d_36";
+"346 conv2d_36" -> "352 _native_batch_norm_legit_no_training_24";
+"348 _param_constant97" -> "352 _native_batch_norm_legit_no_training_24";
+"349 _param_constant98" -> "352 _native_batch_norm_legit_no_training_24";
+"350 _tensor_constant48" -> "352 _native_batch_norm_legit_no_training_24";
+"351 _tensor_constant49" -> "352 _native_batch_norm_legit_no_training_24";
+"352 _native_batch_norm_legit_no_training_24" -> "353 getitem_72";
+"352 _native_batch_norm_legit_no_training_24" -> "354 getitem_73";
+"352 _native_batch_norm_legit_no_training_24" -> "355 getitem_74";
+"353 getitem_72" -> "356 hardswish__11";
+"356 hardswish__11" -> "358 conv2d_37";
+"357 _param_constant99" -> "358 conv2d_37";
+"358 conv2d_37" -> "364 _native_batch_norm_legit_no_training_25";
+"360 _param_constant100" -> "364 _native_batch_norm_legit_no_training_25";
+"361 _param_constant101" -> "364 _native_batch_norm_legit_no_training_25";
+"362 _tensor_constant50" -> "364 _native_batch_norm_legit_no_training_25";
+"363 _tensor_constant51" -> "364 _native_batch_norm_legit_no_training_25";
+"364 _native_batch_norm_legit_no_training_25" -> "365 getitem_75";
+"364 _native_batch_norm_legit_no_training_25" -> "366 getitem_76";
+"364 _native_batch_norm_legit_no_training_25" -> "367 getitem_77";
+"365 getitem_75" -> "368 hardswish__12";
+"368 hardswish__12" -> "369 adaptive_avg_pool2d_6";
+"368 hardswish__12" -> "378 mul_6";
+"369 adaptive_avg_pool2d_6" -> "372 conv2d_38";
+"370 _param_constant102" -> "372 conv2d_38";
+"371 _param_constant103" -> "372 conv2d_38";
+"372 conv2d_38" -> "373 relu_6";
+"373 relu_6" -> "376 conv2d_39";
+"374 _param_constant104" -> "376 conv2d_39";
+"375 _param_constant105" -> "376 conv2d_39";
+"376 conv2d_39" -> "377 hardsigmoid_6";
+"377 hardsigmoid_6" -> "378 mul_6";
+"378 mul_6" -> "380 conv2d_40";
+"379 _param_constant106" -> "380 conv2d_40";
+"380 conv2d_40" -> "386 _native_batch_norm_legit_no_training_26";
+"382 _param_constant107" -> "386 _native_batch_norm_legit_no_training_26";
+"383 _param_constant108" -> "386 _native_batch_norm_legit_no_training_26";
+"384 _tensor_constant52" -> "386 _native_batch_norm_legit_no_training_26";
+"385 _tensor_constant53" -> "386 _native_batch_norm_legit_no_training_26";
+"386 _native_batch_norm_legit_no_training_26" -> "387 getitem_78";
+"386 _native_batch_norm_legit_no_training_26" -> "388 getitem_79";
+"386 _native_batch_norm_legit_no_training_26" -> "389 getitem_80";
+"387 getitem_78" -> "391 conv2d_41";
+"387 getitem_78" -> "435 add__4";
+"390 _param_constant109" -> "391 conv2d_41";
+"391 conv2d_41" -> "397 _native_batch_norm_legit_no_training_27";
+"393 _param_constant110" -> "397 _native_batch_norm_legit_no_training_27";
+"394 _param_constant111" -> "397 _native_batch_norm_legit_no_training_27";
+"395 _tensor_constant54" -> "397 _native_batch_norm_legit_no_training_27";
+"396 _tensor_constant55" -> "397 _native_batch_norm_legit_no_training_27";
+"397 _native_batch_norm_legit_no_training_27" -> "398 getitem_81";
+"397 _native_batch_norm_legit_no_training_27" -> "399 getitem_82";
+"397 _native_batch_norm_legit_no_training_27" -> "400 getitem_83";
+"398 getitem_81" -> "401 hardswish__13";
+"401 hardswish__13" -> "403 conv2d_42";
+"402 _param_constant112" -> "403 conv2d_42";
+"403 conv2d_42" -> "409 _native_batch_norm_legit_no_training_28";
+"405 _param_constant113" -> "409 _native_batch_norm_legit_no_training_28";
+"406 _param_constant114" -> "409 _native_batch_norm_legit_no_training_28";
+"407 _tensor_constant56" -> "409 _native_batch_norm_legit_no_training_28";
+"408 _tensor_constant57" -> "409 _native_batch_norm_legit_no_training_28";
+"409 _native_batch_norm_legit_no_training_28" -> "410 getitem_84";
+"409 _native_batch_norm_legit_no_training_28" -> "411 getitem_85";
+"409 _native_batch_norm_legit_no_training_28" -> "412 getitem_86";
+"410 getitem_84" -> "413 hardswish__14";
+"413 hardswish__14" -> "414 adaptive_avg_pool2d_7";
+"413 hardswish__14" -> "423 mul_7";
+"414 adaptive_avg_pool2d_7" -> "417 conv2d_43";
+"415 _param_constant115" -> "417 conv2d_43";
+"416 _param_constant116" -> "417 conv2d_43";
+"417 conv2d_43" -> "418 relu_7";
+"418 relu_7" -> "421 conv2d_44";
+"419 _param_constant117" -> "421 conv2d_44";
+"420 _param_constant118" -> "421 conv2d_44";
+"421 conv2d_44" -> "422 hardsigmoid_7";
+"422 hardsigmoid_7" -> "423 mul_7";
+"423 mul_7" -> "425 conv2d_45";
+"424 _param_constant119" -> "425 conv2d_45";
+"425 conv2d_45" -> "431 _native_batch_norm_legit_no_training_29";
+"427 _param_constant120" -> "431 _native_batch_norm_legit_no_training_29";
+"428 _param_constant121" -> "431 _native_batch_norm_legit_no_training_29";
+"429 _tensor_constant58" -> "431 _native_batch_norm_legit_no_training_29";
+"430 _tensor_constant59" -> "431 _native_batch_norm_legit_no_training_29";
+"431 _native_batch_norm_legit_no_training_29" -> "432 getitem_87";
+"431 _native_batch_norm_legit_no_training_29" -> "433 getitem_88";
+"431 _native_batch_norm_legit_no_training_29" -> "434 getitem_89";
+"432 getitem_87" -> "435 add__4";
+"435 add__4" -> "437 conv2d_46";
+"435 add__4" -> "481 add__5";
+"436 _param_constant122" -> "437 conv2d_46";
+"437 conv2d_46" -> "443 _native_batch_norm_legit_no_training_30";
+"439 _param_constant123" -> "443 _native_batch_norm_legit_no_training_30";
+"440 _param_constant124" -> "443 _native_batch_norm_legit_no_training_30";
+"441 _tensor_constant60" -> "443 _native_batch_norm_legit_no_training_30";
+"442 _tensor_constant61" -> "443 _native_batch_norm_legit_no_training_30";
+"443 _native_batch_norm_legit_no_training_30" -> "444 getitem_90";
+"443 _native_batch_norm_legit_no_training_30" -> "445 getitem_91";
+"443 _native_batch_norm_legit_no_training_30" -> "446 getitem_92";
+"444 getitem_90" -> "447 hardswish__15";
+"447 hardswish__15" -> "449 conv2d_47";
+"448 _param_constant125" -> "449 conv2d_47";
+"449 conv2d_47" -> "455 _native_batch_norm_legit_no_training_31";
+"451 _param_constant126" -> "455 _native_batch_norm_legit_no_training_31";
+"452 _param_constant127" -> "455 _native_batch_norm_legit_no_training_31";
+"453 _tensor_constant62" -> "455 _native_batch_norm_legit_no_training_31";
+"454 _tensor_constant63" -> "455 _native_batch_norm_legit_no_training_31";
+"455 _native_batch_norm_legit_no_training_31" -> "456 getitem_93";
+"455 _native_batch_norm_legit_no_training_31" -> "457 getitem_94";
+"455 _native_batch_norm_legit_no_training_31" -> "458 getitem_95";
+"456 getitem_93" -> "459 hardswish__16";
+"459 hardswish__16" -> "460 adaptive_avg_pool2d_8";
+"459 hardswish__16" -> "469 mul_8";
+"460 adaptive_avg_pool2d_8" -> "463 conv2d_48";
+"461 _param_constant128" -> "463 conv2d_48";
+"462 _param_constant129" -> "463 conv2d_48";
+"463 conv2d_48" -> "464 relu_8";
+"464 relu_8" -> "467 conv2d_49";
+"465 _param_constant130" -> "467 conv2d_49";
+"466 _param_constant131" -> "467 conv2d_49";
+"467 conv2d_49" -> "468 hardsigmoid_8";
+"468 hardsigmoid_8" -> "469 mul_8";
+"469 mul_8" -> "471 conv2d_50";
+"470 _param_constant132" -> "471 conv2d_50";
+"471 conv2d_50" -> "477 _native_batch_norm_legit_no_training_32";
+"473 _param_constant133" -> "477 _native_batch_norm_legit_no_training_32";
+"474 _param_constant134" -> "477 _native_batch_norm_legit_no_training_32";
+"475 _tensor_constant64" -> "477 _native_batch_norm_legit_no_training_32";
+"476 _tensor_constant65" -> "477 _native_batch_norm_legit_no_training_32";
+"477 _native_batch_norm_legit_no_training_32" -> "478 getitem_96";
+"477 _native_batch_norm_legit_no_training_32" -> "479 getitem_97";
+"477 _native_batch_norm_legit_no_training_32" -> "480 getitem_98";
+"478 getitem_96" -> "481 add__5";
+"481 add__5" -> "483 conv2d_51";
+"482 _param_constant135" -> "483 conv2d_51";
+"483 conv2d_51" -> "489 _native_batch_norm_legit_no_training_33";
+"485 _param_constant136" -> "489 _native_batch_norm_legit_no_training_33";
+"486 _param_constant137" -> "489 _native_batch_norm_legit_no_training_33";
+"487 _tensor_constant66" -> "489 _native_batch_norm_legit_no_training_33";
+"488 _tensor_constant67" -> "489 _native_batch_norm_legit_no_training_33";
+"489 _native_batch_norm_legit_no_training_33" -> "490 getitem_99";
+"489 _native_batch_norm_legit_no_training_33" -> "491 getitem_100";
+"489 _native_batch_norm_legit_no_training_33" -> "492 getitem_101";
+"490 getitem_99" -> "493 hardswish__17";
+"493 hardswish__17" -> "494 adaptive_avg_pool2d_9";
+"494 adaptive_avg_pool2d_9" -> "495 flatten";
+"495 flatten" -> "498 linear";
+"496 _param_constant138" -> "498 linear";
+"497 _param_constant139" -> "498 linear";
+"498 linear" -> "499 hardswish__18";
+"499 hardswish__18" -> "500 dropout_";
+"500 dropout_" -> "503 linear_1";
+"501 _param_constant140" -> "503 linear_1";
+"502 _param_constant141" -> "503 linear_1";
+"503 linear_1" -> "504 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/quantized/mobilenet_v3_small.dot b/tests/torch/data/reference_graphs/fx/quantized/mobilenet_v3_small.dot
new file mode 100644
index 00000000000..4417e47306b
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/quantized/mobilenet_v3_small.dot
@@ -0,0 +1,1182 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 quantize_per_tensor_default" [id=1, type=quantize_per_tensor];
+"2 dequantize_per_tensor_default" [id=2, type=dequantize_per_tensor];
+"3 _param_constant0" [id=3, type=get_attr];
+"4 conv2d_scale_0" [id=4, type=get_attr];
+"5 conv2d_zero_point_0" [id=5, type=get_attr];
+"6 quantize_per_channel_default" [id=6, type=quantize_per_channel];
+"7 dequantize_per_channel_default" [id=7, type=dequantize_per_channel];
+"8 features_0_0_weight_bias_0_0" [id=8, type=get_attr];
+"9 conv2d" [id=9, type=conv2d];
+"10 hardswish__scale_0" [id=10, type=get_attr];
+"11 hardswish__zero_point_0" [id=11, type=get_attr];
+"12 hardswish_" [id=12, type=hardswish_];
+"13 quantize_per_channel_default_1" [id=13, type=quantize_per_channel];
+"14 dequantize_per_channel_default_1" [id=14, type=dequantize_per_channel];
+"15 _param_constant3" [id=15, type=get_attr];
+"16 conv2d_1_scale_0" [id=16, type=get_attr];
+"17 conv2d_1_zero_point_0" [id=17, type=get_attr];
+"18 quantize_per_channel_default_2" [id=18, type=quantize_per_channel];
+"19 dequantize_per_channel_default_2" [id=19, type=dequantize_per_channel];
+"20 features_1_block_0_0_weight_bias_0_0" [id=20, type=get_attr];
+"21 conv2d_1" [id=21, type=conv2d];
+"22 relu_" [id=22, type=relu_];
+"23 quantize_per_tensor_default_1" [id=23, type=quantize_per_tensor];
+"24 dequantize_per_tensor_default_2" [id=24, type=dequantize_per_tensor];
+"25 dequantize_per_tensor_default_1" [id=25, type=dequantize_per_tensor];
+"26 adaptive_avg_pool2d" [id=26, type=adaptive_avg_pool2d];
+"27 _param_constant6" [id=27, type=get_attr];
+"28 _param_constant7_0_0" [id=28, type=get_attr];
+"29 conv2d_2" [id=29, type=conv2d];
+"30 relu" [id=30, type=relu];
+"31 _param_constant8" [id=31, type=get_attr];
+"32 _param_constant9_0_0" [id=32, type=get_attr];
+"33 conv2d_3" [id=33, type=conv2d];
+"34 hardsigmoid" [id=34, type=hardsigmoid];
+"35 quantize_per_tensor_default_2" [id=35, type=quantize_per_tensor];
+"36 dequantize_per_tensor_default_3" [id=36, type=dequantize_per_tensor];
+"37 mul" [id=37, type=mul];
+"38 quantize_per_tensor_default_3" [id=38, type=quantize_per_tensor];
+"39 dequantize_per_tensor_default_4" [id=39, type=dequantize_per_tensor];
+"40 _param_constant10" [id=40, type=get_attr];
+"41 conv2d_4_scale_0" [id=41, type=get_attr];
+"42 conv2d_4_zero_point_0" [id=42, type=get_attr];
+"43 quantize_per_channel_default_3" [id=43, type=quantize_per_channel];
+"44 dequantize_per_channel_default_3" [id=44, type=dequantize_per_channel];
+"45 features_1_block_2_0_weight_bias_0_0" [id=45, type=get_attr];
+"46 conv2d_4" [id=46, type=conv2d];
+"47 quantize_per_tensor_default_4" [id=47, type=quantize_per_tensor];
+"48 dequantize_per_tensor_default_5" [id=48, type=dequantize_per_tensor];
+"49 _param_constant13" [id=49, type=get_attr];
+"50 conv2d_5_scale_0" [id=50, type=get_attr];
+"51 conv2d_5_zero_point_0" [id=51, type=get_attr];
+"52 quantize_per_channel_default_4" [id=52, type=quantize_per_channel];
+"53 dequantize_per_channel_default_4" [id=53, type=dequantize_per_channel];
+"54 features_2_block_0_0_weight_bias_0_0" [id=54, type=get_attr];
+"55 conv2d_5" [id=55, type=conv2d];
+"56 relu__1_scale_0" [id=56, type=get_attr];
+"57 relu__1_zero_point_0" [id=57, type=get_attr];
+"58 relu__1" [id=58, type=relu_];
+"59 quantize_per_channel_default_5" [id=59, type=quantize_per_channel];
+"60 dequantize_per_channel_default_5" [id=60, type=dequantize_per_channel];
+"61 _param_constant16" [id=61, type=get_attr];
+"62 conv2d_6_scale_0" [id=62, type=get_attr];
+"63 conv2d_6_zero_point_0" [id=63, type=get_attr];
+"64 quantize_per_channel_default_6" [id=64, type=quantize_per_channel];
+"65 dequantize_per_channel_default_6" [id=65, type=dequantize_per_channel];
+"66 features_2_block_1_0_weight_bias_0_0" [id=66, type=get_attr];
+"67 conv2d_6" [id=67, type=conv2d];
+"68 relu__2" [id=68, type=relu_];
+"69 quantize_per_tensor_default_5" [id=69, type=quantize_per_tensor];
+"70 dequantize_per_tensor_default_6" [id=70, type=dequantize_per_tensor];
+"71 _param_constant19" [id=71, type=get_attr];
+"72 conv2d_7_scale_0" [id=72, type=get_attr];
+"73 conv2d_7_zero_point_0" [id=73, type=get_attr];
+"74 quantize_per_channel_default_7" [id=74, type=quantize_per_channel];
+"75 dequantize_per_channel_default_7" [id=75, type=dequantize_per_channel];
+"76 features_2_block_2_0_weight_bias_0_0" [id=76, type=get_attr];
+"77 conv2d_7" [id=77, type=conv2d];
+"78 quantize_per_tensor_default_6" [id=78, type=quantize_per_tensor];
+"79 dequantize_per_tensor_default_8" [id=79, type=dequantize_per_tensor];
+"80 dequantize_per_tensor_default_7" [id=80, type=dequantize_per_tensor];
+"81 _param_constant22" [id=81, type=get_attr];
+"82 conv2d_8_scale_0" [id=82, type=get_attr];
+"83 conv2d_8_zero_point_0" [id=83, type=get_attr];
+"84 quantize_per_channel_default_8" [id=84, type=quantize_per_channel];
+"85 dequantize_per_channel_default_8" [id=85, type=dequantize_per_channel];
+"86 features_3_block_0_0_weight_bias_0_0" [id=86, type=get_attr];
+"87 conv2d_8" [id=87, type=conv2d];
+"88 relu__3_scale_0" [id=88, type=get_attr];
+"89 relu__3_zero_point_0" [id=89, type=get_attr];
+"90 relu__3" [id=90, type=relu_];
+"91 quantize_per_channel_default_9" [id=91, type=quantize_per_channel];
+"92 dequantize_per_channel_default_9" [id=92, type=dequantize_per_channel];
+"93 _param_constant25" [id=93, type=get_attr];
+"94 conv2d_9_scale_0" [id=94, type=get_attr];
+"95 conv2d_9_zero_point_0" [id=95, type=get_attr];
+"96 quantize_per_channel_default_10" [id=96, type=quantize_per_channel];
+"97 dequantize_per_channel_default_10" [id=97, type=dequantize_per_channel];
+"98 features_3_block_1_0_weight_bias_0_0" [id=98, type=get_attr];
+"99 conv2d_9" [id=99, type=conv2d];
+"100 relu__4" [id=100, type=relu_];
+"101 quantize_per_tensor_default_7" [id=101, type=quantize_per_tensor];
+"102 dequantize_per_tensor_default_9" [id=102, type=dequantize_per_tensor];
+"103 _param_constant28" [id=103, type=get_attr];
+"104 conv2d_10_scale_0" [id=104, type=get_attr];
+"105 conv2d_10_zero_point_0" [id=105, type=get_attr];
+"106 quantize_per_channel_default_11" [id=106, type=quantize_per_channel];
+"107 dequantize_per_channel_default_11" [id=107, type=dequantize_per_channel];
+"108 features_3_block_2_0_weight_bias_0_0" [id=108, type=get_attr];
+"109 conv2d_10" [id=109, type=conv2d];
+"110 quantize_per_tensor_default_8" [id=110, type=quantize_per_tensor];
+"111 dequantize_per_tensor_default_10" [id=111, type=dequantize_per_tensor];
+"112 add_" [id=112, type=add_];
+"113 quantize_per_tensor_default_9" [id=113, type=quantize_per_tensor];
+"114 dequantize_per_tensor_default_11" [id=114, type=dequantize_per_tensor];
+"115 _param_constant31" [id=115, type=get_attr];
+"116 conv2d_11_scale_0" [id=116, type=get_attr];
+"117 conv2d_11_zero_point_0" [id=117, type=get_attr];
+"118 quantize_per_channel_default_12" [id=118, type=quantize_per_channel];
+"119 dequantize_per_channel_default_12" [id=119, type=dequantize_per_channel];
+"120 features_4_block_0_0_weight_bias_0_0" [id=120, type=get_attr];
+"121 conv2d_11" [id=121, type=conv2d];
+"122 hardswish__1_scale_0" [id=122, type=get_attr];
+"123 hardswish__1_zero_point_0" [id=123, type=get_attr];
+"124 hardswish__1" [id=124, type=hardswish_];
+"125 quantize_per_channel_default_13" [id=125, type=quantize_per_channel];
+"126 dequantize_per_channel_default_13" [id=126, type=dequantize_per_channel];
+"127 _param_constant34" [id=127, type=get_attr];
+"128 conv2d_12_scale_0" [id=128, type=get_attr];
+"129 conv2d_12_zero_point_0" [id=129, type=get_attr];
+"130 quantize_per_channel_default_14" [id=130, type=quantize_per_channel];
+"131 dequantize_per_channel_default_14" [id=131, type=dequantize_per_channel];
+"132 features_4_block_1_0_weight_bias_0_0" [id=132, type=get_attr];
+"133 conv2d_12" [id=133, type=conv2d];
+"134 hardswish__2" [id=134, type=hardswish_];
+"135 quantize_per_tensor_default_10" [id=135, type=quantize_per_tensor];
+"136 dequantize_per_tensor_default_13" [id=136, type=dequantize_per_tensor];
+"137 dequantize_per_tensor_default_12" [id=137, type=dequantize_per_tensor];
+"138 adaptive_avg_pool2d_1" [id=138, type=adaptive_avg_pool2d];
+"139 _param_constant37" [id=139, type=get_attr];
+"140 _param_constant38_0_0" [id=140, type=get_attr];
+"141 conv2d_13" [id=141, type=conv2d];
+"142 relu_1" [id=142, type=relu];
+"143 _param_constant39" [id=143, type=get_attr];
+"144 _param_constant40_0_0" [id=144, type=get_attr];
+"145 conv2d_14" [id=145, type=conv2d];
+"146 hardsigmoid_1" [id=146, type=hardsigmoid];
+"147 quantize_per_tensor_default_11" [id=147, type=quantize_per_tensor];
+"148 dequantize_per_tensor_default_14" [id=148, type=dequantize_per_tensor];
+"149 mul_1" [id=149, type=mul];
+"150 quantize_per_tensor_default_12" [id=150, type=quantize_per_tensor];
+"151 dequantize_per_tensor_default_15" [id=151, type=dequantize_per_tensor];
+"152 _param_constant41" [id=152, type=get_attr];
+"153 conv2d_15_scale_0" [id=153, type=get_attr];
+"154 conv2d_15_zero_point_0" [id=154, type=get_attr];
+"155 quantize_per_channel_default_15" [id=155, type=quantize_per_channel];
+"156 dequantize_per_channel_default_15" [id=156, type=dequantize_per_channel];
+"157 features_4_block_3_0_weight_bias_0_0" [id=157, type=get_attr];
+"158 conv2d_15" [id=158, type=conv2d];
+"159 quantize_per_tensor_default_13" [id=159, type=quantize_per_tensor];
+"160 dequantize_per_tensor_default_17" [id=160, type=dequantize_per_tensor];
+"161 dequantize_per_tensor_default_16" [id=161, type=dequantize_per_tensor];
+"162 _param_constant44" [id=162, type=get_attr];
+"163 conv2d_16_scale_0" [id=163, type=get_attr];
+"164 conv2d_16_zero_point_0" [id=164, type=get_attr];
+"165 quantize_per_channel_default_16" [id=165, type=quantize_per_channel];
+"166 dequantize_per_channel_default_16" [id=166, type=dequantize_per_channel];
+"167 features_5_block_0_0_weight_bias_0_0" [id=167, type=get_attr];
+"168 conv2d_16" [id=168, type=conv2d];
+"169 hardswish__3_scale_0" [id=169, type=get_attr];
+"170 hardswish__3_zero_point_0" [id=170, type=get_attr];
+"171 hardswish__3" [id=171, type=hardswish_];
+"172 quantize_per_channel_default_17" [id=172, type=quantize_per_channel];
+"173 dequantize_per_channel_default_17" [id=173, type=dequantize_per_channel];
+"174 _param_constant47" [id=174, type=get_attr];
+"175 conv2d_17_scale_0" [id=175, type=get_attr];
+"176 conv2d_17_zero_point_0" [id=176, type=get_attr];
+"177 quantize_per_channel_default_18" [id=177, type=quantize_per_channel];
+"178 dequantize_per_channel_default_18" [id=178, type=dequantize_per_channel];
+"179 features_5_block_1_0_weight_bias_0_0" [id=179, type=get_attr];
+"180 conv2d_17" [id=180, type=conv2d];
+"181 hardswish__4" [id=181, type=hardswish_];
+"182 quantize_per_tensor_default_14" [id=182, type=quantize_per_tensor];
+"183 dequantize_per_tensor_default_19" [id=183, type=dequantize_per_tensor];
+"184 dequantize_per_tensor_default_18" [id=184, type=dequantize_per_tensor];
+"185 adaptive_avg_pool2d_2" [id=185, type=adaptive_avg_pool2d];
+"186 _param_constant50" [id=186, type=get_attr];
+"187 _param_constant51_0_0" [id=187, type=get_attr];
+"188 conv2d_18" [id=188, type=conv2d];
+"189 relu_2" [id=189, type=relu];
+"190 _param_constant52" [id=190, type=get_attr];
+"191 _param_constant53_0_0" [id=191, type=get_attr];
+"192 conv2d_19" [id=192, type=conv2d];
+"193 hardsigmoid_2" [id=193, type=hardsigmoid];
+"194 quantize_per_tensor_default_15" [id=194, type=quantize_per_tensor];
+"195 dequantize_per_tensor_default_20" [id=195, type=dequantize_per_tensor];
+"196 mul_2" [id=196, type=mul];
+"197 quantize_per_tensor_default_16" [id=197, type=quantize_per_tensor];
+"198 dequantize_per_tensor_default_21" [id=198, type=dequantize_per_tensor];
+"199 _param_constant54" [id=199, type=get_attr];
+"200 conv2d_20_scale_0" [id=200, type=get_attr];
+"201 conv2d_20_zero_point_0" [id=201, type=get_attr];
+"202 quantize_per_channel_default_19" [id=202, type=quantize_per_channel];
+"203 dequantize_per_channel_default_19" [id=203, type=dequantize_per_channel];
+"204 features_5_block_3_0_weight_bias_0_0" [id=204, type=get_attr];
+"205 conv2d_20" [id=205, type=conv2d];
+"206 quantize_per_tensor_default_17" [id=206, type=quantize_per_tensor];
+"207 dequantize_per_tensor_default_22" [id=207, type=dequantize_per_tensor];
+"208 add__1" [id=208, type=add_];
+"209 quantize_per_tensor_default_18" [id=209, type=quantize_per_tensor];
+"210 dequantize_per_tensor_default_24" [id=210, type=dequantize_per_tensor];
+"211 dequantize_per_tensor_default_23" [id=211, type=dequantize_per_tensor];
+"212 _param_constant57" [id=212, type=get_attr];
+"213 conv2d_21_scale_0" [id=213, type=get_attr];
+"214 conv2d_21_zero_point_0" [id=214, type=get_attr];
+"215 quantize_per_channel_default_20" [id=215, type=quantize_per_channel];
+"216 dequantize_per_channel_default_20" [id=216, type=dequantize_per_channel];
+"217 features_6_block_0_0_weight_bias_0_0" [id=217, type=get_attr];
+"218 conv2d_21" [id=218, type=conv2d];
+"219 hardswish__5_scale_0" [id=219, type=get_attr];
+"220 hardswish__5_zero_point_0" [id=220, type=get_attr];
+"221 hardswish__5" [id=221, type=hardswish_];
+"222 quantize_per_channel_default_21" [id=222, type=quantize_per_channel];
+"223 dequantize_per_channel_default_21" [id=223, type=dequantize_per_channel];
+"224 _param_constant60" [id=224, type=get_attr];
+"225 conv2d_22_scale_0" [id=225, type=get_attr];
+"226 conv2d_22_zero_point_0" [id=226, type=get_attr];
+"227 quantize_per_channel_default_22" [id=227, type=quantize_per_channel];
+"228 dequantize_per_channel_default_22" [id=228, type=dequantize_per_channel];
+"229 features_6_block_1_0_weight_bias_0_0" [id=229, type=get_attr];
+"230 conv2d_22" [id=230, type=conv2d];
+"231 hardswish__6" [id=231, type=hardswish_];
+"232 quantize_per_tensor_default_19" [id=232, type=quantize_per_tensor];
+"233 dequantize_per_tensor_default_26" [id=233, type=dequantize_per_tensor];
+"234 dequantize_per_tensor_default_25" [id=234, type=dequantize_per_tensor];
+"235 adaptive_avg_pool2d_3" [id=235, type=adaptive_avg_pool2d];
+"236 _param_constant63" [id=236, type=get_attr];
+"237 _param_constant64_0_0" [id=237, type=get_attr];
+"238 conv2d_23" [id=238, type=conv2d];
+"239 relu_3" [id=239, type=relu];
+"240 _param_constant65" [id=240, type=get_attr];
+"241 _param_constant66_0_0" [id=241, type=get_attr];
+"242 conv2d_24" [id=242, type=conv2d];
+"243 hardsigmoid_3" [id=243, type=hardsigmoid];
+"244 quantize_per_tensor_default_20" [id=244, type=quantize_per_tensor];
+"245 dequantize_per_tensor_default_27" [id=245, type=dequantize_per_tensor];
+"246 mul_3" [id=246, type=mul];
+"247 quantize_per_tensor_default_21" [id=247, type=quantize_per_tensor];
+"248 dequantize_per_tensor_default_28" [id=248, type=dequantize_per_tensor];
+"249 _param_constant67" [id=249, type=get_attr];
+"250 conv2d_25_scale_0" [id=250, type=get_attr];
+"251 conv2d_25_zero_point_0" [id=251, type=get_attr];
+"252 quantize_per_channel_default_23" [id=252, type=quantize_per_channel];
+"253 dequantize_per_channel_default_23" [id=253, type=dequantize_per_channel];
+"254 features_6_block_3_0_weight_bias_0_0" [id=254, type=get_attr];
+"255 conv2d_25" [id=255, type=conv2d];
+"256 quantize_per_tensor_default_22" [id=256, type=quantize_per_tensor];
+"257 dequantize_per_tensor_default_29" [id=257, type=dequantize_per_tensor];
+"258 add__2" [id=258, type=add_];
+"259 quantize_per_tensor_default_23" [id=259, type=quantize_per_tensor];
+"260 dequantize_per_tensor_default_30" [id=260, type=dequantize_per_tensor];
+"261 _param_constant70" [id=261, type=get_attr];
+"262 conv2d_26_scale_0" [id=262, type=get_attr];
+"263 conv2d_26_zero_point_0" [id=263, type=get_attr];
+"264 quantize_per_channel_default_24" [id=264, type=quantize_per_channel];
+"265 dequantize_per_channel_default_24" [id=265, type=dequantize_per_channel];
+"266 features_7_block_0_0_weight_bias_0_0" [id=266, type=get_attr];
+"267 conv2d_26" [id=267, type=conv2d];
+"268 hardswish__7_scale_0" [id=268, type=get_attr];
+"269 hardswish__7_zero_point_0" [id=269, type=get_attr];
+"270 hardswish__7" [id=270, type=hardswish_];
+"271 quantize_per_channel_default_25" [id=271, type=quantize_per_channel];
+"272 dequantize_per_channel_default_25" [id=272, type=dequantize_per_channel];
+"273 _param_constant73" [id=273, type=get_attr];
+"274 conv2d_27_scale_0" [id=274, type=get_attr];
+"275 conv2d_27_zero_point_0" [id=275, type=get_attr];
+"276 quantize_per_channel_default_26" [id=276, type=quantize_per_channel];
+"277 dequantize_per_channel_default_26" [id=277, type=dequantize_per_channel];
+"278 features_7_block_1_0_weight_bias_0_0" [id=278, type=get_attr];
+"279 conv2d_27" [id=279, type=conv2d];
+"280 hardswish__8" [id=280, type=hardswish_];
+"281 quantize_per_tensor_default_24" [id=281, type=quantize_per_tensor];
+"282 dequantize_per_tensor_default_32" [id=282, type=dequantize_per_tensor];
+"283 dequantize_per_tensor_default_31" [id=283, type=dequantize_per_tensor];
+"284 adaptive_avg_pool2d_4" [id=284, type=adaptive_avg_pool2d];
+"285 _param_constant76" [id=285, type=get_attr];
+"286 _param_constant77_0_0" [id=286, type=get_attr];
+"287 conv2d_28" [id=287, type=conv2d];
+"288 relu_4" [id=288, type=relu];
+"289 _param_constant78" [id=289, type=get_attr];
+"290 _param_constant79_0_0" [id=290, type=get_attr];
+"291 conv2d_29" [id=291, type=conv2d];
+"292 hardsigmoid_4" [id=292, type=hardsigmoid];
+"293 quantize_per_tensor_default_25" [id=293, type=quantize_per_tensor];
+"294 dequantize_per_tensor_default_33" [id=294, type=dequantize_per_tensor];
+"295 mul_4" [id=295, type=mul];
+"296 quantize_per_tensor_default_26" [id=296, type=quantize_per_tensor];
+"297 dequantize_per_tensor_default_34" [id=297, type=dequantize_per_tensor];
+"298 _param_constant80" [id=298, type=get_attr];
+"299 conv2d_30_scale_0" [id=299, type=get_attr];
+"300 conv2d_30_zero_point_0" [id=300, type=get_attr];
+"301 quantize_per_channel_default_27" [id=301, type=quantize_per_channel];
+"302 dequantize_per_channel_default_27" [id=302, type=dequantize_per_channel];
+"303 features_7_block_3_0_weight_bias_0_0" [id=303, type=get_attr];
+"304 conv2d_30" [id=304, type=conv2d];
+"305 quantize_per_tensor_default_27" [id=305, type=quantize_per_tensor];
+"306 dequantize_per_tensor_default_36" [id=306, type=dequantize_per_tensor];
+"307 dequantize_per_tensor_default_35" [id=307, type=dequantize_per_tensor];
+"308 _param_constant83" [id=308, type=get_attr];
+"309 conv2d_31_scale_0" [id=309, type=get_attr];
+"310 conv2d_31_zero_point_0" [id=310, type=get_attr];
+"311 quantize_per_channel_default_28" [id=311, type=quantize_per_channel];
+"312 dequantize_per_channel_default_28" [id=312, type=dequantize_per_channel];
+"313 features_8_block_0_0_weight_bias_0_0" [id=313, type=get_attr];
+"314 conv2d_31" [id=314, type=conv2d];
+"315 hardswish__9_scale_0" [id=315, type=get_attr];
+"316 hardswish__9_zero_point_0" [id=316, type=get_attr];
+"317 hardswish__9" [id=317, type=hardswish_];
+"318 quantize_per_channel_default_29" [id=318, type=quantize_per_channel];
+"319 dequantize_per_channel_default_29" [id=319, type=dequantize_per_channel];
+"320 _param_constant86" [id=320, type=get_attr];
+"321 conv2d_32_scale_0" [id=321, type=get_attr];
+"322 conv2d_32_zero_point_0" [id=322, type=get_attr];
+"323 quantize_per_channel_default_30" [id=323, type=quantize_per_channel];
+"324 dequantize_per_channel_default_30" [id=324, type=dequantize_per_channel];
+"325 features_8_block_1_0_weight_bias_0_0" [id=325, type=get_attr];
+"326 conv2d_32" [id=326, type=conv2d];
+"327 hardswish__10" [id=327, type=hardswish_];
+"328 quantize_per_tensor_default_28" [id=328, type=quantize_per_tensor];
+"329 dequantize_per_tensor_default_38" [id=329, type=dequantize_per_tensor];
+"330 dequantize_per_tensor_default_37" [id=330, type=dequantize_per_tensor];
+"331 adaptive_avg_pool2d_5" [id=331, type=adaptive_avg_pool2d];
+"332 _param_constant89" [id=332, type=get_attr];
+"333 _param_constant90_0_0" [id=333, type=get_attr];
+"334 conv2d_33" [id=334, type=conv2d];
+"335 relu_5" [id=335, type=relu];
+"336 _param_constant91" [id=336, type=get_attr];
+"337 _param_constant92_0_0" [id=337, type=get_attr];
+"338 conv2d_34" [id=338, type=conv2d];
+"339 hardsigmoid_5" [id=339, type=hardsigmoid];
+"340 quantize_per_tensor_default_29" [id=340, type=quantize_per_tensor];
+"341 dequantize_per_tensor_default_39" [id=341, type=dequantize_per_tensor];
+"342 mul_5" [id=342, type=mul];
+"343 quantize_per_tensor_default_30" [id=343, type=quantize_per_tensor];
+"344 dequantize_per_tensor_default_40" [id=344, type=dequantize_per_tensor];
+"345 _param_constant93" [id=345, type=get_attr];
+"346 conv2d_35_scale_0" [id=346, type=get_attr];
+"347 conv2d_35_zero_point_0" [id=347, type=get_attr];
+"348 quantize_per_channel_default_31" [id=348, type=quantize_per_channel];
+"349 dequantize_per_channel_default_31" [id=349, type=dequantize_per_channel];
+"350 features_8_block_3_0_weight_bias_0_0" [id=350, type=get_attr];
+"351 conv2d_35" [id=351, type=conv2d];
+"352 quantize_per_tensor_default_31" [id=352, type=quantize_per_tensor];
+"353 dequantize_per_tensor_default_41" [id=353, type=dequantize_per_tensor];
+"354 add__3" [id=354, type=add_];
+"355 quantize_per_tensor_default_32" [id=355, type=quantize_per_tensor];
+"356 dequantize_per_tensor_default_42" [id=356, type=dequantize_per_tensor];
+"357 _param_constant96" [id=357, type=get_attr];
+"358 conv2d_36_scale_0" [id=358, type=get_attr];
+"359 conv2d_36_zero_point_0" [id=359, type=get_attr];
+"360 quantize_per_channel_default_32" [id=360, type=quantize_per_channel];
+"361 dequantize_per_channel_default_32" [id=361, type=dequantize_per_channel];
+"362 features_9_block_0_0_weight_bias_0_0" [id=362, type=get_attr];
+"363 conv2d_36" [id=363, type=conv2d];
+"364 hardswish__11_scale_0" [id=364, type=get_attr];
+"365 hardswish__11_zero_point_0" [id=365, type=get_attr];
+"366 hardswish__11" [id=366, type=hardswish_];
+"367 quantize_per_channel_default_33" [id=367, type=quantize_per_channel];
+"368 dequantize_per_channel_default_33" [id=368, type=dequantize_per_channel];
+"369 _param_constant99" [id=369, type=get_attr];
+"370 conv2d_37_scale_0" [id=370, type=get_attr];
+"371 conv2d_37_zero_point_0" [id=371, type=get_attr];
+"372 quantize_per_channel_default_34" [id=372, type=quantize_per_channel];
+"373 dequantize_per_channel_default_34" [id=373, type=dequantize_per_channel];
+"374 features_9_block_1_0_weight_bias_0_0" [id=374, type=get_attr];
+"375 conv2d_37" [id=375, type=conv2d];
+"376 hardswish__12" [id=376, type=hardswish_];
+"377 quantize_per_tensor_default_33" [id=377, type=quantize_per_tensor];
+"378 dequantize_per_tensor_default_44" [id=378, type=dequantize_per_tensor];
+"379 dequantize_per_tensor_default_43" [id=379, type=dequantize_per_tensor];
+"380 adaptive_avg_pool2d_6" [id=380, type=adaptive_avg_pool2d];
+"381 _param_constant102" [id=381, type=get_attr];
+"382 _param_constant103_0_0" [id=382, type=get_attr];
+"383 conv2d_38" [id=383, type=conv2d];
+"384 relu_6" [id=384, type=relu];
+"385 _param_constant104" [id=385, type=get_attr];
+"386 _param_constant105_0_0" [id=386, type=get_attr];
+"387 conv2d_39" [id=387, type=conv2d];
+"388 hardsigmoid_6" [id=388, type=hardsigmoid];
+"389 quantize_per_tensor_default_34" [id=389, type=quantize_per_tensor];
+"390 dequantize_per_tensor_default_45" [id=390, type=dequantize_per_tensor];
+"391 mul_6" [id=391, type=mul];
+"392 quantize_per_tensor_default_35" [id=392, type=quantize_per_tensor];
+"393 dequantize_per_tensor_default_46" [id=393, type=dequantize_per_tensor];
+"394 _param_constant106" [id=394, type=get_attr];
+"395 conv2d_40_scale_0" [id=395, type=get_attr];
+"396 conv2d_40_zero_point_0" [id=396, type=get_attr];
+"397 quantize_per_channel_default_35" [id=397, type=quantize_per_channel];
+"398 dequantize_per_channel_default_35" [id=398, type=dequantize_per_channel];
+"399 features_9_block_3_0_weight_bias_0_0" [id=399, type=get_attr];
+"400 conv2d_40" [id=400, type=conv2d];
+"401 quantize_per_tensor_default_36" [id=401, type=quantize_per_tensor];
+"402 dequantize_per_tensor_default_48" [id=402, type=dequantize_per_tensor];
+"403 dequantize_per_tensor_default_47" [id=403, type=dequantize_per_tensor];
+"404 _param_constant109" [id=404, type=get_attr];
+"405 conv2d_41_scale_0" [id=405, type=get_attr];
+"406 conv2d_41_zero_point_0" [id=406, type=get_attr];
+"407 quantize_per_channel_default_36" [id=407, type=quantize_per_channel];
+"408 dequantize_per_channel_default_36" [id=408, type=dequantize_per_channel];
+"409 features_10_block_0_0_weight_bias_0_0" [id=409, type=get_attr];
+"410 conv2d_41" [id=410, type=conv2d];
+"411 hardswish__13_scale_0" [id=411, type=get_attr];
+"412 hardswish__13_zero_point_0" [id=412, type=get_attr];
+"413 hardswish__13" [id=413, type=hardswish_];
+"414 quantize_per_channel_default_37" [id=414, type=quantize_per_channel];
+"415 dequantize_per_channel_default_37" [id=415, type=dequantize_per_channel];
+"416 _param_constant112" [id=416, type=get_attr];
+"417 conv2d_42_scale_0" [id=417, type=get_attr];
+"418 conv2d_42_zero_point_0" [id=418, type=get_attr];
+"419 quantize_per_channel_default_38" [id=419, type=quantize_per_channel];
+"420 dequantize_per_channel_default_38" [id=420, type=dequantize_per_channel];
+"421 features_10_block_1_0_weight_bias_0_0" [id=421, type=get_attr];
+"422 conv2d_42" [id=422, type=conv2d];
+"423 hardswish__14" [id=423, type=hardswish_];
+"424 quantize_per_tensor_default_37" [id=424, type=quantize_per_tensor];
+"425 dequantize_per_tensor_default_50" [id=425, type=dequantize_per_tensor];
+"426 dequantize_per_tensor_default_49" [id=426, type=dequantize_per_tensor];
+"427 adaptive_avg_pool2d_7" [id=427, type=adaptive_avg_pool2d];
+"428 _param_constant115" [id=428, type=get_attr];
+"429 _param_constant116_0_0" [id=429, type=get_attr];
+"430 conv2d_43" [id=430, type=conv2d];
+"431 relu_7" [id=431, type=relu];
+"432 _param_constant117" [id=432, type=get_attr];
+"433 _param_constant118_0_0" [id=433, type=get_attr];
+"434 conv2d_44" [id=434, type=conv2d];
+"435 hardsigmoid_7" [id=435, type=hardsigmoid];
+"436 quantize_per_tensor_default_38" [id=436, type=quantize_per_tensor];
+"437 dequantize_per_tensor_default_51" [id=437, type=dequantize_per_tensor];
+"438 mul_7" [id=438, type=mul];
+"439 quantize_per_tensor_default_39" [id=439, type=quantize_per_tensor];
+"440 dequantize_per_tensor_default_52" [id=440, type=dequantize_per_tensor];
+"441 _param_constant119" [id=441, type=get_attr];
+"442 conv2d_45_scale_0" [id=442, type=get_attr];
+"443 conv2d_45_zero_point_0" [id=443, type=get_attr];
+"444 quantize_per_channel_default_39" [id=444, type=quantize_per_channel];
+"445 dequantize_per_channel_default_39" [id=445, type=dequantize_per_channel];
+"446 features_10_block_3_0_weight_bias_0_0" [id=446, type=get_attr];
+"447 conv2d_45" [id=447, type=conv2d];
+"448 quantize_per_tensor_default_40" [id=448, type=quantize_per_tensor];
+"449 dequantize_per_tensor_default_53" [id=449, type=dequantize_per_tensor];
+"450 add__4" [id=450, type=add_];
+"451 quantize_per_tensor_default_41" [id=451, type=quantize_per_tensor];
+"452 dequantize_per_tensor_default_55" [id=452, type=dequantize_per_tensor];
+"453 dequantize_per_tensor_default_54" [id=453, type=dequantize_per_tensor];
+"454 _param_constant122" [id=454, type=get_attr];
+"455 conv2d_46_scale_0" [id=455, type=get_attr];
+"456 conv2d_46_zero_point_0" [id=456, type=get_attr];
+"457 quantize_per_channel_default_40" [id=457, type=quantize_per_channel];
+"458 dequantize_per_channel_default_40" [id=458, type=dequantize_per_channel];
+"459 features_11_block_0_0_weight_bias_0_0" [id=459, type=get_attr];
+"460 conv2d_46" [id=460, type=conv2d];
+"461 hardswish__15_scale_0" [id=461, type=get_attr];
+"462 hardswish__15_zero_point_0" [id=462, type=get_attr];
+"463 hardswish__15" [id=463, type=hardswish_];
+"464 quantize_per_channel_default_41" [id=464, type=quantize_per_channel];
+"465 dequantize_per_channel_default_41" [id=465, type=dequantize_per_channel];
+"466 _param_constant125" [id=466, type=get_attr];
+"467 conv2d_47_scale_0" [id=467, type=get_attr];
+"468 conv2d_47_zero_point_0" [id=468, type=get_attr];
+"469 quantize_per_channel_default_42" [id=469, type=quantize_per_channel];
+"470 dequantize_per_channel_default_42" [id=470, type=dequantize_per_channel];
+"471 features_11_block_1_0_weight_bias_0_0" [id=471, type=get_attr];
+"472 conv2d_47" [id=472, type=conv2d];
+"473 hardswish__16" [id=473, type=hardswish_];
+"474 quantize_per_tensor_default_42" [id=474, type=quantize_per_tensor];
+"475 dequantize_per_tensor_default_57" [id=475, type=dequantize_per_tensor];
+"476 dequantize_per_tensor_default_56" [id=476, type=dequantize_per_tensor];
+"477 adaptive_avg_pool2d_8" [id=477, type=adaptive_avg_pool2d];
+"478 _param_constant128" [id=478, type=get_attr];
+"479 _param_constant129_0_0" [id=479, type=get_attr];
+"480 conv2d_48" [id=480, type=conv2d];
+"481 relu_8" [id=481, type=relu];
+"482 _param_constant130" [id=482, type=get_attr];
+"483 _param_constant131_0_0" [id=483, type=get_attr];
+"484 conv2d_49" [id=484, type=conv2d];
+"485 hardsigmoid_8" [id=485, type=hardsigmoid];
+"486 quantize_per_tensor_default_43" [id=486, type=quantize_per_tensor];
+"487 dequantize_per_tensor_default_58" [id=487, type=dequantize_per_tensor];
+"488 mul_8" [id=488, type=mul];
+"489 quantize_per_tensor_default_44" [id=489, type=quantize_per_tensor];
+"490 dequantize_per_tensor_default_59" [id=490, type=dequantize_per_tensor];
+"491 _param_constant132" [id=491, type=get_attr];
+"492 conv2d_50_scale_0" [id=492, type=get_attr];
+"493 conv2d_50_zero_point_0" [id=493, type=get_attr];
+"494 quantize_per_channel_default_43" [id=494, type=quantize_per_channel];
+"495 dequantize_per_channel_default_43" [id=495, type=dequantize_per_channel];
+"496 features_11_block_3_0_weight_bias_0_0" [id=496, type=get_attr];
+"497 conv2d_50" [id=497, type=conv2d];
+"498 quantize_per_tensor_default_45" [id=498, type=quantize_per_tensor];
+"499 dequantize_per_tensor_default_60" [id=499, type=dequantize_per_tensor];
+"500 add__5" [id=500, type=add_];
+"501 quantize_per_tensor_default_46" [id=501, type=quantize_per_tensor];
+"502 dequantize_per_tensor_default_61" [id=502, type=dequantize_per_tensor];
+"503 _param_constant135" [id=503, type=get_attr];
+"504 conv2d_51_scale_0" [id=504, type=get_attr];
+"505 conv2d_51_zero_point_0" [id=505, type=get_attr];
+"506 quantize_per_channel_default_44" [id=506, type=quantize_per_channel];
+"507 dequantize_per_channel_default_44" [id=507, type=dequantize_per_channel];
+"508 features_12_0_weight_bias_0_0" [id=508, type=get_attr];
+"509 conv2d_51" [id=509, type=conv2d];
+"510 hardswish__17" [id=510, type=hardswish_];
+"511 quantize_per_tensor_default_47" [id=511, type=quantize_per_tensor];
+"512 dequantize_per_tensor_default_62" [id=512, type=dequantize_per_tensor];
+"513 adaptive_avg_pool2d_9" [id=513, type=adaptive_avg_pool2d];
+"514 quantize_per_tensor_default_48" [id=514, type=quantize_per_tensor];
+"515 dequantize_per_tensor_default_63" [id=515, type=dequantize_per_tensor];
+"516 flatten" [id=516, type=flatten];
+"517 _param_constant138" [id=517, type=get_attr];
+"518 linear_scale_0" [id=518, type=get_attr];
+"519 linear_zero_point_0" [id=519, type=get_attr];
+"520 quantize_per_channel_default_45" [id=520, type=quantize_per_channel];
+"521 dequantize_per_channel_default_45" [id=521, type=dequantize_per_channel];
+"522 _param_constant139_0_0" [id=522, type=get_attr];
+"523 linear" [id=523, type=linear];
+"524 hardswish__18" [id=524, type=hardswish_];
+"525 quantize_per_tensor_default_49" [id=525, type=quantize_per_tensor];
+"526 dequantize_per_tensor_default_64" [id=526, type=dequantize_per_tensor];
+"527 dropout_" [id=527, type=dropout_];
+"528 _param_constant140" [id=528, type=get_attr];
+"529 linear_1_scale_0" [id=529, type=get_attr];
+"530 linear_1_zero_point_0" [id=530, type=get_attr];
+"531 quantize_per_channel_default_46" [id=531, type=quantize_per_channel];
+"532 dequantize_per_channel_default_46" [id=532, type=dequantize_per_channel];
+"533 _param_constant141_0_0" [id=533, type=get_attr];
+"534 linear_1" [id=534, type=linear];
+"535 output" [id=535, type=output];
+"0 arg0_1" -> "1 quantize_per_tensor_default";
+"1 quantize_per_tensor_default" -> "2 dequantize_per_tensor_default";
+"2 dequantize_per_tensor_default" -> "9 conv2d";
+"3 _param_constant0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "7 dequantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "6 quantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "7 dequantize_per_channel_default";
+"6 quantize_per_channel_default" -> "7 dequantize_per_channel_default";
+"7 dequantize_per_channel_default" -> "9 conv2d";
+"8 features_0_0_weight_bias_0_0" -> "9 conv2d";
+"9 conv2d" -> "12 hardswish_";
+"10 hardswish__scale_0" -> "13 quantize_per_channel_default_1";
+"10 hardswish__scale_0" -> "14 dequantize_per_channel_default_1";
+"11 hardswish__zero_point_0" -> "13 quantize_per_channel_default_1";
+"11 hardswish__zero_point_0" -> "14 dequantize_per_channel_default_1";
+"12 hardswish_" -> "13 quantize_per_channel_default_1";
+"13 quantize_per_channel_default_1" -> "14 dequantize_per_channel_default_1";
+"14 dequantize_per_channel_default_1" -> "21 conv2d_1";
+"15 _param_constant3" -> "18 quantize_per_channel_default_2";
+"16 conv2d_1_scale_0" -> "18 quantize_per_channel_default_2";
+"16 conv2d_1_scale_0" -> "19 dequantize_per_channel_default_2";
+"17 conv2d_1_zero_point_0" -> "18 quantize_per_channel_default_2";
+"17 conv2d_1_zero_point_0" -> "19 dequantize_per_channel_default_2";
+"18 quantize_per_channel_default_2" -> "19 dequantize_per_channel_default_2";
+"19 dequantize_per_channel_default_2" -> "21 conv2d_1";
+"20 features_1_block_0_0_weight_bias_0_0" -> "21 conv2d_1";
+"21 conv2d_1" -> "22 relu_";
+"22 relu_" -> "23 quantize_per_tensor_default_1";
+"23 quantize_per_tensor_default_1" -> "24 dequantize_per_tensor_default_2";
+"23 quantize_per_tensor_default_1" -> "25 dequantize_per_tensor_default_1";
+"24 dequantize_per_tensor_default_2" -> "37 mul";
+"25 dequantize_per_tensor_default_1" -> "26 adaptive_avg_pool2d";
+"26 adaptive_avg_pool2d" -> "29 conv2d_2";
+"27 _param_constant6" -> "29 conv2d_2";
+"28 _param_constant7_0_0" -> "29 conv2d_2";
+"29 conv2d_2" -> "30 relu";
+"30 relu" -> "33 conv2d_3";
+"31 _param_constant8" -> "33 conv2d_3";
+"32 _param_constant9_0_0" -> "33 conv2d_3";
+"33 conv2d_3" -> "34 hardsigmoid";
+"34 hardsigmoid" -> "35 quantize_per_tensor_default_2";
+"35 quantize_per_tensor_default_2" -> "36 dequantize_per_tensor_default_3";
+"36 dequantize_per_tensor_default_3" -> "37 mul";
+"37 mul" -> "38 quantize_per_tensor_default_3";
+"38 quantize_per_tensor_default_3" -> "39 dequantize_per_tensor_default_4";
+"39 dequantize_per_tensor_default_4" -> "46 conv2d_4";
+"40 _param_constant10" -> "43 quantize_per_channel_default_3";
+"41 conv2d_4_scale_0" -> "43 quantize_per_channel_default_3";
+"41 conv2d_4_scale_0" -> "44 dequantize_per_channel_default_3";
+"42 conv2d_4_zero_point_0" -> "43 quantize_per_channel_default_3";
+"42 conv2d_4_zero_point_0" -> "44 dequantize_per_channel_default_3";
+"43 quantize_per_channel_default_3" -> "44 dequantize_per_channel_default_3";
+"44 dequantize_per_channel_default_3" -> "46 conv2d_4";
+"45 features_1_block_2_0_weight_bias_0_0" -> "46 conv2d_4";
+"46 conv2d_4" -> "47 quantize_per_tensor_default_4";
+"47 quantize_per_tensor_default_4" -> "48 dequantize_per_tensor_default_5";
+"48 dequantize_per_tensor_default_5" -> "55 conv2d_5";
+"49 _param_constant13" -> "52 quantize_per_channel_default_4";
+"50 conv2d_5_scale_0" -> "52 quantize_per_channel_default_4";
+"50 conv2d_5_scale_0" -> "53 dequantize_per_channel_default_4";
+"51 conv2d_5_zero_point_0" -> "52 quantize_per_channel_default_4";
+"51 conv2d_5_zero_point_0" -> "53 dequantize_per_channel_default_4";
+"52 quantize_per_channel_default_4" -> "53 dequantize_per_channel_default_4";
+"53 dequantize_per_channel_default_4" -> "55 conv2d_5";
+"54 features_2_block_0_0_weight_bias_0_0" -> "55 conv2d_5";
+"55 conv2d_5" -> "58 relu__1";
+"56 relu__1_scale_0" -> "59 quantize_per_channel_default_5";
+"56 relu__1_scale_0" -> "60 dequantize_per_channel_default_5";
+"57 relu__1_zero_point_0" -> "59 quantize_per_channel_default_5";
+"57 relu__1_zero_point_0" -> "60 dequantize_per_channel_default_5";
+"58 relu__1" -> "59 quantize_per_channel_default_5";
+"59 quantize_per_channel_default_5" -> "60 dequantize_per_channel_default_5";
+"60 dequantize_per_channel_default_5" -> "67 conv2d_6";
+"61 _param_constant16" -> "64 quantize_per_channel_default_6";
+"62 conv2d_6_scale_0" -> "64 quantize_per_channel_default_6";
+"62 conv2d_6_scale_0" -> "65 dequantize_per_channel_default_6";
+"63 conv2d_6_zero_point_0" -> "64 quantize_per_channel_default_6";
+"63 conv2d_6_zero_point_0" -> "65 dequantize_per_channel_default_6";
+"64 quantize_per_channel_default_6" -> "65 dequantize_per_channel_default_6";
+"65 dequantize_per_channel_default_6" -> "67 conv2d_6";
+"66 features_2_block_1_0_weight_bias_0_0" -> "67 conv2d_6";
+"67 conv2d_6" -> "68 relu__2";
+"68 relu__2" -> "69 quantize_per_tensor_default_5";
+"69 quantize_per_tensor_default_5" -> "70 dequantize_per_tensor_default_6";
+"70 dequantize_per_tensor_default_6" -> "77 conv2d_7";
+"71 _param_constant19" -> "74 quantize_per_channel_default_7";
+"72 conv2d_7_scale_0" -> "74 quantize_per_channel_default_7";
+"72 conv2d_7_scale_0" -> "75 dequantize_per_channel_default_7";
+"73 conv2d_7_zero_point_0" -> "74 quantize_per_channel_default_7";
+"73 conv2d_7_zero_point_0" -> "75 dequantize_per_channel_default_7";
+"74 quantize_per_channel_default_7" -> "75 dequantize_per_channel_default_7";
+"75 dequantize_per_channel_default_7" -> "77 conv2d_7";
+"76 features_2_block_2_0_weight_bias_0_0" -> "77 conv2d_7";
+"77 conv2d_7" -> "78 quantize_per_tensor_default_6";
+"78 quantize_per_tensor_default_6" -> "79 dequantize_per_tensor_default_8";
+"78 quantize_per_tensor_default_6" -> "80 dequantize_per_tensor_default_7";
+"79 dequantize_per_tensor_default_8" -> "112 add_";
+"80 dequantize_per_tensor_default_7" -> "87 conv2d_8";
+"81 _param_constant22" -> "84 quantize_per_channel_default_8";
+"82 conv2d_8_scale_0" -> "84 quantize_per_channel_default_8";
+"82 conv2d_8_scale_0" -> "85 dequantize_per_channel_default_8";
+"83 conv2d_8_zero_point_0" -> "84 quantize_per_channel_default_8";
+"83 conv2d_8_zero_point_0" -> "85 dequantize_per_channel_default_8";
+"84 quantize_per_channel_default_8" -> "85 dequantize_per_channel_default_8";
+"85 dequantize_per_channel_default_8" -> "87 conv2d_8";
+"86 features_3_block_0_0_weight_bias_0_0" -> "87 conv2d_8";
+"87 conv2d_8" -> "90 relu__3";
+"88 relu__3_scale_0" -> "91 quantize_per_channel_default_9";
+"88 relu__3_scale_0" -> "92 dequantize_per_channel_default_9";
+"89 relu__3_zero_point_0" -> "91 quantize_per_channel_default_9";
+"89 relu__3_zero_point_0" -> "92 dequantize_per_channel_default_9";
+"90 relu__3" -> "91 quantize_per_channel_default_9";
+"91 quantize_per_channel_default_9" -> "92 dequantize_per_channel_default_9";
+"92 dequantize_per_channel_default_9" -> "99 conv2d_9";
+"93 _param_constant25" -> "96 quantize_per_channel_default_10";
+"94 conv2d_9_scale_0" -> "96 quantize_per_channel_default_10";
+"94 conv2d_9_scale_0" -> "97 dequantize_per_channel_default_10";
+"95 conv2d_9_zero_point_0" -> "96 quantize_per_channel_default_10";
+"95 conv2d_9_zero_point_0" -> "97 dequantize_per_channel_default_10";
+"96 quantize_per_channel_default_10" -> "97 dequantize_per_channel_default_10";
+"97 dequantize_per_channel_default_10" -> "99 conv2d_9";
+"98 features_3_block_1_0_weight_bias_0_0" -> "99 conv2d_9";
+"99 conv2d_9" -> "100 relu__4";
+"100 relu__4" -> "101 quantize_per_tensor_default_7";
+"101 quantize_per_tensor_default_7" -> "102 dequantize_per_tensor_default_9";
+"102 dequantize_per_tensor_default_9" -> "109 conv2d_10";
+"103 _param_constant28" -> "106 quantize_per_channel_default_11";
+"104 conv2d_10_scale_0" -> "106 quantize_per_channel_default_11";
+"104 conv2d_10_scale_0" -> "107 dequantize_per_channel_default_11";
+"105 conv2d_10_zero_point_0" -> "106 quantize_per_channel_default_11";
+"105 conv2d_10_zero_point_0" -> "107 dequantize_per_channel_default_11";
+"106 quantize_per_channel_default_11" -> "107 dequantize_per_channel_default_11";
+"107 dequantize_per_channel_default_11" -> "109 conv2d_10";
+"108 features_3_block_2_0_weight_bias_0_0" -> "109 conv2d_10";
+"109 conv2d_10" -> "110 quantize_per_tensor_default_8";
+"110 quantize_per_tensor_default_8" -> "111 dequantize_per_tensor_default_10";
+"111 dequantize_per_tensor_default_10" -> "112 add_";
+"112 add_" -> "113 quantize_per_tensor_default_9";
+"113 quantize_per_tensor_default_9" -> "114 dequantize_per_tensor_default_11";
+"114 dequantize_per_tensor_default_11" -> "121 conv2d_11";
+"115 _param_constant31" -> "118 quantize_per_channel_default_12";
+"116 conv2d_11_scale_0" -> "118 quantize_per_channel_default_12";
+"116 conv2d_11_scale_0" -> "119 dequantize_per_channel_default_12";
+"117 conv2d_11_zero_point_0" -> "118 quantize_per_channel_default_12";
+"117 conv2d_11_zero_point_0" -> "119 dequantize_per_channel_default_12";
+"118 quantize_per_channel_default_12" -> "119 dequantize_per_channel_default_12";
+"119 dequantize_per_channel_default_12" -> "121 conv2d_11";
+"120 features_4_block_0_0_weight_bias_0_0" -> "121 conv2d_11";
+"121 conv2d_11" -> "124 hardswish__1";
+"122 hardswish__1_scale_0" -> "125 quantize_per_channel_default_13";
+"122 hardswish__1_scale_0" -> "126 dequantize_per_channel_default_13";
+"123 hardswish__1_zero_point_0" -> "125 quantize_per_channel_default_13";
+"123 hardswish__1_zero_point_0" -> "126 dequantize_per_channel_default_13";
+"124 hardswish__1" -> "125 quantize_per_channel_default_13";
+"125 quantize_per_channel_default_13" -> "126 dequantize_per_channel_default_13";
+"126 dequantize_per_channel_default_13" -> "133 conv2d_12";
+"127 _param_constant34" -> "130 quantize_per_channel_default_14";
+"128 conv2d_12_scale_0" -> "130 quantize_per_channel_default_14";
+"128 conv2d_12_scale_0" -> "131 dequantize_per_channel_default_14";
+"129 conv2d_12_zero_point_0" -> "130 quantize_per_channel_default_14";
+"129 conv2d_12_zero_point_0" -> "131 dequantize_per_channel_default_14";
+"130 quantize_per_channel_default_14" -> "131 dequantize_per_channel_default_14";
+"131 dequantize_per_channel_default_14" -> "133 conv2d_12";
+"132 features_4_block_1_0_weight_bias_0_0" -> "133 conv2d_12";
+"133 conv2d_12" -> "134 hardswish__2";
+"134 hardswish__2" -> "135 quantize_per_tensor_default_10";
+"135 quantize_per_tensor_default_10" -> "136 dequantize_per_tensor_default_13";
+"135 quantize_per_tensor_default_10" -> "137 dequantize_per_tensor_default_12";
+"136 dequantize_per_tensor_default_13" -> "149 mul_1";
+"137 dequantize_per_tensor_default_12" -> "138 adaptive_avg_pool2d_1";
+"138 adaptive_avg_pool2d_1" -> "141 conv2d_13";
+"139 _param_constant37" -> "141 conv2d_13";
+"140 _param_constant38_0_0" -> "141 conv2d_13";
+"141 conv2d_13" -> "142 relu_1";
+"142 relu_1" -> "145 conv2d_14";
+"143 _param_constant39" -> "145 conv2d_14";
+"144 _param_constant40_0_0" -> "145 conv2d_14";
+"145 conv2d_14" -> "146 hardsigmoid_1";
+"146 hardsigmoid_1" -> "147 quantize_per_tensor_default_11";
+"147 quantize_per_tensor_default_11" -> "148 dequantize_per_tensor_default_14";
+"148 dequantize_per_tensor_default_14" -> "149 mul_1";
+"149 mul_1" -> "150 quantize_per_tensor_default_12";
+"150 quantize_per_tensor_default_12" -> "151 dequantize_per_tensor_default_15";
+"151 dequantize_per_tensor_default_15" -> "158 conv2d_15";
+"152 _param_constant41" -> "155 quantize_per_channel_default_15";
+"153 conv2d_15_scale_0" -> "155 quantize_per_channel_default_15";
+"153 conv2d_15_scale_0" -> "156 dequantize_per_channel_default_15";
+"154 conv2d_15_zero_point_0" -> "155 quantize_per_channel_default_15";
+"154 conv2d_15_zero_point_0" -> "156 dequantize_per_channel_default_15";
+"155 quantize_per_channel_default_15" -> "156 dequantize_per_channel_default_15";
+"156 dequantize_per_channel_default_15" -> "158 conv2d_15";
+"157 features_4_block_3_0_weight_bias_0_0" -> "158 conv2d_15";
+"158 conv2d_15" -> "159 quantize_per_tensor_default_13";
+"159 quantize_per_tensor_default_13" -> "160 dequantize_per_tensor_default_17";
+"159 quantize_per_tensor_default_13" -> "161 dequantize_per_tensor_default_16";
+"160 dequantize_per_tensor_default_17" -> "208 add__1";
+"161 dequantize_per_tensor_default_16" -> "168 conv2d_16";
+"162 _param_constant44" -> "165 quantize_per_channel_default_16";
+"163 conv2d_16_scale_0" -> "165 quantize_per_channel_default_16";
+"163 conv2d_16_scale_0" -> "166 dequantize_per_channel_default_16";
+"164 conv2d_16_zero_point_0" -> "165 quantize_per_channel_default_16";
+"164 conv2d_16_zero_point_0" -> "166 dequantize_per_channel_default_16";
+"165 quantize_per_channel_default_16" -> "166 dequantize_per_channel_default_16";
+"166 dequantize_per_channel_default_16" -> "168 conv2d_16";
+"167 features_5_block_0_0_weight_bias_0_0" -> "168 conv2d_16";
+"168 conv2d_16" -> "171 hardswish__3";
+"169 hardswish__3_scale_0" -> "172 quantize_per_channel_default_17";
+"169 hardswish__3_scale_0" -> "173 dequantize_per_channel_default_17";
+"170 hardswish__3_zero_point_0" -> "172 quantize_per_channel_default_17";
+"170 hardswish__3_zero_point_0" -> "173 dequantize_per_channel_default_17";
+"171 hardswish__3" -> "172 quantize_per_channel_default_17";
+"172 quantize_per_channel_default_17" -> "173 dequantize_per_channel_default_17";
+"173 dequantize_per_channel_default_17" -> "180 conv2d_17";
+"174 _param_constant47" -> "177 quantize_per_channel_default_18";
+"175 conv2d_17_scale_0" -> "177 quantize_per_channel_default_18";
+"175 conv2d_17_scale_0" -> "178 dequantize_per_channel_default_18";
+"176 conv2d_17_zero_point_0" -> "177 quantize_per_channel_default_18";
+"176 conv2d_17_zero_point_0" -> "178 dequantize_per_channel_default_18";
+"177 quantize_per_channel_default_18" -> "178 dequantize_per_channel_default_18";
+"178 dequantize_per_channel_default_18" -> "180 conv2d_17";
+"179 features_5_block_1_0_weight_bias_0_0" -> "180 conv2d_17";
+"180 conv2d_17" -> "181 hardswish__4";
+"181 hardswish__4" -> "182 quantize_per_tensor_default_14";
+"182 quantize_per_tensor_default_14" -> "183 dequantize_per_tensor_default_19";
+"182 quantize_per_tensor_default_14" -> "184 dequantize_per_tensor_default_18";
+"183 dequantize_per_tensor_default_19" -> "196 mul_2";
+"184 dequantize_per_tensor_default_18" -> "185 adaptive_avg_pool2d_2";
+"185 adaptive_avg_pool2d_2" -> "188 conv2d_18";
+"186 _param_constant50" -> "188 conv2d_18";
+"187 _param_constant51_0_0" -> "188 conv2d_18";
+"188 conv2d_18" -> "189 relu_2";
+"189 relu_2" -> "192 conv2d_19";
+"190 _param_constant52" -> "192 conv2d_19";
+"191 _param_constant53_0_0" -> "192 conv2d_19";
+"192 conv2d_19" -> "193 hardsigmoid_2";
+"193 hardsigmoid_2" -> "194 quantize_per_tensor_default_15";
+"194 quantize_per_tensor_default_15" -> "195 dequantize_per_tensor_default_20";
+"195 dequantize_per_tensor_default_20" -> "196 mul_2";
+"196 mul_2" -> "197 quantize_per_tensor_default_16";
+"197 quantize_per_tensor_default_16" -> "198 dequantize_per_tensor_default_21";
+"198 dequantize_per_tensor_default_21" -> "205 conv2d_20";
+"199 _param_constant54" -> "202 quantize_per_channel_default_19";
+"200 conv2d_20_scale_0" -> "202 quantize_per_channel_default_19";
+"200 conv2d_20_scale_0" -> "203 dequantize_per_channel_default_19";
+"201 conv2d_20_zero_point_0" -> "202 quantize_per_channel_default_19";
+"201 conv2d_20_zero_point_0" -> "203 dequantize_per_channel_default_19";
+"202 quantize_per_channel_default_19" -> "203 dequantize_per_channel_default_19";
+"203 dequantize_per_channel_default_19" -> "205 conv2d_20";
+"204 features_5_block_3_0_weight_bias_0_0" -> "205 conv2d_20";
+"205 conv2d_20" -> "206 quantize_per_tensor_default_17";
+"206 quantize_per_tensor_default_17" -> "207 dequantize_per_tensor_default_22";
+"207 dequantize_per_tensor_default_22" -> "208 add__1";
+"208 add__1" -> "209 quantize_per_tensor_default_18";
+"209 quantize_per_tensor_default_18" -> "210 dequantize_per_tensor_default_24";
+"209 quantize_per_tensor_default_18" -> "211 dequantize_per_tensor_default_23";
+"210 dequantize_per_tensor_default_24" -> "258 add__2";
+"211 dequantize_per_tensor_default_23" -> "218 conv2d_21";
+"212 _param_constant57" -> "215 quantize_per_channel_default_20";
+"213 conv2d_21_scale_0" -> "215 quantize_per_channel_default_20";
+"213 conv2d_21_scale_0" -> "216 dequantize_per_channel_default_20";
+"214 conv2d_21_zero_point_0" -> "215 quantize_per_channel_default_20";
+"214 conv2d_21_zero_point_0" -> "216 dequantize_per_channel_default_20";
+"215 quantize_per_channel_default_20" -> "216 dequantize_per_channel_default_20";
+"216 dequantize_per_channel_default_20" -> "218 conv2d_21";
+"217 features_6_block_0_0_weight_bias_0_0" -> "218 conv2d_21";
+"218 conv2d_21" -> "221 hardswish__5";
+"219 hardswish__5_scale_0" -> "222 quantize_per_channel_default_21";
+"219 hardswish__5_scale_0" -> "223 dequantize_per_channel_default_21";
+"220 hardswish__5_zero_point_0" -> "222 quantize_per_channel_default_21";
+"220 hardswish__5_zero_point_0" -> "223 dequantize_per_channel_default_21";
+"221 hardswish__5" -> "222 quantize_per_channel_default_21";
+"222 quantize_per_channel_default_21" -> "223 dequantize_per_channel_default_21";
+"223 dequantize_per_channel_default_21" -> "230 conv2d_22";
+"224 _param_constant60" -> "227 quantize_per_channel_default_22";
+"225 conv2d_22_scale_0" -> "227 quantize_per_channel_default_22";
+"225 conv2d_22_scale_0" -> "228 dequantize_per_channel_default_22";
+"226 conv2d_22_zero_point_0" -> "227 quantize_per_channel_default_22";
+"226 conv2d_22_zero_point_0" -> "228 dequantize_per_channel_default_22";
+"227 quantize_per_channel_default_22" -> "228 dequantize_per_channel_default_22";
+"228 dequantize_per_channel_default_22" -> "230 conv2d_22";
+"229 features_6_block_1_0_weight_bias_0_0" -> "230 conv2d_22";
+"230 conv2d_22" -> "231 hardswish__6";
+"231 hardswish__6" -> "232 quantize_per_tensor_default_19";
+"232 quantize_per_tensor_default_19" -> "233 dequantize_per_tensor_default_26";
+"232 quantize_per_tensor_default_19" -> "234 dequantize_per_tensor_default_25";
+"233 dequantize_per_tensor_default_26" -> "246 mul_3";
+"234 dequantize_per_tensor_default_25" -> "235 adaptive_avg_pool2d_3";
+"235 adaptive_avg_pool2d_3" -> "238 conv2d_23";
+"236 _param_constant63" -> "238 conv2d_23";
+"237 _param_constant64_0_0" -> "238 conv2d_23";
+"238 conv2d_23" -> "239 relu_3";
+"239 relu_3" -> "242 conv2d_24";
+"240 _param_constant65" -> "242 conv2d_24";
+"241 _param_constant66_0_0" -> "242 conv2d_24";
+"242 conv2d_24" -> "243 hardsigmoid_3";
+"243 hardsigmoid_3" -> "244 quantize_per_tensor_default_20";
+"244 quantize_per_tensor_default_20" -> "245 dequantize_per_tensor_default_27";
+"245 dequantize_per_tensor_default_27" -> "246 mul_3";
+"246 mul_3" -> "247 quantize_per_tensor_default_21";
+"247 quantize_per_tensor_default_21" -> "248 dequantize_per_tensor_default_28";
+"248 dequantize_per_tensor_default_28" -> "255 conv2d_25";
+"249 _param_constant67" -> "252 quantize_per_channel_default_23";
+"250 conv2d_25_scale_0" -> "252 quantize_per_channel_default_23";
+"250 conv2d_25_scale_0" -> "253 dequantize_per_channel_default_23";
+"251 conv2d_25_zero_point_0" -> "252 quantize_per_channel_default_23";
+"251 conv2d_25_zero_point_0" -> "253 dequantize_per_channel_default_23";
+"252 quantize_per_channel_default_23" -> "253 dequantize_per_channel_default_23";
+"253 dequantize_per_channel_default_23" -> "255 conv2d_25";
+"254 features_6_block_3_0_weight_bias_0_0" -> "255 conv2d_25";
+"255 conv2d_25" -> "256 quantize_per_tensor_default_22";
+"256 quantize_per_tensor_default_22" -> "257 dequantize_per_tensor_default_29";
+"257 dequantize_per_tensor_default_29" -> "258 add__2";
+"258 add__2" -> "259 quantize_per_tensor_default_23";
+"259 quantize_per_tensor_default_23" -> "260 dequantize_per_tensor_default_30";
+"260 dequantize_per_tensor_default_30" -> "267 conv2d_26";
+"261 _param_constant70" -> "264 quantize_per_channel_default_24";
+"262 conv2d_26_scale_0" -> "264 quantize_per_channel_default_24";
+"262 conv2d_26_scale_0" -> "265 dequantize_per_channel_default_24";
+"263 conv2d_26_zero_point_0" -> "264 quantize_per_channel_default_24";
+"263 conv2d_26_zero_point_0" -> "265 dequantize_per_channel_default_24";
+"264 quantize_per_channel_default_24" -> "265 dequantize_per_channel_default_24";
+"265 dequantize_per_channel_default_24" -> "267 conv2d_26";
+"266 features_7_block_0_0_weight_bias_0_0" -> "267 conv2d_26";
+"267 conv2d_26" -> "270 hardswish__7";
+"268 hardswish__7_scale_0" -> "271 quantize_per_channel_default_25";
+"268 hardswish__7_scale_0" -> "272 dequantize_per_channel_default_25";
+"269 hardswish__7_zero_point_0" -> "271 quantize_per_channel_default_25";
+"269 hardswish__7_zero_point_0" -> "272 dequantize_per_channel_default_25";
+"270 hardswish__7" -> "271 quantize_per_channel_default_25";
+"271 quantize_per_channel_default_25" -> "272 dequantize_per_channel_default_25";
+"272 dequantize_per_channel_default_25" -> "279 conv2d_27";
+"273 _param_constant73" -> "276 quantize_per_channel_default_26";
+"274 conv2d_27_scale_0" -> "276 quantize_per_channel_default_26";
+"274 conv2d_27_scale_0" -> "277 dequantize_per_channel_default_26";
+"275 conv2d_27_zero_point_0" -> "276 quantize_per_channel_default_26";
+"275 conv2d_27_zero_point_0" -> "277 dequantize_per_channel_default_26";
+"276 quantize_per_channel_default_26" -> "277 dequantize_per_channel_default_26";
+"277 dequantize_per_channel_default_26" -> "279 conv2d_27";
+"278 features_7_block_1_0_weight_bias_0_0" -> "279 conv2d_27";
+"279 conv2d_27" -> "280 hardswish__8";
+"280 hardswish__8" -> "281 quantize_per_tensor_default_24";
+"281 quantize_per_tensor_default_24" -> "282 dequantize_per_tensor_default_32";
+"281 quantize_per_tensor_default_24" -> "283 dequantize_per_tensor_default_31";
+"282 dequantize_per_tensor_default_32" -> "295 mul_4";
+"283 dequantize_per_tensor_default_31" -> "284 adaptive_avg_pool2d_4";
+"284 adaptive_avg_pool2d_4" -> "287 conv2d_28";
+"285 _param_constant76" -> "287 conv2d_28";
+"286 _param_constant77_0_0" -> "287 conv2d_28";
+"287 conv2d_28" -> "288 relu_4";
+"288 relu_4" -> "291 conv2d_29";
+"289 _param_constant78" -> "291 conv2d_29";
+"290 _param_constant79_0_0" -> "291 conv2d_29";
+"291 conv2d_29" -> "292 hardsigmoid_4";
+"292 hardsigmoid_4" -> "293 quantize_per_tensor_default_25";
+"293 quantize_per_tensor_default_25" -> "294 dequantize_per_tensor_default_33";
+"294 dequantize_per_tensor_default_33" -> "295 mul_4";
+"295 mul_4" -> "296 quantize_per_tensor_default_26";
+"296 quantize_per_tensor_default_26" -> "297 dequantize_per_tensor_default_34";
+"297 dequantize_per_tensor_default_34" -> "304 conv2d_30";
+"298 _param_constant80" -> "301 quantize_per_channel_default_27";
+"299 conv2d_30_scale_0" -> "301 quantize_per_channel_default_27";
+"299 conv2d_30_scale_0" -> "302 dequantize_per_channel_default_27";
+"300 conv2d_30_zero_point_0" -> "301 quantize_per_channel_default_27";
+"300 conv2d_30_zero_point_0" -> "302 dequantize_per_channel_default_27";
+"301 quantize_per_channel_default_27" -> "302 dequantize_per_channel_default_27";
+"302 dequantize_per_channel_default_27" -> "304 conv2d_30";
+"303 features_7_block_3_0_weight_bias_0_0" -> "304 conv2d_30";
+"304 conv2d_30" -> "305 quantize_per_tensor_default_27";
+"305 quantize_per_tensor_default_27" -> "306 dequantize_per_tensor_default_36";
+"305 quantize_per_tensor_default_27" -> "307 dequantize_per_tensor_default_35";
+"306 dequantize_per_tensor_default_36" -> "354 add__3";
+"307 dequantize_per_tensor_default_35" -> "314 conv2d_31";
+"308 _param_constant83" -> "311 quantize_per_channel_default_28";
+"309 conv2d_31_scale_0" -> "311 quantize_per_channel_default_28";
+"309 conv2d_31_scale_0" -> "312 dequantize_per_channel_default_28";
+"310 conv2d_31_zero_point_0" -> "311 quantize_per_channel_default_28";
+"310 conv2d_31_zero_point_0" -> "312 dequantize_per_channel_default_28";
+"311 quantize_per_channel_default_28" -> "312 dequantize_per_channel_default_28";
+"312 dequantize_per_channel_default_28" -> "314 conv2d_31";
+"313 features_8_block_0_0_weight_bias_0_0" -> "314 conv2d_31";
+"314 conv2d_31" -> "317 hardswish__9";
+"315 hardswish__9_scale_0" -> "318 quantize_per_channel_default_29";
+"315 hardswish__9_scale_0" -> "319 dequantize_per_channel_default_29";
+"316 hardswish__9_zero_point_0" -> "318 quantize_per_channel_default_29";
+"316 hardswish__9_zero_point_0" -> "319 dequantize_per_channel_default_29";
+"317 hardswish__9" -> "318 quantize_per_channel_default_29";
+"318 quantize_per_channel_default_29" -> "319 dequantize_per_channel_default_29";
+"319 dequantize_per_channel_default_29" -> "326 conv2d_32";
+"320 _param_constant86" -> "323 quantize_per_channel_default_30";
+"321 conv2d_32_scale_0" -> "323 quantize_per_channel_default_30";
+"321 conv2d_32_scale_0" -> "324 dequantize_per_channel_default_30";
+"322 conv2d_32_zero_point_0" -> "323 quantize_per_channel_default_30";
+"322 conv2d_32_zero_point_0" -> "324 dequantize_per_channel_default_30";
+"323 quantize_per_channel_default_30" -> "324 dequantize_per_channel_default_30";
+"324 dequantize_per_channel_default_30" -> "326 conv2d_32";
+"325 features_8_block_1_0_weight_bias_0_0" -> "326 conv2d_32";
+"326 conv2d_32" -> "327 hardswish__10";
+"327 hardswish__10" -> "328 quantize_per_tensor_default_28";
+"328 quantize_per_tensor_default_28" -> "329 dequantize_per_tensor_default_38";
+"328 quantize_per_tensor_default_28" -> "330 dequantize_per_tensor_default_37";
+"329 dequantize_per_tensor_default_38" -> "342 mul_5";
+"330 dequantize_per_tensor_default_37" -> "331 adaptive_avg_pool2d_5";
+"331 adaptive_avg_pool2d_5" -> "334 conv2d_33";
+"332 _param_constant89" -> "334 conv2d_33";
+"333 _param_constant90_0_0" -> "334 conv2d_33";
+"334 conv2d_33" -> "335 relu_5";
+"335 relu_5" -> "338 conv2d_34";
+"336 _param_constant91" -> "338 conv2d_34";
+"337 _param_constant92_0_0" -> "338 conv2d_34";
+"338 conv2d_34" -> "339 hardsigmoid_5";
+"339 hardsigmoid_5" -> "340 quantize_per_tensor_default_29";
+"340 quantize_per_tensor_default_29" -> "341 dequantize_per_tensor_default_39";
+"341 dequantize_per_tensor_default_39" -> "342 mul_5";
+"342 mul_5" -> "343 quantize_per_tensor_default_30";
+"343 quantize_per_tensor_default_30" -> "344 dequantize_per_tensor_default_40";
+"344 dequantize_per_tensor_default_40" -> "351 conv2d_35";
+"345 _param_constant93" -> "348 quantize_per_channel_default_31";
+"346 conv2d_35_scale_0" -> "348 quantize_per_channel_default_31";
+"346 conv2d_35_scale_0" -> "349 dequantize_per_channel_default_31";
+"347 conv2d_35_zero_point_0" -> "348 quantize_per_channel_default_31";
+"347 conv2d_35_zero_point_0" -> "349 dequantize_per_channel_default_31";
+"348 quantize_per_channel_default_31" -> "349 dequantize_per_channel_default_31";
+"349 dequantize_per_channel_default_31" -> "351 conv2d_35";
+"350 features_8_block_3_0_weight_bias_0_0" -> "351 conv2d_35";
+"351 conv2d_35" -> "352 quantize_per_tensor_default_31";
+"352 quantize_per_tensor_default_31" -> "353 dequantize_per_tensor_default_41";
+"353 dequantize_per_tensor_default_41" -> "354 add__3";
+"354 add__3" -> "355 quantize_per_tensor_default_32";
+"355 quantize_per_tensor_default_32" -> "356 dequantize_per_tensor_default_42";
+"356 dequantize_per_tensor_default_42" -> "363 conv2d_36";
+"357 _param_constant96" -> "360 quantize_per_channel_default_32";
+"358 conv2d_36_scale_0" -> "360 quantize_per_channel_default_32";
+"358 conv2d_36_scale_0" -> "361 dequantize_per_channel_default_32";
+"359 conv2d_36_zero_point_0" -> "360 quantize_per_channel_default_32";
+"359 conv2d_36_zero_point_0" -> "361 dequantize_per_channel_default_32";
+"360 quantize_per_channel_default_32" -> "361 dequantize_per_channel_default_32";
+"361 dequantize_per_channel_default_32" -> "363 conv2d_36";
+"362 features_9_block_0_0_weight_bias_0_0" -> "363 conv2d_36";
+"363 conv2d_36" -> "366 hardswish__11";
+"364 hardswish__11_scale_0" -> "367 quantize_per_channel_default_33";
+"364 hardswish__11_scale_0" -> "368 dequantize_per_channel_default_33";
+"365 hardswish__11_zero_point_0" -> "367 quantize_per_channel_default_33";
+"365 hardswish__11_zero_point_0" -> "368 dequantize_per_channel_default_33";
+"366 hardswish__11" -> "367 quantize_per_channel_default_33";
+"367 quantize_per_channel_default_33" -> "368 dequantize_per_channel_default_33";
+"368 dequantize_per_channel_default_33" -> "375 conv2d_37";
+"369 _param_constant99" -> "372 quantize_per_channel_default_34";
+"370 conv2d_37_scale_0" -> "372 quantize_per_channel_default_34";
+"370 conv2d_37_scale_0" -> "373 dequantize_per_channel_default_34";
+"371 conv2d_37_zero_point_0" -> "372 quantize_per_channel_default_34";
+"371 conv2d_37_zero_point_0" -> "373 dequantize_per_channel_default_34";
+"372 quantize_per_channel_default_34" -> "373 dequantize_per_channel_default_34";
+"373 dequantize_per_channel_default_34" -> "375 conv2d_37";
+"374 features_9_block_1_0_weight_bias_0_0" -> "375 conv2d_37";
+"375 conv2d_37" -> "376 hardswish__12";
+"376 hardswish__12" -> "377 quantize_per_tensor_default_33";
+"377 quantize_per_tensor_default_33" -> "378 dequantize_per_tensor_default_44";
+"377 quantize_per_tensor_default_33" -> "379 dequantize_per_tensor_default_43";
+"378 dequantize_per_tensor_default_44" -> "391 mul_6";
+"379 dequantize_per_tensor_default_43" -> "380 adaptive_avg_pool2d_6";
+"380 adaptive_avg_pool2d_6" -> "383 conv2d_38";
+"381 _param_constant102" -> "383 conv2d_38";
+"382 _param_constant103_0_0" -> "383 conv2d_38";
+"383 conv2d_38" -> "384 relu_6";
+"384 relu_6" -> "387 conv2d_39";
+"385 _param_constant104" -> "387 conv2d_39";
+"386 _param_constant105_0_0" -> "387 conv2d_39";
+"387 conv2d_39" -> "388 hardsigmoid_6";
+"388 hardsigmoid_6" -> "389 quantize_per_tensor_default_34";
+"389 quantize_per_tensor_default_34" -> "390 dequantize_per_tensor_default_45";
+"390 dequantize_per_tensor_default_45" -> "391 mul_6";
+"391 mul_6" -> "392 quantize_per_tensor_default_35";
+"392 quantize_per_tensor_default_35" -> "393 dequantize_per_tensor_default_46";
+"393 dequantize_per_tensor_default_46" -> "400 conv2d_40";
+"394 _param_constant106" -> "397 quantize_per_channel_default_35";
+"395 conv2d_40_scale_0" -> "397 quantize_per_channel_default_35";
+"395 conv2d_40_scale_0" -> "398 dequantize_per_channel_default_35";
+"396 conv2d_40_zero_point_0" -> "397 quantize_per_channel_default_35";
+"396 conv2d_40_zero_point_0" -> "398 dequantize_per_channel_default_35";
+"397 quantize_per_channel_default_35" -> "398 dequantize_per_channel_default_35";
+"398 dequantize_per_channel_default_35" -> "400 conv2d_40";
+"399 features_9_block_3_0_weight_bias_0_0" -> "400 conv2d_40";
+"400 conv2d_40" -> "401 quantize_per_tensor_default_36";
+"401 quantize_per_tensor_default_36" -> "402 dequantize_per_tensor_default_48";
+"401 quantize_per_tensor_default_36" -> "403 dequantize_per_tensor_default_47";
+"402 dequantize_per_tensor_default_48" -> "450 add__4";
+"403 dequantize_per_tensor_default_47" -> "410 conv2d_41";
+"404 _param_constant109" -> "407 quantize_per_channel_default_36";
+"405 conv2d_41_scale_0" -> "407 quantize_per_channel_default_36";
+"405 conv2d_41_scale_0" -> "408 dequantize_per_channel_default_36";
+"406 conv2d_41_zero_point_0" -> "407 quantize_per_channel_default_36";
+"406 conv2d_41_zero_point_0" -> "408 dequantize_per_channel_default_36";
+"407 quantize_per_channel_default_36" -> "408 dequantize_per_channel_default_36";
+"408 dequantize_per_channel_default_36" -> "410 conv2d_41";
+"409 features_10_block_0_0_weight_bias_0_0" -> "410 conv2d_41";
+"410 conv2d_41" -> "413 hardswish__13";
+"411 hardswish__13_scale_0" -> "414 quantize_per_channel_default_37";
+"411 hardswish__13_scale_0" -> "415 dequantize_per_channel_default_37";
+"412 hardswish__13_zero_point_0" -> "414 quantize_per_channel_default_37";
+"412 hardswish__13_zero_point_0" -> "415 dequantize_per_channel_default_37";
+"413 hardswish__13" -> "414 quantize_per_channel_default_37";
+"414 quantize_per_channel_default_37" -> "415 dequantize_per_channel_default_37";
+"415 dequantize_per_channel_default_37" -> "422 conv2d_42";
+"416 _param_constant112" -> "419 quantize_per_channel_default_38";
+"417 conv2d_42_scale_0" -> "419 quantize_per_channel_default_38";
+"417 conv2d_42_scale_0" -> "420 dequantize_per_channel_default_38";
+"418 conv2d_42_zero_point_0" -> "419 quantize_per_channel_default_38";
+"418 conv2d_42_zero_point_0" -> "420 dequantize_per_channel_default_38";
+"419 quantize_per_channel_default_38" -> "420 dequantize_per_channel_default_38";
+"420 dequantize_per_channel_default_38" -> "422 conv2d_42";
+"421 features_10_block_1_0_weight_bias_0_0" -> "422 conv2d_42";
+"422 conv2d_42" -> "423 hardswish__14";
+"423 hardswish__14" -> "424 quantize_per_tensor_default_37";
+"424 quantize_per_tensor_default_37" -> "425 dequantize_per_tensor_default_50";
+"424 quantize_per_tensor_default_37" -> "426 dequantize_per_tensor_default_49";
+"425 dequantize_per_tensor_default_50" -> "438 mul_7";
+"426 dequantize_per_tensor_default_49" -> "427 adaptive_avg_pool2d_7";
+"427 adaptive_avg_pool2d_7" -> "430 conv2d_43";
+"428 _param_constant115" -> "430 conv2d_43";
+"429 _param_constant116_0_0" -> "430 conv2d_43";
+"430 conv2d_43" -> "431 relu_7";
+"431 relu_7" -> "434 conv2d_44";
+"432 _param_constant117" -> "434 conv2d_44";
+"433 _param_constant118_0_0" -> "434 conv2d_44";
+"434 conv2d_44" -> "435 hardsigmoid_7";
+"435 hardsigmoid_7" -> "436 quantize_per_tensor_default_38";
+"436 quantize_per_tensor_default_38" -> "437 dequantize_per_tensor_default_51";
+"437 dequantize_per_tensor_default_51" -> "438 mul_7";
+"438 mul_7" -> "439 quantize_per_tensor_default_39";
+"439 quantize_per_tensor_default_39" -> "440 dequantize_per_tensor_default_52";
+"440 dequantize_per_tensor_default_52" -> "447 conv2d_45";
+"441 _param_constant119" -> "444 quantize_per_channel_default_39";
+"442 conv2d_45_scale_0" -> "444 quantize_per_channel_default_39";
+"442 conv2d_45_scale_0" -> "445 dequantize_per_channel_default_39";
+"443 conv2d_45_zero_point_0" -> "444 quantize_per_channel_default_39";
+"443 conv2d_45_zero_point_0" -> "445 dequantize_per_channel_default_39";
+"444 quantize_per_channel_default_39" -> "445 dequantize_per_channel_default_39";
+"445 dequantize_per_channel_default_39" -> "447 conv2d_45";
+"446 features_10_block_3_0_weight_bias_0_0" -> "447 conv2d_45";
+"447 conv2d_45" -> "448 quantize_per_tensor_default_40";
+"448 quantize_per_tensor_default_40" -> "449 dequantize_per_tensor_default_53";
+"449 dequantize_per_tensor_default_53" -> "450 add__4";
+"450 add__4" -> "451 quantize_per_tensor_default_41";
+"451 quantize_per_tensor_default_41" -> "452 dequantize_per_tensor_default_55";
+"451 quantize_per_tensor_default_41" -> "453 dequantize_per_tensor_default_54";
+"452 dequantize_per_tensor_default_55" -> "500 add__5";
+"453 dequantize_per_tensor_default_54" -> "460 conv2d_46";
+"454 _param_constant122" -> "457 quantize_per_channel_default_40";
+"455 conv2d_46_scale_0" -> "457 quantize_per_channel_default_40";
+"455 conv2d_46_scale_0" -> "458 dequantize_per_channel_default_40";
+"456 conv2d_46_zero_point_0" -> "457 quantize_per_channel_default_40";
+"456 conv2d_46_zero_point_0" -> "458 dequantize_per_channel_default_40";
+"457 quantize_per_channel_default_40" -> "458 dequantize_per_channel_default_40";
+"458 dequantize_per_channel_default_40" -> "460 conv2d_46";
+"459 features_11_block_0_0_weight_bias_0_0" -> "460 conv2d_46";
+"460 conv2d_46" -> "463 hardswish__15";
+"461 hardswish__15_scale_0" -> "464 quantize_per_channel_default_41";
+"461 hardswish__15_scale_0" -> "465 dequantize_per_channel_default_41";
+"462 hardswish__15_zero_point_0" -> "464 quantize_per_channel_default_41";
+"462 hardswish__15_zero_point_0" -> "465 dequantize_per_channel_default_41";
+"463 hardswish__15" -> "464 quantize_per_channel_default_41";
+"464 quantize_per_channel_default_41" -> "465 dequantize_per_channel_default_41";
+"465 dequantize_per_channel_default_41" -> "472 conv2d_47";
+"466 _param_constant125" -> "469 quantize_per_channel_default_42";
+"467 conv2d_47_scale_0" -> "469 quantize_per_channel_default_42";
+"467 conv2d_47_scale_0" -> "470 dequantize_per_channel_default_42";
+"468 conv2d_47_zero_point_0" -> "469 quantize_per_channel_default_42";
+"468 conv2d_47_zero_point_0" -> "470 dequantize_per_channel_default_42";
+"469 quantize_per_channel_default_42" -> "470 dequantize_per_channel_default_42";
+"470 dequantize_per_channel_default_42" -> "472 conv2d_47";
+"471 features_11_block_1_0_weight_bias_0_0" -> "472 conv2d_47";
+"472 conv2d_47" -> "473 hardswish__16";
+"473 hardswish__16" -> "474 quantize_per_tensor_default_42";
+"474 quantize_per_tensor_default_42" -> "475 dequantize_per_tensor_default_57";
+"474 quantize_per_tensor_default_42" -> "476 dequantize_per_tensor_default_56";
+"475 dequantize_per_tensor_default_57" -> "488 mul_8";
+"476 dequantize_per_tensor_default_56" -> "477 adaptive_avg_pool2d_8";
+"477 adaptive_avg_pool2d_8" -> "480 conv2d_48";
+"478 _param_constant128" -> "480 conv2d_48";
+"479 _param_constant129_0_0" -> "480 conv2d_48";
+"480 conv2d_48" -> "481 relu_8";
+"481 relu_8" -> "484 conv2d_49";
+"482 _param_constant130" -> "484 conv2d_49";
+"483 _param_constant131_0_0" -> "484 conv2d_49";
+"484 conv2d_49" -> "485 hardsigmoid_8";
+"485 hardsigmoid_8" -> "486 quantize_per_tensor_default_43";
+"486 quantize_per_tensor_default_43" -> "487 dequantize_per_tensor_default_58";
+"487 dequantize_per_tensor_default_58" -> "488 mul_8";
+"488 mul_8" -> "489 quantize_per_tensor_default_44";
+"489 quantize_per_tensor_default_44" -> "490 dequantize_per_tensor_default_59";
+"490 dequantize_per_tensor_default_59" -> "497 conv2d_50";
+"491 _param_constant132" -> "494 quantize_per_channel_default_43";
+"492 conv2d_50_scale_0" -> "494 quantize_per_channel_default_43";
+"492 conv2d_50_scale_0" -> "495 dequantize_per_channel_default_43";
+"493 conv2d_50_zero_point_0" -> "494 quantize_per_channel_default_43";
+"493 conv2d_50_zero_point_0" -> "495 dequantize_per_channel_default_43";
+"494 quantize_per_channel_default_43" -> "495 dequantize_per_channel_default_43";
+"495 dequantize_per_channel_default_43" -> "497 conv2d_50";
+"496 features_11_block_3_0_weight_bias_0_0" -> "497 conv2d_50";
+"497 conv2d_50" -> "498 quantize_per_tensor_default_45";
+"498 quantize_per_tensor_default_45" -> "499 dequantize_per_tensor_default_60";
+"499 dequantize_per_tensor_default_60" -> "500 add__5";
+"500 add__5" -> "501 quantize_per_tensor_default_46";
+"501 quantize_per_tensor_default_46" -> "502 dequantize_per_tensor_default_61";
+"502 dequantize_per_tensor_default_61" -> "509 conv2d_51";
+"503 _param_constant135" -> "506 quantize_per_channel_default_44";
+"504 conv2d_51_scale_0" -> "506 quantize_per_channel_default_44";
+"504 conv2d_51_scale_0" -> "507 dequantize_per_channel_default_44";
+"505 conv2d_51_zero_point_0" -> "506 quantize_per_channel_default_44";
+"505 conv2d_51_zero_point_0" -> "507 dequantize_per_channel_default_44";
+"506 quantize_per_channel_default_44" -> "507 dequantize_per_channel_default_44";
+"507 dequantize_per_channel_default_44" -> "509 conv2d_51";
+"508 features_12_0_weight_bias_0_0" -> "509 conv2d_51";
+"509 conv2d_51" -> "510 hardswish__17";
+"510 hardswish__17" -> "511 quantize_per_tensor_default_47";
+"511 quantize_per_tensor_default_47" -> "512 dequantize_per_tensor_default_62";
+"512 dequantize_per_tensor_default_62" -> "513 adaptive_avg_pool2d_9";
+"513 adaptive_avg_pool2d_9" -> "514 quantize_per_tensor_default_48";
+"514 quantize_per_tensor_default_48" -> "515 dequantize_per_tensor_default_63";
+"515 dequantize_per_tensor_default_63" -> "516 flatten";
+"516 flatten" -> "523 linear";
+"517 _param_constant138" -> "520 quantize_per_channel_default_45";
+"518 linear_scale_0" -> "520 quantize_per_channel_default_45";
+"518 linear_scale_0" -> "521 dequantize_per_channel_default_45";
+"519 linear_zero_point_0" -> "520 quantize_per_channel_default_45";
+"519 linear_zero_point_0" -> "521 dequantize_per_channel_default_45";
+"520 quantize_per_channel_default_45" -> "521 dequantize_per_channel_default_45";
+"521 dequantize_per_channel_default_45" -> "523 linear";
+"522 _param_constant139_0_0" -> "523 linear";
+"523 linear" -> "524 hardswish__18";
+"524 hardswish__18" -> "525 quantize_per_tensor_default_49";
+"525 quantize_per_tensor_default_49" -> "526 dequantize_per_tensor_default_64";
+"526 dequantize_per_tensor_default_64" -> "527 dropout_";
+"527 dropout_" -> "534 linear_1";
+"528 _param_constant140" -> "531 quantize_per_channel_default_46";
+"529 linear_1_scale_0" -> "531 quantize_per_channel_default_46";
+"529 linear_1_scale_0" -> "532 dequantize_per_channel_default_46";
+"530 linear_1_zero_point_0" -> "531 quantize_per_channel_default_46";
+"530 linear_1_zero_point_0" -> "532 dequantize_per_channel_default_46";
+"531 quantize_per_channel_default_46" -> "532 dequantize_per_channel_default_46";
+"532 dequantize_per_channel_default_46" -> "534 linear_1";
+"533 _param_constant141_0_0" -> "534 linear_1";
+"534 linear_1" -> "535 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/quantized/resnet18.dot b/tests/torch/data/reference_graphs/fx/quantized/resnet18.dot
new file mode 100644
index 00000000000..e7eefb3da1c
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/quantized/resnet18.dot
@@ -0,0 +1,539 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 quantize_per_tensor_default" [id=1, type=quantize_per_tensor];
+"2 dequantize_per_tensor_default" [id=2, type=dequantize_per_tensor];
+"3 _param_constant0" [id=3, type=get_attr];
+"4 conv2d_scale_0" [id=4, type=get_attr];
+"5 conv2d_zero_point_0" [id=5, type=get_attr];
+"6 quantize_per_channel_default" [id=6, type=quantize_per_channel];
+"7 dequantize_per_channel_default" [id=7, type=dequantize_per_channel];
+"8 conv1_weight_bias_0_0" [id=8, type=get_attr];
+"9 conv2d" [id=9, type=conv2d];
+"10 relu_" [id=10, type=relu_];
+"11 quantize_per_tensor_default_1" [id=11, type=quantize_per_tensor];
+"12 dequantize_per_tensor_default_1" [id=12, type=dequantize_per_tensor];
+"13 max_pool2d" [id=13, type=max_pool2d];
+"14 _param_constant3" [id=14, type=get_attr];
+"15 conv2d_1_scale_0" [id=15, type=get_attr];
+"16 conv2d_1_zero_point_0" [id=16, type=get_attr];
+"17 quantize_per_channel_default_1" [id=17, type=quantize_per_channel];
+"18 dequantize_per_channel_default_1" [id=18, type=dequantize_per_channel];
+"19 layer1_0_conv1_weight_bias_0_0" [id=19, type=get_attr];
+"20 conv2d_1" [id=20, type=conv2d];
+"21 relu__1" [id=21, type=relu_];
+"22 quantize_per_tensor_default_2" [id=22, type=quantize_per_tensor];
+"23 dequantize_per_tensor_default_2" [id=23, type=dequantize_per_tensor];
+"24 _param_constant6" [id=24, type=get_attr];
+"25 conv2d_2_scale_0" [id=25, type=get_attr];
+"26 conv2d_2_zero_point_0" [id=26, type=get_attr];
+"27 quantize_per_channel_default_2" [id=27, type=quantize_per_channel];
+"28 dequantize_per_channel_default_2" [id=28, type=dequantize_per_channel];
+"29 layer1_0_conv2_weight_bias_0_0" [id=29, type=get_attr];
+"30 conv2d_2" [id=30, type=conv2d];
+"31 quantize_per_tensor_default_3" [id=31, type=quantize_per_tensor];
+"32 dequantize_per_tensor_default_3" [id=32, type=dequantize_per_tensor];
+"33 add_" [id=33, type=add_];
+"34 relu__2" [id=34, type=relu_];
+"35 quantize_per_tensor_default_4" [id=35, type=quantize_per_tensor];
+"36 dequantize_per_tensor_default_5" [id=36, type=dequantize_per_tensor];
+"37 dequantize_per_tensor_default_4" [id=37, type=dequantize_per_tensor];
+"38 _param_constant9" [id=38, type=get_attr];
+"39 conv2d_3_scale_0" [id=39, type=get_attr];
+"40 conv2d_3_zero_point_0" [id=40, type=get_attr];
+"41 quantize_per_channel_default_3" [id=41, type=quantize_per_channel];
+"42 dequantize_per_channel_default_3" [id=42, type=dequantize_per_channel];
+"43 layer1_1_conv1_weight_bias_0_0" [id=43, type=get_attr];
+"44 conv2d_3" [id=44, type=conv2d];
+"45 relu__3" [id=45, type=relu_];
+"46 quantize_per_tensor_default_5" [id=46, type=quantize_per_tensor];
+"47 dequantize_per_tensor_default_6" [id=47, type=dequantize_per_tensor];
+"48 _param_constant12" [id=48, type=get_attr];
+"49 conv2d_4_scale_0" [id=49, type=get_attr];
+"50 conv2d_4_zero_point_0" [id=50, type=get_attr];
+"51 quantize_per_channel_default_4" [id=51, type=quantize_per_channel];
+"52 dequantize_per_channel_default_4" [id=52, type=dequantize_per_channel];
+"53 layer1_1_conv2_weight_bias_0_0" [id=53, type=get_attr];
+"54 conv2d_4" [id=54, type=conv2d];
+"55 quantize_per_tensor_default_6" [id=55, type=quantize_per_tensor];
+"56 dequantize_per_tensor_default_7" [id=56, type=dequantize_per_tensor];
+"57 add__1" [id=57, type=add_];
+"58 relu__4" [id=58, type=relu_];
+"59 quantize_per_tensor_default_7" [id=59, type=quantize_per_tensor];
+"60 dequantize_per_tensor_default_9" [id=60, type=dequantize_per_tensor];
+"61 dequantize_per_tensor_default_8" [id=61, type=dequantize_per_tensor];
+"62 _param_constant15" [id=62, type=get_attr];
+"63 conv2d_5_scale_0" [id=63, type=get_attr];
+"64 conv2d_5_zero_point_0" [id=64, type=get_attr];
+"65 quantize_per_channel_default_5" [id=65, type=quantize_per_channel];
+"66 dequantize_per_channel_default_5" [id=66, type=dequantize_per_channel];
+"67 layer2_0_conv1_weight_bias_0_0" [id=67, type=get_attr];
+"68 conv2d_5" [id=68, type=conv2d];
+"69 relu__5" [id=69, type=relu_];
+"70 quantize_per_tensor_default_8" [id=70, type=quantize_per_tensor];
+"71 dequantize_per_tensor_default_10" [id=71, type=dequantize_per_tensor];
+"72 _param_constant18" [id=72, type=get_attr];
+"73 conv2d_6_scale_0" [id=73, type=get_attr];
+"74 conv2d_6_zero_point_0" [id=74, type=get_attr];
+"75 quantize_per_channel_default_6" [id=75, type=quantize_per_channel];
+"76 dequantize_per_channel_default_6" [id=76, type=dequantize_per_channel];
+"77 layer2_0_conv2_weight_bias_0_0" [id=77, type=get_attr];
+"78 conv2d_6" [id=78, type=conv2d];
+"79 quantize_per_tensor_default_9" [id=79, type=quantize_per_tensor];
+"80 dequantize_per_tensor_default_11" [id=80, type=dequantize_per_tensor];
+"81 _param_constant21" [id=81, type=get_attr];
+"82 conv2d_7_scale_0" [id=82, type=get_attr];
+"83 conv2d_7_zero_point_0" [id=83, type=get_attr];
+"84 quantize_per_channel_default_7" [id=84, type=quantize_per_channel];
+"85 dequantize_per_channel_default_7" [id=85, type=dequantize_per_channel];
+"86 layer2_0_downsample_0_weight_bias_0_0" [id=86, type=get_attr];
+"87 conv2d_7" [id=87, type=conv2d];
+"88 quantize_per_tensor_default_10" [id=88, type=quantize_per_tensor];
+"89 dequantize_per_tensor_default_12" [id=89, type=dequantize_per_tensor];
+"90 add__2" [id=90, type=add_];
+"91 relu__6" [id=91, type=relu_];
+"92 quantize_per_tensor_default_11" [id=92, type=quantize_per_tensor];
+"93 dequantize_per_tensor_default_14" [id=93, type=dequantize_per_tensor];
+"94 dequantize_per_tensor_default_13" [id=94, type=dequantize_per_tensor];
+"95 _param_constant24" [id=95, type=get_attr];
+"96 conv2d_8_scale_0" [id=96, type=get_attr];
+"97 conv2d_8_zero_point_0" [id=97, type=get_attr];
+"98 quantize_per_channel_default_8" [id=98, type=quantize_per_channel];
+"99 dequantize_per_channel_default_8" [id=99, type=dequantize_per_channel];
+"100 layer2_1_conv1_weight_bias_0_0" [id=100, type=get_attr];
+"101 conv2d_8" [id=101, type=conv2d];
+"102 relu__7" [id=102, type=relu_];
+"103 quantize_per_tensor_default_12" [id=103, type=quantize_per_tensor];
+"104 dequantize_per_tensor_default_15" [id=104, type=dequantize_per_tensor];
+"105 _param_constant27" [id=105, type=get_attr];
+"106 conv2d_9_scale_0" [id=106, type=get_attr];
+"107 conv2d_9_zero_point_0" [id=107, type=get_attr];
+"108 quantize_per_channel_default_9" [id=108, type=quantize_per_channel];
+"109 dequantize_per_channel_default_9" [id=109, type=dequantize_per_channel];
+"110 layer2_1_conv2_weight_bias_0_0" [id=110, type=get_attr];
+"111 conv2d_9" [id=111, type=conv2d];
+"112 quantize_per_tensor_default_13" [id=112, type=quantize_per_tensor];
+"113 dequantize_per_tensor_default_16" [id=113, type=dequantize_per_tensor];
+"114 add__3" [id=114, type=add_];
+"115 relu__8" [id=115, type=relu_];
+"116 quantize_per_tensor_default_14" [id=116, type=quantize_per_tensor];
+"117 dequantize_per_tensor_default_18" [id=117, type=dequantize_per_tensor];
+"118 dequantize_per_tensor_default_17" [id=118, type=dequantize_per_tensor];
+"119 _param_constant30" [id=119, type=get_attr];
+"120 conv2d_10_scale_0" [id=120, type=get_attr];
+"121 conv2d_10_zero_point_0" [id=121, type=get_attr];
+"122 quantize_per_channel_default_10" [id=122, type=quantize_per_channel];
+"123 dequantize_per_channel_default_10" [id=123, type=dequantize_per_channel];
+"124 layer3_0_conv1_weight_bias_0_0" [id=124, type=get_attr];
+"125 conv2d_10" [id=125, type=conv2d];
+"126 relu__9" [id=126, type=relu_];
+"127 quantize_per_tensor_default_15" [id=127, type=quantize_per_tensor];
+"128 dequantize_per_tensor_default_19" [id=128, type=dequantize_per_tensor];
+"129 _param_constant33" [id=129, type=get_attr];
+"130 conv2d_11_scale_0" [id=130, type=get_attr];
+"131 conv2d_11_zero_point_0" [id=131, type=get_attr];
+"132 quantize_per_channel_default_11" [id=132, type=quantize_per_channel];
+"133 dequantize_per_channel_default_11" [id=133, type=dequantize_per_channel];
+"134 layer3_0_conv2_weight_bias_0_0" [id=134, type=get_attr];
+"135 conv2d_11" [id=135, type=conv2d];
+"136 quantize_per_tensor_default_16" [id=136, type=quantize_per_tensor];
+"137 dequantize_per_tensor_default_20" [id=137, type=dequantize_per_tensor];
+"138 _param_constant36" [id=138, type=get_attr];
+"139 conv2d_12_scale_0" [id=139, type=get_attr];
+"140 conv2d_12_zero_point_0" [id=140, type=get_attr];
+"141 quantize_per_channel_default_12" [id=141, type=quantize_per_channel];
+"142 dequantize_per_channel_default_12" [id=142, type=dequantize_per_channel];
+"143 layer3_0_downsample_0_weight_bias_0_0" [id=143, type=get_attr];
+"144 conv2d_12" [id=144, type=conv2d];
+"145 quantize_per_tensor_default_17" [id=145, type=quantize_per_tensor];
+"146 dequantize_per_tensor_default_21" [id=146, type=dequantize_per_tensor];
+"147 add__4" [id=147, type=add_];
+"148 relu__10" [id=148, type=relu_];
+"149 quantize_per_tensor_default_18" [id=149, type=quantize_per_tensor];
+"150 dequantize_per_tensor_default_23" [id=150, type=dequantize_per_tensor];
+"151 dequantize_per_tensor_default_22" [id=151, type=dequantize_per_tensor];
+"152 _param_constant39" [id=152, type=get_attr];
+"153 conv2d_13_scale_0" [id=153, type=get_attr];
+"154 conv2d_13_zero_point_0" [id=154, type=get_attr];
+"155 quantize_per_channel_default_13" [id=155, type=quantize_per_channel];
+"156 dequantize_per_channel_default_13" [id=156, type=dequantize_per_channel];
+"157 layer3_1_conv1_weight_bias_0_0" [id=157, type=get_attr];
+"158 conv2d_13" [id=158, type=conv2d];
+"159 relu__11" [id=159, type=relu_];
+"160 quantize_per_tensor_default_19" [id=160, type=quantize_per_tensor];
+"161 dequantize_per_tensor_default_24" [id=161, type=dequantize_per_tensor];
+"162 _param_constant42" [id=162, type=get_attr];
+"163 conv2d_14_scale_0" [id=163, type=get_attr];
+"164 conv2d_14_zero_point_0" [id=164, type=get_attr];
+"165 quantize_per_channel_default_14" [id=165, type=quantize_per_channel];
+"166 dequantize_per_channel_default_14" [id=166, type=dequantize_per_channel];
+"167 layer3_1_conv2_weight_bias_0_0" [id=167, type=get_attr];
+"168 conv2d_14" [id=168, type=conv2d];
+"169 quantize_per_tensor_default_20" [id=169, type=quantize_per_tensor];
+"170 dequantize_per_tensor_default_25" [id=170, type=dequantize_per_tensor];
+"171 add__5" [id=171, type=add_];
+"172 relu__12" [id=172, type=relu_];
+"173 quantize_per_tensor_default_21" [id=173, type=quantize_per_tensor];
+"174 dequantize_per_tensor_default_27" [id=174, type=dequantize_per_tensor];
+"175 dequantize_per_tensor_default_26" [id=175, type=dequantize_per_tensor];
+"176 _param_constant45" [id=176, type=get_attr];
+"177 conv2d_15_scale_0" [id=177, type=get_attr];
+"178 conv2d_15_zero_point_0" [id=178, type=get_attr];
+"179 quantize_per_channel_default_15" [id=179, type=quantize_per_channel];
+"180 dequantize_per_channel_default_15" [id=180, type=dequantize_per_channel];
+"181 layer4_0_conv1_weight_bias_0_0" [id=181, type=get_attr];
+"182 conv2d_15" [id=182, type=conv2d];
+"183 relu__13" [id=183, type=relu_];
+"184 quantize_per_tensor_default_22" [id=184, type=quantize_per_tensor];
+"185 dequantize_per_tensor_default_28" [id=185, type=dequantize_per_tensor];
+"186 _param_constant48" [id=186, type=get_attr];
+"187 conv2d_16_scale_0" [id=187, type=get_attr];
+"188 conv2d_16_zero_point_0" [id=188, type=get_attr];
+"189 quantize_per_channel_default_16" [id=189, type=quantize_per_channel];
+"190 dequantize_per_channel_default_16" [id=190, type=dequantize_per_channel];
+"191 layer4_0_conv2_weight_bias_0_0" [id=191, type=get_attr];
+"192 conv2d_16" [id=192, type=conv2d];
+"193 quantize_per_tensor_default_23" [id=193, type=quantize_per_tensor];
+"194 dequantize_per_tensor_default_29" [id=194, type=dequantize_per_tensor];
+"195 _param_constant51" [id=195, type=get_attr];
+"196 conv2d_17_scale_0" [id=196, type=get_attr];
+"197 conv2d_17_zero_point_0" [id=197, type=get_attr];
+"198 quantize_per_channel_default_17" [id=198, type=quantize_per_channel];
+"199 dequantize_per_channel_default_17" [id=199, type=dequantize_per_channel];
+"200 layer4_0_downsample_0_weight_bias_0_0" [id=200, type=get_attr];
+"201 conv2d_17" [id=201, type=conv2d];
+"202 quantize_per_tensor_default_24" [id=202, type=quantize_per_tensor];
+"203 dequantize_per_tensor_default_30" [id=203, type=dequantize_per_tensor];
+"204 add__6" [id=204, type=add_];
+"205 relu__14" [id=205, type=relu_];
+"206 quantize_per_tensor_default_25" [id=206, type=quantize_per_tensor];
+"207 dequantize_per_tensor_default_32" [id=207, type=dequantize_per_tensor];
+"208 dequantize_per_tensor_default_31" [id=208, type=dequantize_per_tensor];
+"209 _param_constant54" [id=209, type=get_attr];
+"210 conv2d_18_scale_0" [id=210, type=get_attr];
+"211 conv2d_18_zero_point_0" [id=211, type=get_attr];
+"212 quantize_per_channel_default_18" [id=212, type=quantize_per_channel];
+"213 dequantize_per_channel_default_18" [id=213, type=dequantize_per_channel];
+"214 layer4_1_conv1_weight_bias_0_0" [id=214, type=get_attr];
+"215 conv2d_18" [id=215, type=conv2d];
+"216 relu__15" [id=216, type=relu_];
+"217 quantize_per_tensor_default_26" [id=217, type=quantize_per_tensor];
+"218 dequantize_per_tensor_default_33" [id=218, type=dequantize_per_tensor];
+"219 _param_constant57" [id=219, type=get_attr];
+"220 conv2d_19_scale_0" [id=220, type=get_attr];
+"221 conv2d_19_zero_point_0" [id=221, type=get_attr];
+"222 quantize_per_channel_default_19" [id=222, type=quantize_per_channel];
+"223 dequantize_per_channel_default_19" [id=223, type=dequantize_per_channel];
+"224 layer4_1_conv2_weight_bias_0_0" [id=224, type=get_attr];
+"225 conv2d_19" [id=225, type=conv2d];
+"226 quantize_per_tensor_default_27" [id=226, type=quantize_per_tensor];
+"227 dequantize_per_tensor_default_34" [id=227, type=dequantize_per_tensor];
+"228 add__7" [id=228, type=add_];
+"229 relu__16" [id=229, type=relu_];
+"230 quantize_per_tensor_default_28" [id=230, type=quantize_per_tensor];
+"231 dequantize_per_tensor_default_35" [id=231, type=dequantize_per_tensor];
+"232 adaptive_avg_pool2d" [id=232, type=adaptive_avg_pool2d];
+"233 quantize_per_tensor_default_29" [id=233, type=quantize_per_tensor];
+"234 dequantize_per_tensor_default_36" [id=234, type=dequantize_per_tensor];
+"235 flatten" [id=235, type=flatten];
+"236 _param_constant60" [id=236, type=get_attr];
+"237 linear_scale_0" [id=237, type=get_attr];
+"238 linear_zero_point_0" [id=238, type=get_attr];
+"239 quantize_per_channel_default_20" [id=239, type=quantize_per_channel];
+"240 dequantize_per_channel_default_20" [id=240, type=dequantize_per_channel];
+"241 _param_constant61_0_0" [id=241, type=get_attr];
+"242 linear" [id=242, type=linear];
+"243 output" [id=243, type=output];
+"0 arg0_1" -> "1 quantize_per_tensor_default";
+"1 quantize_per_tensor_default" -> "2 dequantize_per_tensor_default";
+"2 dequantize_per_tensor_default" -> "9 conv2d";
+"3 _param_constant0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "7 dequantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "6 quantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "7 dequantize_per_channel_default";
+"6 quantize_per_channel_default" -> "7 dequantize_per_channel_default";
+"7 dequantize_per_channel_default" -> "9 conv2d";
+"8 conv1_weight_bias_0_0" -> "9 conv2d";
+"9 conv2d" -> "10 relu_";
+"10 relu_" -> "11 quantize_per_tensor_default_1";
+"11 quantize_per_tensor_default_1" -> "12 dequantize_per_tensor_default_1";
+"12 dequantize_per_tensor_default_1" -> "13 max_pool2d";
+"13 max_pool2d" -> "20 conv2d_1";
+"13 max_pool2d" -> "33 add_";
+"14 _param_constant3" -> "17 quantize_per_channel_default_1";
+"15 conv2d_1_scale_0" -> "17 quantize_per_channel_default_1";
+"15 conv2d_1_scale_0" -> "18 dequantize_per_channel_default_1";
+"16 conv2d_1_zero_point_0" -> "17 quantize_per_channel_default_1";
+"16 conv2d_1_zero_point_0" -> "18 dequantize_per_channel_default_1";
+"17 quantize_per_channel_default_1" -> "18 dequantize_per_channel_default_1";
+"18 dequantize_per_channel_default_1" -> "20 conv2d_1";
+"19 layer1_0_conv1_weight_bias_0_0" -> "20 conv2d_1";
+"20 conv2d_1" -> "21 relu__1";
+"21 relu__1" -> "22 quantize_per_tensor_default_2";
+"22 quantize_per_tensor_default_2" -> "23 dequantize_per_tensor_default_2";
+"23 dequantize_per_tensor_default_2" -> "30 conv2d_2";
+"24 _param_constant6" -> "27 quantize_per_channel_default_2";
+"25 conv2d_2_scale_0" -> "27 quantize_per_channel_default_2";
+"25 conv2d_2_scale_0" -> "28 dequantize_per_channel_default_2";
+"26 conv2d_2_zero_point_0" -> "27 quantize_per_channel_default_2";
+"26 conv2d_2_zero_point_0" -> "28 dequantize_per_channel_default_2";
+"27 quantize_per_channel_default_2" -> "28 dequantize_per_channel_default_2";
+"28 dequantize_per_channel_default_2" -> "30 conv2d_2";
+"29 layer1_0_conv2_weight_bias_0_0" -> "30 conv2d_2";
+"30 conv2d_2" -> "31 quantize_per_tensor_default_3";
+"31 quantize_per_tensor_default_3" -> "32 dequantize_per_tensor_default_3";
+"32 dequantize_per_tensor_default_3" -> "33 add_";
+"33 add_" -> "34 relu__2";
+"34 relu__2" -> "35 quantize_per_tensor_default_4";
+"35 quantize_per_tensor_default_4" -> "36 dequantize_per_tensor_default_5";
+"35 quantize_per_tensor_default_4" -> "37 dequantize_per_tensor_default_4";
+"36 dequantize_per_tensor_default_5" -> "57 add__1";
+"37 dequantize_per_tensor_default_4" -> "44 conv2d_3";
+"38 _param_constant9" -> "41 quantize_per_channel_default_3";
+"39 conv2d_3_scale_0" -> "41 quantize_per_channel_default_3";
+"39 conv2d_3_scale_0" -> "42 dequantize_per_channel_default_3";
+"40 conv2d_3_zero_point_0" -> "41 quantize_per_channel_default_3";
+"40 conv2d_3_zero_point_0" -> "42 dequantize_per_channel_default_3";
+"41 quantize_per_channel_default_3" -> "42 dequantize_per_channel_default_3";
+"42 dequantize_per_channel_default_3" -> "44 conv2d_3";
+"43 layer1_1_conv1_weight_bias_0_0" -> "44 conv2d_3";
+"44 conv2d_3" -> "45 relu__3";
+"45 relu__3" -> "46 quantize_per_tensor_default_5";
+"46 quantize_per_tensor_default_5" -> "47 dequantize_per_tensor_default_6";
+"47 dequantize_per_tensor_default_6" -> "54 conv2d_4";
+"48 _param_constant12" -> "51 quantize_per_channel_default_4";
+"49 conv2d_4_scale_0" -> "51 quantize_per_channel_default_4";
+"49 conv2d_4_scale_0" -> "52 dequantize_per_channel_default_4";
+"50 conv2d_4_zero_point_0" -> "51 quantize_per_channel_default_4";
+"50 conv2d_4_zero_point_0" -> "52 dequantize_per_channel_default_4";
+"51 quantize_per_channel_default_4" -> "52 dequantize_per_channel_default_4";
+"52 dequantize_per_channel_default_4" -> "54 conv2d_4";
+"53 layer1_1_conv2_weight_bias_0_0" -> "54 conv2d_4";
+"54 conv2d_4" -> "55 quantize_per_tensor_default_6";
+"55 quantize_per_tensor_default_6" -> "56 dequantize_per_tensor_default_7";
+"56 dequantize_per_tensor_default_7" -> "57 add__1";
+"57 add__1" -> "58 relu__4";
+"58 relu__4" -> "59 quantize_per_tensor_default_7";
+"59 quantize_per_tensor_default_7" -> "60 dequantize_per_tensor_default_9";
+"59 quantize_per_tensor_default_7" -> "61 dequantize_per_tensor_default_8";
+"60 dequantize_per_tensor_default_9" -> "87 conv2d_7";
+"61 dequantize_per_tensor_default_8" -> "68 conv2d_5";
+"62 _param_constant15" -> "65 quantize_per_channel_default_5";
+"63 conv2d_5_scale_0" -> "65 quantize_per_channel_default_5";
+"63 conv2d_5_scale_0" -> "66 dequantize_per_channel_default_5";
+"64 conv2d_5_zero_point_0" -> "65 quantize_per_channel_default_5";
+"64 conv2d_5_zero_point_0" -> "66 dequantize_per_channel_default_5";
+"65 quantize_per_channel_default_5" -> "66 dequantize_per_channel_default_5";
+"66 dequantize_per_channel_default_5" -> "68 conv2d_5";
+"67 layer2_0_conv1_weight_bias_0_0" -> "68 conv2d_5";
+"68 conv2d_5" -> "69 relu__5";
+"69 relu__5" -> "70 quantize_per_tensor_default_8";
+"70 quantize_per_tensor_default_8" -> "71 dequantize_per_tensor_default_10";
+"71 dequantize_per_tensor_default_10" -> "78 conv2d_6";
+"72 _param_constant18" -> "75 quantize_per_channel_default_6";
+"73 conv2d_6_scale_0" -> "75 quantize_per_channel_default_6";
+"73 conv2d_6_scale_0" -> "76 dequantize_per_channel_default_6";
+"74 conv2d_6_zero_point_0" -> "75 quantize_per_channel_default_6";
+"74 conv2d_6_zero_point_0" -> "76 dequantize_per_channel_default_6";
+"75 quantize_per_channel_default_6" -> "76 dequantize_per_channel_default_6";
+"76 dequantize_per_channel_default_6" -> "78 conv2d_6";
+"77 layer2_0_conv2_weight_bias_0_0" -> "78 conv2d_6";
+"78 conv2d_6" -> "79 quantize_per_tensor_default_9";
+"79 quantize_per_tensor_default_9" -> "80 dequantize_per_tensor_default_11";
+"80 dequantize_per_tensor_default_11" -> "90 add__2";
+"81 _param_constant21" -> "84 quantize_per_channel_default_7";
+"82 conv2d_7_scale_0" -> "84 quantize_per_channel_default_7";
+"82 conv2d_7_scale_0" -> "85 dequantize_per_channel_default_7";
+"83 conv2d_7_zero_point_0" -> "84 quantize_per_channel_default_7";
+"83 conv2d_7_zero_point_0" -> "85 dequantize_per_channel_default_7";
+"84 quantize_per_channel_default_7" -> "85 dequantize_per_channel_default_7";
+"85 dequantize_per_channel_default_7" -> "87 conv2d_7";
+"86 layer2_0_downsample_0_weight_bias_0_0" -> "87 conv2d_7";
+"87 conv2d_7" -> "88 quantize_per_tensor_default_10";
+"88 quantize_per_tensor_default_10" -> "89 dequantize_per_tensor_default_12";
+"89 dequantize_per_tensor_default_12" -> "90 add__2";
+"90 add__2" -> "91 relu__6";
+"91 relu__6" -> "92 quantize_per_tensor_default_11";
+"92 quantize_per_tensor_default_11" -> "93 dequantize_per_tensor_default_14";
+"92 quantize_per_tensor_default_11" -> "94 dequantize_per_tensor_default_13";
+"93 dequantize_per_tensor_default_14" -> "114 add__3";
+"94 dequantize_per_tensor_default_13" -> "101 conv2d_8";
+"95 _param_constant24" -> "98 quantize_per_channel_default_8";
+"96 conv2d_8_scale_0" -> "98 quantize_per_channel_default_8";
+"96 conv2d_8_scale_0" -> "99 dequantize_per_channel_default_8";
+"97 conv2d_8_zero_point_0" -> "98 quantize_per_channel_default_8";
+"97 conv2d_8_zero_point_0" -> "99 dequantize_per_channel_default_8";
+"98 quantize_per_channel_default_8" -> "99 dequantize_per_channel_default_8";
+"99 dequantize_per_channel_default_8" -> "101 conv2d_8";
+"100 layer2_1_conv1_weight_bias_0_0" -> "101 conv2d_8";
+"101 conv2d_8" -> "102 relu__7";
+"102 relu__7" -> "103 quantize_per_tensor_default_12";
+"103 quantize_per_tensor_default_12" -> "104 dequantize_per_tensor_default_15";
+"104 dequantize_per_tensor_default_15" -> "111 conv2d_9";
+"105 _param_constant27" -> "108 quantize_per_channel_default_9";
+"106 conv2d_9_scale_0" -> "108 quantize_per_channel_default_9";
+"106 conv2d_9_scale_0" -> "109 dequantize_per_channel_default_9";
+"107 conv2d_9_zero_point_0" -> "108 quantize_per_channel_default_9";
+"107 conv2d_9_zero_point_0" -> "109 dequantize_per_channel_default_9";
+"108 quantize_per_channel_default_9" -> "109 dequantize_per_channel_default_9";
+"109 dequantize_per_channel_default_9" -> "111 conv2d_9";
+"110 layer2_1_conv2_weight_bias_0_0" -> "111 conv2d_9";
+"111 conv2d_9" -> "112 quantize_per_tensor_default_13";
+"112 quantize_per_tensor_default_13" -> "113 dequantize_per_tensor_default_16";
+"113 dequantize_per_tensor_default_16" -> "114 add__3";
+"114 add__3" -> "115 relu__8";
+"115 relu__8" -> "116 quantize_per_tensor_default_14";
+"116 quantize_per_tensor_default_14" -> "117 dequantize_per_tensor_default_18";
+"116 quantize_per_tensor_default_14" -> "118 dequantize_per_tensor_default_17";
+"117 dequantize_per_tensor_default_18" -> "144 conv2d_12";
+"118 dequantize_per_tensor_default_17" -> "125 conv2d_10";
+"119 _param_constant30" -> "122 quantize_per_channel_default_10";
+"120 conv2d_10_scale_0" -> "122 quantize_per_channel_default_10";
+"120 conv2d_10_scale_0" -> "123 dequantize_per_channel_default_10";
+"121 conv2d_10_zero_point_0" -> "122 quantize_per_channel_default_10";
+"121 conv2d_10_zero_point_0" -> "123 dequantize_per_channel_default_10";
+"122 quantize_per_channel_default_10" -> "123 dequantize_per_channel_default_10";
+"123 dequantize_per_channel_default_10" -> "125 conv2d_10";
+"124 layer3_0_conv1_weight_bias_0_0" -> "125 conv2d_10";
+"125 conv2d_10" -> "126 relu__9";
+"126 relu__9" -> "127 quantize_per_tensor_default_15";
+"127 quantize_per_tensor_default_15" -> "128 dequantize_per_tensor_default_19";
+"128 dequantize_per_tensor_default_19" -> "135 conv2d_11";
+"129 _param_constant33" -> "132 quantize_per_channel_default_11";
+"130 conv2d_11_scale_0" -> "132 quantize_per_channel_default_11";
+"130 conv2d_11_scale_0" -> "133 dequantize_per_channel_default_11";
+"131 conv2d_11_zero_point_0" -> "132 quantize_per_channel_default_11";
+"131 conv2d_11_zero_point_0" -> "133 dequantize_per_channel_default_11";
+"132 quantize_per_channel_default_11" -> "133 dequantize_per_channel_default_11";
+"133 dequantize_per_channel_default_11" -> "135 conv2d_11";
+"134 layer3_0_conv2_weight_bias_0_0" -> "135 conv2d_11";
+"135 conv2d_11" -> "136 quantize_per_tensor_default_16";
+"136 quantize_per_tensor_default_16" -> "137 dequantize_per_tensor_default_20";
+"137 dequantize_per_tensor_default_20" -> "147 add__4";
+"138 _param_constant36" -> "141 quantize_per_channel_default_12";
+"139 conv2d_12_scale_0" -> "141 quantize_per_channel_default_12";
+"139 conv2d_12_scale_0" -> "142 dequantize_per_channel_default_12";
+"140 conv2d_12_zero_point_0" -> "141 quantize_per_channel_default_12";
+"140 conv2d_12_zero_point_0" -> "142 dequantize_per_channel_default_12";
+"141 quantize_per_channel_default_12" -> "142 dequantize_per_channel_default_12";
+"142 dequantize_per_channel_default_12" -> "144 conv2d_12";
+"143 layer3_0_downsample_0_weight_bias_0_0" -> "144 conv2d_12";
+"144 conv2d_12" -> "145 quantize_per_tensor_default_17";
+"145 quantize_per_tensor_default_17" -> "146 dequantize_per_tensor_default_21";
+"146 dequantize_per_tensor_default_21" -> "147 add__4";
+"147 add__4" -> "148 relu__10";
+"148 relu__10" -> "149 quantize_per_tensor_default_18";
+"149 quantize_per_tensor_default_18" -> "150 dequantize_per_tensor_default_23";
+"149 quantize_per_tensor_default_18" -> "151 dequantize_per_tensor_default_22";
+"150 dequantize_per_tensor_default_23" -> "171 add__5";
+"151 dequantize_per_tensor_default_22" -> "158 conv2d_13";
+"152 _param_constant39" -> "155 quantize_per_channel_default_13";
+"153 conv2d_13_scale_0" -> "155 quantize_per_channel_default_13";
+"153 conv2d_13_scale_0" -> "156 dequantize_per_channel_default_13";
+"154 conv2d_13_zero_point_0" -> "155 quantize_per_channel_default_13";
+"154 conv2d_13_zero_point_0" -> "156 dequantize_per_channel_default_13";
+"155 quantize_per_channel_default_13" -> "156 dequantize_per_channel_default_13";
+"156 dequantize_per_channel_default_13" -> "158 conv2d_13";
+"157 layer3_1_conv1_weight_bias_0_0" -> "158 conv2d_13";
+"158 conv2d_13" -> "159 relu__11";
+"159 relu__11" -> "160 quantize_per_tensor_default_19";
+"160 quantize_per_tensor_default_19" -> "161 dequantize_per_tensor_default_24";
+"161 dequantize_per_tensor_default_24" -> "168 conv2d_14";
+"162 _param_constant42" -> "165 quantize_per_channel_default_14";
+"163 conv2d_14_scale_0" -> "165 quantize_per_channel_default_14";
+"163 conv2d_14_scale_0" -> "166 dequantize_per_channel_default_14";
+"164 conv2d_14_zero_point_0" -> "165 quantize_per_channel_default_14";
+"164 conv2d_14_zero_point_0" -> "166 dequantize_per_channel_default_14";
+"165 quantize_per_channel_default_14" -> "166 dequantize_per_channel_default_14";
+"166 dequantize_per_channel_default_14" -> "168 conv2d_14";
+"167 layer3_1_conv2_weight_bias_0_0" -> "168 conv2d_14";
+"168 conv2d_14" -> "169 quantize_per_tensor_default_20";
+"169 quantize_per_tensor_default_20" -> "170 dequantize_per_tensor_default_25";
+"170 dequantize_per_tensor_default_25" -> "171 add__5";
+"171 add__5" -> "172 relu__12";
+"172 relu__12" -> "173 quantize_per_tensor_default_21";
+"173 quantize_per_tensor_default_21" -> "174 dequantize_per_tensor_default_27";
+"173 quantize_per_tensor_default_21" -> "175 dequantize_per_tensor_default_26";
+"174 dequantize_per_tensor_default_27" -> "201 conv2d_17";
+"175 dequantize_per_tensor_default_26" -> "182 conv2d_15";
+"176 _param_constant45" -> "179 quantize_per_channel_default_15";
+"177 conv2d_15_scale_0" -> "179 quantize_per_channel_default_15";
+"177 conv2d_15_scale_0" -> "180 dequantize_per_channel_default_15";
+"178 conv2d_15_zero_point_0" -> "179 quantize_per_channel_default_15";
+"178 conv2d_15_zero_point_0" -> "180 dequantize_per_channel_default_15";
+"179 quantize_per_channel_default_15" -> "180 dequantize_per_channel_default_15";
+"180 dequantize_per_channel_default_15" -> "182 conv2d_15";
+"181 layer4_0_conv1_weight_bias_0_0" -> "182 conv2d_15";
+"182 conv2d_15" -> "183 relu__13";
+"183 relu__13" -> "184 quantize_per_tensor_default_22";
+"184 quantize_per_tensor_default_22" -> "185 dequantize_per_tensor_default_28";
+"185 dequantize_per_tensor_default_28" -> "192 conv2d_16";
+"186 _param_constant48" -> "189 quantize_per_channel_default_16";
+"187 conv2d_16_scale_0" -> "189 quantize_per_channel_default_16";
+"187 conv2d_16_scale_0" -> "190 dequantize_per_channel_default_16";
+"188 conv2d_16_zero_point_0" -> "189 quantize_per_channel_default_16";
+"188 conv2d_16_zero_point_0" -> "190 dequantize_per_channel_default_16";
+"189 quantize_per_channel_default_16" -> "190 dequantize_per_channel_default_16";
+"190 dequantize_per_channel_default_16" -> "192 conv2d_16";
+"191 layer4_0_conv2_weight_bias_0_0" -> "192 conv2d_16";
+"192 conv2d_16" -> "193 quantize_per_tensor_default_23";
+"193 quantize_per_tensor_default_23" -> "194 dequantize_per_tensor_default_29";
+"194 dequantize_per_tensor_default_29" -> "204 add__6";
+"195 _param_constant51" -> "198 quantize_per_channel_default_17";
+"196 conv2d_17_scale_0" -> "198 quantize_per_channel_default_17";
+"196 conv2d_17_scale_0" -> "199 dequantize_per_channel_default_17";
+"197 conv2d_17_zero_point_0" -> "198 quantize_per_channel_default_17";
+"197 conv2d_17_zero_point_0" -> "199 dequantize_per_channel_default_17";
+"198 quantize_per_channel_default_17" -> "199 dequantize_per_channel_default_17";
+"199 dequantize_per_channel_default_17" -> "201 conv2d_17";
+"200 layer4_0_downsample_0_weight_bias_0_0" -> "201 conv2d_17";
+"201 conv2d_17" -> "202 quantize_per_tensor_default_24";
+"202 quantize_per_tensor_default_24" -> "203 dequantize_per_tensor_default_30";
+"203 dequantize_per_tensor_default_30" -> "204 add__6";
+"204 add__6" -> "205 relu__14";
+"205 relu__14" -> "206 quantize_per_tensor_default_25";
+"206 quantize_per_tensor_default_25" -> "207 dequantize_per_tensor_default_32";
+"206 quantize_per_tensor_default_25" -> "208 dequantize_per_tensor_default_31";
+"207 dequantize_per_tensor_default_32" -> "228 add__7";
+"208 dequantize_per_tensor_default_31" -> "215 conv2d_18";
+"209 _param_constant54" -> "212 quantize_per_channel_default_18";
+"210 conv2d_18_scale_0" -> "212 quantize_per_channel_default_18";
+"210 conv2d_18_scale_0" -> "213 dequantize_per_channel_default_18";
+"211 conv2d_18_zero_point_0" -> "212 quantize_per_channel_default_18";
+"211 conv2d_18_zero_point_0" -> "213 dequantize_per_channel_default_18";
+"212 quantize_per_channel_default_18" -> "213 dequantize_per_channel_default_18";
+"213 dequantize_per_channel_default_18" -> "215 conv2d_18";
+"214 layer4_1_conv1_weight_bias_0_0" -> "215 conv2d_18";
+"215 conv2d_18" -> "216 relu__15";
+"216 relu__15" -> "217 quantize_per_tensor_default_26";
+"217 quantize_per_tensor_default_26" -> "218 dequantize_per_tensor_default_33";
+"218 dequantize_per_tensor_default_33" -> "225 conv2d_19";
+"219 _param_constant57" -> "222 quantize_per_channel_default_19";
+"220 conv2d_19_scale_0" -> "222 quantize_per_channel_default_19";
+"220 conv2d_19_scale_0" -> "223 dequantize_per_channel_default_19";
+"221 conv2d_19_zero_point_0" -> "222 quantize_per_channel_default_19";
+"221 conv2d_19_zero_point_0" -> "223 dequantize_per_channel_default_19";
+"222 quantize_per_channel_default_19" -> "223 dequantize_per_channel_default_19";
+"223 dequantize_per_channel_default_19" -> "225 conv2d_19";
+"224 layer4_1_conv2_weight_bias_0_0" -> "225 conv2d_19";
+"225 conv2d_19" -> "226 quantize_per_tensor_default_27";
+"226 quantize_per_tensor_default_27" -> "227 dequantize_per_tensor_default_34";
+"227 dequantize_per_tensor_default_34" -> "228 add__7";
+"228 add__7" -> "229 relu__16";
+"229 relu__16" -> "230 quantize_per_tensor_default_28";
+"230 quantize_per_tensor_default_28" -> "231 dequantize_per_tensor_default_35";
+"231 dequantize_per_tensor_default_35" -> "232 adaptive_avg_pool2d";
+"232 adaptive_avg_pool2d" -> "233 quantize_per_tensor_default_29";
+"233 quantize_per_tensor_default_29" -> "234 dequantize_per_tensor_default_36";
+"234 dequantize_per_tensor_default_36" -> "235 flatten";
+"235 flatten" -> "242 linear";
+"236 _param_constant60" -> "239 quantize_per_channel_default_20";
+"237 linear_scale_0" -> "239 quantize_per_channel_default_20";
+"237 linear_scale_0" -> "240 dequantize_per_channel_default_20";
+"238 linear_zero_point_0" -> "239 quantize_per_channel_default_20";
+"238 linear_zero_point_0" -> "240 dequantize_per_channel_default_20";
+"239 quantize_per_channel_default_20" -> "240 dequantize_per_channel_default_20";
+"240 dequantize_per_channel_default_20" -> "242 linear";
+"241 _param_constant61_0_0" -> "242 linear";
+"242 linear" -> "243 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/quantized/swin_v2_s.dot b/tests/torch/data/reference_graphs/fx/quantized/swin_v2_s.dot
new file mode 100644
index 00000000000..ea39f9c0188
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/quantized/swin_v2_s.dot
@@ -0,0 +1,6858 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 quantize_per_tensor_default" [id=1, type=quantize_per_tensor];
+"2 dequantize_per_tensor_default" [id=2, type=dequantize_per_tensor];
+"3 _param_constant0" [id=3, type=get_attr];
+"4 conv2d_scale_0" [id=4, type=get_attr];
+"5 conv2d_zero_point_0" [id=5, type=get_attr];
+"6 quantize_per_channel_default" [id=6, type=quantize_per_channel];
+"7 dequantize_per_channel_default" [id=7, type=dequantize_per_channel];
+"8 _param_constant1_0_0" [id=8, type=get_attr];
+"9 conv2d" [id=9, type=conv2d];
+"10 permute" [id=10, type=permute];
+"11 _param_constant2" [id=11, type=get_attr];
+"12 _param_constant3" [id=12, type=get_attr];
+"13 layer_norm" [id=13, type=layer_norm];
+"14 _tensor_constant0" [id=14, type=get_attr];
+"15 linear_updated_constant0" [id=15, type=get_attr];
+"16 _tensor_constant0_0_0_nncf_smooth_quant_0" [id=16, type=call_module];
+"17 linear_scale_0" [id=17, type=get_attr];
+"18 linear_zero_point_0" [id=18, type=get_attr];
+"19 quantize_per_channel_default_1" [id=19, type=quantize_per_channel];
+"20 dequantize_per_channel_default_1" [id=20, type=dequantize_per_channel];
+"21 _param_constant5_0_0" [id=21, type=get_attr];
+"22 linear" [id=22, type=linear];
+"23 relu_" [id=23, type=relu_];
+"24 linear_1_updated_constant0" [id=24, type=get_attr];
+"25 relu__0_0_nncf_smooth_quant_0" [id=25, type=call_module];
+"26 linear_1_scale_0" [id=26, type=get_attr];
+"27 linear_1_zero_point_0" [id=27, type=get_attr];
+"28 quantize_per_channel_default_2" [id=28, type=quantize_per_channel];
+"29 dequantize_per_channel_default_2" [id=29, type=dequantize_per_channel];
+"30 linear_1" [id=30, type=linear];
+"31 view" [id=31, type=view];
+"32 _tensor_constant1" [id=32, type=get_attr];
+"33 index" [id=33, type=index];
+"34 view_1" [id=34, type=view];
+"35 permute_1" [id=35, type=permute];
+"36 contiguous" [id=36, type=contiguous];
+"37 unsqueeze" [id=37, type=unsqueeze];
+"38 sigmoid" [id=38, type=sigmoid];
+"39 mul" [id=39, type=mul];
+"40 pad" [id=40, type=pad];
+"41 view_2" [id=41, type=view];
+"42 permute_2" [id=42, type=permute];
+"43 reshape" [id=43, type=reshape];
+"44 linear_2_updated_constant0" [id=44, type=get_attr];
+"45 reshape_0_0_nncf_smooth_quant_0" [id=45, type=call_module];
+"46 quantize_per_tensor_default_1" [id=46, type=quantize_per_tensor];
+"47 dequantize_per_tensor_default_1" [id=47, type=dequantize_per_tensor];
+"48 linear_2_scale_0" [id=48, type=get_attr];
+"49 linear_2_zero_point_0" [id=49, type=get_attr];
+"50 quantize_per_channel_default_3" [id=50, type=quantize_per_channel];
+"51 dequantize_per_channel_default_3" [id=51, type=dequantize_per_channel];
+"52 _param_constant7_0_0" [id=52, type=get_attr];
+"53 linear_2" [id=53, type=linear];
+"54 reshape_1" [id=54, type=reshape];
+"55 permute_3" [id=55, type=permute];
+"56 select" [id=56, type=select];
+"57 select_1" [id=57, type=select];
+"58 select_2" [id=58, type=select];
+"59 linalg_vector_norm" [id=59, type=linalg_vector_norm];
+"60 clamp_min" [id=60, type=clamp_min];
+"61 expand_as" [id=61, type=expand_as];
+"62 div" [id=62, type=div];
+"63 quantize_per_tensor_default_2" [id=63, type=quantize_per_tensor];
+"64 dequantize_per_tensor_default_2" [id=64, type=dequantize_per_tensor];
+"65 linalg_vector_norm_1" [id=65, type=linalg_vector_norm];
+"66 clamp_min_1" [id=66, type=clamp_min];
+"67 expand_as_1" [id=67, type=expand_as];
+"68 div_1" [id=68, type=div];
+"69 quantize_per_tensor_default_3" [id=69, type=quantize_per_tensor];
+"70 dequantize_per_tensor_default_3" [id=70, type=dequantize_per_tensor];
+"71 transpose" [id=71, type=transpose];
+"72 matmul" [id=72, type=matmul];
+"73 _param_constant9" [id=73, type=get_attr];
+"74 clamp" [id=74, type=clamp];
+"75 exp" [id=75, type=exp];
+"76 mul_1" [id=76, type=mul];
+"77 add" [id=77, type=add];
+"78 softmax" [id=78, type=softmax];
+"79 dropout" [id=79, type=dropout];
+"80 matmul_1" [id=80, type=matmul];
+"81 transpose_1" [id=81, type=transpose];
+"82 reshape_2" [id=82, type=reshape];
+"83 linear_3_updated_constant0" [id=83, type=get_attr];
+"84 reshape_2_0_0_nncf_smooth_quant_0" [id=84, type=call_module];
+"85 quantize_per_tensor_default_4" [id=85, type=quantize_per_tensor];
+"86 dequantize_per_tensor_default_4" [id=86, type=dequantize_per_tensor];
+"87 linear_3_scale_0" [id=87, type=get_attr];
+"88 linear_3_zero_point_0" [id=88, type=get_attr];
+"89 quantize_per_channel_default_4" [id=89, type=quantize_per_channel];
+"90 dequantize_per_channel_default_4" [id=90, type=dequantize_per_channel];
+"91 _param_constant11_0_0" [id=91, type=get_attr];
+"92 linear_3" [id=92, type=linear];
+"93 dropout_1" [id=93, type=dropout];
+"94 view_3" [id=94, type=view];
+"95 permute_4" [id=95, type=permute];
+"96 reshape_3" [id=96, type=reshape];
+"97 slice_2" [id=97, type=slice];
+"98 slice_3" [id=98, type=slice];
+"99 _param_constant12" [id=99, type=get_attr];
+"100 _param_constant13" [id=100, type=get_attr];
+"101 layer_norm_1" [id=101, type=layer_norm];
+"102 add_1" [id=102, type=add];
+"103 linear_4_updated_constant0" [id=103, type=get_attr];
+"104 add_1_0_0_nncf_smooth_quant_0" [id=104, type=call_module];
+"105 quantize_per_tensor_default_5" [id=105, type=quantize_per_tensor];
+"106 dequantize_per_tensor_default_5" [id=106, type=dequantize_per_tensor];
+"107 linear_4_scale_0" [id=107, type=get_attr];
+"108 linear_4_zero_point_0" [id=108, type=get_attr];
+"109 quantize_per_channel_default_5" [id=109, type=quantize_per_channel];
+"110 dequantize_per_channel_default_5" [id=110, type=dequantize_per_channel];
+"111 _param_constant15_0_0" [id=111, type=get_attr];
+"112 linear_4" [id=112, type=linear];
+"113 gelu" [id=113, type=gelu];
+"114 dropout_2" [id=114, type=dropout];
+"115 linear_5_updated_constant0" [id=115, type=get_attr];
+"116 dropout_2_0_0_nncf_smooth_quant_0" [id=116, type=call_module];
+"117 quantize_per_tensor_default_6" [id=117, type=quantize_per_tensor];
+"118 dequantize_per_tensor_default_6" [id=118, type=dequantize_per_tensor];
+"119 linear_5_scale_0" [id=119, type=get_attr];
+"120 linear_5_zero_point_0" [id=120, type=get_attr];
+"121 quantize_per_channel_default_6" [id=121, type=quantize_per_channel];
+"122 dequantize_per_channel_default_6" [id=122, type=dequantize_per_channel];
+"123 _param_constant17_0_0" [id=123, type=get_attr];
+"124 linear_5" [id=124, type=linear];
+"125 dropout_3" [id=125, type=dropout];
+"126 _param_constant18" [id=126, type=get_attr];
+"127 _param_constant19" [id=127, type=get_attr];
+"128 layer_norm_2" [id=128, type=layer_norm];
+"129 add_2" [id=129, type=add];
+"130 _tensor_constant2" [id=130, type=get_attr];
+"131 linear_6_updated_constant0" [id=131, type=get_attr];
+"132 _tensor_constant2_0_0_nncf_smooth_quant_0" [id=132, type=call_module];
+"133 linear_6_scale_0" [id=133, type=get_attr];
+"134 linear_6_zero_point_0" [id=134, type=get_attr];
+"135 quantize_per_channel_default_7" [id=135, type=quantize_per_channel];
+"136 dequantize_per_channel_default_7" [id=136, type=dequantize_per_channel];
+"137 _param_constant21_0_0" [id=137, type=get_attr];
+"138 linear_6" [id=138, type=linear];
+"139 relu__1" [id=139, type=relu_];
+"140 linear_7_updated_constant0" [id=140, type=get_attr];
+"141 relu__1_0_0_nncf_smooth_quant_0" [id=141, type=call_module];
+"142 linear_7_scale_0" [id=142, type=get_attr];
+"143 linear_7_zero_point_0" [id=143, type=get_attr];
+"144 quantize_per_channel_default_8" [id=144, type=quantize_per_channel];
+"145 dequantize_per_channel_default_8" [id=145, type=dequantize_per_channel];
+"146 linear_7" [id=146, type=linear];
+"147 view_4" [id=147, type=view];
+"148 _tensor_constant3" [id=148, type=get_attr];
+"149 index_1" [id=149, type=index];
+"150 view_5" [id=150, type=view];
+"151 permute_5" [id=151, type=permute];
+"152 contiguous_1" [id=152, type=contiguous];
+"153 unsqueeze_1" [id=153, type=unsqueeze];
+"154 sigmoid_1" [id=154, type=sigmoid];
+"155 mul_2" [id=155, type=mul];
+"156 pad_1" [id=156, type=pad];
+"157 roll" [id=157, type=roll];
+"158 view_6" [id=158, type=view];
+"159 permute_6" [id=159, type=permute];
+"160 reshape_4" [id=160, type=reshape];
+"161 linear_8_updated_constant0" [id=161, type=get_attr];
+"162 reshape_4_0_0_nncf_smooth_quant_0" [id=162, type=call_module];
+"163 quantize_per_tensor_default_7" [id=163, type=quantize_per_tensor];
+"164 dequantize_per_tensor_default_7" [id=164, type=dequantize_per_tensor];
+"165 linear_8_scale_0" [id=165, type=get_attr];
+"166 linear_8_zero_point_0" [id=166, type=get_attr];
+"167 quantize_per_channel_default_9" [id=167, type=quantize_per_channel];
+"168 dequantize_per_channel_default_9" [id=168, type=dequantize_per_channel];
+"169 _param_constant23_0_0" [id=169, type=get_attr];
+"170 linear_8" [id=170, type=linear];
+"171 reshape_5" [id=171, type=reshape];
+"172 permute_7" [id=172, type=permute];
+"173 select_3" [id=173, type=select];
+"174 select_4" [id=174, type=select];
+"175 select_5" [id=175, type=select];
+"176 linalg_vector_norm_2" [id=176, type=linalg_vector_norm];
+"177 clamp_min_2" [id=177, type=clamp_min];
+"178 expand_as_2" [id=178, type=expand_as];
+"179 div_2" [id=179, type=div];
+"180 quantize_per_tensor_default_8" [id=180, type=quantize_per_tensor];
+"181 dequantize_per_tensor_default_8" [id=181, type=dequantize_per_tensor];
+"182 linalg_vector_norm_3" [id=182, type=linalg_vector_norm];
+"183 clamp_min_3" [id=183, type=clamp_min];
+"184 expand_as_3" [id=184, type=expand_as];
+"185 div_3" [id=185, type=div];
+"186 quantize_per_tensor_default_9" [id=186, type=quantize_per_tensor];
+"187 dequantize_per_tensor_default_9" [id=187, type=dequantize_per_tensor];
+"188 transpose_2" [id=188, type=transpose];
+"189 matmul_2" [id=189, type=matmul];
+"190 _param_constant25" [id=190, type=get_attr];
+"191 clamp_1" [id=191, type=clamp];
+"192 exp_1" [id=192, type=exp];
+"193 mul_3" [id=193, type=mul];
+"194 add_3" [id=194, type=add];
+"195 new_zeros" [id=195, type=new_zeros];
+"196 view_7" [id=196, type=view];
+"197 permute_8" [id=197, type=permute];
+"198 reshape_6" [id=198, type=reshape];
+"199 unsqueeze_2" [id=199, type=unsqueeze];
+"200 unsqueeze_3" [id=200, type=unsqueeze];
+"201 sub" [id=201, type=sub];
+"202 ne" [id=202, type=ne];
+"203 masked_fill" [id=203, type=masked_fill];
+"204 eq" [id=204, type=eq];
+"205 masked_fill_1" [id=205, type=masked_fill];
+"206 view_8" [id=206, type=view];
+"207 unsqueeze_4" [id=207, type=unsqueeze];
+"208 unsqueeze_5" [id=208, type=unsqueeze];
+"209 add_4" [id=209, type=add];
+"210 view_9" [id=210, type=view];
+"211 softmax_1" [id=211, type=softmax];
+"212 dropout_4" [id=212, type=dropout];
+"213 matmul_3" [id=213, type=matmul];
+"214 transpose_3" [id=214, type=transpose];
+"215 reshape_7" [id=215, type=reshape];
+"216 linear_9_updated_constant0" [id=216, type=get_attr];
+"217 reshape_7_0_0_nncf_smooth_quant_0" [id=217, type=call_module];
+"218 quantize_per_tensor_default_10" [id=218, type=quantize_per_tensor];
+"219 dequantize_per_tensor_default_10" [id=219, type=dequantize_per_tensor];
+"220 linear_9_scale_0" [id=220, type=get_attr];
+"221 linear_9_zero_point_0" [id=221, type=get_attr];
+"222 quantize_per_channel_default_10" [id=222, type=quantize_per_channel];
+"223 dequantize_per_channel_default_10" [id=223, type=dequantize_per_channel];
+"224 _param_constant27_0_0" [id=224, type=get_attr];
+"225 linear_9" [id=225, type=linear];
+"226 dropout_5" [id=226, type=dropout];
+"227 view_10" [id=227, type=view];
+"228 permute_9" [id=228, type=permute];
+"229 reshape_8" [id=229, type=reshape];
+"230 roll_1" [id=230, type=roll];
+"231 slice_23" [id=231, type=slice];
+"232 slice_24" [id=232, type=slice];
+"233 _param_constant28" [id=233, type=get_attr];
+"234 _param_constant29" [id=234, type=get_attr];
+"235 layer_norm_3" [id=235, type=layer_norm];
+"236 add_5" [id=236, type=add];
+"237 linear_10_updated_constant0" [id=237, type=get_attr];
+"238 add_5_0_0_nncf_smooth_quant_0" [id=238, type=call_module];
+"239 quantize_per_tensor_default_11" [id=239, type=quantize_per_tensor];
+"240 dequantize_per_tensor_default_11" [id=240, type=dequantize_per_tensor];
+"241 linear_10_scale_0" [id=241, type=get_attr];
+"242 linear_10_zero_point_0" [id=242, type=get_attr];
+"243 quantize_per_channel_default_11" [id=243, type=quantize_per_channel];
+"244 dequantize_per_channel_default_11" [id=244, type=dequantize_per_channel];
+"245 _param_constant31_0_0" [id=245, type=get_attr];
+"246 linear_10" [id=246, type=linear];
+"247 gelu_1" [id=247, type=gelu];
+"248 dropout_6" [id=248, type=dropout];
+"249 linear_11_updated_constant0" [id=249, type=get_attr];
+"250 dropout_6_0_0_nncf_smooth_quant_0" [id=250, type=call_module];
+"251 quantize_per_tensor_default_12" [id=251, type=quantize_per_tensor];
+"252 dequantize_per_tensor_default_12" [id=252, type=dequantize_per_tensor];
+"253 linear_11_scale_0" [id=253, type=get_attr];
+"254 linear_11_zero_point_0" [id=254, type=get_attr];
+"255 quantize_per_channel_default_12" [id=255, type=quantize_per_channel];
+"256 dequantize_per_channel_default_12" [id=256, type=dequantize_per_channel];
+"257 _param_constant33_0_0" [id=257, type=get_attr];
+"258 linear_11" [id=258, type=linear];
+"259 dropout_7" [id=259, type=dropout];
+"260 _param_constant34" [id=260, type=get_attr];
+"261 _param_constant35" [id=261, type=get_attr];
+"262 layer_norm_4" [id=262, type=layer_norm];
+"263 add_6" [id=263, type=add];
+"264 pad_2" [id=264, type=pad];
+"265 slice_25" [id=265, type=slice];
+"266 slice_26" [id=266, type=slice];
+"267 slice_27" [id=267, type=slice];
+"268 slice_28" [id=268, type=slice];
+"269 slice_29" [id=269, type=slice];
+"270 slice_30" [id=270, type=slice];
+"271 slice_31" [id=271, type=slice];
+"272 slice_32" [id=272, type=slice];
+"273 slice_33" [id=273, type=slice];
+"274 slice_34" [id=274, type=slice];
+"275 slice_35" [id=275, type=slice];
+"276 slice_36" [id=276, type=slice];
+"277 cat" [id=277, type=cat];
+"278 linear_12_updated_constant0" [id=278, type=get_attr];
+"279 cat_0_0_nncf_smooth_quant_0" [id=279, type=call_module];
+"280 quantize_per_tensor_default_13" [id=280, type=quantize_per_tensor];
+"281 dequantize_per_tensor_default_13" [id=281, type=dequantize_per_tensor];
+"282 linear_12_scale_0" [id=282, type=get_attr];
+"283 linear_12_zero_point_0" [id=283, type=get_attr];
+"284 quantize_per_channel_default_13" [id=284, type=quantize_per_channel];
+"285 dequantize_per_channel_default_13" [id=285, type=dequantize_per_channel];
+"286 linear_12" [id=286, type=linear];
+"287 _param_constant37" [id=287, type=get_attr];
+"288 _param_constant38" [id=288, type=get_attr];
+"289 layer_norm_5" [id=289, type=layer_norm];
+"290 _tensor_constant13" [id=290, type=get_attr];
+"291 linear_13_updated_constant0" [id=291, type=get_attr];
+"292 _tensor_constant13_0_0_nncf_smooth_quant_0" [id=292, type=call_module];
+"293 linear_13_scale_0" [id=293, type=get_attr];
+"294 linear_13_zero_point_0" [id=294, type=get_attr];
+"295 quantize_per_channel_default_14" [id=295, type=quantize_per_channel];
+"296 dequantize_per_channel_default_14" [id=296, type=dequantize_per_channel];
+"297 _param_constant40_0_0" [id=297, type=get_attr];
+"298 linear_13" [id=298, type=linear];
+"299 relu__2" [id=299, type=relu_];
+"300 linear_14_updated_constant0" [id=300, type=get_attr];
+"301 relu__2_0_0_nncf_smooth_quant_0" [id=301, type=call_module];
+"302 linear_14_scale_0" [id=302, type=get_attr];
+"303 linear_14_zero_point_0" [id=303, type=get_attr];
+"304 quantize_per_channel_default_15" [id=304, type=quantize_per_channel];
+"305 dequantize_per_channel_default_15" [id=305, type=dequantize_per_channel];
+"306 linear_14" [id=306, type=linear];
+"307 view_11" [id=307, type=view];
+"308 _tensor_constant14" [id=308, type=get_attr];
+"309 index_2" [id=309, type=index];
+"310 view_12" [id=310, type=view];
+"311 permute_10" [id=311, type=permute];
+"312 contiguous_2" [id=312, type=contiguous];
+"313 unsqueeze_6" [id=313, type=unsqueeze];
+"314 sigmoid_2" [id=314, type=sigmoid];
+"315 mul_4" [id=315, type=mul];
+"316 pad_3" [id=316, type=pad];
+"317 view_13" [id=317, type=view];
+"318 permute_11" [id=318, type=permute];
+"319 reshape_9" [id=319, type=reshape];
+"320 linear_15_updated_constant0" [id=320, type=get_attr];
+"321 reshape_9_0_0_nncf_smooth_quant_0" [id=321, type=call_module];
+"322 quantize_per_tensor_default_14" [id=322, type=quantize_per_tensor];
+"323 dequantize_per_tensor_default_14" [id=323, type=dequantize_per_tensor];
+"324 linear_15_scale_0" [id=324, type=get_attr];
+"325 linear_15_zero_point_0" [id=325, type=get_attr];
+"326 quantize_per_channel_default_16" [id=326, type=quantize_per_channel];
+"327 dequantize_per_channel_default_16" [id=327, type=dequantize_per_channel];
+"328 _param_constant42_0_0" [id=328, type=get_attr];
+"329 linear_15" [id=329, type=linear];
+"330 reshape_10" [id=330, type=reshape];
+"331 permute_12" [id=331, type=permute];
+"332 select_6" [id=332, type=select];
+"333 select_7" [id=333, type=select];
+"334 select_8" [id=334, type=select];
+"335 linalg_vector_norm_4" [id=335, type=linalg_vector_norm];
+"336 clamp_min_4" [id=336, type=clamp_min];
+"337 expand_as_4" [id=337, type=expand_as];
+"338 div_4" [id=338, type=div];
+"339 quantize_per_tensor_default_15" [id=339, type=quantize_per_tensor];
+"340 dequantize_per_tensor_default_15" [id=340, type=dequantize_per_tensor];
+"341 linalg_vector_norm_5" [id=341, type=linalg_vector_norm];
+"342 clamp_min_5" [id=342, type=clamp_min];
+"343 expand_as_5" [id=343, type=expand_as];
+"344 div_5" [id=344, type=div];
+"345 quantize_per_tensor_default_16" [id=345, type=quantize_per_tensor];
+"346 dequantize_per_tensor_default_16" [id=346, type=dequantize_per_tensor];
+"347 transpose_4" [id=347, type=transpose];
+"348 matmul_4" [id=348, type=matmul];
+"349 _param_constant44" [id=349, type=get_attr];
+"350 clamp_2" [id=350, type=clamp];
+"351 exp_2" [id=351, type=exp];
+"352 mul_5" [id=352, type=mul];
+"353 add_7" [id=353, type=add];
+"354 softmax_2" [id=354, type=softmax];
+"355 dropout_8" [id=355, type=dropout];
+"356 matmul_5" [id=356, type=matmul];
+"357 transpose_5" [id=357, type=transpose];
+"358 reshape_11" [id=358, type=reshape];
+"359 linear_16_updated_constant0" [id=359, type=get_attr];
+"360 reshape_11_0_0_nncf_smooth_quant_0" [id=360, type=call_module];
+"361 quantize_per_tensor_default_17" [id=361, type=quantize_per_tensor];
+"362 dequantize_per_tensor_default_17" [id=362, type=dequantize_per_tensor];
+"363 linear_16_scale_0" [id=363, type=get_attr];
+"364 linear_16_zero_point_0" [id=364, type=get_attr];
+"365 quantize_per_channel_default_17" [id=365, type=quantize_per_channel];
+"366 dequantize_per_channel_default_17" [id=366, type=dequantize_per_channel];
+"367 _param_constant46_0_0" [id=367, type=get_attr];
+"368 linear_16" [id=368, type=linear];
+"369 dropout_9" [id=369, type=dropout];
+"370 view_14" [id=370, type=view];
+"371 permute_13" [id=371, type=permute];
+"372 reshape_12" [id=372, type=reshape];
+"373 slice_38" [id=373, type=slice];
+"374 slice_39" [id=374, type=slice];
+"375 slice_40" [id=375, type=slice];
+"376 slice_41" [id=376, type=slice];
+"377 contiguous_3" [id=377, type=contiguous];
+"378 _param_constant47" [id=378, type=get_attr];
+"379 _param_constant48" [id=379, type=get_attr];
+"380 layer_norm_6" [id=380, type=layer_norm];
+"381 add_8" [id=381, type=add];
+"382 linear_17_updated_constant0" [id=382, type=get_attr];
+"383 add_8_0_0_nncf_smooth_quant_0" [id=383, type=call_module];
+"384 quantize_per_tensor_default_18" [id=384, type=quantize_per_tensor];
+"385 dequantize_per_tensor_default_18" [id=385, type=dequantize_per_tensor];
+"386 linear_17_scale_0" [id=386, type=get_attr];
+"387 linear_17_zero_point_0" [id=387, type=get_attr];
+"388 quantize_per_channel_default_18" [id=388, type=quantize_per_channel];
+"389 dequantize_per_channel_default_18" [id=389, type=dequantize_per_channel];
+"390 _param_constant50_0_0" [id=390, type=get_attr];
+"391 linear_17" [id=391, type=linear];
+"392 gelu_2" [id=392, type=gelu];
+"393 dropout_10" [id=393, type=dropout];
+"394 linear_18_updated_constant0" [id=394, type=get_attr];
+"395 dropout_10_0_0_nncf_smooth_quant_0" [id=395, type=call_module];
+"396 quantize_per_tensor_default_19" [id=396, type=quantize_per_tensor];
+"397 dequantize_per_tensor_default_19" [id=397, type=dequantize_per_tensor];
+"398 linear_18_scale_0" [id=398, type=get_attr];
+"399 linear_18_zero_point_0" [id=399, type=get_attr];
+"400 quantize_per_channel_default_19" [id=400, type=quantize_per_channel];
+"401 dequantize_per_channel_default_19" [id=401, type=dequantize_per_channel];
+"402 _param_constant52_0_0" [id=402, type=get_attr];
+"403 linear_18" [id=403, type=linear];
+"404 dropout_11" [id=404, type=dropout];
+"405 _param_constant53" [id=405, type=get_attr];
+"406 _param_constant54" [id=406, type=get_attr];
+"407 layer_norm_7" [id=407, type=layer_norm];
+"408 add_9" [id=408, type=add];
+"409 _tensor_constant15" [id=409, type=get_attr];
+"410 linear_19_updated_constant0" [id=410, type=get_attr];
+"411 _tensor_constant15_0_0_nncf_smooth_quant_0" [id=411, type=call_module];
+"412 linear_19_scale_0" [id=412, type=get_attr];
+"413 linear_19_zero_point_0" [id=413, type=get_attr];
+"414 quantize_per_channel_default_20" [id=414, type=quantize_per_channel];
+"415 dequantize_per_channel_default_20" [id=415, type=dequantize_per_channel];
+"416 _param_constant56_0_0" [id=416, type=get_attr];
+"417 linear_19" [id=417, type=linear];
+"418 relu__3" [id=418, type=relu_];
+"419 linear_20_updated_constant0" [id=419, type=get_attr];
+"420 relu__3_0_0_nncf_smooth_quant_0" [id=420, type=call_module];
+"421 linear_20_scale_0" [id=421, type=get_attr];
+"422 linear_20_zero_point_0" [id=422, type=get_attr];
+"423 quantize_per_channel_default_21" [id=423, type=quantize_per_channel];
+"424 dequantize_per_channel_default_21" [id=424, type=dequantize_per_channel];
+"425 linear_20" [id=425, type=linear];
+"426 view_15" [id=426, type=view];
+"427 _tensor_constant16" [id=427, type=get_attr];
+"428 index_3" [id=428, type=index];
+"429 view_16" [id=429, type=view];
+"430 permute_14" [id=430, type=permute];
+"431 contiguous_4" [id=431, type=contiguous];
+"432 unsqueeze_7" [id=432, type=unsqueeze];
+"433 sigmoid_3" [id=433, type=sigmoid];
+"434 mul_6" [id=434, type=mul];
+"435 pad_4" [id=435, type=pad];
+"436 roll_2" [id=436, type=roll];
+"437 view_17" [id=437, type=view];
+"438 permute_15" [id=438, type=permute];
+"439 reshape_13" [id=439, type=reshape];
+"440 linear_21_updated_constant0" [id=440, type=get_attr];
+"441 reshape_13_0_0_nncf_smooth_quant_0" [id=441, type=call_module];
+"442 quantize_per_tensor_default_20" [id=442, type=quantize_per_tensor];
+"443 dequantize_per_tensor_default_20" [id=443, type=dequantize_per_tensor];
+"444 linear_21_scale_0" [id=444, type=get_attr];
+"445 linear_21_zero_point_0" [id=445, type=get_attr];
+"446 quantize_per_channel_default_22" [id=446, type=quantize_per_channel];
+"447 dequantize_per_channel_default_22" [id=447, type=dequantize_per_channel];
+"448 _param_constant58_0_0" [id=448, type=get_attr];
+"449 linear_21" [id=449, type=linear];
+"450 reshape_14" [id=450, type=reshape];
+"451 permute_16" [id=451, type=permute];
+"452 select_9" [id=452, type=select];
+"453 select_10" [id=453, type=select];
+"454 select_11" [id=454, type=select];
+"455 linalg_vector_norm_6" [id=455, type=linalg_vector_norm];
+"456 clamp_min_6" [id=456, type=clamp_min];
+"457 expand_as_6" [id=457, type=expand_as];
+"458 div_6" [id=458, type=div];
+"459 quantize_per_tensor_default_21" [id=459, type=quantize_per_tensor];
+"460 dequantize_per_tensor_default_21" [id=460, type=dequantize_per_tensor];
+"461 linalg_vector_norm_7" [id=461, type=linalg_vector_norm];
+"462 clamp_min_7" [id=462, type=clamp_min];
+"463 expand_as_7" [id=463, type=expand_as];
+"464 div_7" [id=464, type=div];
+"465 quantize_per_tensor_default_22" [id=465, type=quantize_per_tensor];
+"466 dequantize_per_tensor_default_22" [id=466, type=dequantize_per_tensor];
+"467 transpose_6" [id=467, type=transpose];
+"468 matmul_6" [id=468, type=matmul];
+"469 _param_constant60" [id=469, type=get_attr];
+"470 clamp_3" [id=470, type=clamp];
+"471 exp_3" [id=471, type=exp];
+"472 mul_7" [id=472, type=mul];
+"473 add_10" [id=473, type=add];
+"474 new_zeros_1" [id=474, type=new_zeros];
+"475 view_18" [id=475, type=view];
+"476 permute_17" [id=476, type=permute];
+"477 reshape_15" [id=477, type=reshape];
+"478 unsqueeze_8" [id=478, type=unsqueeze];
+"479 unsqueeze_9" [id=479, type=unsqueeze];
+"480 sub_1" [id=480, type=sub];
+"481 ne_1" [id=481, type=ne];
+"482 masked_fill_2" [id=482, type=masked_fill];
+"483 eq_1" [id=483, type=eq];
+"484 masked_fill_3" [id=484, type=masked_fill];
+"485 view_19" [id=485, type=view];
+"486 unsqueeze_10" [id=486, type=unsqueeze];
+"487 unsqueeze_11" [id=487, type=unsqueeze];
+"488 add_11" [id=488, type=add];
+"489 view_20" [id=489, type=view];
+"490 softmax_3" [id=490, type=softmax];
+"491 dropout_12" [id=491, type=dropout];
+"492 matmul_7" [id=492, type=matmul];
+"493 transpose_7" [id=493, type=transpose];
+"494 reshape_16" [id=494, type=reshape];
+"495 linear_22_updated_constant0" [id=495, type=get_attr];
+"496 reshape_16_0_0_nncf_smooth_quant_0" [id=496, type=call_module];
+"497 quantize_per_tensor_default_23" [id=497, type=quantize_per_tensor];
+"498 dequantize_per_tensor_default_23" [id=498, type=dequantize_per_tensor];
+"499 linear_22_scale_0" [id=499, type=get_attr];
+"500 linear_22_zero_point_0" [id=500, type=get_attr];
+"501 quantize_per_channel_default_23" [id=501, type=quantize_per_channel];
+"502 dequantize_per_channel_default_23" [id=502, type=dequantize_per_channel];
+"503 _param_constant62_0_0" [id=503, type=get_attr];
+"504 linear_22" [id=504, type=linear];
+"505 dropout_13" [id=505, type=dropout];
+"506 view_21" [id=506, type=view];
+"507 permute_18" [id=507, type=permute];
+"508 reshape_17" [id=508, type=reshape];
+"509 roll_3" [id=509, type=roll];
+"510 slice_61" [id=510, type=slice];
+"511 slice_62" [id=511, type=slice];
+"512 slice_63" [id=512, type=slice];
+"513 slice_64" [id=513, type=slice];
+"514 contiguous_5" [id=514, type=contiguous];
+"515 _param_constant63" [id=515, type=get_attr];
+"516 _param_constant64" [id=516, type=get_attr];
+"517 layer_norm_8" [id=517, type=layer_norm];
+"518 add_12" [id=518, type=add];
+"519 linear_23_updated_constant0" [id=519, type=get_attr];
+"520 add_12_0_0_nncf_smooth_quant_0" [id=520, type=call_module];
+"521 quantize_per_tensor_default_24" [id=521, type=quantize_per_tensor];
+"522 dequantize_per_tensor_default_24" [id=522, type=dequantize_per_tensor];
+"523 linear_23_scale_0" [id=523, type=get_attr];
+"524 linear_23_zero_point_0" [id=524, type=get_attr];
+"525 quantize_per_channel_default_24" [id=525, type=quantize_per_channel];
+"526 dequantize_per_channel_default_24" [id=526, type=dequantize_per_channel];
+"527 _param_constant66_0_0" [id=527, type=get_attr];
+"528 linear_23" [id=528, type=linear];
+"529 gelu_3" [id=529, type=gelu];
+"530 dropout_14" [id=530, type=dropout];
+"531 linear_24_updated_constant0" [id=531, type=get_attr];
+"532 dropout_14_0_0_nncf_smooth_quant_0" [id=532, type=call_module];
+"533 quantize_per_tensor_default_25" [id=533, type=quantize_per_tensor];
+"534 dequantize_per_tensor_default_25" [id=534, type=dequantize_per_tensor];
+"535 linear_24_scale_0" [id=535, type=get_attr];
+"536 linear_24_zero_point_0" [id=536, type=get_attr];
+"537 quantize_per_channel_default_25" [id=537, type=quantize_per_channel];
+"538 dequantize_per_channel_default_25" [id=538, type=dequantize_per_channel];
+"539 _param_constant68_0_0" [id=539, type=get_attr];
+"540 linear_24" [id=540, type=linear];
+"541 dropout_15" [id=541, type=dropout];
+"542 _param_constant69" [id=542, type=get_attr];
+"543 _param_constant70" [id=543, type=get_attr];
+"544 layer_norm_9" [id=544, type=layer_norm];
+"545 add_13" [id=545, type=add];
+"546 pad_5" [id=546, type=pad];
+"547 slice_65" [id=547, type=slice];
+"548 slice_66" [id=548, type=slice];
+"549 slice_67" [id=549, type=slice];
+"550 slice_68" [id=550, type=slice];
+"551 slice_69" [id=551, type=slice];
+"552 slice_70" [id=552, type=slice];
+"553 slice_71" [id=553, type=slice];
+"554 slice_72" [id=554, type=slice];
+"555 slice_73" [id=555, type=slice];
+"556 slice_74" [id=556, type=slice];
+"557 slice_75" [id=557, type=slice];
+"558 slice_76" [id=558, type=slice];
+"559 cat_1" [id=559, type=cat];
+"560 linear_25_updated_constant0" [id=560, type=get_attr];
+"561 cat_1_0_0_nncf_smooth_quant_0" [id=561, type=call_module];
+"562 quantize_per_tensor_default_26" [id=562, type=quantize_per_tensor];
+"563 dequantize_per_tensor_default_26" [id=563, type=dequantize_per_tensor];
+"564 linear_25_scale_0" [id=564, type=get_attr];
+"565 linear_25_zero_point_0" [id=565, type=get_attr];
+"566 quantize_per_channel_default_26" [id=566, type=quantize_per_channel];
+"567 dequantize_per_channel_default_26" [id=567, type=dequantize_per_channel];
+"568 linear_25" [id=568, type=linear];
+"569 _param_constant72" [id=569, type=get_attr];
+"570 _param_constant73" [id=570, type=get_attr];
+"571 layer_norm_10" [id=571, type=layer_norm];
+"572 _tensor_constant26" [id=572, type=get_attr];
+"573 linear_26_updated_constant0" [id=573, type=get_attr];
+"574 _tensor_constant26_0_0_nncf_smooth_quant_0" [id=574, type=call_module];
+"575 linear_26_scale_0" [id=575, type=get_attr];
+"576 linear_26_zero_point_0" [id=576, type=get_attr];
+"577 quantize_per_channel_default_27" [id=577, type=quantize_per_channel];
+"578 dequantize_per_channel_default_27" [id=578, type=dequantize_per_channel];
+"579 _param_constant75_0_0" [id=579, type=get_attr];
+"580 linear_26" [id=580, type=linear];
+"581 relu__4" [id=581, type=relu_];
+"582 linear_27_updated_constant0" [id=582, type=get_attr];
+"583 relu__4_0_0_nncf_smooth_quant_0" [id=583, type=call_module];
+"584 linear_27_scale_0" [id=584, type=get_attr];
+"585 linear_27_zero_point_0" [id=585, type=get_attr];
+"586 quantize_per_channel_default_28" [id=586, type=quantize_per_channel];
+"587 dequantize_per_channel_default_28" [id=587, type=dequantize_per_channel];
+"588 linear_27" [id=588, type=linear];
+"589 view_22" [id=589, type=view];
+"590 _tensor_constant27" [id=590, type=get_attr];
+"591 index_4" [id=591, type=index];
+"592 view_23" [id=592, type=view];
+"593 permute_19" [id=593, type=permute];
+"594 contiguous_6" [id=594, type=contiguous];
+"595 unsqueeze_12" [id=595, type=unsqueeze];
+"596 sigmoid_4" [id=596, type=sigmoid];
+"597 mul_8" [id=597, type=mul];
+"598 pad_6" [id=598, type=pad];
+"599 view_24" [id=599, type=view];
+"600 permute_20" [id=600, type=permute];
+"601 reshape_18" [id=601, type=reshape];
+"602 linear_28_updated_constant0" [id=602, type=get_attr];
+"603 reshape_18_0_0_nncf_smooth_quant_0" [id=603, type=call_module];
+"604 quantize_per_tensor_default_27" [id=604, type=quantize_per_tensor];
+"605 dequantize_per_tensor_default_27" [id=605, type=dequantize_per_tensor];
+"606 linear_28_scale_0" [id=606, type=get_attr];
+"607 linear_28_zero_point_0" [id=607, type=get_attr];
+"608 quantize_per_channel_default_29" [id=608, type=quantize_per_channel];
+"609 dequantize_per_channel_default_29" [id=609, type=dequantize_per_channel];
+"610 _param_constant77_0_0" [id=610, type=get_attr];
+"611 linear_28" [id=611, type=linear];
+"612 reshape_19" [id=612, type=reshape];
+"613 permute_21" [id=613, type=permute];
+"614 select_12" [id=614, type=select];
+"615 select_13" [id=615, type=select];
+"616 select_14" [id=616, type=select];
+"617 linalg_vector_norm_8" [id=617, type=linalg_vector_norm];
+"618 clamp_min_8" [id=618, type=clamp_min];
+"619 expand_as_8" [id=619, type=expand_as];
+"620 div_8" [id=620, type=div];
+"621 quantize_per_tensor_default_28" [id=621, type=quantize_per_tensor];
+"622 dequantize_per_tensor_default_28" [id=622, type=dequantize_per_tensor];
+"623 linalg_vector_norm_9" [id=623, type=linalg_vector_norm];
+"624 clamp_min_9" [id=624, type=clamp_min];
+"625 expand_as_9" [id=625, type=expand_as];
+"626 div_9" [id=626, type=div];
+"627 quantize_per_tensor_default_29" [id=627, type=quantize_per_tensor];
+"628 dequantize_per_tensor_default_29" [id=628, type=dequantize_per_tensor];
+"629 transpose_8" [id=629, type=transpose];
+"630 matmul_8" [id=630, type=matmul];
+"631 _param_constant79" [id=631, type=get_attr];
+"632 clamp_4" [id=632, type=clamp];
+"633 exp_4" [id=633, type=exp];
+"634 mul_9" [id=634, type=mul];
+"635 add_14" [id=635, type=add];
+"636 softmax_4" [id=636, type=softmax];
+"637 dropout_16" [id=637, type=dropout];
+"638 matmul_9" [id=638, type=matmul];
+"639 transpose_9" [id=639, type=transpose];
+"640 reshape_20" [id=640, type=reshape];
+"641 linear_29_updated_constant0" [id=641, type=get_attr];
+"642 reshape_20_0_0_nncf_smooth_quant_0" [id=642, type=call_module];
+"643 quantize_per_tensor_default_30" [id=643, type=quantize_per_tensor];
+"644 dequantize_per_tensor_default_30" [id=644, type=dequantize_per_tensor];
+"645 linear_29_scale_0" [id=645, type=get_attr];
+"646 linear_29_zero_point_0" [id=646, type=get_attr];
+"647 quantize_per_channel_default_30" [id=647, type=quantize_per_channel];
+"648 dequantize_per_channel_default_30" [id=648, type=dequantize_per_channel];
+"649 _param_constant81_0_0" [id=649, type=get_attr];
+"650 linear_29" [id=650, type=linear];
+"651 dropout_17" [id=651, type=dropout];
+"652 view_25" [id=652, type=view];
+"653 permute_22" [id=653, type=permute];
+"654 reshape_21" [id=654, type=reshape];
+"655 slice_78" [id=655, type=slice];
+"656 slice_79" [id=656, type=slice];
+"657 slice_80" [id=657, type=slice];
+"658 slice_81" [id=658, type=slice];
+"659 contiguous_7" [id=659, type=contiguous];
+"660 _param_constant82" [id=660, type=get_attr];
+"661 _param_constant83" [id=661, type=get_attr];
+"662 layer_norm_11" [id=662, type=layer_norm];
+"663 add_15" [id=663, type=add];
+"664 linear_30_updated_constant0" [id=664, type=get_attr];
+"665 add_15_0_0_nncf_smooth_quant_0" [id=665, type=call_module];
+"666 quantize_per_tensor_default_31" [id=666, type=quantize_per_tensor];
+"667 dequantize_per_tensor_default_31" [id=667, type=dequantize_per_tensor];
+"668 linear_30_scale_0" [id=668, type=get_attr];
+"669 linear_30_zero_point_0" [id=669, type=get_attr];
+"670 quantize_per_channel_default_31" [id=670, type=quantize_per_channel];
+"671 dequantize_per_channel_default_31" [id=671, type=dequantize_per_channel];
+"672 _param_constant85_0_0" [id=672, type=get_attr];
+"673 linear_30" [id=673, type=linear];
+"674 gelu_4" [id=674, type=gelu];
+"675 dropout_18" [id=675, type=dropout];
+"676 linear_31_updated_constant0" [id=676, type=get_attr];
+"677 dropout_18_0_0_nncf_smooth_quant_0" [id=677, type=call_module];
+"678 quantize_per_tensor_default_32" [id=678, type=quantize_per_tensor];
+"679 dequantize_per_tensor_default_32" [id=679, type=dequantize_per_tensor];
+"680 linear_31_scale_0" [id=680, type=get_attr];
+"681 linear_31_zero_point_0" [id=681, type=get_attr];
+"682 quantize_per_channel_default_32" [id=682, type=quantize_per_channel];
+"683 dequantize_per_channel_default_32" [id=683, type=dequantize_per_channel];
+"684 _param_constant87_0_0" [id=684, type=get_attr];
+"685 linear_31" [id=685, type=linear];
+"686 dropout_19" [id=686, type=dropout];
+"687 _param_constant88" [id=687, type=get_attr];
+"688 _param_constant89" [id=688, type=get_attr];
+"689 layer_norm_12" [id=689, type=layer_norm];
+"690 add_16" [id=690, type=add];
+"691 _tensor_constant28" [id=691, type=get_attr];
+"692 linear_32_updated_constant0" [id=692, type=get_attr];
+"693 _tensor_constant28_0_0_nncf_smooth_quant_0" [id=693, type=call_module];
+"694 linear_32_scale_0" [id=694, type=get_attr];
+"695 linear_32_zero_point_0" [id=695, type=get_attr];
+"696 quantize_per_channel_default_33" [id=696, type=quantize_per_channel];
+"697 dequantize_per_channel_default_33" [id=697, type=dequantize_per_channel];
+"698 _param_constant91_0_0" [id=698, type=get_attr];
+"699 linear_32" [id=699, type=linear];
+"700 relu__5" [id=700, type=relu_];
+"701 linear_33_updated_constant0" [id=701, type=get_attr];
+"702 relu__5_0_0_nncf_smooth_quant_0" [id=702, type=call_module];
+"703 linear_33_scale_0" [id=703, type=get_attr];
+"704 linear_33_zero_point_0" [id=704, type=get_attr];
+"705 quantize_per_channel_default_34" [id=705, type=quantize_per_channel];
+"706 dequantize_per_channel_default_34" [id=706, type=dequantize_per_channel];
+"707 linear_33" [id=707, type=linear];
+"708 view_26" [id=708, type=view];
+"709 _tensor_constant29" [id=709, type=get_attr];
+"710 index_5" [id=710, type=index];
+"711 view_27" [id=711, type=view];
+"712 permute_23" [id=712, type=permute];
+"713 contiguous_8" [id=713, type=contiguous];
+"714 unsqueeze_13" [id=714, type=unsqueeze];
+"715 sigmoid_5" [id=715, type=sigmoid];
+"716 mul_10" [id=716, type=mul];
+"717 pad_7" [id=717, type=pad];
+"718 roll_4" [id=718, type=roll];
+"719 view_28" [id=719, type=view];
+"720 permute_24" [id=720, type=permute];
+"721 reshape_22" [id=721, type=reshape];
+"722 linear_34_updated_constant0" [id=722, type=get_attr];
+"723 reshape_22_0_0_nncf_smooth_quant_0" [id=723, type=call_module];
+"724 quantize_per_tensor_default_33" [id=724, type=quantize_per_tensor];
+"725 dequantize_per_tensor_default_33" [id=725, type=dequantize_per_tensor];
+"726 linear_34_scale_0" [id=726, type=get_attr];
+"727 linear_34_zero_point_0" [id=727, type=get_attr];
+"728 quantize_per_channel_default_35" [id=728, type=quantize_per_channel];
+"729 dequantize_per_channel_default_35" [id=729, type=dequantize_per_channel];
+"730 _param_constant93_0_0" [id=730, type=get_attr];
+"731 linear_34" [id=731, type=linear];
+"732 reshape_23" [id=732, type=reshape];
+"733 permute_25" [id=733, type=permute];
+"734 select_15" [id=734, type=select];
+"735 select_16" [id=735, type=select];
+"736 select_17" [id=736, type=select];
+"737 linalg_vector_norm_10" [id=737, type=linalg_vector_norm];
+"738 clamp_min_10" [id=738, type=clamp_min];
+"739 expand_as_10" [id=739, type=expand_as];
+"740 div_10" [id=740, type=div];
+"741 quantize_per_tensor_default_34" [id=741, type=quantize_per_tensor];
+"742 dequantize_per_tensor_default_34" [id=742, type=dequantize_per_tensor];
+"743 linalg_vector_norm_11" [id=743, type=linalg_vector_norm];
+"744 clamp_min_11" [id=744, type=clamp_min];
+"745 expand_as_11" [id=745, type=expand_as];
+"746 div_11" [id=746, type=div];
+"747 quantize_per_tensor_default_35" [id=747, type=quantize_per_tensor];
+"748 dequantize_per_tensor_default_35" [id=748, type=dequantize_per_tensor];
+"749 transpose_10" [id=749, type=transpose];
+"750 matmul_10" [id=750, type=matmul];
+"751 _param_constant95" [id=751, type=get_attr];
+"752 clamp_5" [id=752, type=clamp];
+"753 exp_5" [id=753, type=exp];
+"754 mul_11" [id=754, type=mul];
+"755 add_17" [id=755, type=add];
+"756 new_zeros_2" [id=756, type=new_zeros];
+"757 view_29" [id=757, type=view];
+"758 permute_26" [id=758, type=permute];
+"759 reshape_24" [id=759, type=reshape];
+"760 unsqueeze_14" [id=760, type=unsqueeze];
+"761 unsqueeze_15" [id=761, type=unsqueeze];
+"762 sub_2" [id=762, type=sub];
+"763 ne_2" [id=763, type=ne];
+"764 masked_fill_4" [id=764, type=masked_fill];
+"765 eq_2" [id=765, type=eq];
+"766 masked_fill_5" [id=766, type=masked_fill];
+"767 view_30" [id=767, type=view];
+"768 unsqueeze_16" [id=768, type=unsqueeze];
+"769 unsqueeze_17" [id=769, type=unsqueeze];
+"770 add_18" [id=770, type=add];
+"771 view_31" [id=771, type=view];
+"772 softmax_5" [id=772, type=softmax];
+"773 dropout_20" [id=773, type=dropout];
+"774 matmul_11" [id=774, type=matmul];
+"775 transpose_11" [id=775, type=transpose];
+"776 reshape_25" [id=776, type=reshape];
+"777 linear_35_updated_constant0" [id=777, type=get_attr];
+"778 reshape_25_0_0_nncf_smooth_quant_0" [id=778, type=call_module];
+"779 quantize_per_tensor_default_36" [id=779, type=quantize_per_tensor];
+"780 dequantize_per_tensor_default_36" [id=780, type=dequantize_per_tensor];
+"781 linear_35_scale_0" [id=781, type=get_attr];
+"782 linear_35_zero_point_0" [id=782, type=get_attr];
+"783 quantize_per_channel_default_36" [id=783, type=quantize_per_channel];
+"784 dequantize_per_channel_default_36" [id=784, type=dequantize_per_channel];
+"785 _param_constant97_0_0" [id=785, type=get_attr];
+"786 linear_35" [id=786, type=linear];
+"787 dropout_21" [id=787, type=dropout];
+"788 view_32" [id=788, type=view];
+"789 permute_27" [id=789, type=permute];
+"790 reshape_26" [id=790, type=reshape];
+"791 roll_5" [id=791, type=roll];
+"792 slice_101" [id=792, type=slice];
+"793 slice_102" [id=793, type=slice];
+"794 slice_103" [id=794, type=slice];
+"795 slice_104" [id=795, type=slice];
+"796 contiguous_9" [id=796, type=contiguous];
+"797 _param_constant98" [id=797, type=get_attr];
+"798 _param_constant99" [id=798, type=get_attr];
+"799 layer_norm_13" [id=799, type=layer_norm];
+"800 add_19" [id=800, type=add];
+"801 linear_36_updated_constant0" [id=801, type=get_attr];
+"802 add_19_0_0_nncf_smooth_quant_0" [id=802, type=call_module];
+"803 quantize_per_tensor_default_37" [id=803, type=quantize_per_tensor];
+"804 dequantize_per_tensor_default_37" [id=804, type=dequantize_per_tensor];
+"805 linear_36_scale_0" [id=805, type=get_attr];
+"806 linear_36_zero_point_0" [id=806, type=get_attr];
+"807 quantize_per_channel_default_37" [id=807, type=quantize_per_channel];
+"808 dequantize_per_channel_default_37" [id=808, type=dequantize_per_channel];
+"809 _param_constant101_0_0" [id=809, type=get_attr];
+"810 linear_36" [id=810, type=linear];
+"811 gelu_5" [id=811, type=gelu];
+"812 dropout_22" [id=812, type=dropout];
+"813 linear_37_updated_constant0" [id=813, type=get_attr];
+"814 dropout_22_0_0_nncf_smooth_quant_0" [id=814, type=call_module];
+"815 quantize_per_tensor_default_38" [id=815, type=quantize_per_tensor];
+"816 dequantize_per_tensor_default_38" [id=816, type=dequantize_per_tensor];
+"817 linear_37_scale_0" [id=817, type=get_attr];
+"818 linear_37_zero_point_0" [id=818, type=get_attr];
+"819 quantize_per_channel_default_38" [id=819, type=quantize_per_channel];
+"820 dequantize_per_channel_default_38" [id=820, type=dequantize_per_channel];
+"821 _param_constant103_0_0" [id=821, type=get_attr];
+"822 linear_37" [id=822, type=linear];
+"823 dropout_23" [id=823, type=dropout];
+"824 _param_constant104" [id=824, type=get_attr];
+"825 _param_constant105" [id=825, type=get_attr];
+"826 layer_norm_14" [id=826, type=layer_norm];
+"827 add_20" [id=827, type=add];
+"828 _tensor_constant39" [id=828, type=get_attr];
+"829 linear_38_updated_constant0" [id=829, type=get_attr];
+"830 _tensor_constant39_0_0_nncf_smooth_quant_0" [id=830, type=call_module];
+"831 linear_38_scale_0" [id=831, type=get_attr];
+"832 linear_38_zero_point_0" [id=832, type=get_attr];
+"833 quantize_per_channel_default_39" [id=833, type=quantize_per_channel];
+"834 dequantize_per_channel_default_39" [id=834, type=dequantize_per_channel];
+"835 _param_constant107_0_0" [id=835, type=get_attr];
+"836 linear_38" [id=836, type=linear];
+"837 relu__6" [id=837, type=relu_];
+"838 linear_39_updated_constant0" [id=838, type=get_attr];
+"839 relu__6_0_0_nncf_smooth_quant_0" [id=839, type=call_module];
+"840 linear_39_scale_0" [id=840, type=get_attr];
+"841 linear_39_zero_point_0" [id=841, type=get_attr];
+"842 quantize_per_channel_default_40" [id=842, type=quantize_per_channel];
+"843 dequantize_per_channel_default_40" [id=843, type=dequantize_per_channel];
+"844 linear_39" [id=844, type=linear];
+"845 view_33" [id=845, type=view];
+"846 _tensor_constant40" [id=846, type=get_attr];
+"847 index_6" [id=847, type=index];
+"848 view_34" [id=848, type=view];
+"849 permute_28" [id=849, type=permute];
+"850 contiguous_10" [id=850, type=contiguous];
+"851 unsqueeze_18" [id=851, type=unsqueeze];
+"852 sigmoid_6" [id=852, type=sigmoid];
+"853 mul_12" [id=853, type=mul];
+"854 pad_8" [id=854, type=pad];
+"855 view_35" [id=855, type=view];
+"856 permute_29" [id=856, type=permute];
+"857 reshape_27" [id=857, type=reshape];
+"858 linear_40_updated_constant0" [id=858, type=get_attr];
+"859 reshape_27_0_0_nncf_smooth_quant_0" [id=859, type=call_module];
+"860 quantize_per_tensor_default_39" [id=860, type=quantize_per_tensor];
+"861 dequantize_per_tensor_default_39" [id=861, type=dequantize_per_tensor];
+"862 linear_40_scale_0" [id=862, type=get_attr];
+"863 linear_40_zero_point_0" [id=863, type=get_attr];
+"864 quantize_per_channel_default_41" [id=864, type=quantize_per_channel];
+"865 dequantize_per_channel_default_41" [id=865, type=dequantize_per_channel];
+"866 _param_constant109_0_0" [id=866, type=get_attr];
+"867 linear_40" [id=867, type=linear];
+"868 reshape_28" [id=868, type=reshape];
+"869 permute_30" [id=869, type=permute];
+"870 select_18" [id=870, type=select];
+"871 select_19" [id=871, type=select];
+"872 select_20" [id=872, type=select];
+"873 linalg_vector_norm_12" [id=873, type=linalg_vector_norm];
+"874 clamp_min_12" [id=874, type=clamp_min];
+"875 expand_as_12" [id=875, type=expand_as];
+"876 div_12" [id=876, type=div];
+"877 quantize_per_tensor_default_40" [id=877, type=quantize_per_tensor];
+"878 dequantize_per_tensor_default_40" [id=878, type=dequantize_per_tensor];
+"879 linalg_vector_norm_13" [id=879, type=linalg_vector_norm];
+"880 clamp_min_13" [id=880, type=clamp_min];
+"881 expand_as_13" [id=881, type=expand_as];
+"882 div_13" [id=882, type=div];
+"883 quantize_per_tensor_default_41" [id=883, type=quantize_per_tensor];
+"884 dequantize_per_tensor_default_41" [id=884, type=dequantize_per_tensor];
+"885 transpose_12" [id=885, type=transpose];
+"886 matmul_12" [id=886, type=matmul];
+"887 _param_constant111" [id=887, type=get_attr];
+"888 clamp_6" [id=888, type=clamp];
+"889 exp_6" [id=889, type=exp];
+"890 mul_13" [id=890, type=mul];
+"891 add_21" [id=891, type=add];
+"892 softmax_6" [id=892, type=softmax];
+"893 dropout_24" [id=893, type=dropout];
+"894 matmul_13" [id=894, type=matmul];
+"895 transpose_13" [id=895, type=transpose];
+"896 reshape_29" [id=896, type=reshape];
+"897 linear_41_updated_constant0" [id=897, type=get_attr];
+"898 reshape_29_0_0_nncf_smooth_quant_0" [id=898, type=call_module];
+"899 quantize_per_tensor_default_42" [id=899, type=quantize_per_tensor];
+"900 dequantize_per_tensor_default_42" [id=900, type=dequantize_per_tensor];
+"901 linear_41_scale_0" [id=901, type=get_attr];
+"902 linear_41_zero_point_0" [id=902, type=get_attr];
+"903 quantize_per_channel_default_42" [id=903, type=quantize_per_channel];
+"904 dequantize_per_channel_default_42" [id=904, type=dequantize_per_channel];
+"905 _param_constant113_0_0" [id=905, type=get_attr];
+"906 linear_41" [id=906, type=linear];
+"907 dropout_25" [id=907, type=dropout];
+"908 view_36" [id=908, type=view];
+"909 permute_31" [id=909, type=permute];
+"910 reshape_30" [id=910, type=reshape];
+"911 slice_106" [id=911, type=slice];
+"912 slice_107" [id=912, type=slice];
+"913 slice_108" [id=913, type=slice];
+"914 slice_109" [id=914, type=slice];
+"915 contiguous_11" [id=915, type=contiguous];
+"916 _param_constant114" [id=916, type=get_attr];
+"917 _param_constant115" [id=917, type=get_attr];
+"918 layer_norm_15" [id=918, type=layer_norm];
+"919 add_22" [id=919, type=add];
+"920 linear_42_updated_constant0" [id=920, type=get_attr];
+"921 add_22_0_0_nncf_smooth_quant_0" [id=921, type=call_module];
+"922 quantize_per_tensor_default_43" [id=922, type=quantize_per_tensor];
+"923 dequantize_per_tensor_default_43" [id=923, type=dequantize_per_tensor];
+"924 linear_42_scale_0" [id=924, type=get_attr];
+"925 linear_42_zero_point_0" [id=925, type=get_attr];
+"926 quantize_per_channel_default_43" [id=926, type=quantize_per_channel];
+"927 dequantize_per_channel_default_43" [id=927, type=dequantize_per_channel];
+"928 _param_constant117_0_0" [id=928, type=get_attr];
+"929 linear_42" [id=929, type=linear];
+"930 gelu_6" [id=930, type=gelu];
+"931 dropout_26" [id=931, type=dropout];
+"932 linear_43_updated_constant0" [id=932, type=get_attr];
+"933 dropout_26_0_0_nncf_smooth_quant_0" [id=933, type=call_module];
+"934 quantize_per_tensor_default_44" [id=934, type=quantize_per_tensor];
+"935 dequantize_per_tensor_default_44" [id=935, type=dequantize_per_tensor];
+"936 linear_43_scale_0" [id=936, type=get_attr];
+"937 linear_43_zero_point_0" [id=937, type=get_attr];
+"938 quantize_per_channel_default_44" [id=938, type=quantize_per_channel];
+"939 dequantize_per_channel_default_44" [id=939, type=dequantize_per_channel];
+"940 _param_constant119_0_0" [id=940, type=get_attr];
+"941 linear_43" [id=941, type=linear];
+"942 dropout_27" [id=942, type=dropout];
+"943 _param_constant120" [id=943, type=get_attr];
+"944 _param_constant121" [id=944, type=get_attr];
+"945 layer_norm_16" [id=945, type=layer_norm];
+"946 add_23" [id=946, type=add];
+"947 _tensor_constant41" [id=947, type=get_attr];
+"948 linear_44_updated_constant0" [id=948, type=get_attr];
+"949 _tensor_constant41_0_0_nncf_smooth_quant_0" [id=949, type=call_module];
+"950 linear_44_scale_0" [id=950, type=get_attr];
+"951 linear_44_zero_point_0" [id=951, type=get_attr];
+"952 quantize_per_channel_default_45" [id=952, type=quantize_per_channel];
+"953 dequantize_per_channel_default_45" [id=953, type=dequantize_per_channel];
+"954 _param_constant123_0_0" [id=954, type=get_attr];
+"955 linear_44" [id=955, type=linear];
+"956 relu__7" [id=956, type=relu_];
+"957 linear_45_updated_constant0" [id=957, type=get_attr];
+"958 relu__7_0_0_nncf_smooth_quant_0" [id=958, type=call_module];
+"959 linear_45_scale_0" [id=959, type=get_attr];
+"960 linear_45_zero_point_0" [id=960, type=get_attr];
+"961 quantize_per_channel_default_46" [id=961, type=quantize_per_channel];
+"962 dequantize_per_channel_default_46" [id=962, type=dequantize_per_channel];
+"963 linear_45" [id=963, type=linear];
+"964 view_37" [id=964, type=view];
+"965 _tensor_constant42" [id=965, type=get_attr];
+"966 index_7" [id=966, type=index];
+"967 view_38" [id=967, type=view];
+"968 permute_32" [id=968, type=permute];
+"969 contiguous_12" [id=969, type=contiguous];
+"970 unsqueeze_19" [id=970, type=unsqueeze];
+"971 sigmoid_7" [id=971, type=sigmoid];
+"972 mul_14" [id=972, type=mul];
+"973 pad_9" [id=973, type=pad];
+"974 roll_6" [id=974, type=roll];
+"975 view_39" [id=975, type=view];
+"976 permute_33" [id=976, type=permute];
+"977 reshape_31" [id=977, type=reshape];
+"978 linear_46_updated_constant0" [id=978, type=get_attr];
+"979 reshape_31_0_0_nncf_smooth_quant_0" [id=979, type=call_module];
+"980 quantize_per_tensor_default_45" [id=980, type=quantize_per_tensor];
+"981 dequantize_per_tensor_default_45" [id=981, type=dequantize_per_tensor];
+"982 linear_46_scale_0" [id=982, type=get_attr];
+"983 linear_46_zero_point_0" [id=983, type=get_attr];
+"984 quantize_per_channel_default_47" [id=984, type=quantize_per_channel];
+"985 dequantize_per_channel_default_47" [id=985, type=dequantize_per_channel];
+"986 _param_constant125_0_0" [id=986, type=get_attr];
+"987 linear_46" [id=987, type=linear];
+"988 reshape_32" [id=988, type=reshape];
+"989 permute_34" [id=989, type=permute];
+"990 select_21" [id=990, type=select];
+"991 select_22" [id=991, type=select];
+"992 select_23" [id=992, type=select];
+"993 linalg_vector_norm_14" [id=993, type=linalg_vector_norm];
+"994 clamp_min_14" [id=994, type=clamp_min];
+"995 expand_as_14" [id=995, type=expand_as];
+"996 div_14" [id=996, type=div];
+"997 quantize_per_tensor_default_46" [id=997, type=quantize_per_tensor];
+"998 dequantize_per_tensor_default_46" [id=998, type=dequantize_per_tensor];
+"999 linalg_vector_norm_15" [id=999, type=linalg_vector_norm];
+"1000 clamp_min_15" [id=1000, type=clamp_min];
+"1001 expand_as_15" [id=1001, type=expand_as];
+"1002 div_15" [id=1002, type=div];
+"1003 quantize_per_tensor_default_47" [id=1003, type=quantize_per_tensor];
+"1004 dequantize_per_tensor_default_47" [id=1004, type=dequantize_per_tensor];
+"1005 transpose_14" [id=1005, type=transpose];
+"1006 matmul_14" [id=1006, type=matmul];
+"1007 _param_constant127" [id=1007, type=get_attr];
+"1008 clamp_7" [id=1008, type=clamp];
+"1009 exp_7" [id=1009, type=exp];
+"1010 mul_15" [id=1010, type=mul];
+"1011 add_24" [id=1011, type=add];
+"1012 new_zeros_3" [id=1012, type=new_zeros];
+"1013 view_40" [id=1013, type=view];
+"1014 permute_35" [id=1014, type=permute];
+"1015 reshape_33" [id=1015, type=reshape];
+"1016 unsqueeze_20" [id=1016, type=unsqueeze];
+"1017 unsqueeze_21" [id=1017, type=unsqueeze];
+"1018 sub_3" [id=1018, type=sub];
+"1019 ne_3" [id=1019, type=ne];
+"1020 masked_fill_6" [id=1020, type=masked_fill];
+"1021 eq_3" [id=1021, type=eq];
+"1022 masked_fill_7" [id=1022, type=masked_fill];
+"1023 view_41" [id=1023, type=view];
+"1024 unsqueeze_22" [id=1024, type=unsqueeze];
+"1025 unsqueeze_23" [id=1025, type=unsqueeze];
+"1026 add_25" [id=1026, type=add];
+"1027 view_42" [id=1027, type=view];
+"1028 softmax_7" [id=1028, type=softmax];
+"1029 dropout_28" [id=1029, type=dropout];
+"1030 matmul_15" [id=1030, type=matmul];
+"1031 transpose_15" [id=1031, type=transpose];
+"1032 reshape_34" [id=1032, type=reshape];
+"1033 linear_47_updated_constant0" [id=1033, type=get_attr];
+"1034 reshape_34_0_0_nncf_smooth_quant_0" [id=1034, type=call_module];
+"1035 quantize_per_tensor_default_48" [id=1035, type=quantize_per_tensor];
+"1036 dequantize_per_tensor_default_48" [id=1036, type=dequantize_per_tensor];
+"1037 linear_47_scale_0" [id=1037, type=get_attr];
+"1038 linear_47_zero_point_0" [id=1038, type=get_attr];
+"1039 quantize_per_channel_default_48" [id=1039, type=quantize_per_channel];
+"1040 dequantize_per_channel_default_48" [id=1040, type=dequantize_per_channel];
+"1041 _param_constant129_0_0" [id=1041, type=get_attr];
+"1042 linear_47" [id=1042, type=linear];
+"1043 dropout_29" [id=1043, type=dropout];
+"1044 view_43" [id=1044, type=view];
+"1045 permute_36" [id=1045, type=permute];
+"1046 reshape_35" [id=1046, type=reshape];
+"1047 roll_7" [id=1047, type=roll];
+"1048 slice_129" [id=1048, type=slice];
+"1049 slice_130" [id=1049, type=slice];
+"1050 slice_131" [id=1050, type=slice];
+"1051 slice_132" [id=1051, type=slice];
+"1052 contiguous_13" [id=1052, type=contiguous];
+"1053 _param_constant130" [id=1053, type=get_attr];
+"1054 _param_constant131" [id=1054, type=get_attr];
+"1055 layer_norm_17" [id=1055, type=layer_norm];
+"1056 add_26" [id=1056, type=add];
+"1057 linear_48_updated_constant0" [id=1057, type=get_attr];
+"1058 add_26_0_0_nncf_smooth_quant_0" [id=1058, type=call_module];
+"1059 quantize_per_tensor_default_49" [id=1059, type=quantize_per_tensor];
+"1060 dequantize_per_tensor_default_49" [id=1060, type=dequantize_per_tensor];
+"1061 linear_48_scale_0" [id=1061, type=get_attr];
+"1062 linear_48_zero_point_0" [id=1062, type=get_attr];
+"1063 quantize_per_channel_default_49" [id=1063, type=quantize_per_channel];
+"1064 dequantize_per_channel_default_49" [id=1064, type=dequantize_per_channel];
+"1065 _param_constant133_0_0" [id=1065, type=get_attr];
+"1066 linear_48" [id=1066, type=linear];
+"1067 gelu_7" [id=1067, type=gelu];
+"1068 dropout_30" [id=1068, type=dropout];
+"1069 linear_49_updated_constant0" [id=1069, type=get_attr];
+"1070 dropout_30_0_0_nncf_smooth_quant_0" [id=1070, type=call_module];
+"1071 quantize_per_tensor_default_50" [id=1071, type=quantize_per_tensor];
+"1072 dequantize_per_tensor_default_50" [id=1072, type=dequantize_per_tensor];
+"1073 linear_49_scale_0" [id=1073, type=get_attr];
+"1074 linear_49_zero_point_0" [id=1074, type=get_attr];
+"1075 quantize_per_channel_default_50" [id=1075, type=quantize_per_channel];
+"1076 dequantize_per_channel_default_50" [id=1076, type=dequantize_per_channel];
+"1077 _param_constant135_0_0" [id=1077, type=get_attr];
+"1078 linear_49" [id=1078, type=linear];
+"1079 dropout_31" [id=1079, type=dropout];
+"1080 _param_constant136" [id=1080, type=get_attr];
+"1081 _param_constant137" [id=1081, type=get_attr];
+"1082 layer_norm_18" [id=1082, type=layer_norm];
+"1083 add_27" [id=1083, type=add];
+"1084 _tensor_constant52" [id=1084, type=get_attr];
+"1085 linear_50_updated_constant0" [id=1085, type=get_attr];
+"1086 _tensor_constant52_0_0_nncf_smooth_quant_0" [id=1086, type=call_module];
+"1087 linear_50_scale_0" [id=1087, type=get_attr];
+"1088 linear_50_zero_point_0" [id=1088, type=get_attr];
+"1089 quantize_per_channel_default_51" [id=1089, type=quantize_per_channel];
+"1090 dequantize_per_channel_default_51" [id=1090, type=dequantize_per_channel];
+"1091 _param_constant139_0_0" [id=1091, type=get_attr];
+"1092 linear_50" [id=1092, type=linear];
+"1093 relu__8" [id=1093, type=relu_];
+"1094 linear_51_updated_constant0" [id=1094, type=get_attr];
+"1095 relu__8_0_0_nncf_smooth_quant_0" [id=1095, type=call_module];
+"1096 linear_51_scale_0" [id=1096, type=get_attr];
+"1097 linear_51_zero_point_0" [id=1097, type=get_attr];
+"1098 quantize_per_channel_default_52" [id=1098, type=quantize_per_channel];
+"1099 dequantize_per_channel_default_52" [id=1099, type=dequantize_per_channel];
+"1100 linear_51" [id=1100, type=linear];
+"1101 view_44" [id=1101, type=view];
+"1102 _tensor_constant53" [id=1102, type=get_attr];
+"1103 index_8" [id=1103, type=index];
+"1104 view_45" [id=1104, type=view];
+"1105 permute_37" [id=1105, type=permute];
+"1106 contiguous_14" [id=1106, type=contiguous];
+"1107 unsqueeze_24" [id=1107, type=unsqueeze];
+"1108 sigmoid_8" [id=1108, type=sigmoid];
+"1109 mul_16" [id=1109, type=mul];
+"1110 pad_10" [id=1110, type=pad];
+"1111 view_46" [id=1111, type=view];
+"1112 permute_38" [id=1112, type=permute];
+"1113 reshape_36" [id=1113, type=reshape];
+"1114 linear_52_updated_constant0" [id=1114, type=get_attr];
+"1115 reshape_36_0_0_nncf_smooth_quant_0" [id=1115, type=call_module];
+"1116 quantize_per_tensor_default_51" [id=1116, type=quantize_per_tensor];
+"1117 dequantize_per_tensor_default_51" [id=1117, type=dequantize_per_tensor];
+"1118 linear_52_scale_0" [id=1118, type=get_attr];
+"1119 linear_52_zero_point_0" [id=1119, type=get_attr];
+"1120 quantize_per_channel_default_53" [id=1120, type=quantize_per_channel];
+"1121 dequantize_per_channel_default_53" [id=1121, type=dequantize_per_channel];
+"1122 _param_constant141_0_0" [id=1122, type=get_attr];
+"1123 linear_52" [id=1123, type=linear];
+"1124 reshape_37" [id=1124, type=reshape];
+"1125 permute_39" [id=1125, type=permute];
+"1126 select_24" [id=1126, type=select];
+"1127 select_25" [id=1127, type=select];
+"1128 select_26" [id=1128, type=select];
+"1129 linalg_vector_norm_16" [id=1129, type=linalg_vector_norm];
+"1130 clamp_min_16" [id=1130, type=clamp_min];
+"1131 expand_as_16" [id=1131, type=expand_as];
+"1132 div_16" [id=1132, type=div];
+"1133 quantize_per_tensor_default_52" [id=1133, type=quantize_per_tensor];
+"1134 dequantize_per_tensor_default_52" [id=1134, type=dequantize_per_tensor];
+"1135 linalg_vector_norm_17" [id=1135, type=linalg_vector_norm];
+"1136 clamp_min_17" [id=1136, type=clamp_min];
+"1137 expand_as_17" [id=1137, type=expand_as];
+"1138 div_17" [id=1138, type=div];
+"1139 quantize_per_tensor_default_53" [id=1139, type=quantize_per_tensor];
+"1140 dequantize_per_tensor_default_53" [id=1140, type=dequantize_per_tensor];
+"1141 transpose_16" [id=1141, type=transpose];
+"1142 matmul_16" [id=1142, type=matmul];
+"1143 _param_constant143" [id=1143, type=get_attr];
+"1144 clamp_8" [id=1144, type=clamp];
+"1145 exp_8" [id=1145, type=exp];
+"1146 mul_17" [id=1146, type=mul];
+"1147 add_28" [id=1147, type=add];
+"1148 softmax_8" [id=1148, type=softmax];
+"1149 dropout_32" [id=1149, type=dropout];
+"1150 matmul_17" [id=1150, type=matmul];
+"1151 transpose_17" [id=1151, type=transpose];
+"1152 reshape_38" [id=1152, type=reshape];
+"1153 linear_53_updated_constant0" [id=1153, type=get_attr];
+"1154 reshape_38_0_0_nncf_smooth_quant_0" [id=1154, type=call_module];
+"1155 quantize_per_tensor_default_54" [id=1155, type=quantize_per_tensor];
+"1156 dequantize_per_tensor_default_54" [id=1156, type=dequantize_per_tensor];
+"1157 linear_53_scale_0" [id=1157, type=get_attr];
+"1158 linear_53_zero_point_0" [id=1158, type=get_attr];
+"1159 quantize_per_channel_default_54" [id=1159, type=quantize_per_channel];
+"1160 dequantize_per_channel_default_54" [id=1160, type=dequantize_per_channel];
+"1161 _param_constant145_0_0" [id=1161, type=get_attr];
+"1162 linear_53" [id=1162, type=linear];
+"1163 dropout_33" [id=1163, type=dropout];
+"1164 view_47" [id=1164, type=view];
+"1165 permute_40" [id=1165, type=permute];
+"1166 reshape_39" [id=1166, type=reshape];
+"1167 slice_134" [id=1167, type=slice];
+"1168 slice_135" [id=1168, type=slice];
+"1169 slice_136" [id=1169, type=slice];
+"1170 slice_137" [id=1170, type=slice];
+"1171 contiguous_15" [id=1171, type=contiguous];
+"1172 _param_constant146" [id=1172, type=get_attr];
+"1173 _param_constant147" [id=1173, type=get_attr];
+"1174 layer_norm_19" [id=1174, type=layer_norm];
+"1175 add_29" [id=1175, type=add];
+"1176 linear_54_updated_constant0" [id=1176, type=get_attr];
+"1177 add_29_0_0_nncf_smooth_quant_0" [id=1177, type=call_module];
+"1178 quantize_per_tensor_default_55" [id=1178, type=quantize_per_tensor];
+"1179 dequantize_per_tensor_default_55" [id=1179, type=dequantize_per_tensor];
+"1180 linear_54_scale_0" [id=1180, type=get_attr];
+"1181 linear_54_zero_point_0" [id=1181, type=get_attr];
+"1182 quantize_per_channel_default_55" [id=1182, type=quantize_per_channel];
+"1183 dequantize_per_channel_default_55" [id=1183, type=dequantize_per_channel];
+"1184 _param_constant149_0_0" [id=1184, type=get_attr];
+"1185 linear_54" [id=1185, type=linear];
+"1186 gelu_8" [id=1186, type=gelu];
+"1187 dropout_34" [id=1187, type=dropout];
+"1188 linear_55_updated_constant0" [id=1188, type=get_attr];
+"1189 dropout_34_0_0_nncf_smooth_quant_0" [id=1189, type=call_module];
+"1190 quantize_per_tensor_default_56" [id=1190, type=quantize_per_tensor];
+"1191 dequantize_per_tensor_default_56" [id=1191, type=dequantize_per_tensor];
+"1192 linear_55_scale_0" [id=1192, type=get_attr];
+"1193 linear_55_zero_point_0" [id=1193, type=get_attr];
+"1194 quantize_per_channel_default_56" [id=1194, type=quantize_per_channel];
+"1195 dequantize_per_channel_default_56" [id=1195, type=dequantize_per_channel];
+"1196 _param_constant151_0_0" [id=1196, type=get_attr];
+"1197 linear_55" [id=1197, type=linear];
+"1198 dropout_35" [id=1198, type=dropout];
+"1199 _param_constant152" [id=1199, type=get_attr];
+"1200 _param_constant153" [id=1200, type=get_attr];
+"1201 layer_norm_20" [id=1201, type=layer_norm];
+"1202 add_30" [id=1202, type=add];
+"1203 _tensor_constant54" [id=1203, type=get_attr];
+"1204 linear_56_updated_constant0" [id=1204, type=get_attr];
+"1205 _tensor_constant54_0_0_nncf_smooth_quant_0" [id=1205, type=call_module];
+"1206 linear_56_scale_0" [id=1206, type=get_attr];
+"1207 linear_56_zero_point_0" [id=1207, type=get_attr];
+"1208 quantize_per_channel_default_57" [id=1208, type=quantize_per_channel];
+"1209 dequantize_per_channel_default_57" [id=1209, type=dequantize_per_channel];
+"1210 _param_constant155_0_0" [id=1210, type=get_attr];
+"1211 linear_56" [id=1211, type=linear];
+"1212 relu__9" [id=1212, type=relu_];
+"1213 linear_57_updated_constant0" [id=1213, type=get_attr];
+"1214 relu__9_0_0_nncf_smooth_quant_0" [id=1214, type=call_module];
+"1215 linear_57_scale_0" [id=1215, type=get_attr];
+"1216 linear_57_zero_point_0" [id=1216, type=get_attr];
+"1217 quantize_per_channel_default_58" [id=1217, type=quantize_per_channel];
+"1218 dequantize_per_channel_default_58" [id=1218, type=dequantize_per_channel];
+"1219 linear_57" [id=1219, type=linear];
+"1220 view_48" [id=1220, type=view];
+"1221 _tensor_constant55" [id=1221, type=get_attr];
+"1222 index_9" [id=1222, type=index];
+"1223 view_49" [id=1223, type=view];
+"1224 permute_41" [id=1224, type=permute];
+"1225 contiguous_16" [id=1225, type=contiguous];
+"1226 unsqueeze_25" [id=1226, type=unsqueeze];
+"1227 sigmoid_9" [id=1227, type=sigmoid];
+"1228 mul_18" [id=1228, type=mul];
+"1229 pad_11" [id=1229, type=pad];
+"1230 roll_8" [id=1230, type=roll];
+"1231 view_50" [id=1231, type=view];
+"1232 permute_42" [id=1232, type=permute];
+"1233 reshape_40" [id=1233, type=reshape];
+"1234 linear_58_updated_constant0" [id=1234, type=get_attr];
+"1235 reshape_40_0_0_nncf_smooth_quant_0" [id=1235, type=call_module];
+"1236 quantize_per_tensor_default_57" [id=1236, type=quantize_per_tensor];
+"1237 dequantize_per_tensor_default_57" [id=1237, type=dequantize_per_tensor];
+"1238 linear_58_scale_0" [id=1238, type=get_attr];
+"1239 linear_58_zero_point_0" [id=1239, type=get_attr];
+"1240 quantize_per_channel_default_59" [id=1240, type=quantize_per_channel];
+"1241 dequantize_per_channel_default_59" [id=1241, type=dequantize_per_channel];
+"1242 _param_constant157_0_0" [id=1242, type=get_attr];
+"1243 linear_58" [id=1243, type=linear];
+"1244 reshape_41" [id=1244, type=reshape];
+"1245 permute_43" [id=1245, type=permute];
+"1246 select_27" [id=1246, type=select];
+"1247 select_28" [id=1247, type=select];
+"1248 select_29" [id=1248, type=select];
+"1249 linalg_vector_norm_18" [id=1249, type=linalg_vector_norm];
+"1250 clamp_min_18" [id=1250, type=clamp_min];
+"1251 expand_as_18" [id=1251, type=expand_as];
+"1252 div_18" [id=1252, type=div];
+"1253 quantize_per_tensor_default_58" [id=1253, type=quantize_per_tensor];
+"1254 dequantize_per_tensor_default_58" [id=1254, type=dequantize_per_tensor];
+"1255 linalg_vector_norm_19" [id=1255, type=linalg_vector_norm];
+"1256 clamp_min_19" [id=1256, type=clamp_min];
+"1257 expand_as_19" [id=1257, type=expand_as];
+"1258 div_19" [id=1258, type=div];
+"1259 quantize_per_tensor_default_59" [id=1259, type=quantize_per_tensor];
+"1260 dequantize_per_tensor_default_59" [id=1260, type=dequantize_per_tensor];
+"1261 transpose_18" [id=1261, type=transpose];
+"1262 matmul_18" [id=1262, type=matmul];
+"1263 _param_constant159" [id=1263, type=get_attr];
+"1264 clamp_9" [id=1264, type=clamp];
+"1265 exp_9" [id=1265, type=exp];
+"1266 mul_19" [id=1266, type=mul];
+"1267 add_31" [id=1267, type=add];
+"1268 new_zeros_4" [id=1268, type=new_zeros];
+"1269 view_51" [id=1269, type=view];
+"1270 permute_44" [id=1270, type=permute];
+"1271 reshape_42" [id=1271, type=reshape];
+"1272 unsqueeze_26" [id=1272, type=unsqueeze];
+"1273 unsqueeze_27" [id=1273, type=unsqueeze];
+"1274 sub_4" [id=1274, type=sub];
+"1275 ne_4" [id=1275, type=ne];
+"1276 masked_fill_8" [id=1276, type=masked_fill];
+"1277 eq_4" [id=1277, type=eq];
+"1278 masked_fill_9" [id=1278, type=masked_fill];
+"1279 view_52" [id=1279, type=view];
+"1280 unsqueeze_28" [id=1280, type=unsqueeze];
+"1281 unsqueeze_29" [id=1281, type=unsqueeze];
+"1282 add_32" [id=1282, type=add];
+"1283 view_53" [id=1283, type=view];
+"1284 softmax_9" [id=1284, type=softmax];
+"1285 dropout_36" [id=1285, type=dropout];
+"1286 matmul_19" [id=1286, type=matmul];
+"1287 transpose_19" [id=1287, type=transpose];
+"1288 reshape_43" [id=1288, type=reshape];
+"1289 linear_59_updated_constant0" [id=1289, type=get_attr];
+"1290 reshape_43_0_0_nncf_smooth_quant_0" [id=1290, type=call_module];
+"1291 quantize_per_tensor_default_60" [id=1291, type=quantize_per_tensor];
+"1292 dequantize_per_tensor_default_60" [id=1292, type=dequantize_per_tensor];
+"1293 linear_59_scale_0" [id=1293, type=get_attr];
+"1294 linear_59_zero_point_0" [id=1294, type=get_attr];
+"1295 quantize_per_channel_default_60" [id=1295, type=quantize_per_channel];
+"1296 dequantize_per_channel_default_60" [id=1296, type=dequantize_per_channel];
+"1297 _param_constant161_0_0" [id=1297, type=get_attr];
+"1298 linear_59" [id=1298, type=linear];
+"1299 dropout_37" [id=1299, type=dropout];
+"1300 view_54" [id=1300, type=view];
+"1301 permute_45" [id=1301, type=permute];
+"1302 reshape_44" [id=1302, type=reshape];
+"1303 roll_9" [id=1303, type=roll];
+"1304 slice_157" [id=1304, type=slice];
+"1305 slice_158" [id=1305, type=slice];
+"1306 slice_159" [id=1306, type=slice];
+"1307 slice_160" [id=1307, type=slice];
+"1308 contiguous_17" [id=1308, type=contiguous];
+"1309 _param_constant162" [id=1309, type=get_attr];
+"1310 _param_constant163" [id=1310, type=get_attr];
+"1311 layer_norm_21" [id=1311, type=layer_norm];
+"1312 add_33" [id=1312, type=add];
+"1313 linear_60_updated_constant0" [id=1313, type=get_attr];
+"1314 add_33_0_0_nncf_smooth_quant_0" [id=1314, type=call_module];
+"1315 quantize_per_tensor_default_61" [id=1315, type=quantize_per_tensor];
+"1316 dequantize_per_tensor_default_61" [id=1316, type=dequantize_per_tensor];
+"1317 linear_60_scale_0" [id=1317, type=get_attr];
+"1318 linear_60_zero_point_0" [id=1318, type=get_attr];
+"1319 quantize_per_channel_default_61" [id=1319, type=quantize_per_channel];
+"1320 dequantize_per_channel_default_61" [id=1320, type=dequantize_per_channel];
+"1321 _param_constant165_0_0" [id=1321, type=get_attr];
+"1322 linear_60" [id=1322, type=linear];
+"1323 gelu_9" [id=1323, type=gelu];
+"1324 dropout_38" [id=1324, type=dropout];
+"1325 linear_61_updated_constant0" [id=1325, type=get_attr];
+"1326 dropout_38_0_0_nncf_smooth_quant_0" [id=1326, type=call_module];
+"1327 quantize_per_tensor_default_62" [id=1327, type=quantize_per_tensor];
+"1328 dequantize_per_tensor_default_62" [id=1328, type=dequantize_per_tensor];
+"1329 linear_61_scale_0" [id=1329, type=get_attr];
+"1330 linear_61_zero_point_0" [id=1330, type=get_attr];
+"1331 quantize_per_channel_default_62" [id=1331, type=quantize_per_channel];
+"1332 dequantize_per_channel_default_62" [id=1332, type=dequantize_per_channel];
+"1333 _param_constant167_0_0" [id=1333, type=get_attr];
+"1334 linear_61" [id=1334, type=linear];
+"1335 dropout_39" [id=1335, type=dropout];
+"1336 _param_constant168" [id=1336, type=get_attr];
+"1337 _param_constant169" [id=1337, type=get_attr];
+"1338 layer_norm_22" [id=1338, type=layer_norm];
+"1339 add_34" [id=1339, type=add];
+"1340 _tensor_constant65" [id=1340, type=get_attr];
+"1341 linear_62_updated_constant0" [id=1341, type=get_attr];
+"1342 _tensor_constant65_0_0_nncf_smooth_quant_0" [id=1342, type=call_module];
+"1343 linear_62_scale_0" [id=1343, type=get_attr];
+"1344 linear_62_zero_point_0" [id=1344, type=get_attr];
+"1345 quantize_per_channel_default_63" [id=1345, type=quantize_per_channel];
+"1346 dequantize_per_channel_default_63" [id=1346, type=dequantize_per_channel];
+"1347 _param_constant171_0_0" [id=1347, type=get_attr];
+"1348 linear_62" [id=1348, type=linear];
+"1349 relu__10" [id=1349, type=relu_];
+"1350 linear_63_updated_constant0" [id=1350, type=get_attr];
+"1351 relu__10_0_0_nncf_smooth_quant_0" [id=1351, type=call_module];
+"1352 linear_63_scale_0" [id=1352, type=get_attr];
+"1353 linear_63_zero_point_0" [id=1353, type=get_attr];
+"1354 quantize_per_channel_default_64" [id=1354, type=quantize_per_channel];
+"1355 dequantize_per_channel_default_64" [id=1355, type=dequantize_per_channel];
+"1356 linear_63" [id=1356, type=linear];
+"1357 view_55" [id=1357, type=view];
+"1358 _tensor_constant66" [id=1358, type=get_attr];
+"1359 index_10" [id=1359, type=index];
+"1360 view_56" [id=1360, type=view];
+"1361 permute_46" [id=1361, type=permute];
+"1362 contiguous_18" [id=1362, type=contiguous];
+"1363 unsqueeze_30" [id=1363, type=unsqueeze];
+"1364 sigmoid_10" [id=1364, type=sigmoid];
+"1365 mul_20" [id=1365, type=mul];
+"1366 pad_12" [id=1366, type=pad];
+"1367 view_57" [id=1367, type=view];
+"1368 permute_47" [id=1368, type=permute];
+"1369 reshape_45" [id=1369, type=reshape];
+"1370 linear_64_updated_constant0" [id=1370, type=get_attr];
+"1371 reshape_45_0_0_nncf_smooth_quant_0" [id=1371, type=call_module];
+"1372 quantize_per_tensor_default_63" [id=1372, type=quantize_per_tensor];
+"1373 dequantize_per_tensor_default_63" [id=1373, type=dequantize_per_tensor];
+"1374 linear_64_scale_0" [id=1374, type=get_attr];
+"1375 linear_64_zero_point_0" [id=1375, type=get_attr];
+"1376 quantize_per_channel_default_65" [id=1376, type=quantize_per_channel];
+"1377 dequantize_per_channel_default_65" [id=1377, type=dequantize_per_channel];
+"1378 _param_constant173_0_0" [id=1378, type=get_attr];
+"1379 linear_64" [id=1379, type=linear];
+"1380 reshape_46" [id=1380, type=reshape];
+"1381 permute_48" [id=1381, type=permute];
+"1382 select_30" [id=1382, type=select];
+"1383 select_31" [id=1383, type=select];
+"1384 select_32" [id=1384, type=select];
+"1385 linalg_vector_norm_20" [id=1385, type=linalg_vector_norm];
+"1386 clamp_min_20" [id=1386, type=clamp_min];
+"1387 expand_as_20" [id=1387, type=expand_as];
+"1388 div_20" [id=1388, type=div];
+"1389 quantize_per_tensor_default_64" [id=1389, type=quantize_per_tensor];
+"1390 dequantize_per_tensor_default_64" [id=1390, type=dequantize_per_tensor];
+"1391 linalg_vector_norm_21" [id=1391, type=linalg_vector_norm];
+"1392 clamp_min_21" [id=1392, type=clamp_min];
+"1393 expand_as_21" [id=1393, type=expand_as];
+"1394 div_21" [id=1394, type=div];
+"1395 quantize_per_tensor_default_65" [id=1395, type=quantize_per_tensor];
+"1396 dequantize_per_tensor_default_65" [id=1396, type=dequantize_per_tensor];
+"1397 transpose_20" [id=1397, type=transpose];
+"1398 matmul_20" [id=1398, type=matmul];
+"1399 _param_constant175" [id=1399, type=get_attr];
+"1400 clamp_10" [id=1400, type=clamp];
+"1401 exp_10" [id=1401, type=exp];
+"1402 mul_21" [id=1402, type=mul];
+"1403 add_35" [id=1403, type=add];
+"1404 softmax_10" [id=1404, type=softmax];
+"1405 dropout_40" [id=1405, type=dropout];
+"1406 matmul_21" [id=1406, type=matmul];
+"1407 transpose_21" [id=1407, type=transpose];
+"1408 reshape_47" [id=1408, type=reshape];
+"1409 linear_65_updated_constant0" [id=1409, type=get_attr];
+"1410 reshape_47_0_0_nncf_smooth_quant_0" [id=1410, type=call_module];
+"1411 quantize_per_tensor_default_66" [id=1411, type=quantize_per_tensor];
+"1412 dequantize_per_tensor_default_66" [id=1412, type=dequantize_per_tensor];
+"1413 linear_65_scale_0" [id=1413, type=get_attr];
+"1414 linear_65_zero_point_0" [id=1414, type=get_attr];
+"1415 quantize_per_channel_default_66" [id=1415, type=quantize_per_channel];
+"1416 dequantize_per_channel_default_66" [id=1416, type=dequantize_per_channel];
+"1417 _param_constant177_0_0" [id=1417, type=get_attr];
+"1418 linear_65" [id=1418, type=linear];
+"1419 dropout_41" [id=1419, type=dropout];
+"1420 view_58" [id=1420, type=view];
+"1421 permute_49" [id=1421, type=permute];
+"1422 reshape_48" [id=1422, type=reshape];
+"1423 slice_162" [id=1423, type=slice];
+"1424 slice_163" [id=1424, type=slice];
+"1425 slice_164" [id=1425, type=slice];
+"1426 slice_165" [id=1426, type=slice];
+"1427 contiguous_19" [id=1427, type=contiguous];
+"1428 _param_constant178" [id=1428, type=get_attr];
+"1429 _param_constant179" [id=1429, type=get_attr];
+"1430 layer_norm_23" [id=1430, type=layer_norm];
+"1431 add_36" [id=1431, type=add];
+"1432 linear_66_updated_constant0" [id=1432, type=get_attr];
+"1433 add_36_0_0_nncf_smooth_quant_0" [id=1433, type=call_module];
+"1434 quantize_per_tensor_default_67" [id=1434, type=quantize_per_tensor];
+"1435 dequantize_per_tensor_default_67" [id=1435, type=dequantize_per_tensor];
+"1436 linear_66_scale_0" [id=1436, type=get_attr];
+"1437 linear_66_zero_point_0" [id=1437, type=get_attr];
+"1438 quantize_per_channel_default_67" [id=1438, type=quantize_per_channel];
+"1439 dequantize_per_channel_default_67" [id=1439, type=dequantize_per_channel];
+"1440 _param_constant181_0_0" [id=1440, type=get_attr];
+"1441 linear_66" [id=1441, type=linear];
+"1442 gelu_10" [id=1442, type=gelu];
+"1443 dropout_42" [id=1443, type=dropout];
+"1444 linear_67_updated_constant0" [id=1444, type=get_attr];
+"1445 dropout_42_0_0_nncf_smooth_quant_0" [id=1445, type=call_module];
+"1446 quantize_per_tensor_default_68" [id=1446, type=quantize_per_tensor];
+"1447 dequantize_per_tensor_default_68" [id=1447, type=dequantize_per_tensor];
+"1448 linear_67_scale_0" [id=1448, type=get_attr];
+"1449 linear_67_zero_point_0" [id=1449, type=get_attr];
+"1450 quantize_per_channel_default_68" [id=1450, type=quantize_per_channel];
+"1451 dequantize_per_channel_default_68" [id=1451, type=dequantize_per_channel];
+"1452 _param_constant183_0_0" [id=1452, type=get_attr];
+"1453 linear_67" [id=1453, type=linear];
+"1454 dropout_43" [id=1454, type=dropout];
+"1455 _param_constant184" [id=1455, type=get_attr];
+"1456 _param_constant185" [id=1456, type=get_attr];
+"1457 layer_norm_24" [id=1457, type=layer_norm];
+"1458 add_37" [id=1458, type=add];
+"1459 _tensor_constant67" [id=1459, type=get_attr];
+"1460 linear_68_updated_constant0" [id=1460, type=get_attr];
+"1461 _tensor_constant67_0_0_nncf_smooth_quant_0" [id=1461, type=call_module];
+"1462 linear_68_scale_0" [id=1462, type=get_attr];
+"1463 linear_68_zero_point_0" [id=1463, type=get_attr];
+"1464 quantize_per_channel_default_69" [id=1464, type=quantize_per_channel];
+"1465 dequantize_per_channel_default_69" [id=1465, type=dequantize_per_channel];
+"1466 _param_constant187_0_0" [id=1466, type=get_attr];
+"1467 linear_68" [id=1467, type=linear];
+"1468 relu__11" [id=1468, type=relu_];
+"1469 linear_69_updated_constant0" [id=1469, type=get_attr];
+"1470 relu__11_0_0_nncf_smooth_quant_0" [id=1470, type=call_module];
+"1471 linear_69_scale_0" [id=1471, type=get_attr];
+"1472 linear_69_zero_point_0" [id=1472, type=get_attr];
+"1473 quantize_per_channel_default_70" [id=1473, type=quantize_per_channel];
+"1474 dequantize_per_channel_default_70" [id=1474, type=dequantize_per_channel];
+"1475 linear_69" [id=1475, type=linear];
+"1476 view_59" [id=1476, type=view];
+"1477 _tensor_constant68" [id=1477, type=get_attr];
+"1478 index_11" [id=1478, type=index];
+"1479 view_60" [id=1479, type=view];
+"1480 permute_50" [id=1480, type=permute];
+"1481 contiguous_20" [id=1481, type=contiguous];
+"1482 unsqueeze_31" [id=1482, type=unsqueeze];
+"1483 sigmoid_11" [id=1483, type=sigmoid];
+"1484 mul_22" [id=1484, type=mul];
+"1485 pad_13" [id=1485, type=pad];
+"1486 roll_10" [id=1486, type=roll];
+"1487 view_61" [id=1487, type=view];
+"1488 permute_51" [id=1488, type=permute];
+"1489 reshape_49" [id=1489, type=reshape];
+"1490 linear_70_updated_constant0" [id=1490, type=get_attr];
+"1491 reshape_49_0_0_nncf_smooth_quant_0" [id=1491, type=call_module];
+"1492 quantize_per_tensor_default_69" [id=1492, type=quantize_per_tensor];
+"1493 dequantize_per_tensor_default_69" [id=1493, type=dequantize_per_tensor];
+"1494 linear_70_scale_0" [id=1494, type=get_attr];
+"1495 linear_70_zero_point_0" [id=1495, type=get_attr];
+"1496 quantize_per_channel_default_71" [id=1496, type=quantize_per_channel];
+"1497 dequantize_per_channel_default_71" [id=1497, type=dequantize_per_channel];
+"1498 _param_constant189_0_0" [id=1498, type=get_attr];
+"1499 linear_70" [id=1499, type=linear];
+"1500 reshape_50" [id=1500, type=reshape];
+"1501 permute_52" [id=1501, type=permute];
+"1502 select_33" [id=1502, type=select];
+"1503 select_34" [id=1503, type=select];
+"1504 select_35" [id=1504, type=select];
+"1505 linalg_vector_norm_22" [id=1505, type=linalg_vector_norm];
+"1506 clamp_min_22" [id=1506, type=clamp_min];
+"1507 expand_as_22" [id=1507, type=expand_as];
+"1508 div_22" [id=1508, type=div];
+"1509 quantize_per_tensor_default_70" [id=1509, type=quantize_per_tensor];
+"1510 dequantize_per_tensor_default_70" [id=1510, type=dequantize_per_tensor];
+"1511 linalg_vector_norm_23" [id=1511, type=linalg_vector_norm];
+"1512 clamp_min_23" [id=1512, type=clamp_min];
+"1513 expand_as_23" [id=1513, type=expand_as];
+"1514 div_23" [id=1514, type=div];
+"1515 quantize_per_tensor_default_71" [id=1515, type=quantize_per_tensor];
+"1516 dequantize_per_tensor_default_71" [id=1516, type=dequantize_per_tensor];
+"1517 transpose_22" [id=1517, type=transpose];
+"1518 matmul_22" [id=1518, type=matmul];
+"1519 _param_constant191" [id=1519, type=get_attr];
+"1520 clamp_11" [id=1520, type=clamp];
+"1521 exp_11" [id=1521, type=exp];
+"1522 mul_23" [id=1522, type=mul];
+"1523 add_38" [id=1523, type=add];
+"1524 new_zeros_5" [id=1524, type=new_zeros];
+"1525 view_62" [id=1525, type=view];
+"1526 permute_53" [id=1526, type=permute];
+"1527 reshape_51" [id=1527, type=reshape];
+"1528 unsqueeze_32" [id=1528, type=unsqueeze];
+"1529 unsqueeze_33" [id=1529, type=unsqueeze];
+"1530 sub_5" [id=1530, type=sub];
+"1531 ne_5" [id=1531, type=ne];
+"1532 masked_fill_10" [id=1532, type=masked_fill];
+"1533 eq_5" [id=1533, type=eq];
+"1534 masked_fill_11" [id=1534, type=masked_fill];
+"1535 view_63" [id=1535, type=view];
+"1536 unsqueeze_34" [id=1536, type=unsqueeze];
+"1537 unsqueeze_35" [id=1537, type=unsqueeze];
+"1538 add_39" [id=1538, type=add];
+"1539 view_64" [id=1539, type=view];
+"1540 softmax_11" [id=1540, type=softmax];
+"1541 dropout_44" [id=1541, type=dropout];
+"1542 matmul_23" [id=1542, type=matmul];
+"1543 transpose_23" [id=1543, type=transpose];
+"1544 reshape_52" [id=1544, type=reshape];
+"1545 linear_71_updated_constant0" [id=1545, type=get_attr];
+"1546 reshape_52_0_0_nncf_smooth_quant_0" [id=1546, type=call_module];
+"1547 quantize_per_tensor_default_72" [id=1547, type=quantize_per_tensor];
+"1548 dequantize_per_tensor_default_72" [id=1548, type=dequantize_per_tensor];
+"1549 linear_71_scale_0" [id=1549, type=get_attr];
+"1550 linear_71_zero_point_0" [id=1550, type=get_attr];
+"1551 quantize_per_channel_default_72" [id=1551, type=quantize_per_channel];
+"1552 dequantize_per_channel_default_72" [id=1552, type=dequantize_per_channel];
+"1553 _param_constant193_0_0" [id=1553, type=get_attr];
+"1554 linear_71" [id=1554, type=linear];
+"1555 dropout_45" [id=1555, type=dropout];
+"1556 view_65" [id=1556, type=view];
+"1557 permute_54" [id=1557, type=permute];
+"1558 reshape_53" [id=1558, type=reshape];
+"1559 roll_11" [id=1559, type=roll];
+"1560 slice_185" [id=1560, type=slice];
+"1561 slice_186" [id=1561, type=slice];
+"1562 slice_187" [id=1562, type=slice];
+"1563 slice_188" [id=1563, type=slice];
+"1564 contiguous_21" [id=1564, type=contiguous];
+"1565 _param_constant194" [id=1565, type=get_attr];
+"1566 _param_constant195" [id=1566, type=get_attr];
+"1567 layer_norm_25" [id=1567, type=layer_norm];
+"1568 add_40" [id=1568, type=add];
+"1569 linear_72_updated_constant0" [id=1569, type=get_attr];
+"1570 add_40_0_0_nncf_smooth_quant_0" [id=1570, type=call_module];
+"1571 quantize_per_tensor_default_73" [id=1571, type=quantize_per_tensor];
+"1572 dequantize_per_tensor_default_73" [id=1572, type=dequantize_per_tensor];
+"1573 linear_72_scale_0" [id=1573, type=get_attr];
+"1574 linear_72_zero_point_0" [id=1574, type=get_attr];
+"1575 quantize_per_channel_default_73" [id=1575, type=quantize_per_channel];
+"1576 dequantize_per_channel_default_73" [id=1576, type=dequantize_per_channel];
+"1577 _param_constant197_0_0" [id=1577, type=get_attr];
+"1578 linear_72" [id=1578, type=linear];
+"1579 gelu_11" [id=1579, type=gelu];
+"1580 dropout_46" [id=1580, type=dropout];
+"1581 linear_73_updated_constant0" [id=1581, type=get_attr];
+"1582 dropout_46_0_0_nncf_smooth_quant_0" [id=1582, type=call_module];
+"1583 quantize_per_tensor_default_74" [id=1583, type=quantize_per_tensor];
+"1584 dequantize_per_tensor_default_74" [id=1584, type=dequantize_per_tensor];
+"1585 linear_73_scale_0" [id=1585, type=get_attr];
+"1586 linear_73_zero_point_0" [id=1586, type=get_attr];
+"1587 quantize_per_channel_default_74" [id=1587, type=quantize_per_channel];
+"1588 dequantize_per_channel_default_74" [id=1588, type=dequantize_per_channel];
+"1589 _param_constant199_0_0" [id=1589, type=get_attr];
+"1590 linear_73" [id=1590, type=linear];
+"1591 dropout_47" [id=1591, type=dropout];
+"1592 _param_constant200" [id=1592, type=get_attr];
+"1593 _param_constant201" [id=1593, type=get_attr];
+"1594 layer_norm_26" [id=1594, type=layer_norm];
+"1595 add_41" [id=1595, type=add];
+"1596 _tensor_constant78" [id=1596, type=get_attr];
+"1597 linear_74_updated_constant0" [id=1597, type=get_attr];
+"1598 _tensor_constant78_0_0_nncf_smooth_quant_0" [id=1598, type=call_module];
+"1599 linear_74_scale_0" [id=1599, type=get_attr];
+"1600 linear_74_zero_point_0" [id=1600, type=get_attr];
+"1601 quantize_per_channel_default_75" [id=1601, type=quantize_per_channel];
+"1602 dequantize_per_channel_default_75" [id=1602, type=dequantize_per_channel];
+"1603 _param_constant203_0_0" [id=1603, type=get_attr];
+"1604 linear_74" [id=1604, type=linear];
+"1605 relu__12" [id=1605, type=relu_];
+"1606 linear_75_updated_constant0" [id=1606, type=get_attr];
+"1607 relu__12_0_0_nncf_smooth_quant_0" [id=1607, type=call_module];
+"1608 linear_75_scale_0" [id=1608, type=get_attr];
+"1609 linear_75_zero_point_0" [id=1609, type=get_attr];
+"1610 quantize_per_channel_default_76" [id=1610, type=quantize_per_channel];
+"1611 dequantize_per_channel_default_76" [id=1611, type=dequantize_per_channel];
+"1612 linear_75" [id=1612, type=linear];
+"1613 view_66" [id=1613, type=view];
+"1614 _tensor_constant79" [id=1614, type=get_attr];
+"1615 index_12" [id=1615, type=index];
+"1616 view_67" [id=1616, type=view];
+"1617 permute_55" [id=1617, type=permute];
+"1618 contiguous_22" [id=1618, type=contiguous];
+"1619 unsqueeze_36" [id=1619, type=unsqueeze];
+"1620 sigmoid_12" [id=1620, type=sigmoid];
+"1621 mul_24" [id=1621, type=mul];
+"1622 pad_14" [id=1622, type=pad];
+"1623 view_68" [id=1623, type=view];
+"1624 permute_56" [id=1624, type=permute];
+"1625 reshape_54" [id=1625, type=reshape];
+"1626 linear_76_updated_constant0" [id=1626, type=get_attr];
+"1627 reshape_54_0_0_nncf_smooth_quant_0" [id=1627, type=call_module];
+"1628 quantize_per_tensor_default_75" [id=1628, type=quantize_per_tensor];
+"1629 dequantize_per_tensor_default_75" [id=1629, type=dequantize_per_tensor];
+"1630 linear_76_scale_0" [id=1630, type=get_attr];
+"1631 linear_76_zero_point_0" [id=1631, type=get_attr];
+"1632 quantize_per_channel_default_77" [id=1632, type=quantize_per_channel];
+"1633 dequantize_per_channel_default_77" [id=1633, type=dequantize_per_channel];
+"1634 _param_constant205_0_0" [id=1634, type=get_attr];
+"1635 linear_76" [id=1635, type=linear];
+"1636 reshape_55" [id=1636, type=reshape];
+"1637 permute_57" [id=1637, type=permute];
+"1638 select_36" [id=1638, type=select];
+"1639 select_37" [id=1639, type=select];
+"1640 select_38" [id=1640, type=select];
+"1641 linalg_vector_norm_24" [id=1641, type=linalg_vector_norm];
+"1642 clamp_min_24" [id=1642, type=clamp_min];
+"1643 expand_as_24" [id=1643, type=expand_as];
+"1644 div_24" [id=1644, type=div];
+"1645 quantize_per_tensor_default_76" [id=1645, type=quantize_per_tensor];
+"1646 dequantize_per_tensor_default_76" [id=1646, type=dequantize_per_tensor];
+"1647 linalg_vector_norm_25" [id=1647, type=linalg_vector_norm];
+"1648 clamp_min_25" [id=1648, type=clamp_min];
+"1649 expand_as_25" [id=1649, type=expand_as];
+"1650 div_25" [id=1650, type=div];
+"1651 quantize_per_tensor_default_77" [id=1651, type=quantize_per_tensor];
+"1652 dequantize_per_tensor_default_77" [id=1652, type=dequantize_per_tensor];
+"1653 transpose_24" [id=1653, type=transpose];
+"1654 matmul_24" [id=1654, type=matmul];
+"1655 _param_constant207" [id=1655, type=get_attr];
+"1656 clamp_12" [id=1656, type=clamp];
+"1657 exp_12" [id=1657, type=exp];
+"1658 mul_25" [id=1658, type=mul];
+"1659 add_42" [id=1659, type=add];
+"1660 softmax_12" [id=1660, type=softmax];
+"1661 dropout_48" [id=1661, type=dropout];
+"1662 matmul_25" [id=1662, type=matmul];
+"1663 transpose_25" [id=1663, type=transpose];
+"1664 reshape_56" [id=1664, type=reshape];
+"1665 linear_77_updated_constant0" [id=1665, type=get_attr];
+"1666 reshape_56_0_0_nncf_smooth_quant_0" [id=1666, type=call_module];
+"1667 quantize_per_tensor_default_78" [id=1667, type=quantize_per_tensor];
+"1668 dequantize_per_tensor_default_78" [id=1668, type=dequantize_per_tensor];
+"1669 linear_77_scale_0" [id=1669, type=get_attr];
+"1670 linear_77_zero_point_0" [id=1670, type=get_attr];
+"1671 quantize_per_channel_default_78" [id=1671, type=quantize_per_channel];
+"1672 dequantize_per_channel_default_78" [id=1672, type=dequantize_per_channel];
+"1673 _param_constant209_0_0" [id=1673, type=get_attr];
+"1674 linear_77" [id=1674, type=linear];
+"1675 dropout_49" [id=1675, type=dropout];
+"1676 view_69" [id=1676, type=view];
+"1677 permute_58" [id=1677, type=permute];
+"1678 reshape_57" [id=1678, type=reshape];
+"1679 slice_190" [id=1679, type=slice];
+"1680 slice_191" [id=1680, type=slice];
+"1681 slice_192" [id=1681, type=slice];
+"1682 slice_193" [id=1682, type=slice];
+"1683 contiguous_23" [id=1683, type=contiguous];
+"1684 _param_constant210" [id=1684, type=get_attr];
+"1685 _param_constant211" [id=1685, type=get_attr];
+"1686 layer_norm_27" [id=1686, type=layer_norm];
+"1687 add_43" [id=1687, type=add];
+"1688 linear_78_updated_constant0" [id=1688, type=get_attr];
+"1689 add_43_0_0_nncf_smooth_quant_0" [id=1689, type=call_module];
+"1690 quantize_per_tensor_default_79" [id=1690, type=quantize_per_tensor];
+"1691 dequantize_per_tensor_default_79" [id=1691, type=dequantize_per_tensor];
+"1692 linear_78_scale_0" [id=1692, type=get_attr];
+"1693 linear_78_zero_point_0" [id=1693, type=get_attr];
+"1694 quantize_per_channel_default_79" [id=1694, type=quantize_per_channel];
+"1695 dequantize_per_channel_default_79" [id=1695, type=dequantize_per_channel];
+"1696 _param_constant213_0_0" [id=1696, type=get_attr];
+"1697 linear_78" [id=1697, type=linear];
+"1698 gelu_12" [id=1698, type=gelu];
+"1699 dropout_50" [id=1699, type=dropout];
+"1700 linear_79_updated_constant0" [id=1700, type=get_attr];
+"1701 dropout_50_0_0_nncf_smooth_quant_0" [id=1701, type=call_module];
+"1702 quantize_per_tensor_default_80" [id=1702, type=quantize_per_tensor];
+"1703 dequantize_per_tensor_default_80" [id=1703, type=dequantize_per_tensor];
+"1704 linear_79_scale_0" [id=1704, type=get_attr];
+"1705 linear_79_zero_point_0" [id=1705, type=get_attr];
+"1706 quantize_per_channel_default_80" [id=1706, type=quantize_per_channel];
+"1707 dequantize_per_channel_default_80" [id=1707, type=dequantize_per_channel];
+"1708 _param_constant215_0_0" [id=1708, type=get_attr];
+"1709 linear_79" [id=1709, type=linear];
+"1710 dropout_51" [id=1710, type=dropout];
+"1711 _param_constant216" [id=1711, type=get_attr];
+"1712 _param_constant217" [id=1712, type=get_attr];
+"1713 layer_norm_28" [id=1713, type=layer_norm];
+"1714 add_44" [id=1714, type=add];
+"1715 _tensor_constant80" [id=1715, type=get_attr];
+"1716 linear_80_updated_constant0" [id=1716, type=get_attr];
+"1717 _tensor_constant80_0_0_nncf_smooth_quant_0" [id=1717, type=call_module];
+"1718 linear_80_scale_0" [id=1718, type=get_attr];
+"1719 linear_80_zero_point_0" [id=1719, type=get_attr];
+"1720 quantize_per_channel_default_81" [id=1720, type=quantize_per_channel];
+"1721 dequantize_per_channel_default_81" [id=1721, type=dequantize_per_channel];
+"1722 _param_constant219_0_0" [id=1722, type=get_attr];
+"1723 linear_80" [id=1723, type=linear];
+"1724 relu__13" [id=1724, type=relu_];
+"1725 linear_81_updated_constant0" [id=1725, type=get_attr];
+"1726 relu__13_0_0_nncf_smooth_quant_0" [id=1726, type=call_module];
+"1727 linear_81_scale_0" [id=1727, type=get_attr];
+"1728 linear_81_zero_point_0" [id=1728, type=get_attr];
+"1729 quantize_per_channel_default_82" [id=1729, type=quantize_per_channel];
+"1730 dequantize_per_channel_default_82" [id=1730, type=dequantize_per_channel];
+"1731 linear_81" [id=1731, type=linear];
+"1732 view_70" [id=1732, type=view];
+"1733 _tensor_constant81" [id=1733, type=get_attr];
+"1734 index_13" [id=1734, type=index];
+"1735 view_71" [id=1735, type=view];
+"1736 permute_59" [id=1736, type=permute];
+"1737 contiguous_24" [id=1737, type=contiguous];
+"1738 unsqueeze_37" [id=1738, type=unsqueeze];
+"1739 sigmoid_13" [id=1739, type=sigmoid];
+"1740 mul_26" [id=1740, type=mul];
+"1741 pad_15" [id=1741, type=pad];
+"1742 roll_12" [id=1742, type=roll];
+"1743 view_72" [id=1743, type=view];
+"1744 permute_60" [id=1744, type=permute];
+"1745 reshape_58" [id=1745, type=reshape];
+"1746 linear_82_updated_constant0" [id=1746, type=get_attr];
+"1747 reshape_58_0_0_nncf_smooth_quant_0" [id=1747, type=call_module];
+"1748 quantize_per_tensor_default_81" [id=1748, type=quantize_per_tensor];
+"1749 dequantize_per_tensor_default_81" [id=1749, type=dequantize_per_tensor];
+"1750 linear_82_scale_0" [id=1750, type=get_attr];
+"1751 linear_82_zero_point_0" [id=1751, type=get_attr];
+"1752 quantize_per_channel_default_83" [id=1752, type=quantize_per_channel];
+"1753 dequantize_per_channel_default_83" [id=1753, type=dequantize_per_channel];
+"1754 _param_constant221_0_0" [id=1754, type=get_attr];
+"1755 linear_82" [id=1755, type=linear];
+"1756 reshape_59" [id=1756, type=reshape];
+"1757 permute_61" [id=1757, type=permute];
+"1758 select_39" [id=1758, type=select];
+"1759 select_40" [id=1759, type=select];
+"1760 select_41" [id=1760, type=select];
+"1761 linalg_vector_norm_26" [id=1761, type=linalg_vector_norm];
+"1762 clamp_min_26" [id=1762, type=clamp_min];
+"1763 expand_as_26" [id=1763, type=expand_as];
+"1764 div_26" [id=1764, type=div];
+"1765 quantize_per_tensor_default_82" [id=1765, type=quantize_per_tensor];
+"1766 dequantize_per_tensor_default_82" [id=1766, type=dequantize_per_tensor];
+"1767 linalg_vector_norm_27" [id=1767, type=linalg_vector_norm];
+"1768 clamp_min_27" [id=1768, type=clamp_min];
+"1769 expand_as_27" [id=1769, type=expand_as];
+"1770 div_27" [id=1770, type=div];
+"1771 quantize_per_tensor_default_83" [id=1771, type=quantize_per_tensor];
+"1772 dequantize_per_tensor_default_83" [id=1772, type=dequantize_per_tensor];
+"1773 transpose_26" [id=1773, type=transpose];
+"1774 matmul_26" [id=1774, type=matmul];
+"1775 _param_constant223" [id=1775, type=get_attr];
+"1776 clamp_13" [id=1776, type=clamp];
+"1777 exp_13" [id=1777, type=exp];
+"1778 mul_27" [id=1778, type=mul];
+"1779 add_45" [id=1779, type=add];
+"1780 new_zeros_6" [id=1780, type=new_zeros];
+"1781 view_73" [id=1781, type=view];
+"1782 permute_62" [id=1782, type=permute];
+"1783 reshape_60" [id=1783, type=reshape];
+"1784 unsqueeze_38" [id=1784, type=unsqueeze];
+"1785 unsqueeze_39" [id=1785, type=unsqueeze];
+"1786 sub_6" [id=1786, type=sub];
+"1787 ne_6" [id=1787, type=ne];
+"1788 masked_fill_12" [id=1788, type=masked_fill];
+"1789 eq_6" [id=1789, type=eq];
+"1790 masked_fill_13" [id=1790, type=masked_fill];
+"1791 view_74" [id=1791, type=view];
+"1792 unsqueeze_40" [id=1792, type=unsqueeze];
+"1793 unsqueeze_41" [id=1793, type=unsqueeze];
+"1794 add_46" [id=1794, type=add];
+"1795 view_75" [id=1795, type=view];
+"1796 softmax_13" [id=1796, type=softmax];
+"1797 dropout_52" [id=1797, type=dropout];
+"1798 matmul_27" [id=1798, type=matmul];
+"1799 transpose_27" [id=1799, type=transpose];
+"1800 reshape_61" [id=1800, type=reshape];
+"1801 linear_83_updated_constant0" [id=1801, type=get_attr];
+"1802 reshape_61_0_0_nncf_smooth_quant_0" [id=1802, type=call_module];
+"1803 quantize_per_tensor_default_84" [id=1803, type=quantize_per_tensor];
+"1804 dequantize_per_tensor_default_84" [id=1804, type=dequantize_per_tensor];
+"1805 linear_83_scale_0" [id=1805, type=get_attr];
+"1806 linear_83_zero_point_0" [id=1806, type=get_attr];
+"1807 quantize_per_channel_default_84" [id=1807, type=quantize_per_channel];
+"1808 dequantize_per_channel_default_84" [id=1808, type=dequantize_per_channel];
+"1809 _param_constant225_0_0" [id=1809, type=get_attr];
+"1810 linear_83" [id=1810, type=linear];
+"1811 dropout_53" [id=1811, type=dropout];
+"1812 view_76" [id=1812, type=view];
+"1813 permute_63" [id=1813, type=permute];
+"1814 reshape_62" [id=1814, type=reshape];
+"1815 roll_13" [id=1815, type=roll];
+"1816 slice_213" [id=1816, type=slice];
+"1817 slice_214" [id=1817, type=slice];
+"1818 slice_215" [id=1818, type=slice];
+"1819 slice_216" [id=1819, type=slice];
+"1820 contiguous_25" [id=1820, type=contiguous];
+"1821 _param_constant226" [id=1821, type=get_attr];
+"1822 _param_constant227" [id=1822, type=get_attr];
+"1823 layer_norm_29" [id=1823, type=layer_norm];
+"1824 add_47" [id=1824, type=add];
+"1825 linear_84_updated_constant0" [id=1825, type=get_attr];
+"1826 add_47_0_0_nncf_smooth_quant_0" [id=1826, type=call_module];
+"1827 quantize_per_tensor_default_85" [id=1827, type=quantize_per_tensor];
+"1828 dequantize_per_tensor_default_85" [id=1828, type=dequantize_per_tensor];
+"1829 linear_84_scale_0" [id=1829, type=get_attr];
+"1830 linear_84_zero_point_0" [id=1830, type=get_attr];
+"1831 quantize_per_channel_default_85" [id=1831, type=quantize_per_channel];
+"1832 dequantize_per_channel_default_85" [id=1832, type=dequantize_per_channel];
+"1833 _param_constant229_0_0" [id=1833, type=get_attr];
+"1834 linear_84" [id=1834, type=linear];
+"1835 gelu_13" [id=1835, type=gelu];
+"1836 dropout_54" [id=1836, type=dropout];
+"1837 linear_85_updated_constant0" [id=1837, type=get_attr];
+"1838 dropout_54_0_0_nncf_smooth_quant_0" [id=1838, type=call_module];
+"1839 quantize_per_tensor_default_86" [id=1839, type=quantize_per_tensor];
+"1840 dequantize_per_tensor_default_86" [id=1840, type=dequantize_per_tensor];
+"1841 linear_85_scale_0" [id=1841, type=get_attr];
+"1842 linear_85_zero_point_0" [id=1842, type=get_attr];
+"1843 quantize_per_channel_default_86" [id=1843, type=quantize_per_channel];
+"1844 dequantize_per_channel_default_86" [id=1844, type=dequantize_per_channel];
+"1845 _param_constant231_0_0" [id=1845, type=get_attr];
+"1846 linear_85" [id=1846, type=linear];
+"1847 dropout_55" [id=1847, type=dropout];
+"1848 _param_constant232" [id=1848, type=get_attr];
+"1849 _param_constant233" [id=1849, type=get_attr];
+"1850 layer_norm_30" [id=1850, type=layer_norm];
+"1851 add_48" [id=1851, type=add];
+"1852 _tensor_constant91" [id=1852, type=get_attr];
+"1853 linear_86_updated_constant0" [id=1853, type=get_attr];
+"1854 _tensor_constant91_0_0_nncf_smooth_quant_0" [id=1854, type=call_module];
+"1855 linear_86_scale_0" [id=1855, type=get_attr];
+"1856 linear_86_zero_point_0" [id=1856, type=get_attr];
+"1857 quantize_per_channel_default_87" [id=1857, type=quantize_per_channel];
+"1858 dequantize_per_channel_default_87" [id=1858, type=dequantize_per_channel];
+"1859 _param_constant235_0_0" [id=1859, type=get_attr];
+"1860 linear_86" [id=1860, type=linear];
+"1861 relu__14" [id=1861, type=relu_];
+"1862 linear_87_updated_constant0" [id=1862, type=get_attr];
+"1863 relu__14_0_0_nncf_smooth_quant_0" [id=1863, type=call_module];
+"1864 linear_87_scale_0" [id=1864, type=get_attr];
+"1865 linear_87_zero_point_0" [id=1865, type=get_attr];
+"1866 quantize_per_channel_default_88" [id=1866, type=quantize_per_channel];
+"1867 dequantize_per_channel_default_88" [id=1867, type=dequantize_per_channel];
+"1868 linear_87" [id=1868, type=linear];
+"1869 view_77" [id=1869, type=view];
+"1870 _tensor_constant92" [id=1870, type=get_attr];
+"1871 index_14" [id=1871, type=index];
+"1872 view_78" [id=1872, type=view];
+"1873 permute_64" [id=1873, type=permute];
+"1874 contiguous_26" [id=1874, type=contiguous];
+"1875 unsqueeze_42" [id=1875, type=unsqueeze];
+"1876 sigmoid_14" [id=1876, type=sigmoid];
+"1877 mul_28" [id=1877, type=mul];
+"1878 pad_16" [id=1878, type=pad];
+"1879 view_79" [id=1879, type=view];
+"1880 permute_65" [id=1880, type=permute];
+"1881 reshape_63" [id=1881, type=reshape];
+"1882 linear_88_updated_constant0" [id=1882, type=get_attr];
+"1883 reshape_63_0_0_nncf_smooth_quant_0" [id=1883, type=call_module];
+"1884 quantize_per_tensor_default_87" [id=1884, type=quantize_per_tensor];
+"1885 dequantize_per_tensor_default_87" [id=1885, type=dequantize_per_tensor];
+"1886 linear_88_scale_0" [id=1886, type=get_attr];
+"1887 linear_88_zero_point_0" [id=1887, type=get_attr];
+"1888 quantize_per_channel_default_89" [id=1888, type=quantize_per_channel];
+"1889 dequantize_per_channel_default_89" [id=1889, type=dequantize_per_channel];
+"1890 _param_constant237_0_0" [id=1890, type=get_attr];
+"1891 linear_88" [id=1891, type=linear];
+"1892 reshape_64" [id=1892, type=reshape];
+"1893 permute_66" [id=1893, type=permute];
+"1894 select_42" [id=1894, type=select];
+"1895 select_43" [id=1895, type=select];
+"1896 select_44" [id=1896, type=select];
+"1897 linalg_vector_norm_28" [id=1897, type=linalg_vector_norm];
+"1898 clamp_min_28" [id=1898, type=clamp_min];
+"1899 expand_as_28" [id=1899, type=expand_as];
+"1900 div_28" [id=1900, type=div];
+"1901 quantize_per_tensor_default_88" [id=1901, type=quantize_per_tensor];
+"1902 dequantize_per_tensor_default_88" [id=1902, type=dequantize_per_tensor];
+"1903 linalg_vector_norm_29" [id=1903, type=linalg_vector_norm];
+"1904 clamp_min_29" [id=1904, type=clamp_min];
+"1905 expand_as_29" [id=1905, type=expand_as];
+"1906 div_29" [id=1906, type=div];
+"1907 quantize_per_tensor_default_89" [id=1907, type=quantize_per_tensor];
+"1908 dequantize_per_tensor_default_89" [id=1908, type=dequantize_per_tensor];
+"1909 transpose_28" [id=1909, type=transpose];
+"1910 matmul_28" [id=1910, type=matmul];
+"1911 _param_constant239" [id=1911, type=get_attr];
+"1912 clamp_14" [id=1912, type=clamp];
+"1913 exp_14" [id=1913, type=exp];
+"1914 mul_29" [id=1914, type=mul];
+"1915 add_49" [id=1915, type=add];
+"1916 softmax_14" [id=1916, type=softmax];
+"1917 dropout_56" [id=1917, type=dropout];
+"1918 matmul_29" [id=1918, type=matmul];
+"1919 transpose_29" [id=1919, type=transpose];
+"1920 reshape_65" [id=1920, type=reshape];
+"1921 linear_89_updated_constant0" [id=1921, type=get_attr];
+"1922 reshape_65_0_0_nncf_smooth_quant_0" [id=1922, type=call_module];
+"1923 quantize_per_tensor_default_90" [id=1923, type=quantize_per_tensor];
+"1924 dequantize_per_tensor_default_90" [id=1924, type=dequantize_per_tensor];
+"1925 linear_89_scale_0" [id=1925, type=get_attr];
+"1926 linear_89_zero_point_0" [id=1926, type=get_attr];
+"1927 quantize_per_channel_default_90" [id=1927, type=quantize_per_channel];
+"1928 dequantize_per_channel_default_90" [id=1928, type=dequantize_per_channel];
+"1929 _param_constant241_0_0" [id=1929, type=get_attr];
+"1930 linear_89" [id=1930, type=linear];
+"1931 dropout_57" [id=1931, type=dropout];
+"1932 view_80" [id=1932, type=view];
+"1933 permute_67" [id=1933, type=permute];
+"1934 reshape_66" [id=1934, type=reshape];
+"1935 slice_218" [id=1935, type=slice];
+"1936 slice_219" [id=1936, type=slice];
+"1937 slice_220" [id=1937, type=slice];
+"1938 slice_221" [id=1938, type=slice];
+"1939 contiguous_27" [id=1939, type=contiguous];
+"1940 _param_constant242" [id=1940, type=get_attr];
+"1941 _param_constant243" [id=1941, type=get_attr];
+"1942 layer_norm_31" [id=1942, type=layer_norm];
+"1943 add_50" [id=1943, type=add];
+"1944 linear_90_updated_constant0" [id=1944, type=get_attr];
+"1945 add_50_0_0_nncf_smooth_quant_0" [id=1945, type=call_module];
+"1946 quantize_per_tensor_default_91" [id=1946, type=quantize_per_tensor];
+"1947 dequantize_per_tensor_default_91" [id=1947, type=dequantize_per_tensor];
+"1948 linear_90_scale_0" [id=1948, type=get_attr];
+"1949 linear_90_zero_point_0" [id=1949, type=get_attr];
+"1950 quantize_per_channel_default_91" [id=1950, type=quantize_per_channel];
+"1951 dequantize_per_channel_default_91" [id=1951, type=dequantize_per_channel];
+"1952 _param_constant245_0_0" [id=1952, type=get_attr];
+"1953 linear_90" [id=1953, type=linear];
+"1954 gelu_14" [id=1954, type=gelu];
+"1955 dropout_58" [id=1955, type=dropout];
+"1956 linear_91_updated_constant0" [id=1956, type=get_attr];
+"1957 dropout_58_0_0_nncf_smooth_quant_0" [id=1957, type=call_module];
+"1958 quantize_per_tensor_default_92" [id=1958, type=quantize_per_tensor];
+"1959 dequantize_per_tensor_default_92" [id=1959, type=dequantize_per_tensor];
+"1960 linear_91_scale_0" [id=1960, type=get_attr];
+"1961 linear_91_zero_point_0" [id=1961, type=get_attr];
+"1962 quantize_per_channel_default_92" [id=1962, type=quantize_per_channel];
+"1963 dequantize_per_channel_default_92" [id=1963, type=dequantize_per_channel];
+"1964 _param_constant247_0_0" [id=1964, type=get_attr];
+"1965 linear_91" [id=1965, type=linear];
+"1966 dropout_59" [id=1966, type=dropout];
+"1967 _param_constant248" [id=1967, type=get_attr];
+"1968 _param_constant249" [id=1968, type=get_attr];
+"1969 layer_norm_32" [id=1969, type=layer_norm];
+"1970 add_51" [id=1970, type=add];
+"1971 _tensor_constant93" [id=1971, type=get_attr];
+"1972 linear_92_updated_constant0" [id=1972, type=get_attr];
+"1973 _tensor_constant93_0_0_nncf_smooth_quant_0" [id=1973, type=call_module];
+"1974 linear_92_scale_0" [id=1974, type=get_attr];
+"1975 linear_92_zero_point_0" [id=1975, type=get_attr];
+"1976 quantize_per_channel_default_93" [id=1976, type=quantize_per_channel];
+"1977 dequantize_per_channel_default_93" [id=1977, type=dequantize_per_channel];
+"1978 _param_constant251_0_0" [id=1978, type=get_attr];
+"1979 linear_92" [id=1979, type=linear];
+"1980 relu__15" [id=1980, type=relu_];
+"1981 linear_93_updated_constant0" [id=1981, type=get_attr];
+"1982 relu__15_0_0_nncf_smooth_quant_0" [id=1982, type=call_module];
+"1983 linear_93_scale_0" [id=1983, type=get_attr];
+"1984 linear_93_zero_point_0" [id=1984, type=get_attr];
+"1985 quantize_per_channel_default_94" [id=1985, type=quantize_per_channel];
+"1986 dequantize_per_channel_default_94" [id=1986, type=dequantize_per_channel];
+"1987 linear_93" [id=1987, type=linear];
+"1988 view_81" [id=1988, type=view];
+"1989 _tensor_constant94" [id=1989, type=get_attr];
+"1990 index_15" [id=1990, type=index];
+"1991 view_82" [id=1991, type=view];
+"1992 permute_68" [id=1992, type=permute];
+"1993 contiguous_28" [id=1993, type=contiguous];
+"1994 unsqueeze_43" [id=1994, type=unsqueeze];
+"1995 sigmoid_15" [id=1995, type=sigmoid];
+"1996 mul_30" [id=1996, type=mul];
+"1997 pad_17" [id=1997, type=pad];
+"1998 roll_14" [id=1998, type=roll];
+"1999 view_83" [id=1999, type=view];
+"2000 permute_69" [id=2000, type=permute];
+"2001 reshape_67" [id=2001, type=reshape];
+"2002 linear_94_updated_constant0" [id=2002, type=get_attr];
+"2003 reshape_67_0_0_nncf_smooth_quant_0" [id=2003, type=call_module];
+"2004 quantize_per_tensor_default_93" [id=2004, type=quantize_per_tensor];
+"2005 dequantize_per_tensor_default_93" [id=2005, type=dequantize_per_tensor];
+"2006 linear_94_scale_0" [id=2006, type=get_attr];
+"2007 linear_94_zero_point_0" [id=2007, type=get_attr];
+"2008 quantize_per_channel_default_95" [id=2008, type=quantize_per_channel];
+"2009 dequantize_per_channel_default_95" [id=2009, type=dequantize_per_channel];
+"2010 _param_constant253_0_0" [id=2010, type=get_attr];
+"2011 linear_94" [id=2011, type=linear];
+"2012 reshape_68" [id=2012, type=reshape];
+"2013 permute_70" [id=2013, type=permute];
+"2014 select_45" [id=2014, type=select];
+"2015 select_46" [id=2015, type=select];
+"2016 select_47" [id=2016, type=select];
+"2017 linalg_vector_norm_30" [id=2017, type=linalg_vector_norm];
+"2018 clamp_min_30" [id=2018, type=clamp_min];
+"2019 expand_as_30" [id=2019, type=expand_as];
+"2020 div_30" [id=2020, type=div];
+"2021 quantize_per_tensor_default_94" [id=2021, type=quantize_per_tensor];
+"2022 dequantize_per_tensor_default_94" [id=2022, type=dequantize_per_tensor];
+"2023 linalg_vector_norm_31" [id=2023, type=linalg_vector_norm];
+"2024 clamp_min_31" [id=2024, type=clamp_min];
+"2025 expand_as_31" [id=2025, type=expand_as];
+"2026 div_31" [id=2026, type=div];
+"2027 quantize_per_tensor_default_95" [id=2027, type=quantize_per_tensor];
+"2028 dequantize_per_tensor_default_95" [id=2028, type=dequantize_per_tensor];
+"2029 transpose_30" [id=2029, type=transpose];
+"2030 matmul_30" [id=2030, type=matmul];
+"2031 _param_constant255" [id=2031, type=get_attr];
+"2032 clamp_15" [id=2032, type=clamp];
+"2033 exp_15" [id=2033, type=exp];
+"2034 mul_31" [id=2034, type=mul];
+"2035 add_52" [id=2035, type=add];
+"2036 new_zeros_7" [id=2036, type=new_zeros];
+"2037 view_84" [id=2037, type=view];
+"2038 permute_71" [id=2038, type=permute];
+"2039 reshape_69" [id=2039, type=reshape];
+"2040 unsqueeze_44" [id=2040, type=unsqueeze];
+"2041 unsqueeze_45" [id=2041, type=unsqueeze];
+"2042 sub_7" [id=2042, type=sub];
+"2043 ne_7" [id=2043, type=ne];
+"2044 masked_fill_14" [id=2044, type=masked_fill];
+"2045 eq_7" [id=2045, type=eq];
+"2046 masked_fill_15" [id=2046, type=masked_fill];
+"2047 view_85" [id=2047, type=view];
+"2048 unsqueeze_46" [id=2048, type=unsqueeze];
+"2049 unsqueeze_47" [id=2049, type=unsqueeze];
+"2050 add_53" [id=2050, type=add];
+"2051 view_86" [id=2051, type=view];
+"2052 softmax_15" [id=2052, type=softmax];
+"2053 dropout_60" [id=2053, type=dropout];
+"2054 matmul_31" [id=2054, type=matmul];
+"2055 transpose_31" [id=2055, type=transpose];
+"2056 reshape_70" [id=2056, type=reshape];
+"2057 linear_95_updated_constant0" [id=2057, type=get_attr];
+"2058 reshape_70_0_0_nncf_smooth_quant_0" [id=2058, type=call_module];
+"2059 quantize_per_tensor_default_96" [id=2059, type=quantize_per_tensor];
+"2060 dequantize_per_tensor_default_96" [id=2060, type=dequantize_per_tensor];
+"2061 linear_95_scale_0" [id=2061, type=get_attr];
+"2062 linear_95_zero_point_0" [id=2062, type=get_attr];
+"2063 quantize_per_channel_default_96" [id=2063, type=quantize_per_channel];
+"2064 dequantize_per_channel_default_96" [id=2064, type=dequantize_per_channel];
+"2065 _param_constant257_0_0" [id=2065, type=get_attr];
+"2066 linear_95" [id=2066, type=linear];
+"2067 dropout_61" [id=2067, type=dropout];
+"2068 view_87" [id=2068, type=view];
+"2069 permute_72" [id=2069, type=permute];
+"2070 reshape_71" [id=2070, type=reshape];
+"2071 roll_15" [id=2071, type=roll];
+"2072 slice_241" [id=2072, type=slice];
+"2073 slice_242" [id=2073, type=slice];
+"2074 slice_243" [id=2074, type=slice];
+"2075 slice_244" [id=2075, type=slice];
+"2076 contiguous_29" [id=2076, type=contiguous];
+"2077 _param_constant258" [id=2077, type=get_attr];
+"2078 _param_constant259" [id=2078, type=get_attr];
+"2079 layer_norm_33" [id=2079, type=layer_norm];
+"2080 add_54" [id=2080, type=add];
+"2081 linear_96_updated_constant0" [id=2081, type=get_attr];
+"2082 add_54_0_0_nncf_smooth_quant_0" [id=2082, type=call_module];
+"2083 quantize_per_tensor_default_97" [id=2083, type=quantize_per_tensor];
+"2084 dequantize_per_tensor_default_97" [id=2084, type=dequantize_per_tensor];
+"2085 linear_96_scale_0" [id=2085, type=get_attr];
+"2086 linear_96_zero_point_0" [id=2086, type=get_attr];
+"2087 quantize_per_channel_default_97" [id=2087, type=quantize_per_channel];
+"2088 dequantize_per_channel_default_97" [id=2088, type=dequantize_per_channel];
+"2089 _param_constant261_0_0" [id=2089, type=get_attr];
+"2090 linear_96" [id=2090, type=linear];
+"2091 gelu_15" [id=2091, type=gelu];
+"2092 dropout_62" [id=2092, type=dropout];
+"2093 linear_97_updated_constant0" [id=2093, type=get_attr];
+"2094 dropout_62_0_0_nncf_smooth_quant_0" [id=2094, type=call_module];
+"2095 quantize_per_tensor_default_98" [id=2095, type=quantize_per_tensor];
+"2096 dequantize_per_tensor_default_98" [id=2096, type=dequantize_per_tensor];
+"2097 linear_97_scale_0" [id=2097, type=get_attr];
+"2098 linear_97_zero_point_0" [id=2098, type=get_attr];
+"2099 quantize_per_channel_default_98" [id=2099, type=quantize_per_channel];
+"2100 dequantize_per_channel_default_98" [id=2100, type=dequantize_per_channel];
+"2101 _param_constant263_0_0" [id=2101, type=get_attr];
+"2102 linear_97" [id=2102, type=linear];
+"2103 dropout_63" [id=2103, type=dropout];
+"2104 _param_constant264" [id=2104, type=get_attr];
+"2105 _param_constant265" [id=2105, type=get_attr];
+"2106 layer_norm_34" [id=2106, type=layer_norm];
+"2107 add_55" [id=2107, type=add];
+"2108 _tensor_constant104" [id=2108, type=get_attr];
+"2109 linear_98_updated_constant0" [id=2109, type=get_attr];
+"2110 _tensor_constant104_0_0_nncf_smooth_quant_0" [id=2110, type=call_module];
+"2111 linear_98_scale_0" [id=2111, type=get_attr];
+"2112 linear_98_zero_point_0" [id=2112, type=get_attr];
+"2113 quantize_per_channel_default_99" [id=2113, type=quantize_per_channel];
+"2114 dequantize_per_channel_default_99" [id=2114, type=dequantize_per_channel];
+"2115 _param_constant267_0_0" [id=2115, type=get_attr];
+"2116 linear_98" [id=2116, type=linear];
+"2117 relu__16" [id=2117, type=relu_];
+"2118 linear_99_updated_constant0" [id=2118, type=get_attr];
+"2119 relu__16_0_0_nncf_smooth_quant_0" [id=2119, type=call_module];
+"2120 linear_99_scale_0" [id=2120, type=get_attr];
+"2121 linear_99_zero_point_0" [id=2121, type=get_attr];
+"2122 quantize_per_channel_default_100" [id=2122, type=quantize_per_channel];
+"2123 dequantize_per_channel_default_100" [id=2123, type=dequantize_per_channel];
+"2124 linear_99" [id=2124, type=linear];
+"2125 view_88" [id=2125, type=view];
+"2126 _tensor_constant105" [id=2126, type=get_attr];
+"2127 index_16" [id=2127, type=index];
+"2128 view_89" [id=2128, type=view];
+"2129 permute_73" [id=2129, type=permute];
+"2130 contiguous_30" [id=2130, type=contiguous];
+"2131 unsqueeze_48" [id=2131, type=unsqueeze];
+"2132 sigmoid_16" [id=2132, type=sigmoid];
+"2133 mul_32" [id=2133, type=mul];
+"2134 pad_18" [id=2134, type=pad];
+"2135 view_90" [id=2135, type=view];
+"2136 permute_74" [id=2136, type=permute];
+"2137 reshape_72" [id=2137, type=reshape];
+"2138 linear_100_updated_constant0" [id=2138, type=get_attr];
+"2139 reshape_72_0_0_nncf_smooth_quant_0" [id=2139, type=call_module];
+"2140 quantize_per_tensor_default_99" [id=2140, type=quantize_per_tensor];
+"2141 dequantize_per_tensor_default_99" [id=2141, type=dequantize_per_tensor];
+"2142 linear_100_scale_0" [id=2142, type=get_attr];
+"2143 linear_100_zero_point_0" [id=2143, type=get_attr];
+"2144 quantize_per_channel_default_101" [id=2144, type=quantize_per_channel];
+"2145 dequantize_per_channel_default_101" [id=2145, type=dequantize_per_channel];
+"2146 _param_constant269_0_0" [id=2146, type=get_attr];
+"2147 linear_100" [id=2147, type=linear];
+"2148 reshape_73" [id=2148, type=reshape];
+"2149 permute_75" [id=2149, type=permute];
+"2150 select_48" [id=2150, type=select];
+"2151 select_49" [id=2151, type=select];
+"2152 select_50" [id=2152, type=select];
+"2153 linalg_vector_norm_32" [id=2153, type=linalg_vector_norm];
+"2154 clamp_min_32" [id=2154, type=clamp_min];
+"2155 expand_as_32" [id=2155, type=expand_as];
+"2156 div_32" [id=2156, type=div];
+"2157 quantize_per_tensor_default_100" [id=2157, type=quantize_per_tensor];
+"2158 dequantize_per_tensor_default_100" [id=2158, type=dequantize_per_tensor];
+"2159 linalg_vector_norm_33" [id=2159, type=linalg_vector_norm];
+"2160 clamp_min_33" [id=2160, type=clamp_min];
+"2161 expand_as_33" [id=2161, type=expand_as];
+"2162 div_33" [id=2162, type=div];
+"2163 quantize_per_tensor_default_101" [id=2163, type=quantize_per_tensor];
+"2164 dequantize_per_tensor_default_101" [id=2164, type=dequantize_per_tensor];
+"2165 transpose_32" [id=2165, type=transpose];
+"2166 matmul_32" [id=2166, type=matmul];
+"2167 _param_constant271" [id=2167, type=get_attr];
+"2168 clamp_16" [id=2168, type=clamp];
+"2169 exp_16" [id=2169, type=exp];
+"2170 mul_33" [id=2170, type=mul];
+"2171 add_56" [id=2171, type=add];
+"2172 softmax_16" [id=2172, type=softmax];
+"2173 dropout_64" [id=2173, type=dropout];
+"2174 matmul_33" [id=2174, type=matmul];
+"2175 transpose_33" [id=2175, type=transpose];
+"2176 reshape_74" [id=2176, type=reshape];
+"2177 linear_101_updated_constant0" [id=2177, type=get_attr];
+"2178 reshape_74_0_0_nncf_smooth_quant_0" [id=2178, type=call_module];
+"2179 quantize_per_tensor_default_102" [id=2179, type=quantize_per_tensor];
+"2180 dequantize_per_tensor_default_102" [id=2180, type=dequantize_per_tensor];
+"2181 linear_101_scale_0" [id=2181, type=get_attr];
+"2182 linear_101_zero_point_0" [id=2182, type=get_attr];
+"2183 quantize_per_channel_default_102" [id=2183, type=quantize_per_channel];
+"2184 dequantize_per_channel_default_102" [id=2184, type=dequantize_per_channel];
+"2185 _param_constant273_0_0" [id=2185, type=get_attr];
+"2186 linear_101" [id=2186, type=linear];
+"2187 dropout_65" [id=2187, type=dropout];
+"2188 view_91" [id=2188, type=view];
+"2189 permute_76" [id=2189, type=permute];
+"2190 reshape_75" [id=2190, type=reshape];
+"2191 slice_246" [id=2191, type=slice];
+"2192 slice_247" [id=2192, type=slice];
+"2193 slice_248" [id=2193, type=slice];
+"2194 slice_249" [id=2194, type=slice];
+"2195 contiguous_31" [id=2195, type=contiguous];
+"2196 _param_constant274" [id=2196, type=get_attr];
+"2197 _param_constant275" [id=2197, type=get_attr];
+"2198 layer_norm_35" [id=2198, type=layer_norm];
+"2199 add_57" [id=2199, type=add];
+"2200 linear_102_updated_constant0" [id=2200, type=get_attr];
+"2201 add_57_0_0_nncf_smooth_quant_0" [id=2201, type=call_module];
+"2202 quantize_per_tensor_default_103" [id=2202, type=quantize_per_tensor];
+"2203 dequantize_per_tensor_default_103" [id=2203, type=dequantize_per_tensor];
+"2204 linear_102_scale_0" [id=2204, type=get_attr];
+"2205 linear_102_zero_point_0" [id=2205, type=get_attr];
+"2206 quantize_per_channel_default_103" [id=2206, type=quantize_per_channel];
+"2207 dequantize_per_channel_default_103" [id=2207, type=dequantize_per_channel];
+"2208 _param_constant277_0_0" [id=2208, type=get_attr];
+"2209 linear_102" [id=2209, type=linear];
+"2210 gelu_16" [id=2210, type=gelu];
+"2211 dropout_66" [id=2211, type=dropout];
+"2212 linear_103_updated_constant0" [id=2212, type=get_attr];
+"2213 dropout_66_0_0_nncf_smooth_quant_0" [id=2213, type=call_module];
+"2214 quantize_per_tensor_default_104" [id=2214, type=quantize_per_tensor];
+"2215 dequantize_per_tensor_default_104" [id=2215, type=dequantize_per_tensor];
+"2216 linear_103_scale_0" [id=2216, type=get_attr];
+"2217 linear_103_zero_point_0" [id=2217, type=get_attr];
+"2218 quantize_per_channel_default_104" [id=2218, type=quantize_per_channel];
+"2219 dequantize_per_channel_default_104" [id=2219, type=dequantize_per_channel];
+"2220 _param_constant279_0_0" [id=2220, type=get_attr];
+"2221 linear_103" [id=2221, type=linear];
+"2222 dropout_67" [id=2222, type=dropout];
+"2223 _param_constant280" [id=2223, type=get_attr];
+"2224 _param_constant281" [id=2224, type=get_attr];
+"2225 layer_norm_36" [id=2225, type=layer_norm];
+"2226 add_58" [id=2226, type=add];
+"2227 _tensor_constant106" [id=2227, type=get_attr];
+"2228 linear_104_updated_constant0" [id=2228, type=get_attr];
+"2229 _tensor_constant106_0_0_nncf_smooth_quant_0" [id=2229, type=call_module];
+"2230 linear_104_scale_0" [id=2230, type=get_attr];
+"2231 linear_104_zero_point_0" [id=2231, type=get_attr];
+"2232 quantize_per_channel_default_105" [id=2232, type=quantize_per_channel];
+"2233 dequantize_per_channel_default_105" [id=2233, type=dequantize_per_channel];
+"2234 _param_constant283_0_0" [id=2234, type=get_attr];
+"2235 linear_104" [id=2235, type=linear];
+"2236 relu__17" [id=2236, type=relu_];
+"2237 linear_105_updated_constant0" [id=2237, type=get_attr];
+"2238 relu__17_0_0_nncf_smooth_quant_0" [id=2238, type=call_module];
+"2239 linear_105_scale_0" [id=2239, type=get_attr];
+"2240 linear_105_zero_point_0" [id=2240, type=get_attr];
+"2241 quantize_per_channel_default_106" [id=2241, type=quantize_per_channel];
+"2242 dequantize_per_channel_default_106" [id=2242, type=dequantize_per_channel];
+"2243 linear_105" [id=2243, type=linear];
+"2244 view_92" [id=2244, type=view];
+"2245 _tensor_constant107" [id=2245, type=get_attr];
+"2246 index_17" [id=2246, type=index];
+"2247 view_93" [id=2247, type=view];
+"2248 permute_77" [id=2248, type=permute];
+"2249 contiguous_32" [id=2249, type=contiguous];
+"2250 unsqueeze_49" [id=2250, type=unsqueeze];
+"2251 sigmoid_17" [id=2251, type=sigmoid];
+"2252 mul_34" [id=2252, type=mul];
+"2253 pad_19" [id=2253, type=pad];
+"2254 roll_16" [id=2254, type=roll];
+"2255 view_94" [id=2255, type=view];
+"2256 permute_78" [id=2256, type=permute];
+"2257 reshape_76" [id=2257, type=reshape];
+"2258 linear_106_updated_constant0" [id=2258, type=get_attr];
+"2259 reshape_76_0_0_nncf_smooth_quant_0" [id=2259, type=call_module];
+"2260 quantize_per_tensor_default_105" [id=2260, type=quantize_per_tensor];
+"2261 dequantize_per_tensor_default_105" [id=2261, type=dequantize_per_tensor];
+"2262 linear_106_scale_0" [id=2262, type=get_attr];
+"2263 linear_106_zero_point_0" [id=2263, type=get_attr];
+"2264 quantize_per_channel_default_107" [id=2264, type=quantize_per_channel];
+"2265 dequantize_per_channel_default_107" [id=2265, type=dequantize_per_channel];
+"2266 _param_constant285_0_0" [id=2266, type=get_attr];
+"2267 linear_106" [id=2267, type=linear];
+"2268 reshape_77" [id=2268, type=reshape];
+"2269 permute_79" [id=2269, type=permute];
+"2270 select_51" [id=2270, type=select];
+"2271 select_52" [id=2271, type=select];
+"2272 select_53" [id=2272, type=select];
+"2273 linalg_vector_norm_34" [id=2273, type=linalg_vector_norm];
+"2274 clamp_min_34" [id=2274, type=clamp_min];
+"2275 expand_as_34" [id=2275, type=expand_as];
+"2276 div_34" [id=2276, type=div];
+"2277 quantize_per_tensor_default_106" [id=2277, type=quantize_per_tensor];
+"2278 dequantize_per_tensor_default_106" [id=2278, type=dequantize_per_tensor];
+"2279 linalg_vector_norm_35" [id=2279, type=linalg_vector_norm];
+"2280 clamp_min_35" [id=2280, type=clamp_min];
+"2281 expand_as_35" [id=2281, type=expand_as];
+"2282 div_35" [id=2282, type=div];
+"2283 quantize_per_tensor_default_107" [id=2283, type=quantize_per_tensor];
+"2284 dequantize_per_tensor_default_107" [id=2284, type=dequantize_per_tensor];
+"2285 transpose_34" [id=2285, type=transpose];
+"2286 matmul_34" [id=2286, type=matmul];
+"2287 _param_constant287" [id=2287, type=get_attr];
+"2288 clamp_17" [id=2288, type=clamp];
+"2289 exp_17" [id=2289, type=exp];
+"2290 mul_35" [id=2290, type=mul];
+"2291 add_59" [id=2291, type=add];
+"2292 new_zeros_8" [id=2292, type=new_zeros];
+"2293 view_95" [id=2293, type=view];
+"2294 permute_80" [id=2294, type=permute];
+"2295 reshape_78" [id=2295, type=reshape];
+"2296 unsqueeze_50" [id=2296, type=unsqueeze];
+"2297 unsqueeze_51" [id=2297, type=unsqueeze];
+"2298 sub_8" [id=2298, type=sub];
+"2299 ne_8" [id=2299, type=ne];
+"2300 masked_fill_16" [id=2300, type=masked_fill];
+"2301 eq_8" [id=2301, type=eq];
+"2302 masked_fill_17" [id=2302, type=masked_fill];
+"2303 view_96" [id=2303, type=view];
+"2304 unsqueeze_52" [id=2304, type=unsqueeze];
+"2305 unsqueeze_53" [id=2305, type=unsqueeze];
+"2306 add_60" [id=2306, type=add];
+"2307 view_97" [id=2307, type=view];
+"2308 softmax_17" [id=2308, type=softmax];
+"2309 dropout_68" [id=2309, type=dropout];
+"2310 matmul_35" [id=2310, type=matmul];
+"2311 transpose_35" [id=2311, type=transpose];
+"2312 reshape_79" [id=2312, type=reshape];
+"2313 linear_107_updated_constant0" [id=2313, type=get_attr];
+"2314 reshape_79_0_0_nncf_smooth_quant_0" [id=2314, type=call_module];
+"2315 quantize_per_tensor_default_108" [id=2315, type=quantize_per_tensor];
+"2316 dequantize_per_tensor_default_108" [id=2316, type=dequantize_per_tensor];
+"2317 linear_107_scale_0" [id=2317, type=get_attr];
+"2318 linear_107_zero_point_0" [id=2318, type=get_attr];
+"2319 quantize_per_channel_default_108" [id=2319, type=quantize_per_channel];
+"2320 dequantize_per_channel_default_108" [id=2320, type=dequantize_per_channel];
+"2321 _param_constant289_0_0" [id=2321, type=get_attr];
+"2322 linear_107" [id=2322, type=linear];
+"2323 dropout_69" [id=2323, type=dropout];
+"2324 view_98" [id=2324, type=view];
+"2325 permute_81" [id=2325, type=permute];
+"2326 reshape_80" [id=2326, type=reshape];
+"2327 roll_17" [id=2327, type=roll];
+"2328 slice_269" [id=2328, type=slice];
+"2329 slice_270" [id=2329, type=slice];
+"2330 slice_271" [id=2330, type=slice];
+"2331 slice_272" [id=2331, type=slice];
+"2332 contiguous_33" [id=2332, type=contiguous];
+"2333 _param_constant290" [id=2333, type=get_attr];
+"2334 _param_constant291" [id=2334, type=get_attr];
+"2335 layer_norm_37" [id=2335, type=layer_norm];
+"2336 add_61" [id=2336, type=add];
+"2337 linear_108_updated_constant0" [id=2337, type=get_attr];
+"2338 add_61_0_0_nncf_smooth_quant_0" [id=2338, type=call_module];
+"2339 quantize_per_tensor_default_109" [id=2339, type=quantize_per_tensor];
+"2340 dequantize_per_tensor_default_109" [id=2340, type=dequantize_per_tensor];
+"2341 linear_108_scale_0" [id=2341, type=get_attr];
+"2342 linear_108_zero_point_0" [id=2342, type=get_attr];
+"2343 quantize_per_channel_default_109" [id=2343, type=quantize_per_channel];
+"2344 dequantize_per_channel_default_109" [id=2344, type=dequantize_per_channel];
+"2345 _param_constant293_0_0" [id=2345, type=get_attr];
+"2346 linear_108" [id=2346, type=linear];
+"2347 gelu_17" [id=2347, type=gelu];
+"2348 dropout_70" [id=2348, type=dropout];
+"2349 linear_109_updated_constant0" [id=2349, type=get_attr];
+"2350 dropout_70_0_0_nncf_smooth_quant_0" [id=2350, type=call_module];
+"2351 quantize_per_tensor_default_110" [id=2351, type=quantize_per_tensor];
+"2352 dequantize_per_tensor_default_110" [id=2352, type=dequantize_per_tensor];
+"2353 linear_109_scale_0" [id=2353, type=get_attr];
+"2354 linear_109_zero_point_0" [id=2354, type=get_attr];
+"2355 quantize_per_channel_default_110" [id=2355, type=quantize_per_channel];
+"2356 dequantize_per_channel_default_110" [id=2356, type=dequantize_per_channel];
+"2357 _param_constant295_0_0" [id=2357, type=get_attr];
+"2358 linear_109" [id=2358, type=linear];
+"2359 dropout_71" [id=2359, type=dropout];
+"2360 _param_constant296" [id=2360, type=get_attr];
+"2361 _param_constant297" [id=2361, type=get_attr];
+"2362 layer_norm_38" [id=2362, type=layer_norm];
+"2363 add_62" [id=2363, type=add];
+"2364 _tensor_constant117" [id=2364, type=get_attr];
+"2365 linear_110_updated_constant0" [id=2365, type=get_attr];
+"2366 _tensor_constant117_0_0_nncf_smooth_quant_0" [id=2366, type=call_module];
+"2367 linear_110_scale_0" [id=2367, type=get_attr];
+"2368 linear_110_zero_point_0" [id=2368, type=get_attr];
+"2369 quantize_per_channel_default_111" [id=2369, type=quantize_per_channel];
+"2370 dequantize_per_channel_default_111" [id=2370, type=dequantize_per_channel];
+"2371 _param_constant299_0_0" [id=2371, type=get_attr];
+"2372 linear_110" [id=2372, type=linear];
+"2373 relu__18" [id=2373, type=relu_];
+"2374 linear_111_updated_constant0" [id=2374, type=get_attr];
+"2375 relu__18_0_0_nncf_smooth_quant_0" [id=2375, type=call_module];
+"2376 linear_111_scale_0" [id=2376, type=get_attr];
+"2377 linear_111_zero_point_0" [id=2377, type=get_attr];
+"2378 quantize_per_channel_default_112" [id=2378, type=quantize_per_channel];
+"2379 dequantize_per_channel_default_112" [id=2379, type=dequantize_per_channel];
+"2380 linear_111" [id=2380, type=linear];
+"2381 view_99" [id=2381, type=view];
+"2382 _tensor_constant118" [id=2382, type=get_attr];
+"2383 index_18" [id=2383, type=index];
+"2384 view_100" [id=2384, type=view];
+"2385 permute_82" [id=2385, type=permute];
+"2386 contiguous_34" [id=2386, type=contiguous];
+"2387 unsqueeze_54" [id=2387, type=unsqueeze];
+"2388 sigmoid_18" [id=2388, type=sigmoid];
+"2389 mul_36" [id=2389, type=mul];
+"2390 pad_20" [id=2390, type=pad];
+"2391 view_101" [id=2391, type=view];
+"2392 permute_83" [id=2392, type=permute];
+"2393 reshape_81" [id=2393, type=reshape];
+"2394 linear_112_updated_constant0" [id=2394, type=get_attr];
+"2395 reshape_81_0_0_nncf_smooth_quant_0" [id=2395, type=call_module];
+"2396 quantize_per_tensor_default_111" [id=2396, type=quantize_per_tensor];
+"2397 dequantize_per_tensor_default_111" [id=2397, type=dequantize_per_tensor];
+"2398 linear_112_scale_0" [id=2398, type=get_attr];
+"2399 linear_112_zero_point_0" [id=2399, type=get_attr];
+"2400 quantize_per_channel_default_113" [id=2400, type=quantize_per_channel];
+"2401 dequantize_per_channel_default_113" [id=2401, type=dequantize_per_channel];
+"2402 _param_constant301_0_0" [id=2402, type=get_attr];
+"2403 linear_112" [id=2403, type=linear];
+"2404 reshape_82" [id=2404, type=reshape];
+"2405 permute_84" [id=2405, type=permute];
+"2406 select_54" [id=2406, type=select];
+"2407 select_55" [id=2407, type=select];
+"2408 select_56" [id=2408, type=select];
+"2409 linalg_vector_norm_36" [id=2409, type=linalg_vector_norm];
+"2410 clamp_min_36" [id=2410, type=clamp_min];
+"2411 expand_as_36" [id=2411, type=expand_as];
+"2412 div_36" [id=2412, type=div];
+"2413 quantize_per_tensor_default_112" [id=2413, type=quantize_per_tensor];
+"2414 dequantize_per_tensor_default_112" [id=2414, type=dequantize_per_tensor];
+"2415 linalg_vector_norm_37" [id=2415, type=linalg_vector_norm];
+"2416 clamp_min_37" [id=2416, type=clamp_min];
+"2417 expand_as_37" [id=2417, type=expand_as];
+"2418 div_37" [id=2418, type=div];
+"2419 quantize_per_tensor_default_113" [id=2419, type=quantize_per_tensor];
+"2420 dequantize_per_tensor_default_113" [id=2420, type=dequantize_per_tensor];
+"2421 transpose_36" [id=2421, type=transpose];
+"2422 matmul_36" [id=2422, type=matmul];
+"2423 _param_constant303" [id=2423, type=get_attr];
+"2424 clamp_18" [id=2424, type=clamp];
+"2425 exp_18" [id=2425, type=exp];
+"2426 mul_37" [id=2426, type=mul];
+"2427 add_63" [id=2427, type=add];
+"2428 softmax_18" [id=2428, type=softmax];
+"2429 dropout_72" [id=2429, type=dropout];
+"2430 matmul_37" [id=2430, type=matmul];
+"2431 transpose_37" [id=2431, type=transpose];
+"2432 reshape_83" [id=2432, type=reshape];
+"2433 linear_113_updated_constant0" [id=2433, type=get_attr];
+"2434 reshape_83_0_0_nncf_smooth_quant_0" [id=2434, type=call_module];
+"2435 quantize_per_tensor_default_114" [id=2435, type=quantize_per_tensor];
+"2436 dequantize_per_tensor_default_114" [id=2436, type=dequantize_per_tensor];
+"2437 linear_113_scale_0" [id=2437, type=get_attr];
+"2438 linear_113_zero_point_0" [id=2438, type=get_attr];
+"2439 quantize_per_channel_default_114" [id=2439, type=quantize_per_channel];
+"2440 dequantize_per_channel_default_114" [id=2440, type=dequantize_per_channel];
+"2441 _param_constant305_0_0" [id=2441, type=get_attr];
+"2442 linear_113" [id=2442, type=linear];
+"2443 dropout_73" [id=2443, type=dropout];
+"2444 view_102" [id=2444, type=view];
+"2445 permute_85" [id=2445, type=permute];
+"2446 reshape_84" [id=2446, type=reshape];
+"2447 slice_274" [id=2447, type=slice];
+"2448 slice_275" [id=2448, type=slice];
+"2449 slice_276" [id=2449, type=slice];
+"2450 slice_277" [id=2450, type=slice];
+"2451 contiguous_35" [id=2451, type=contiguous];
+"2452 _param_constant306" [id=2452, type=get_attr];
+"2453 _param_constant307" [id=2453, type=get_attr];
+"2454 layer_norm_39" [id=2454, type=layer_norm];
+"2455 add_64" [id=2455, type=add];
+"2456 linear_114_updated_constant0" [id=2456, type=get_attr];
+"2457 add_64_0_0_nncf_smooth_quant_0" [id=2457, type=call_module];
+"2458 quantize_per_tensor_default_115" [id=2458, type=quantize_per_tensor];
+"2459 dequantize_per_tensor_default_115" [id=2459, type=dequantize_per_tensor];
+"2460 linear_114_scale_0" [id=2460, type=get_attr];
+"2461 linear_114_zero_point_0" [id=2461, type=get_attr];
+"2462 quantize_per_channel_default_115" [id=2462, type=quantize_per_channel];
+"2463 dequantize_per_channel_default_115" [id=2463, type=dequantize_per_channel];
+"2464 _param_constant309_0_0" [id=2464, type=get_attr];
+"2465 linear_114" [id=2465, type=linear];
+"2466 gelu_18" [id=2466, type=gelu];
+"2467 dropout_74" [id=2467, type=dropout];
+"2468 linear_115_updated_constant0" [id=2468, type=get_attr];
+"2469 dropout_74_0_0_nncf_smooth_quant_0" [id=2469, type=call_module];
+"2470 quantize_per_tensor_default_116" [id=2470, type=quantize_per_tensor];
+"2471 dequantize_per_tensor_default_116" [id=2471, type=dequantize_per_tensor];
+"2472 linear_115_scale_0" [id=2472, type=get_attr];
+"2473 linear_115_zero_point_0" [id=2473, type=get_attr];
+"2474 quantize_per_channel_default_116" [id=2474, type=quantize_per_channel];
+"2475 dequantize_per_channel_default_116" [id=2475, type=dequantize_per_channel];
+"2476 _param_constant311_0_0" [id=2476, type=get_attr];
+"2477 linear_115" [id=2477, type=linear];
+"2478 dropout_75" [id=2478, type=dropout];
+"2479 _param_constant312" [id=2479, type=get_attr];
+"2480 _param_constant313" [id=2480, type=get_attr];
+"2481 layer_norm_40" [id=2481, type=layer_norm];
+"2482 add_65" [id=2482, type=add];
+"2483 _tensor_constant119" [id=2483, type=get_attr];
+"2484 linear_116_updated_constant0" [id=2484, type=get_attr];
+"2485 _tensor_constant119_0_0_nncf_smooth_quant_0" [id=2485, type=call_module];
+"2486 linear_116_scale_0" [id=2486, type=get_attr];
+"2487 linear_116_zero_point_0" [id=2487, type=get_attr];
+"2488 quantize_per_channel_default_117" [id=2488, type=quantize_per_channel];
+"2489 dequantize_per_channel_default_117" [id=2489, type=dequantize_per_channel];
+"2490 _param_constant315_0_0" [id=2490, type=get_attr];
+"2491 linear_116" [id=2491, type=linear];
+"2492 relu__19" [id=2492, type=relu_];
+"2493 linear_117_updated_constant0" [id=2493, type=get_attr];
+"2494 relu__19_0_0_nncf_smooth_quant_0" [id=2494, type=call_module];
+"2495 linear_117_scale_0" [id=2495, type=get_attr];
+"2496 linear_117_zero_point_0" [id=2496, type=get_attr];
+"2497 quantize_per_channel_default_118" [id=2497, type=quantize_per_channel];
+"2498 dequantize_per_channel_default_118" [id=2498, type=dequantize_per_channel];
+"2499 linear_117" [id=2499, type=linear];
+"2500 view_103" [id=2500, type=view];
+"2501 _tensor_constant120" [id=2501, type=get_attr];
+"2502 index_19" [id=2502, type=index];
+"2503 view_104" [id=2503, type=view];
+"2504 permute_86" [id=2504, type=permute];
+"2505 contiguous_36" [id=2505, type=contiguous];
+"2506 unsqueeze_55" [id=2506, type=unsqueeze];
+"2507 sigmoid_19" [id=2507, type=sigmoid];
+"2508 mul_38" [id=2508, type=mul];
+"2509 pad_21" [id=2509, type=pad];
+"2510 roll_18" [id=2510, type=roll];
+"2511 view_105" [id=2511, type=view];
+"2512 permute_87" [id=2512, type=permute];
+"2513 reshape_85" [id=2513, type=reshape];
+"2514 linear_118_updated_constant0" [id=2514, type=get_attr];
+"2515 reshape_85_0_0_nncf_smooth_quant_0" [id=2515, type=call_module];
+"2516 quantize_per_tensor_default_117" [id=2516, type=quantize_per_tensor];
+"2517 dequantize_per_tensor_default_117" [id=2517, type=dequantize_per_tensor];
+"2518 linear_118_scale_0" [id=2518, type=get_attr];
+"2519 linear_118_zero_point_0" [id=2519, type=get_attr];
+"2520 quantize_per_channel_default_119" [id=2520, type=quantize_per_channel];
+"2521 dequantize_per_channel_default_119" [id=2521, type=dequantize_per_channel];
+"2522 _param_constant317_0_0" [id=2522, type=get_attr];
+"2523 linear_118" [id=2523, type=linear];
+"2524 reshape_86" [id=2524, type=reshape];
+"2525 permute_88" [id=2525, type=permute];
+"2526 select_57" [id=2526, type=select];
+"2527 select_58" [id=2527, type=select];
+"2528 select_59" [id=2528, type=select];
+"2529 linalg_vector_norm_38" [id=2529, type=linalg_vector_norm];
+"2530 clamp_min_38" [id=2530, type=clamp_min];
+"2531 expand_as_38" [id=2531, type=expand_as];
+"2532 div_38" [id=2532, type=div];
+"2533 quantize_per_tensor_default_118" [id=2533, type=quantize_per_tensor];
+"2534 dequantize_per_tensor_default_118" [id=2534, type=dequantize_per_tensor];
+"2535 linalg_vector_norm_39" [id=2535, type=linalg_vector_norm];
+"2536 clamp_min_39" [id=2536, type=clamp_min];
+"2537 expand_as_39" [id=2537, type=expand_as];
+"2538 div_39" [id=2538, type=div];
+"2539 quantize_per_tensor_default_119" [id=2539, type=quantize_per_tensor];
+"2540 dequantize_per_tensor_default_119" [id=2540, type=dequantize_per_tensor];
+"2541 transpose_38" [id=2541, type=transpose];
+"2542 matmul_38" [id=2542, type=matmul];
+"2543 _param_constant319" [id=2543, type=get_attr];
+"2544 clamp_19" [id=2544, type=clamp];
+"2545 exp_19" [id=2545, type=exp];
+"2546 mul_39" [id=2546, type=mul];
+"2547 add_66" [id=2547, type=add];
+"2548 new_zeros_9" [id=2548, type=new_zeros];
+"2549 view_106" [id=2549, type=view];
+"2550 permute_89" [id=2550, type=permute];
+"2551 reshape_87" [id=2551, type=reshape];
+"2552 unsqueeze_56" [id=2552, type=unsqueeze];
+"2553 unsqueeze_57" [id=2553, type=unsqueeze];
+"2554 sub_9" [id=2554, type=sub];
+"2555 ne_9" [id=2555, type=ne];
+"2556 masked_fill_18" [id=2556, type=masked_fill];
+"2557 eq_9" [id=2557, type=eq];
+"2558 masked_fill_19" [id=2558, type=masked_fill];
+"2559 view_107" [id=2559, type=view];
+"2560 unsqueeze_58" [id=2560, type=unsqueeze];
+"2561 unsqueeze_59" [id=2561, type=unsqueeze];
+"2562 add_67" [id=2562, type=add];
+"2563 view_108" [id=2563, type=view];
+"2564 softmax_19" [id=2564, type=softmax];
+"2565 dropout_76" [id=2565, type=dropout];
+"2566 matmul_39" [id=2566, type=matmul];
+"2567 transpose_39" [id=2567, type=transpose];
+"2568 reshape_88" [id=2568, type=reshape];
+"2569 linear_119_updated_constant0" [id=2569, type=get_attr];
+"2570 reshape_88_0_0_nncf_smooth_quant_0" [id=2570, type=call_module];
+"2571 quantize_per_tensor_default_120" [id=2571, type=quantize_per_tensor];
+"2572 dequantize_per_tensor_default_120" [id=2572, type=dequantize_per_tensor];
+"2573 linear_119_scale_0" [id=2573, type=get_attr];
+"2574 linear_119_zero_point_0" [id=2574, type=get_attr];
+"2575 quantize_per_channel_default_120" [id=2575, type=quantize_per_channel];
+"2576 dequantize_per_channel_default_120" [id=2576, type=dequantize_per_channel];
+"2577 _param_constant321_0_0" [id=2577, type=get_attr];
+"2578 linear_119" [id=2578, type=linear];
+"2579 dropout_77" [id=2579, type=dropout];
+"2580 view_109" [id=2580, type=view];
+"2581 permute_90" [id=2581, type=permute];
+"2582 reshape_89" [id=2582, type=reshape];
+"2583 roll_19" [id=2583, type=roll];
+"2584 slice_297" [id=2584, type=slice];
+"2585 slice_298" [id=2585, type=slice];
+"2586 slice_299" [id=2586, type=slice];
+"2587 slice_300" [id=2587, type=slice];
+"2588 contiguous_37" [id=2588, type=contiguous];
+"2589 _param_constant322" [id=2589, type=get_attr];
+"2590 _param_constant323" [id=2590, type=get_attr];
+"2591 layer_norm_41" [id=2591, type=layer_norm];
+"2592 add_68" [id=2592, type=add];
+"2593 linear_120_updated_constant0" [id=2593, type=get_attr];
+"2594 add_68_0_0_nncf_smooth_quant_0" [id=2594, type=call_module];
+"2595 quantize_per_tensor_default_121" [id=2595, type=quantize_per_tensor];
+"2596 dequantize_per_tensor_default_121" [id=2596, type=dequantize_per_tensor];
+"2597 linear_120_scale_0" [id=2597, type=get_attr];
+"2598 linear_120_zero_point_0" [id=2598, type=get_attr];
+"2599 quantize_per_channel_default_121" [id=2599, type=quantize_per_channel];
+"2600 dequantize_per_channel_default_121" [id=2600, type=dequantize_per_channel];
+"2601 _param_constant325_0_0" [id=2601, type=get_attr];
+"2602 linear_120" [id=2602, type=linear];
+"2603 gelu_19" [id=2603, type=gelu];
+"2604 dropout_78" [id=2604, type=dropout];
+"2605 linear_121_updated_constant0" [id=2605, type=get_attr];
+"2606 dropout_78_0_0_nncf_smooth_quant_0" [id=2606, type=call_module];
+"2607 quantize_per_tensor_default_122" [id=2607, type=quantize_per_tensor];
+"2608 dequantize_per_tensor_default_122" [id=2608, type=dequantize_per_tensor];
+"2609 linear_121_scale_0" [id=2609, type=get_attr];
+"2610 linear_121_zero_point_0" [id=2610, type=get_attr];
+"2611 quantize_per_channel_default_122" [id=2611, type=quantize_per_channel];
+"2612 dequantize_per_channel_default_122" [id=2612, type=dequantize_per_channel];
+"2613 _param_constant327_0_0" [id=2613, type=get_attr];
+"2614 linear_121" [id=2614, type=linear];
+"2615 dropout_79" [id=2615, type=dropout];
+"2616 _param_constant328" [id=2616, type=get_attr];
+"2617 _param_constant329" [id=2617, type=get_attr];
+"2618 layer_norm_42" [id=2618, type=layer_norm];
+"2619 add_69" [id=2619, type=add];
+"2620 _tensor_constant130" [id=2620, type=get_attr];
+"2621 linear_122_updated_constant0" [id=2621, type=get_attr];
+"2622 _tensor_constant130_0_0_nncf_smooth_quant_0" [id=2622, type=call_module];
+"2623 linear_122_scale_0" [id=2623, type=get_attr];
+"2624 linear_122_zero_point_0" [id=2624, type=get_attr];
+"2625 quantize_per_channel_default_123" [id=2625, type=quantize_per_channel];
+"2626 dequantize_per_channel_default_123" [id=2626, type=dequantize_per_channel];
+"2627 _param_constant331_0_0" [id=2627, type=get_attr];
+"2628 linear_122" [id=2628, type=linear];
+"2629 relu__20" [id=2629, type=relu_];
+"2630 linear_123_updated_constant0" [id=2630, type=get_attr];
+"2631 relu__20_0_0_nncf_smooth_quant_0" [id=2631, type=call_module];
+"2632 linear_123_scale_0" [id=2632, type=get_attr];
+"2633 linear_123_zero_point_0" [id=2633, type=get_attr];
+"2634 quantize_per_channel_default_124" [id=2634, type=quantize_per_channel];
+"2635 dequantize_per_channel_default_124" [id=2635, type=dequantize_per_channel];
+"2636 linear_123" [id=2636, type=linear];
+"2637 view_110" [id=2637, type=view];
+"2638 _tensor_constant131" [id=2638, type=get_attr];
+"2639 index_20" [id=2639, type=index];
+"2640 view_111" [id=2640, type=view];
+"2641 permute_91" [id=2641, type=permute];
+"2642 contiguous_38" [id=2642, type=contiguous];
+"2643 unsqueeze_60" [id=2643, type=unsqueeze];
+"2644 sigmoid_20" [id=2644, type=sigmoid];
+"2645 mul_40" [id=2645, type=mul];
+"2646 pad_22" [id=2646, type=pad];
+"2647 view_112" [id=2647, type=view];
+"2648 permute_92" [id=2648, type=permute];
+"2649 reshape_90" [id=2649, type=reshape];
+"2650 linear_124_updated_constant0" [id=2650, type=get_attr];
+"2651 reshape_90_0_0_nncf_smooth_quant_0" [id=2651, type=call_module];
+"2652 quantize_per_tensor_default_123" [id=2652, type=quantize_per_tensor];
+"2653 dequantize_per_tensor_default_123" [id=2653, type=dequantize_per_tensor];
+"2654 linear_124_scale_0" [id=2654, type=get_attr];
+"2655 linear_124_zero_point_0" [id=2655, type=get_attr];
+"2656 quantize_per_channel_default_125" [id=2656, type=quantize_per_channel];
+"2657 dequantize_per_channel_default_125" [id=2657, type=dequantize_per_channel];
+"2658 _param_constant333_0_0" [id=2658, type=get_attr];
+"2659 linear_124" [id=2659, type=linear];
+"2660 reshape_91" [id=2660, type=reshape];
+"2661 permute_93" [id=2661, type=permute];
+"2662 select_60" [id=2662, type=select];
+"2663 select_61" [id=2663, type=select];
+"2664 select_62" [id=2664, type=select];
+"2665 linalg_vector_norm_40" [id=2665, type=linalg_vector_norm];
+"2666 clamp_min_40" [id=2666, type=clamp_min];
+"2667 expand_as_40" [id=2667, type=expand_as];
+"2668 div_40" [id=2668, type=div];
+"2669 quantize_per_tensor_default_124" [id=2669, type=quantize_per_tensor];
+"2670 dequantize_per_tensor_default_124" [id=2670, type=dequantize_per_tensor];
+"2671 linalg_vector_norm_41" [id=2671, type=linalg_vector_norm];
+"2672 clamp_min_41" [id=2672, type=clamp_min];
+"2673 expand_as_41" [id=2673, type=expand_as];
+"2674 div_41" [id=2674, type=div];
+"2675 quantize_per_tensor_default_125" [id=2675, type=quantize_per_tensor];
+"2676 dequantize_per_tensor_default_125" [id=2676, type=dequantize_per_tensor];
+"2677 transpose_40" [id=2677, type=transpose];
+"2678 matmul_40" [id=2678, type=matmul];
+"2679 _param_constant335" [id=2679, type=get_attr];
+"2680 clamp_20" [id=2680, type=clamp];
+"2681 exp_20" [id=2681, type=exp];
+"2682 mul_41" [id=2682, type=mul];
+"2683 add_70" [id=2683, type=add];
+"2684 softmax_20" [id=2684, type=softmax];
+"2685 dropout_80" [id=2685, type=dropout];
+"2686 matmul_41" [id=2686, type=matmul];
+"2687 transpose_41" [id=2687, type=transpose];
+"2688 reshape_92" [id=2688, type=reshape];
+"2689 linear_125_updated_constant0" [id=2689, type=get_attr];
+"2690 reshape_92_0_0_nncf_smooth_quant_0" [id=2690, type=call_module];
+"2691 quantize_per_tensor_default_126" [id=2691, type=quantize_per_tensor];
+"2692 dequantize_per_tensor_default_126" [id=2692, type=dequantize_per_tensor];
+"2693 linear_125_scale_0" [id=2693, type=get_attr];
+"2694 linear_125_zero_point_0" [id=2694, type=get_attr];
+"2695 quantize_per_channel_default_126" [id=2695, type=quantize_per_channel];
+"2696 dequantize_per_channel_default_126" [id=2696, type=dequantize_per_channel];
+"2697 _param_constant337_0_0" [id=2697, type=get_attr];
+"2698 linear_125" [id=2698, type=linear];
+"2699 dropout_81" [id=2699, type=dropout];
+"2700 view_113" [id=2700, type=view];
+"2701 permute_94" [id=2701, type=permute];
+"2702 reshape_93" [id=2702, type=reshape];
+"2703 slice_302" [id=2703, type=slice];
+"2704 slice_303" [id=2704, type=slice];
+"2705 slice_304" [id=2705, type=slice];
+"2706 slice_305" [id=2706, type=slice];
+"2707 contiguous_39" [id=2707, type=contiguous];
+"2708 _param_constant338" [id=2708, type=get_attr];
+"2709 _param_constant339" [id=2709, type=get_attr];
+"2710 layer_norm_43" [id=2710, type=layer_norm];
+"2711 add_71" [id=2711, type=add];
+"2712 linear_126_updated_constant0" [id=2712, type=get_attr];
+"2713 add_71_0_0_nncf_smooth_quant_0" [id=2713, type=call_module];
+"2714 quantize_per_tensor_default_127" [id=2714, type=quantize_per_tensor];
+"2715 dequantize_per_tensor_default_127" [id=2715, type=dequantize_per_tensor];
+"2716 linear_126_scale_0" [id=2716, type=get_attr];
+"2717 linear_126_zero_point_0" [id=2717, type=get_attr];
+"2718 quantize_per_channel_default_127" [id=2718, type=quantize_per_channel];
+"2719 dequantize_per_channel_default_127" [id=2719, type=dequantize_per_channel];
+"2720 _param_constant341_0_0" [id=2720, type=get_attr];
+"2721 linear_126" [id=2721, type=linear];
+"2722 gelu_20" [id=2722, type=gelu];
+"2723 dropout_82" [id=2723, type=dropout];
+"2724 linear_127_updated_constant0" [id=2724, type=get_attr];
+"2725 dropout_82_0_0_nncf_smooth_quant_0" [id=2725, type=call_module];
+"2726 quantize_per_tensor_default_128" [id=2726, type=quantize_per_tensor];
+"2727 dequantize_per_tensor_default_128" [id=2727, type=dequantize_per_tensor];
+"2728 linear_127_scale_0" [id=2728, type=get_attr];
+"2729 linear_127_zero_point_0" [id=2729, type=get_attr];
+"2730 quantize_per_channel_default_128" [id=2730, type=quantize_per_channel];
+"2731 dequantize_per_channel_default_128" [id=2731, type=dequantize_per_channel];
+"2732 _param_constant343_0_0" [id=2732, type=get_attr];
+"2733 linear_127" [id=2733, type=linear];
+"2734 dropout_83" [id=2734, type=dropout];
+"2735 _param_constant344" [id=2735, type=get_attr];
+"2736 _param_constant345" [id=2736, type=get_attr];
+"2737 layer_norm_44" [id=2737, type=layer_norm];
+"2738 add_72" [id=2738, type=add];
+"2739 _tensor_constant132" [id=2739, type=get_attr];
+"2740 linear_128_updated_constant0" [id=2740, type=get_attr];
+"2741 _tensor_constant132_0_0_nncf_smooth_quant_0" [id=2741, type=call_module];
+"2742 linear_128_scale_0" [id=2742, type=get_attr];
+"2743 linear_128_zero_point_0" [id=2743, type=get_attr];
+"2744 quantize_per_channel_default_129" [id=2744, type=quantize_per_channel];
+"2745 dequantize_per_channel_default_129" [id=2745, type=dequantize_per_channel];
+"2746 _param_constant347_0_0" [id=2746, type=get_attr];
+"2747 linear_128" [id=2747, type=linear];
+"2748 relu__21" [id=2748, type=relu_];
+"2749 linear_129_updated_constant0" [id=2749, type=get_attr];
+"2750 relu__21_0_0_nncf_smooth_quant_0" [id=2750, type=call_module];
+"2751 linear_129_scale_0" [id=2751, type=get_attr];
+"2752 linear_129_zero_point_0" [id=2752, type=get_attr];
+"2753 quantize_per_channel_default_130" [id=2753, type=quantize_per_channel];
+"2754 dequantize_per_channel_default_130" [id=2754, type=dequantize_per_channel];
+"2755 linear_129" [id=2755, type=linear];
+"2756 view_114" [id=2756, type=view];
+"2757 _tensor_constant133" [id=2757, type=get_attr];
+"2758 index_21" [id=2758, type=index];
+"2759 view_115" [id=2759, type=view];
+"2760 permute_95" [id=2760, type=permute];
+"2761 contiguous_40" [id=2761, type=contiguous];
+"2762 unsqueeze_61" [id=2762, type=unsqueeze];
+"2763 sigmoid_21" [id=2763, type=sigmoid];
+"2764 mul_42" [id=2764, type=mul];
+"2765 pad_23" [id=2765, type=pad];
+"2766 roll_20" [id=2766, type=roll];
+"2767 view_116" [id=2767, type=view];
+"2768 permute_96" [id=2768, type=permute];
+"2769 reshape_94" [id=2769, type=reshape];
+"2770 linear_130_updated_constant0" [id=2770, type=get_attr];
+"2771 reshape_94_0_0_nncf_smooth_quant_0" [id=2771, type=call_module];
+"2772 quantize_per_tensor_default_129" [id=2772, type=quantize_per_tensor];
+"2773 dequantize_per_tensor_default_129" [id=2773, type=dequantize_per_tensor];
+"2774 linear_130_scale_0" [id=2774, type=get_attr];
+"2775 linear_130_zero_point_0" [id=2775, type=get_attr];
+"2776 quantize_per_channel_default_131" [id=2776, type=quantize_per_channel];
+"2777 dequantize_per_channel_default_131" [id=2777, type=dequantize_per_channel];
+"2778 _param_constant349_0_0" [id=2778, type=get_attr];
+"2779 linear_130" [id=2779, type=linear];
+"2780 reshape_95" [id=2780, type=reshape];
+"2781 permute_97" [id=2781, type=permute];
+"2782 select_63" [id=2782, type=select];
+"2783 select_64" [id=2783, type=select];
+"2784 select_65" [id=2784, type=select];
+"2785 linalg_vector_norm_42" [id=2785, type=linalg_vector_norm];
+"2786 clamp_min_42" [id=2786, type=clamp_min];
+"2787 expand_as_42" [id=2787, type=expand_as];
+"2788 div_42" [id=2788, type=div];
+"2789 quantize_per_tensor_default_130" [id=2789, type=quantize_per_tensor];
+"2790 dequantize_per_tensor_default_130" [id=2790, type=dequantize_per_tensor];
+"2791 linalg_vector_norm_43" [id=2791, type=linalg_vector_norm];
+"2792 clamp_min_43" [id=2792, type=clamp_min];
+"2793 expand_as_43" [id=2793, type=expand_as];
+"2794 div_43" [id=2794, type=div];
+"2795 quantize_per_tensor_default_131" [id=2795, type=quantize_per_tensor];
+"2796 dequantize_per_tensor_default_131" [id=2796, type=dequantize_per_tensor];
+"2797 transpose_42" [id=2797, type=transpose];
+"2798 matmul_42" [id=2798, type=matmul];
+"2799 _param_constant351" [id=2799, type=get_attr];
+"2800 clamp_21" [id=2800, type=clamp];
+"2801 exp_21" [id=2801, type=exp];
+"2802 mul_43" [id=2802, type=mul];
+"2803 add_73" [id=2803, type=add];
+"2804 new_zeros_10" [id=2804, type=new_zeros];
+"2805 view_117" [id=2805, type=view];
+"2806 permute_98" [id=2806, type=permute];
+"2807 reshape_96" [id=2807, type=reshape];
+"2808 unsqueeze_62" [id=2808, type=unsqueeze];
+"2809 unsqueeze_63" [id=2809, type=unsqueeze];
+"2810 sub_10" [id=2810, type=sub];
+"2811 ne_10" [id=2811, type=ne];
+"2812 masked_fill_20" [id=2812, type=masked_fill];
+"2813 eq_10" [id=2813, type=eq];
+"2814 masked_fill_21" [id=2814, type=masked_fill];
+"2815 view_118" [id=2815, type=view];
+"2816 unsqueeze_64" [id=2816, type=unsqueeze];
+"2817 unsqueeze_65" [id=2817, type=unsqueeze];
+"2818 add_74" [id=2818, type=add];
+"2819 view_119" [id=2819, type=view];
+"2820 softmax_21" [id=2820, type=softmax];
+"2821 dropout_84" [id=2821, type=dropout];
+"2822 matmul_43" [id=2822, type=matmul];
+"2823 transpose_43" [id=2823, type=transpose];
+"2824 reshape_97" [id=2824, type=reshape];
+"2825 linear_131_updated_constant0" [id=2825, type=get_attr];
+"2826 reshape_97_0_0_nncf_smooth_quant_0" [id=2826, type=call_module];
+"2827 quantize_per_tensor_default_132" [id=2827, type=quantize_per_tensor];
+"2828 dequantize_per_tensor_default_132" [id=2828, type=dequantize_per_tensor];
+"2829 linear_131_scale_0" [id=2829, type=get_attr];
+"2830 linear_131_zero_point_0" [id=2830, type=get_attr];
+"2831 quantize_per_channel_default_132" [id=2831, type=quantize_per_channel];
+"2832 dequantize_per_channel_default_132" [id=2832, type=dequantize_per_channel];
+"2833 _param_constant353_0_0" [id=2833, type=get_attr];
+"2834 linear_131" [id=2834, type=linear];
+"2835 dropout_85" [id=2835, type=dropout];
+"2836 view_120" [id=2836, type=view];
+"2837 permute_99" [id=2837, type=permute];
+"2838 reshape_98" [id=2838, type=reshape];
+"2839 roll_21" [id=2839, type=roll];
+"2840 slice_325" [id=2840, type=slice];
+"2841 slice_326" [id=2841, type=slice];
+"2842 slice_327" [id=2842, type=slice];
+"2843 slice_328" [id=2843, type=slice];
+"2844 contiguous_41" [id=2844, type=contiguous];
+"2845 _param_constant354" [id=2845, type=get_attr];
+"2846 _param_constant355" [id=2846, type=get_attr];
+"2847 layer_norm_45" [id=2847, type=layer_norm];
+"2848 add_75" [id=2848, type=add];
+"2849 linear_132_updated_constant0" [id=2849, type=get_attr];
+"2850 add_75_0_0_nncf_smooth_quant_0" [id=2850, type=call_module];
+"2851 quantize_per_tensor_default_133" [id=2851, type=quantize_per_tensor];
+"2852 dequantize_per_tensor_default_133" [id=2852, type=dequantize_per_tensor];
+"2853 linear_132_scale_0" [id=2853, type=get_attr];
+"2854 linear_132_zero_point_0" [id=2854, type=get_attr];
+"2855 quantize_per_channel_default_133" [id=2855, type=quantize_per_channel];
+"2856 dequantize_per_channel_default_133" [id=2856, type=dequantize_per_channel];
+"2857 _param_constant357_0_0" [id=2857, type=get_attr];
+"2858 linear_132" [id=2858, type=linear];
+"2859 gelu_21" [id=2859, type=gelu];
+"2860 dropout_86" [id=2860, type=dropout];
+"2861 linear_133_updated_constant0" [id=2861, type=get_attr];
+"2862 dropout_86_0_0_nncf_smooth_quant_0" [id=2862, type=call_module];
+"2863 quantize_per_tensor_default_134" [id=2863, type=quantize_per_tensor];
+"2864 dequantize_per_tensor_default_134" [id=2864, type=dequantize_per_tensor];
+"2865 linear_133_scale_0" [id=2865, type=get_attr];
+"2866 linear_133_zero_point_0" [id=2866, type=get_attr];
+"2867 quantize_per_channel_default_134" [id=2867, type=quantize_per_channel];
+"2868 dequantize_per_channel_default_134" [id=2868, type=dequantize_per_channel];
+"2869 _param_constant359_0_0" [id=2869, type=get_attr];
+"2870 linear_133" [id=2870, type=linear];
+"2871 dropout_87" [id=2871, type=dropout];
+"2872 _param_constant360" [id=2872, type=get_attr];
+"2873 _param_constant361" [id=2873, type=get_attr];
+"2874 layer_norm_46" [id=2874, type=layer_norm];
+"2875 add_76" [id=2875, type=add];
+"2876 pad_24" [id=2876, type=pad];
+"2877 slice_329" [id=2877, type=slice];
+"2878 slice_330" [id=2878, type=slice];
+"2879 slice_331" [id=2879, type=slice];
+"2880 slice_332" [id=2880, type=slice];
+"2881 slice_333" [id=2881, type=slice];
+"2882 slice_334" [id=2882, type=slice];
+"2883 slice_335" [id=2883, type=slice];
+"2884 slice_336" [id=2884, type=slice];
+"2885 slice_337" [id=2885, type=slice];
+"2886 slice_338" [id=2886, type=slice];
+"2887 slice_339" [id=2887, type=slice];
+"2888 slice_340" [id=2888, type=slice];
+"2889 cat_2" [id=2889, type=cat];
+"2890 linear_134_updated_constant0" [id=2890, type=get_attr];
+"2891 cat_2_0_0_nncf_smooth_quant_0" [id=2891, type=call_module];
+"2892 quantize_per_tensor_default_135" [id=2892, type=quantize_per_tensor];
+"2893 dequantize_per_tensor_default_135" [id=2893, type=dequantize_per_tensor];
+"2894 linear_134_scale_0" [id=2894, type=get_attr];
+"2895 linear_134_zero_point_0" [id=2895, type=get_attr];
+"2896 quantize_per_channel_default_135" [id=2896, type=quantize_per_channel];
+"2897 dequantize_per_channel_default_135" [id=2897, type=dequantize_per_channel];
+"2898 linear_134" [id=2898, type=linear];
+"2899 _param_constant363" [id=2899, type=get_attr];
+"2900 _param_constant364" [id=2900, type=get_attr];
+"2901 layer_norm_47" [id=2901, type=layer_norm];
+"2902 _tensor_constant143" [id=2902, type=get_attr];
+"2903 linear_135_updated_constant0" [id=2903, type=get_attr];
+"2904 _tensor_constant143_0_0_nncf_smooth_quant_0" [id=2904, type=call_module];
+"2905 linear_135_scale_0" [id=2905, type=get_attr];
+"2906 linear_135_zero_point_0" [id=2906, type=get_attr];
+"2907 quantize_per_channel_default_136" [id=2907, type=quantize_per_channel];
+"2908 dequantize_per_channel_default_136" [id=2908, type=dequantize_per_channel];
+"2909 _param_constant366_0_0" [id=2909, type=get_attr];
+"2910 linear_135" [id=2910, type=linear];
+"2911 relu__22" [id=2911, type=relu_];
+"2912 linear_136_updated_constant0" [id=2912, type=get_attr];
+"2913 relu__22_0_0_nncf_smooth_quant_0" [id=2913, type=call_module];
+"2914 linear_136_scale_0" [id=2914, type=get_attr];
+"2915 linear_136_zero_point_0" [id=2915, type=get_attr];
+"2916 quantize_per_channel_default_137" [id=2916, type=quantize_per_channel];
+"2917 dequantize_per_channel_default_137" [id=2917, type=dequantize_per_channel];
+"2918 linear_136" [id=2918, type=linear];
+"2919 view_121" [id=2919, type=view];
+"2920 _tensor_constant144" [id=2920, type=get_attr];
+"2921 index_22" [id=2921, type=index];
+"2922 view_122" [id=2922, type=view];
+"2923 permute_100" [id=2923, type=permute];
+"2924 contiguous_42" [id=2924, type=contiguous];
+"2925 unsqueeze_66" [id=2925, type=unsqueeze];
+"2926 sigmoid_22" [id=2926, type=sigmoid];
+"2927 mul_44" [id=2927, type=mul];
+"2928 pad_25" [id=2928, type=pad];
+"2929 view_123" [id=2929, type=view];
+"2930 permute_101" [id=2930, type=permute];
+"2931 reshape_99" [id=2931, type=reshape];
+"2932 linear_137_updated_constant0" [id=2932, type=get_attr];
+"2933 reshape_99_0_0_nncf_smooth_quant_0" [id=2933, type=call_module];
+"2934 quantize_per_tensor_default_136" [id=2934, type=quantize_per_tensor];
+"2935 dequantize_per_tensor_default_136" [id=2935, type=dequantize_per_tensor];
+"2936 linear_137_scale_0" [id=2936, type=get_attr];
+"2937 linear_137_zero_point_0" [id=2937, type=get_attr];
+"2938 quantize_per_channel_default_138" [id=2938, type=quantize_per_channel];
+"2939 dequantize_per_channel_default_138" [id=2939, type=dequantize_per_channel];
+"2940 _param_constant368_0_0" [id=2940, type=get_attr];
+"2941 linear_137" [id=2941, type=linear];
+"2942 reshape_100" [id=2942, type=reshape];
+"2943 permute_102" [id=2943, type=permute];
+"2944 select_66" [id=2944, type=select];
+"2945 select_67" [id=2945, type=select];
+"2946 select_68" [id=2946, type=select];
+"2947 linalg_vector_norm_44" [id=2947, type=linalg_vector_norm];
+"2948 clamp_min_44" [id=2948, type=clamp_min];
+"2949 expand_as_44" [id=2949, type=expand_as];
+"2950 div_44" [id=2950, type=div];
+"2951 quantize_per_tensor_default_137" [id=2951, type=quantize_per_tensor];
+"2952 dequantize_per_tensor_default_137" [id=2952, type=dequantize_per_tensor];
+"2953 linalg_vector_norm_45" [id=2953, type=linalg_vector_norm];
+"2954 clamp_min_45" [id=2954, type=clamp_min];
+"2955 expand_as_45" [id=2955, type=expand_as];
+"2956 div_45" [id=2956, type=div];
+"2957 quantize_per_tensor_default_138" [id=2957, type=quantize_per_tensor];
+"2958 dequantize_per_tensor_default_138" [id=2958, type=dequantize_per_tensor];
+"2959 transpose_44" [id=2959, type=transpose];
+"2960 matmul_44" [id=2960, type=matmul];
+"2961 _param_constant370" [id=2961, type=get_attr];
+"2962 clamp_22" [id=2962, type=clamp];
+"2963 exp_22" [id=2963, type=exp];
+"2964 mul_45" [id=2964, type=mul];
+"2965 add_77" [id=2965, type=add];
+"2966 softmax_22" [id=2966, type=softmax];
+"2967 dropout_88" [id=2967, type=dropout];
+"2968 matmul_45" [id=2968, type=matmul];
+"2969 transpose_45" [id=2969, type=transpose];
+"2970 reshape_101" [id=2970, type=reshape];
+"2971 linear_138_updated_constant0" [id=2971, type=get_attr];
+"2972 reshape_101_0_0_nncf_smooth_quant_0" [id=2972, type=call_module];
+"2973 quantize_per_tensor_default_139" [id=2973, type=quantize_per_tensor];
+"2974 dequantize_per_tensor_default_139" [id=2974, type=dequantize_per_tensor];
+"2975 linear_138_scale_0" [id=2975, type=get_attr];
+"2976 linear_138_zero_point_0" [id=2976, type=get_attr];
+"2977 quantize_per_channel_default_139" [id=2977, type=quantize_per_channel];
+"2978 dequantize_per_channel_default_139" [id=2978, type=dequantize_per_channel];
+"2979 _param_constant372_0_0" [id=2979, type=get_attr];
+"2980 linear_138" [id=2980, type=linear];
+"2981 dropout_89" [id=2981, type=dropout];
+"2982 view_124" [id=2982, type=view];
+"2983 permute_103" [id=2983, type=permute];
+"2984 reshape_102" [id=2984, type=reshape];
+"2985 slice_342" [id=2985, type=slice];
+"2986 slice_343" [id=2986, type=slice];
+"2987 slice_344" [id=2987, type=slice];
+"2988 slice_345" [id=2988, type=slice];
+"2989 contiguous_43" [id=2989, type=contiguous];
+"2990 _param_constant373" [id=2990, type=get_attr];
+"2991 _param_constant374" [id=2991, type=get_attr];
+"2992 layer_norm_48" [id=2992, type=layer_norm];
+"2993 add_78" [id=2993, type=add];
+"2994 linear_139_updated_constant0" [id=2994, type=get_attr];
+"2995 add_78_0_0_nncf_smooth_quant_0" [id=2995, type=call_module];
+"2996 quantize_per_tensor_default_140" [id=2996, type=quantize_per_tensor];
+"2997 dequantize_per_tensor_default_140" [id=2997, type=dequantize_per_tensor];
+"2998 linear_139_scale_0" [id=2998, type=get_attr];
+"2999 linear_139_zero_point_0" [id=2999, type=get_attr];
+"3000 quantize_per_channel_default_140" [id=3000, type=quantize_per_channel];
+"3001 dequantize_per_channel_default_140" [id=3001, type=dequantize_per_channel];
+"3002 _param_constant376_0_0" [id=3002, type=get_attr];
+"3003 linear_139" [id=3003, type=linear];
+"3004 gelu_22" [id=3004, type=gelu];
+"3005 dropout_90" [id=3005, type=dropout];
+"3006 linear_140_updated_constant0" [id=3006, type=get_attr];
+"3007 dropout_90_0_0_nncf_smooth_quant_0" [id=3007, type=call_module];
+"3008 quantize_per_tensor_default_141" [id=3008, type=quantize_per_tensor];
+"3009 dequantize_per_tensor_default_141" [id=3009, type=dequantize_per_tensor];
+"3010 linear_140_scale_0" [id=3010, type=get_attr];
+"3011 linear_140_zero_point_0" [id=3011, type=get_attr];
+"3012 quantize_per_channel_default_141" [id=3012, type=quantize_per_channel];
+"3013 dequantize_per_channel_default_141" [id=3013, type=dequantize_per_channel];
+"3014 _param_constant378_0_0" [id=3014, type=get_attr];
+"3015 linear_140" [id=3015, type=linear];
+"3016 dropout_91" [id=3016, type=dropout];
+"3017 _param_constant379" [id=3017, type=get_attr];
+"3018 _param_constant380" [id=3018, type=get_attr];
+"3019 layer_norm_49" [id=3019, type=layer_norm];
+"3020 add_79" [id=3020, type=add];
+"3021 _tensor_constant145" [id=3021, type=get_attr];
+"3022 linear_141_updated_constant0" [id=3022, type=get_attr];
+"3023 _tensor_constant145_0_0_nncf_smooth_quant_0" [id=3023, type=call_module];
+"3024 linear_141_scale_0" [id=3024, type=get_attr];
+"3025 linear_141_zero_point_0" [id=3025, type=get_attr];
+"3026 quantize_per_channel_default_142" [id=3026, type=quantize_per_channel];
+"3027 dequantize_per_channel_default_142" [id=3027, type=dequantize_per_channel];
+"3028 _param_constant382_0_0" [id=3028, type=get_attr];
+"3029 linear_141" [id=3029, type=linear];
+"3030 relu__23" [id=3030, type=relu_];
+"3031 linear_142_updated_constant0" [id=3031, type=get_attr];
+"3032 relu__23_0_0_nncf_smooth_quant_0" [id=3032, type=call_module];
+"3033 linear_142_scale_0" [id=3033, type=get_attr];
+"3034 linear_142_zero_point_0" [id=3034, type=get_attr];
+"3035 quantize_per_channel_default_143" [id=3035, type=quantize_per_channel];
+"3036 dequantize_per_channel_default_143" [id=3036, type=dequantize_per_channel];
+"3037 linear_142" [id=3037, type=linear];
+"3038 view_125" [id=3038, type=view];
+"3039 _tensor_constant146" [id=3039, type=get_attr];
+"3040 index_23" [id=3040, type=index];
+"3041 view_126" [id=3041, type=view];
+"3042 permute_104" [id=3042, type=permute];
+"3043 contiguous_44" [id=3043, type=contiguous];
+"3044 unsqueeze_67" [id=3044, type=unsqueeze];
+"3045 sigmoid_23" [id=3045, type=sigmoid];
+"3046 mul_46" [id=3046, type=mul];
+"3047 pad_26" [id=3047, type=pad];
+"3048 view_127" [id=3048, type=view];
+"3049 permute_105" [id=3049, type=permute];
+"3050 reshape_103" [id=3050, type=reshape];
+"3051 linear_143_updated_constant0" [id=3051, type=get_attr];
+"3052 reshape_103_0_0_nncf_smooth_quant_0" [id=3052, type=call_module];
+"3053 quantize_per_tensor_default_142" [id=3053, type=quantize_per_tensor];
+"3054 dequantize_per_tensor_default_142" [id=3054, type=dequantize_per_tensor];
+"3055 linear_143_scale_0" [id=3055, type=get_attr];
+"3056 linear_143_zero_point_0" [id=3056, type=get_attr];
+"3057 quantize_per_channel_default_144" [id=3057, type=quantize_per_channel];
+"3058 dequantize_per_channel_default_144" [id=3058, type=dequantize_per_channel];
+"3059 _param_constant384_0_0" [id=3059, type=get_attr];
+"3060 linear_143" [id=3060, type=linear];
+"3061 reshape_104" [id=3061, type=reshape];
+"3062 permute_106" [id=3062, type=permute];
+"3063 select_69" [id=3063, type=select];
+"3064 select_70" [id=3064, type=select];
+"3065 select_71" [id=3065, type=select];
+"3066 linalg_vector_norm_46" [id=3066, type=linalg_vector_norm];
+"3067 clamp_min_46" [id=3067, type=clamp_min];
+"3068 expand_as_46" [id=3068, type=expand_as];
+"3069 div_46" [id=3069, type=div];
+"3070 quantize_per_tensor_default_143" [id=3070, type=quantize_per_tensor];
+"3071 dequantize_per_tensor_default_143" [id=3071, type=dequantize_per_tensor];
+"3072 linalg_vector_norm_47" [id=3072, type=linalg_vector_norm];
+"3073 clamp_min_47" [id=3073, type=clamp_min];
+"3074 expand_as_47" [id=3074, type=expand_as];
+"3075 div_47" [id=3075, type=div];
+"3076 quantize_per_tensor_default_144" [id=3076, type=quantize_per_tensor];
+"3077 dequantize_per_tensor_default_144" [id=3077, type=dequantize_per_tensor];
+"3078 transpose_46" [id=3078, type=transpose];
+"3079 matmul_46" [id=3079, type=matmul];
+"3080 _param_constant386" [id=3080, type=get_attr];
+"3081 clamp_23" [id=3081, type=clamp];
+"3082 exp_23" [id=3082, type=exp];
+"3083 mul_47" [id=3083, type=mul];
+"3084 add_80" [id=3084, type=add];
+"3085 softmax_23" [id=3085, type=softmax];
+"3086 dropout_92" [id=3086, type=dropout];
+"3087 matmul_47" [id=3087, type=matmul];
+"3088 transpose_47" [id=3088, type=transpose];
+"3089 reshape_105" [id=3089, type=reshape];
+"3090 linear_144_updated_constant0" [id=3090, type=get_attr];
+"3091 reshape_105_0_0_nncf_smooth_quant_0" [id=3091, type=call_module];
+"3092 quantize_per_tensor_default_145" [id=3092, type=quantize_per_tensor];
+"3093 dequantize_per_tensor_default_145" [id=3093, type=dequantize_per_tensor];
+"3094 linear_144_scale_0" [id=3094, type=get_attr];
+"3095 linear_144_zero_point_0" [id=3095, type=get_attr];
+"3096 quantize_per_channel_default_145" [id=3096, type=quantize_per_channel];
+"3097 dequantize_per_channel_default_145" [id=3097, type=dequantize_per_channel];
+"3098 _param_constant388_0_0" [id=3098, type=get_attr];
+"3099 linear_144" [id=3099, type=linear];
+"3100 dropout_93" [id=3100, type=dropout];
+"3101 view_128" [id=3101, type=view];
+"3102 permute_107" [id=3102, type=permute];
+"3103 reshape_106" [id=3103, type=reshape];
+"3104 slice_347" [id=3104, type=slice];
+"3105 slice_348" [id=3105, type=slice];
+"3106 slice_349" [id=3106, type=slice];
+"3107 slice_350" [id=3107, type=slice];
+"3108 contiguous_45" [id=3108, type=contiguous];
+"3109 _param_constant389" [id=3109, type=get_attr];
+"3110 _param_constant390" [id=3110, type=get_attr];
+"3111 layer_norm_50" [id=3111, type=layer_norm];
+"3112 add_81" [id=3112, type=add];
+"3113 linear_145_updated_constant0" [id=3113, type=get_attr];
+"3114 add_81_0_0_nncf_smooth_quant_0" [id=3114, type=call_module];
+"3115 quantize_per_tensor_default_146" [id=3115, type=quantize_per_tensor];
+"3116 dequantize_per_tensor_default_146" [id=3116, type=dequantize_per_tensor];
+"3117 linear_145_scale_0" [id=3117, type=get_attr];
+"3118 linear_145_zero_point_0" [id=3118, type=get_attr];
+"3119 quantize_per_channel_default_146" [id=3119, type=quantize_per_channel];
+"3120 dequantize_per_channel_default_146" [id=3120, type=dequantize_per_channel];
+"3121 _param_constant392_0_0" [id=3121, type=get_attr];
+"3122 linear_145" [id=3122, type=linear];
+"3123 gelu_23" [id=3123, type=gelu];
+"3124 dropout_94" [id=3124, type=dropout];
+"3125 linear_146_updated_constant0" [id=3125, type=get_attr];
+"3126 dropout_94_0_0_nncf_smooth_quant_0" [id=3126, type=call_module];
+"3127 quantize_per_tensor_default_147" [id=3127, type=quantize_per_tensor];
+"3128 dequantize_per_tensor_default_147" [id=3128, type=dequantize_per_tensor];
+"3129 linear_146_scale_0" [id=3129, type=get_attr];
+"3130 linear_146_zero_point_0" [id=3130, type=get_attr];
+"3131 quantize_per_channel_default_147" [id=3131, type=quantize_per_channel];
+"3132 dequantize_per_channel_default_147" [id=3132, type=dequantize_per_channel];
+"3133 _param_constant394_0_0" [id=3133, type=get_attr];
+"3134 linear_146" [id=3134, type=linear];
+"3135 dropout_95" [id=3135, type=dropout];
+"3136 _param_constant395" [id=3136, type=get_attr];
+"3137 _param_constant396" [id=3137, type=get_attr];
+"3138 layer_norm_51" [id=3138, type=layer_norm];
+"3139 add_82" [id=3139, type=add];
+"3140 _param_constant397" [id=3140, type=get_attr];
+"3141 _param_constant398" [id=3141, type=get_attr];
+"3142 layer_norm_52" [id=3142, type=layer_norm];
+"3143 permute_108" [id=3143, type=permute];
+"3144 adaptive_avg_pool2d" [id=3144, type=adaptive_avg_pool2d];
+"3145 flatten" [id=3145, type=flatten];
+"3146 linear_147_updated_constant0" [id=3146, type=get_attr];
+"3147 flatten_0_0_nncf_smooth_quant_0" [id=3147, type=call_module];
+"3148 quantize_per_tensor_default_148" [id=3148, type=quantize_per_tensor];
+"3149 dequantize_per_tensor_default_148" [id=3149, type=dequantize_per_tensor];
+"3150 linear_147_scale_0" [id=3150, type=get_attr];
+"3151 linear_147_zero_point_0" [id=3151, type=get_attr];
+"3152 quantize_per_channel_default_148" [id=3152, type=quantize_per_channel];
+"3153 dequantize_per_channel_default_148" [id=3153, type=dequantize_per_channel];
+"3154 _param_constant400_0_0" [id=3154, type=get_attr];
+"3155 linear_147" [id=3155, type=linear];
+"3156 output" [id=3156, type=output];
+"0 arg0_1" -> "1 quantize_per_tensor_default";
+"1 quantize_per_tensor_default" -> "2 dequantize_per_tensor_default";
+"2 dequantize_per_tensor_default" -> "9 conv2d";
+"3 _param_constant0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "7 dequantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "6 quantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "7 dequantize_per_channel_default";
+"6 quantize_per_channel_default" -> "7 dequantize_per_channel_default";
+"7 dequantize_per_channel_default" -> "9 conv2d";
+"8 _param_constant1_0_0" -> "9 conv2d";
+"9 conv2d" -> "10 permute";
+"10 permute" -> "13 layer_norm";
+"11 _param_constant2" -> "13 layer_norm";
+"12 _param_constant3" -> "13 layer_norm";
+"13 layer_norm" -> "40 pad";
+"13 layer_norm" -> "102 add_1";
+"14 _tensor_constant0" -> "16 _tensor_constant0_0_0_nncf_smooth_quant_0";
+"15 linear_updated_constant0" -> "19 quantize_per_channel_default_1";
+"16 _tensor_constant0_0_0_nncf_smooth_quant_0" -> "22 linear";
+"17 linear_scale_0" -> "19 quantize_per_channel_default_1";
+"17 linear_scale_0" -> "20 dequantize_per_channel_default_1";
+"18 linear_zero_point_0" -> "19 quantize_per_channel_default_1";
+"18 linear_zero_point_0" -> "20 dequantize_per_channel_default_1";
+"19 quantize_per_channel_default_1" -> "20 dequantize_per_channel_default_1";
+"20 dequantize_per_channel_default_1" -> "22 linear";
+"21 _param_constant5_0_0" -> "22 linear";
+"22 linear" -> "23 relu_";
+"23 relu_" -> "25 relu__0_0_nncf_smooth_quant_0";
+"24 linear_1_updated_constant0" -> "28 quantize_per_channel_default_2";
+"25 relu__0_0_nncf_smooth_quant_0" -> "30 linear_1";
+"26 linear_1_scale_0" -> "28 quantize_per_channel_default_2";
+"26 linear_1_scale_0" -> "29 dequantize_per_channel_default_2";
+"27 linear_1_zero_point_0" -> "28 quantize_per_channel_default_2";
+"27 linear_1_zero_point_0" -> "29 dequantize_per_channel_default_2";
+"28 quantize_per_channel_default_2" -> "29 dequantize_per_channel_default_2";
+"29 dequantize_per_channel_default_2" -> "30 linear_1";
+"30 linear_1" -> "31 view";
+"31 view" -> "33 index";
+"32 _tensor_constant1" -> "33 index";
+"33 index" -> "34 view_1";
+"34 view_1" -> "35 permute_1";
+"35 permute_1" -> "36 contiguous";
+"36 contiguous" -> "37 unsqueeze";
+"37 unsqueeze" -> "38 sigmoid";
+"38 sigmoid" -> "39 mul";
+"39 mul" -> "77 add";
+"40 pad" -> "41 view_2";
+"41 view_2" -> "42 permute_2";
+"42 permute_2" -> "43 reshape";
+"43 reshape" -> "45 reshape_0_0_nncf_smooth_quant_0";
+"44 linear_2_updated_constant0" -> "50 quantize_per_channel_default_3";
+"45 reshape_0_0_nncf_smooth_quant_0" -> "46 quantize_per_tensor_default_1";
+"46 quantize_per_tensor_default_1" -> "47 dequantize_per_tensor_default_1";
+"47 dequantize_per_tensor_default_1" -> "53 linear_2";
+"48 linear_2_scale_0" -> "50 quantize_per_channel_default_3";
+"48 linear_2_scale_0" -> "51 dequantize_per_channel_default_3";
+"49 linear_2_zero_point_0" -> "50 quantize_per_channel_default_3";
+"49 linear_2_zero_point_0" -> "51 dequantize_per_channel_default_3";
+"50 quantize_per_channel_default_3" -> "51 dequantize_per_channel_default_3";
+"51 dequantize_per_channel_default_3" -> "53 linear_2";
+"52 _param_constant7_0_0" -> "53 linear_2";
+"53 linear_2" -> "54 reshape_1";
+"54 reshape_1" -> "55 permute_3";
+"55 permute_3" -> "56 select";
+"55 permute_3" -> "57 select_1";
+"55 permute_3" -> "58 select_2";
+"56 select" -> "59 linalg_vector_norm";
+"56 select" -> "61 expand_as";
+"56 select" -> "62 div";
+"57 select_1" -> "65 linalg_vector_norm_1";
+"57 select_1" -> "67 expand_as_1";
+"57 select_1" -> "68 div_1";
+"58 select_2" -> "80 matmul_1";
+"59 linalg_vector_norm" -> "60 clamp_min";
+"60 clamp_min" -> "61 expand_as";
+"61 expand_as" -> "62 div";
+"62 div" -> "63 quantize_per_tensor_default_2";
+"63 quantize_per_tensor_default_2" -> "64 dequantize_per_tensor_default_2";
+"64 dequantize_per_tensor_default_2" -> "72 matmul";
+"65 linalg_vector_norm_1" -> "66 clamp_min_1";
+"66 clamp_min_1" -> "67 expand_as_1";
+"67 expand_as_1" -> "68 div_1";
+"68 div_1" -> "69 quantize_per_tensor_default_3";
+"69 quantize_per_tensor_default_3" -> "70 dequantize_per_tensor_default_3";
+"70 dequantize_per_tensor_default_3" -> "71 transpose";
+"71 transpose" -> "72 matmul";
+"72 matmul" -> "76 mul_1";
+"73 _param_constant9" -> "74 clamp";
+"74 clamp" -> "75 exp";
+"75 exp" -> "76 mul_1";
+"76 mul_1" -> "77 add";
+"77 add" -> "78 softmax";
+"78 softmax" -> "79 dropout";
+"79 dropout" -> "80 matmul_1";
+"80 matmul_1" -> "81 transpose_1";
+"81 transpose_1" -> "82 reshape_2";
+"82 reshape_2" -> "84 reshape_2_0_0_nncf_smooth_quant_0";
+"83 linear_3_updated_constant0" -> "89 quantize_per_channel_default_4";
+"84 reshape_2_0_0_nncf_smooth_quant_0" -> "85 quantize_per_tensor_default_4";
+"85 quantize_per_tensor_default_4" -> "86 dequantize_per_tensor_default_4";
+"86 dequantize_per_tensor_default_4" -> "92 linear_3";
+"87 linear_3_scale_0" -> "89 quantize_per_channel_default_4";
+"87 linear_3_scale_0" -> "90 dequantize_per_channel_default_4";
+"88 linear_3_zero_point_0" -> "89 quantize_per_channel_default_4";
+"88 linear_3_zero_point_0" -> "90 dequantize_per_channel_default_4";
+"89 quantize_per_channel_default_4" -> "90 dequantize_per_channel_default_4";
+"90 dequantize_per_channel_default_4" -> "92 linear_3";
+"91 _param_constant11_0_0" -> "92 linear_3";
+"92 linear_3" -> "93 dropout_1";
+"93 dropout_1" -> "94 view_3";
+"94 view_3" -> "95 permute_4";
+"95 permute_4" -> "96 reshape_3";
+"96 reshape_3" -> "97 slice_2";
+"97 slice_2" -> "98 slice_3";
+"98 slice_3" -> "101 layer_norm_1";
+"99 _param_constant12" -> "101 layer_norm_1";
+"100 _param_constant13" -> "101 layer_norm_1";
+"101 layer_norm_1" -> "102 add_1";
+"102 add_1" -> "104 add_1_0_0_nncf_smooth_quant_0";
+"102 add_1" -> "129 add_2";
+"103 linear_4_updated_constant0" -> "109 quantize_per_channel_default_5";
+"104 add_1_0_0_nncf_smooth_quant_0" -> "105 quantize_per_tensor_default_5";
+"105 quantize_per_tensor_default_5" -> "106 dequantize_per_tensor_default_5";
+"106 dequantize_per_tensor_default_5" -> "112 linear_4";
+"107 linear_4_scale_0" -> "109 quantize_per_channel_default_5";
+"107 linear_4_scale_0" -> "110 dequantize_per_channel_default_5";
+"108 linear_4_zero_point_0" -> "109 quantize_per_channel_default_5";
+"108 linear_4_zero_point_0" -> "110 dequantize_per_channel_default_5";
+"109 quantize_per_channel_default_5" -> "110 dequantize_per_channel_default_5";
+"110 dequantize_per_channel_default_5" -> "112 linear_4";
+"111 _param_constant15_0_0" -> "112 linear_4";
+"112 linear_4" -> "113 gelu";
+"113 gelu" -> "114 dropout_2";
+"114 dropout_2" -> "116 dropout_2_0_0_nncf_smooth_quant_0";
+"115 linear_5_updated_constant0" -> "121 quantize_per_channel_default_6";
+"116 dropout_2_0_0_nncf_smooth_quant_0" -> "117 quantize_per_tensor_default_6";
+"117 quantize_per_tensor_default_6" -> "118 dequantize_per_tensor_default_6";
+"118 dequantize_per_tensor_default_6" -> "124 linear_5";
+"119 linear_5_scale_0" -> "121 quantize_per_channel_default_6";
+"119 linear_5_scale_0" -> "122 dequantize_per_channel_default_6";
+"120 linear_5_zero_point_0" -> "121 quantize_per_channel_default_6";
+"120 linear_5_zero_point_0" -> "122 dequantize_per_channel_default_6";
+"121 quantize_per_channel_default_6" -> "122 dequantize_per_channel_default_6";
+"122 dequantize_per_channel_default_6" -> "124 linear_5";
+"123 _param_constant17_0_0" -> "124 linear_5";
+"124 linear_5" -> "125 dropout_3";
+"125 dropout_3" -> "128 layer_norm_2";
+"126 _param_constant18" -> "128 layer_norm_2";
+"127 _param_constant19" -> "128 layer_norm_2";
+"128 layer_norm_2" -> "129 add_2";
+"129 add_2" -> "156 pad_1";
+"129 add_2" -> "236 add_5";
+"130 _tensor_constant2" -> "132 _tensor_constant2_0_0_nncf_smooth_quant_0";
+"131 linear_6_updated_constant0" -> "135 quantize_per_channel_default_7";
+"132 _tensor_constant2_0_0_nncf_smooth_quant_0" -> "138 linear_6";
+"133 linear_6_scale_0" -> "135 quantize_per_channel_default_7";
+"133 linear_6_scale_0" -> "136 dequantize_per_channel_default_7";
+"134 linear_6_zero_point_0" -> "135 quantize_per_channel_default_7";
+"134 linear_6_zero_point_0" -> "136 dequantize_per_channel_default_7";
+"135 quantize_per_channel_default_7" -> "136 dequantize_per_channel_default_7";
+"136 dequantize_per_channel_default_7" -> "138 linear_6";
+"137 _param_constant21_0_0" -> "138 linear_6";
+"138 linear_6" -> "139 relu__1";
+"139 relu__1" -> "141 relu__1_0_0_nncf_smooth_quant_0";
+"140 linear_7_updated_constant0" -> "144 quantize_per_channel_default_8";
+"141 relu__1_0_0_nncf_smooth_quant_0" -> "146 linear_7";
+"142 linear_7_scale_0" -> "144 quantize_per_channel_default_8";
+"142 linear_7_scale_0" -> "145 dequantize_per_channel_default_8";
+"143 linear_7_zero_point_0" -> "144 quantize_per_channel_default_8";
+"143 linear_7_zero_point_0" -> "145 dequantize_per_channel_default_8";
+"144 quantize_per_channel_default_8" -> "145 dequantize_per_channel_default_8";
+"145 dequantize_per_channel_default_8" -> "146 linear_7";
+"146 linear_7" -> "147 view_4";
+"147 view_4" -> "149 index_1";
+"148 _tensor_constant3" -> "149 index_1";
+"149 index_1" -> "150 view_5";
+"150 view_5" -> "151 permute_5";
+"151 permute_5" -> "152 contiguous_1";
+"152 contiguous_1" -> "153 unsqueeze_1";
+"153 unsqueeze_1" -> "154 sigmoid_1";
+"154 sigmoid_1" -> "155 mul_2";
+"155 mul_2" -> "194 add_3";
+"156 pad_1" -> "157 roll";
+"157 roll" -> "158 view_6";
+"158 view_6" -> "159 permute_6";
+"159 permute_6" -> "160 reshape_4";
+"160 reshape_4" -> "162 reshape_4_0_0_nncf_smooth_quant_0";
+"160 reshape_4" -> "195 new_zeros";
+"161 linear_8_updated_constant0" -> "167 quantize_per_channel_default_9";
+"162 reshape_4_0_0_nncf_smooth_quant_0" -> "163 quantize_per_tensor_default_7";
+"163 quantize_per_tensor_default_7" -> "164 dequantize_per_tensor_default_7";
+"164 dequantize_per_tensor_default_7" -> "170 linear_8";
+"165 linear_8_scale_0" -> "167 quantize_per_channel_default_9";
+"165 linear_8_scale_0" -> "168 dequantize_per_channel_default_9";
+"166 linear_8_zero_point_0" -> "167 quantize_per_channel_default_9";
+"166 linear_8_zero_point_0" -> "168 dequantize_per_channel_default_9";
+"167 quantize_per_channel_default_9" -> "168 dequantize_per_channel_default_9";
+"168 dequantize_per_channel_default_9" -> "170 linear_8";
+"169 _param_constant23_0_0" -> "170 linear_8";
+"170 linear_8" -> "171 reshape_5";
+"171 reshape_5" -> "172 permute_7";
+"172 permute_7" -> "173 select_3";
+"172 permute_7" -> "174 select_4";
+"172 permute_7" -> "175 select_5";
+"173 select_3" -> "176 linalg_vector_norm_2";
+"173 select_3" -> "178 expand_as_2";
+"173 select_3" -> "179 div_2";
+"174 select_4" -> "182 linalg_vector_norm_3";
+"174 select_4" -> "184 expand_as_3";
+"174 select_4" -> "185 div_3";
+"175 select_5" -> "213 matmul_3";
+"176 linalg_vector_norm_2" -> "177 clamp_min_2";
+"177 clamp_min_2" -> "178 expand_as_2";
+"178 expand_as_2" -> "179 div_2";
+"179 div_2" -> "180 quantize_per_tensor_default_8";
+"180 quantize_per_tensor_default_8" -> "181 dequantize_per_tensor_default_8";
+"181 dequantize_per_tensor_default_8" -> "189 matmul_2";
+"182 linalg_vector_norm_3" -> "183 clamp_min_3";
+"183 clamp_min_3" -> "184 expand_as_3";
+"184 expand_as_3" -> "185 div_3";
+"185 div_3" -> "186 quantize_per_tensor_default_9";
+"186 quantize_per_tensor_default_9" -> "187 dequantize_per_tensor_default_9";
+"187 dequantize_per_tensor_default_9" -> "188 transpose_2";
+"188 transpose_2" -> "189 matmul_2";
+"189 matmul_2" -> "193 mul_3";
+"190 _param_constant25" -> "191 clamp_1";
+"191 clamp_1" -> "192 exp_1";
+"192 exp_1" -> "193 mul_3";
+"193 mul_3" -> "194 add_3";
+"194 add_3" -> "206 view_8";
+"195 new_zeros" -> "196 view_7";
+"196 view_7" -> "197 permute_8";
+"197 permute_8" -> "198 reshape_6";
+"198 reshape_6" -> "199 unsqueeze_2";
+"198 reshape_6" -> "200 unsqueeze_3";
+"199 unsqueeze_2" -> "201 sub";
+"200 unsqueeze_3" -> "201 sub";
+"201 sub" -> "202 ne";
+"201 sub" -> "203 masked_fill";
+"201 sub" -> "204 eq";
+"202 ne" -> "203 masked_fill";
+"203 masked_fill" -> "205 masked_fill_1";
+"204 eq" -> "205 masked_fill_1";
+"205 masked_fill_1" -> "207 unsqueeze_4";
+"206 view_8" -> "209 add_4";
+"207 unsqueeze_4" -> "208 unsqueeze_5";
+"208 unsqueeze_5" -> "209 add_4";
+"209 add_4" -> "210 view_9";
+"210 view_9" -> "211 softmax_1";
+"211 softmax_1" -> "212 dropout_4";
+"212 dropout_4" -> "213 matmul_3";
+"213 matmul_3" -> "214 transpose_3";
+"214 transpose_3" -> "215 reshape_7";
+"215 reshape_7" -> "217 reshape_7_0_0_nncf_smooth_quant_0";
+"216 linear_9_updated_constant0" -> "222 quantize_per_channel_default_10";
+"217 reshape_7_0_0_nncf_smooth_quant_0" -> "218 quantize_per_tensor_default_10";
+"218 quantize_per_tensor_default_10" -> "219 dequantize_per_tensor_default_10";
+"219 dequantize_per_tensor_default_10" -> "225 linear_9";
+"220 linear_9_scale_0" -> "222 quantize_per_channel_default_10";
+"220 linear_9_scale_0" -> "223 dequantize_per_channel_default_10";
+"221 linear_9_zero_point_0" -> "222 quantize_per_channel_default_10";
+"221 linear_9_zero_point_0" -> "223 dequantize_per_channel_default_10";
+"222 quantize_per_channel_default_10" -> "223 dequantize_per_channel_default_10";
+"223 dequantize_per_channel_default_10" -> "225 linear_9";
+"224 _param_constant27_0_0" -> "225 linear_9";
+"225 linear_9" -> "226 dropout_5";
+"226 dropout_5" -> "227 view_10";
+"227 view_10" -> "228 permute_9";
+"228 permute_9" -> "229 reshape_8";
+"229 reshape_8" -> "230 roll_1";
+"230 roll_1" -> "231 slice_23";
+"231 slice_23" -> "232 slice_24";
+"232 slice_24" -> "235 layer_norm_3";
+"233 _param_constant28" -> "235 layer_norm_3";
+"234 _param_constant29" -> "235 layer_norm_3";
+"235 layer_norm_3" -> "236 add_5";
+"236 add_5" -> "238 add_5_0_0_nncf_smooth_quant_0";
+"236 add_5" -> "263 add_6";
+"237 linear_10_updated_constant0" -> "243 quantize_per_channel_default_11";
+"238 add_5_0_0_nncf_smooth_quant_0" -> "239 quantize_per_tensor_default_11";
+"239 quantize_per_tensor_default_11" -> "240 dequantize_per_tensor_default_11";
+"240 dequantize_per_tensor_default_11" -> "246 linear_10";
+"241 linear_10_scale_0" -> "243 quantize_per_channel_default_11";
+"241 linear_10_scale_0" -> "244 dequantize_per_channel_default_11";
+"242 linear_10_zero_point_0" -> "243 quantize_per_channel_default_11";
+"242 linear_10_zero_point_0" -> "244 dequantize_per_channel_default_11";
+"243 quantize_per_channel_default_11" -> "244 dequantize_per_channel_default_11";
+"244 dequantize_per_channel_default_11" -> "246 linear_10";
+"245 _param_constant31_0_0" -> "246 linear_10";
+"246 linear_10" -> "247 gelu_1";
+"247 gelu_1" -> "248 dropout_6";
+"248 dropout_6" -> "250 dropout_6_0_0_nncf_smooth_quant_0";
+"249 linear_11_updated_constant0" -> "255 quantize_per_channel_default_12";
+"250 dropout_6_0_0_nncf_smooth_quant_0" -> "251 quantize_per_tensor_default_12";
+"251 quantize_per_tensor_default_12" -> "252 dequantize_per_tensor_default_12";
+"252 dequantize_per_tensor_default_12" -> "258 linear_11";
+"253 linear_11_scale_0" -> "255 quantize_per_channel_default_12";
+"253 linear_11_scale_0" -> "256 dequantize_per_channel_default_12";
+"254 linear_11_zero_point_0" -> "255 quantize_per_channel_default_12";
+"254 linear_11_zero_point_0" -> "256 dequantize_per_channel_default_12";
+"255 quantize_per_channel_default_12" -> "256 dequantize_per_channel_default_12";
+"256 dequantize_per_channel_default_12" -> "258 linear_11";
+"257 _param_constant33_0_0" -> "258 linear_11";
+"258 linear_11" -> "259 dropout_7";
+"259 dropout_7" -> "262 layer_norm_4";
+"260 _param_constant34" -> "262 layer_norm_4";
+"261 _param_constant35" -> "262 layer_norm_4";
+"262 layer_norm_4" -> "263 add_6";
+"263 add_6" -> "264 pad_2";
+"264 pad_2" -> "265 slice_25";
+"264 pad_2" -> "268 slice_28";
+"264 pad_2" -> "271 slice_31";
+"264 pad_2" -> "274 slice_34";
+"265 slice_25" -> "266 slice_26";
+"266 slice_26" -> "267 slice_27";
+"267 slice_27" -> "277 cat";
+"268 slice_28" -> "269 slice_29";
+"269 slice_29" -> "270 slice_30";
+"270 slice_30" -> "277 cat";
+"271 slice_31" -> "272 slice_32";
+"272 slice_32" -> "273 slice_33";
+"273 slice_33" -> "277 cat";
+"274 slice_34" -> "275 slice_35";
+"275 slice_35" -> "276 slice_36";
+"276 slice_36" -> "277 cat";
+"277 cat" -> "279 cat_0_0_nncf_smooth_quant_0";
+"278 linear_12_updated_constant0" -> "284 quantize_per_channel_default_13";
+"279 cat_0_0_nncf_smooth_quant_0" -> "280 quantize_per_tensor_default_13";
+"280 quantize_per_tensor_default_13" -> "281 dequantize_per_tensor_default_13";
+"281 dequantize_per_tensor_default_13" -> "286 linear_12";
+"282 linear_12_scale_0" -> "284 quantize_per_channel_default_13";
+"282 linear_12_scale_0" -> "285 dequantize_per_channel_default_13";
+"283 linear_12_zero_point_0" -> "284 quantize_per_channel_default_13";
+"283 linear_12_zero_point_0" -> "285 dequantize_per_channel_default_13";
+"284 quantize_per_channel_default_13" -> "285 dequantize_per_channel_default_13";
+"285 dequantize_per_channel_default_13" -> "286 linear_12";
+"286 linear_12" -> "289 layer_norm_5";
+"287 _param_constant37" -> "289 layer_norm_5";
+"288 _param_constant38" -> "289 layer_norm_5";
+"289 layer_norm_5" -> "316 pad_3";
+"289 layer_norm_5" -> "381 add_8";
+"290 _tensor_constant13" -> "292 _tensor_constant13_0_0_nncf_smooth_quant_0";
+"291 linear_13_updated_constant0" -> "295 quantize_per_channel_default_14";
+"292 _tensor_constant13_0_0_nncf_smooth_quant_0" -> "298 linear_13";
+"293 linear_13_scale_0" -> "295 quantize_per_channel_default_14";
+"293 linear_13_scale_0" -> "296 dequantize_per_channel_default_14";
+"294 linear_13_zero_point_0" -> "295 quantize_per_channel_default_14";
+"294 linear_13_zero_point_0" -> "296 dequantize_per_channel_default_14";
+"295 quantize_per_channel_default_14" -> "296 dequantize_per_channel_default_14";
+"296 dequantize_per_channel_default_14" -> "298 linear_13";
+"297 _param_constant40_0_0" -> "298 linear_13";
+"298 linear_13" -> "299 relu__2";
+"299 relu__2" -> "301 relu__2_0_0_nncf_smooth_quant_0";
+"300 linear_14_updated_constant0" -> "304 quantize_per_channel_default_15";
+"301 relu__2_0_0_nncf_smooth_quant_0" -> "306 linear_14";
+"302 linear_14_scale_0" -> "304 quantize_per_channel_default_15";
+"302 linear_14_scale_0" -> "305 dequantize_per_channel_default_15";
+"303 linear_14_zero_point_0" -> "304 quantize_per_channel_default_15";
+"303 linear_14_zero_point_0" -> "305 dequantize_per_channel_default_15";
+"304 quantize_per_channel_default_15" -> "305 dequantize_per_channel_default_15";
+"305 dequantize_per_channel_default_15" -> "306 linear_14";
+"306 linear_14" -> "307 view_11";
+"307 view_11" -> "309 index_2";
+"308 _tensor_constant14" -> "309 index_2";
+"309 index_2" -> "310 view_12";
+"310 view_12" -> "311 permute_10";
+"311 permute_10" -> "312 contiguous_2";
+"312 contiguous_2" -> "313 unsqueeze_6";
+"313 unsqueeze_6" -> "314 sigmoid_2";
+"314 sigmoid_2" -> "315 mul_4";
+"315 mul_4" -> "353 add_7";
+"316 pad_3" -> "317 view_13";
+"317 view_13" -> "318 permute_11";
+"318 permute_11" -> "319 reshape_9";
+"319 reshape_9" -> "321 reshape_9_0_0_nncf_smooth_quant_0";
+"320 linear_15_updated_constant0" -> "326 quantize_per_channel_default_16";
+"321 reshape_9_0_0_nncf_smooth_quant_0" -> "322 quantize_per_tensor_default_14";
+"322 quantize_per_tensor_default_14" -> "323 dequantize_per_tensor_default_14";
+"323 dequantize_per_tensor_default_14" -> "329 linear_15";
+"324 linear_15_scale_0" -> "326 quantize_per_channel_default_16";
+"324 linear_15_scale_0" -> "327 dequantize_per_channel_default_16";
+"325 linear_15_zero_point_0" -> "326 quantize_per_channel_default_16";
+"325 linear_15_zero_point_0" -> "327 dequantize_per_channel_default_16";
+"326 quantize_per_channel_default_16" -> "327 dequantize_per_channel_default_16";
+"327 dequantize_per_channel_default_16" -> "329 linear_15";
+"328 _param_constant42_0_0" -> "329 linear_15";
+"329 linear_15" -> "330 reshape_10";
+"330 reshape_10" -> "331 permute_12";
+"331 permute_12" -> "332 select_6";
+"331 permute_12" -> "333 select_7";
+"331 permute_12" -> "334 select_8";
+"332 select_6" -> "335 linalg_vector_norm_4";
+"332 select_6" -> "337 expand_as_4";
+"332 select_6" -> "338 div_4";
+"333 select_7" -> "341 linalg_vector_norm_5";
+"333 select_7" -> "343 expand_as_5";
+"333 select_7" -> "344 div_5";
+"334 select_8" -> "356 matmul_5";
+"335 linalg_vector_norm_4" -> "336 clamp_min_4";
+"336 clamp_min_4" -> "337 expand_as_4";
+"337 expand_as_4" -> "338 div_4";
+"338 div_4" -> "339 quantize_per_tensor_default_15";
+"339 quantize_per_tensor_default_15" -> "340 dequantize_per_tensor_default_15";
+"340 dequantize_per_tensor_default_15" -> "348 matmul_4";
+"341 linalg_vector_norm_5" -> "342 clamp_min_5";
+"342 clamp_min_5" -> "343 expand_as_5";
+"343 expand_as_5" -> "344 div_5";
+"344 div_5" -> "345 quantize_per_tensor_default_16";
+"345 quantize_per_tensor_default_16" -> "346 dequantize_per_tensor_default_16";
+"346 dequantize_per_tensor_default_16" -> "347 transpose_4";
+"347 transpose_4" -> "348 matmul_4";
+"348 matmul_4" -> "352 mul_5";
+"349 _param_constant44" -> "350 clamp_2";
+"350 clamp_2" -> "351 exp_2";
+"351 exp_2" -> "352 mul_5";
+"352 mul_5" -> "353 add_7";
+"353 add_7" -> "354 softmax_2";
+"354 softmax_2" -> "355 dropout_8";
+"355 dropout_8" -> "356 matmul_5";
+"356 matmul_5" -> "357 transpose_5";
+"357 transpose_5" -> "358 reshape_11";
+"358 reshape_11" -> "360 reshape_11_0_0_nncf_smooth_quant_0";
+"359 linear_16_updated_constant0" -> "365 quantize_per_channel_default_17";
+"360 reshape_11_0_0_nncf_smooth_quant_0" -> "361 quantize_per_tensor_default_17";
+"361 quantize_per_tensor_default_17" -> "362 dequantize_per_tensor_default_17";
+"362 dequantize_per_tensor_default_17" -> "368 linear_16";
+"363 linear_16_scale_0" -> "365 quantize_per_channel_default_17";
+"363 linear_16_scale_0" -> "366 dequantize_per_channel_default_17";
+"364 linear_16_zero_point_0" -> "365 quantize_per_channel_default_17";
+"364 linear_16_zero_point_0" -> "366 dequantize_per_channel_default_17";
+"365 quantize_per_channel_default_17" -> "366 dequantize_per_channel_default_17";
+"366 dequantize_per_channel_default_17" -> "368 linear_16";
+"367 _param_constant46_0_0" -> "368 linear_16";
+"368 linear_16" -> "369 dropout_9";
+"369 dropout_9" -> "370 view_14";
+"370 view_14" -> "371 permute_13";
+"371 permute_13" -> "372 reshape_12";
+"372 reshape_12" -> "373 slice_38";
+"373 slice_38" -> "374 slice_39";
+"374 slice_39" -> "375 slice_40";
+"375 slice_40" -> "376 slice_41";
+"376 slice_41" -> "377 contiguous_3";
+"377 contiguous_3" -> "380 layer_norm_6";
+"378 _param_constant47" -> "380 layer_norm_6";
+"379 _param_constant48" -> "380 layer_norm_6";
+"380 layer_norm_6" -> "381 add_8";
+"381 add_8" -> "383 add_8_0_0_nncf_smooth_quant_0";
+"381 add_8" -> "408 add_9";
+"382 linear_17_updated_constant0" -> "388 quantize_per_channel_default_18";
+"383 add_8_0_0_nncf_smooth_quant_0" -> "384 quantize_per_tensor_default_18";
+"384 quantize_per_tensor_default_18" -> "385 dequantize_per_tensor_default_18";
+"385 dequantize_per_tensor_default_18" -> "391 linear_17";
+"386 linear_17_scale_0" -> "388 quantize_per_channel_default_18";
+"386 linear_17_scale_0" -> "389 dequantize_per_channel_default_18";
+"387 linear_17_zero_point_0" -> "388 quantize_per_channel_default_18";
+"387 linear_17_zero_point_0" -> "389 dequantize_per_channel_default_18";
+"388 quantize_per_channel_default_18" -> "389 dequantize_per_channel_default_18";
+"389 dequantize_per_channel_default_18" -> "391 linear_17";
+"390 _param_constant50_0_0" -> "391 linear_17";
+"391 linear_17" -> "392 gelu_2";
+"392 gelu_2" -> "393 dropout_10";
+"393 dropout_10" -> "395 dropout_10_0_0_nncf_smooth_quant_0";
+"394 linear_18_updated_constant0" -> "400 quantize_per_channel_default_19";
+"395 dropout_10_0_0_nncf_smooth_quant_0" -> "396 quantize_per_tensor_default_19";
+"396 quantize_per_tensor_default_19" -> "397 dequantize_per_tensor_default_19";
+"397 dequantize_per_tensor_default_19" -> "403 linear_18";
+"398 linear_18_scale_0" -> "400 quantize_per_channel_default_19";
+"398 linear_18_scale_0" -> "401 dequantize_per_channel_default_19";
+"399 linear_18_zero_point_0" -> "400 quantize_per_channel_default_19";
+"399 linear_18_zero_point_0" -> "401 dequantize_per_channel_default_19";
+"400 quantize_per_channel_default_19" -> "401 dequantize_per_channel_default_19";
+"401 dequantize_per_channel_default_19" -> "403 linear_18";
+"402 _param_constant52_0_0" -> "403 linear_18";
+"403 linear_18" -> "404 dropout_11";
+"404 dropout_11" -> "407 layer_norm_7";
+"405 _param_constant53" -> "407 layer_norm_7";
+"406 _param_constant54" -> "407 layer_norm_7";
+"407 layer_norm_7" -> "408 add_9";
+"408 add_9" -> "435 pad_4";
+"408 add_9" -> "518 add_12";
+"409 _tensor_constant15" -> "411 _tensor_constant15_0_0_nncf_smooth_quant_0";
+"410 linear_19_updated_constant0" -> "414 quantize_per_channel_default_20";
+"411 _tensor_constant15_0_0_nncf_smooth_quant_0" -> "417 linear_19";
+"412 linear_19_scale_0" -> "414 quantize_per_channel_default_20";
+"412 linear_19_scale_0" -> "415 dequantize_per_channel_default_20";
+"413 linear_19_zero_point_0" -> "414 quantize_per_channel_default_20";
+"413 linear_19_zero_point_0" -> "415 dequantize_per_channel_default_20";
+"414 quantize_per_channel_default_20" -> "415 dequantize_per_channel_default_20";
+"415 dequantize_per_channel_default_20" -> "417 linear_19";
+"416 _param_constant56_0_0" -> "417 linear_19";
+"417 linear_19" -> "418 relu__3";
+"418 relu__3" -> "420 relu__3_0_0_nncf_smooth_quant_0";
+"419 linear_20_updated_constant0" -> "423 quantize_per_channel_default_21";
+"420 relu__3_0_0_nncf_smooth_quant_0" -> "425 linear_20";
+"421 linear_20_scale_0" -> "423 quantize_per_channel_default_21";
+"421 linear_20_scale_0" -> "424 dequantize_per_channel_default_21";
+"422 linear_20_zero_point_0" -> "423 quantize_per_channel_default_21";
+"422 linear_20_zero_point_0" -> "424 dequantize_per_channel_default_21";
+"423 quantize_per_channel_default_21" -> "424 dequantize_per_channel_default_21";
+"424 dequantize_per_channel_default_21" -> "425 linear_20";
+"425 linear_20" -> "426 view_15";
+"426 view_15" -> "428 index_3";
+"427 _tensor_constant16" -> "428 index_3";
+"428 index_3" -> "429 view_16";
+"429 view_16" -> "430 permute_14";
+"430 permute_14" -> "431 contiguous_4";
+"431 contiguous_4" -> "432 unsqueeze_7";
+"432 unsqueeze_7" -> "433 sigmoid_3";
+"433 sigmoid_3" -> "434 mul_6";
+"434 mul_6" -> "473 add_10";
+"435 pad_4" -> "436 roll_2";
+"436 roll_2" -> "437 view_17";
+"437 view_17" -> "438 permute_15";
+"438 permute_15" -> "439 reshape_13";
+"439 reshape_13" -> "441 reshape_13_0_0_nncf_smooth_quant_0";
+"439 reshape_13" -> "474 new_zeros_1";
+"440 linear_21_updated_constant0" -> "446 quantize_per_channel_default_22";
+"441 reshape_13_0_0_nncf_smooth_quant_0" -> "442 quantize_per_tensor_default_20";
+"442 quantize_per_tensor_default_20" -> "443 dequantize_per_tensor_default_20";
+"443 dequantize_per_tensor_default_20" -> "449 linear_21";
+"444 linear_21_scale_0" -> "446 quantize_per_channel_default_22";
+"444 linear_21_scale_0" -> "447 dequantize_per_channel_default_22";
+"445 linear_21_zero_point_0" -> "446 quantize_per_channel_default_22";
+"445 linear_21_zero_point_0" -> "447 dequantize_per_channel_default_22";
+"446 quantize_per_channel_default_22" -> "447 dequantize_per_channel_default_22";
+"447 dequantize_per_channel_default_22" -> "449 linear_21";
+"448 _param_constant58_0_0" -> "449 linear_21";
+"449 linear_21" -> "450 reshape_14";
+"450 reshape_14" -> "451 permute_16";
+"451 permute_16" -> "452 select_9";
+"451 permute_16" -> "453 select_10";
+"451 permute_16" -> "454 select_11";
+"452 select_9" -> "455 linalg_vector_norm_6";
+"452 select_9" -> "457 expand_as_6";
+"452 select_9" -> "458 div_6";
+"453 select_10" -> "461 linalg_vector_norm_7";
+"453 select_10" -> "463 expand_as_7";
+"453 select_10" -> "464 div_7";
+"454 select_11" -> "492 matmul_7";
+"455 linalg_vector_norm_6" -> "456 clamp_min_6";
+"456 clamp_min_6" -> "457 expand_as_6";
+"457 expand_as_6" -> "458 div_6";
+"458 div_6" -> "459 quantize_per_tensor_default_21";
+"459 quantize_per_tensor_default_21" -> "460 dequantize_per_tensor_default_21";
+"460 dequantize_per_tensor_default_21" -> "468 matmul_6";
+"461 linalg_vector_norm_7" -> "462 clamp_min_7";
+"462 clamp_min_7" -> "463 expand_as_7";
+"463 expand_as_7" -> "464 div_7";
+"464 div_7" -> "465 quantize_per_tensor_default_22";
+"465 quantize_per_tensor_default_22" -> "466 dequantize_per_tensor_default_22";
+"466 dequantize_per_tensor_default_22" -> "467 transpose_6";
+"467 transpose_6" -> "468 matmul_6";
+"468 matmul_6" -> "472 mul_7";
+"469 _param_constant60" -> "470 clamp_3";
+"470 clamp_3" -> "471 exp_3";
+"471 exp_3" -> "472 mul_7";
+"472 mul_7" -> "473 add_10";
+"473 add_10" -> "485 view_19";
+"474 new_zeros_1" -> "475 view_18";
+"475 view_18" -> "476 permute_17";
+"476 permute_17" -> "477 reshape_15";
+"477 reshape_15" -> "478 unsqueeze_8";
+"477 reshape_15" -> "479 unsqueeze_9";
+"478 unsqueeze_8" -> "480 sub_1";
+"479 unsqueeze_9" -> "480 sub_1";
+"480 sub_1" -> "481 ne_1";
+"480 sub_1" -> "482 masked_fill_2";
+"480 sub_1" -> "483 eq_1";
+"481 ne_1" -> "482 masked_fill_2";
+"482 masked_fill_2" -> "484 masked_fill_3";
+"483 eq_1" -> "484 masked_fill_3";
+"484 masked_fill_3" -> "486 unsqueeze_10";
+"485 view_19" -> "488 add_11";
+"486 unsqueeze_10" -> "487 unsqueeze_11";
+"487 unsqueeze_11" -> "488 add_11";
+"488 add_11" -> "489 view_20";
+"489 view_20" -> "490 softmax_3";
+"490 softmax_3" -> "491 dropout_12";
+"491 dropout_12" -> "492 matmul_7";
+"492 matmul_7" -> "493 transpose_7";
+"493 transpose_7" -> "494 reshape_16";
+"494 reshape_16" -> "496 reshape_16_0_0_nncf_smooth_quant_0";
+"495 linear_22_updated_constant0" -> "501 quantize_per_channel_default_23";
+"496 reshape_16_0_0_nncf_smooth_quant_0" -> "497 quantize_per_tensor_default_23";
+"497 quantize_per_tensor_default_23" -> "498 dequantize_per_tensor_default_23";
+"498 dequantize_per_tensor_default_23" -> "504 linear_22";
+"499 linear_22_scale_0" -> "501 quantize_per_channel_default_23";
+"499 linear_22_scale_0" -> "502 dequantize_per_channel_default_23";
+"500 linear_22_zero_point_0" -> "501 quantize_per_channel_default_23";
+"500 linear_22_zero_point_0" -> "502 dequantize_per_channel_default_23";
+"501 quantize_per_channel_default_23" -> "502 dequantize_per_channel_default_23";
+"502 dequantize_per_channel_default_23" -> "504 linear_22";
+"503 _param_constant62_0_0" -> "504 linear_22";
+"504 linear_22" -> "505 dropout_13";
+"505 dropout_13" -> "506 view_21";
+"506 view_21" -> "507 permute_18";
+"507 permute_18" -> "508 reshape_17";
+"508 reshape_17" -> "509 roll_3";
+"509 roll_3" -> "510 slice_61";
+"510 slice_61" -> "511 slice_62";
+"511 slice_62" -> "512 slice_63";
+"512 slice_63" -> "513 slice_64";
+"513 slice_64" -> "514 contiguous_5";
+"514 contiguous_5" -> "517 layer_norm_8";
+"515 _param_constant63" -> "517 layer_norm_8";
+"516 _param_constant64" -> "517 layer_norm_8";
+"517 layer_norm_8" -> "518 add_12";
+"518 add_12" -> "520 add_12_0_0_nncf_smooth_quant_0";
+"518 add_12" -> "545 add_13";
+"519 linear_23_updated_constant0" -> "525 quantize_per_channel_default_24";
+"520 add_12_0_0_nncf_smooth_quant_0" -> "521 quantize_per_tensor_default_24";
+"521 quantize_per_tensor_default_24" -> "522 dequantize_per_tensor_default_24";
+"522 dequantize_per_tensor_default_24" -> "528 linear_23";
+"523 linear_23_scale_0" -> "525 quantize_per_channel_default_24";
+"523 linear_23_scale_0" -> "526 dequantize_per_channel_default_24";
+"524 linear_23_zero_point_0" -> "525 quantize_per_channel_default_24";
+"524 linear_23_zero_point_0" -> "526 dequantize_per_channel_default_24";
+"525 quantize_per_channel_default_24" -> "526 dequantize_per_channel_default_24";
+"526 dequantize_per_channel_default_24" -> "528 linear_23";
+"527 _param_constant66_0_0" -> "528 linear_23";
+"528 linear_23" -> "529 gelu_3";
+"529 gelu_3" -> "530 dropout_14";
+"530 dropout_14" -> "532 dropout_14_0_0_nncf_smooth_quant_0";
+"531 linear_24_updated_constant0" -> "537 quantize_per_channel_default_25";
+"532 dropout_14_0_0_nncf_smooth_quant_0" -> "533 quantize_per_tensor_default_25";
+"533 quantize_per_tensor_default_25" -> "534 dequantize_per_tensor_default_25";
+"534 dequantize_per_tensor_default_25" -> "540 linear_24";
+"535 linear_24_scale_0" -> "537 quantize_per_channel_default_25";
+"535 linear_24_scale_0" -> "538 dequantize_per_channel_default_25";
+"536 linear_24_zero_point_0" -> "537 quantize_per_channel_default_25";
+"536 linear_24_zero_point_0" -> "538 dequantize_per_channel_default_25";
+"537 quantize_per_channel_default_25" -> "538 dequantize_per_channel_default_25";
+"538 dequantize_per_channel_default_25" -> "540 linear_24";
+"539 _param_constant68_0_0" -> "540 linear_24";
+"540 linear_24" -> "541 dropout_15";
+"541 dropout_15" -> "544 layer_norm_9";
+"542 _param_constant69" -> "544 layer_norm_9";
+"543 _param_constant70" -> "544 layer_norm_9";
+"544 layer_norm_9" -> "545 add_13";
+"545 add_13" -> "546 pad_5";
+"546 pad_5" -> "547 slice_65";
+"546 pad_5" -> "550 slice_68";
+"546 pad_5" -> "553 slice_71";
+"546 pad_5" -> "556 slice_74";
+"547 slice_65" -> "548 slice_66";
+"548 slice_66" -> "549 slice_67";
+"549 slice_67" -> "559 cat_1";
+"550 slice_68" -> "551 slice_69";
+"551 slice_69" -> "552 slice_70";
+"552 slice_70" -> "559 cat_1";
+"553 slice_71" -> "554 slice_72";
+"554 slice_72" -> "555 slice_73";
+"555 slice_73" -> "559 cat_1";
+"556 slice_74" -> "557 slice_75";
+"557 slice_75" -> "558 slice_76";
+"558 slice_76" -> "559 cat_1";
+"559 cat_1" -> "561 cat_1_0_0_nncf_smooth_quant_0";
+"560 linear_25_updated_constant0" -> "566 quantize_per_channel_default_26";
+"561 cat_1_0_0_nncf_smooth_quant_0" -> "562 quantize_per_tensor_default_26";
+"562 quantize_per_tensor_default_26" -> "563 dequantize_per_tensor_default_26";
+"563 dequantize_per_tensor_default_26" -> "568 linear_25";
+"564 linear_25_scale_0" -> "566 quantize_per_channel_default_26";
+"564 linear_25_scale_0" -> "567 dequantize_per_channel_default_26";
+"565 linear_25_zero_point_0" -> "566 quantize_per_channel_default_26";
+"565 linear_25_zero_point_0" -> "567 dequantize_per_channel_default_26";
+"566 quantize_per_channel_default_26" -> "567 dequantize_per_channel_default_26";
+"567 dequantize_per_channel_default_26" -> "568 linear_25";
+"568 linear_25" -> "571 layer_norm_10";
+"569 _param_constant72" -> "571 layer_norm_10";
+"570 _param_constant73" -> "571 layer_norm_10";
+"571 layer_norm_10" -> "598 pad_6";
+"571 layer_norm_10" -> "663 add_15";
+"572 _tensor_constant26" -> "574 _tensor_constant26_0_0_nncf_smooth_quant_0";
+"573 linear_26_updated_constant0" -> "577 quantize_per_channel_default_27";
+"574 _tensor_constant26_0_0_nncf_smooth_quant_0" -> "580 linear_26";
+"575 linear_26_scale_0" -> "577 quantize_per_channel_default_27";
+"575 linear_26_scale_0" -> "578 dequantize_per_channel_default_27";
+"576 linear_26_zero_point_0" -> "577 quantize_per_channel_default_27";
+"576 linear_26_zero_point_0" -> "578 dequantize_per_channel_default_27";
+"577 quantize_per_channel_default_27" -> "578 dequantize_per_channel_default_27";
+"578 dequantize_per_channel_default_27" -> "580 linear_26";
+"579 _param_constant75_0_0" -> "580 linear_26";
+"580 linear_26" -> "581 relu__4";
+"581 relu__4" -> "583 relu__4_0_0_nncf_smooth_quant_0";
+"582 linear_27_updated_constant0" -> "586 quantize_per_channel_default_28";
+"583 relu__4_0_0_nncf_smooth_quant_0" -> "588 linear_27";
+"584 linear_27_scale_0" -> "586 quantize_per_channel_default_28";
+"584 linear_27_scale_0" -> "587 dequantize_per_channel_default_28";
+"585 linear_27_zero_point_0" -> "586 quantize_per_channel_default_28";
+"585 linear_27_zero_point_0" -> "587 dequantize_per_channel_default_28";
+"586 quantize_per_channel_default_28" -> "587 dequantize_per_channel_default_28";
+"587 dequantize_per_channel_default_28" -> "588 linear_27";
+"588 linear_27" -> "589 view_22";
+"589 view_22" -> "591 index_4";
+"590 _tensor_constant27" -> "591 index_4";
+"591 index_4" -> "592 view_23";
+"592 view_23" -> "593 permute_19";
+"593 permute_19" -> "594 contiguous_6";
+"594 contiguous_6" -> "595 unsqueeze_12";
+"595 unsqueeze_12" -> "596 sigmoid_4";
+"596 sigmoid_4" -> "597 mul_8";
+"597 mul_8" -> "635 add_14";
+"598 pad_6" -> "599 view_24";
+"599 view_24" -> "600 permute_20";
+"600 permute_20" -> "601 reshape_18";
+"601 reshape_18" -> "603 reshape_18_0_0_nncf_smooth_quant_0";
+"602 linear_28_updated_constant0" -> "608 quantize_per_channel_default_29";
+"603 reshape_18_0_0_nncf_smooth_quant_0" -> "604 quantize_per_tensor_default_27";
+"604 quantize_per_tensor_default_27" -> "605 dequantize_per_tensor_default_27";
+"605 dequantize_per_tensor_default_27" -> "611 linear_28";
+"606 linear_28_scale_0" -> "608 quantize_per_channel_default_29";
+"606 linear_28_scale_0" -> "609 dequantize_per_channel_default_29";
+"607 linear_28_zero_point_0" -> "608 quantize_per_channel_default_29";
+"607 linear_28_zero_point_0" -> "609 dequantize_per_channel_default_29";
+"608 quantize_per_channel_default_29" -> "609 dequantize_per_channel_default_29";
+"609 dequantize_per_channel_default_29" -> "611 linear_28";
+"610 _param_constant77_0_0" -> "611 linear_28";
+"611 linear_28" -> "612 reshape_19";
+"612 reshape_19" -> "613 permute_21";
+"613 permute_21" -> "614 select_12";
+"613 permute_21" -> "615 select_13";
+"613 permute_21" -> "616 select_14";
+"614 select_12" -> "617 linalg_vector_norm_8";
+"614 select_12" -> "619 expand_as_8";
+"614 select_12" -> "620 div_8";
+"615 select_13" -> "623 linalg_vector_norm_9";
+"615 select_13" -> "625 expand_as_9";
+"615 select_13" -> "626 div_9";
+"616 select_14" -> "638 matmul_9";
+"617 linalg_vector_norm_8" -> "618 clamp_min_8";
+"618 clamp_min_8" -> "619 expand_as_8";
+"619 expand_as_8" -> "620 div_8";
+"620 div_8" -> "621 quantize_per_tensor_default_28";
+"621 quantize_per_tensor_default_28" -> "622 dequantize_per_tensor_default_28";
+"622 dequantize_per_tensor_default_28" -> "630 matmul_8";
+"623 linalg_vector_norm_9" -> "624 clamp_min_9";
+"624 clamp_min_9" -> "625 expand_as_9";
+"625 expand_as_9" -> "626 div_9";
+"626 div_9" -> "627 quantize_per_tensor_default_29";
+"627 quantize_per_tensor_default_29" -> "628 dequantize_per_tensor_default_29";
+"628 dequantize_per_tensor_default_29" -> "629 transpose_8";
+"629 transpose_8" -> "630 matmul_8";
+"630 matmul_8" -> "634 mul_9";
+"631 _param_constant79" -> "632 clamp_4";
+"632 clamp_4" -> "633 exp_4";
+"633 exp_4" -> "634 mul_9";
+"634 mul_9" -> "635 add_14";
+"635 add_14" -> "636 softmax_4";
+"636 softmax_4" -> "637 dropout_16";
+"637 dropout_16" -> "638 matmul_9";
+"638 matmul_9" -> "639 transpose_9";
+"639 transpose_9" -> "640 reshape_20";
+"640 reshape_20" -> "642 reshape_20_0_0_nncf_smooth_quant_0";
+"641 linear_29_updated_constant0" -> "647 quantize_per_channel_default_30";
+"642 reshape_20_0_0_nncf_smooth_quant_0" -> "643 quantize_per_tensor_default_30";
+"643 quantize_per_tensor_default_30" -> "644 dequantize_per_tensor_default_30";
+"644 dequantize_per_tensor_default_30" -> "650 linear_29";
+"645 linear_29_scale_0" -> "647 quantize_per_channel_default_30";
+"645 linear_29_scale_0" -> "648 dequantize_per_channel_default_30";
+"646 linear_29_zero_point_0" -> "647 quantize_per_channel_default_30";
+"646 linear_29_zero_point_0" -> "648 dequantize_per_channel_default_30";
+"647 quantize_per_channel_default_30" -> "648 dequantize_per_channel_default_30";
+"648 dequantize_per_channel_default_30" -> "650 linear_29";
+"649 _param_constant81_0_0" -> "650 linear_29";
+"650 linear_29" -> "651 dropout_17";
+"651 dropout_17" -> "652 view_25";
+"652 view_25" -> "653 permute_22";
+"653 permute_22" -> "654 reshape_21";
+"654 reshape_21" -> "655 slice_78";
+"655 slice_78" -> "656 slice_79";
+"656 slice_79" -> "657 slice_80";
+"657 slice_80" -> "658 slice_81";
+"658 slice_81" -> "659 contiguous_7";
+"659 contiguous_7" -> "662 layer_norm_11";
+"660 _param_constant82" -> "662 layer_norm_11";
+"661 _param_constant83" -> "662 layer_norm_11";
+"662 layer_norm_11" -> "663 add_15";
+"663 add_15" -> "665 add_15_0_0_nncf_smooth_quant_0";
+"663 add_15" -> "690 add_16";
+"664 linear_30_updated_constant0" -> "670 quantize_per_channel_default_31";
+"665 add_15_0_0_nncf_smooth_quant_0" -> "666 quantize_per_tensor_default_31";
+"666 quantize_per_tensor_default_31" -> "667 dequantize_per_tensor_default_31";
+"667 dequantize_per_tensor_default_31" -> "673 linear_30";
+"668 linear_30_scale_0" -> "670 quantize_per_channel_default_31";
+"668 linear_30_scale_0" -> "671 dequantize_per_channel_default_31";
+"669 linear_30_zero_point_0" -> "670 quantize_per_channel_default_31";
+"669 linear_30_zero_point_0" -> "671 dequantize_per_channel_default_31";
+"670 quantize_per_channel_default_31" -> "671 dequantize_per_channel_default_31";
+"671 dequantize_per_channel_default_31" -> "673 linear_30";
+"672 _param_constant85_0_0" -> "673 linear_30";
+"673 linear_30" -> "674 gelu_4";
+"674 gelu_4" -> "675 dropout_18";
+"675 dropout_18" -> "677 dropout_18_0_0_nncf_smooth_quant_0";
+"676 linear_31_updated_constant0" -> "682 quantize_per_channel_default_32";
+"677 dropout_18_0_0_nncf_smooth_quant_0" -> "678 quantize_per_tensor_default_32";
+"678 quantize_per_tensor_default_32" -> "679 dequantize_per_tensor_default_32";
+"679 dequantize_per_tensor_default_32" -> "685 linear_31";
+"680 linear_31_scale_0" -> "682 quantize_per_channel_default_32";
+"680 linear_31_scale_0" -> "683 dequantize_per_channel_default_32";
+"681 linear_31_zero_point_0" -> "682 quantize_per_channel_default_32";
+"681 linear_31_zero_point_0" -> "683 dequantize_per_channel_default_32";
+"682 quantize_per_channel_default_32" -> "683 dequantize_per_channel_default_32";
+"683 dequantize_per_channel_default_32" -> "685 linear_31";
+"684 _param_constant87_0_0" -> "685 linear_31";
+"685 linear_31" -> "686 dropout_19";
+"686 dropout_19" -> "689 layer_norm_12";
+"687 _param_constant88" -> "689 layer_norm_12";
+"688 _param_constant89" -> "689 layer_norm_12";
+"689 layer_norm_12" -> "690 add_16";
+"690 add_16" -> "717 pad_7";
+"690 add_16" -> "800 add_19";
+"691 _tensor_constant28" -> "693 _tensor_constant28_0_0_nncf_smooth_quant_0";
+"692 linear_32_updated_constant0" -> "696 quantize_per_channel_default_33";
+"693 _tensor_constant28_0_0_nncf_smooth_quant_0" -> "699 linear_32";
+"694 linear_32_scale_0" -> "696 quantize_per_channel_default_33";
+"694 linear_32_scale_0" -> "697 dequantize_per_channel_default_33";
+"695 linear_32_zero_point_0" -> "696 quantize_per_channel_default_33";
+"695 linear_32_zero_point_0" -> "697 dequantize_per_channel_default_33";
+"696 quantize_per_channel_default_33" -> "697 dequantize_per_channel_default_33";
+"697 dequantize_per_channel_default_33" -> "699 linear_32";
+"698 _param_constant91_0_0" -> "699 linear_32";
+"699 linear_32" -> "700 relu__5";
+"700 relu__5" -> "702 relu__5_0_0_nncf_smooth_quant_0";
+"701 linear_33_updated_constant0" -> "705 quantize_per_channel_default_34";
+"702 relu__5_0_0_nncf_smooth_quant_0" -> "707 linear_33";
+"703 linear_33_scale_0" -> "705 quantize_per_channel_default_34";
+"703 linear_33_scale_0" -> "706 dequantize_per_channel_default_34";
+"704 linear_33_zero_point_0" -> "705 quantize_per_channel_default_34";
+"704 linear_33_zero_point_0" -> "706 dequantize_per_channel_default_34";
+"705 quantize_per_channel_default_34" -> "706 dequantize_per_channel_default_34";
+"706 dequantize_per_channel_default_34" -> "707 linear_33";
+"707 linear_33" -> "708 view_26";
+"708 view_26" -> "710 index_5";
+"709 _tensor_constant29" -> "710 index_5";
+"710 index_5" -> "711 view_27";
+"711 view_27" -> "712 permute_23";
+"712 permute_23" -> "713 contiguous_8";
+"713 contiguous_8" -> "714 unsqueeze_13";
+"714 unsqueeze_13" -> "715 sigmoid_5";
+"715 sigmoid_5" -> "716 mul_10";
+"716 mul_10" -> "755 add_17";
+"717 pad_7" -> "718 roll_4";
+"718 roll_4" -> "719 view_28";
+"719 view_28" -> "720 permute_24";
+"720 permute_24" -> "721 reshape_22";
+"721 reshape_22" -> "723 reshape_22_0_0_nncf_smooth_quant_0";
+"721 reshape_22" -> "756 new_zeros_2";
+"722 linear_34_updated_constant0" -> "728 quantize_per_channel_default_35";
+"723 reshape_22_0_0_nncf_smooth_quant_0" -> "724 quantize_per_tensor_default_33";
+"724 quantize_per_tensor_default_33" -> "725 dequantize_per_tensor_default_33";
+"725 dequantize_per_tensor_default_33" -> "731 linear_34";
+"726 linear_34_scale_0" -> "728 quantize_per_channel_default_35";
+"726 linear_34_scale_0" -> "729 dequantize_per_channel_default_35";
+"727 linear_34_zero_point_0" -> "728 quantize_per_channel_default_35";
+"727 linear_34_zero_point_0" -> "729 dequantize_per_channel_default_35";
+"728 quantize_per_channel_default_35" -> "729 dequantize_per_channel_default_35";
+"729 dequantize_per_channel_default_35" -> "731 linear_34";
+"730 _param_constant93_0_0" -> "731 linear_34";
+"731 linear_34" -> "732 reshape_23";
+"732 reshape_23" -> "733 permute_25";
+"733 permute_25" -> "734 select_15";
+"733 permute_25" -> "735 select_16";
+"733 permute_25" -> "736 select_17";
+"734 select_15" -> "737 linalg_vector_norm_10";
+"734 select_15" -> "739 expand_as_10";
+"734 select_15" -> "740 div_10";
+"735 select_16" -> "743 linalg_vector_norm_11";
+"735 select_16" -> "745 expand_as_11";
+"735 select_16" -> "746 div_11";
+"736 select_17" -> "774 matmul_11";
+"737 linalg_vector_norm_10" -> "738 clamp_min_10";
+"738 clamp_min_10" -> "739 expand_as_10";
+"739 expand_as_10" -> "740 div_10";
+"740 div_10" -> "741 quantize_per_tensor_default_34";
+"741 quantize_per_tensor_default_34" -> "742 dequantize_per_tensor_default_34";
+"742 dequantize_per_tensor_default_34" -> "750 matmul_10";
+"743 linalg_vector_norm_11" -> "744 clamp_min_11";
+"744 clamp_min_11" -> "745 expand_as_11";
+"745 expand_as_11" -> "746 div_11";
+"746 div_11" -> "747 quantize_per_tensor_default_35";
+"747 quantize_per_tensor_default_35" -> "748 dequantize_per_tensor_default_35";
+"748 dequantize_per_tensor_default_35" -> "749 transpose_10";
+"749 transpose_10" -> "750 matmul_10";
+"750 matmul_10" -> "754 mul_11";
+"751 _param_constant95" -> "752 clamp_5";
+"752 clamp_5" -> "753 exp_5";
+"753 exp_5" -> "754 mul_11";
+"754 mul_11" -> "755 add_17";
+"755 add_17" -> "767 view_30";
+"756 new_zeros_2" -> "757 view_29";
+"757 view_29" -> "758 permute_26";
+"758 permute_26" -> "759 reshape_24";
+"759 reshape_24" -> "760 unsqueeze_14";
+"759 reshape_24" -> "761 unsqueeze_15";
+"760 unsqueeze_14" -> "762 sub_2";
+"761 unsqueeze_15" -> "762 sub_2";
+"762 sub_2" -> "763 ne_2";
+"762 sub_2" -> "764 masked_fill_4";
+"762 sub_2" -> "765 eq_2";
+"763 ne_2" -> "764 masked_fill_4";
+"764 masked_fill_4" -> "766 masked_fill_5";
+"765 eq_2" -> "766 masked_fill_5";
+"766 masked_fill_5" -> "768 unsqueeze_16";
+"767 view_30" -> "770 add_18";
+"768 unsqueeze_16" -> "769 unsqueeze_17";
+"769 unsqueeze_17" -> "770 add_18";
+"770 add_18" -> "771 view_31";
+"771 view_31" -> "772 softmax_5";
+"772 softmax_5" -> "773 dropout_20";
+"773 dropout_20" -> "774 matmul_11";
+"774 matmul_11" -> "775 transpose_11";
+"775 transpose_11" -> "776 reshape_25";
+"776 reshape_25" -> "778 reshape_25_0_0_nncf_smooth_quant_0";
+"777 linear_35_updated_constant0" -> "783 quantize_per_channel_default_36";
+"778 reshape_25_0_0_nncf_smooth_quant_0" -> "779 quantize_per_tensor_default_36";
+"779 quantize_per_tensor_default_36" -> "780 dequantize_per_tensor_default_36";
+"780 dequantize_per_tensor_default_36" -> "786 linear_35";
+"781 linear_35_scale_0" -> "783 quantize_per_channel_default_36";
+"781 linear_35_scale_0" -> "784 dequantize_per_channel_default_36";
+"782 linear_35_zero_point_0" -> "783 quantize_per_channel_default_36";
+"782 linear_35_zero_point_0" -> "784 dequantize_per_channel_default_36";
+"783 quantize_per_channel_default_36" -> "784 dequantize_per_channel_default_36";
+"784 dequantize_per_channel_default_36" -> "786 linear_35";
+"785 _param_constant97_0_0" -> "786 linear_35";
+"786 linear_35" -> "787 dropout_21";
+"787 dropout_21" -> "788 view_32";
+"788 view_32" -> "789 permute_27";
+"789 permute_27" -> "790 reshape_26";
+"790 reshape_26" -> "791 roll_5";
+"791 roll_5" -> "792 slice_101";
+"792 slice_101" -> "793 slice_102";
+"793 slice_102" -> "794 slice_103";
+"794 slice_103" -> "795 slice_104";
+"795 slice_104" -> "796 contiguous_9";
+"796 contiguous_9" -> "799 layer_norm_13";
+"797 _param_constant98" -> "799 layer_norm_13";
+"798 _param_constant99" -> "799 layer_norm_13";
+"799 layer_norm_13" -> "800 add_19";
+"800 add_19" -> "802 add_19_0_0_nncf_smooth_quant_0";
+"800 add_19" -> "827 add_20";
+"801 linear_36_updated_constant0" -> "807 quantize_per_channel_default_37";
+"802 add_19_0_0_nncf_smooth_quant_0" -> "803 quantize_per_tensor_default_37";
+"803 quantize_per_tensor_default_37" -> "804 dequantize_per_tensor_default_37";
+"804 dequantize_per_tensor_default_37" -> "810 linear_36";
+"805 linear_36_scale_0" -> "807 quantize_per_channel_default_37";
+"805 linear_36_scale_0" -> "808 dequantize_per_channel_default_37";
+"806 linear_36_zero_point_0" -> "807 quantize_per_channel_default_37";
+"806 linear_36_zero_point_0" -> "808 dequantize_per_channel_default_37";
+"807 quantize_per_channel_default_37" -> "808 dequantize_per_channel_default_37";
+"808 dequantize_per_channel_default_37" -> "810 linear_36";
+"809 _param_constant101_0_0" -> "810 linear_36";
+"810 linear_36" -> "811 gelu_5";
+"811 gelu_5" -> "812 dropout_22";
+"812 dropout_22" -> "814 dropout_22_0_0_nncf_smooth_quant_0";
+"813 linear_37_updated_constant0" -> "819 quantize_per_channel_default_38";
+"814 dropout_22_0_0_nncf_smooth_quant_0" -> "815 quantize_per_tensor_default_38";
+"815 quantize_per_tensor_default_38" -> "816 dequantize_per_tensor_default_38";
+"816 dequantize_per_tensor_default_38" -> "822 linear_37";
+"817 linear_37_scale_0" -> "819 quantize_per_channel_default_38";
+"817 linear_37_scale_0" -> "820 dequantize_per_channel_default_38";
+"818 linear_37_zero_point_0" -> "819 quantize_per_channel_default_38";
+"818 linear_37_zero_point_0" -> "820 dequantize_per_channel_default_38";
+"819 quantize_per_channel_default_38" -> "820 dequantize_per_channel_default_38";
+"820 dequantize_per_channel_default_38" -> "822 linear_37";
+"821 _param_constant103_0_0" -> "822 linear_37";
+"822 linear_37" -> "823 dropout_23";
+"823 dropout_23" -> "826 layer_norm_14";
+"824 _param_constant104" -> "826 layer_norm_14";
+"825 _param_constant105" -> "826 layer_norm_14";
+"826 layer_norm_14" -> "827 add_20";
+"827 add_20" -> "854 pad_8";
+"827 add_20" -> "919 add_22";
+"828 _tensor_constant39" -> "830 _tensor_constant39_0_0_nncf_smooth_quant_0";
+"829 linear_38_updated_constant0" -> "833 quantize_per_channel_default_39";
+"830 _tensor_constant39_0_0_nncf_smooth_quant_0" -> "836 linear_38";
+"831 linear_38_scale_0" -> "833 quantize_per_channel_default_39";
+"831 linear_38_scale_0" -> "834 dequantize_per_channel_default_39";
+"832 linear_38_zero_point_0" -> "833 quantize_per_channel_default_39";
+"832 linear_38_zero_point_0" -> "834 dequantize_per_channel_default_39";
+"833 quantize_per_channel_default_39" -> "834 dequantize_per_channel_default_39";
+"834 dequantize_per_channel_default_39" -> "836 linear_38";
+"835 _param_constant107_0_0" -> "836 linear_38";
+"836 linear_38" -> "837 relu__6";
+"837 relu__6" -> "839 relu__6_0_0_nncf_smooth_quant_0";
+"838 linear_39_updated_constant0" -> "842 quantize_per_channel_default_40";
+"839 relu__6_0_0_nncf_smooth_quant_0" -> "844 linear_39";
+"840 linear_39_scale_0" -> "842 quantize_per_channel_default_40";
+"840 linear_39_scale_0" -> "843 dequantize_per_channel_default_40";
+"841 linear_39_zero_point_0" -> "842 quantize_per_channel_default_40";
+"841 linear_39_zero_point_0" -> "843 dequantize_per_channel_default_40";
+"842 quantize_per_channel_default_40" -> "843 dequantize_per_channel_default_40";
+"843 dequantize_per_channel_default_40" -> "844 linear_39";
+"844 linear_39" -> "845 view_33";
+"845 view_33" -> "847 index_6";
+"846 _tensor_constant40" -> "847 index_6";
+"847 index_6" -> "848 view_34";
+"848 view_34" -> "849 permute_28";
+"849 permute_28" -> "850 contiguous_10";
+"850 contiguous_10" -> "851 unsqueeze_18";
+"851 unsqueeze_18" -> "852 sigmoid_6";
+"852 sigmoid_6" -> "853 mul_12";
+"853 mul_12" -> "891 add_21";
+"854 pad_8" -> "855 view_35";
+"855 view_35" -> "856 permute_29";
+"856 permute_29" -> "857 reshape_27";
+"857 reshape_27" -> "859 reshape_27_0_0_nncf_smooth_quant_0";
+"858 linear_40_updated_constant0" -> "864 quantize_per_channel_default_41";
+"859 reshape_27_0_0_nncf_smooth_quant_0" -> "860 quantize_per_tensor_default_39";
+"860 quantize_per_tensor_default_39" -> "861 dequantize_per_tensor_default_39";
+"861 dequantize_per_tensor_default_39" -> "867 linear_40";
+"862 linear_40_scale_0" -> "864 quantize_per_channel_default_41";
+"862 linear_40_scale_0" -> "865 dequantize_per_channel_default_41";
+"863 linear_40_zero_point_0" -> "864 quantize_per_channel_default_41";
+"863 linear_40_zero_point_0" -> "865 dequantize_per_channel_default_41";
+"864 quantize_per_channel_default_41" -> "865 dequantize_per_channel_default_41";
+"865 dequantize_per_channel_default_41" -> "867 linear_40";
+"866 _param_constant109_0_0" -> "867 linear_40";
+"867 linear_40" -> "868 reshape_28";
+"868 reshape_28" -> "869 permute_30";
+"869 permute_30" -> "870 select_18";
+"869 permute_30" -> "871 select_19";
+"869 permute_30" -> "872 select_20";
+"870 select_18" -> "873 linalg_vector_norm_12";
+"870 select_18" -> "875 expand_as_12";
+"870 select_18" -> "876 div_12";
+"871 select_19" -> "879 linalg_vector_norm_13";
+"871 select_19" -> "881 expand_as_13";
+"871 select_19" -> "882 div_13";
+"872 select_20" -> "894 matmul_13";
+"873 linalg_vector_norm_12" -> "874 clamp_min_12";
+"874 clamp_min_12" -> "875 expand_as_12";
+"875 expand_as_12" -> "876 div_12";
+"876 div_12" -> "877 quantize_per_tensor_default_40";
+"877 quantize_per_tensor_default_40" -> "878 dequantize_per_tensor_default_40";
+"878 dequantize_per_tensor_default_40" -> "886 matmul_12";
+"879 linalg_vector_norm_13" -> "880 clamp_min_13";
+"880 clamp_min_13" -> "881 expand_as_13";
+"881 expand_as_13" -> "882 div_13";
+"882 div_13" -> "883 quantize_per_tensor_default_41";
+"883 quantize_per_tensor_default_41" -> "884 dequantize_per_tensor_default_41";
+"884 dequantize_per_tensor_default_41" -> "885 transpose_12";
+"885 transpose_12" -> "886 matmul_12";
+"886 matmul_12" -> "890 mul_13";
+"887 _param_constant111" -> "888 clamp_6";
+"888 clamp_6" -> "889 exp_6";
+"889 exp_6" -> "890 mul_13";
+"890 mul_13" -> "891 add_21";
+"891 add_21" -> "892 softmax_6";
+"892 softmax_6" -> "893 dropout_24";
+"893 dropout_24" -> "894 matmul_13";
+"894 matmul_13" -> "895 transpose_13";
+"895 transpose_13" -> "896 reshape_29";
+"896 reshape_29" -> "898 reshape_29_0_0_nncf_smooth_quant_0";
+"897 linear_41_updated_constant0" -> "903 quantize_per_channel_default_42";
+"898 reshape_29_0_0_nncf_smooth_quant_0" -> "899 quantize_per_tensor_default_42";
+"899 quantize_per_tensor_default_42" -> "900 dequantize_per_tensor_default_42";
+"900 dequantize_per_tensor_default_42" -> "906 linear_41";
+"901 linear_41_scale_0" -> "903 quantize_per_channel_default_42";
+"901 linear_41_scale_0" -> "904 dequantize_per_channel_default_42";
+"902 linear_41_zero_point_0" -> "903 quantize_per_channel_default_42";
+"902 linear_41_zero_point_0" -> "904 dequantize_per_channel_default_42";
+"903 quantize_per_channel_default_42" -> "904 dequantize_per_channel_default_42";
+"904 dequantize_per_channel_default_42" -> "906 linear_41";
+"905 _param_constant113_0_0" -> "906 linear_41";
+"906 linear_41" -> "907 dropout_25";
+"907 dropout_25" -> "908 view_36";
+"908 view_36" -> "909 permute_31";
+"909 permute_31" -> "910 reshape_30";
+"910 reshape_30" -> "911 slice_106";
+"911 slice_106" -> "912 slice_107";
+"912 slice_107" -> "913 slice_108";
+"913 slice_108" -> "914 slice_109";
+"914 slice_109" -> "915 contiguous_11";
+"915 contiguous_11" -> "918 layer_norm_15";
+"916 _param_constant114" -> "918 layer_norm_15";
+"917 _param_constant115" -> "918 layer_norm_15";
+"918 layer_norm_15" -> "919 add_22";
+"919 add_22" -> "921 add_22_0_0_nncf_smooth_quant_0";
+"919 add_22" -> "946 add_23";
+"920 linear_42_updated_constant0" -> "926 quantize_per_channel_default_43";
+"921 add_22_0_0_nncf_smooth_quant_0" -> "922 quantize_per_tensor_default_43";
+"922 quantize_per_tensor_default_43" -> "923 dequantize_per_tensor_default_43";
+"923 dequantize_per_tensor_default_43" -> "929 linear_42";
+"924 linear_42_scale_0" -> "926 quantize_per_channel_default_43";
+"924 linear_42_scale_0" -> "927 dequantize_per_channel_default_43";
+"925 linear_42_zero_point_0" -> "926 quantize_per_channel_default_43";
+"925 linear_42_zero_point_0" -> "927 dequantize_per_channel_default_43";
+"926 quantize_per_channel_default_43" -> "927 dequantize_per_channel_default_43";
+"927 dequantize_per_channel_default_43" -> "929 linear_42";
+"928 _param_constant117_0_0" -> "929 linear_42";
+"929 linear_42" -> "930 gelu_6";
+"930 gelu_6" -> "931 dropout_26";
+"931 dropout_26" -> "933 dropout_26_0_0_nncf_smooth_quant_0";
+"932 linear_43_updated_constant0" -> "938 quantize_per_channel_default_44";
+"933 dropout_26_0_0_nncf_smooth_quant_0" -> "934 quantize_per_tensor_default_44";
+"934 quantize_per_tensor_default_44" -> "935 dequantize_per_tensor_default_44";
+"935 dequantize_per_tensor_default_44" -> "941 linear_43";
+"936 linear_43_scale_0" -> "938 quantize_per_channel_default_44";
+"936 linear_43_scale_0" -> "939 dequantize_per_channel_default_44";
+"937 linear_43_zero_point_0" -> "938 quantize_per_channel_default_44";
+"937 linear_43_zero_point_0" -> "939 dequantize_per_channel_default_44";
+"938 quantize_per_channel_default_44" -> "939 dequantize_per_channel_default_44";
+"939 dequantize_per_channel_default_44" -> "941 linear_43";
+"940 _param_constant119_0_0" -> "941 linear_43";
+"941 linear_43" -> "942 dropout_27";
+"942 dropout_27" -> "945 layer_norm_16";
+"943 _param_constant120" -> "945 layer_norm_16";
+"944 _param_constant121" -> "945 layer_norm_16";
+"945 layer_norm_16" -> "946 add_23";
+"946 add_23" -> "973 pad_9";
+"946 add_23" -> "1056 add_26";
+"947 _tensor_constant41" -> "949 _tensor_constant41_0_0_nncf_smooth_quant_0";
+"948 linear_44_updated_constant0" -> "952 quantize_per_channel_default_45";
+"949 _tensor_constant41_0_0_nncf_smooth_quant_0" -> "955 linear_44";
+"950 linear_44_scale_0" -> "952 quantize_per_channel_default_45";
+"950 linear_44_scale_0" -> "953 dequantize_per_channel_default_45";
+"951 linear_44_zero_point_0" -> "952 quantize_per_channel_default_45";
+"951 linear_44_zero_point_0" -> "953 dequantize_per_channel_default_45";
+"952 quantize_per_channel_default_45" -> "953 dequantize_per_channel_default_45";
+"953 dequantize_per_channel_default_45" -> "955 linear_44";
+"954 _param_constant123_0_0" -> "955 linear_44";
+"955 linear_44" -> "956 relu__7";
+"956 relu__7" -> "958 relu__7_0_0_nncf_smooth_quant_0";
+"957 linear_45_updated_constant0" -> "961 quantize_per_channel_default_46";
+"958 relu__7_0_0_nncf_smooth_quant_0" -> "963 linear_45";
+"959 linear_45_scale_0" -> "961 quantize_per_channel_default_46";
+"959 linear_45_scale_0" -> "962 dequantize_per_channel_default_46";
+"960 linear_45_zero_point_0" -> "961 quantize_per_channel_default_46";
+"960 linear_45_zero_point_0" -> "962 dequantize_per_channel_default_46";
+"961 quantize_per_channel_default_46" -> "962 dequantize_per_channel_default_46";
+"962 dequantize_per_channel_default_46" -> "963 linear_45";
+"963 linear_45" -> "964 view_37";
+"964 view_37" -> "966 index_7";
+"965 _tensor_constant42" -> "966 index_7";
+"966 index_7" -> "967 view_38";
+"967 view_38" -> "968 permute_32";
+"968 permute_32" -> "969 contiguous_12";
+"969 contiguous_12" -> "970 unsqueeze_19";
+"970 unsqueeze_19" -> "971 sigmoid_7";
+"971 sigmoid_7" -> "972 mul_14";
+"972 mul_14" -> "1011 add_24";
+"973 pad_9" -> "974 roll_6";
+"974 roll_6" -> "975 view_39";
+"975 view_39" -> "976 permute_33";
+"976 permute_33" -> "977 reshape_31";
+"977 reshape_31" -> "979 reshape_31_0_0_nncf_smooth_quant_0";
+"977 reshape_31" -> "1012 new_zeros_3";
+"978 linear_46_updated_constant0" -> "984 quantize_per_channel_default_47";
+"979 reshape_31_0_0_nncf_smooth_quant_0" -> "980 quantize_per_tensor_default_45";
+"980 quantize_per_tensor_default_45" -> "981 dequantize_per_tensor_default_45";
+"981 dequantize_per_tensor_default_45" -> "987 linear_46";
+"982 linear_46_scale_0" -> "984 quantize_per_channel_default_47";
+"982 linear_46_scale_0" -> "985 dequantize_per_channel_default_47";
+"983 linear_46_zero_point_0" -> "984 quantize_per_channel_default_47";
+"983 linear_46_zero_point_0" -> "985 dequantize_per_channel_default_47";
+"984 quantize_per_channel_default_47" -> "985 dequantize_per_channel_default_47";
+"985 dequantize_per_channel_default_47" -> "987 linear_46";
+"986 _param_constant125_0_0" -> "987 linear_46";
+"987 linear_46" -> "988 reshape_32";
+"988 reshape_32" -> "989 permute_34";
+"989 permute_34" -> "990 select_21";
+"989 permute_34" -> "991 select_22";
+"989 permute_34" -> "992 select_23";
+"990 select_21" -> "993 linalg_vector_norm_14";
+"990 select_21" -> "995 expand_as_14";
+"990 select_21" -> "996 div_14";
+"991 select_22" -> "999 linalg_vector_norm_15";
+"991 select_22" -> "1001 expand_as_15";
+"991 select_22" -> "1002 div_15";
+"992 select_23" -> "1030 matmul_15";
+"993 linalg_vector_norm_14" -> "994 clamp_min_14";
+"994 clamp_min_14" -> "995 expand_as_14";
+"995 expand_as_14" -> "996 div_14";
+"996 div_14" -> "997 quantize_per_tensor_default_46";
+"997 quantize_per_tensor_default_46" -> "998 dequantize_per_tensor_default_46";
+"998 dequantize_per_tensor_default_46" -> "1006 matmul_14";
+"999 linalg_vector_norm_15" -> "1000 clamp_min_15";
+"1000 clamp_min_15" -> "1001 expand_as_15";
+"1001 expand_as_15" -> "1002 div_15";
+"1002 div_15" -> "1003 quantize_per_tensor_default_47";
+"1003 quantize_per_tensor_default_47" -> "1004 dequantize_per_tensor_default_47";
+"1004 dequantize_per_tensor_default_47" -> "1005 transpose_14";
+"1005 transpose_14" -> "1006 matmul_14";
+"1006 matmul_14" -> "1010 mul_15";
+"1007 _param_constant127" -> "1008 clamp_7";
+"1008 clamp_7" -> "1009 exp_7";
+"1009 exp_7" -> "1010 mul_15";
+"1010 mul_15" -> "1011 add_24";
+"1011 add_24" -> "1023 view_41";
+"1012 new_zeros_3" -> "1013 view_40";
+"1013 view_40" -> "1014 permute_35";
+"1014 permute_35" -> "1015 reshape_33";
+"1015 reshape_33" -> "1016 unsqueeze_20";
+"1015 reshape_33" -> "1017 unsqueeze_21";
+"1016 unsqueeze_20" -> "1018 sub_3";
+"1017 unsqueeze_21" -> "1018 sub_3";
+"1018 sub_3" -> "1019 ne_3";
+"1018 sub_3" -> "1020 masked_fill_6";
+"1018 sub_3" -> "1021 eq_3";
+"1019 ne_3" -> "1020 masked_fill_6";
+"1020 masked_fill_6" -> "1022 masked_fill_7";
+"1021 eq_3" -> "1022 masked_fill_7";
+"1022 masked_fill_7" -> "1024 unsqueeze_22";
+"1023 view_41" -> "1026 add_25";
+"1024 unsqueeze_22" -> "1025 unsqueeze_23";
+"1025 unsqueeze_23" -> "1026 add_25";
+"1026 add_25" -> "1027 view_42";
+"1027 view_42" -> "1028 softmax_7";
+"1028 softmax_7" -> "1029 dropout_28";
+"1029 dropout_28" -> "1030 matmul_15";
+"1030 matmul_15" -> "1031 transpose_15";
+"1031 transpose_15" -> "1032 reshape_34";
+"1032 reshape_34" -> "1034 reshape_34_0_0_nncf_smooth_quant_0";
+"1033 linear_47_updated_constant0" -> "1039 quantize_per_channel_default_48";
+"1034 reshape_34_0_0_nncf_smooth_quant_0" -> "1035 quantize_per_tensor_default_48";
+"1035 quantize_per_tensor_default_48" -> "1036 dequantize_per_tensor_default_48";
+"1036 dequantize_per_tensor_default_48" -> "1042 linear_47";
+"1037 linear_47_scale_0" -> "1039 quantize_per_channel_default_48";
+"1037 linear_47_scale_0" -> "1040 dequantize_per_channel_default_48";
+"1038 linear_47_zero_point_0" -> "1039 quantize_per_channel_default_48";
+"1038 linear_47_zero_point_0" -> "1040 dequantize_per_channel_default_48";
+"1039 quantize_per_channel_default_48" -> "1040 dequantize_per_channel_default_48";
+"1040 dequantize_per_channel_default_48" -> "1042 linear_47";
+"1041 _param_constant129_0_0" -> "1042 linear_47";
+"1042 linear_47" -> "1043 dropout_29";
+"1043 dropout_29" -> "1044 view_43";
+"1044 view_43" -> "1045 permute_36";
+"1045 permute_36" -> "1046 reshape_35";
+"1046 reshape_35" -> "1047 roll_7";
+"1047 roll_7" -> "1048 slice_129";
+"1048 slice_129" -> "1049 slice_130";
+"1049 slice_130" -> "1050 slice_131";
+"1050 slice_131" -> "1051 slice_132";
+"1051 slice_132" -> "1052 contiguous_13";
+"1052 contiguous_13" -> "1055 layer_norm_17";
+"1053 _param_constant130" -> "1055 layer_norm_17";
+"1054 _param_constant131" -> "1055 layer_norm_17";
+"1055 layer_norm_17" -> "1056 add_26";
+"1056 add_26" -> "1058 add_26_0_0_nncf_smooth_quant_0";
+"1056 add_26" -> "1083 add_27";
+"1057 linear_48_updated_constant0" -> "1063 quantize_per_channel_default_49";
+"1058 add_26_0_0_nncf_smooth_quant_0" -> "1059 quantize_per_tensor_default_49";
+"1059 quantize_per_tensor_default_49" -> "1060 dequantize_per_tensor_default_49";
+"1060 dequantize_per_tensor_default_49" -> "1066 linear_48";
+"1061 linear_48_scale_0" -> "1063 quantize_per_channel_default_49";
+"1061 linear_48_scale_0" -> "1064 dequantize_per_channel_default_49";
+"1062 linear_48_zero_point_0" -> "1063 quantize_per_channel_default_49";
+"1062 linear_48_zero_point_0" -> "1064 dequantize_per_channel_default_49";
+"1063 quantize_per_channel_default_49" -> "1064 dequantize_per_channel_default_49";
+"1064 dequantize_per_channel_default_49" -> "1066 linear_48";
+"1065 _param_constant133_0_0" -> "1066 linear_48";
+"1066 linear_48" -> "1067 gelu_7";
+"1067 gelu_7" -> "1068 dropout_30";
+"1068 dropout_30" -> "1070 dropout_30_0_0_nncf_smooth_quant_0";
+"1069 linear_49_updated_constant0" -> "1075 quantize_per_channel_default_50";
+"1070 dropout_30_0_0_nncf_smooth_quant_0" -> "1071 quantize_per_tensor_default_50";
+"1071 quantize_per_tensor_default_50" -> "1072 dequantize_per_tensor_default_50";
+"1072 dequantize_per_tensor_default_50" -> "1078 linear_49";
+"1073 linear_49_scale_0" -> "1075 quantize_per_channel_default_50";
+"1073 linear_49_scale_0" -> "1076 dequantize_per_channel_default_50";
+"1074 linear_49_zero_point_0" -> "1075 quantize_per_channel_default_50";
+"1074 linear_49_zero_point_0" -> "1076 dequantize_per_channel_default_50";
+"1075 quantize_per_channel_default_50" -> "1076 dequantize_per_channel_default_50";
+"1076 dequantize_per_channel_default_50" -> "1078 linear_49";
+"1077 _param_constant135_0_0" -> "1078 linear_49";
+"1078 linear_49" -> "1079 dropout_31";
+"1079 dropout_31" -> "1082 layer_norm_18";
+"1080 _param_constant136" -> "1082 layer_norm_18";
+"1081 _param_constant137" -> "1082 layer_norm_18";
+"1082 layer_norm_18" -> "1083 add_27";
+"1083 add_27" -> "1110 pad_10";
+"1083 add_27" -> "1175 add_29";
+"1084 _tensor_constant52" -> "1086 _tensor_constant52_0_0_nncf_smooth_quant_0";
+"1085 linear_50_updated_constant0" -> "1089 quantize_per_channel_default_51";
+"1086 _tensor_constant52_0_0_nncf_smooth_quant_0" -> "1092 linear_50";
+"1087 linear_50_scale_0" -> "1089 quantize_per_channel_default_51";
+"1087 linear_50_scale_0" -> "1090 dequantize_per_channel_default_51";
+"1088 linear_50_zero_point_0" -> "1089 quantize_per_channel_default_51";
+"1088 linear_50_zero_point_0" -> "1090 dequantize_per_channel_default_51";
+"1089 quantize_per_channel_default_51" -> "1090 dequantize_per_channel_default_51";
+"1090 dequantize_per_channel_default_51" -> "1092 linear_50";
+"1091 _param_constant139_0_0" -> "1092 linear_50";
+"1092 linear_50" -> "1093 relu__8";
+"1093 relu__8" -> "1095 relu__8_0_0_nncf_smooth_quant_0";
+"1094 linear_51_updated_constant0" -> "1098 quantize_per_channel_default_52";
+"1095 relu__8_0_0_nncf_smooth_quant_0" -> "1100 linear_51";
+"1096 linear_51_scale_0" -> "1098 quantize_per_channel_default_52";
+"1096 linear_51_scale_0" -> "1099 dequantize_per_channel_default_52";
+"1097 linear_51_zero_point_0" -> "1098 quantize_per_channel_default_52";
+"1097 linear_51_zero_point_0" -> "1099 dequantize_per_channel_default_52";
+"1098 quantize_per_channel_default_52" -> "1099 dequantize_per_channel_default_52";
+"1099 dequantize_per_channel_default_52" -> "1100 linear_51";
+"1100 linear_51" -> "1101 view_44";
+"1101 view_44" -> "1103 index_8";
+"1102 _tensor_constant53" -> "1103 index_8";
+"1103 index_8" -> "1104 view_45";
+"1104 view_45" -> "1105 permute_37";
+"1105 permute_37" -> "1106 contiguous_14";
+"1106 contiguous_14" -> "1107 unsqueeze_24";
+"1107 unsqueeze_24" -> "1108 sigmoid_8";
+"1108 sigmoid_8" -> "1109 mul_16";
+"1109 mul_16" -> "1147 add_28";
+"1110 pad_10" -> "1111 view_46";
+"1111 view_46" -> "1112 permute_38";
+"1112 permute_38" -> "1113 reshape_36";
+"1113 reshape_36" -> "1115 reshape_36_0_0_nncf_smooth_quant_0";
+"1114 linear_52_updated_constant0" -> "1120 quantize_per_channel_default_53";
+"1115 reshape_36_0_0_nncf_smooth_quant_0" -> "1116 quantize_per_tensor_default_51";
+"1116 quantize_per_tensor_default_51" -> "1117 dequantize_per_tensor_default_51";
+"1117 dequantize_per_tensor_default_51" -> "1123 linear_52";
+"1118 linear_52_scale_0" -> "1120 quantize_per_channel_default_53";
+"1118 linear_52_scale_0" -> "1121 dequantize_per_channel_default_53";
+"1119 linear_52_zero_point_0" -> "1120 quantize_per_channel_default_53";
+"1119 linear_52_zero_point_0" -> "1121 dequantize_per_channel_default_53";
+"1120 quantize_per_channel_default_53" -> "1121 dequantize_per_channel_default_53";
+"1121 dequantize_per_channel_default_53" -> "1123 linear_52";
+"1122 _param_constant141_0_0" -> "1123 linear_52";
+"1123 linear_52" -> "1124 reshape_37";
+"1124 reshape_37" -> "1125 permute_39";
+"1125 permute_39" -> "1126 select_24";
+"1125 permute_39" -> "1127 select_25";
+"1125 permute_39" -> "1128 select_26";
+"1126 select_24" -> "1129 linalg_vector_norm_16";
+"1126 select_24" -> "1131 expand_as_16";
+"1126 select_24" -> "1132 div_16";
+"1127 select_25" -> "1135 linalg_vector_norm_17";
+"1127 select_25" -> "1137 expand_as_17";
+"1127 select_25" -> "1138 div_17";
+"1128 select_26" -> "1150 matmul_17";
+"1129 linalg_vector_norm_16" -> "1130 clamp_min_16";
+"1130 clamp_min_16" -> "1131 expand_as_16";
+"1131 expand_as_16" -> "1132 div_16";
+"1132 div_16" -> "1133 quantize_per_tensor_default_52";
+"1133 quantize_per_tensor_default_52" -> "1134 dequantize_per_tensor_default_52";
+"1134 dequantize_per_tensor_default_52" -> "1142 matmul_16";
+"1135 linalg_vector_norm_17" -> "1136 clamp_min_17";
+"1136 clamp_min_17" -> "1137 expand_as_17";
+"1137 expand_as_17" -> "1138 div_17";
+"1138 div_17" -> "1139 quantize_per_tensor_default_53";
+"1139 quantize_per_tensor_default_53" -> "1140 dequantize_per_tensor_default_53";
+"1140 dequantize_per_tensor_default_53" -> "1141 transpose_16";
+"1141 transpose_16" -> "1142 matmul_16";
+"1142 matmul_16" -> "1146 mul_17";
+"1143 _param_constant143" -> "1144 clamp_8";
+"1144 clamp_8" -> "1145 exp_8";
+"1145 exp_8" -> "1146 mul_17";
+"1146 mul_17" -> "1147 add_28";
+"1147 add_28" -> "1148 softmax_8";
+"1148 softmax_8" -> "1149 dropout_32";
+"1149 dropout_32" -> "1150 matmul_17";
+"1150 matmul_17" -> "1151 transpose_17";
+"1151 transpose_17" -> "1152 reshape_38";
+"1152 reshape_38" -> "1154 reshape_38_0_0_nncf_smooth_quant_0";
+"1153 linear_53_updated_constant0" -> "1159 quantize_per_channel_default_54";
+"1154 reshape_38_0_0_nncf_smooth_quant_0" -> "1155 quantize_per_tensor_default_54";
+"1155 quantize_per_tensor_default_54" -> "1156 dequantize_per_tensor_default_54";
+"1156 dequantize_per_tensor_default_54" -> "1162 linear_53";
+"1157 linear_53_scale_0" -> "1159 quantize_per_channel_default_54";
+"1157 linear_53_scale_0" -> "1160 dequantize_per_channel_default_54";
+"1158 linear_53_zero_point_0" -> "1159 quantize_per_channel_default_54";
+"1158 linear_53_zero_point_0" -> "1160 dequantize_per_channel_default_54";
+"1159 quantize_per_channel_default_54" -> "1160 dequantize_per_channel_default_54";
+"1160 dequantize_per_channel_default_54" -> "1162 linear_53";
+"1161 _param_constant145_0_0" -> "1162 linear_53";
+"1162 linear_53" -> "1163 dropout_33";
+"1163 dropout_33" -> "1164 view_47";
+"1164 view_47" -> "1165 permute_40";
+"1165 permute_40" -> "1166 reshape_39";
+"1166 reshape_39" -> "1167 slice_134";
+"1167 slice_134" -> "1168 slice_135";
+"1168 slice_135" -> "1169 slice_136";
+"1169 slice_136" -> "1170 slice_137";
+"1170 slice_137" -> "1171 contiguous_15";
+"1171 contiguous_15" -> "1174 layer_norm_19";
+"1172 _param_constant146" -> "1174 layer_norm_19";
+"1173 _param_constant147" -> "1174 layer_norm_19";
+"1174 layer_norm_19" -> "1175 add_29";
+"1175 add_29" -> "1177 add_29_0_0_nncf_smooth_quant_0";
+"1175 add_29" -> "1202 add_30";
+"1176 linear_54_updated_constant0" -> "1182 quantize_per_channel_default_55";
+"1177 add_29_0_0_nncf_smooth_quant_0" -> "1178 quantize_per_tensor_default_55";
+"1178 quantize_per_tensor_default_55" -> "1179 dequantize_per_tensor_default_55";
+"1179 dequantize_per_tensor_default_55" -> "1185 linear_54";
+"1180 linear_54_scale_0" -> "1182 quantize_per_channel_default_55";
+"1180 linear_54_scale_0" -> "1183 dequantize_per_channel_default_55";
+"1181 linear_54_zero_point_0" -> "1182 quantize_per_channel_default_55";
+"1181 linear_54_zero_point_0" -> "1183 dequantize_per_channel_default_55";
+"1182 quantize_per_channel_default_55" -> "1183 dequantize_per_channel_default_55";
+"1183 dequantize_per_channel_default_55" -> "1185 linear_54";
+"1184 _param_constant149_0_0" -> "1185 linear_54";
+"1185 linear_54" -> "1186 gelu_8";
+"1186 gelu_8" -> "1187 dropout_34";
+"1187 dropout_34" -> "1189 dropout_34_0_0_nncf_smooth_quant_0";
+"1188 linear_55_updated_constant0" -> "1194 quantize_per_channel_default_56";
+"1189 dropout_34_0_0_nncf_smooth_quant_0" -> "1190 quantize_per_tensor_default_56";
+"1190 quantize_per_tensor_default_56" -> "1191 dequantize_per_tensor_default_56";
+"1191 dequantize_per_tensor_default_56" -> "1197 linear_55";
+"1192 linear_55_scale_0" -> "1194 quantize_per_channel_default_56";
+"1192 linear_55_scale_0" -> "1195 dequantize_per_channel_default_56";
+"1193 linear_55_zero_point_0" -> "1194 quantize_per_channel_default_56";
+"1193 linear_55_zero_point_0" -> "1195 dequantize_per_channel_default_56";
+"1194 quantize_per_channel_default_56" -> "1195 dequantize_per_channel_default_56";
+"1195 dequantize_per_channel_default_56" -> "1197 linear_55";
+"1196 _param_constant151_0_0" -> "1197 linear_55";
+"1197 linear_55" -> "1198 dropout_35";
+"1198 dropout_35" -> "1201 layer_norm_20";
+"1199 _param_constant152" -> "1201 layer_norm_20";
+"1200 _param_constant153" -> "1201 layer_norm_20";
+"1201 layer_norm_20" -> "1202 add_30";
+"1202 add_30" -> "1229 pad_11";
+"1202 add_30" -> "1312 add_33";
+"1203 _tensor_constant54" -> "1205 _tensor_constant54_0_0_nncf_smooth_quant_0";
+"1204 linear_56_updated_constant0" -> "1208 quantize_per_channel_default_57";
+"1205 _tensor_constant54_0_0_nncf_smooth_quant_0" -> "1211 linear_56";
+"1206 linear_56_scale_0" -> "1208 quantize_per_channel_default_57";
+"1206 linear_56_scale_0" -> "1209 dequantize_per_channel_default_57";
+"1207 linear_56_zero_point_0" -> "1208 quantize_per_channel_default_57";
+"1207 linear_56_zero_point_0" -> "1209 dequantize_per_channel_default_57";
+"1208 quantize_per_channel_default_57" -> "1209 dequantize_per_channel_default_57";
+"1209 dequantize_per_channel_default_57" -> "1211 linear_56";
+"1210 _param_constant155_0_0" -> "1211 linear_56";
+"1211 linear_56" -> "1212 relu__9";
+"1212 relu__9" -> "1214 relu__9_0_0_nncf_smooth_quant_0";
+"1213 linear_57_updated_constant0" -> "1217 quantize_per_channel_default_58";
+"1214 relu__9_0_0_nncf_smooth_quant_0" -> "1219 linear_57";
+"1215 linear_57_scale_0" -> "1217 quantize_per_channel_default_58";
+"1215 linear_57_scale_0" -> "1218 dequantize_per_channel_default_58";
+"1216 linear_57_zero_point_0" -> "1217 quantize_per_channel_default_58";
+"1216 linear_57_zero_point_0" -> "1218 dequantize_per_channel_default_58";
+"1217 quantize_per_channel_default_58" -> "1218 dequantize_per_channel_default_58";
+"1218 dequantize_per_channel_default_58" -> "1219 linear_57";
+"1219 linear_57" -> "1220 view_48";
+"1220 view_48" -> "1222 index_9";
+"1221 _tensor_constant55" -> "1222 index_9";
+"1222 index_9" -> "1223 view_49";
+"1223 view_49" -> "1224 permute_41";
+"1224 permute_41" -> "1225 contiguous_16";
+"1225 contiguous_16" -> "1226 unsqueeze_25";
+"1226 unsqueeze_25" -> "1227 sigmoid_9";
+"1227 sigmoid_9" -> "1228 mul_18";
+"1228 mul_18" -> "1267 add_31";
+"1229 pad_11" -> "1230 roll_8";
+"1230 roll_8" -> "1231 view_50";
+"1231 view_50" -> "1232 permute_42";
+"1232 permute_42" -> "1233 reshape_40";
+"1233 reshape_40" -> "1235 reshape_40_0_0_nncf_smooth_quant_0";
+"1233 reshape_40" -> "1268 new_zeros_4";
+"1234 linear_58_updated_constant0" -> "1240 quantize_per_channel_default_59";
+"1235 reshape_40_0_0_nncf_smooth_quant_0" -> "1236 quantize_per_tensor_default_57";
+"1236 quantize_per_tensor_default_57" -> "1237 dequantize_per_tensor_default_57";
+"1237 dequantize_per_tensor_default_57" -> "1243 linear_58";
+"1238 linear_58_scale_0" -> "1240 quantize_per_channel_default_59";
+"1238 linear_58_scale_0" -> "1241 dequantize_per_channel_default_59";
+"1239 linear_58_zero_point_0" -> "1240 quantize_per_channel_default_59";
+"1239 linear_58_zero_point_0" -> "1241 dequantize_per_channel_default_59";
+"1240 quantize_per_channel_default_59" -> "1241 dequantize_per_channel_default_59";
+"1241 dequantize_per_channel_default_59" -> "1243 linear_58";
+"1242 _param_constant157_0_0" -> "1243 linear_58";
+"1243 linear_58" -> "1244 reshape_41";
+"1244 reshape_41" -> "1245 permute_43";
+"1245 permute_43" -> "1246 select_27";
+"1245 permute_43" -> "1247 select_28";
+"1245 permute_43" -> "1248 select_29";
+"1246 select_27" -> "1249 linalg_vector_norm_18";
+"1246 select_27" -> "1251 expand_as_18";
+"1246 select_27" -> "1252 div_18";
+"1247 select_28" -> "1255 linalg_vector_norm_19";
+"1247 select_28" -> "1257 expand_as_19";
+"1247 select_28" -> "1258 div_19";
+"1248 select_29" -> "1286 matmul_19";
+"1249 linalg_vector_norm_18" -> "1250 clamp_min_18";
+"1250 clamp_min_18" -> "1251 expand_as_18";
+"1251 expand_as_18" -> "1252 div_18";
+"1252 div_18" -> "1253 quantize_per_tensor_default_58";
+"1253 quantize_per_tensor_default_58" -> "1254 dequantize_per_tensor_default_58";
+"1254 dequantize_per_tensor_default_58" -> "1262 matmul_18";
+"1255 linalg_vector_norm_19" -> "1256 clamp_min_19";
+"1256 clamp_min_19" -> "1257 expand_as_19";
+"1257 expand_as_19" -> "1258 div_19";
+"1258 div_19" -> "1259 quantize_per_tensor_default_59";
+"1259 quantize_per_tensor_default_59" -> "1260 dequantize_per_tensor_default_59";
+"1260 dequantize_per_tensor_default_59" -> "1261 transpose_18";
+"1261 transpose_18" -> "1262 matmul_18";
+"1262 matmul_18" -> "1266 mul_19";
+"1263 _param_constant159" -> "1264 clamp_9";
+"1264 clamp_9" -> "1265 exp_9";
+"1265 exp_9" -> "1266 mul_19";
+"1266 mul_19" -> "1267 add_31";
+"1267 add_31" -> "1279 view_52";
+"1268 new_zeros_4" -> "1269 view_51";
+"1269 view_51" -> "1270 permute_44";
+"1270 permute_44" -> "1271 reshape_42";
+"1271 reshape_42" -> "1272 unsqueeze_26";
+"1271 reshape_42" -> "1273 unsqueeze_27";
+"1272 unsqueeze_26" -> "1274 sub_4";
+"1273 unsqueeze_27" -> "1274 sub_4";
+"1274 sub_4" -> "1275 ne_4";
+"1274 sub_4" -> "1276 masked_fill_8";
+"1274 sub_4" -> "1277 eq_4";
+"1275 ne_4" -> "1276 masked_fill_8";
+"1276 masked_fill_8" -> "1278 masked_fill_9";
+"1277 eq_4" -> "1278 masked_fill_9";
+"1278 masked_fill_9" -> "1280 unsqueeze_28";
+"1279 view_52" -> "1282 add_32";
+"1280 unsqueeze_28" -> "1281 unsqueeze_29";
+"1281 unsqueeze_29" -> "1282 add_32";
+"1282 add_32" -> "1283 view_53";
+"1283 view_53" -> "1284 softmax_9";
+"1284 softmax_9" -> "1285 dropout_36";
+"1285 dropout_36" -> "1286 matmul_19";
+"1286 matmul_19" -> "1287 transpose_19";
+"1287 transpose_19" -> "1288 reshape_43";
+"1288 reshape_43" -> "1290 reshape_43_0_0_nncf_smooth_quant_0";
+"1289 linear_59_updated_constant0" -> "1295 quantize_per_channel_default_60";
+"1290 reshape_43_0_0_nncf_smooth_quant_0" -> "1291 quantize_per_tensor_default_60";
+"1291 quantize_per_tensor_default_60" -> "1292 dequantize_per_tensor_default_60";
+"1292 dequantize_per_tensor_default_60" -> "1298 linear_59";
+"1293 linear_59_scale_0" -> "1295 quantize_per_channel_default_60";
+"1293 linear_59_scale_0" -> "1296 dequantize_per_channel_default_60";
+"1294 linear_59_zero_point_0" -> "1295 quantize_per_channel_default_60";
+"1294 linear_59_zero_point_0" -> "1296 dequantize_per_channel_default_60";
+"1295 quantize_per_channel_default_60" -> "1296 dequantize_per_channel_default_60";
+"1296 dequantize_per_channel_default_60" -> "1298 linear_59";
+"1297 _param_constant161_0_0" -> "1298 linear_59";
+"1298 linear_59" -> "1299 dropout_37";
+"1299 dropout_37" -> "1300 view_54";
+"1300 view_54" -> "1301 permute_45";
+"1301 permute_45" -> "1302 reshape_44";
+"1302 reshape_44" -> "1303 roll_9";
+"1303 roll_9" -> "1304 slice_157";
+"1304 slice_157" -> "1305 slice_158";
+"1305 slice_158" -> "1306 slice_159";
+"1306 slice_159" -> "1307 slice_160";
+"1307 slice_160" -> "1308 contiguous_17";
+"1308 contiguous_17" -> "1311 layer_norm_21";
+"1309 _param_constant162" -> "1311 layer_norm_21";
+"1310 _param_constant163" -> "1311 layer_norm_21";
+"1311 layer_norm_21" -> "1312 add_33";
+"1312 add_33" -> "1314 add_33_0_0_nncf_smooth_quant_0";
+"1312 add_33" -> "1339 add_34";
+"1313 linear_60_updated_constant0" -> "1319 quantize_per_channel_default_61";
+"1314 add_33_0_0_nncf_smooth_quant_0" -> "1315 quantize_per_tensor_default_61";
+"1315 quantize_per_tensor_default_61" -> "1316 dequantize_per_tensor_default_61";
+"1316 dequantize_per_tensor_default_61" -> "1322 linear_60";
+"1317 linear_60_scale_0" -> "1319 quantize_per_channel_default_61";
+"1317 linear_60_scale_0" -> "1320 dequantize_per_channel_default_61";
+"1318 linear_60_zero_point_0" -> "1319 quantize_per_channel_default_61";
+"1318 linear_60_zero_point_0" -> "1320 dequantize_per_channel_default_61";
+"1319 quantize_per_channel_default_61" -> "1320 dequantize_per_channel_default_61";
+"1320 dequantize_per_channel_default_61" -> "1322 linear_60";
+"1321 _param_constant165_0_0" -> "1322 linear_60";
+"1322 linear_60" -> "1323 gelu_9";
+"1323 gelu_9" -> "1324 dropout_38";
+"1324 dropout_38" -> "1326 dropout_38_0_0_nncf_smooth_quant_0";
+"1325 linear_61_updated_constant0" -> "1331 quantize_per_channel_default_62";
+"1326 dropout_38_0_0_nncf_smooth_quant_0" -> "1327 quantize_per_tensor_default_62";
+"1327 quantize_per_tensor_default_62" -> "1328 dequantize_per_tensor_default_62";
+"1328 dequantize_per_tensor_default_62" -> "1334 linear_61";
+"1329 linear_61_scale_0" -> "1331 quantize_per_channel_default_62";
+"1329 linear_61_scale_0" -> "1332 dequantize_per_channel_default_62";
+"1330 linear_61_zero_point_0" -> "1331 quantize_per_channel_default_62";
+"1330 linear_61_zero_point_0" -> "1332 dequantize_per_channel_default_62";
+"1331 quantize_per_channel_default_62" -> "1332 dequantize_per_channel_default_62";
+"1332 dequantize_per_channel_default_62" -> "1334 linear_61";
+"1333 _param_constant167_0_0" -> "1334 linear_61";
+"1334 linear_61" -> "1335 dropout_39";
+"1335 dropout_39" -> "1338 layer_norm_22";
+"1336 _param_constant168" -> "1338 layer_norm_22";
+"1337 _param_constant169" -> "1338 layer_norm_22";
+"1338 layer_norm_22" -> "1339 add_34";
+"1339 add_34" -> "1366 pad_12";
+"1339 add_34" -> "1431 add_36";
+"1340 _tensor_constant65" -> "1342 _tensor_constant65_0_0_nncf_smooth_quant_0";
+"1341 linear_62_updated_constant0" -> "1345 quantize_per_channel_default_63";
+"1342 _tensor_constant65_0_0_nncf_smooth_quant_0" -> "1348 linear_62";
+"1343 linear_62_scale_0" -> "1345 quantize_per_channel_default_63";
+"1343 linear_62_scale_0" -> "1346 dequantize_per_channel_default_63";
+"1344 linear_62_zero_point_0" -> "1345 quantize_per_channel_default_63";
+"1344 linear_62_zero_point_0" -> "1346 dequantize_per_channel_default_63";
+"1345 quantize_per_channel_default_63" -> "1346 dequantize_per_channel_default_63";
+"1346 dequantize_per_channel_default_63" -> "1348 linear_62";
+"1347 _param_constant171_0_0" -> "1348 linear_62";
+"1348 linear_62" -> "1349 relu__10";
+"1349 relu__10" -> "1351 relu__10_0_0_nncf_smooth_quant_0";
+"1350 linear_63_updated_constant0" -> "1354 quantize_per_channel_default_64";
+"1351 relu__10_0_0_nncf_smooth_quant_0" -> "1356 linear_63";
+"1352 linear_63_scale_0" -> "1354 quantize_per_channel_default_64";
+"1352 linear_63_scale_0" -> "1355 dequantize_per_channel_default_64";
+"1353 linear_63_zero_point_0" -> "1354 quantize_per_channel_default_64";
+"1353 linear_63_zero_point_0" -> "1355 dequantize_per_channel_default_64";
+"1354 quantize_per_channel_default_64" -> "1355 dequantize_per_channel_default_64";
+"1355 dequantize_per_channel_default_64" -> "1356 linear_63";
+"1356 linear_63" -> "1357 view_55";
+"1357 view_55" -> "1359 index_10";
+"1358 _tensor_constant66" -> "1359 index_10";
+"1359 index_10" -> "1360 view_56";
+"1360 view_56" -> "1361 permute_46";
+"1361 permute_46" -> "1362 contiguous_18";
+"1362 contiguous_18" -> "1363 unsqueeze_30";
+"1363 unsqueeze_30" -> "1364 sigmoid_10";
+"1364 sigmoid_10" -> "1365 mul_20";
+"1365 mul_20" -> "1403 add_35";
+"1366 pad_12" -> "1367 view_57";
+"1367 view_57" -> "1368 permute_47";
+"1368 permute_47" -> "1369 reshape_45";
+"1369 reshape_45" -> "1371 reshape_45_0_0_nncf_smooth_quant_0";
+"1370 linear_64_updated_constant0" -> "1376 quantize_per_channel_default_65";
+"1371 reshape_45_0_0_nncf_smooth_quant_0" -> "1372 quantize_per_tensor_default_63";
+"1372 quantize_per_tensor_default_63" -> "1373 dequantize_per_tensor_default_63";
+"1373 dequantize_per_tensor_default_63" -> "1379 linear_64";
+"1374 linear_64_scale_0" -> "1376 quantize_per_channel_default_65";
+"1374 linear_64_scale_0" -> "1377 dequantize_per_channel_default_65";
+"1375 linear_64_zero_point_0" -> "1376 quantize_per_channel_default_65";
+"1375 linear_64_zero_point_0" -> "1377 dequantize_per_channel_default_65";
+"1376 quantize_per_channel_default_65" -> "1377 dequantize_per_channel_default_65";
+"1377 dequantize_per_channel_default_65" -> "1379 linear_64";
+"1378 _param_constant173_0_0" -> "1379 linear_64";
+"1379 linear_64" -> "1380 reshape_46";
+"1380 reshape_46" -> "1381 permute_48";
+"1381 permute_48" -> "1382 select_30";
+"1381 permute_48" -> "1383 select_31";
+"1381 permute_48" -> "1384 select_32";
+"1382 select_30" -> "1385 linalg_vector_norm_20";
+"1382 select_30" -> "1387 expand_as_20";
+"1382 select_30" -> "1388 div_20";
+"1383 select_31" -> "1391 linalg_vector_norm_21";
+"1383 select_31" -> "1393 expand_as_21";
+"1383 select_31" -> "1394 div_21";
+"1384 select_32" -> "1406 matmul_21";
+"1385 linalg_vector_norm_20" -> "1386 clamp_min_20";
+"1386 clamp_min_20" -> "1387 expand_as_20";
+"1387 expand_as_20" -> "1388 div_20";
+"1388 div_20" -> "1389 quantize_per_tensor_default_64";
+"1389 quantize_per_tensor_default_64" -> "1390 dequantize_per_tensor_default_64";
+"1390 dequantize_per_tensor_default_64" -> "1398 matmul_20";
+"1391 linalg_vector_norm_21" -> "1392 clamp_min_21";
+"1392 clamp_min_21" -> "1393 expand_as_21";
+"1393 expand_as_21" -> "1394 div_21";
+"1394 div_21" -> "1395 quantize_per_tensor_default_65";
+"1395 quantize_per_tensor_default_65" -> "1396 dequantize_per_tensor_default_65";
+"1396 dequantize_per_tensor_default_65" -> "1397 transpose_20";
+"1397 transpose_20" -> "1398 matmul_20";
+"1398 matmul_20" -> "1402 mul_21";
+"1399 _param_constant175" -> "1400 clamp_10";
+"1400 clamp_10" -> "1401 exp_10";
+"1401 exp_10" -> "1402 mul_21";
+"1402 mul_21" -> "1403 add_35";
+"1403 add_35" -> "1404 softmax_10";
+"1404 softmax_10" -> "1405 dropout_40";
+"1405 dropout_40" -> "1406 matmul_21";
+"1406 matmul_21" -> "1407 transpose_21";
+"1407 transpose_21" -> "1408 reshape_47";
+"1408 reshape_47" -> "1410 reshape_47_0_0_nncf_smooth_quant_0";
+"1409 linear_65_updated_constant0" -> "1415 quantize_per_channel_default_66";
+"1410 reshape_47_0_0_nncf_smooth_quant_0" -> "1411 quantize_per_tensor_default_66";
+"1411 quantize_per_tensor_default_66" -> "1412 dequantize_per_tensor_default_66";
+"1412 dequantize_per_tensor_default_66" -> "1418 linear_65";
+"1413 linear_65_scale_0" -> "1415 quantize_per_channel_default_66";
+"1413 linear_65_scale_0" -> "1416 dequantize_per_channel_default_66";
+"1414 linear_65_zero_point_0" -> "1415 quantize_per_channel_default_66";
+"1414 linear_65_zero_point_0" -> "1416 dequantize_per_channel_default_66";
+"1415 quantize_per_channel_default_66" -> "1416 dequantize_per_channel_default_66";
+"1416 dequantize_per_channel_default_66" -> "1418 linear_65";
+"1417 _param_constant177_0_0" -> "1418 linear_65";
+"1418 linear_65" -> "1419 dropout_41";
+"1419 dropout_41" -> "1420 view_58";
+"1420 view_58" -> "1421 permute_49";
+"1421 permute_49" -> "1422 reshape_48";
+"1422 reshape_48" -> "1423 slice_162";
+"1423 slice_162" -> "1424 slice_163";
+"1424 slice_163" -> "1425 slice_164";
+"1425 slice_164" -> "1426 slice_165";
+"1426 slice_165" -> "1427 contiguous_19";
+"1427 contiguous_19" -> "1430 layer_norm_23";
+"1428 _param_constant178" -> "1430 layer_norm_23";
+"1429 _param_constant179" -> "1430 layer_norm_23";
+"1430 layer_norm_23" -> "1431 add_36";
+"1431 add_36" -> "1433 add_36_0_0_nncf_smooth_quant_0";
+"1431 add_36" -> "1458 add_37";
+"1432 linear_66_updated_constant0" -> "1438 quantize_per_channel_default_67";
+"1433 add_36_0_0_nncf_smooth_quant_0" -> "1434 quantize_per_tensor_default_67";
+"1434 quantize_per_tensor_default_67" -> "1435 dequantize_per_tensor_default_67";
+"1435 dequantize_per_tensor_default_67" -> "1441 linear_66";
+"1436 linear_66_scale_0" -> "1438 quantize_per_channel_default_67";
+"1436 linear_66_scale_0" -> "1439 dequantize_per_channel_default_67";
+"1437 linear_66_zero_point_0" -> "1438 quantize_per_channel_default_67";
+"1437 linear_66_zero_point_0" -> "1439 dequantize_per_channel_default_67";
+"1438 quantize_per_channel_default_67" -> "1439 dequantize_per_channel_default_67";
+"1439 dequantize_per_channel_default_67" -> "1441 linear_66";
+"1440 _param_constant181_0_0" -> "1441 linear_66";
+"1441 linear_66" -> "1442 gelu_10";
+"1442 gelu_10" -> "1443 dropout_42";
+"1443 dropout_42" -> "1445 dropout_42_0_0_nncf_smooth_quant_0";
+"1444 linear_67_updated_constant0" -> "1450 quantize_per_channel_default_68";
+"1445 dropout_42_0_0_nncf_smooth_quant_0" -> "1446 quantize_per_tensor_default_68";
+"1446 quantize_per_tensor_default_68" -> "1447 dequantize_per_tensor_default_68";
+"1447 dequantize_per_tensor_default_68" -> "1453 linear_67";
+"1448 linear_67_scale_0" -> "1450 quantize_per_channel_default_68";
+"1448 linear_67_scale_0" -> "1451 dequantize_per_channel_default_68";
+"1449 linear_67_zero_point_0" -> "1450 quantize_per_channel_default_68";
+"1449 linear_67_zero_point_0" -> "1451 dequantize_per_channel_default_68";
+"1450 quantize_per_channel_default_68" -> "1451 dequantize_per_channel_default_68";
+"1451 dequantize_per_channel_default_68" -> "1453 linear_67";
+"1452 _param_constant183_0_0" -> "1453 linear_67";
+"1453 linear_67" -> "1454 dropout_43";
+"1454 dropout_43" -> "1457 layer_norm_24";
+"1455 _param_constant184" -> "1457 layer_norm_24";
+"1456 _param_constant185" -> "1457 layer_norm_24";
+"1457 layer_norm_24" -> "1458 add_37";
+"1458 add_37" -> "1485 pad_13";
+"1458 add_37" -> "1568 add_40";
+"1459 _tensor_constant67" -> "1461 _tensor_constant67_0_0_nncf_smooth_quant_0";
+"1460 linear_68_updated_constant0" -> "1464 quantize_per_channel_default_69";
+"1461 _tensor_constant67_0_0_nncf_smooth_quant_0" -> "1467 linear_68";
+"1462 linear_68_scale_0" -> "1464 quantize_per_channel_default_69";
+"1462 linear_68_scale_0" -> "1465 dequantize_per_channel_default_69";
+"1463 linear_68_zero_point_0" -> "1464 quantize_per_channel_default_69";
+"1463 linear_68_zero_point_0" -> "1465 dequantize_per_channel_default_69";
+"1464 quantize_per_channel_default_69" -> "1465 dequantize_per_channel_default_69";
+"1465 dequantize_per_channel_default_69" -> "1467 linear_68";
+"1466 _param_constant187_0_0" -> "1467 linear_68";
+"1467 linear_68" -> "1468 relu__11";
+"1468 relu__11" -> "1470 relu__11_0_0_nncf_smooth_quant_0";
+"1469 linear_69_updated_constant0" -> "1473 quantize_per_channel_default_70";
+"1470 relu__11_0_0_nncf_smooth_quant_0" -> "1475 linear_69";
+"1471 linear_69_scale_0" -> "1473 quantize_per_channel_default_70";
+"1471 linear_69_scale_0" -> "1474 dequantize_per_channel_default_70";
+"1472 linear_69_zero_point_0" -> "1473 quantize_per_channel_default_70";
+"1472 linear_69_zero_point_0" -> "1474 dequantize_per_channel_default_70";
+"1473 quantize_per_channel_default_70" -> "1474 dequantize_per_channel_default_70";
+"1474 dequantize_per_channel_default_70" -> "1475 linear_69";
+"1475 linear_69" -> "1476 view_59";
+"1476 view_59" -> "1478 index_11";
+"1477 _tensor_constant68" -> "1478 index_11";
+"1478 index_11" -> "1479 view_60";
+"1479 view_60" -> "1480 permute_50";
+"1480 permute_50" -> "1481 contiguous_20";
+"1481 contiguous_20" -> "1482 unsqueeze_31";
+"1482 unsqueeze_31" -> "1483 sigmoid_11";
+"1483 sigmoid_11" -> "1484 mul_22";
+"1484 mul_22" -> "1523 add_38";
+"1485 pad_13" -> "1486 roll_10";
+"1486 roll_10" -> "1487 view_61";
+"1487 view_61" -> "1488 permute_51";
+"1488 permute_51" -> "1489 reshape_49";
+"1489 reshape_49" -> "1491 reshape_49_0_0_nncf_smooth_quant_0";
+"1489 reshape_49" -> "1524 new_zeros_5";
+"1490 linear_70_updated_constant0" -> "1496 quantize_per_channel_default_71";
+"1491 reshape_49_0_0_nncf_smooth_quant_0" -> "1492 quantize_per_tensor_default_69";
+"1492 quantize_per_tensor_default_69" -> "1493 dequantize_per_tensor_default_69";
+"1493 dequantize_per_tensor_default_69" -> "1499 linear_70";
+"1494 linear_70_scale_0" -> "1496 quantize_per_channel_default_71";
+"1494 linear_70_scale_0" -> "1497 dequantize_per_channel_default_71";
+"1495 linear_70_zero_point_0" -> "1496 quantize_per_channel_default_71";
+"1495 linear_70_zero_point_0" -> "1497 dequantize_per_channel_default_71";
+"1496 quantize_per_channel_default_71" -> "1497 dequantize_per_channel_default_71";
+"1497 dequantize_per_channel_default_71" -> "1499 linear_70";
+"1498 _param_constant189_0_0" -> "1499 linear_70";
+"1499 linear_70" -> "1500 reshape_50";
+"1500 reshape_50" -> "1501 permute_52";
+"1501 permute_52" -> "1502 select_33";
+"1501 permute_52" -> "1503 select_34";
+"1501 permute_52" -> "1504 select_35";
+"1502 select_33" -> "1505 linalg_vector_norm_22";
+"1502 select_33" -> "1507 expand_as_22";
+"1502 select_33" -> "1508 div_22";
+"1503 select_34" -> "1511 linalg_vector_norm_23";
+"1503 select_34" -> "1513 expand_as_23";
+"1503 select_34" -> "1514 div_23";
+"1504 select_35" -> "1542 matmul_23";
+"1505 linalg_vector_norm_22" -> "1506 clamp_min_22";
+"1506 clamp_min_22" -> "1507 expand_as_22";
+"1507 expand_as_22" -> "1508 div_22";
+"1508 div_22" -> "1509 quantize_per_tensor_default_70";
+"1509 quantize_per_tensor_default_70" -> "1510 dequantize_per_tensor_default_70";
+"1510 dequantize_per_tensor_default_70" -> "1518 matmul_22";
+"1511 linalg_vector_norm_23" -> "1512 clamp_min_23";
+"1512 clamp_min_23" -> "1513 expand_as_23";
+"1513 expand_as_23" -> "1514 div_23";
+"1514 div_23" -> "1515 quantize_per_tensor_default_71";
+"1515 quantize_per_tensor_default_71" -> "1516 dequantize_per_tensor_default_71";
+"1516 dequantize_per_tensor_default_71" -> "1517 transpose_22";
+"1517 transpose_22" -> "1518 matmul_22";
+"1518 matmul_22" -> "1522 mul_23";
+"1519 _param_constant191" -> "1520 clamp_11";
+"1520 clamp_11" -> "1521 exp_11";
+"1521 exp_11" -> "1522 mul_23";
+"1522 mul_23" -> "1523 add_38";
+"1523 add_38" -> "1535 view_63";
+"1524 new_zeros_5" -> "1525 view_62";
+"1525 view_62" -> "1526 permute_53";
+"1526 permute_53" -> "1527 reshape_51";
+"1527 reshape_51" -> "1528 unsqueeze_32";
+"1527 reshape_51" -> "1529 unsqueeze_33";
+"1528 unsqueeze_32" -> "1530 sub_5";
+"1529 unsqueeze_33" -> "1530 sub_5";
+"1530 sub_5" -> "1531 ne_5";
+"1530 sub_5" -> "1532 masked_fill_10";
+"1530 sub_5" -> "1533 eq_5";
+"1531 ne_5" -> "1532 masked_fill_10";
+"1532 masked_fill_10" -> "1534 masked_fill_11";
+"1533 eq_5" -> "1534 masked_fill_11";
+"1534 masked_fill_11" -> "1536 unsqueeze_34";
+"1535 view_63" -> "1538 add_39";
+"1536 unsqueeze_34" -> "1537 unsqueeze_35";
+"1537 unsqueeze_35" -> "1538 add_39";
+"1538 add_39" -> "1539 view_64";
+"1539 view_64" -> "1540 softmax_11";
+"1540 softmax_11" -> "1541 dropout_44";
+"1541 dropout_44" -> "1542 matmul_23";
+"1542 matmul_23" -> "1543 transpose_23";
+"1543 transpose_23" -> "1544 reshape_52";
+"1544 reshape_52" -> "1546 reshape_52_0_0_nncf_smooth_quant_0";
+"1545 linear_71_updated_constant0" -> "1551 quantize_per_channel_default_72";
+"1546 reshape_52_0_0_nncf_smooth_quant_0" -> "1547 quantize_per_tensor_default_72";
+"1547 quantize_per_tensor_default_72" -> "1548 dequantize_per_tensor_default_72";
+"1548 dequantize_per_tensor_default_72" -> "1554 linear_71";
+"1549 linear_71_scale_0" -> "1551 quantize_per_channel_default_72";
+"1549 linear_71_scale_0" -> "1552 dequantize_per_channel_default_72";
+"1550 linear_71_zero_point_0" -> "1551 quantize_per_channel_default_72";
+"1550 linear_71_zero_point_0" -> "1552 dequantize_per_channel_default_72";
+"1551 quantize_per_channel_default_72" -> "1552 dequantize_per_channel_default_72";
+"1552 dequantize_per_channel_default_72" -> "1554 linear_71";
+"1553 _param_constant193_0_0" -> "1554 linear_71";
+"1554 linear_71" -> "1555 dropout_45";
+"1555 dropout_45" -> "1556 view_65";
+"1556 view_65" -> "1557 permute_54";
+"1557 permute_54" -> "1558 reshape_53";
+"1558 reshape_53" -> "1559 roll_11";
+"1559 roll_11" -> "1560 slice_185";
+"1560 slice_185" -> "1561 slice_186";
+"1561 slice_186" -> "1562 slice_187";
+"1562 slice_187" -> "1563 slice_188";
+"1563 slice_188" -> "1564 contiguous_21";
+"1564 contiguous_21" -> "1567 layer_norm_25";
+"1565 _param_constant194" -> "1567 layer_norm_25";
+"1566 _param_constant195" -> "1567 layer_norm_25";
+"1567 layer_norm_25" -> "1568 add_40";
+"1568 add_40" -> "1570 add_40_0_0_nncf_smooth_quant_0";
+"1568 add_40" -> "1595 add_41";
+"1569 linear_72_updated_constant0" -> "1575 quantize_per_channel_default_73";
+"1570 add_40_0_0_nncf_smooth_quant_0" -> "1571 quantize_per_tensor_default_73";
+"1571 quantize_per_tensor_default_73" -> "1572 dequantize_per_tensor_default_73";
+"1572 dequantize_per_tensor_default_73" -> "1578 linear_72";
+"1573 linear_72_scale_0" -> "1575 quantize_per_channel_default_73";
+"1573 linear_72_scale_0" -> "1576 dequantize_per_channel_default_73";
+"1574 linear_72_zero_point_0" -> "1575 quantize_per_channel_default_73";
+"1574 linear_72_zero_point_0" -> "1576 dequantize_per_channel_default_73";
+"1575 quantize_per_channel_default_73" -> "1576 dequantize_per_channel_default_73";
+"1576 dequantize_per_channel_default_73" -> "1578 linear_72";
+"1577 _param_constant197_0_0" -> "1578 linear_72";
+"1578 linear_72" -> "1579 gelu_11";
+"1579 gelu_11" -> "1580 dropout_46";
+"1580 dropout_46" -> "1582 dropout_46_0_0_nncf_smooth_quant_0";
+"1581 linear_73_updated_constant0" -> "1587 quantize_per_channel_default_74";
+"1582 dropout_46_0_0_nncf_smooth_quant_0" -> "1583 quantize_per_tensor_default_74";
+"1583 quantize_per_tensor_default_74" -> "1584 dequantize_per_tensor_default_74";
+"1584 dequantize_per_tensor_default_74" -> "1590 linear_73";
+"1585 linear_73_scale_0" -> "1587 quantize_per_channel_default_74";
+"1585 linear_73_scale_0" -> "1588 dequantize_per_channel_default_74";
+"1586 linear_73_zero_point_0" -> "1587 quantize_per_channel_default_74";
+"1586 linear_73_zero_point_0" -> "1588 dequantize_per_channel_default_74";
+"1587 quantize_per_channel_default_74" -> "1588 dequantize_per_channel_default_74";
+"1588 dequantize_per_channel_default_74" -> "1590 linear_73";
+"1589 _param_constant199_0_0" -> "1590 linear_73";
+"1590 linear_73" -> "1591 dropout_47";
+"1591 dropout_47" -> "1594 layer_norm_26";
+"1592 _param_constant200" -> "1594 layer_norm_26";
+"1593 _param_constant201" -> "1594 layer_norm_26";
+"1594 layer_norm_26" -> "1595 add_41";
+"1595 add_41" -> "1622 pad_14";
+"1595 add_41" -> "1687 add_43";
+"1596 _tensor_constant78" -> "1598 _tensor_constant78_0_0_nncf_smooth_quant_0";
+"1597 linear_74_updated_constant0" -> "1601 quantize_per_channel_default_75";
+"1598 _tensor_constant78_0_0_nncf_smooth_quant_0" -> "1604 linear_74";
+"1599 linear_74_scale_0" -> "1601 quantize_per_channel_default_75";
+"1599 linear_74_scale_0" -> "1602 dequantize_per_channel_default_75";
+"1600 linear_74_zero_point_0" -> "1601 quantize_per_channel_default_75";
+"1600 linear_74_zero_point_0" -> "1602 dequantize_per_channel_default_75";
+"1601 quantize_per_channel_default_75" -> "1602 dequantize_per_channel_default_75";
+"1602 dequantize_per_channel_default_75" -> "1604 linear_74";
+"1603 _param_constant203_0_0" -> "1604 linear_74";
+"1604 linear_74" -> "1605 relu__12";
+"1605 relu__12" -> "1607 relu__12_0_0_nncf_smooth_quant_0";
+"1606 linear_75_updated_constant0" -> "1610 quantize_per_channel_default_76";
+"1607 relu__12_0_0_nncf_smooth_quant_0" -> "1612 linear_75";
+"1608 linear_75_scale_0" -> "1610 quantize_per_channel_default_76";
+"1608 linear_75_scale_0" -> "1611 dequantize_per_channel_default_76";
+"1609 linear_75_zero_point_0" -> "1610 quantize_per_channel_default_76";
+"1609 linear_75_zero_point_0" -> "1611 dequantize_per_channel_default_76";
+"1610 quantize_per_channel_default_76" -> "1611 dequantize_per_channel_default_76";
+"1611 dequantize_per_channel_default_76" -> "1612 linear_75";
+"1612 linear_75" -> "1613 view_66";
+"1613 view_66" -> "1615 index_12";
+"1614 _tensor_constant79" -> "1615 index_12";
+"1615 index_12" -> "1616 view_67";
+"1616 view_67" -> "1617 permute_55";
+"1617 permute_55" -> "1618 contiguous_22";
+"1618 contiguous_22" -> "1619 unsqueeze_36";
+"1619 unsqueeze_36" -> "1620 sigmoid_12";
+"1620 sigmoid_12" -> "1621 mul_24";
+"1621 mul_24" -> "1659 add_42";
+"1622 pad_14" -> "1623 view_68";
+"1623 view_68" -> "1624 permute_56";
+"1624 permute_56" -> "1625 reshape_54";
+"1625 reshape_54" -> "1627 reshape_54_0_0_nncf_smooth_quant_0";
+"1626 linear_76_updated_constant0" -> "1632 quantize_per_channel_default_77";
+"1627 reshape_54_0_0_nncf_smooth_quant_0" -> "1628 quantize_per_tensor_default_75";
+"1628 quantize_per_tensor_default_75" -> "1629 dequantize_per_tensor_default_75";
+"1629 dequantize_per_tensor_default_75" -> "1635 linear_76";
+"1630 linear_76_scale_0" -> "1632 quantize_per_channel_default_77";
+"1630 linear_76_scale_0" -> "1633 dequantize_per_channel_default_77";
+"1631 linear_76_zero_point_0" -> "1632 quantize_per_channel_default_77";
+"1631 linear_76_zero_point_0" -> "1633 dequantize_per_channel_default_77";
+"1632 quantize_per_channel_default_77" -> "1633 dequantize_per_channel_default_77";
+"1633 dequantize_per_channel_default_77" -> "1635 linear_76";
+"1634 _param_constant205_0_0" -> "1635 linear_76";
+"1635 linear_76" -> "1636 reshape_55";
+"1636 reshape_55" -> "1637 permute_57";
+"1637 permute_57" -> "1638 select_36";
+"1637 permute_57" -> "1639 select_37";
+"1637 permute_57" -> "1640 select_38";
+"1638 select_36" -> "1641 linalg_vector_norm_24";
+"1638 select_36" -> "1643 expand_as_24";
+"1638 select_36" -> "1644 div_24";
+"1639 select_37" -> "1647 linalg_vector_norm_25";
+"1639 select_37" -> "1649 expand_as_25";
+"1639 select_37" -> "1650 div_25";
+"1640 select_38" -> "1662 matmul_25";
+"1641 linalg_vector_norm_24" -> "1642 clamp_min_24";
+"1642 clamp_min_24" -> "1643 expand_as_24";
+"1643 expand_as_24" -> "1644 div_24";
+"1644 div_24" -> "1645 quantize_per_tensor_default_76";
+"1645 quantize_per_tensor_default_76" -> "1646 dequantize_per_tensor_default_76";
+"1646 dequantize_per_tensor_default_76" -> "1654 matmul_24";
+"1647 linalg_vector_norm_25" -> "1648 clamp_min_25";
+"1648 clamp_min_25" -> "1649 expand_as_25";
+"1649 expand_as_25" -> "1650 div_25";
+"1650 div_25" -> "1651 quantize_per_tensor_default_77";
+"1651 quantize_per_tensor_default_77" -> "1652 dequantize_per_tensor_default_77";
+"1652 dequantize_per_tensor_default_77" -> "1653 transpose_24";
+"1653 transpose_24" -> "1654 matmul_24";
+"1654 matmul_24" -> "1658 mul_25";
+"1655 _param_constant207" -> "1656 clamp_12";
+"1656 clamp_12" -> "1657 exp_12";
+"1657 exp_12" -> "1658 mul_25";
+"1658 mul_25" -> "1659 add_42";
+"1659 add_42" -> "1660 softmax_12";
+"1660 softmax_12" -> "1661 dropout_48";
+"1661 dropout_48" -> "1662 matmul_25";
+"1662 matmul_25" -> "1663 transpose_25";
+"1663 transpose_25" -> "1664 reshape_56";
+"1664 reshape_56" -> "1666 reshape_56_0_0_nncf_smooth_quant_0";
+"1665 linear_77_updated_constant0" -> "1671 quantize_per_channel_default_78";
+"1666 reshape_56_0_0_nncf_smooth_quant_0" -> "1667 quantize_per_tensor_default_78";
+"1667 quantize_per_tensor_default_78" -> "1668 dequantize_per_tensor_default_78";
+"1668 dequantize_per_tensor_default_78" -> "1674 linear_77";
+"1669 linear_77_scale_0" -> "1671 quantize_per_channel_default_78";
+"1669 linear_77_scale_0" -> "1672 dequantize_per_channel_default_78";
+"1670 linear_77_zero_point_0" -> "1671 quantize_per_channel_default_78";
+"1670 linear_77_zero_point_0" -> "1672 dequantize_per_channel_default_78";
+"1671 quantize_per_channel_default_78" -> "1672 dequantize_per_channel_default_78";
+"1672 dequantize_per_channel_default_78" -> "1674 linear_77";
+"1673 _param_constant209_0_0" -> "1674 linear_77";
+"1674 linear_77" -> "1675 dropout_49";
+"1675 dropout_49" -> "1676 view_69";
+"1676 view_69" -> "1677 permute_58";
+"1677 permute_58" -> "1678 reshape_57";
+"1678 reshape_57" -> "1679 slice_190";
+"1679 slice_190" -> "1680 slice_191";
+"1680 slice_191" -> "1681 slice_192";
+"1681 slice_192" -> "1682 slice_193";
+"1682 slice_193" -> "1683 contiguous_23";
+"1683 contiguous_23" -> "1686 layer_norm_27";
+"1684 _param_constant210" -> "1686 layer_norm_27";
+"1685 _param_constant211" -> "1686 layer_norm_27";
+"1686 layer_norm_27" -> "1687 add_43";
+"1687 add_43" -> "1689 add_43_0_0_nncf_smooth_quant_0";
+"1687 add_43" -> "1714 add_44";
+"1688 linear_78_updated_constant0" -> "1694 quantize_per_channel_default_79";
+"1689 add_43_0_0_nncf_smooth_quant_0" -> "1690 quantize_per_tensor_default_79";
+"1690 quantize_per_tensor_default_79" -> "1691 dequantize_per_tensor_default_79";
+"1691 dequantize_per_tensor_default_79" -> "1697 linear_78";
+"1692 linear_78_scale_0" -> "1694 quantize_per_channel_default_79";
+"1692 linear_78_scale_0" -> "1695 dequantize_per_channel_default_79";
+"1693 linear_78_zero_point_0" -> "1694 quantize_per_channel_default_79";
+"1693 linear_78_zero_point_0" -> "1695 dequantize_per_channel_default_79";
+"1694 quantize_per_channel_default_79" -> "1695 dequantize_per_channel_default_79";
+"1695 dequantize_per_channel_default_79" -> "1697 linear_78";
+"1696 _param_constant213_0_0" -> "1697 linear_78";
+"1697 linear_78" -> "1698 gelu_12";
+"1698 gelu_12" -> "1699 dropout_50";
+"1699 dropout_50" -> "1701 dropout_50_0_0_nncf_smooth_quant_0";
+"1700 linear_79_updated_constant0" -> "1706 quantize_per_channel_default_80";
+"1701 dropout_50_0_0_nncf_smooth_quant_0" -> "1702 quantize_per_tensor_default_80";
+"1702 quantize_per_tensor_default_80" -> "1703 dequantize_per_tensor_default_80";
+"1703 dequantize_per_tensor_default_80" -> "1709 linear_79";
+"1704 linear_79_scale_0" -> "1706 quantize_per_channel_default_80";
+"1704 linear_79_scale_0" -> "1707 dequantize_per_channel_default_80";
+"1705 linear_79_zero_point_0" -> "1706 quantize_per_channel_default_80";
+"1705 linear_79_zero_point_0" -> "1707 dequantize_per_channel_default_80";
+"1706 quantize_per_channel_default_80" -> "1707 dequantize_per_channel_default_80";
+"1707 dequantize_per_channel_default_80" -> "1709 linear_79";
+"1708 _param_constant215_0_0" -> "1709 linear_79";
+"1709 linear_79" -> "1710 dropout_51";
+"1710 dropout_51" -> "1713 layer_norm_28";
+"1711 _param_constant216" -> "1713 layer_norm_28";
+"1712 _param_constant217" -> "1713 layer_norm_28";
+"1713 layer_norm_28" -> "1714 add_44";
+"1714 add_44" -> "1741 pad_15";
+"1714 add_44" -> "1824 add_47";
+"1715 _tensor_constant80" -> "1717 _tensor_constant80_0_0_nncf_smooth_quant_0";
+"1716 linear_80_updated_constant0" -> "1720 quantize_per_channel_default_81";
+"1717 _tensor_constant80_0_0_nncf_smooth_quant_0" -> "1723 linear_80";
+"1718 linear_80_scale_0" -> "1720 quantize_per_channel_default_81";
+"1718 linear_80_scale_0" -> "1721 dequantize_per_channel_default_81";
+"1719 linear_80_zero_point_0" -> "1720 quantize_per_channel_default_81";
+"1719 linear_80_zero_point_0" -> "1721 dequantize_per_channel_default_81";
+"1720 quantize_per_channel_default_81" -> "1721 dequantize_per_channel_default_81";
+"1721 dequantize_per_channel_default_81" -> "1723 linear_80";
+"1722 _param_constant219_0_0" -> "1723 linear_80";
+"1723 linear_80" -> "1724 relu__13";
+"1724 relu__13" -> "1726 relu__13_0_0_nncf_smooth_quant_0";
+"1725 linear_81_updated_constant0" -> "1729 quantize_per_channel_default_82";
+"1726 relu__13_0_0_nncf_smooth_quant_0" -> "1731 linear_81";
+"1727 linear_81_scale_0" -> "1729 quantize_per_channel_default_82";
+"1727 linear_81_scale_0" -> "1730 dequantize_per_channel_default_82";
+"1728 linear_81_zero_point_0" -> "1729 quantize_per_channel_default_82";
+"1728 linear_81_zero_point_0" -> "1730 dequantize_per_channel_default_82";
+"1729 quantize_per_channel_default_82" -> "1730 dequantize_per_channel_default_82";
+"1730 dequantize_per_channel_default_82" -> "1731 linear_81";
+"1731 linear_81" -> "1732 view_70";
+"1732 view_70" -> "1734 index_13";
+"1733 _tensor_constant81" -> "1734 index_13";
+"1734 index_13" -> "1735 view_71";
+"1735 view_71" -> "1736 permute_59";
+"1736 permute_59" -> "1737 contiguous_24";
+"1737 contiguous_24" -> "1738 unsqueeze_37";
+"1738 unsqueeze_37" -> "1739 sigmoid_13";
+"1739 sigmoid_13" -> "1740 mul_26";
+"1740 mul_26" -> "1779 add_45";
+"1741 pad_15" -> "1742 roll_12";
+"1742 roll_12" -> "1743 view_72";
+"1743 view_72" -> "1744 permute_60";
+"1744 permute_60" -> "1745 reshape_58";
+"1745 reshape_58" -> "1747 reshape_58_0_0_nncf_smooth_quant_0";
+"1745 reshape_58" -> "1780 new_zeros_6";
+"1746 linear_82_updated_constant0" -> "1752 quantize_per_channel_default_83";
+"1747 reshape_58_0_0_nncf_smooth_quant_0" -> "1748 quantize_per_tensor_default_81";
+"1748 quantize_per_tensor_default_81" -> "1749 dequantize_per_tensor_default_81";
+"1749 dequantize_per_tensor_default_81" -> "1755 linear_82";
+"1750 linear_82_scale_0" -> "1752 quantize_per_channel_default_83";
+"1750 linear_82_scale_0" -> "1753 dequantize_per_channel_default_83";
+"1751 linear_82_zero_point_0" -> "1752 quantize_per_channel_default_83";
+"1751 linear_82_zero_point_0" -> "1753 dequantize_per_channel_default_83";
+"1752 quantize_per_channel_default_83" -> "1753 dequantize_per_channel_default_83";
+"1753 dequantize_per_channel_default_83" -> "1755 linear_82";
+"1754 _param_constant221_0_0" -> "1755 linear_82";
+"1755 linear_82" -> "1756 reshape_59";
+"1756 reshape_59" -> "1757 permute_61";
+"1757 permute_61" -> "1758 select_39";
+"1757 permute_61" -> "1759 select_40";
+"1757 permute_61" -> "1760 select_41";
+"1758 select_39" -> "1761 linalg_vector_norm_26";
+"1758 select_39" -> "1763 expand_as_26";
+"1758 select_39" -> "1764 div_26";
+"1759 select_40" -> "1767 linalg_vector_norm_27";
+"1759 select_40" -> "1769 expand_as_27";
+"1759 select_40" -> "1770 div_27";
+"1760 select_41" -> "1798 matmul_27";
+"1761 linalg_vector_norm_26" -> "1762 clamp_min_26";
+"1762 clamp_min_26" -> "1763 expand_as_26";
+"1763 expand_as_26" -> "1764 div_26";
+"1764 div_26" -> "1765 quantize_per_tensor_default_82";
+"1765 quantize_per_tensor_default_82" -> "1766 dequantize_per_tensor_default_82";
+"1766 dequantize_per_tensor_default_82" -> "1774 matmul_26";
+"1767 linalg_vector_norm_27" -> "1768 clamp_min_27";
+"1768 clamp_min_27" -> "1769 expand_as_27";
+"1769 expand_as_27" -> "1770 div_27";
+"1770 div_27" -> "1771 quantize_per_tensor_default_83";
+"1771 quantize_per_tensor_default_83" -> "1772 dequantize_per_tensor_default_83";
+"1772 dequantize_per_tensor_default_83" -> "1773 transpose_26";
+"1773 transpose_26" -> "1774 matmul_26";
+"1774 matmul_26" -> "1778 mul_27";
+"1775 _param_constant223" -> "1776 clamp_13";
+"1776 clamp_13" -> "1777 exp_13";
+"1777 exp_13" -> "1778 mul_27";
+"1778 mul_27" -> "1779 add_45";
+"1779 add_45" -> "1791 view_74";
+"1780 new_zeros_6" -> "1781 view_73";
+"1781 view_73" -> "1782 permute_62";
+"1782 permute_62" -> "1783 reshape_60";
+"1783 reshape_60" -> "1784 unsqueeze_38";
+"1783 reshape_60" -> "1785 unsqueeze_39";
+"1784 unsqueeze_38" -> "1786 sub_6";
+"1785 unsqueeze_39" -> "1786 sub_6";
+"1786 sub_6" -> "1787 ne_6";
+"1786 sub_6" -> "1788 masked_fill_12";
+"1786 sub_6" -> "1789 eq_6";
+"1787 ne_6" -> "1788 masked_fill_12";
+"1788 masked_fill_12" -> "1790 masked_fill_13";
+"1789 eq_6" -> "1790 masked_fill_13";
+"1790 masked_fill_13" -> "1792 unsqueeze_40";
+"1791 view_74" -> "1794 add_46";
+"1792 unsqueeze_40" -> "1793 unsqueeze_41";
+"1793 unsqueeze_41" -> "1794 add_46";
+"1794 add_46" -> "1795 view_75";
+"1795 view_75" -> "1796 softmax_13";
+"1796 softmax_13" -> "1797 dropout_52";
+"1797 dropout_52" -> "1798 matmul_27";
+"1798 matmul_27" -> "1799 transpose_27";
+"1799 transpose_27" -> "1800 reshape_61";
+"1800 reshape_61" -> "1802 reshape_61_0_0_nncf_smooth_quant_0";
+"1801 linear_83_updated_constant0" -> "1807 quantize_per_channel_default_84";
+"1802 reshape_61_0_0_nncf_smooth_quant_0" -> "1803 quantize_per_tensor_default_84";
+"1803 quantize_per_tensor_default_84" -> "1804 dequantize_per_tensor_default_84";
+"1804 dequantize_per_tensor_default_84" -> "1810 linear_83";
+"1805 linear_83_scale_0" -> "1807 quantize_per_channel_default_84";
+"1805 linear_83_scale_0" -> "1808 dequantize_per_channel_default_84";
+"1806 linear_83_zero_point_0" -> "1807 quantize_per_channel_default_84";
+"1806 linear_83_zero_point_0" -> "1808 dequantize_per_channel_default_84";
+"1807 quantize_per_channel_default_84" -> "1808 dequantize_per_channel_default_84";
+"1808 dequantize_per_channel_default_84" -> "1810 linear_83";
+"1809 _param_constant225_0_0" -> "1810 linear_83";
+"1810 linear_83" -> "1811 dropout_53";
+"1811 dropout_53" -> "1812 view_76";
+"1812 view_76" -> "1813 permute_63";
+"1813 permute_63" -> "1814 reshape_62";
+"1814 reshape_62" -> "1815 roll_13";
+"1815 roll_13" -> "1816 slice_213";
+"1816 slice_213" -> "1817 slice_214";
+"1817 slice_214" -> "1818 slice_215";
+"1818 slice_215" -> "1819 slice_216";
+"1819 slice_216" -> "1820 contiguous_25";
+"1820 contiguous_25" -> "1823 layer_norm_29";
+"1821 _param_constant226" -> "1823 layer_norm_29";
+"1822 _param_constant227" -> "1823 layer_norm_29";
+"1823 layer_norm_29" -> "1824 add_47";
+"1824 add_47" -> "1826 add_47_0_0_nncf_smooth_quant_0";
+"1824 add_47" -> "1851 add_48";
+"1825 linear_84_updated_constant0" -> "1831 quantize_per_channel_default_85";
+"1826 add_47_0_0_nncf_smooth_quant_0" -> "1827 quantize_per_tensor_default_85";
+"1827 quantize_per_tensor_default_85" -> "1828 dequantize_per_tensor_default_85";
+"1828 dequantize_per_tensor_default_85" -> "1834 linear_84";
+"1829 linear_84_scale_0" -> "1831 quantize_per_channel_default_85";
+"1829 linear_84_scale_0" -> "1832 dequantize_per_channel_default_85";
+"1830 linear_84_zero_point_0" -> "1831 quantize_per_channel_default_85";
+"1830 linear_84_zero_point_0" -> "1832 dequantize_per_channel_default_85";
+"1831 quantize_per_channel_default_85" -> "1832 dequantize_per_channel_default_85";
+"1832 dequantize_per_channel_default_85" -> "1834 linear_84";
+"1833 _param_constant229_0_0" -> "1834 linear_84";
+"1834 linear_84" -> "1835 gelu_13";
+"1835 gelu_13" -> "1836 dropout_54";
+"1836 dropout_54" -> "1838 dropout_54_0_0_nncf_smooth_quant_0";
+"1837 linear_85_updated_constant0" -> "1843 quantize_per_channel_default_86";
+"1838 dropout_54_0_0_nncf_smooth_quant_0" -> "1839 quantize_per_tensor_default_86";
+"1839 quantize_per_tensor_default_86" -> "1840 dequantize_per_tensor_default_86";
+"1840 dequantize_per_tensor_default_86" -> "1846 linear_85";
+"1841 linear_85_scale_0" -> "1843 quantize_per_channel_default_86";
+"1841 linear_85_scale_0" -> "1844 dequantize_per_channel_default_86";
+"1842 linear_85_zero_point_0" -> "1843 quantize_per_channel_default_86";
+"1842 linear_85_zero_point_0" -> "1844 dequantize_per_channel_default_86";
+"1843 quantize_per_channel_default_86" -> "1844 dequantize_per_channel_default_86";
+"1844 dequantize_per_channel_default_86" -> "1846 linear_85";
+"1845 _param_constant231_0_0" -> "1846 linear_85";
+"1846 linear_85" -> "1847 dropout_55";
+"1847 dropout_55" -> "1850 layer_norm_30";
+"1848 _param_constant232" -> "1850 layer_norm_30";
+"1849 _param_constant233" -> "1850 layer_norm_30";
+"1850 layer_norm_30" -> "1851 add_48";
+"1851 add_48" -> "1878 pad_16";
+"1851 add_48" -> "1943 add_50";
+"1852 _tensor_constant91" -> "1854 _tensor_constant91_0_0_nncf_smooth_quant_0";
+"1853 linear_86_updated_constant0" -> "1857 quantize_per_channel_default_87";
+"1854 _tensor_constant91_0_0_nncf_smooth_quant_0" -> "1860 linear_86";
+"1855 linear_86_scale_0" -> "1857 quantize_per_channel_default_87";
+"1855 linear_86_scale_0" -> "1858 dequantize_per_channel_default_87";
+"1856 linear_86_zero_point_0" -> "1857 quantize_per_channel_default_87";
+"1856 linear_86_zero_point_0" -> "1858 dequantize_per_channel_default_87";
+"1857 quantize_per_channel_default_87" -> "1858 dequantize_per_channel_default_87";
+"1858 dequantize_per_channel_default_87" -> "1860 linear_86";
+"1859 _param_constant235_0_0" -> "1860 linear_86";
+"1860 linear_86" -> "1861 relu__14";
+"1861 relu__14" -> "1863 relu__14_0_0_nncf_smooth_quant_0";
+"1862 linear_87_updated_constant0" -> "1866 quantize_per_channel_default_88";
+"1863 relu__14_0_0_nncf_smooth_quant_0" -> "1868 linear_87";
+"1864 linear_87_scale_0" -> "1866 quantize_per_channel_default_88";
+"1864 linear_87_scale_0" -> "1867 dequantize_per_channel_default_88";
+"1865 linear_87_zero_point_0" -> "1866 quantize_per_channel_default_88";
+"1865 linear_87_zero_point_0" -> "1867 dequantize_per_channel_default_88";
+"1866 quantize_per_channel_default_88" -> "1867 dequantize_per_channel_default_88";
+"1867 dequantize_per_channel_default_88" -> "1868 linear_87";
+"1868 linear_87" -> "1869 view_77";
+"1869 view_77" -> "1871 index_14";
+"1870 _tensor_constant92" -> "1871 index_14";
+"1871 index_14" -> "1872 view_78";
+"1872 view_78" -> "1873 permute_64";
+"1873 permute_64" -> "1874 contiguous_26";
+"1874 contiguous_26" -> "1875 unsqueeze_42";
+"1875 unsqueeze_42" -> "1876 sigmoid_14";
+"1876 sigmoid_14" -> "1877 mul_28";
+"1877 mul_28" -> "1915 add_49";
+"1878 pad_16" -> "1879 view_79";
+"1879 view_79" -> "1880 permute_65";
+"1880 permute_65" -> "1881 reshape_63";
+"1881 reshape_63" -> "1883 reshape_63_0_0_nncf_smooth_quant_0";
+"1882 linear_88_updated_constant0" -> "1888 quantize_per_channel_default_89";
+"1883 reshape_63_0_0_nncf_smooth_quant_0" -> "1884 quantize_per_tensor_default_87";
+"1884 quantize_per_tensor_default_87" -> "1885 dequantize_per_tensor_default_87";
+"1885 dequantize_per_tensor_default_87" -> "1891 linear_88";
+"1886 linear_88_scale_0" -> "1888 quantize_per_channel_default_89";
+"1886 linear_88_scale_0" -> "1889 dequantize_per_channel_default_89";
+"1887 linear_88_zero_point_0" -> "1888 quantize_per_channel_default_89";
+"1887 linear_88_zero_point_0" -> "1889 dequantize_per_channel_default_89";
+"1888 quantize_per_channel_default_89" -> "1889 dequantize_per_channel_default_89";
+"1889 dequantize_per_channel_default_89" -> "1891 linear_88";
+"1890 _param_constant237_0_0" -> "1891 linear_88";
+"1891 linear_88" -> "1892 reshape_64";
+"1892 reshape_64" -> "1893 permute_66";
+"1893 permute_66" -> "1894 select_42";
+"1893 permute_66" -> "1895 select_43";
+"1893 permute_66" -> "1896 select_44";
+"1894 select_42" -> "1897 linalg_vector_norm_28";
+"1894 select_42" -> "1899 expand_as_28";
+"1894 select_42" -> "1900 div_28";
+"1895 select_43" -> "1903 linalg_vector_norm_29";
+"1895 select_43" -> "1905 expand_as_29";
+"1895 select_43" -> "1906 div_29";
+"1896 select_44" -> "1918 matmul_29";
+"1897 linalg_vector_norm_28" -> "1898 clamp_min_28";
+"1898 clamp_min_28" -> "1899 expand_as_28";
+"1899 expand_as_28" -> "1900 div_28";
+"1900 div_28" -> "1901 quantize_per_tensor_default_88";
+"1901 quantize_per_tensor_default_88" -> "1902 dequantize_per_tensor_default_88";
+"1902 dequantize_per_tensor_default_88" -> "1910 matmul_28";
+"1903 linalg_vector_norm_29" -> "1904 clamp_min_29";
+"1904 clamp_min_29" -> "1905 expand_as_29";
+"1905 expand_as_29" -> "1906 div_29";
+"1906 div_29" -> "1907 quantize_per_tensor_default_89";
+"1907 quantize_per_tensor_default_89" -> "1908 dequantize_per_tensor_default_89";
+"1908 dequantize_per_tensor_default_89" -> "1909 transpose_28";
+"1909 transpose_28" -> "1910 matmul_28";
+"1910 matmul_28" -> "1914 mul_29";
+"1911 _param_constant239" -> "1912 clamp_14";
+"1912 clamp_14" -> "1913 exp_14";
+"1913 exp_14" -> "1914 mul_29";
+"1914 mul_29" -> "1915 add_49";
+"1915 add_49" -> "1916 softmax_14";
+"1916 softmax_14" -> "1917 dropout_56";
+"1917 dropout_56" -> "1918 matmul_29";
+"1918 matmul_29" -> "1919 transpose_29";
+"1919 transpose_29" -> "1920 reshape_65";
+"1920 reshape_65" -> "1922 reshape_65_0_0_nncf_smooth_quant_0";
+"1921 linear_89_updated_constant0" -> "1927 quantize_per_channel_default_90";
+"1922 reshape_65_0_0_nncf_smooth_quant_0" -> "1923 quantize_per_tensor_default_90";
+"1923 quantize_per_tensor_default_90" -> "1924 dequantize_per_tensor_default_90";
+"1924 dequantize_per_tensor_default_90" -> "1930 linear_89";
+"1925 linear_89_scale_0" -> "1927 quantize_per_channel_default_90";
+"1925 linear_89_scale_0" -> "1928 dequantize_per_channel_default_90";
+"1926 linear_89_zero_point_0" -> "1927 quantize_per_channel_default_90";
+"1926 linear_89_zero_point_0" -> "1928 dequantize_per_channel_default_90";
+"1927 quantize_per_channel_default_90" -> "1928 dequantize_per_channel_default_90";
+"1928 dequantize_per_channel_default_90" -> "1930 linear_89";
+"1929 _param_constant241_0_0" -> "1930 linear_89";
+"1930 linear_89" -> "1931 dropout_57";
+"1931 dropout_57" -> "1932 view_80";
+"1932 view_80" -> "1933 permute_67";
+"1933 permute_67" -> "1934 reshape_66";
+"1934 reshape_66" -> "1935 slice_218";
+"1935 slice_218" -> "1936 slice_219";
+"1936 slice_219" -> "1937 slice_220";
+"1937 slice_220" -> "1938 slice_221";
+"1938 slice_221" -> "1939 contiguous_27";
+"1939 contiguous_27" -> "1942 layer_norm_31";
+"1940 _param_constant242" -> "1942 layer_norm_31";
+"1941 _param_constant243" -> "1942 layer_norm_31";
+"1942 layer_norm_31" -> "1943 add_50";
+"1943 add_50" -> "1945 add_50_0_0_nncf_smooth_quant_0";
+"1943 add_50" -> "1970 add_51";
+"1944 linear_90_updated_constant0" -> "1950 quantize_per_channel_default_91";
+"1945 add_50_0_0_nncf_smooth_quant_0" -> "1946 quantize_per_tensor_default_91";
+"1946 quantize_per_tensor_default_91" -> "1947 dequantize_per_tensor_default_91";
+"1947 dequantize_per_tensor_default_91" -> "1953 linear_90";
+"1948 linear_90_scale_0" -> "1950 quantize_per_channel_default_91";
+"1948 linear_90_scale_0" -> "1951 dequantize_per_channel_default_91";
+"1949 linear_90_zero_point_0" -> "1950 quantize_per_channel_default_91";
+"1949 linear_90_zero_point_0" -> "1951 dequantize_per_channel_default_91";
+"1950 quantize_per_channel_default_91" -> "1951 dequantize_per_channel_default_91";
+"1951 dequantize_per_channel_default_91" -> "1953 linear_90";
+"1952 _param_constant245_0_0" -> "1953 linear_90";
+"1953 linear_90" -> "1954 gelu_14";
+"1954 gelu_14" -> "1955 dropout_58";
+"1955 dropout_58" -> "1957 dropout_58_0_0_nncf_smooth_quant_0";
+"1956 linear_91_updated_constant0" -> "1962 quantize_per_channel_default_92";
+"1957 dropout_58_0_0_nncf_smooth_quant_0" -> "1958 quantize_per_tensor_default_92";
+"1958 quantize_per_tensor_default_92" -> "1959 dequantize_per_tensor_default_92";
+"1959 dequantize_per_tensor_default_92" -> "1965 linear_91";
+"1960 linear_91_scale_0" -> "1962 quantize_per_channel_default_92";
+"1960 linear_91_scale_0" -> "1963 dequantize_per_channel_default_92";
+"1961 linear_91_zero_point_0" -> "1962 quantize_per_channel_default_92";
+"1961 linear_91_zero_point_0" -> "1963 dequantize_per_channel_default_92";
+"1962 quantize_per_channel_default_92" -> "1963 dequantize_per_channel_default_92";
+"1963 dequantize_per_channel_default_92" -> "1965 linear_91";
+"1964 _param_constant247_0_0" -> "1965 linear_91";
+"1965 linear_91" -> "1966 dropout_59";
+"1966 dropout_59" -> "1969 layer_norm_32";
+"1967 _param_constant248" -> "1969 layer_norm_32";
+"1968 _param_constant249" -> "1969 layer_norm_32";
+"1969 layer_norm_32" -> "1970 add_51";
+"1970 add_51" -> "1997 pad_17";
+"1970 add_51" -> "2080 add_54";
+"1971 _tensor_constant93" -> "1973 _tensor_constant93_0_0_nncf_smooth_quant_0";
+"1972 linear_92_updated_constant0" -> "1976 quantize_per_channel_default_93";
+"1973 _tensor_constant93_0_0_nncf_smooth_quant_0" -> "1979 linear_92";
+"1974 linear_92_scale_0" -> "1976 quantize_per_channel_default_93";
+"1974 linear_92_scale_0" -> "1977 dequantize_per_channel_default_93";
+"1975 linear_92_zero_point_0" -> "1976 quantize_per_channel_default_93";
+"1975 linear_92_zero_point_0" -> "1977 dequantize_per_channel_default_93";
+"1976 quantize_per_channel_default_93" -> "1977 dequantize_per_channel_default_93";
+"1977 dequantize_per_channel_default_93" -> "1979 linear_92";
+"1978 _param_constant251_0_0" -> "1979 linear_92";
+"1979 linear_92" -> "1980 relu__15";
+"1980 relu__15" -> "1982 relu__15_0_0_nncf_smooth_quant_0";
+"1981 linear_93_updated_constant0" -> "1985 quantize_per_channel_default_94";
+"1982 relu__15_0_0_nncf_smooth_quant_0" -> "1987 linear_93";
+"1983 linear_93_scale_0" -> "1985 quantize_per_channel_default_94";
+"1983 linear_93_scale_0" -> "1986 dequantize_per_channel_default_94";
+"1984 linear_93_zero_point_0" -> "1985 quantize_per_channel_default_94";
+"1984 linear_93_zero_point_0" -> "1986 dequantize_per_channel_default_94";
+"1985 quantize_per_channel_default_94" -> "1986 dequantize_per_channel_default_94";
+"1986 dequantize_per_channel_default_94" -> "1987 linear_93";
+"1987 linear_93" -> "1988 view_81";
+"1988 view_81" -> "1990 index_15";
+"1989 _tensor_constant94" -> "1990 index_15";
+"1990 index_15" -> "1991 view_82";
+"1991 view_82" -> "1992 permute_68";
+"1992 permute_68" -> "1993 contiguous_28";
+"1993 contiguous_28" -> "1994 unsqueeze_43";
+"1994 unsqueeze_43" -> "1995 sigmoid_15";
+"1995 sigmoid_15" -> "1996 mul_30";
+"1996 mul_30" -> "2035 add_52";
+"1997 pad_17" -> "1998 roll_14";
+"1998 roll_14" -> "1999 view_83";
+"1999 view_83" -> "2000 permute_69";
+"2000 permute_69" -> "2001 reshape_67";
+"2001 reshape_67" -> "2003 reshape_67_0_0_nncf_smooth_quant_0";
+"2001 reshape_67" -> "2036 new_zeros_7";
+"2002 linear_94_updated_constant0" -> "2008 quantize_per_channel_default_95";
+"2003 reshape_67_0_0_nncf_smooth_quant_0" -> "2004 quantize_per_tensor_default_93";
+"2004 quantize_per_tensor_default_93" -> "2005 dequantize_per_tensor_default_93";
+"2005 dequantize_per_tensor_default_93" -> "2011 linear_94";
+"2006 linear_94_scale_0" -> "2008 quantize_per_channel_default_95";
+"2006 linear_94_scale_0" -> "2009 dequantize_per_channel_default_95";
+"2007 linear_94_zero_point_0" -> "2008 quantize_per_channel_default_95";
+"2007 linear_94_zero_point_0" -> "2009 dequantize_per_channel_default_95";
+"2008 quantize_per_channel_default_95" -> "2009 dequantize_per_channel_default_95";
+"2009 dequantize_per_channel_default_95" -> "2011 linear_94";
+"2010 _param_constant253_0_0" -> "2011 linear_94";
+"2011 linear_94" -> "2012 reshape_68";
+"2012 reshape_68" -> "2013 permute_70";
+"2013 permute_70" -> "2014 select_45";
+"2013 permute_70" -> "2015 select_46";
+"2013 permute_70" -> "2016 select_47";
+"2014 select_45" -> "2017 linalg_vector_norm_30";
+"2014 select_45" -> "2019 expand_as_30";
+"2014 select_45" -> "2020 div_30";
+"2015 select_46" -> "2023 linalg_vector_norm_31";
+"2015 select_46" -> "2025 expand_as_31";
+"2015 select_46" -> "2026 div_31";
+"2016 select_47" -> "2054 matmul_31";
+"2017 linalg_vector_norm_30" -> "2018 clamp_min_30";
+"2018 clamp_min_30" -> "2019 expand_as_30";
+"2019 expand_as_30" -> "2020 div_30";
+"2020 div_30" -> "2021 quantize_per_tensor_default_94";
+"2021 quantize_per_tensor_default_94" -> "2022 dequantize_per_tensor_default_94";
+"2022 dequantize_per_tensor_default_94" -> "2030 matmul_30";
+"2023 linalg_vector_norm_31" -> "2024 clamp_min_31";
+"2024 clamp_min_31" -> "2025 expand_as_31";
+"2025 expand_as_31" -> "2026 div_31";
+"2026 div_31" -> "2027 quantize_per_tensor_default_95";
+"2027 quantize_per_tensor_default_95" -> "2028 dequantize_per_tensor_default_95";
+"2028 dequantize_per_tensor_default_95" -> "2029 transpose_30";
+"2029 transpose_30" -> "2030 matmul_30";
+"2030 matmul_30" -> "2034 mul_31";
+"2031 _param_constant255" -> "2032 clamp_15";
+"2032 clamp_15" -> "2033 exp_15";
+"2033 exp_15" -> "2034 mul_31";
+"2034 mul_31" -> "2035 add_52";
+"2035 add_52" -> "2047 view_85";
+"2036 new_zeros_7" -> "2037 view_84";
+"2037 view_84" -> "2038 permute_71";
+"2038 permute_71" -> "2039 reshape_69";
+"2039 reshape_69" -> "2040 unsqueeze_44";
+"2039 reshape_69" -> "2041 unsqueeze_45";
+"2040 unsqueeze_44" -> "2042 sub_7";
+"2041 unsqueeze_45" -> "2042 sub_7";
+"2042 sub_7" -> "2043 ne_7";
+"2042 sub_7" -> "2044 masked_fill_14";
+"2042 sub_7" -> "2045 eq_7";
+"2043 ne_7" -> "2044 masked_fill_14";
+"2044 masked_fill_14" -> "2046 masked_fill_15";
+"2045 eq_7" -> "2046 masked_fill_15";
+"2046 masked_fill_15" -> "2048 unsqueeze_46";
+"2047 view_85" -> "2050 add_53";
+"2048 unsqueeze_46" -> "2049 unsqueeze_47";
+"2049 unsqueeze_47" -> "2050 add_53";
+"2050 add_53" -> "2051 view_86";
+"2051 view_86" -> "2052 softmax_15";
+"2052 softmax_15" -> "2053 dropout_60";
+"2053 dropout_60" -> "2054 matmul_31";
+"2054 matmul_31" -> "2055 transpose_31";
+"2055 transpose_31" -> "2056 reshape_70";
+"2056 reshape_70" -> "2058 reshape_70_0_0_nncf_smooth_quant_0";
+"2057 linear_95_updated_constant0" -> "2063 quantize_per_channel_default_96";
+"2058 reshape_70_0_0_nncf_smooth_quant_0" -> "2059 quantize_per_tensor_default_96";
+"2059 quantize_per_tensor_default_96" -> "2060 dequantize_per_tensor_default_96";
+"2060 dequantize_per_tensor_default_96" -> "2066 linear_95";
+"2061 linear_95_scale_0" -> "2063 quantize_per_channel_default_96";
+"2061 linear_95_scale_0" -> "2064 dequantize_per_channel_default_96";
+"2062 linear_95_zero_point_0" -> "2063 quantize_per_channel_default_96";
+"2062 linear_95_zero_point_0" -> "2064 dequantize_per_channel_default_96";
+"2063 quantize_per_channel_default_96" -> "2064 dequantize_per_channel_default_96";
+"2064 dequantize_per_channel_default_96" -> "2066 linear_95";
+"2065 _param_constant257_0_0" -> "2066 linear_95";
+"2066 linear_95" -> "2067 dropout_61";
+"2067 dropout_61" -> "2068 view_87";
+"2068 view_87" -> "2069 permute_72";
+"2069 permute_72" -> "2070 reshape_71";
+"2070 reshape_71" -> "2071 roll_15";
+"2071 roll_15" -> "2072 slice_241";
+"2072 slice_241" -> "2073 slice_242";
+"2073 slice_242" -> "2074 slice_243";
+"2074 slice_243" -> "2075 slice_244";
+"2075 slice_244" -> "2076 contiguous_29";
+"2076 contiguous_29" -> "2079 layer_norm_33";
+"2077 _param_constant258" -> "2079 layer_norm_33";
+"2078 _param_constant259" -> "2079 layer_norm_33";
+"2079 layer_norm_33" -> "2080 add_54";
+"2080 add_54" -> "2082 add_54_0_0_nncf_smooth_quant_0";
+"2080 add_54" -> "2107 add_55";
+"2081 linear_96_updated_constant0" -> "2087 quantize_per_channel_default_97";
+"2082 add_54_0_0_nncf_smooth_quant_0" -> "2083 quantize_per_tensor_default_97";
+"2083 quantize_per_tensor_default_97" -> "2084 dequantize_per_tensor_default_97";
+"2084 dequantize_per_tensor_default_97" -> "2090 linear_96";
+"2085 linear_96_scale_0" -> "2087 quantize_per_channel_default_97";
+"2085 linear_96_scale_0" -> "2088 dequantize_per_channel_default_97";
+"2086 linear_96_zero_point_0" -> "2087 quantize_per_channel_default_97";
+"2086 linear_96_zero_point_0" -> "2088 dequantize_per_channel_default_97";
+"2087 quantize_per_channel_default_97" -> "2088 dequantize_per_channel_default_97";
+"2088 dequantize_per_channel_default_97" -> "2090 linear_96";
+"2089 _param_constant261_0_0" -> "2090 linear_96";
+"2090 linear_96" -> "2091 gelu_15";
+"2091 gelu_15" -> "2092 dropout_62";
+"2092 dropout_62" -> "2094 dropout_62_0_0_nncf_smooth_quant_0";
+"2093 linear_97_updated_constant0" -> "2099 quantize_per_channel_default_98";
+"2094 dropout_62_0_0_nncf_smooth_quant_0" -> "2095 quantize_per_tensor_default_98";
+"2095 quantize_per_tensor_default_98" -> "2096 dequantize_per_tensor_default_98";
+"2096 dequantize_per_tensor_default_98" -> "2102 linear_97";
+"2097 linear_97_scale_0" -> "2099 quantize_per_channel_default_98";
+"2097 linear_97_scale_0" -> "2100 dequantize_per_channel_default_98";
+"2098 linear_97_zero_point_0" -> "2099 quantize_per_channel_default_98";
+"2098 linear_97_zero_point_0" -> "2100 dequantize_per_channel_default_98";
+"2099 quantize_per_channel_default_98" -> "2100 dequantize_per_channel_default_98";
+"2100 dequantize_per_channel_default_98" -> "2102 linear_97";
+"2101 _param_constant263_0_0" -> "2102 linear_97";
+"2102 linear_97" -> "2103 dropout_63";
+"2103 dropout_63" -> "2106 layer_norm_34";
+"2104 _param_constant264" -> "2106 layer_norm_34";
+"2105 _param_constant265" -> "2106 layer_norm_34";
+"2106 layer_norm_34" -> "2107 add_55";
+"2107 add_55" -> "2134 pad_18";
+"2107 add_55" -> "2199 add_57";
+"2108 _tensor_constant104" -> "2110 _tensor_constant104_0_0_nncf_smooth_quant_0";
+"2109 linear_98_updated_constant0" -> "2113 quantize_per_channel_default_99";
+"2110 _tensor_constant104_0_0_nncf_smooth_quant_0" -> "2116 linear_98";
+"2111 linear_98_scale_0" -> "2113 quantize_per_channel_default_99";
+"2111 linear_98_scale_0" -> "2114 dequantize_per_channel_default_99";
+"2112 linear_98_zero_point_0" -> "2113 quantize_per_channel_default_99";
+"2112 linear_98_zero_point_0" -> "2114 dequantize_per_channel_default_99";
+"2113 quantize_per_channel_default_99" -> "2114 dequantize_per_channel_default_99";
+"2114 dequantize_per_channel_default_99" -> "2116 linear_98";
+"2115 _param_constant267_0_0" -> "2116 linear_98";
+"2116 linear_98" -> "2117 relu__16";
+"2117 relu__16" -> "2119 relu__16_0_0_nncf_smooth_quant_0";
+"2118 linear_99_updated_constant0" -> "2122 quantize_per_channel_default_100";
+"2119 relu__16_0_0_nncf_smooth_quant_0" -> "2124 linear_99";
+"2120 linear_99_scale_0" -> "2122 quantize_per_channel_default_100";
+"2120 linear_99_scale_0" -> "2123 dequantize_per_channel_default_100";
+"2121 linear_99_zero_point_0" -> "2122 quantize_per_channel_default_100";
+"2121 linear_99_zero_point_0" -> "2123 dequantize_per_channel_default_100";
+"2122 quantize_per_channel_default_100" -> "2123 dequantize_per_channel_default_100";
+"2123 dequantize_per_channel_default_100" -> "2124 linear_99";
+"2124 linear_99" -> "2125 view_88";
+"2125 view_88" -> "2127 index_16";
+"2126 _tensor_constant105" -> "2127 index_16";
+"2127 index_16" -> "2128 view_89";
+"2128 view_89" -> "2129 permute_73";
+"2129 permute_73" -> "2130 contiguous_30";
+"2130 contiguous_30" -> "2131 unsqueeze_48";
+"2131 unsqueeze_48" -> "2132 sigmoid_16";
+"2132 sigmoid_16" -> "2133 mul_32";
+"2133 mul_32" -> "2171 add_56";
+"2134 pad_18" -> "2135 view_90";
+"2135 view_90" -> "2136 permute_74";
+"2136 permute_74" -> "2137 reshape_72";
+"2137 reshape_72" -> "2139 reshape_72_0_0_nncf_smooth_quant_0";
+"2138 linear_100_updated_constant0" -> "2144 quantize_per_channel_default_101";
+"2139 reshape_72_0_0_nncf_smooth_quant_0" -> "2140 quantize_per_tensor_default_99";
+"2140 quantize_per_tensor_default_99" -> "2141 dequantize_per_tensor_default_99";
+"2141 dequantize_per_tensor_default_99" -> "2147 linear_100";
+"2142 linear_100_scale_0" -> "2144 quantize_per_channel_default_101";
+"2142 linear_100_scale_0" -> "2145 dequantize_per_channel_default_101";
+"2143 linear_100_zero_point_0" -> "2144 quantize_per_channel_default_101";
+"2143 linear_100_zero_point_0" -> "2145 dequantize_per_channel_default_101";
+"2144 quantize_per_channel_default_101" -> "2145 dequantize_per_channel_default_101";
+"2145 dequantize_per_channel_default_101" -> "2147 linear_100";
+"2146 _param_constant269_0_0" -> "2147 linear_100";
+"2147 linear_100" -> "2148 reshape_73";
+"2148 reshape_73" -> "2149 permute_75";
+"2149 permute_75" -> "2150 select_48";
+"2149 permute_75" -> "2151 select_49";
+"2149 permute_75" -> "2152 select_50";
+"2150 select_48" -> "2153 linalg_vector_norm_32";
+"2150 select_48" -> "2155 expand_as_32";
+"2150 select_48" -> "2156 div_32";
+"2151 select_49" -> "2159 linalg_vector_norm_33";
+"2151 select_49" -> "2161 expand_as_33";
+"2151 select_49" -> "2162 div_33";
+"2152 select_50" -> "2174 matmul_33";
+"2153 linalg_vector_norm_32" -> "2154 clamp_min_32";
+"2154 clamp_min_32" -> "2155 expand_as_32";
+"2155 expand_as_32" -> "2156 div_32";
+"2156 div_32" -> "2157 quantize_per_tensor_default_100";
+"2157 quantize_per_tensor_default_100" -> "2158 dequantize_per_tensor_default_100";
+"2158 dequantize_per_tensor_default_100" -> "2166 matmul_32";
+"2159 linalg_vector_norm_33" -> "2160 clamp_min_33";
+"2160 clamp_min_33" -> "2161 expand_as_33";
+"2161 expand_as_33" -> "2162 div_33";
+"2162 div_33" -> "2163 quantize_per_tensor_default_101";
+"2163 quantize_per_tensor_default_101" -> "2164 dequantize_per_tensor_default_101";
+"2164 dequantize_per_tensor_default_101" -> "2165 transpose_32";
+"2165 transpose_32" -> "2166 matmul_32";
+"2166 matmul_32" -> "2170 mul_33";
+"2167 _param_constant271" -> "2168 clamp_16";
+"2168 clamp_16" -> "2169 exp_16";
+"2169 exp_16" -> "2170 mul_33";
+"2170 mul_33" -> "2171 add_56";
+"2171 add_56" -> "2172 softmax_16";
+"2172 softmax_16" -> "2173 dropout_64";
+"2173 dropout_64" -> "2174 matmul_33";
+"2174 matmul_33" -> "2175 transpose_33";
+"2175 transpose_33" -> "2176 reshape_74";
+"2176 reshape_74" -> "2178 reshape_74_0_0_nncf_smooth_quant_0";
+"2177 linear_101_updated_constant0" -> "2183 quantize_per_channel_default_102";
+"2178 reshape_74_0_0_nncf_smooth_quant_0" -> "2179 quantize_per_tensor_default_102";
+"2179 quantize_per_tensor_default_102" -> "2180 dequantize_per_tensor_default_102";
+"2180 dequantize_per_tensor_default_102" -> "2186 linear_101";
+"2181 linear_101_scale_0" -> "2183 quantize_per_channel_default_102";
+"2181 linear_101_scale_0" -> "2184 dequantize_per_channel_default_102";
+"2182 linear_101_zero_point_0" -> "2183 quantize_per_channel_default_102";
+"2182 linear_101_zero_point_0" -> "2184 dequantize_per_channel_default_102";
+"2183 quantize_per_channel_default_102" -> "2184 dequantize_per_channel_default_102";
+"2184 dequantize_per_channel_default_102" -> "2186 linear_101";
+"2185 _param_constant273_0_0" -> "2186 linear_101";
+"2186 linear_101" -> "2187 dropout_65";
+"2187 dropout_65" -> "2188 view_91";
+"2188 view_91" -> "2189 permute_76";
+"2189 permute_76" -> "2190 reshape_75";
+"2190 reshape_75" -> "2191 slice_246";
+"2191 slice_246" -> "2192 slice_247";
+"2192 slice_247" -> "2193 slice_248";
+"2193 slice_248" -> "2194 slice_249";
+"2194 slice_249" -> "2195 contiguous_31";
+"2195 contiguous_31" -> "2198 layer_norm_35";
+"2196 _param_constant274" -> "2198 layer_norm_35";
+"2197 _param_constant275" -> "2198 layer_norm_35";
+"2198 layer_norm_35" -> "2199 add_57";
+"2199 add_57" -> "2201 add_57_0_0_nncf_smooth_quant_0";
+"2199 add_57" -> "2226 add_58";
+"2200 linear_102_updated_constant0" -> "2206 quantize_per_channel_default_103";
+"2201 add_57_0_0_nncf_smooth_quant_0" -> "2202 quantize_per_tensor_default_103";
+"2202 quantize_per_tensor_default_103" -> "2203 dequantize_per_tensor_default_103";
+"2203 dequantize_per_tensor_default_103" -> "2209 linear_102";
+"2204 linear_102_scale_0" -> "2206 quantize_per_channel_default_103";
+"2204 linear_102_scale_0" -> "2207 dequantize_per_channel_default_103";
+"2205 linear_102_zero_point_0" -> "2206 quantize_per_channel_default_103";
+"2205 linear_102_zero_point_0" -> "2207 dequantize_per_channel_default_103";
+"2206 quantize_per_channel_default_103" -> "2207 dequantize_per_channel_default_103";
+"2207 dequantize_per_channel_default_103" -> "2209 linear_102";
+"2208 _param_constant277_0_0" -> "2209 linear_102";
+"2209 linear_102" -> "2210 gelu_16";
+"2210 gelu_16" -> "2211 dropout_66";
+"2211 dropout_66" -> "2213 dropout_66_0_0_nncf_smooth_quant_0";
+"2212 linear_103_updated_constant0" -> "2218 quantize_per_channel_default_104";
+"2213 dropout_66_0_0_nncf_smooth_quant_0" -> "2214 quantize_per_tensor_default_104";
+"2214 quantize_per_tensor_default_104" -> "2215 dequantize_per_tensor_default_104";
+"2215 dequantize_per_tensor_default_104" -> "2221 linear_103";
+"2216 linear_103_scale_0" -> "2218 quantize_per_channel_default_104";
+"2216 linear_103_scale_0" -> "2219 dequantize_per_channel_default_104";
+"2217 linear_103_zero_point_0" -> "2218 quantize_per_channel_default_104";
+"2217 linear_103_zero_point_0" -> "2219 dequantize_per_channel_default_104";
+"2218 quantize_per_channel_default_104" -> "2219 dequantize_per_channel_default_104";
+"2219 dequantize_per_channel_default_104" -> "2221 linear_103";
+"2220 _param_constant279_0_0" -> "2221 linear_103";
+"2221 linear_103" -> "2222 dropout_67";
+"2222 dropout_67" -> "2225 layer_norm_36";
+"2223 _param_constant280" -> "2225 layer_norm_36";
+"2224 _param_constant281" -> "2225 layer_norm_36";
+"2225 layer_norm_36" -> "2226 add_58";
+"2226 add_58" -> "2253 pad_19";
+"2226 add_58" -> "2336 add_61";
+"2227 _tensor_constant106" -> "2229 _tensor_constant106_0_0_nncf_smooth_quant_0";
+"2228 linear_104_updated_constant0" -> "2232 quantize_per_channel_default_105";
+"2229 _tensor_constant106_0_0_nncf_smooth_quant_0" -> "2235 linear_104";
+"2230 linear_104_scale_0" -> "2232 quantize_per_channel_default_105";
+"2230 linear_104_scale_0" -> "2233 dequantize_per_channel_default_105";
+"2231 linear_104_zero_point_0" -> "2232 quantize_per_channel_default_105";
+"2231 linear_104_zero_point_0" -> "2233 dequantize_per_channel_default_105";
+"2232 quantize_per_channel_default_105" -> "2233 dequantize_per_channel_default_105";
+"2233 dequantize_per_channel_default_105" -> "2235 linear_104";
+"2234 _param_constant283_0_0" -> "2235 linear_104";
+"2235 linear_104" -> "2236 relu__17";
+"2236 relu__17" -> "2238 relu__17_0_0_nncf_smooth_quant_0";
+"2237 linear_105_updated_constant0" -> "2241 quantize_per_channel_default_106";
+"2238 relu__17_0_0_nncf_smooth_quant_0" -> "2243 linear_105";
+"2239 linear_105_scale_0" -> "2241 quantize_per_channel_default_106";
+"2239 linear_105_scale_0" -> "2242 dequantize_per_channel_default_106";
+"2240 linear_105_zero_point_0" -> "2241 quantize_per_channel_default_106";
+"2240 linear_105_zero_point_0" -> "2242 dequantize_per_channel_default_106";
+"2241 quantize_per_channel_default_106" -> "2242 dequantize_per_channel_default_106";
+"2242 dequantize_per_channel_default_106" -> "2243 linear_105";
+"2243 linear_105" -> "2244 view_92";
+"2244 view_92" -> "2246 index_17";
+"2245 _tensor_constant107" -> "2246 index_17";
+"2246 index_17" -> "2247 view_93";
+"2247 view_93" -> "2248 permute_77";
+"2248 permute_77" -> "2249 contiguous_32";
+"2249 contiguous_32" -> "2250 unsqueeze_49";
+"2250 unsqueeze_49" -> "2251 sigmoid_17";
+"2251 sigmoid_17" -> "2252 mul_34";
+"2252 mul_34" -> "2291 add_59";
+"2253 pad_19" -> "2254 roll_16";
+"2254 roll_16" -> "2255 view_94";
+"2255 view_94" -> "2256 permute_78";
+"2256 permute_78" -> "2257 reshape_76";
+"2257 reshape_76" -> "2259 reshape_76_0_0_nncf_smooth_quant_0";
+"2257 reshape_76" -> "2292 new_zeros_8";
+"2258 linear_106_updated_constant0" -> "2264 quantize_per_channel_default_107";
+"2259 reshape_76_0_0_nncf_smooth_quant_0" -> "2260 quantize_per_tensor_default_105";
+"2260 quantize_per_tensor_default_105" -> "2261 dequantize_per_tensor_default_105";
+"2261 dequantize_per_tensor_default_105" -> "2267 linear_106";
+"2262 linear_106_scale_0" -> "2264 quantize_per_channel_default_107";
+"2262 linear_106_scale_0" -> "2265 dequantize_per_channel_default_107";
+"2263 linear_106_zero_point_0" -> "2264 quantize_per_channel_default_107";
+"2263 linear_106_zero_point_0" -> "2265 dequantize_per_channel_default_107";
+"2264 quantize_per_channel_default_107" -> "2265 dequantize_per_channel_default_107";
+"2265 dequantize_per_channel_default_107" -> "2267 linear_106";
+"2266 _param_constant285_0_0" -> "2267 linear_106";
+"2267 linear_106" -> "2268 reshape_77";
+"2268 reshape_77" -> "2269 permute_79";
+"2269 permute_79" -> "2270 select_51";
+"2269 permute_79" -> "2271 select_52";
+"2269 permute_79" -> "2272 select_53";
+"2270 select_51" -> "2273 linalg_vector_norm_34";
+"2270 select_51" -> "2275 expand_as_34";
+"2270 select_51" -> "2276 div_34";
+"2271 select_52" -> "2279 linalg_vector_norm_35";
+"2271 select_52" -> "2281 expand_as_35";
+"2271 select_52" -> "2282 div_35";
+"2272 select_53" -> "2310 matmul_35";
+"2273 linalg_vector_norm_34" -> "2274 clamp_min_34";
+"2274 clamp_min_34" -> "2275 expand_as_34";
+"2275 expand_as_34" -> "2276 div_34";
+"2276 div_34" -> "2277 quantize_per_tensor_default_106";
+"2277 quantize_per_tensor_default_106" -> "2278 dequantize_per_tensor_default_106";
+"2278 dequantize_per_tensor_default_106" -> "2286 matmul_34";
+"2279 linalg_vector_norm_35" -> "2280 clamp_min_35";
+"2280 clamp_min_35" -> "2281 expand_as_35";
+"2281 expand_as_35" -> "2282 div_35";
+"2282 div_35" -> "2283 quantize_per_tensor_default_107";
+"2283 quantize_per_tensor_default_107" -> "2284 dequantize_per_tensor_default_107";
+"2284 dequantize_per_tensor_default_107" -> "2285 transpose_34";
+"2285 transpose_34" -> "2286 matmul_34";
+"2286 matmul_34" -> "2290 mul_35";
+"2287 _param_constant287" -> "2288 clamp_17";
+"2288 clamp_17" -> "2289 exp_17";
+"2289 exp_17" -> "2290 mul_35";
+"2290 mul_35" -> "2291 add_59";
+"2291 add_59" -> "2303 view_96";
+"2292 new_zeros_8" -> "2293 view_95";
+"2293 view_95" -> "2294 permute_80";
+"2294 permute_80" -> "2295 reshape_78";
+"2295 reshape_78" -> "2296 unsqueeze_50";
+"2295 reshape_78" -> "2297 unsqueeze_51";
+"2296 unsqueeze_50" -> "2298 sub_8";
+"2297 unsqueeze_51" -> "2298 sub_8";
+"2298 sub_8" -> "2299 ne_8";
+"2298 sub_8" -> "2300 masked_fill_16";
+"2298 sub_8" -> "2301 eq_8";
+"2299 ne_8" -> "2300 masked_fill_16";
+"2300 masked_fill_16" -> "2302 masked_fill_17";
+"2301 eq_8" -> "2302 masked_fill_17";
+"2302 masked_fill_17" -> "2304 unsqueeze_52";
+"2303 view_96" -> "2306 add_60";
+"2304 unsqueeze_52" -> "2305 unsqueeze_53";
+"2305 unsqueeze_53" -> "2306 add_60";
+"2306 add_60" -> "2307 view_97";
+"2307 view_97" -> "2308 softmax_17";
+"2308 softmax_17" -> "2309 dropout_68";
+"2309 dropout_68" -> "2310 matmul_35";
+"2310 matmul_35" -> "2311 transpose_35";
+"2311 transpose_35" -> "2312 reshape_79";
+"2312 reshape_79" -> "2314 reshape_79_0_0_nncf_smooth_quant_0";
+"2313 linear_107_updated_constant0" -> "2319 quantize_per_channel_default_108";
+"2314 reshape_79_0_0_nncf_smooth_quant_0" -> "2315 quantize_per_tensor_default_108";
+"2315 quantize_per_tensor_default_108" -> "2316 dequantize_per_tensor_default_108";
+"2316 dequantize_per_tensor_default_108" -> "2322 linear_107";
+"2317 linear_107_scale_0" -> "2319 quantize_per_channel_default_108";
+"2317 linear_107_scale_0" -> "2320 dequantize_per_channel_default_108";
+"2318 linear_107_zero_point_0" -> "2319 quantize_per_channel_default_108";
+"2318 linear_107_zero_point_0" -> "2320 dequantize_per_channel_default_108";
+"2319 quantize_per_channel_default_108" -> "2320 dequantize_per_channel_default_108";
+"2320 dequantize_per_channel_default_108" -> "2322 linear_107";
+"2321 _param_constant289_0_0" -> "2322 linear_107";
+"2322 linear_107" -> "2323 dropout_69";
+"2323 dropout_69" -> "2324 view_98";
+"2324 view_98" -> "2325 permute_81";
+"2325 permute_81" -> "2326 reshape_80";
+"2326 reshape_80" -> "2327 roll_17";
+"2327 roll_17" -> "2328 slice_269";
+"2328 slice_269" -> "2329 slice_270";
+"2329 slice_270" -> "2330 slice_271";
+"2330 slice_271" -> "2331 slice_272";
+"2331 slice_272" -> "2332 contiguous_33";
+"2332 contiguous_33" -> "2335 layer_norm_37";
+"2333 _param_constant290" -> "2335 layer_norm_37";
+"2334 _param_constant291" -> "2335 layer_norm_37";
+"2335 layer_norm_37" -> "2336 add_61";
+"2336 add_61" -> "2338 add_61_0_0_nncf_smooth_quant_0";
+"2336 add_61" -> "2363 add_62";
+"2337 linear_108_updated_constant0" -> "2343 quantize_per_channel_default_109";
+"2338 add_61_0_0_nncf_smooth_quant_0" -> "2339 quantize_per_tensor_default_109";
+"2339 quantize_per_tensor_default_109" -> "2340 dequantize_per_tensor_default_109";
+"2340 dequantize_per_tensor_default_109" -> "2346 linear_108";
+"2341 linear_108_scale_0" -> "2343 quantize_per_channel_default_109";
+"2341 linear_108_scale_0" -> "2344 dequantize_per_channel_default_109";
+"2342 linear_108_zero_point_0" -> "2343 quantize_per_channel_default_109";
+"2342 linear_108_zero_point_0" -> "2344 dequantize_per_channel_default_109";
+"2343 quantize_per_channel_default_109" -> "2344 dequantize_per_channel_default_109";
+"2344 dequantize_per_channel_default_109" -> "2346 linear_108";
+"2345 _param_constant293_0_0" -> "2346 linear_108";
+"2346 linear_108" -> "2347 gelu_17";
+"2347 gelu_17" -> "2348 dropout_70";
+"2348 dropout_70" -> "2350 dropout_70_0_0_nncf_smooth_quant_0";
+"2349 linear_109_updated_constant0" -> "2355 quantize_per_channel_default_110";
+"2350 dropout_70_0_0_nncf_smooth_quant_0" -> "2351 quantize_per_tensor_default_110";
+"2351 quantize_per_tensor_default_110" -> "2352 dequantize_per_tensor_default_110";
+"2352 dequantize_per_tensor_default_110" -> "2358 linear_109";
+"2353 linear_109_scale_0" -> "2355 quantize_per_channel_default_110";
+"2353 linear_109_scale_0" -> "2356 dequantize_per_channel_default_110";
+"2354 linear_109_zero_point_0" -> "2355 quantize_per_channel_default_110";
+"2354 linear_109_zero_point_0" -> "2356 dequantize_per_channel_default_110";
+"2355 quantize_per_channel_default_110" -> "2356 dequantize_per_channel_default_110";
+"2356 dequantize_per_channel_default_110" -> "2358 linear_109";
+"2357 _param_constant295_0_0" -> "2358 linear_109";
+"2358 linear_109" -> "2359 dropout_71";
+"2359 dropout_71" -> "2362 layer_norm_38";
+"2360 _param_constant296" -> "2362 layer_norm_38";
+"2361 _param_constant297" -> "2362 layer_norm_38";
+"2362 layer_norm_38" -> "2363 add_62";
+"2363 add_62" -> "2390 pad_20";
+"2363 add_62" -> "2455 add_64";
+"2364 _tensor_constant117" -> "2366 _tensor_constant117_0_0_nncf_smooth_quant_0";
+"2365 linear_110_updated_constant0" -> "2369 quantize_per_channel_default_111";
+"2366 _tensor_constant117_0_0_nncf_smooth_quant_0" -> "2372 linear_110";
+"2367 linear_110_scale_0" -> "2369 quantize_per_channel_default_111";
+"2367 linear_110_scale_0" -> "2370 dequantize_per_channel_default_111";
+"2368 linear_110_zero_point_0" -> "2369 quantize_per_channel_default_111";
+"2368 linear_110_zero_point_0" -> "2370 dequantize_per_channel_default_111";
+"2369 quantize_per_channel_default_111" -> "2370 dequantize_per_channel_default_111";
+"2370 dequantize_per_channel_default_111" -> "2372 linear_110";
+"2371 _param_constant299_0_0" -> "2372 linear_110";
+"2372 linear_110" -> "2373 relu__18";
+"2373 relu__18" -> "2375 relu__18_0_0_nncf_smooth_quant_0";
+"2374 linear_111_updated_constant0" -> "2378 quantize_per_channel_default_112";
+"2375 relu__18_0_0_nncf_smooth_quant_0" -> "2380 linear_111";
+"2376 linear_111_scale_0" -> "2378 quantize_per_channel_default_112";
+"2376 linear_111_scale_0" -> "2379 dequantize_per_channel_default_112";
+"2377 linear_111_zero_point_0" -> "2378 quantize_per_channel_default_112";
+"2377 linear_111_zero_point_0" -> "2379 dequantize_per_channel_default_112";
+"2378 quantize_per_channel_default_112" -> "2379 dequantize_per_channel_default_112";
+"2379 dequantize_per_channel_default_112" -> "2380 linear_111";
+"2380 linear_111" -> "2381 view_99";
+"2381 view_99" -> "2383 index_18";
+"2382 _tensor_constant118" -> "2383 index_18";
+"2383 index_18" -> "2384 view_100";
+"2384 view_100" -> "2385 permute_82";
+"2385 permute_82" -> "2386 contiguous_34";
+"2386 contiguous_34" -> "2387 unsqueeze_54";
+"2387 unsqueeze_54" -> "2388 sigmoid_18";
+"2388 sigmoid_18" -> "2389 mul_36";
+"2389 mul_36" -> "2427 add_63";
+"2390 pad_20" -> "2391 view_101";
+"2391 view_101" -> "2392 permute_83";
+"2392 permute_83" -> "2393 reshape_81";
+"2393 reshape_81" -> "2395 reshape_81_0_0_nncf_smooth_quant_0";
+"2394 linear_112_updated_constant0" -> "2400 quantize_per_channel_default_113";
+"2395 reshape_81_0_0_nncf_smooth_quant_0" -> "2396 quantize_per_tensor_default_111";
+"2396 quantize_per_tensor_default_111" -> "2397 dequantize_per_tensor_default_111";
+"2397 dequantize_per_tensor_default_111" -> "2403 linear_112";
+"2398 linear_112_scale_0" -> "2400 quantize_per_channel_default_113";
+"2398 linear_112_scale_0" -> "2401 dequantize_per_channel_default_113";
+"2399 linear_112_zero_point_0" -> "2400 quantize_per_channel_default_113";
+"2399 linear_112_zero_point_0" -> "2401 dequantize_per_channel_default_113";
+"2400 quantize_per_channel_default_113" -> "2401 dequantize_per_channel_default_113";
+"2401 dequantize_per_channel_default_113" -> "2403 linear_112";
+"2402 _param_constant301_0_0" -> "2403 linear_112";
+"2403 linear_112" -> "2404 reshape_82";
+"2404 reshape_82" -> "2405 permute_84";
+"2405 permute_84" -> "2406 select_54";
+"2405 permute_84" -> "2407 select_55";
+"2405 permute_84" -> "2408 select_56";
+"2406 select_54" -> "2409 linalg_vector_norm_36";
+"2406 select_54" -> "2411 expand_as_36";
+"2406 select_54" -> "2412 div_36";
+"2407 select_55" -> "2415 linalg_vector_norm_37";
+"2407 select_55" -> "2417 expand_as_37";
+"2407 select_55" -> "2418 div_37";
+"2408 select_56" -> "2430 matmul_37";
+"2409 linalg_vector_norm_36" -> "2410 clamp_min_36";
+"2410 clamp_min_36" -> "2411 expand_as_36";
+"2411 expand_as_36" -> "2412 div_36";
+"2412 div_36" -> "2413 quantize_per_tensor_default_112";
+"2413 quantize_per_tensor_default_112" -> "2414 dequantize_per_tensor_default_112";
+"2414 dequantize_per_tensor_default_112" -> "2422 matmul_36";
+"2415 linalg_vector_norm_37" -> "2416 clamp_min_37";
+"2416 clamp_min_37" -> "2417 expand_as_37";
+"2417 expand_as_37" -> "2418 div_37";
+"2418 div_37" -> "2419 quantize_per_tensor_default_113";
+"2419 quantize_per_tensor_default_113" -> "2420 dequantize_per_tensor_default_113";
+"2420 dequantize_per_tensor_default_113" -> "2421 transpose_36";
+"2421 transpose_36" -> "2422 matmul_36";
+"2422 matmul_36" -> "2426 mul_37";
+"2423 _param_constant303" -> "2424 clamp_18";
+"2424 clamp_18" -> "2425 exp_18";
+"2425 exp_18" -> "2426 mul_37";
+"2426 mul_37" -> "2427 add_63";
+"2427 add_63" -> "2428 softmax_18";
+"2428 softmax_18" -> "2429 dropout_72";
+"2429 dropout_72" -> "2430 matmul_37";
+"2430 matmul_37" -> "2431 transpose_37";
+"2431 transpose_37" -> "2432 reshape_83";
+"2432 reshape_83" -> "2434 reshape_83_0_0_nncf_smooth_quant_0";
+"2433 linear_113_updated_constant0" -> "2439 quantize_per_channel_default_114";
+"2434 reshape_83_0_0_nncf_smooth_quant_0" -> "2435 quantize_per_tensor_default_114";
+"2435 quantize_per_tensor_default_114" -> "2436 dequantize_per_tensor_default_114";
+"2436 dequantize_per_tensor_default_114" -> "2442 linear_113";
+"2437 linear_113_scale_0" -> "2439 quantize_per_channel_default_114";
+"2437 linear_113_scale_0" -> "2440 dequantize_per_channel_default_114";
+"2438 linear_113_zero_point_0" -> "2439 quantize_per_channel_default_114";
+"2438 linear_113_zero_point_0" -> "2440 dequantize_per_channel_default_114";
+"2439 quantize_per_channel_default_114" -> "2440 dequantize_per_channel_default_114";
+"2440 dequantize_per_channel_default_114" -> "2442 linear_113";
+"2441 _param_constant305_0_0" -> "2442 linear_113";
+"2442 linear_113" -> "2443 dropout_73";
+"2443 dropout_73" -> "2444 view_102";
+"2444 view_102" -> "2445 permute_85";
+"2445 permute_85" -> "2446 reshape_84";
+"2446 reshape_84" -> "2447 slice_274";
+"2447 slice_274" -> "2448 slice_275";
+"2448 slice_275" -> "2449 slice_276";
+"2449 slice_276" -> "2450 slice_277";
+"2450 slice_277" -> "2451 contiguous_35";
+"2451 contiguous_35" -> "2454 layer_norm_39";
+"2452 _param_constant306" -> "2454 layer_norm_39";
+"2453 _param_constant307" -> "2454 layer_norm_39";
+"2454 layer_norm_39" -> "2455 add_64";
+"2455 add_64" -> "2457 add_64_0_0_nncf_smooth_quant_0";
+"2455 add_64" -> "2482 add_65";
+"2456 linear_114_updated_constant0" -> "2462 quantize_per_channel_default_115";
+"2457 add_64_0_0_nncf_smooth_quant_0" -> "2458 quantize_per_tensor_default_115";
+"2458 quantize_per_tensor_default_115" -> "2459 dequantize_per_tensor_default_115";
+"2459 dequantize_per_tensor_default_115" -> "2465 linear_114";
+"2460 linear_114_scale_0" -> "2462 quantize_per_channel_default_115";
+"2460 linear_114_scale_0" -> "2463 dequantize_per_channel_default_115";
+"2461 linear_114_zero_point_0" -> "2462 quantize_per_channel_default_115";
+"2461 linear_114_zero_point_0" -> "2463 dequantize_per_channel_default_115";
+"2462 quantize_per_channel_default_115" -> "2463 dequantize_per_channel_default_115";
+"2463 dequantize_per_channel_default_115" -> "2465 linear_114";
+"2464 _param_constant309_0_0" -> "2465 linear_114";
+"2465 linear_114" -> "2466 gelu_18";
+"2466 gelu_18" -> "2467 dropout_74";
+"2467 dropout_74" -> "2469 dropout_74_0_0_nncf_smooth_quant_0";
+"2468 linear_115_updated_constant0" -> "2474 quantize_per_channel_default_116";
+"2469 dropout_74_0_0_nncf_smooth_quant_0" -> "2470 quantize_per_tensor_default_116";
+"2470 quantize_per_tensor_default_116" -> "2471 dequantize_per_tensor_default_116";
+"2471 dequantize_per_tensor_default_116" -> "2477 linear_115";
+"2472 linear_115_scale_0" -> "2474 quantize_per_channel_default_116";
+"2472 linear_115_scale_0" -> "2475 dequantize_per_channel_default_116";
+"2473 linear_115_zero_point_0" -> "2474 quantize_per_channel_default_116";
+"2473 linear_115_zero_point_0" -> "2475 dequantize_per_channel_default_116";
+"2474 quantize_per_channel_default_116" -> "2475 dequantize_per_channel_default_116";
+"2475 dequantize_per_channel_default_116" -> "2477 linear_115";
+"2476 _param_constant311_0_0" -> "2477 linear_115";
+"2477 linear_115" -> "2478 dropout_75";
+"2478 dropout_75" -> "2481 layer_norm_40";
+"2479 _param_constant312" -> "2481 layer_norm_40";
+"2480 _param_constant313" -> "2481 layer_norm_40";
+"2481 layer_norm_40" -> "2482 add_65";
+"2482 add_65" -> "2509 pad_21";
+"2482 add_65" -> "2592 add_68";
+"2483 _tensor_constant119" -> "2485 _tensor_constant119_0_0_nncf_smooth_quant_0";
+"2484 linear_116_updated_constant0" -> "2488 quantize_per_channel_default_117";
+"2485 _tensor_constant119_0_0_nncf_smooth_quant_0" -> "2491 linear_116";
+"2486 linear_116_scale_0" -> "2488 quantize_per_channel_default_117";
+"2486 linear_116_scale_0" -> "2489 dequantize_per_channel_default_117";
+"2487 linear_116_zero_point_0" -> "2488 quantize_per_channel_default_117";
+"2487 linear_116_zero_point_0" -> "2489 dequantize_per_channel_default_117";
+"2488 quantize_per_channel_default_117" -> "2489 dequantize_per_channel_default_117";
+"2489 dequantize_per_channel_default_117" -> "2491 linear_116";
+"2490 _param_constant315_0_0" -> "2491 linear_116";
+"2491 linear_116" -> "2492 relu__19";
+"2492 relu__19" -> "2494 relu__19_0_0_nncf_smooth_quant_0";
+"2493 linear_117_updated_constant0" -> "2497 quantize_per_channel_default_118";
+"2494 relu__19_0_0_nncf_smooth_quant_0" -> "2499 linear_117";
+"2495 linear_117_scale_0" -> "2497 quantize_per_channel_default_118";
+"2495 linear_117_scale_0" -> "2498 dequantize_per_channel_default_118";
+"2496 linear_117_zero_point_0" -> "2497 quantize_per_channel_default_118";
+"2496 linear_117_zero_point_0" -> "2498 dequantize_per_channel_default_118";
+"2497 quantize_per_channel_default_118" -> "2498 dequantize_per_channel_default_118";
+"2498 dequantize_per_channel_default_118" -> "2499 linear_117";
+"2499 linear_117" -> "2500 view_103";
+"2500 view_103" -> "2502 index_19";
+"2501 _tensor_constant120" -> "2502 index_19";
+"2502 index_19" -> "2503 view_104";
+"2503 view_104" -> "2504 permute_86";
+"2504 permute_86" -> "2505 contiguous_36";
+"2505 contiguous_36" -> "2506 unsqueeze_55";
+"2506 unsqueeze_55" -> "2507 sigmoid_19";
+"2507 sigmoid_19" -> "2508 mul_38";
+"2508 mul_38" -> "2547 add_66";
+"2509 pad_21" -> "2510 roll_18";
+"2510 roll_18" -> "2511 view_105";
+"2511 view_105" -> "2512 permute_87";
+"2512 permute_87" -> "2513 reshape_85";
+"2513 reshape_85" -> "2515 reshape_85_0_0_nncf_smooth_quant_0";
+"2513 reshape_85" -> "2548 new_zeros_9";
+"2514 linear_118_updated_constant0" -> "2520 quantize_per_channel_default_119";
+"2515 reshape_85_0_0_nncf_smooth_quant_0" -> "2516 quantize_per_tensor_default_117";
+"2516 quantize_per_tensor_default_117" -> "2517 dequantize_per_tensor_default_117";
+"2517 dequantize_per_tensor_default_117" -> "2523 linear_118";
+"2518 linear_118_scale_0" -> "2520 quantize_per_channel_default_119";
+"2518 linear_118_scale_0" -> "2521 dequantize_per_channel_default_119";
+"2519 linear_118_zero_point_0" -> "2520 quantize_per_channel_default_119";
+"2519 linear_118_zero_point_0" -> "2521 dequantize_per_channel_default_119";
+"2520 quantize_per_channel_default_119" -> "2521 dequantize_per_channel_default_119";
+"2521 dequantize_per_channel_default_119" -> "2523 linear_118";
+"2522 _param_constant317_0_0" -> "2523 linear_118";
+"2523 linear_118" -> "2524 reshape_86";
+"2524 reshape_86" -> "2525 permute_88";
+"2525 permute_88" -> "2526 select_57";
+"2525 permute_88" -> "2527 select_58";
+"2525 permute_88" -> "2528 select_59";
+"2526 select_57" -> "2529 linalg_vector_norm_38";
+"2526 select_57" -> "2531 expand_as_38";
+"2526 select_57" -> "2532 div_38";
+"2527 select_58" -> "2535 linalg_vector_norm_39";
+"2527 select_58" -> "2537 expand_as_39";
+"2527 select_58" -> "2538 div_39";
+"2528 select_59" -> "2566 matmul_39";
+"2529 linalg_vector_norm_38" -> "2530 clamp_min_38";
+"2530 clamp_min_38" -> "2531 expand_as_38";
+"2531 expand_as_38" -> "2532 div_38";
+"2532 div_38" -> "2533 quantize_per_tensor_default_118";
+"2533 quantize_per_tensor_default_118" -> "2534 dequantize_per_tensor_default_118";
+"2534 dequantize_per_tensor_default_118" -> "2542 matmul_38";
+"2535 linalg_vector_norm_39" -> "2536 clamp_min_39";
+"2536 clamp_min_39" -> "2537 expand_as_39";
+"2537 expand_as_39" -> "2538 div_39";
+"2538 div_39" -> "2539 quantize_per_tensor_default_119";
+"2539 quantize_per_tensor_default_119" -> "2540 dequantize_per_tensor_default_119";
+"2540 dequantize_per_tensor_default_119" -> "2541 transpose_38";
+"2541 transpose_38" -> "2542 matmul_38";
+"2542 matmul_38" -> "2546 mul_39";
+"2543 _param_constant319" -> "2544 clamp_19";
+"2544 clamp_19" -> "2545 exp_19";
+"2545 exp_19" -> "2546 mul_39";
+"2546 mul_39" -> "2547 add_66";
+"2547 add_66" -> "2559 view_107";
+"2548 new_zeros_9" -> "2549 view_106";
+"2549 view_106" -> "2550 permute_89";
+"2550 permute_89" -> "2551 reshape_87";
+"2551 reshape_87" -> "2552 unsqueeze_56";
+"2551 reshape_87" -> "2553 unsqueeze_57";
+"2552 unsqueeze_56" -> "2554 sub_9";
+"2553 unsqueeze_57" -> "2554 sub_9";
+"2554 sub_9" -> "2555 ne_9";
+"2554 sub_9" -> "2556 masked_fill_18";
+"2554 sub_9" -> "2557 eq_9";
+"2555 ne_9" -> "2556 masked_fill_18";
+"2556 masked_fill_18" -> "2558 masked_fill_19";
+"2557 eq_9" -> "2558 masked_fill_19";
+"2558 masked_fill_19" -> "2560 unsqueeze_58";
+"2559 view_107" -> "2562 add_67";
+"2560 unsqueeze_58" -> "2561 unsqueeze_59";
+"2561 unsqueeze_59" -> "2562 add_67";
+"2562 add_67" -> "2563 view_108";
+"2563 view_108" -> "2564 softmax_19";
+"2564 softmax_19" -> "2565 dropout_76";
+"2565 dropout_76" -> "2566 matmul_39";
+"2566 matmul_39" -> "2567 transpose_39";
+"2567 transpose_39" -> "2568 reshape_88";
+"2568 reshape_88" -> "2570 reshape_88_0_0_nncf_smooth_quant_0";
+"2569 linear_119_updated_constant0" -> "2575 quantize_per_channel_default_120";
+"2570 reshape_88_0_0_nncf_smooth_quant_0" -> "2571 quantize_per_tensor_default_120";
+"2571 quantize_per_tensor_default_120" -> "2572 dequantize_per_tensor_default_120";
+"2572 dequantize_per_tensor_default_120" -> "2578 linear_119";
+"2573 linear_119_scale_0" -> "2575 quantize_per_channel_default_120";
+"2573 linear_119_scale_0" -> "2576 dequantize_per_channel_default_120";
+"2574 linear_119_zero_point_0" -> "2575 quantize_per_channel_default_120";
+"2574 linear_119_zero_point_0" -> "2576 dequantize_per_channel_default_120";
+"2575 quantize_per_channel_default_120" -> "2576 dequantize_per_channel_default_120";
+"2576 dequantize_per_channel_default_120" -> "2578 linear_119";
+"2577 _param_constant321_0_0" -> "2578 linear_119";
+"2578 linear_119" -> "2579 dropout_77";
+"2579 dropout_77" -> "2580 view_109";
+"2580 view_109" -> "2581 permute_90";
+"2581 permute_90" -> "2582 reshape_89";
+"2582 reshape_89" -> "2583 roll_19";
+"2583 roll_19" -> "2584 slice_297";
+"2584 slice_297" -> "2585 slice_298";
+"2585 slice_298" -> "2586 slice_299";
+"2586 slice_299" -> "2587 slice_300";
+"2587 slice_300" -> "2588 contiguous_37";
+"2588 contiguous_37" -> "2591 layer_norm_41";
+"2589 _param_constant322" -> "2591 layer_norm_41";
+"2590 _param_constant323" -> "2591 layer_norm_41";
+"2591 layer_norm_41" -> "2592 add_68";
+"2592 add_68" -> "2594 add_68_0_0_nncf_smooth_quant_0";
+"2592 add_68" -> "2619 add_69";
+"2593 linear_120_updated_constant0" -> "2599 quantize_per_channel_default_121";
+"2594 add_68_0_0_nncf_smooth_quant_0" -> "2595 quantize_per_tensor_default_121";
+"2595 quantize_per_tensor_default_121" -> "2596 dequantize_per_tensor_default_121";
+"2596 dequantize_per_tensor_default_121" -> "2602 linear_120";
+"2597 linear_120_scale_0" -> "2599 quantize_per_channel_default_121";
+"2597 linear_120_scale_0" -> "2600 dequantize_per_channel_default_121";
+"2598 linear_120_zero_point_0" -> "2599 quantize_per_channel_default_121";
+"2598 linear_120_zero_point_0" -> "2600 dequantize_per_channel_default_121";
+"2599 quantize_per_channel_default_121" -> "2600 dequantize_per_channel_default_121";
+"2600 dequantize_per_channel_default_121" -> "2602 linear_120";
+"2601 _param_constant325_0_0" -> "2602 linear_120";
+"2602 linear_120" -> "2603 gelu_19";
+"2603 gelu_19" -> "2604 dropout_78";
+"2604 dropout_78" -> "2606 dropout_78_0_0_nncf_smooth_quant_0";
+"2605 linear_121_updated_constant0" -> "2611 quantize_per_channel_default_122";
+"2606 dropout_78_0_0_nncf_smooth_quant_0" -> "2607 quantize_per_tensor_default_122";
+"2607 quantize_per_tensor_default_122" -> "2608 dequantize_per_tensor_default_122";
+"2608 dequantize_per_tensor_default_122" -> "2614 linear_121";
+"2609 linear_121_scale_0" -> "2611 quantize_per_channel_default_122";
+"2609 linear_121_scale_0" -> "2612 dequantize_per_channel_default_122";
+"2610 linear_121_zero_point_0" -> "2611 quantize_per_channel_default_122";
+"2610 linear_121_zero_point_0" -> "2612 dequantize_per_channel_default_122";
+"2611 quantize_per_channel_default_122" -> "2612 dequantize_per_channel_default_122";
+"2612 dequantize_per_channel_default_122" -> "2614 linear_121";
+"2613 _param_constant327_0_0" -> "2614 linear_121";
+"2614 linear_121" -> "2615 dropout_79";
+"2615 dropout_79" -> "2618 layer_norm_42";
+"2616 _param_constant328" -> "2618 layer_norm_42";
+"2617 _param_constant329" -> "2618 layer_norm_42";
+"2618 layer_norm_42" -> "2619 add_69";
+"2619 add_69" -> "2646 pad_22";
+"2619 add_69" -> "2711 add_71";
+"2620 _tensor_constant130" -> "2622 _tensor_constant130_0_0_nncf_smooth_quant_0";
+"2621 linear_122_updated_constant0" -> "2625 quantize_per_channel_default_123";
+"2622 _tensor_constant130_0_0_nncf_smooth_quant_0" -> "2628 linear_122";
+"2623 linear_122_scale_0" -> "2625 quantize_per_channel_default_123";
+"2623 linear_122_scale_0" -> "2626 dequantize_per_channel_default_123";
+"2624 linear_122_zero_point_0" -> "2625 quantize_per_channel_default_123";
+"2624 linear_122_zero_point_0" -> "2626 dequantize_per_channel_default_123";
+"2625 quantize_per_channel_default_123" -> "2626 dequantize_per_channel_default_123";
+"2626 dequantize_per_channel_default_123" -> "2628 linear_122";
+"2627 _param_constant331_0_0" -> "2628 linear_122";
+"2628 linear_122" -> "2629 relu__20";
+"2629 relu__20" -> "2631 relu__20_0_0_nncf_smooth_quant_0";
+"2630 linear_123_updated_constant0" -> "2634 quantize_per_channel_default_124";
+"2631 relu__20_0_0_nncf_smooth_quant_0" -> "2636 linear_123";
+"2632 linear_123_scale_0" -> "2634 quantize_per_channel_default_124";
+"2632 linear_123_scale_0" -> "2635 dequantize_per_channel_default_124";
+"2633 linear_123_zero_point_0" -> "2634 quantize_per_channel_default_124";
+"2633 linear_123_zero_point_0" -> "2635 dequantize_per_channel_default_124";
+"2634 quantize_per_channel_default_124" -> "2635 dequantize_per_channel_default_124";
+"2635 dequantize_per_channel_default_124" -> "2636 linear_123";
+"2636 linear_123" -> "2637 view_110";
+"2637 view_110" -> "2639 index_20";
+"2638 _tensor_constant131" -> "2639 index_20";
+"2639 index_20" -> "2640 view_111";
+"2640 view_111" -> "2641 permute_91";
+"2641 permute_91" -> "2642 contiguous_38";
+"2642 contiguous_38" -> "2643 unsqueeze_60";
+"2643 unsqueeze_60" -> "2644 sigmoid_20";
+"2644 sigmoid_20" -> "2645 mul_40";
+"2645 mul_40" -> "2683 add_70";
+"2646 pad_22" -> "2647 view_112";
+"2647 view_112" -> "2648 permute_92";
+"2648 permute_92" -> "2649 reshape_90";
+"2649 reshape_90" -> "2651 reshape_90_0_0_nncf_smooth_quant_0";
+"2650 linear_124_updated_constant0" -> "2656 quantize_per_channel_default_125";
+"2651 reshape_90_0_0_nncf_smooth_quant_0" -> "2652 quantize_per_tensor_default_123";
+"2652 quantize_per_tensor_default_123" -> "2653 dequantize_per_tensor_default_123";
+"2653 dequantize_per_tensor_default_123" -> "2659 linear_124";
+"2654 linear_124_scale_0" -> "2656 quantize_per_channel_default_125";
+"2654 linear_124_scale_0" -> "2657 dequantize_per_channel_default_125";
+"2655 linear_124_zero_point_0" -> "2656 quantize_per_channel_default_125";
+"2655 linear_124_zero_point_0" -> "2657 dequantize_per_channel_default_125";
+"2656 quantize_per_channel_default_125" -> "2657 dequantize_per_channel_default_125";
+"2657 dequantize_per_channel_default_125" -> "2659 linear_124";
+"2658 _param_constant333_0_0" -> "2659 linear_124";
+"2659 linear_124" -> "2660 reshape_91";
+"2660 reshape_91" -> "2661 permute_93";
+"2661 permute_93" -> "2662 select_60";
+"2661 permute_93" -> "2663 select_61";
+"2661 permute_93" -> "2664 select_62";
+"2662 select_60" -> "2665 linalg_vector_norm_40";
+"2662 select_60" -> "2667 expand_as_40";
+"2662 select_60" -> "2668 div_40";
+"2663 select_61" -> "2671 linalg_vector_norm_41";
+"2663 select_61" -> "2673 expand_as_41";
+"2663 select_61" -> "2674 div_41";
+"2664 select_62" -> "2686 matmul_41";
+"2665 linalg_vector_norm_40" -> "2666 clamp_min_40";
+"2666 clamp_min_40" -> "2667 expand_as_40";
+"2667 expand_as_40" -> "2668 div_40";
+"2668 div_40" -> "2669 quantize_per_tensor_default_124";
+"2669 quantize_per_tensor_default_124" -> "2670 dequantize_per_tensor_default_124";
+"2670 dequantize_per_tensor_default_124" -> "2678 matmul_40";
+"2671 linalg_vector_norm_41" -> "2672 clamp_min_41";
+"2672 clamp_min_41" -> "2673 expand_as_41";
+"2673 expand_as_41" -> "2674 div_41";
+"2674 div_41" -> "2675 quantize_per_tensor_default_125";
+"2675 quantize_per_tensor_default_125" -> "2676 dequantize_per_tensor_default_125";
+"2676 dequantize_per_tensor_default_125" -> "2677 transpose_40";
+"2677 transpose_40" -> "2678 matmul_40";
+"2678 matmul_40" -> "2682 mul_41";
+"2679 _param_constant335" -> "2680 clamp_20";
+"2680 clamp_20" -> "2681 exp_20";
+"2681 exp_20" -> "2682 mul_41";
+"2682 mul_41" -> "2683 add_70";
+"2683 add_70" -> "2684 softmax_20";
+"2684 softmax_20" -> "2685 dropout_80";
+"2685 dropout_80" -> "2686 matmul_41";
+"2686 matmul_41" -> "2687 transpose_41";
+"2687 transpose_41" -> "2688 reshape_92";
+"2688 reshape_92" -> "2690 reshape_92_0_0_nncf_smooth_quant_0";
+"2689 linear_125_updated_constant0" -> "2695 quantize_per_channel_default_126";
+"2690 reshape_92_0_0_nncf_smooth_quant_0" -> "2691 quantize_per_tensor_default_126";
+"2691 quantize_per_tensor_default_126" -> "2692 dequantize_per_tensor_default_126";
+"2692 dequantize_per_tensor_default_126" -> "2698 linear_125";
+"2693 linear_125_scale_0" -> "2695 quantize_per_channel_default_126";
+"2693 linear_125_scale_0" -> "2696 dequantize_per_channel_default_126";
+"2694 linear_125_zero_point_0" -> "2695 quantize_per_channel_default_126";
+"2694 linear_125_zero_point_0" -> "2696 dequantize_per_channel_default_126";
+"2695 quantize_per_channel_default_126" -> "2696 dequantize_per_channel_default_126";
+"2696 dequantize_per_channel_default_126" -> "2698 linear_125";
+"2697 _param_constant337_0_0" -> "2698 linear_125";
+"2698 linear_125" -> "2699 dropout_81";
+"2699 dropout_81" -> "2700 view_113";
+"2700 view_113" -> "2701 permute_94";
+"2701 permute_94" -> "2702 reshape_93";
+"2702 reshape_93" -> "2703 slice_302";
+"2703 slice_302" -> "2704 slice_303";
+"2704 slice_303" -> "2705 slice_304";
+"2705 slice_304" -> "2706 slice_305";
+"2706 slice_305" -> "2707 contiguous_39";
+"2707 contiguous_39" -> "2710 layer_norm_43";
+"2708 _param_constant338" -> "2710 layer_norm_43";
+"2709 _param_constant339" -> "2710 layer_norm_43";
+"2710 layer_norm_43" -> "2711 add_71";
+"2711 add_71" -> "2713 add_71_0_0_nncf_smooth_quant_0";
+"2711 add_71" -> "2738 add_72";
+"2712 linear_126_updated_constant0" -> "2718 quantize_per_channel_default_127";
+"2713 add_71_0_0_nncf_smooth_quant_0" -> "2714 quantize_per_tensor_default_127";
+"2714 quantize_per_tensor_default_127" -> "2715 dequantize_per_tensor_default_127";
+"2715 dequantize_per_tensor_default_127" -> "2721 linear_126";
+"2716 linear_126_scale_0" -> "2718 quantize_per_channel_default_127";
+"2716 linear_126_scale_0" -> "2719 dequantize_per_channel_default_127";
+"2717 linear_126_zero_point_0" -> "2718 quantize_per_channel_default_127";
+"2717 linear_126_zero_point_0" -> "2719 dequantize_per_channel_default_127";
+"2718 quantize_per_channel_default_127" -> "2719 dequantize_per_channel_default_127";
+"2719 dequantize_per_channel_default_127" -> "2721 linear_126";
+"2720 _param_constant341_0_0" -> "2721 linear_126";
+"2721 linear_126" -> "2722 gelu_20";
+"2722 gelu_20" -> "2723 dropout_82";
+"2723 dropout_82" -> "2725 dropout_82_0_0_nncf_smooth_quant_0";
+"2724 linear_127_updated_constant0" -> "2730 quantize_per_channel_default_128";
+"2725 dropout_82_0_0_nncf_smooth_quant_0" -> "2726 quantize_per_tensor_default_128";
+"2726 quantize_per_tensor_default_128" -> "2727 dequantize_per_tensor_default_128";
+"2727 dequantize_per_tensor_default_128" -> "2733 linear_127";
+"2728 linear_127_scale_0" -> "2730 quantize_per_channel_default_128";
+"2728 linear_127_scale_0" -> "2731 dequantize_per_channel_default_128";
+"2729 linear_127_zero_point_0" -> "2730 quantize_per_channel_default_128";
+"2729 linear_127_zero_point_0" -> "2731 dequantize_per_channel_default_128";
+"2730 quantize_per_channel_default_128" -> "2731 dequantize_per_channel_default_128";
+"2731 dequantize_per_channel_default_128" -> "2733 linear_127";
+"2732 _param_constant343_0_0" -> "2733 linear_127";
+"2733 linear_127" -> "2734 dropout_83";
+"2734 dropout_83" -> "2737 layer_norm_44";
+"2735 _param_constant344" -> "2737 layer_norm_44";
+"2736 _param_constant345" -> "2737 layer_norm_44";
+"2737 layer_norm_44" -> "2738 add_72";
+"2738 add_72" -> "2765 pad_23";
+"2738 add_72" -> "2848 add_75";
+"2739 _tensor_constant132" -> "2741 _tensor_constant132_0_0_nncf_smooth_quant_0";
+"2740 linear_128_updated_constant0" -> "2744 quantize_per_channel_default_129";
+"2741 _tensor_constant132_0_0_nncf_smooth_quant_0" -> "2747 linear_128";
+"2742 linear_128_scale_0" -> "2744 quantize_per_channel_default_129";
+"2742 linear_128_scale_0" -> "2745 dequantize_per_channel_default_129";
+"2743 linear_128_zero_point_0" -> "2744 quantize_per_channel_default_129";
+"2743 linear_128_zero_point_0" -> "2745 dequantize_per_channel_default_129";
+"2744 quantize_per_channel_default_129" -> "2745 dequantize_per_channel_default_129";
+"2745 dequantize_per_channel_default_129" -> "2747 linear_128";
+"2746 _param_constant347_0_0" -> "2747 linear_128";
+"2747 linear_128" -> "2748 relu__21";
+"2748 relu__21" -> "2750 relu__21_0_0_nncf_smooth_quant_0";
+"2749 linear_129_updated_constant0" -> "2753 quantize_per_channel_default_130";
+"2750 relu__21_0_0_nncf_smooth_quant_0" -> "2755 linear_129";
+"2751 linear_129_scale_0" -> "2753 quantize_per_channel_default_130";
+"2751 linear_129_scale_0" -> "2754 dequantize_per_channel_default_130";
+"2752 linear_129_zero_point_0" -> "2753 quantize_per_channel_default_130";
+"2752 linear_129_zero_point_0" -> "2754 dequantize_per_channel_default_130";
+"2753 quantize_per_channel_default_130" -> "2754 dequantize_per_channel_default_130";
+"2754 dequantize_per_channel_default_130" -> "2755 linear_129";
+"2755 linear_129" -> "2756 view_114";
+"2756 view_114" -> "2758 index_21";
+"2757 _tensor_constant133" -> "2758 index_21";
+"2758 index_21" -> "2759 view_115";
+"2759 view_115" -> "2760 permute_95";
+"2760 permute_95" -> "2761 contiguous_40";
+"2761 contiguous_40" -> "2762 unsqueeze_61";
+"2762 unsqueeze_61" -> "2763 sigmoid_21";
+"2763 sigmoid_21" -> "2764 mul_42";
+"2764 mul_42" -> "2803 add_73";
+"2765 pad_23" -> "2766 roll_20";
+"2766 roll_20" -> "2767 view_116";
+"2767 view_116" -> "2768 permute_96";
+"2768 permute_96" -> "2769 reshape_94";
+"2769 reshape_94" -> "2771 reshape_94_0_0_nncf_smooth_quant_0";
+"2769 reshape_94" -> "2804 new_zeros_10";
+"2770 linear_130_updated_constant0" -> "2776 quantize_per_channel_default_131";
+"2771 reshape_94_0_0_nncf_smooth_quant_0" -> "2772 quantize_per_tensor_default_129";
+"2772 quantize_per_tensor_default_129" -> "2773 dequantize_per_tensor_default_129";
+"2773 dequantize_per_tensor_default_129" -> "2779 linear_130";
+"2774 linear_130_scale_0" -> "2776 quantize_per_channel_default_131";
+"2774 linear_130_scale_0" -> "2777 dequantize_per_channel_default_131";
+"2775 linear_130_zero_point_0" -> "2776 quantize_per_channel_default_131";
+"2775 linear_130_zero_point_0" -> "2777 dequantize_per_channel_default_131";
+"2776 quantize_per_channel_default_131" -> "2777 dequantize_per_channel_default_131";
+"2777 dequantize_per_channel_default_131" -> "2779 linear_130";
+"2778 _param_constant349_0_0" -> "2779 linear_130";
+"2779 linear_130" -> "2780 reshape_95";
+"2780 reshape_95" -> "2781 permute_97";
+"2781 permute_97" -> "2782 select_63";
+"2781 permute_97" -> "2783 select_64";
+"2781 permute_97" -> "2784 select_65";
+"2782 select_63" -> "2785 linalg_vector_norm_42";
+"2782 select_63" -> "2787 expand_as_42";
+"2782 select_63" -> "2788 div_42";
+"2783 select_64" -> "2791 linalg_vector_norm_43";
+"2783 select_64" -> "2793 expand_as_43";
+"2783 select_64" -> "2794 div_43";
+"2784 select_65" -> "2822 matmul_43";
+"2785 linalg_vector_norm_42" -> "2786 clamp_min_42";
+"2786 clamp_min_42" -> "2787 expand_as_42";
+"2787 expand_as_42" -> "2788 div_42";
+"2788 div_42" -> "2789 quantize_per_tensor_default_130";
+"2789 quantize_per_tensor_default_130" -> "2790 dequantize_per_tensor_default_130";
+"2790 dequantize_per_tensor_default_130" -> "2798 matmul_42";
+"2791 linalg_vector_norm_43" -> "2792 clamp_min_43";
+"2792 clamp_min_43" -> "2793 expand_as_43";
+"2793 expand_as_43" -> "2794 div_43";
+"2794 div_43" -> "2795 quantize_per_tensor_default_131";
+"2795 quantize_per_tensor_default_131" -> "2796 dequantize_per_tensor_default_131";
+"2796 dequantize_per_tensor_default_131" -> "2797 transpose_42";
+"2797 transpose_42" -> "2798 matmul_42";
+"2798 matmul_42" -> "2802 mul_43";
+"2799 _param_constant351" -> "2800 clamp_21";
+"2800 clamp_21" -> "2801 exp_21";
+"2801 exp_21" -> "2802 mul_43";
+"2802 mul_43" -> "2803 add_73";
+"2803 add_73" -> "2815 view_118";
+"2804 new_zeros_10" -> "2805 view_117";
+"2805 view_117" -> "2806 permute_98";
+"2806 permute_98" -> "2807 reshape_96";
+"2807 reshape_96" -> "2808 unsqueeze_62";
+"2807 reshape_96" -> "2809 unsqueeze_63";
+"2808 unsqueeze_62" -> "2810 sub_10";
+"2809 unsqueeze_63" -> "2810 sub_10";
+"2810 sub_10" -> "2811 ne_10";
+"2810 sub_10" -> "2812 masked_fill_20";
+"2810 sub_10" -> "2813 eq_10";
+"2811 ne_10" -> "2812 masked_fill_20";
+"2812 masked_fill_20" -> "2814 masked_fill_21";
+"2813 eq_10" -> "2814 masked_fill_21";
+"2814 masked_fill_21" -> "2816 unsqueeze_64";
+"2815 view_118" -> "2818 add_74";
+"2816 unsqueeze_64" -> "2817 unsqueeze_65";
+"2817 unsqueeze_65" -> "2818 add_74";
+"2818 add_74" -> "2819 view_119";
+"2819 view_119" -> "2820 softmax_21";
+"2820 softmax_21" -> "2821 dropout_84";
+"2821 dropout_84" -> "2822 matmul_43";
+"2822 matmul_43" -> "2823 transpose_43";
+"2823 transpose_43" -> "2824 reshape_97";
+"2824 reshape_97" -> "2826 reshape_97_0_0_nncf_smooth_quant_0";
+"2825 linear_131_updated_constant0" -> "2831 quantize_per_channel_default_132";
+"2826 reshape_97_0_0_nncf_smooth_quant_0" -> "2827 quantize_per_tensor_default_132";
+"2827 quantize_per_tensor_default_132" -> "2828 dequantize_per_tensor_default_132";
+"2828 dequantize_per_tensor_default_132" -> "2834 linear_131";
+"2829 linear_131_scale_0" -> "2831 quantize_per_channel_default_132";
+"2829 linear_131_scale_0" -> "2832 dequantize_per_channel_default_132";
+"2830 linear_131_zero_point_0" -> "2831 quantize_per_channel_default_132";
+"2830 linear_131_zero_point_0" -> "2832 dequantize_per_channel_default_132";
+"2831 quantize_per_channel_default_132" -> "2832 dequantize_per_channel_default_132";
+"2832 dequantize_per_channel_default_132" -> "2834 linear_131";
+"2833 _param_constant353_0_0" -> "2834 linear_131";
+"2834 linear_131" -> "2835 dropout_85";
+"2835 dropout_85" -> "2836 view_120";
+"2836 view_120" -> "2837 permute_99";
+"2837 permute_99" -> "2838 reshape_98";
+"2838 reshape_98" -> "2839 roll_21";
+"2839 roll_21" -> "2840 slice_325";
+"2840 slice_325" -> "2841 slice_326";
+"2841 slice_326" -> "2842 slice_327";
+"2842 slice_327" -> "2843 slice_328";
+"2843 slice_328" -> "2844 contiguous_41";
+"2844 contiguous_41" -> "2847 layer_norm_45";
+"2845 _param_constant354" -> "2847 layer_norm_45";
+"2846 _param_constant355" -> "2847 layer_norm_45";
+"2847 layer_norm_45" -> "2848 add_75";
+"2848 add_75" -> "2850 add_75_0_0_nncf_smooth_quant_0";
+"2848 add_75" -> "2875 add_76";
+"2849 linear_132_updated_constant0" -> "2855 quantize_per_channel_default_133";
+"2850 add_75_0_0_nncf_smooth_quant_0" -> "2851 quantize_per_tensor_default_133";
+"2851 quantize_per_tensor_default_133" -> "2852 dequantize_per_tensor_default_133";
+"2852 dequantize_per_tensor_default_133" -> "2858 linear_132";
+"2853 linear_132_scale_0" -> "2855 quantize_per_channel_default_133";
+"2853 linear_132_scale_0" -> "2856 dequantize_per_channel_default_133";
+"2854 linear_132_zero_point_0" -> "2855 quantize_per_channel_default_133";
+"2854 linear_132_zero_point_0" -> "2856 dequantize_per_channel_default_133";
+"2855 quantize_per_channel_default_133" -> "2856 dequantize_per_channel_default_133";
+"2856 dequantize_per_channel_default_133" -> "2858 linear_132";
+"2857 _param_constant357_0_0" -> "2858 linear_132";
+"2858 linear_132" -> "2859 gelu_21";
+"2859 gelu_21" -> "2860 dropout_86";
+"2860 dropout_86" -> "2862 dropout_86_0_0_nncf_smooth_quant_0";
+"2861 linear_133_updated_constant0" -> "2867 quantize_per_channel_default_134";
+"2862 dropout_86_0_0_nncf_smooth_quant_0" -> "2863 quantize_per_tensor_default_134";
+"2863 quantize_per_tensor_default_134" -> "2864 dequantize_per_tensor_default_134";
+"2864 dequantize_per_tensor_default_134" -> "2870 linear_133";
+"2865 linear_133_scale_0" -> "2867 quantize_per_channel_default_134";
+"2865 linear_133_scale_0" -> "2868 dequantize_per_channel_default_134";
+"2866 linear_133_zero_point_0" -> "2867 quantize_per_channel_default_134";
+"2866 linear_133_zero_point_0" -> "2868 dequantize_per_channel_default_134";
+"2867 quantize_per_channel_default_134" -> "2868 dequantize_per_channel_default_134";
+"2868 dequantize_per_channel_default_134" -> "2870 linear_133";
+"2869 _param_constant359_0_0" -> "2870 linear_133";
+"2870 linear_133" -> "2871 dropout_87";
+"2871 dropout_87" -> "2874 layer_norm_46";
+"2872 _param_constant360" -> "2874 layer_norm_46";
+"2873 _param_constant361" -> "2874 layer_norm_46";
+"2874 layer_norm_46" -> "2875 add_76";
+"2875 add_76" -> "2876 pad_24";
+"2876 pad_24" -> "2877 slice_329";
+"2876 pad_24" -> "2880 slice_332";
+"2876 pad_24" -> "2883 slice_335";
+"2876 pad_24" -> "2886 slice_338";
+"2877 slice_329" -> "2878 slice_330";
+"2878 slice_330" -> "2879 slice_331";
+"2879 slice_331" -> "2889 cat_2";
+"2880 slice_332" -> "2881 slice_333";
+"2881 slice_333" -> "2882 slice_334";
+"2882 slice_334" -> "2889 cat_2";
+"2883 slice_335" -> "2884 slice_336";
+"2884 slice_336" -> "2885 slice_337";
+"2885 slice_337" -> "2889 cat_2";
+"2886 slice_338" -> "2887 slice_339";
+"2887 slice_339" -> "2888 slice_340";
+"2888 slice_340" -> "2889 cat_2";
+"2889 cat_2" -> "2891 cat_2_0_0_nncf_smooth_quant_0";
+"2890 linear_134_updated_constant0" -> "2896 quantize_per_channel_default_135";
+"2891 cat_2_0_0_nncf_smooth_quant_0" -> "2892 quantize_per_tensor_default_135";
+"2892 quantize_per_tensor_default_135" -> "2893 dequantize_per_tensor_default_135";
+"2893 dequantize_per_tensor_default_135" -> "2898 linear_134";
+"2894 linear_134_scale_0" -> "2896 quantize_per_channel_default_135";
+"2894 linear_134_scale_0" -> "2897 dequantize_per_channel_default_135";
+"2895 linear_134_zero_point_0" -> "2896 quantize_per_channel_default_135";
+"2895 linear_134_zero_point_0" -> "2897 dequantize_per_channel_default_135";
+"2896 quantize_per_channel_default_135" -> "2897 dequantize_per_channel_default_135";
+"2897 dequantize_per_channel_default_135" -> "2898 linear_134";
+"2898 linear_134" -> "2901 layer_norm_47";
+"2899 _param_constant363" -> "2901 layer_norm_47";
+"2900 _param_constant364" -> "2901 layer_norm_47";
+"2901 layer_norm_47" -> "2928 pad_25";
+"2901 layer_norm_47" -> "2993 add_78";
+"2902 _tensor_constant143" -> "2904 _tensor_constant143_0_0_nncf_smooth_quant_0";
+"2903 linear_135_updated_constant0" -> "2907 quantize_per_channel_default_136";
+"2904 _tensor_constant143_0_0_nncf_smooth_quant_0" -> "2910 linear_135";
+"2905 linear_135_scale_0" -> "2907 quantize_per_channel_default_136";
+"2905 linear_135_scale_0" -> "2908 dequantize_per_channel_default_136";
+"2906 linear_135_zero_point_0" -> "2907 quantize_per_channel_default_136";
+"2906 linear_135_zero_point_0" -> "2908 dequantize_per_channel_default_136";
+"2907 quantize_per_channel_default_136" -> "2908 dequantize_per_channel_default_136";
+"2908 dequantize_per_channel_default_136" -> "2910 linear_135";
+"2909 _param_constant366_0_0" -> "2910 linear_135";
+"2910 linear_135" -> "2911 relu__22";
+"2911 relu__22" -> "2913 relu__22_0_0_nncf_smooth_quant_0";
+"2912 linear_136_updated_constant0" -> "2916 quantize_per_channel_default_137";
+"2913 relu__22_0_0_nncf_smooth_quant_0" -> "2918 linear_136";
+"2914 linear_136_scale_0" -> "2916 quantize_per_channel_default_137";
+"2914 linear_136_scale_0" -> "2917 dequantize_per_channel_default_137";
+"2915 linear_136_zero_point_0" -> "2916 quantize_per_channel_default_137";
+"2915 linear_136_zero_point_0" -> "2917 dequantize_per_channel_default_137";
+"2916 quantize_per_channel_default_137" -> "2917 dequantize_per_channel_default_137";
+"2917 dequantize_per_channel_default_137" -> "2918 linear_136";
+"2918 linear_136" -> "2919 view_121";
+"2919 view_121" -> "2921 index_22";
+"2920 _tensor_constant144" -> "2921 index_22";
+"2921 index_22" -> "2922 view_122";
+"2922 view_122" -> "2923 permute_100";
+"2923 permute_100" -> "2924 contiguous_42";
+"2924 contiguous_42" -> "2925 unsqueeze_66";
+"2925 unsqueeze_66" -> "2926 sigmoid_22";
+"2926 sigmoid_22" -> "2927 mul_44";
+"2927 mul_44" -> "2965 add_77";
+"2928 pad_25" -> "2929 view_123";
+"2929 view_123" -> "2930 permute_101";
+"2930 permute_101" -> "2931 reshape_99";
+"2931 reshape_99" -> "2933 reshape_99_0_0_nncf_smooth_quant_0";
+"2932 linear_137_updated_constant0" -> "2938 quantize_per_channel_default_138";
+"2933 reshape_99_0_0_nncf_smooth_quant_0" -> "2934 quantize_per_tensor_default_136";
+"2934 quantize_per_tensor_default_136" -> "2935 dequantize_per_tensor_default_136";
+"2935 dequantize_per_tensor_default_136" -> "2941 linear_137";
+"2936 linear_137_scale_0" -> "2938 quantize_per_channel_default_138";
+"2936 linear_137_scale_0" -> "2939 dequantize_per_channel_default_138";
+"2937 linear_137_zero_point_0" -> "2938 quantize_per_channel_default_138";
+"2937 linear_137_zero_point_0" -> "2939 dequantize_per_channel_default_138";
+"2938 quantize_per_channel_default_138" -> "2939 dequantize_per_channel_default_138";
+"2939 dequantize_per_channel_default_138" -> "2941 linear_137";
+"2940 _param_constant368_0_0" -> "2941 linear_137";
+"2941 linear_137" -> "2942 reshape_100";
+"2942 reshape_100" -> "2943 permute_102";
+"2943 permute_102" -> "2944 select_66";
+"2943 permute_102" -> "2945 select_67";
+"2943 permute_102" -> "2946 select_68";
+"2944 select_66" -> "2947 linalg_vector_norm_44";
+"2944 select_66" -> "2949 expand_as_44";
+"2944 select_66" -> "2950 div_44";
+"2945 select_67" -> "2953 linalg_vector_norm_45";
+"2945 select_67" -> "2955 expand_as_45";
+"2945 select_67" -> "2956 div_45";
+"2946 select_68" -> "2968 matmul_45";
+"2947 linalg_vector_norm_44" -> "2948 clamp_min_44";
+"2948 clamp_min_44" -> "2949 expand_as_44";
+"2949 expand_as_44" -> "2950 div_44";
+"2950 div_44" -> "2951 quantize_per_tensor_default_137";
+"2951 quantize_per_tensor_default_137" -> "2952 dequantize_per_tensor_default_137";
+"2952 dequantize_per_tensor_default_137" -> "2960 matmul_44";
+"2953 linalg_vector_norm_45" -> "2954 clamp_min_45";
+"2954 clamp_min_45" -> "2955 expand_as_45";
+"2955 expand_as_45" -> "2956 div_45";
+"2956 div_45" -> "2957 quantize_per_tensor_default_138";
+"2957 quantize_per_tensor_default_138" -> "2958 dequantize_per_tensor_default_138";
+"2958 dequantize_per_tensor_default_138" -> "2959 transpose_44";
+"2959 transpose_44" -> "2960 matmul_44";
+"2960 matmul_44" -> "2964 mul_45";
+"2961 _param_constant370" -> "2962 clamp_22";
+"2962 clamp_22" -> "2963 exp_22";
+"2963 exp_22" -> "2964 mul_45";
+"2964 mul_45" -> "2965 add_77";
+"2965 add_77" -> "2966 softmax_22";
+"2966 softmax_22" -> "2967 dropout_88";
+"2967 dropout_88" -> "2968 matmul_45";
+"2968 matmul_45" -> "2969 transpose_45";
+"2969 transpose_45" -> "2970 reshape_101";
+"2970 reshape_101" -> "2972 reshape_101_0_0_nncf_smooth_quant_0";
+"2971 linear_138_updated_constant0" -> "2977 quantize_per_channel_default_139";
+"2972 reshape_101_0_0_nncf_smooth_quant_0" -> "2973 quantize_per_tensor_default_139";
+"2973 quantize_per_tensor_default_139" -> "2974 dequantize_per_tensor_default_139";
+"2974 dequantize_per_tensor_default_139" -> "2980 linear_138";
+"2975 linear_138_scale_0" -> "2977 quantize_per_channel_default_139";
+"2975 linear_138_scale_0" -> "2978 dequantize_per_channel_default_139";
+"2976 linear_138_zero_point_0" -> "2977 quantize_per_channel_default_139";
+"2976 linear_138_zero_point_0" -> "2978 dequantize_per_channel_default_139";
+"2977 quantize_per_channel_default_139" -> "2978 dequantize_per_channel_default_139";
+"2978 dequantize_per_channel_default_139" -> "2980 linear_138";
+"2979 _param_constant372_0_0" -> "2980 linear_138";
+"2980 linear_138" -> "2981 dropout_89";
+"2981 dropout_89" -> "2982 view_124";
+"2982 view_124" -> "2983 permute_103";
+"2983 permute_103" -> "2984 reshape_102";
+"2984 reshape_102" -> "2985 slice_342";
+"2985 slice_342" -> "2986 slice_343";
+"2986 slice_343" -> "2987 slice_344";
+"2987 slice_344" -> "2988 slice_345";
+"2988 slice_345" -> "2989 contiguous_43";
+"2989 contiguous_43" -> "2992 layer_norm_48";
+"2990 _param_constant373" -> "2992 layer_norm_48";
+"2991 _param_constant374" -> "2992 layer_norm_48";
+"2992 layer_norm_48" -> "2993 add_78";
+"2993 add_78" -> "2995 add_78_0_0_nncf_smooth_quant_0";
+"2993 add_78" -> "3020 add_79";
+"2994 linear_139_updated_constant0" -> "3000 quantize_per_channel_default_140";
+"2995 add_78_0_0_nncf_smooth_quant_0" -> "2996 quantize_per_tensor_default_140";
+"2996 quantize_per_tensor_default_140" -> "2997 dequantize_per_tensor_default_140";
+"2997 dequantize_per_tensor_default_140" -> "3003 linear_139";
+"2998 linear_139_scale_0" -> "3000 quantize_per_channel_default_140";
+"2998 linear_139_scale_0" -> "3001 dequantize_per_channel_default_140";
+"2999 linear_139_zero_point_0" -> "3000 quantize_per_channel_default_140";
+"2999 linear_139_zero_point_0" -> "3001 dequantize_per_channel_default_140";
+"3000 quantize_per_channel_default_140" -> "3001 dequantize_per_channel_default_140";
+"3001 dequantize_per_channel_default_140" -> "3003 linear_139";
+"3002 _param_constant376_0_0" -> "3003 linear_139";
+"3003 linear_139" -> "3004 gelu_22";
+"3004 gelu_22" -> "3005 dropout_90";
+"3005 dropout_90" -> "3007 dropout_90_0_0_nncf_smooth_quant_0";
+"3006 linear_140_updated_constant0" -> "3012 quantize_per_channel_default_141";
+"3007 dropout_90_0_0_nncf_smooth_quant_0" -> "3008 quantize_per_tensor_default_141";
+"3008 quantize_per_tensor_default_141" -> "3009 dequantize_per_tensor_default_141";
+"3009 dequantize_per_tensor_default_141" -> "3015 linear_140";
+"3010 linear_140_scale_0" -> "3012 quantize_per_channel_default_141";
+"3010 linear_140_scale_0" -> "3013 dequantize_per_channel_default_141";
+"3011 linear_140_zero_point_0" -> "3012 quantize_per_channel_default_141";
+"3011 linear_140_zero_point_0" -> "3013 dequantize_per_channel_default_141";
+"3012 quantize_per_channel_default_141" -> "3013 dequantize_per_channel_default_141";
+"3013 dequantize_per_channel_default_141" -> "3015 linear_140";
+"3014 _param_constant378_0_0" -> "3015 linear_140";
+"3015 linear_140" -> "3016 dropout_91";
+"3016 dropout_91" -> "3019 layer_norm_49";
+"3017 _param_constant379" -> "3019 layer_norm_49";
+"3018 _param_constant380" -> "3019 layer_norm_49";
+"3019 layer_norm_49" -> "3020 add_79";
+"3020 add_79" -> "3047 pad_26";
+"3020 add_79" -> "3112 add_81";
+"3021 _tensor_constant145" -> "3023 _tensor_constant145_0_0_nncf_smooth_quant_0";
+"3022 linear_141_updated_constant0" -> "3026 quantize_per_channel_default_142";
+"3023 _tensor_constant145_0_0_nncf_smooth_quant_0" -> "3029 linear_141";
+"3024 linear_141_scale_0" -> "3026 quantize_per_channel_default_142";
+"3024 linear_141_scale_0" -> "3027 dequantize_per_channel_default_142";
+"3025 linear_141_zero_point_0" -> "3026 quantize_per_channel_default_142";
+"3025 linear_141_zero_point_0" -> "3027 dequantize_per_channel_default_142";
+"3026 quantize_per_channel_default_142" -> "3027 dequantize_per_channel_default_142";
+"3027 dequantize_per_channel_default_142" -> "3029 linear_141";
+"3028 _param_constant382_0_0" -> "3029 linear_141";
+"3029 linear_141" -> "3030 relu__23";
+"3030 relu__23" -> "3032 relu__23_0_0_nncf_smooth_quant_0";
+"3031 linear_142_updated_constant0" -> "3035 quantize_per_channel_default_143";
+"3032 relu__23_0_0_nncf_smooth_quant_0" -> "3037 linear_142";
+"3033 linear_142_scale_0" -> "3035 quantize_per_channel_default_143";
+"3033 linear_142_scale_0" -> "3036 dequantize_per_channel_default_143";
+"3034 linear_142_zero_point_0" -> "3035 quantize_per_channel_default_143";
+"3034 linear_142_zero_point_0" -> "3036 dequantize_per_channel_default_143";
+"3035 quantize_per_channel_default_143" -> "3036 dequantize_per_channel_default_143";
+"3036 dequantize_per_channel_default_143" -> "3037 linear_142";
+"3037 linear_142" -> "3038 view_125";
+"3038 view_125" -> "3040 index_23";
+"3039 _tensor_constant146" -> "3040 index_23";
+"3040 index_23" -> "3041 view_126";
+"3041 view_126" -> "3042 permute_104";
+"3042 permute_104" -> "3043 contiguous_44";
+"3043 contiguous_44" -> "3044 unsqueeze_67";
+"3044 unsqueeze_67" -> "3045 sigmoid_23";
+"3045 sigmoid_23" -> "3046 mul_46";
+"3046 mul_46" -> "3084 add_80";
+"3047 pad_26" -> "3048 view_127";
+"3048 view_127" -> "3049 permute_105";
+"3049 permute_105" -> "3050 reshape_103";
+"3050 reshape_103" -> "3052 reshape_103_0_0_nncf_smooth_quant_0";
+"3051 linear_143_updated_constant0" -> "3057 quantize_per_channel_default_144";
+"3052 reshape_103_0_0_nncf_smooth_quant_0" -> "3053 quantize_per_tensor_default_142";
+"3053 quantize_per_tensor_default_142" -> "3054 dequantize_per_tensor_default_142";
+"3054 dequantize_per_tensor_default_142" -> "3060 linear_143";
+"3055 linear_143_scale_0" -> "3057 quantize_per_channel_default_144";
+"3055 linear_143_scale_0" -> "3058 dequantize_per_channel_default_144";
+"3056 linear_143_zero_point_0" -> "3057 quantize_per_channel_default_144";
+"3056 linear_143_zero_point_0" -> "3058 dequantize_per_channel_default_144";
+"3057 quantize_per_channel_default_144" -> "3058 dequantize_per_channel_default_144";
+"3058 dequantize_per_channel_default_144" -> "3060 linear_143";
+"3059 _param_constant384_0_0" -> "3060 linear_143";
+"3060 linear_143" -> "3061 reshape_104";
+"3061 reshape_104" -> "3062 permute_106";
+"3062 permute_106" -> "3063 select_69";
+"3062 permute_106" -> "3064 select_70";
+"3062 permute_106" -> "3065 select_71";
+"3063 select_69" -> "3066 linalg_vector_norm_46";
+"3063 select_69" -> "3068 expand_as_46";
+"3063 select_69" -> "3069 div_46";
+"3064 select_70" -> "3072 linalg_vector_norm_47";
+"3064 select_70" -> "3074 expand_as_47";
+"3064 select_70" -> "3075 div_47";
+"3065 select_71" -> "3087 matmul_47";
+"3066 linalg_vector_norm_46" -> "3067 clamp_min_46";
+"3067 clamp_min_46" -> "3068 expand_as_46";
+"3068 expand_as_46" -> "3069 div_46";
+"3069 div_46" -> "3070 quantize_per_tensor_default_143";
+"3070 quantize_per_tensor_default_143" -> "3071 dequantize_per_tensor_default_143";
+"3071 dequantize_per_tensor_default_143" -> "3079 matmul_46";
+"3072 linalg_vector_norm_47" -> "3073 clamp_min_47";
+"3073 clamp_min_47" -> "3074 expand_as_47";
+"3074 expand_as_47" -> "3075 div_47";
+"3075 div_47" -> "3076 quantize_per_tensor_default_144";
+"3076 quantize_per_tensor_default_144" -> "3077 dequantize_per_tensor_default_144";
+"3077 dequantize_per_tensor_default_144" -> "3078 transpose_46";
+"3078 transpose_46" -> "3079 matmul_46";
+"3079 matmul_46" -> "3083 mul_47";
+"3080 _param_constant386" -> "3081 clamp_23";
+"3081 clamp_23" -> "3082 exp_23";
+"3082 exp_23" -> "3083 mul_47";
+"3083 mul_47" -> "3084 add_80";
+"3084 add_80" -> "3085 softmax_23";
+"3085 softmax_23" -> "3086 dropout_92";
+"3086 dropout_92" -> "3087 matmul_47";
+"3087 matmul_47" -> "3088 transpose_47";
+"3088 transpose_47" -> "3089 reshape_105";
+"3089 reshape_105" -> "3091 reshape_105_0_0_nncf_smooth_quant_0";
+"3090 linear_144_updated_constant0" -> "3096 quantize_per_channel_default_145";
+"3091 reshape_105_0_0_nncf_smooth_quant_0" -> "3092 quantize_per_tensor_default_145";
+"3092 quantize_per_tensor_default_145" -> "3093 dequantize_per_tensor_default_145";
+"3093 dequantize_per_tensor_default_145" -> "3099 linear_144";
+"3094 linear_144_scale_0" -> "3096 quantize_per_channel_default_145";
+"3094 linear_144_scale_0" -> "3097 dequantize_per_channel_default_145";
+"3095 linear_144_zero_point_0" -> "3096 quantize_per_channel_default_145";
+"3095 linear_144_zero_point_0" -> "3097 dequantize_per_channel_default_145";
+"3096 quantize_per_channel_default_145" -> "3097 dequantize_per_channel_default_145";
+"3097 dequantize_per_channel_default_145" -> "3099 linear_144";
+"3098 _param_constant388_0_0" -> "3099 linear_144";
+"3099 linear_144" -> "3100 dropout_93";
+"3100 dropout_93" -> "3101 view_128";
+"3101 view_128" -> "3102 permute_107";
+"3102 permute_107" -> "3103 reshape_106";
+"3103 reshape_106" -> "3104 slice_347";
+"3104 slice_347" -> "3105 slice_348";
+"3105 slice_348" -> "3106 slice_349";
+"3106 slice_349" -> "3107 slice_350";
+"3107 slice_350" -> "3108 contiguous_45";
+"3108 contiguous_45" -> "3111 layer_norm_50";
+"3109 _param_constant389" -> "3111 layer_norm_50";
+"3110 _param_constant390" -> "3111 layer_norm_50";
+"3111 layer_norm_50" -> "3112 add_81";
+"3112 add_81" -> "3114 add_81_0_0_nncf_smooth_quant_0";
+"3112 add_81" -> "3139 add_82";
+"3113 linear_145_updated_constant0" -> "3119 quantize_per_channel_default_146";
+"3114 add_81_0_0_nncf_smooth_quant_0" -> "3115 quantize_per_tensor_default_146";
+"3115 quantize_per_tensor_default_146" -> "3116 dequantize_per_tensor_default_146";
+"3116 dequantize_per_tensor_default_146" -> "3122 linear_145";
+"3117 linear_145_scale_0" -> "3119 quantize_per_channel_default_146";
+"3117 linear_145_scale_0" -> "3120 dequantize_per_channel_default_146";
+"3118 linear_145_zero_point_0" -> "3119 quantize_per_channel_default_146";
+"3118 linear_145_zero_point_0" -> "3120 dequantize_per_channel_default_146";
+"3119 quantize_per_channel_default_146" -> "3120 dequantize_per_channel_default_146";
+"3120 dequantize_per_channel_default_146" -> "3122 linear_145";
+"3121 _param_constant392_0_0" -> "3122 linear_145";
+"3122 linear_145" -> "3123 gelu_23";
+"3123 gelu_23" -> "3124 dropout_94";
+"3124 dropout_94" -> "3126 dropout_94_0_0_nncf_smooth_quant_0";
+"3125 linear_146_updated_constant0" -> "3131 quantize_per_channel_default_147";
+"3126 dropout_94_0_0_nncf_smooth_quant_0" -> "3127 quantize_per_tensor_default_147";
+"3127 quantize_per_tensor_default_147" -> "3128 dequantize_per_tensor_default_147";
+"3128 dequantize_per_tensor_default_147" -> "3134 linear_146";
+"3129 linear_146_scale_0" -> "3131 quantize_per_channel_default_147";
+"3129 linear_146_scale_0" -> "3132 dequantize_per_channel_default_147";
+"3130 linear_146_zero_point_0" -> "3131 quantize_per_channel_default_147";
+"3130 linear_146_zero_point_0" -> "3132 dequantize_per_channel_default_147";
+"3131 quantize_per_channel_default_147" -> "3132 dequantize_per_channel_default_147";
+"3132 dequantize_per_channel_default_147" -> "3134 linear_146";
+"3133 _param_constant394_0_0" -> "3134 linear_146";
+"3134 linear_146" -> "3135 dropout_95";
+"3135 dropout_95" -> "3138 layer_norm_51";
+"3136 _param_constant395" -> "3138 layer_norm_51";
+"3137 _param_constant396" -> "3138 layer_norm_51";
+"3138 layer_norm_51" -> "3139 add_82";
+"3139 add_82" -> "3142 layer_norm_52";
+"3140 _param_constant397" -> "3142 layer_norm_52";
+"3141 _param_constant398" -> "3142 layer_norm_52";
+"3142 layer_norm_52" -> "3143 permute_108";
+"3143 permute_108" -> "3144 adaptive_avg_pool2d";
+"3144 adaptive_avg_pool2d" -> "3145 flatten";
+"3145 flatten" -> "3147 flatten_0_0_nncf_smooth_quant_0";
+"3146 linear_147_updated_constant0" -> "3152 quantize_per_channel_default_148";
+"3147 flatten_0_0_nncf_smooth_quant_0" -> "3148 quantize_per_tensor_default_148";
+"3148 quantize_per_tensor_default_148" -> "3149 dequantize_per_tensor_default_148";
+"3149 dequantize_per_tensor_default_148" -> "3155 linear_147";
+"3150 linear_147_scale_0" -> "3152 quantize_per_channel_default_148";
+"3150 linear_147_scale_0" -> "3153 dequantize_per_channel_default_148";
+"3151 linear_147_zero_point_0" -> "3152 quantize_per_channel_default_148";
+"3151 linear_147_zero_point_0" -> "3153 dequantize_per_channel_default_148";
+"3152 quantize_per_channel_default_148" -> "3153 dequantize_per_channel_default_148";
+"3153 dequantize_per_channel_default_148" -> "3155 linear_147";
+"3154 _param_constant400_0_0" -> "3155 linear_147";
+"3155 linear_147" -> "3156 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/quantized/unet.dot b/tests/torch/data/reference_graphs/fx/quantized/unet.dot
new file mode 100644
index 00000000000..bd82cc0c653
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/quantized/unet.dot
@@ -0,0 +1,561 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 quantize_per_tensor_default_8" [id=1, type=quantize_per_tensor];
+"2 dequantize_per_tensor_default_12" [id=2, type=dequantize_per_tensor];
+"3 _param_constant0" [id=3, type=get_attr];
+"4 conv2d_scale_0" [id=4, type=get_attr];
+"5 conv2d_zero_point_0" [id=5, type=get_attr];
+"6 quantize_per_channel_default" [id=6, type=quantize_per_channel];
+"7 dequantize_per_channel_default" [id=7, type=dequantize_per_channel];
+"8 _param_constant1_0_0" [id=8, type=get_attr];
+"9 conv2d" [id=9, type=conv2d];
+"10 relu" [id=10, type=relu];
+"11 quantize_per_tensor_default_9" [id=11, type=quantize_per_tensor];
+"12 dequantize_per_tensor_default_13" [id=12, type=dequantize_per_tensor];
+"13 _param_constant4" [id=13, type=get_attr];
+"14 conv2d_1_scale_0" [id=14, type=get_attr];
+"15 conv2d_1_zero_point_0" [id=15, type=get_attr];
+"16 quantize_per_channel_default_1" [id=16, type=quantize_per_channel];
+"17 dequantize_per_channel_default_1" [id=17, type=dequantize_per_channel];
+"18 _param_constant5_0_0" [id=18, type=get_attr];
+"19 conv2d_1" [id=19, type=conv2d];
+"20 relu_1" [id=20, type=relu];
+"21 quantize_per_tensor_default" [id=21, type=quantize_per_tensor];
+"22 dequantize_per_tensor_default_1" [id=22, type=dequantize_per_tensor];
+"23 dequantize_per_tensor_default" [id=23, type=dequantize_per_tensor];
+"24 max_pool2d" [id=24, type=max_pool2d];
+"25 _param_constant8" [id=25, type=get_attr];
+"26 conv2d_2_scale_0" [id=26, type=get_attr];
+"27 conv2d_2_zero_point_0" [id=27, type=get_attr];
+"28 quantize_per_channel_default_2" [id=28, type=quantize_per_channel];
+"29 dequantize_per_channel_default_2" [id=29, type=dequantize_per_channel];
+"30 _param_constant9_0_0" [id=30, type=get_attr];
+"31 conv2d_2" [id=31, type=conv2d];
+"32 relu_2" [id=32, type=relu];
+"33 quantize_per_tensor_default_10" [id=33, type=quantize_per_tensor];
+"34 dequantize_per_tensor_default_14" [id=34, type=dequantize_per_tensor];
+"35 _param_constant12" [id=35, type=get_attr];
+"36 conv2d_3_scale_0" [id=36, type=get_attr];
+"37 conv2d_3_zero_point_0" [id=37, type=get_attr];
+"38 quantize_per_channel_default_3" [id=38, type=quantize_per_channel];
+"39 dequantize_per_channel_default_3" [id=39, type=dequantize_per_channel];
+"40 _param_constant13_0_0" [id=40, type=get_attr];
+"41 conv2d_3" [id=41, type=conv2d];
+"42 relu_3" [id=42, type=relu];
+"43 quantize_per_tensor_default_3" [id=43, type=quantize_per_tensor];
+"44 dequantize_per_tensor_default_5" [id=44, type=dequantize_per_tensor];
+"45 dequantize_per_tensor_default_4" [id=45, type=dequantize_per_tensor];
+"46 max_pool2d_1" [id=46, type=max_pool2d];
+"47 _param_constant16" [id=47, type=get_attr];
+"48 conv2d_4_scale_0" [id=48, type=get_attr];
+"49 conv2d_4_zero_point_0" [id=49, type=get_attr];
+"50 quantize_per_channel_default_4" [id=50, type=quantize_per_channel];
+"51 dequantize_per_channel_default_4" [id=51, type=dequantize_per_channel];
+"52 _param_constant17_0_0" [id=52, type=get_attr];
+"53 conv2d_4" [id=53, type=conv2d];
+"54 relu_4" [id=54, type=relu];
+"55 quantize_per_tensor_default_11" [id=55, type=quantize_per_tensor];
+"56 dequantize_per_tensor_default_15" [id=56, type=dequantize_per_tensor];
+"57 _param_constant20" [id=57, type=get_attr];
+"58 conv2d_5_scale_0" [id=58, type=get_attr];
+"59 conv2d_5_zero_point_0" [id=59, type=get_attr];
+"60 quantize_per_channel_default_5" [id=60, type=quantize_per_channel];
+"61 dequantize_per_channel_default_5" [id=61, type=dequantize_per_channel];
+"62 _param_constant21_0_0" [id=62, type=get_attr];
+"63 conv2d_5" [id=63, type=conv2d];
+"64 relu_5" [id=64, type=relu];
+"65 quantize_per_tensor_default_4" [id=65, type=quantize_per_tensor];
+"66 dequantize_per_tensor_default_7" [id=66, type=dequantize_per_tensor];
+"67 dequantize_per_tensor_default_6" [id=67, type=dequantize_per_tensor];
+"68 max_pool2d_2" [id=68, type=max_pool2d];
+"69 _param_constant24" [id=69, type=get_attr];
+"70 conv2d_6_scale_0" [id=70, type=get_attr];
+"71 conv2d_6_zero_point_0" [id=71, type=get_attr];
+"72 quantize_per_channel_default_6" [id=72, type=quantize_per_channel];
+"73 dequantize_per_channel_default_6" [id=73, type=dequantize_per_channel];
+"74 _param_constant25_0_0" [id=74, type=get_attr];
+"75 conv2d_6" [id=75, type=conv2d];
+"76 relu_6" [id=76, type=relu];
+"77 quantize_per_tensor_default_12" [id=77, type=quantize_per_tensor];
+"78 dequantize_per_tensor_default_16" [id=78, type=dequantize_per_tensor];
+"79 _param_constant28" [id=79, type=get_attr];
+"80 conv2d_7_scale_0" [id=80, type=get_attr];
+"81 conv2d_7_zero_point_0" [id=81, type=get_attr];
+"82 quantize_per_channel_default_7" [id=82, type=quantize_per_channel];
+"83 dequantize_per_channel_default_7" [id=83, type=dequantize_per_channel];
+"84 _param_constant29_0_0" [id=84, type=get_attr];
+"85 conv2d_7" [id=85, type=conv2d];
+"86 relu_7" [id=86, type=relu];
+"87 quantize_per_tensor_default_7" [id=87, type=quantize_per_tensor];
+"88 dequantize_per_tensor_default_11" [id=88, type=dequantize_per_tensor];
+"89 dequantize_per_tensor_default_10" [id=89, type=dequantize_per_tensor];
+"90 max_pool2d_3" [id=90, type=max_pool2d];
+"91 _param_constant32" [id=91, type=get_attr];
+"92 conv2d_8_scale_0" [id=92, type=get_attr];
+"93 conv2d_8_zero_point_0" [id=93, type=get_attr];
+"94 quantize_per_channel_default_8" [id=94, type=quantize_per_channel];
+"95 dequantize_per_channel_default_8" [id=95, type=dequantize_per_channel];
+"96 _param_constant33_0_0" [id=96, type=get_attr];
+"97 conv2d_8" [id=97, type=conv2d];
+"98 relu_8" [id=98, type=relu];
+"99 quantize_per_tensor_default_13" [id=99, type=quantize_per_tensor];
+"100 dequantize_per_tensor_default_17" [id=100, type=dequantize_per_tensor];
+"101 _param_constant36" [id=101, type=get_attr];
+"102 conv2d_9_scale_0" [id=102, type=get_attr];
+"103 conv2d_9_zero_point_0" [id=103, type=get_attr];
+"104 quantize_per_channel_default_9" [id=104, type=quantize_per_channel];
+"105 dequantize_per_channel_default_9" [id=105, type=dequantize_per_channel];
+"106 _param_constant37_0_0" [id=106, type=get_attr];
+"107 conv2d_9" [id=107, type=conv2d];
+"108 relu_9" [id=108, type=relu];
+"109 quantize_per_tensor_default_14" [id=109, type=quantize_per_tensor];
+"110 dequantize_per_tensor_default_18" [id=110, type=dequantize_per_tensor];
+"111 _param_constant40" [id=111, type=get_attr];
+"112 _param_constant41" [id=112, type=get_attr];
+"113 conv_transpose2d_scale_0" [id=113, type=get_attr];
+"114 conv_transpose2d_zero_point_0" [id=114, type=get_attr];
+"115 quantize_per_channel_default_10" [id=115, type=quantize_per_channel];
+"116 dequantize_per_channel_default_10" [id=116, type=dequantize_per_channel];
+"117 conv_transpose2d" [id=117, type=conv_transpose2d];
+"118 quantize_per_tensor_default_6" [id=118, type=quantize_per_tensor];
+"119 dequantize_per_tensor_default_9" [id=119, type=dequantize_per_tensor];
+"120 slice_1" [id=120, type=slice];
+"121 slice_2" [id=121, type=slice];
+"122 slice_3" [id=122, type=slice];
+"123 slice_4" [id=123, type=slice];
+"124 cat" [id=124, type=cat];
+"125 _param_constant42" [id=125, type=get_attr];
+"126 conv2d_10_scale_0" [id=126, type=get_attr];
+"127 conv2d_10_zero_point_0" [id=127, type=get_attr];
+"128 quantize_per_channel_default_11" [id=128, type=quantize_per_channel];
+"129 dequantize_per_channel_default_11" [id=129, type=dequantize_per_channel];
+"130 _param_constant43_0_0" [id=130, type=get_attr];
+"131 conv2d_10" [id=131, type=conv2d];
+"132 relu_10" [id=132, type=relu];
+"133 quantize_per_tensor_default_15" [id=133, type=quantize_per_tensor];
+"134 dequantize_per_tensor_default_19" [id=134, type=dequantize_per_tensor];
+"135 _param_constant46" [id=135, type=get_attr];
+"136 conv2d_11_scale_0" [id=136, type=get_attr];
+"137 conv2d_11_zero_point_0" [id=137, type=get_attr];
+"138 quantize_per_channel_default_12" [id=138, type=quantize_per_channel];
+"139 dequantize_per_channel_default_12" [id=139, type=dequantize_per_channel];
+"140 _param_constant47_0_0" [id=140, type=get_attr];
+"141 conv2d_11" [id=141, type=conv2d];
+"142 relu_11" [id=142, type=relu];
+"143 quantize_per_tensor_default_16" [id=143, type=quantize_per_tensor];
+"144 dequantize_per_tensor_default_20" [id=144, type=dequantize_per_tensor];
+"145 _param_constant50" [id=145, type=get_attr];
+"146 _param_constant51" [id=146, type=get_attr];
+"147 conv_transpose2d_1_scale_0" [id=147, type=get_attr];
+"148 conv_transpose2d_1_zero_point_0" [id=148, type=get_attr];
+"149 quantize_per_channel_default_13" [id=149, type=quantize_per_channel];
+"150 dequantize_per_channel_default_13" [id=150, type=dequantize_per_channel];
+"151 conv_transpose2d_1" [id=151, type=conv_transpose2d];
+"152 quantize_per_tensor_default_5" [id=152, type=quantize_per_tensor];
+"153 dequantize_per_tensor_default_8" [id=153, type=dequantize_per_tensor];
+"154 slice_5" [id=154, type=slice];
+"155 slice_6" [id=155, type=slice];
+"156 slice_7" [id=156, type=slice];
+"157 slice_8" [id=157, type=slice];
+"158 cat_1" [id=158, type=cat];
+"159 _param_constant52" [id=159, type=get_attr];
+"160 conv2d_12_scale_0" [id=160, type=get_attr];
+"161 conv2d_12_zero_point_0" [id=161, type=get_attr];
+"162 quantize_per_channel_default_14" [id=162, type=quantize_per_channel];
+"163 dequantize_per_channel_default_14" [id=163, type=dequantize_per_channel];
+"164 _param_constant53_0_0" [id=164, type=get_attr];
+"165 conv2d_12" [id=165, type=conv2d];
+"166 relu_12" [id=166, type=relu];
+"167 quantize_per_tensor_default_17" [id=167, type=quantize_per_tensor];
+"168 dequantize_per_tensor_default_21" [id=168, type=dequantize_per_tensor];
+"169 _param_constant56" [id=169, type=get_attr];
+"170 conv2d_13_scale_0" [id=170, type=get_attr];
+"171 conv2d_13_zero_point_0" [id=171, type=get_attr];
+"172 quantize_per_channel_default_15" [id=172, type=quantize_per_channel];
+"173 dequantize_per_channel_default_15" [id=173, type=dequantize_per_channel];
+"174 _param_constant57_0_0" [id=174, type=get_attr];
+"175 conv2d_13" [id=175, type=conv2d];
+"176 relu_13" [id=176, type=relu];
+"177 quantize_per_tensor_default_18" [id=177, type=quantize_per_tensor];
+"178 dequantize_per_tensor_default_22" [id=178, type=dequantize_per_tensor];
+"179 _param_constant60" [id=179, type=get_attr];
+"180 _param_constant61" [id=180, type=get_attr];
+"181 conv_transpose2d_2_scale_0" [id=181, type=get_attr];
+"182 conv_transpose2d_2_zero_point_0" [id=182, type=get_attr];
+"183 quantize_per_channel_default_16" [id=183, type=quantize_per_channel];
+"184 dequantize_per_channel_default_16" [id=184, type=dequantize_per_channel];
+"185 conv_transpose2d_2" [id=185, type=conv_transpose2d];
+"186 quantize_per_tensor_default_2" [id=186, type=quantize_per_tensor];
+"187 dequantize_per_tensor_default_3" [id=187, type=dequantize_per_tensor];
+"188 slice_9" [id=188, type=slice];
+"189 slice_10" [id=189, type=slice];
+"190 slice_11" [id=190, type=slice];
+"191 slice_12" [id=191, type=slice];
+"192 cat_2" [id=192, type=cat];
+"193 _param_constant62" [id=193, type=get_attr];
+"194 conv2d_14_scale_0" [id=194, type=get_attr];
+"195 conv2d_14_zero_point_0" [id=195, type=get_attr];
+"196 quantize_per_channel_default_17" [id=196, type=quantize_per_channel];
+"197 dequantize_per_channel_default_17" [id=197, type=dequantize_per_channel];
+"198 _param_constant63_0_0" [id=198, type=get_attr];
+"199 conv2d_14" [id=199, type=conv2d];
+"200 relu_14" [id=200, type=relu];
+"201 quantize_per_tensor_default_19" [id=201, type=quantize_per_tensor];
+"202 dequantize_per_tensor_default_23" [id=202, type=dequantize_per_tensor];
+"203 _param_constant66" [id=203, type=get_attr];
+"204 conv2d_15_scale_0" [id=204, type=get_attr];
+"205 conv2d_15_zero_point_0" [id=205, type=get_attr];
+"206 quantize_per_channel_default_18" [id=206, type=quantize_per_channel];
+"207 dequantize_per_channel_default_18" [id=207, type=dequantize_per_channel];
+"208 _param_constant67_0_0" [id=208, type=get_attr];
+"209 conv2d_15" [id=209, type=conv2d];
+"210 relu_15" [id=210, type=relu];
+"211 quantize_per_tensor_default_20" [id=211, type=quantize_per_tensor];
+"212 dequantize_per_tensor_default_24" [id=212, type=dequantize_per_tensor];
+"213 _param_constant70" [id=213, type=get_attr];
+"214 _param_constant71" [id=214, type=get_attr];
+"215 conv_transpose2d_3_scale_0" [id=215, type=get_attr];
+"216 conv_transpose2d_3_zero_point_0" [id=216, type=get_attr];
+"217 quantize_per_channel_default_19" [id=217, type=quantize_per_channel];
+"218 dequantize_per_channel_default_19" [id=218, type=dequantize_per_channel];
+"219 conv_transpose2d_3" [id=219, type=conv_transpose2d];
+"220 quantize_per_tensor_default_1" [id=220, type=quantize_per_tensor];
+"221 dequantize_per_tensor_default_2" [id=221, type=dequantize_per_tensor];
+"222 slice_13" [id=222, type=slice];
+"223 slice_14" [id=223, type=slice];
+"224 slice_15" [id=224, type=slice];
+"225 slice_16" [id=225, type=slice];
+"226 cat_3" [id=226, type=cat];
+"227 _param_constant72" [id=227, type=get_attr];
+"228 conv2d_16_scale_0" [id=228, type=get_attr];
+"229 conv2d_16_zero_point_0" [id=229, type=get_attr];
+"230 quantize_per_channel_default_20" [id=230, type=quantize_per_channel];
+"231 dequantize_per_channel_default_20" [id=231, type=dequantize_per_channel];
+"232 _param_constant73_0_0" [id=232, type=get_attr];
+"233 conv2d_16" [id=233, type=conv2d];
+"234 relu_16" [id=234, type=relu];
+"235 quantize_per_tensor_default_21" [id=235, type=quantize_per_tensor];
+"236 dequantize_per_tensor_default_25" [id=236, type=dequantize_per_tensor];
+"237 _param_constant76" [id=237, type=get_attr];
+"238 conv2d_17_scale_0" [id=238, type=get_attr];
+"239 conv2d_17_zero_point_0" [id=239, type=get_attr];
+"240 quantize_per_channel_default_21" [id=240, type=quantize_per_channel];
+"241 dequantize_per_channel_default_21" [id=241, type=dequantize_per_channel];
+"242 _param_constant77_0_0" [id=242, type=get_attr];
+"243 conv2d_17" [id=243, type=conv2d];
+"244 relu_17" [id=244, type=relu];
+"245 quantize_per_tensor_default_22" [id=245, type=quantize_per_tensor];
+"246 dequantize_per_tensor_default_26" [id=246, type=dequantize_per_tensor];
+"247 _param_constant80" [id=247, type=get_attr];
+"248 conv2d_18_scale_0" [id=248, type=get_attr];
+"249 conv2d_18_zero_point_0" [id=249, type=get_attr];
+"250 quantize_per_channel_default_22" [id=250, type=quantize_per_channel];
+"251 dequantize_per_channel_default_22" [id=251, type=dequantize_per_channel];
+"252 _param_constant81_0_0" [id=252, type=get_attr];
+"253 conv2d_18" [id=253, type=conv2d];
+"254 output" [id=254, type=output];
+"0 arg0_1" -> "1 quantize_per_tensor_default_8";
+"1 quantize_per_tensor_default_8" -> "2 dequantize_per_tensor_default_12";
+"2 dequantize_per_tensor_default_12" -> "9 conv2d";
+"3 _param_constant0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "7 dequantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "6 quantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "7 dequantize_per_channel_default";
+"6 quantize_per_channel_default" -> "7 dequantize_per_channel_default";
+"7 dequantize_per_channel_default" -> "9 conv2d";
+"8 _param_constant1_0_0" -> "9 conv2d";
+"9 conv2d" -> "10 relu";
+"10 relu" -> "11 quantize_per_tensor_default_9";
+"11 quantize_per_tensor_default_9" -> "12 dequantize_per_tensor_default_13";
+"12 dequantize_per_tensor_default_13" -> "19 conv2d_1";
+"13 _param_constant4" -> "16 quantize_per_channel_default_1";
+"14 conv2d_1_scale_0" -> "16 quantize_per_channel_default_1";
+"14 conv2d_1_scale_0" -> "17 dequantize_per_channel_default_1";
+"15 conv2d_1_zero_point_0" -> "16 quantize_per_channel_default_1";
+"15 conv2d_1_zero_point_0" -> "17 dequantize_per_channel_default_1";
+"16 quantize_per_channel_default_1" -> "17 dequantize_per_channel_default_1";
+"17 dequantize_per_channel_default_1" -> "19 conv2d_1";
+"18 _param_constant5_0_0" -> "19 conv2d_1";
+"19 conv2d_1" -> "20 relu_1";
+"20 relu_1" -> "21 quantize_per_tensor_default";
+"21 quantize_per_tensor_default" -> "22 dequantize_per_tensor_default_1";
+"21 quantize_per_tensor_default" -> "23 dequantize_per_tensor_default";
+"22 dequantize_per_tensor_default_1" -> "222 slice_13";
+"23 dequantize_per_tensor_default" -> "24 max_pool2d";
+"24 max_pool2d" -> "31 conv2d_2";
+"25 _param_constant8" -> "28 quantize_per_channel_default_2";
+"26 conv2d_2_scale_0" -> "28 quantize_per_channel_default_2";
+"26 conv2d_2_scale_0" -> "29 dequantize_per_channel_default_2";
+"27 conv2d_2_zero_point_0" -> "28 quantize_per_channel_default_2";
+"27 conv2d_2_zero_point_0" -> "29 dequantize_per_channel_default_2";
+"28 quantize_per_channel_default_2" -> "29 dequantize_per_channel_default_2";
+"29 dequantize_per_channel_default_2" -> "31 conv2d_2";
+"30 _param_constant9_0_0" -> "31 conv2d_2";
+"31 conv2d_2" -> "32 relu_2";
+"32 relu_2" -> "33 quantize_per_tensor_default_10";
+"33 quantize_per_tensor_default_10" -> "34 dequantize_per_tensor_default_14";
+"34 dequantize_per_tensor_default_14" -> "41 conv2d_3";
+"35 _param_constant12" -> "38 quantize_per_channel_default_3";
+"36 conv2d_3_scale_0" -> "38 quantize_per_channel_default_3";
+"36 conv2d_3_scale_0" -> "39 dequantize_per_channel_default_3";
+"37 conv2d_3_zero_point_0" -> "38 quantize_per_channel_default_3";
+"37 conv2d_3_zero_point_0" -> "39 dequantize_per_channel_default_3";
+"38 quantize_per_channel_default_3" -> "39 dequantize_per_channel_default_3";
+"39 dequantize_per_channel_default_3" -> "41 conv2d_3";
+"40 _param_constant13_0_0" -> "41 conv2d_3";
+"41 conv2d_3" -> "42 relu_3";
+"42 relu_3" -> "43 quantize_per_tensor_default_3";
+"43 quantize_per_tensor_default_3" -> "44 dequantize_per_tensor_default_5";
+"43 quantize_per_tensor_default_3" -> "45 dequantize_per_tensor_default_4";
+"44 dequantize_per_tensor_default_5" -> "188 slice_9";
+"45 dequantize_per_tensor_default_4" -> "46 max_pool2d_1";
+"46 max_pool2d_1" -> "53 conv2d_4";
+"47 _param_constant16" -> "50 quantize_per_channel_default_4";
+"48 conv2d_4_scale_0" -> "50 quantize_per_channel_default_4";
+"48 conv2d_4_scale_0" -> "51 dequantize_per_channel_default_4";
+"49 conv2d_4_zero_point_0" -> "50 quantize_per_channel_default_4";
+"49 conv2d_4_zero_point_0" -> "51 dequantize_per_channel_default_4";
+"50 quantize_per_channel_default_4" -> "51 dequantize_per_channel_default_4";
+"51 dequantize_per_channel_default_4" -> "53 conv2d_4";
+"52 _param_constant17_0_0" -> "53 conv2d_4";
+"53 conv2d_4" -> "54 relu_4";
+"54 relu_4" -> "55 quantize_per_tensor_default_11";
+"55 quantize_per_tensor_default_11" -> "56 dequantize_per_tensor_default_15";
+"56 dequantize_per_tensor_default_15" -> "63 conv2d_5";
+"57 _param_constant20" -> "60 quantize_per_channel_default_5";
+"58 conv2d_5_scale_0" -> "60 quantize_per_channel_default_5";
+"58 conv2d_5_scale_0" -> "61 dequantize_per_channel_default_5";
+"59 conv2d_5_zero_point_0" -> "60 quantize_per_channel_default_5";
+"59 conv2d_5_zero_point_0" -> "61 dequantize_per_channel_default_5";
+"60 quantize_per_channel_default_5" -> "61 dequantize_per_channel_default_5";
+"61 dequantize_per_channel_default_5" -> "63 conv2d_5";
+"62 _param_constant21_0_0" -> "63 conv2d_5";
+"63 conv2d_5" -> "64 relu_5";
+"64 relu_5" -> "65 quantize_per_tensor_default_4";
+"65 quantize_per_tensor_default_4" -> "66 dequantize_per_tensor_default_7";
+"65 quantize_per_tensor_default_4" -> "67 dequantize_per_tensor_default_6";
+"66 dequantize_per_tensor_default_7" -> "154 slice_5";
+"67 dequantize_per_tensor_default_6" -> "68 max_pool2d_2";
+"68 max_pool2d_2" -> "75 conv2d_6";
+"69 _param_constant24" -> "72 quantize_per_channel_default_6";
+"70 conv2d_6_scale_0" -> "72 quantize_per_channel_default_6";
+"70 conv2d_6_scale_0" -> "73 dequantize_per_channel_default_6";
+"71 conv2d_6_zero_point_0" -> "72 quantize_per_channel_default_6";
+"71 conv2d_6_zero_point_0" -> "73 dequantize_per_channel_default_6";
+"72 quantize_per_channel_default_6" -> "73 dequantize_per_channel_default_6";
+"73 dequantize_per_channel_default_6" -> "75 conv2d_6";
+"74 _param_constant25_0_0" -> "75 conv2d_6";
+"75 conv2d_6" -> "76 relu_6";
+"76 relu_6" -> "77 quantize_per_tensor_default_12";
+"77 quantize_per_tensor_default_12" -> "78 dequantize_per_tensor_default_16";
+"78 dequantize_per_tensor_default_16" -> "85 conv2d_7";
+"79 _param_constant28" -> "82 quantize_per_channel_default_7";
+"80 conv2d_7_scale_0" -> "82 quantize_per_channel_default_7";
+"80 conv2d_7_scale_0" -> "83 dequantize_per_channel_default_7";
+"81 conv2d_7_zero_point_0" -> "82 quantize_per_channel_default_7";
+"81 conv2d_7_zero_point_0" -> "83 dequantize_per_channel_default_7";
+"82 quantize_per_channel_default_7" -> "83 dequantize_per_channel_default_7";
+"83 dequantize_per_channel_default_7" -> "85 conv2d_7";
+"84 _param_constant29_0_0" -> "85 conv2d_7";
+"85 conv2d_7" -> "86 relu_7";
+"86 relu_7" -> "87 quantize_per_tensor_default_7";
+"87 quantize_per_tensor_default_7" -> "88 dequantize_per_tensor_default_11";
+"87 quantize_per_tensor_default_7" -> "89 dequantize_per_tensor_default_10";
+"88 dequantize_per_tensor_default_11" -> "120 slice_1";
+"89 dequantize_per_tensor_default_10" -> "90 max_pool2d_3";
+"90 max_pool2d_3" -> "97 conv2d_8";
+"91 _param_constant32" -> "94 quantize_per_channel_default_8";
+"92 conv2d_8_scale_0" -> "94 quantize_per_channel_default_8";
+"92 conv2d_8_scale_0" -> "95 dequantize_per_channel_default_8";
+"93 conv2d_8_zero_point_0" -> "94 quantize_per_channel_default_8";
+"93 conv2d_8_zero_point_0" -> "95 dequantize_per_channel_default_8";
+"94 quantize_per_channel_default_8" -> "95 dequantize_per_channel_default_8";
+"95 dequantize_per_channel_default_8" -> "97 conv2d_8";
+"96 _param_constant33_0_0" -> "97 conv2d_8";
+"97 conv2d_8" -> "98 relu_8";
+"98 relu_8" -> "99 quantize_per_tensor_default_13";
+"99 quantize_per_tensor_default_13" -> "100 dequantize_per_tensor_default_17";
+"100 dequantize_per_tensor_default_17" -> "107 conv2d_9";
+"101 _param_constant36" -> "104 quantize_per_channel_default_9";
+"102 conv2d_9_scale_0" -> "104 quantize_per_channel_default_9";
+"102 conv2d_9_scale_0" -> "105 dequantize_per_channel_default_9";
+"103 conv2d_9_zero_point_0" -> "104 quantize_per_channel_default_9";
+"103 conv2d_9_zero_point_0" -> "105 dequantize_per_channel_default_9";
+"104 quantize_per_channel_default_9" -> "105 dequantize_per_channel_default_9";
+"105 dequantize_per_channel_default_9" -> "107 conv2d_9";
+"106 _param_constant37_0_0" -> "107 conv2d_9";
+"107 conv2d_9" -> "108 relu_9";
+"108 relu_9" -> "109 quantize_per_tensor_default_14";
+"109 quantize_per_tensor_default_14" -> "110 dequantize_per_tensor_default_18";
+"110 dequantize_per_tensor_default_18" -> "117 conv_transpose2d";
+"111 _param_constant40" -> "115 quantize_per_channel_default_10";
+"112 _param_constant41" -> "117 conv_transpose2d";
+"113 conv_transpose2d_scale_0" -> "115 quantize_per_channel_default_10";
+"113 conv_transpose2d_scale_0" -> "116 dequantize_per_channel_default_10";
+"114 conv_transpose2d_zero_point_0" -> "115 quantize_per_channel_default_10";
+"114 conv_transpose2d_zero_point_0" -> "116 dequantize_per_channel_default_10";
+"115 quantize_per_channel_default_10" -> "116 dequantize_per_channel_default_10";
+"116 dequantize_per_channel_default_10" -> "117 conv_transpose2d";
+"117 conv_transpose2d" -> "118 quantize_per_tensor_default_6";
+"118 quantize_per_tensor_default_6" -> "119 dequantize_per_tensor_default_9";
+"119 dequantize_per_tensor_default_9" -> "124 cat";
+"120 slice_1" -> "121 slice_2";
+"121 slice_2" -> "122 slice_3";
+"122 slice_3" -> "123 slice_4";
+"123 slice_4" -> "124 cat";
+"124 cat" -> "131 conv2d_10";
+"125 _param_constant42" -> "128 quantize_per_channel_default_11";
+"126 conv2d_10_scale_0" -> "128 quantize_per_channel_default_11";
+"126 conv2d_10_scale_0" -> "129 dequantize_per_channel_default_11";
+"127 conv2d_10_zero_point_0" -> "128 quantize_per_channel_default_11";
+"127 conv2d_10_zero_point_0" -> "129 dequantize_per_channel_default_11";
+"128 quantize_per_channel_default_11" -> "129 dequantize_per_channel_default_11";
+"129 dequantize_per_channel_default_11" -> "131 conv2d_10";
+"130 _param_constant43_0_0" -> "131 conv2d_10";
+"131 conv2d_10" -> "132 relu_10";
+"132 relu_10" -> "133 quantize_per_tensor_default_15";
+"133 quantize_per_tensor_default_15" -> "134 dequantize_per_tensor_default_19";
+"134 dequantize_per_tensor_default_19" -> "141 conv2d_11";
+"135 _param_constant46" -> "138 quantize_per_channel_default_12";
+"136 conv2d_11_scale_0" -> "138 quantize_per_channel_default_12";
+"136 conv2d_11_scale_0" -> "139 dequantize_per_channel_default_12";
+"137 conv2d_11_zero_point_0" -> "138 quantize_per_channel_default_12";
+"137 conv2d_11_zero_point_0" -> "139 dequantize_per_channel_default_12";
+"138 quantize_per_channel_default_12" -> "139 dequantize_per_channel_default_12";
+"139 dequantize_per_channel_default_12" -> "141 conv2d_11";
+"140 _param_constant47_0_0" -> "141 conv2d_11";
+"141 conv2d_11" -> "142 relu_11";
+"142 relu_11" -> "143 quantize_per_tensor_default_16";
+"143 quantize_per_tensor_default_16" -> "144 dequantize_per_tensor_default_20";
+"144 dequantize_per_tensor_default_20" -> "151 conv_transpose2d_1";
+"145 _param_constant50" -> "149 quantize_per_channel_default_13";
+"146 _param_constant51" -> "151 conv_transpose2d_1";
+"147 conv_transpose2d_1_scale_0" -> "149 quantize_per_channel_default_13";
+"147 conv_transpose2d_1_scale_0" -> "150 dequantize_per_channel_default_13";
+"148 conv_transpose2d_1_zero_point_0" -> "149 quantize_per_channel_default_13";
+"148 conv_transpose2d_1_zero_point_0" -> "150 dequantize_per_channel_default_13";
+"149 quantize_per_channel_default_13" -> "150 dequantize_per_channel_default_13";
+"150 dequantize_per_channel_default_13" -> "151 conv_transpose2d_1";
+"151 conv_transpose2d_1" -> "152 quantize_per_tensor_default_5";
+"152 quantize_per_tensor_default_5" -> "153 dequantize_per_tensor_default_8";
+"153 dequantize_per_tensor_default_8" -> "158 cat_1";
+"154 slice_5" -> "155 slice_6";
+"155 slice_6" -> "156 slice_7";
+"156 slice_7" -> "157 slice_8";
+"157 slice_8" -> "158 cat_1";
+"158 cat_1" -> "165 conv2d_12";
+"159 _param_constant52" -> "162 quantize_per_channel_default_14";
+"160 conv2d_12_scale_0" -> "162 quantize_per_channel_default_14";
+"160 conv2d_12_scale_0" -> "163 dequantize_per_channel_default_14";
+"161 conv2d_12_zero_point_0" -> "162 quantize_per_channel_default_14";
+"161 conv2d_12_zero_point_0" -> "163 dequantize_per_channel_default_14";
+"162 quantize_per_channel_default_14" -> "163 dequantize_per_channel_default_14";
+"163 dequantize_per_channel_default_14" -> "165 conv2d_12";
+"164 _param_constant53_0_0" -> "165 conv2d_12";
+"165 conv2d_12" -> "166 relu_12";
+"166 relu_12" -> "167 quantize_per_tensor_default_17";
+"167 quantize_per_tensor_default_17" -> "168 dequantize_per_tensor_default_21";
+"168 dequantize_per_tensor_default_21" -> "175 conv2d_13";
+"169 _param_constant56" -> "172 quantize_per_channel_default_15";
+"170 conv2d_13_scale_0" -> "172 quantize_per_channel_default_15";
+"170 conv2d_13_scale_0" -> "173 dequantize_per_channel_default_15";
+"171 conv2d_13_zero_point_0" -> "172 quantize_per_channel_default_15";
+"171 conv2d_13_zero_point_0" -> "173 dequantize_per_channel_default_15";
+"172 quantize_per_channel_default_15" -> "173 dequantize_per_channel_default_15";
+"173 dequantize_per_channel_default_15" -> "175 conv2d_13";
+"174 _param_constant57_0_0" -> "175 conv2d_13";
+"175 conv2d_13" -> "176 relu_13";
+"176 relu_13" -> "177 quantize_per_tensor_default_18";
+"177 quantize_per_tensor_default_18" -> "178 dequantize_per_tensor_default_22";
+"178 dequantize_per_tensor_default_22" -> "185 conv_transpose2d_2";
+"179 _param_constant60" -> "183 quantize_per_channel_default_16";
+"180 _param_constant61" -> "185 conv_transpose2d_2";
+"181 conv_transpose2d_2_scale_0" -> "183 quantize_per_channel_default_16";
+"181 conv_transpose2d_2_scale_0" -> "184 dequantize_per_channel_default_16";
+"182 conv_transpose2d_2_zero_point_0" -> "183 quantize_per_channel_default_16";
+"182 conv_transpose2d_2_zero_point_0" -> "184 dequantize_per_channel_default_16";
+"183 quantize_per_channel_default_16" -> "184 dequantize_per_channel_default_16";
+"184 dequantize_per_channel_default_16" -> "185 conv_transpose2d_2";
+"185 conv_transpose2d_2" -> "186 quantize_per_tensor_default_2";
+"186 quantize_per_tensor_default_2" -> "187 dequantize_per_tensor_default_3";
+"187 dequantize_per_tensor_default_3" -> "192 cat_2";
+"188 slice_9" -> "189 slice_10";
+"189 slice_10" -> "190 slice_11";
+"190 slice_11" -> "191 slice_12";
+"191 slice_12" -> "192 cat_2";
+"192 cat_2" -> "199 conv2d_14";
+"193 _param_constant62" -> "196 quantize_per_channel_default_17";
+"194 conv2d_14_scale_0" -> "196 quantize_per_channel_default_17";
+"194 conv2d_14_scale_0" -> "197 dequantize_per_channel_default_17";
+"195 conv2d_14_zero_point_0" -> "196 quantize_per_channel_default_17";
+"195 conv2d_14_zero_point_0" -> "197 dequantize_per_channel_default_17";
+"196 quantize_per_channel_default_17" -> "197 dequantize_per_channel_default_17";
+"197 dequantize_per_channel_default_17" -> "199 conv2d_14";
+"198 _param_constant63_0_0" -> "199 conv2d_14";
+"199 conv2d_14" -> "200 relu_14";
+"200 relu_14" -> "201 quantize_per_tensor_default_19";
+"201 quantize_per_tensor_default_19" -> "202 dequantize_per_tensor_default_23";
+"202 dequantize_per_tensor_default_23" -> "209 conv2d_15";
+"203 _param_constant66" -> "206 quantize_per_channel_default_18";
+"204 conv2d_15_scale_0" -> "206 quantize_per_channel_default_18";
+"204 conv2d_15_scale_0" -> "207 dequantize_per_channel_default_18";
+"205 conv2d_15_zero_point_0" -> "206 quantize_per_channel_default_18";
+"205 conv2d_15_zero_point_0" -> "207 dequantize_per_channel_default_18";
+"206 quantize_per_channel_default_18" -> "207 dequantize_per_channel_default_18";
+"207 dequantize_per_channel_default_18" -> "209 conv2d_15";
+"208 _param_constant67_0_0" -> "209 conv2d_15";
+"209 conv2d_15" -> "210 relu_15";
+"210 relu_15" -> "211 quantize_per_tensor_default_20";
+"211 quantize_per_tensor_default_20" -> "212 dequantize_per_tensor_default_24";
+"212 dequantize_per_tensor_default_24" -> "219 conv_transpose2d_3";
+"213 _param_constant70" -> "217 quantize_per_channel_default_19";
+"214 _param_constant71" -> "219 conv_transpose2d_3";
+"215 conv_transpose2d_3_scale_0" -> "217 quantize_per_channel_default_19";
+"215 conv_transpose2d_3_scale_0" -> "218 dequantize_per_channel_default_19";
+"216 conv_transpose2d_3_zero_point_0" -> "217 quantize_per_channel_default_19";
+"216 conv_transpose2d_3_zero_point_0" -> "218 dequantize_per_channel_default_19";
+"217 quantize_per_channel_default_19" -> "218 dequantize_per_channel_default_19";
+"218 dequantize_per_channel_default_19" -> "219 conv_transpose2d_3";
+"219 conv_transpose2d_3" -> "220 quantize_per_tensor_default_1";
+"220 quantize_per_tensor_default_1" -> "221 dequantize_per_tensor_default_2";
+"221 dequantize_per_tensor_default_2" -> "226 cat_3";
+"222 slice_13" -> "223 slice_14";
+"223 slice_14" -> "224 slice_15";
+"224 slice_15" -> "225 slice_16";
+"225 slice_16" -> "226 cat_3";
+"226 cat_3" -> "233 conv2d_16";
+"227 _param_constant72" -> "230 quantize_per_channel_default_20";
+"228 conv2d_16_scale_0" -> "230 quantize_per_channel_default_20";
+"228 conv2d_16_scale_0" -> "231 dequantize_per_channel_default_20";
+"229 conv2d_16_zero_point_0" -> "230 quantize_per_channel_default_20";
+"229 conv2d_16_zero_point_0" -> "231 dequantize_per_channel_default_20";
+"230 quantize_per_channel_default_20" -> "231 dequantize_per_channel_default_20";
+"231 dequantize_per_channel_default_20" -> "233 conv2d_16";
+"232 _param_constant73_0_0" -> "233 conv2d_16";
+"233 conv2d_16" -> "234 relu_16";
+"234 relu_16" -> "235 quantize_per_tensor_default_21";
+"235 quantize_per_tensor_default_21" -> "236 dequantize_per_tensor_default_25";
+"236 dequantize_per_tensor_default_25" -> "243 conv2d_17";
+"237 _param_constant76" -> "240 quantize_per_channel_default_21";
+"238 conv2d_17_scale_0" -> "240 quantize_per_channel_default_21";
+"238 conv2d_17_scale_0" -> "241 dequantize_per_channel_default_21";
+"239 conv2d_17_zero_point_0" -> "240 quantize_per_channel_default_21";
+"239 conv2d_17_zero_point_0" -> "241 dequantize_per_channel_default_21";
+"240 quantize_per_channel_default_21" -> "241 dequantize_per_channel_default_21";
+"241 dequantize_per_channel_default_21" -> "243 conv2d_17";
+"242 _param_constant77_0_0" -> "243 conv2d_17";
+"243 conv2d_17" -> "244 relu_17";
+"244 relu_17" -> "245 quantize_per_tensor_default_22";
+"245 quantize_per_tensor_default_22" -> "246 dequantize_per_tensor_default_26";
+"246 dequantize_per_tensor_default_26" -> "253 conv2d_18";
+"247 _param_constant80" -> "250 quantize_per_channel_default_22";
+"248 conv2d_18_scale_0" -> "250 quantize_per_channel_default_22";
+"248 conv2d_18_scale_0" -> "251 dequantize_per_channel_default_22";
+"249 conv2d_18_zero_point_0" -> "250 quantize_per_channel_default_22";
+"249 conv2d_18_zero_point_0" -> "251 dequantize_per_channel_default_22";
+"250 quantize_per_channel_default_22" -> "251 dequantize_per_channel_default_22";
+"251 dequantize_per_channel_default_22" -> "253 conv2d_18";
+"252 _param_constant81_0_0" -> "253 conv2d_18";
+"253 conv2d_18" -> "254 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/quantized/vit_b_16.dot b/tests/torch/data/reference_graphs/fx/quantized/vit_b_16.dot
new file mode 100644
index 00000000000..340c0e0714a
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/quantized/vit_b_16.dot
@@ -0,0 +1,2113 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 quantize_per_tensor_default" [id=1, type=quantize_per_tensor];
+"2 dequantize_per_tensor_default" [id=2, type=dequantize_per_tensor];
+"3 _param_constant0" [id=3, type=get_attr];
+"4 conv2d_scale_0" [id=4, type=get_attr];
+"5 conv2d_zero_point_0" [id=5, type=get_attr];
+"6 quantize_per_channel_default" [id=6, type=quantize_per_channel];
+"7 dequantize_per_channel_default" [id=7, type=dequantize_per_channel];
+"8 _param_constant1_0_0" [id=8, type=get_attr];
+"9 conv2d" [id=9, type=conv2d];
+"10 reshape" [id=10, type=reshape];
+"11 permute" [id=11, type=permute];
+"12 _param_constant2" [id=12, type=get_attr];
+"13 expand" [id=13, type=expand];
+"14 cat" [id=14, type=cat];
+"15 _param_constant3" [id=15, type=get_attr];
+"16 add" [id=16, type=add];
+"17 dropout" [id=17, type=dropout];
+"18 _param_constant4" [id=18, type=get_attr];
+"19 _param_constant5" [id=19, type=get_attr];
+"20 layer_norm" [id=20, type=layer_norm];
+"21 transpose" [id=21, type=transpose];
+"22 linear_updated_constant0" [id=22, type=get_attr];
+"23 transpose_0_0_nncf_smooth_quant_0" [id=23, type=call_module];
+"24 quantize_per_tensor_default_1" [id=24, type=quantize_per_tensor];
+"25 dequantize_per_tensor_default_1" [id=25, type=dequantize_per_tensor];
+"26 linear_scale_0" [id=26, type=get_attr];
+"27 linear_zero_point_0" [id=27, type=get_attr];
+"28 quantize_per_channel_default_1" [id=28, type=quantize_per_channel];
+"29 dequantize_per_channel_default_1" [id=29, type=dequantize_per_channel];
+"30 _param_constant7_0_0" [id=30, type=get_attr];
+"31 linear" [id=31, type=linear];
+"32 unflatten" [id=32, type=unflatten];
+"33 unsqueeze" [id=33, type=unsqueeze];
+"34 transpose_1" [id=34, type=transpose];
+"35 squeeze" [id=35, type=squeeze];
+"36 contiguous" [id=36, type=contiguous];
+"37 quantize_per_tensor_default_2" [id=37, type=quantize_per_tensor];
+"38 dequantize_per_tensor_default_2" [id=38, type=dequantize_per_tensor];
+"39 select" [id=39, type=select];
+"40 quantize_per_tensor_default_3" [id=40, type=quantize_per_tensor];
+"41 dequantize_per_tensor_default_3" [id=41, type=dequantize_per_tensor];
+"42 select_1" [id=42, type=select];
+"43 select_2" [id=43, type=select];
+"44 view" [id=44, type=view];
+"45 transpose_2" [id=45, type=transpose];
+"46 view_1" [id=46, type=view];
+"47 transpose_3" [id=47, type=transpose];
+"48 view_2" [id=48, type=view];
+"49 transpose_4" [id=49, type=transpose];
+"50 view_3" [id=50, type=view];
+"51 view_4" [id=51, type=view];
+"52 view_5" [id=52, type=view];
+"53 scaled_dot_product_attention" [id=53, type=scaled_dot_product_attention];
+"54 permute_1" [id=54, type=permute];
+"55 view_6" [id=55, type=view];
+"56 linear_1_updated_constant0" [id=56, type=get_attr];
+"57 view_6_0_0_nncf_smooth_quant_0" [id=57, type=call_module];
+"58 quantize_per_tensor_default_4" [id=58, type=quantize_per_tensor];
+"59 dequantize_per_tensor_default_4" [id=59, type=dequantize_per_tensor];
+"60 linear_1_scale_0" [id=60, type=get_attr];
+"61 linear_1_zero_point_0" [id=61, type=get_attr];
+"62 quantize_per_channel_default_2" [id=62, type=quantize_per_channel];
+"63 dequantize_per_channel_default_2" [id=63, type=dequantize_per_channel];
+"64 _param_constant9_0_0" [id=64, type=get_attr];
+"65 linear_1" [id=65, type=linear];
+"66 view_7" [id=66, type=view];
+"67 transpose_5" [id=67, type=transpose];
+"68 dropout_1" [id=68, type=dropout];
+"69 add_1" [id=69, type=add];
+"70 _param_constant10" [id=70, type=get_attr];
+"71 _param_constant11" [id=71, type=get_attr];
+"72 layer_norm_1" [id=72, type=layer_norm];
+"73 linear_2_updated_constant0" [id=73, type=get_attr];
+"74 layer_norm_1_0_0_nncf_smooth_quant_0" [id=74, type=call_module];
+"75 quantize_per_tensor_default_5" [id=75, type=quantize_per_tensor];
+"76 dequantize_per_tensor_default_5" [id=76, type=dequantize_per_tensor];
+"77 linear_2_scale_0" [id=77, type=get_attr];
+"78 linear_2_zero_point_0" [id=78, type=get_attr];
+"79 quantize_per_channel_default_3" [id=79, type=quantize_per_channel];
+"80 dequantize_per_channel_default_3" [id=80, type=dequantize_per_channel];
+"81 _param_constant13_0_0" [id=81, type=get_attr];
+"82 linear_2" [id=82, type=linear];
+"83 gelu" [id=83, type=gelu];
+"84 dropout_2" [id=84, type=dropout];
+"85 linear_3_updated_constant0" [id=85, type=get_attr];
+"86 dropout_2_0_0_nncf_smooth_quant_0" [id=86, type=call_module];
+"87 quantize_per_tensor_default_6" [id=87, type=quantize_per_tensor];
+"88 dequantize_per_tensor_default_6" [id=88, type=dequantize_per_tensor];
+"89 linear_3_scale_0" [id=89, type=get_attr];
+"90 linear_3_zero_point_0" [id=90, type=get_attr];
+"91 quantize_per_channel_default_4" [id=91, type=quantize_per_channel];
+"92 dequantize_per_channel_default_4" [id=92, type=dequantize_per_channel];
+"93 _param_constant15_0_0" [id=93, type=get_attr];
+"94 linear_3" [id=94, type=linear];
+"95 dropout_3" [id=95, type=dropout];
+"96 add_2" [id=96, type=add];
+"97 _param_constant16" [id=97, type=get_attr];
+"98 _param_constant17" [id=98, type=get_attr];
+"99 layer_norm_2" [id=99, type=layer_norm];
+"100 transpose_6" [id=100, type=transpose];
+"101 linear_4_updated_constant0" [id=101, type=get_attr];
+"102 transpose_6_0_0_nncf_smooth_quant_0" [id=102, type=call_module];
+"103 quantize_per_tensor_default_7" [id=103, type=quantize_per_tensor];
+"104 dequantize_per_tensor_default_7" [id=104, type=dequantize_per_tensor];
+"105 linear_4_scale_0" [id=105, type=get_attr];
+"106 linear_4_zero_point_0" [id=106, type=get_attr];
+"107 quantize_per_channel_default_5" [id=107, type=quantize_per_channel];
+"108 dequantize_per_channel_default_5" [id=108, type=dequantize_per_channel];
+"109 _param_constant19_0_0" [id=109, type=get_attr];
+"110 linear_4" [id=110, type=linear];
+"111 unflatten_1" [id=111, type=unflatten];
+"112 unsqueeze_1" [id=112, type=unsqueeze];
+"113 transpose_7" [id=113, type=transpose];
+"114 squeeze_1" [id=114, type=squeeze];
+"115 contiguous_1" [id=115, type=contiguous];
+"116 quantize_per_tensor_default_8" [id=116, type=quantize_per_tensor];
+"117 dequantize_per_tensor_default_8" [id=117, type=dequantize_per_tensor];
+"118 select_3" [id=118, type=select];
+"119 quantize_per_tensor_default_9" [id=119, type=quantize_per_tensor];
+"120 dequantize_per_tensor_default_9" [id=120, type=dequantize_per_tensor];
+"121 select_4" [id=121, type=select];
+"122 select_5" [id=122, type=select];
+"123 view_8" [id=123, type=view];
+"124 transpose_8" [id=124, type=transpose];
+"125 view_9" [id=125, type=view];
+"126 transpose_9" [id=126, type=transpose];
+"127 view_10" [id=127, type=view];
+"128 transpose_10" [id=128, type=transpose];
+"129 view_11" [id=129, type=view];
+"130 view_12" [id=130, type=view];
+"131 view_13" [id=131, type=view];
+"132 scaled_dot_product_attention_1" [id=132, type=scaled_dot_product_attention];
+"133 permute_2" [id=133, type=permute];
+"134 view_14" [id=134, type=view];
+"135 linear_5_updated_constant0" [id=135, type=get_attr];
+"136 view_14_0_0_nncf_smooth_quant_0" [id=136, type=call_module];
+"137 quantize_per_tensor_default_10" [id=137, type=quantize_per_tensor];
+"138 dequantize_per_tensor_default_10" [id=138, type=dequantize_per_tensor];
+"139 linear_5_scale_0" [id=139, type=get_attr];
+"140 linear_5_zero_point_0" [id=140, type=get_attr];
+"141 quantize_per_channel_default_6" [id=141, type=quantize_per_channel];
+"142 dequantize_per_channel_default_6" [id=142, type=dequantize_per_channel];
+"143 _param_constant21_0_0" [id=143, type=get_attr];
+"144 linear_5" [id=144, type=linear];
+"145 view_15" [id=145, type=view];
+"146 transpose_11" [id=146, type=transpose];
+"147 dropout_4" [id=147, type=dropout];
+"148 add_3" [id=148, type=add];
+"149 _param_constant22" [id=149, type=get_attr];
+"150 _param_constant23" [id=150, type=get_attr];
+"151 layer_norm_3" [id=151, type=layer_norm];
+"152 linear_6_updated_constant0" [id=152, type=get_attr];
+"153 layer_norm_3_0_0_nncf_smooth_quant_0" [id=153, type=call_module];
+"154 quantize_per_tensor_default_11" [id=154, type=quantize_per_tensor];
+"155 dequantize_per_tensor_default_11" [id=155, type=dequantize_per_tensor];
+"156 linear_6_scale_0" [id=156, type=get_attr];
+"157 linear_6_zero_point_0" [id=157, type=get_attr];
+"158 quantize_per_channel_default_7" [id=158, type=quantize_per_channel];
+"159 dequantize_per_channel_default_7" [id=159, type=dequantize_per_channel];
+"160 _param_constant25_0_0" [id=160, type=get_attr];
+"161 linear_6" [id=161, type=linear];
+"162 gelu_1" [id=162, type=gelu];
+"163 dropout_5" [id=163, type=dropout];
+"164 linear_7_updated_constant0" [id=164, type=get_attr];
+"165 dropout_5_0_0_nncf_smooth_quant_0" [id=165, type=call_module];
+"166 quantize_per_tensor_default_12" [id=166, type=quantize_per_tensor];
+"167 dequantize_per_tensor_default_12" [id=167, type=dequantize_per_tensor];
+"168 linear_7_scale_0" [id=168, type=get_attr];
+"169 linear_7_zero_point_0" [id=169, type=get_attr];
+"170 quantize_per_channel_default_8" [id=170, type=quantize_per_channel];
+"171 dequantize_per_channel_default_8" [id=171, type=dequantize_per_channel];
+"172 _param_constant27_0_0" [id=172, type=get_attr];
+"173 linear_7" [id=173, type=linear];
+"174 dropout_6" [id=174, type=dropout];
+"175 add_4" [id=175, type=add];
+"176 _param_constant28" [id=176, type=get_attr];
+"177 _param_constant29" [id=177, type=get_attr];
+"178 layer_norm_4" [id=178, type=layer_norm];
+"179 transpose_12" [id=179, type=transpose];
+"180 linear_8_updated_constant0" [id=180, type=get_attr];
+"181 transpose_12_0_0_nncf_smooth_quant_0" [id=181, type=call_module];
+"182 quantize_per_tensor_default_13" [id=182, type=quantize_per_tensor];
+"183 dequantize_per_tensor_default_13" [id=183, type=dequantize_per_tensor];
+"184 linear_8_scale_0" [id=184, type=get_attr];
+"185 linear_8_zero_point_0" [id=185, type=get_attr];
+"186 quantize_per_channel_default_9" [id=186, type=quantize_per_channel];
+"187 dequantize_per_channel_default_9" [id=187, type=dequantize_per_channel];
+"188 _param_constant31_0_0" [id=188, type=get_attr];
+"189 linear_8" [id=189, type=linear];
+"190 unflatten_2" [id=190, type=unflatten];
+"191 unsqueeze_2" [id=191, type=unsqueeze];
+"192 transpose_13" [id=192, type=transpose];
+"193 squeeze_2" [id=193, type=squeeze];
+"194 contiguous_2" [id=194, type=contiguous];
+"195 quantize_per_tensor_default_14" [id=195, type=quantize_per_tensor];
+"196 dequantize_per_tensor_default_14" [id=196, type=dequantize_per_tensor];
+"197 select_6" [id=197, type=select];
+"198 quantize_per_tensor_default_15" [id=198, type=quantize_per_tensor];
+"199 dequantize_per_tensor_default_15" [id=199, type=dequantize_per_tensor];
+"200 select_7" [id=200, type=select];
+"201 select_8" [id=201, type=select];
+"202 view_16" [id=202, type=view];
+"203 transpose_14" [id=203, type=transpose];
+"204 view_17" [id=204, type=view];
+"205 transpose_15" [id=205, type=transpose];
+"206 view_18" [id=206, type=view];
+"207 transpose_16" [id=207, type=transpose];
+"208 view_19" [id=208, type=view];
+"209 view_20" [id=209, type=view];
+"210 view_21" [id=210, type=view];
+"211 scaled_dot_product_attention_2" [id=211, type=scaled_dot_product_attention];
+"212 permute_3" [id=212, type=permute];
+"213 view_22" [id=213, type=view];
+"214 linear_9_updated_constant0" [id=214, type=get_attr];
+"215 view_22_0_0_nncf_smooth_quant_0" [id=215, type=call_module];
+"216 quantize_per_tensor_default_16" [id=216, type=quantize_per_tensor];
+"217 dequantize_per_tensor_default_16" [id=217, type=dequantize_per_tensor];
+"218 linear_9_scale_0" [id=218, type=get_attr];
+"219 linear_9_zero_point_0" [id=219, type=get_attr];
+"220 quantize_per_channel_default_10" [id=220, type=quantize_per_channel];
+"221 dequantize_per_channel_default_10" [id=221, type=dequantize_per_channel];
+"222 _param_constant33_0_0" [id=222, type=get_attr];
+"223 linear_9" [id=223, type=linear];
+"224 view_23" [id=224, type=view];
+"225 transpose_17" [id=225, type=transpose];
+"226 dropout_7" [id=226, type=dropout];
+"227 add_5" [id=227, type=add];
+"228 _param_constant34" [id=228, type=get_attr];
+"229 _param_constant35" [id=229, type=get_attr];
+"230 layer_norm_5" [id=230, type=layer_norm];
+"231 linear_10_updated_constant0" [id=231, type=get_attr];
+"232 layer_norm_5_0_0_nncf_smooth_quant_0" [id=232, type=call_module];
+"233 quantize_per_tensor_default_17" [id=233, type=quantize_per_tensor];
+"234 dequantize_per_tensor_default_17" [id=234, type=dequantize_per_tensor];
+"235 linear_10_scale_0" [id=235, type=get_attr];
+"236 linear_10_zero_point_0" [id=236, type=get_attr];
+"237 quantize_per_channel_default_11" [id=237, type=quantize_per_channel];
+"238 dequantize_per_channel_default_11" [id=238, type=dequantize_per_channel];
+"239 _param_constant37_0_0" [id=239, type=get_attr];
+"240 linear_10" [id=240, type=linear];
+"241 gelu_2" [id=241, type=gelu];
+"242 dropout_8" [id=242, type=dropout];
+"243 linear_11_updated_constant0" [id=243, type=get_attr];
+"244 dropout_8_0_0_nncf_smooth_quant_0" [id=244, type=call_module];
+"245 quantize_per_tensor_default_18" [id=245, type=quantize_per_tensor];
+"246 dequantize_per_tensor_default_18" [id=246, type=dequantize_per_tensor];
+"247 linear_11_scale_0" [id=247, type=get_attr];
+"248 linear_11_zero_point_0" [id=248, type=get_attr];
+"249 quantize_per_channel_default_12" [id=249, type=quantize_per_channel];
+"250 dequantize_per_channel_default_12" [id=250, type=dequantize_per_channel];
+"251 _param_constant39_0_0" [id=251, type=get_attr];
+"252 linear_11" [id=252, type=linear];
+"253 dropout_9" [id=253, type=dropout];
+"254 add_6" [id=254, type=add];
+"255 _param_constant40" [id=255, type=get_attr];
+"256 _param_constant41" [id=256, type=get_attr];
+"257 layer_norm_6" [id=257, type=layer_norm];
+"258 transpose_18" [id=258, type=transpose];
+"259 linear_12_updated_constant0" [id=259, type=get_attr];
+"260 transpose_18_0_0_nncf_smooth_quant_0" [id=260, type=call_module];
+"261 quantize_per_tensor_default_19" [id=261, type=quantize_per_tensor];
+"262 dequantize_per_tensor_default_19" [id=262, type=dequantize_per_tensor];
+"263 linear_12_scale_0" [id=263, type=get_attr];
+"264 linear_12_zero_point_0" [id=264, type=get_attr];
+"265 quantize_per_channel_default_13" [id=265, type=quantize_per_channel];
+"266 dequantize_per_channel_default_13" [id=266, type=dequantize_per_channel];
+"267 _param_constant43_0_0" [id=267, type=get_attr];
+"268 linear_12" [id=268, type=linear];
+"269 unflatten_3" [id=269, type=unflatten];
+"270 unsqueeze_3" [id=270, type=unsqueeze];
+"271 transpose_19" [id=271, type=transpose];
+"272 squeeze_3" [id=272, type=squeeze];
+"273 contiguous_3" [id=273, type=contiguous];
+"274 quantize_per_tensor_default_20" [id=274, type=quantize_per_tensor];
+"275 dequantize_per_tensor_default_20" [id=275, type=dequantize_per_tensor];
+"276 select_9" [id=276, type=select];
+"277 quantize_per_tensor_default_21" [id=277, type=quantize_per_tensor];
+"278 dequantize_per_tensor_default_21" [id=278, type=dequantize_per_tensor];
+"279 select_10" [id=279, type=select];
+"280 select_11" [id=280, type=select];
+"281 view_24" [id=281, type=view];
+"282 transpose_20" [id=282, type=transpose];
+"283 view_25" [id=283, type=view];
+"284 transpose_21" [id=284, type=transpose];
+"285 view_26" [id=285, type=view];
+"286 transpose_22" [id=286, type=transpose];
+"287 view_27" [id=287, type=view];
+"288 view_28" [id=288, type=view];
+"289 view_29" [id=289, type=view];
+"290 scaled_dot_product_attention_3" [id=290, type=scaled_dot_product_attention];
+"291 permute_4" [id=291, type=permute];
+"292 view_30" [id=292, type=view];
+"293 linear_13_updated_constant0" [id=293, type=get_attr];
+"294 view_30_0_0_nncf_smooth_quant_0" [id=294, type=call_module];
+"295 quantize_per_tensor_default_22" [id=295, type=quantize_per_tensor];
+"296 dequantize_per_tensor_default_22" [id=296, type=dequantize_per_tensor];
+"297 linear_13_scale_0" [id=297, type=get_attr];
+"298 linear_13_zero_point_0" [id=298, type=get_attr];
+"299 quantize_per_channel_default_14" [id=299, type=quantize_per_channel];
+"300 dequantize_per_channel_default_14" [id=300, type=dequantize_per_channel];
+"301 _param_constant45_0_0" [id=301, type=get_attr];
+"302 linear_13" [id=302, type=linear];
+"303 view_31" [id=303, type=view];
+"304 transpose_23" [id=304, type=transpose];
+"305 dropout_10" [id=305, type=dropout];
+"306 add_7" [id=306, type=add];
+"307 _param_constant46" [id=307, type=get_attr];
+"308 _param_constant47" [id=308, type=get_attr];
+"309 layer_norm_7" [id=309, type=layer_norm];
+"310 linear_14_updated_constant0" [id=310, type=get_attr];
+"311 layer_norm_7_0_0_nncf_smooth_quant_0" [id=311, type=call_module];
+"312 quantize_per_tensor_default_23" [id=312, type=quantize_per_tensor];
+"313 dequantize_per_tensor_default_23" [id=313, type=dequantize_per_tensor];
+"314 linear_14_scale_0" [id=314, type=get_attr];
+"315 linear_14_zero_point_0" [id=315, type=get_attr];
+"316 quantize_per_channel_default_15" [id=316, type=quantize_per_channel];
+"317 dequantize_per_channel_default_15" [id=317, type=dequantize_per_channel];
+"318 _param_constant49_0_0" [id=318, type=get_attr];
+"319 linear_14" [id=319, type=linear];
+"320 gelu_3" [id=320, type=gelu];
+"321 dropout_11" [id=321, type=dropout];
+"322 linear_15_updated_constant0" [id=322, type=get_attr];
+"323 dropout_11_0_0_nncf_smooth_quant_0" [id=323, type=call_module];
+"324 quantize_per_tensor_default_24" [id=324, type=quantize_per_tensor];
+"325 dequantize_per_tensor_default_24" [id=325, type=dequantize_per_tensor];
+"326 linear_15_scale_0" [id=326, type=get_attr];
+"327 linear_15_zero_point_0" [id=327, type=get_attr];
+"328 quantize_per_channel_default_16" [id=328, type=quantize_per_channel];
+"329 dequantize_per_channel_default_16" [id=329, type=dequantize_per_channel];
+"330 _param_constant51_0_0" [id=330, type=get_attr];
+"331 linear_15" [id=331, type=linear];
+"332 dropout_12" [id=332, type=dropout];
+"333 add_8" [id=333, type=add];
+"334 _param_constant52" [id=334, type=get_attr];
+"335 _param_constant53" [id=335, type=get_attr];
+"336 layer_norm_8" [id=336, type=layer_norm];
+"337 transpose_24" [id=337, type=transpose];
+"338 linear_16_updated_constant0" [id=338, type=get_attr];
+"339 transpose_24_0_0_nncf_smooth_quant_0" [id=339, type=call_module];
+"340 quantize_per_tensor_default_25" [id=340, type=quantize_per_tensor];
+"341 dequantize_per_tensor_default_25" [id=341, type=dequantize_per_tensor];
+"342 linear_16_scale_0" [id=342, type=get_attr];
+"343 linear_16_zero_point_0" [id=343, type=get_attr];
+"344 quantize_per_channel_default_17" [id=344, type=quantize_per_channel];
+"345 dequantize_per_channel_default_17" [id=345, type=dequantize_per_channel];
+"346 _param_constant55_0_0" [id=346, type=get_attr];
+"347 linear_16" [id=347, type=linear];
+"348 unflatten_4" [id=348, type=unflatten];
+"349 unsqueeze_4" [id=349, type=unsqueeze];
+"350 transpose_25" [id=350, type=transpose];
+"351 squeeze_4" [id=351, type=squeeze];
+"352 contiguous_4" [id=352, type=contiguous];
+"353 quantize_per_tensor_default_26" [id=353, type=quantize_per_tensor];
+"354 dequantize_per_tensor_default_26" [id=354, type=dequantize_per_tensor];
+"355 select_12" [id=355, type=select];
+"356 quantize_per_tensor_default_27" [id=356, type=quantize_per_tensor];
+"357 dequantize_per_tensor_default_27" [id=357, type=dequantize_per_tensor];
+"358 select_13" [id=358, type=select];
+"359 select_14" [id=359, type=select];
+"360 view_32" [id=360, type=view];
+"361 transpose_26" [id=361, type=transpose];
+"362 view_33" [id=362, type=view];
+"363 transpose_27" [id=363, type=transpose];
+"364 view_34" [id=364, type=view];
+"365 transpose_28" [id=365, type=transpose];
+"366 view_35" [id=366, type=view];
+"367 view_36" [id=367, type=view];
+"368 view_37" [id=368, type=view];
+"369 scaled_dot_product_attention_4" [id=369, type=scaled_dot_product_attention];
+"370 permute_5" [id=370, type=permute];
+"371 view_38" [id=371, type=view];
+"372 linear_17_updated_constant0" [id=372, type=get_attr];
+"373 view_38_0_0_nncf_smooth_quant_0" [id=373, type=call_module];
+"374 quantize_per_tensor_default_28" [id=374, type=quantize_per_tensor];
+"375 dequantize_per_tensor_default_28" [id=375, type=dequantize_per_tensor];
+"376 linear_17_scale_0" [id=376, type=get_attr];
+"377 linear_17_zero_point_0" [id=377, type=get_attr];
+"378 quantize_per_channel_default_18" [id=378, type=quantize_per_channel];
+"379 dequantize_per_channel_default_18" [id=379, type=dequantize_per_channel];
+"380 _param_constant57_0_0" [id=380, type=get_attr];
+"381 linear_17" [id=381, type=linear];
+"382 view_39" [id=382, type=view];
+"383 transpose_29" [id=383, type=transpose];
+"384 dropout_13" [id=384, type=dropout];
+"385 add_9" [id=385, type=add];
+"386 _param_constant58" [id=386, type=get_attr];
+"387 _param_constant59" [id=387, type=get_attr];
+"388 layer_norm_9" [id=388, type=layer_norm];
+"389 linear_18_updated_constant0" [id=389, type=get_attr];
+"390 layer_norm_9_0_0_nncf_smooth_quant_0" [id=390, type=call_module];
+"391 quantize_per_tensor_default_29" [id=391, type=quantize_per_tensor];
+"392 dequantize_per_tensor_default_29" [id=392, type=dequantize_per_tensor];
+"393 linear_18_scale_0" [id=393, type=get_attr];
+"394 linear_18_zero_point_0" [id=394, type=get_attr];
+"395 quantize_per_channel_default_19" [id=395, type=quantize_per_channel];
+"396 dequantize_per_channel_default_19" [id=396, type=dequantize_per_channel];
+"397 _param_constant61_0_0" [id=397, type=get_attr];
+"398 linear_18" [id=398, type=linear];
+"399 gelu_4" [id=399, type=gelu];
+"400 dropout_14" [id=400, type=dropout];
+"401 linear_19_updated_constant0" [id=401, type=get_attr];
+"402 dropout_14_0_0_nncf_smooth_quant_0" [id=402, type=call_module];
+"403 quantize_per_tensor_default_30" [id=403, type=quantize_per_tensor];
+"404 dequantize_per_tensor_default_30" [id=404, type=dequantize_per_tensor];
+"405 linear_19_scale_0" [id=405, type=get_attr];
+"406 linear_19_zero_point_0" [id=406, type=get_attr];
+"407 quantize_per_channel_default_20" [id=407, type=quantize_per_channel];
+"408 dequantize_per_channel_default_20" [id=408, type=dequantize_per_channel];
+"409 _param_constant63_0_0" [id=409, type=get_attr];
+"410 linear_19" [id=410, type=linear];
+"411 dropout_15" [id=411, type=dropout];
+"412 add_10" [id=412, type=add];
+"413 _param_constant64" [id=413, type=get_attr];
+"414 _param_constant65" [id=414, type=get_attr];
+"415 layer_norm_10" [id=415, type=layer_norm];
+"416 transpose_30" [id=416, type=transpose];
+"417 linear_20_updated_constant0" [id=417, type=get_attr];
+"418 transpose_30_0_0_nncf_smooth_quant_0" [id=418, type=call_module];
+"419 quantize_per_tensor_default_31" [id=419, type=quantize_per_tensor];
+"420 dequantize_per_tensor_default_31" [id=420, type=dequantize_per_tensor];
+"421 linear_20_scale_0" [id=421, type=get_attr];
+"422 linear_20_zero_point_0" [id=422, type=get_attr];
+"423 quantize_per_channel_default_21" [id=423, type=quantize_per_channel];
+"424 dequantize_per_channel_default_21" [id=424, type=dequantize_per_channel];
+"425 _param_constant67_0_0" [id=425, type=get_attr];
+"426 linear_20" [id=426, type=linear];
+"427 unflatten_5" [id=427, type=unflatten];
+"428 unsqueeze_5" [id=428, type=unsqueeze];
+"429 transpose_31" [id=429, type=transpose];
+"430 squeeze_5" [id=430, type=squeeze];
+"431 contiguous_5" [id=431, type=contiguous];
+"432 quantize_per_tensor_default_32" [id=432, type=quantize_per_tensor];
+"433 dequantize_per_tensor_default_32" [id=433, type=dequantize_per_tensor];
+"434 select_15" [id=434, type=select];
+"435 quantize_per_tensor_default_33" [id=435, type=quantize_per_tensor];
+"436 dequantize_per_tensor_default_33" [id=436, type=dequantize_per_tensor];
+"437 select_16" [id=437, type=select];
+"438 select_17" [id=438, type=select];
+"439 view_40" [id=439, type=view];
+"440 transpose_32" [id=440, type=transpose];
+"441 view_41" [id=441, type=view];
+"442 transpose_33" [id=442, type=transpose];
+"443 view_42" [id=443, type=view];
+"444 transpose_34" [id=444, type=transpose];
+"445 view_43" [id=445, type=view];
+"446 view_44" [id=446, type=view];
+"447 view_45" [id=447, type=view];
+"448 scaled_dot_product_attention_5" [id=448, type=scaled_dot_product_attention];
+"449 permute_6" [id=449, type=permute];
+"450 view_46" [id=450, type=view];
+"451 linear_21_updated_constant0" [id=451, type=get_attr];
+"452 view_46_0_0_nncf_smooth_quant_0" [id=452, type=call_module];
+"453 quantize_per_tensor_default_34" [id=453, type=quantize_per_tensor];
+"454 dequantize_per_tensor_default_34" [id=454, type=dequantize_per_tensor];
+"455 linear_21_scale_0" [id=455, type=get_attr];
+"456 linear_21_zero_point_0" [id=456, type=get_attr];
+"457 quantize_per_channel_default_22" [id=457, type=quantize_per_channel];
+"458 dequantize_per_channel_default_22" [id=458, type=dequantize_per_channel];
+"459 _param_constant69_0_0" [id=459, type=get_attr];
+"460 linear_21" [id=460, type=linear];
+"461 view_47" [id=461, type=view];
+"462 transpose_35" [id=462, type=transpose];
+"463 dropout_16" [id=463, type=dropout];
+"464 add_11" [id=464, type=add];
+"465 _param_constant70" [id=465, type=get_attr];
+"466 _param_constant71" [id=466, type=get_attr];
+"467 layer_norm_11" [id=467, type=layer_norm];
+"468 linear_22_updated_constant0" [id=468, type=get_attr];
+"469 layer_norm_11_0_0_nncf_smooth_quant_0" [id=469, type=call_module];
+"470 quantize_per_tensor_default_35" [id=470, type=quantize_per_tensor];
+"471 dequantize_per_tensor_default_35" [id=471, type=dequantize_per_tensor];
+"472 linear_22_scale_0" [id=472, type=get_attr];
+"473 linear_22_zero_point_0" [id=473, type=get_attr];
+"474 quantize_per_channel_default_23" [id=474, type=quantize_per_channel];
+"475 dequantize_per_channel_default_23" [id=475, type=dequantize_per_channel];
+"476 _param_constant73_0_0" [id=476, type=get_attr];
+"477 linear_22" [id=477, type=linear];
+"478 gelu_5" [id=478, type=gelu];
+"479 dropout_17" [id=479, type=dropout];
+"480 linear_23_updated_constant0" [id=480, type=get_attr];
+"481 dropout_17_0_0_nncf_smooth_quant_0" [id=481, type=call_module];
+"482 quantize_per_tensor_default_36" [id=482, type=quantize_per_tensor];
+"483 dequantize_per_tensor_default_36" [id=483, type=dequantize_per_tensor];
+"484 linear_23_scale_0" [id=484, type=get_attr];
+"485 linear_23_zero_point_0" [id=485, type=get_attr];
+"486 quantize_per_channel_default_24" [id=486, type=quantize_per_channel];
+"487 dequantize_per_channel_default_24" [id=487, type=dequantize_per_channel];
+"488 _param_constant75_0_0" [id=488, type=get_attr];
+"489 linear_23" [id=489, type=linear];
+"490 dropout_18" [id=490, type=dropout];
+"491 add_12" [id=491, type=add];
+"492 _param_constant76" [id=492, type=get_attr];
+"493 _param_constant77" [id=493, type=get_attr];
+"494 layer_norm_12" [id=494, type=layer_norm];
+"495 transpose_36" [id=495, type=transpose];
+"496 linear_24_updated_constant0" [id=496, type=get_attr];
+"497 transpose_36_0_0_nncf_smooth_quant_0" [id=497, type=call_module];
+"498 quantize_per_tensor_default_37" [id=498, type=quantize_per_tensor];
+"499 dequantize_per_tensor_default_37" [id=499, type=dequantize_per_tensor];
+"500 linear_24_scale_0" [id=500, type=get_attr];
+"501 linear_24_zero_point_0" [id=501, type=get_attr];
+"502 quantize_per_channel_default_25" [id=502, type=quantize_per_channel];
+"503 dequantize_per_channel_default_25" [id=503, type=dequantize_per_channel];
+"504 _param_constant79_0_0" [id=504, type=get_attr];
+"505 linear_24" [id=505, type=linear];
+"506 unflatten_6" [id=506, type=unflatten];
+"507 unsqueeze_6" [id=507, type=unsqueeze];
+"508 transpose_37" [id=508, type=transpose];
+"509 squeeze_6" [id=509, type=squeeze];
+"510 contiguous_6" [id=510, type=contiguous];
+"511 quantize_per_tensor_default_38" [id=511, type=quantize_per_tensor];
+"512 dequantize_per_tensor_default_38" [id=512, type=dequantize_per_tensor];
+"513 select_18" [id=513, type=select];
+"514 quantize_per_tensor_default_39" [id=514, type=quantize_per_tensor];
+"515 dequantize_per_tensor_default_39" [id=515, type=dequantize_per_tensor];
+"516 select_19" [id=516, type=select];
+"517 select_20" [id=517, type=select];
+"518 view_48" [id=518, type=view];
+"519 transpose_38" [id=519, type=transpose];
+"520 view_49" [id=520, type=view];
+"521 transpose_39" [id=521, type=transpose];
+"522 view_50" [id=522, type=view];
+"523 transpose_40" [id=523, type=transpose];
+"524 view_51" [id=524, type=view];
+"525 view_52" [id=525, type=view];
+"526 view_53" [id=526, type=view];
+"527 scaled_dot_product_attention_6" [id=527, type=scaled_dot_product_attention];
+"528 permute_7" [id=528, type=permute];
+"529 view_54" [id=529, type=view];
+"530 linear_25_updated_constant0" [id=530, type=get_attr];
+"531 view_54_0_0_nncf_smooth_quant_0" [id=531, type=call_module];
+"532 quantize_per_tensor_default_40" [id=532, type=quantize_per_tensor];
+"533 dequantize_per_tensor_default_40" [id=533, type=dequantize_per_tensor];
+"534 linear_25_scale_0" [id=534, type=get_attr];
+"535 linear_25_zero_point_0" [id=535, type=get_attr];
+"536 quantize_per_channel_default_26" [id=536, type=quantize_per_channel];
+"537 dequantize_per_channel_default_26" [id=537, type=dequantize_per_channel];
+"538 _param_constant81_0_0" [id=538, type=get_attr];
+"539 linear_25" [id=539, type=linear];
+"540 view_55" [id=540, type=view];
+"541 transpose_41" [id=541, type=transpose];
+"542 dropout_19" [id=542, type=dropout];
+"543 add_13" [id=543, type=add];
+"544 _param_constant82" [id=544, type=get_attr];
+"545 _param_constant83" [id=545, type=get_attr];
+"546 layer_norm_13" [id=546, type=layer_norm];
+"547 linear_26_updated_constant0" [id=547, type=get_attr];
+"548 layer_norm_13_0_0_nncf_smooth_quant_0" [id=548, type=call_module];
+"549 quantize_per_tensor_default_41" [id=549, type=quantize_per_tensor];
+"550 dequantize_per_tensor_default_41" [id=550, type=dequantize_per_tensor];
+"551 linear_26_scale_0" [id=551, type=get_attr];
+"552 linear_26_zero_point_0" [id=552, type=get_attr];
+"553 quantize_per_channel_default_27" [id=553, type=quantize_per_channel];
+"554 dequantize_per_channel_default_27" [id=554, type=dequantize_per_channel];
+"555 _param_constant85_0_0" [id=555, type=get_attr];
+"556 linear_26" [id=556, type=linear];
+"557 gelu_6" [id=557, type=gelu];
+"558 dropout_20" [id=558, type=dropout];
+"559 linear_27_updated_constant0" [id=559, type=get_attr];
+"560 dropout_20_0_0_nncf_smooth_quant_0" [id=560, type=call_module];
+"561 quantize_per_tensor_default_42" [id=561, type=quantize_per_tensor];
+"562 dequantize_per_tensor_default_42" [id=562, type=dequantize_per_tensor];
+"563 linear_27_scale_0" [id=563, type=get_attr];
+"564 linear_27_zero_point_0" [id=564, type=get_attr];
+"565 quantize_per_channel_default_28" [id=565, type=quantize_per_channel];
+"566 dequantize_per_channel_default_28" [id=566, type=dequantize_per_channel];
+"567 _param_constant87_0_0" [id=567, type=get_attr];
+"568 linear_27" [id=568, type=linear];
+"569 dropout_21" [id=569, type=dropout];
+"570 add_14" [id=570, type=add];
+"571 _param_constant88" [id=571, type=get_attr];
+"572 _param_constant89" [id=572, type=get_attr];
+"573 layer_norm_14" [id=573, type=layer_norm];
+"574 transpose_42" [id=574, type=transpose];
+"575 linear_28_updated_constant0" [id=575, type=get_attr];
+"576 transpose_42_0_0_nncf_smooth_quant_0" [id=576, type=call_module];
+"577 quantize_per_tensor_default_43" [id=577, type=quantize_per_tensor];
+"578 dequantize_per_tensor_default_43" [id=578, type=dequantize_per_tensor];
+"579 linear_28_scale_0" [id=579, type=get_attr];
+"580 linear_28_zero_point_0" [id=580, type=get_attr];
+"581 quantize_per_channel_default_29" [id=581, type=quantize_per_channel];
+"582 dequantize_per_channel_default_29" [id=582, type=dequantize_per_channel];
+"583 _param_constant91_0_0" [id=583, type=get_attr];
+"584 linear_28" [id=584, type=linear];
+"585 unflatten_7" [id=585, type=unflatten];
+"586 unsqueeze_7" [id=586, type=unsqueeze];
+"587 transpose_43" [id=587, type=transpose];
+"588 squeeze_7" [id=588, type=squeeze];
+"589 contiguous_7" [id=589, type=contiguous];
+"590 quantize_per_tensor_default_44" [id=590, type=quantize_per_tensor];
+"591 dequantize_per_tensor_default_44" [id=591, type=dequantize_per_tensor];
+"592 select_21" [id=592, type=select];
+"593 quantize_per_tensor_default_45" [id=593, type=quantize_per_tensor];
+"594 dequantize_per_tensor_default_45" [id=594, type=dequantize_per_tensor];
+"595 select_22" [id=595, type=select];
+"596 select_23" [id=596, type=select];
+"597 view_56" [id=597, type=view];
+"598 transpose_44" [id=598, type=transpose];
+"599 view_57" [id=599, type=view];
+"600 transpose_45" [id=600, type=transpose];
+"601 view_58" [id=601, type=view];
+"602 transpose_46" [id=602, type=transpose];
+"603 view_59" [id=603, type=view];
+"604 view_60" [id=604, type=view];
+"605 view_61" [id=605, type=view];
+"606 scaled_dot_product_attention_7" [id=606, type=scaled_dot_product_attention];
+"607 permute_8" [id=607, type=permute];
+"608 view_62" [id=608, type=view];
+"609 linear_29_updated_constant0" [id=609, type=get_attr];
+"610 view_62_0_0_nncf_smooth_quant_0" [id=610, type=call_module];
+"611 quantize_per_tensor_default_46" [id=611, type=quantize_per_tensor];
+"612 dequantize_per_tensor_default_46" [id=612, type=dequantize_per_tensor];
+"613 linear_29_scale_0" [id=613, type=get_attr];
+"614 linear_29_zero_point_0" [id=614, type=get_attr];
+"615 quantize_per_channel_default_30" [id=615, type=quantize_per_channel];
+"616 dequantize_per_channel_default_30" [id=616, type=dequantize_per_channel];
+"617 _param_constant93_0_0" [id=617, type=get_attr];
+"618 linear_29" [id=618, type=linear];
+"619 view_63" [id=619, type=view];
+"620 transpose_47" [id=620, type=transpose];
+"621 dropout_22" [id=621, type=dropout];
+"622 add_15" [id=622, type=add];
+"623 _param_constant94" [id=623, type=get_attr];
+"624 _param_constant95" [id=624, type=get_attr];
+"625 layer_norm_15" [id=625, type=layer_norm];
+"626 linear_30_updated_constant0" [id=626, type=get_attr];
+"627 layer_norm_15_0_0_nncf_smooth_quant_0" [id=627, type=call_module];
+"628 quantize_per_tensor_default_47" [id=628, type=quantize_per_tensor];
+"629 dequantize_per_tensor_default_47" [id=629, type=dequantize_per_tensor];
+"630 linear_30_scale_0" [id=630, type=get_attr];
+"631 linear_30_zero_point_0" [id=631, type=get_attr];
+"632 quantize_per_channel_default_31" [id=632, type=quantize_per_channel];
+"633 dequantize_per_channel_default_31" [id=633, type=dequantize_per_channel];
+"634 _param_constant97_0_0" [id=634, type=get_attr];
+"635 linear_30" [id=635, type=linear];
+"636 gelu_7" [id=636, type=gelu];
+"637 dropout_23" [id=637, type=dropout];
+"638 linear_31_updated_constant0" [id=638, type=get_attr];
+"639 dropout_23_0_0_nncf_smooth_quant_0" [id=639, type=call_module];
+"640 quantize_per_tensor_default_48" [id=640, type=quantize_per_tensor];
+"641 dequantize_per_tensor_default_48" [id=641, type=dequantize_per_tensor];
+"642 linear_31_scale_0" [id=642, type=get_attr];
+"643 linear_31_zero_point_0" [id=643, type=get_attr];
+"644 quantize_per_channel_default_32" [id=644, type=quantize_per_channel];
+"645 dequantize_per_channel_default_32" [id=645, type=dequantize_per_channel];
+"646 _param_constant99_0_0" [id=646, type=get_attr];
+"647 linear_31" [id=647, type=linear];
+"648 dropout_24" [id=648, type=dropout];
+"649 add_16" [id=649, type=add];
+"650 _param_constant100" [id=650, type=get_attr];
+"651 _param_constant101" [id=651, type=get_attr];
+"652 layer_norm_16" [id=652, type=layer_norm];
+"653 transpose_48" [id=653, type=transpose];
+"654 linear_32_updated_constant0" [id=654, type=get_attr];
+"655 transpose_48_0_0_nncf_smooth_quant_0" [id=655, type=call_module];
+"656 quantize_per_tensor_default_49" [id=656, type=quantize_per_tensor];
+"657 dequantize_per_tensor_default_49" [id=657, type=dequantize_per_tensor];
+"658 linear_32_scale_0" [id=658, type=get_attr];
+"659 linear_32_zero_point_0" [id=659, type=get_attr];
+"660 quantize_per_channel_default_33" [id=660, type=quantize_per_channel];
+"661 dequantize_per_channel_default_33" [id=661, type=dequantize_per_channel];
+"662 _param_constant103_0_0" [id=662, type=get_attr];
+"663 linear_32" [id=663, type=linear];
+"664 unflatten_8" [id=664, type=unflatten];
+"665 unsqueeze_8" [id=665, type=unsqueeze];
+"666 transpose_49" [id=666, type=transpose];
+"667 squeeze_8" [id=667, type=squeeze];
+"668 contiguous_8" [id=668, type=contiguous];
+"669 quantize_per_tensor_default_50" [id=669, type=quantize_per_tensor];
+"670 dequantize_per_tensor_default_50" [id=670, type=dequantize_per_tensor];
+"671 select_24" [id=671, type=select];
+"672 quantize_per_tensor_default_51" [id=672, type=quantize_per_tensor];
+"673 dequantize_per_tensor_default_51" [id=673, type=dequantize_per_tensor];
+"674 select_25" [id=674, type=select];
+"675 select_26" [id=675, type=select];
+"676 view_64" [id=676, type=view];
+"677 transpose_50" [id=677, type=transpose];
+"678 view_65" [id=678, type=view];
+"679 transpose_51" [id=679, type=transpose];
+"680 view_66" [id=680, type=view];
+"681 transpose_52" [id=681, type=transpose];
+"682 view_67" [id=682, type=view];
+"683 view_68" [id=683, type=view];
+"684 view_69" [id=684, type=view];
+"685 scaled_dot_product_attention_8" [id=685, type=scaled_dot_product_attention];
+"686 permute_9" [id=686, type=permute];
+"687 view_70" [id=687, type=view];
+"688 linear_33_updated_constant0" [id=688, type=get_attr];
+"689 view_70_0_0_nncf_smooth_quant_0" [id=689, type=call_module];
+"690 quantize_per_tensor_default_52" [id=690, type=quantize_per_tensor];
+"691 dequantize_per_tensor_default_52" [id=691, type=dequantize_per_tensor];
+"692 linear_33_scale_0" [id=692, type=get_attr];
+"693 linear_33_zero_point_0" [id=693, type=get_attr];
+"694 quantize_per_channel_default_34" [id=694, type=quantize_per_channel];
+"695 dequantize_per_channel_default_34" [id=695, type=dequantize_per_channel];
+"696 _param_constant105_0_0" [id=696, type=get_attr];
+"697 linear_33" [id=697, type=linear];
+"698 view_71" [id=698, type=view];
+"699 transpose_53" [id=699, type=transpose];
+"700 dropout_25" [id=700, type=dropout];
+"701 add_17" [id=701, type=add];
+"702 _param_constant106" [id=702, type=get_attr];
+"703 _param_constant107" [id=703, type=get_attr];
+"704 layer_norm_17" [id=704, type=layer_norm];
+"705 linear_34_updated_constant0" [id=705, type=get_attr];
+"706 layer_norm_17_0_0_nncf_smooth_quant_0" [id=706, type=call_module];
+"707 quantize_per_tensor_default_53" [id=707, type=quantize_per_tensor];
+"708 dequantize_per_tensor_default_53" [id=708, type=dequantize_per_tensor];
+"709 linear_34_scale_0" [id=709, type=get_attr];
+"710 linear_34_zero_point_0" [id=710, type=get_attr];
+"711 quantize_per_channel_default_35" [id=711, type=quantize_per_channel];
+"712 dequantize_per_channel_default_35" [id=712, type=dequantize_per_channel];
+"713 _param_constant109_0_0" [id=713, type=get_attr];
+"714 linear_34" [id=714, type=linear];
+"715 gelu_8" [id=715, type=gelu];
+"716 dropout_26" [id=716, type=dropout];
+"717 linear_35_updated_constant0" [id=717, type=get_attr];
+"718 dropout_26_0_0_nncf_smooth_quant_0" [id=718, type=call_module];
+"719 quantize_per_tensor_default_54" [id=719, type=quantize_per_tensor];
+"720 dequantize_per_tensor_default_54" [id=720, type=dequantize_per_tensor];
+"721 linear_35_scale_0" [id=721, type=get_attr];
+"722 linear_35_zero_point_0" [id=722, type=get_attr];
+"723 quantize_per_channel_default_36" [id=723, type=quantize_per_channel];
+"724 dequantize_per_channel_default_36" [id=724, type=dequantize_per_channel];
+"725 _param_constant111_0_0" [id=725, type=get_attr];
+"726 linear_35" [id=726, type=linear];
+"727 dropout_27" [id=727, type=dropout];
+"728 add_18" [id=728, type=add];
+"729 _param_constant112" [id=729, type=get_attr];
+"730 _param_constant113" [id=730, type=get_attr];
+"731 layer_norm_18" [id=731, type=layer_norm];
+"732 transpose_54" [id=732, type=transpose];
+"733 linear_36_updated_constant0" [id=733, type=get_attr];
+"734 transpose_54_0_0_nncf_smooth_quant_0" [id=734, type=call_module];
+"735 quantize_per_tensor_default_55" [id=735, type=quantize_per_tensor];
+"736 dequantize_per_tensor_default_55" [id=736, type=dequantize_per_tensor];
+"737 linear_36_scale_0" [id=737, type=get_attr];
+"738 linear_36_zero_point_0" [id=738, type=get_attr];
+"739 quantize_per_channel_default_37" [id=739, type=quantize_per_channel];
+"740 dequantize_per_channel_default_37" [id=740, type=dequantize_per_channel];
+"741 _param_constant115_0_0" [id=741, type=get_attr];
+"742 linear_36" [id=742, type=linear];
+"743 unflatten_9" [id=743, type=unflatten];
+"744 unsqueeze_9" [id=744, type=unsqueeze];
+"745 transpose_55" [id=745, type=transpose];
+"746 squeeze_9" [id=746, type=squeeze];
+"747 contiguous_9" [id=747, type=contiguous];
+"748 quantize_per_tensor_default_56" [id=748, type=quantize_per_tensor];
+"749 dequantize_per_tensor_default_56" [id=749, type=dequantize_per_tensor];
+"750 select_27" [id=750, type=select];
+"751 quantize_per_tensor_default_57" [id=751, type=quantize_per_tensor];
+"752 dequantize_per_tensor_default_57" [id=752, type=dequantize_per_tensor];
+"753 select_28" [id=753, type=select];
+"754 select_29" [id=754, type=select];
+"755 view_72" [id=755, type=view];
+"756 transpose_56" [id=756, type=transpose];
+"757 view_73" [id=757, type=view];
+"758 transpose_57" [id=758, type=transpose];
+"759 view_74" [id=759, type=view];
+"760 transpose_58" [id=760, type=transpose];
+"761 view_75" [id=761, type=view];
+"762 view_76" [id=762, type=view];
+"763 view_77" [id=763, type=view];
+"764 scaled_dot_product_attention_9" [id=764, type=scaled_dot_product_attention];
+"765 permute_10" [id=765, type=permute];
+"766 view_78" [id=766, type=view];
+"767 linear_37_updated_constant0" [id=767, type=get_attr];
+"768 view_78_0_0_nncf_smooth_quant_0" [id=768, type=call_module];
+"769 quantize_per_tensor_default_58" [id=769, type=quantize_per_tensor];
+"770 dequantize_per_tensor_default_58" [id=770, type=dequantize_per_tensor];
+"771 linear_37_scale_0" [id=771, type=get_attr];
+"772 linear_37_zero_point_0" [id=772, type=get_attr];
+"773 quantize_per_channel_default_38" [id=773, type=quantize_per_channel];
+"774 dequantize_per_channel_default_38" [id=774, type=dequantize_per_channel];
+"775 _param_constant117_0_0" [id=775, type=get_attr];
+"776 linear_37" [id=776, type=linear];
+"777 view_79" [id=777, type=view];
+"778 transpose_59" [id=778, type=transpose];
+"779 dropout_28" [id=779, type=dropout];
+"780 add_19" [id=780, type=add];
+"781 _param_constant118" [id=781, type=get_attr];
+"782 _param_constant119" [id=782, type=get_attr];
+"783 layer_norm_19" [id=783, type=layer_norm];
+"784 linear_38_updated_constant0" [id=784, type=get_attr];
+"785 layer_norm_19_0_0_nncf_smooth_quant_0" [id=785, type=call_module];
+"786 quantize_per_tensor_default_59" [id=786, type=quantize_per_tensor];
+"787 dequantize_per_tensor_default_59" [id=787, type=dequantize_per_tensor];
+"788 linear_38_scale_0" [id=788, type=get_attr];
+"789 linear_38_zero_point_0" [id=789, type=get_attr];
+"790 quantize_per_channel_default_39" [id=790, type=quantize_per_channel];
+"791 dequantize_per_channel_default_39" [id=791, type=dequantize_per_channel];
+"792 _param_constant121_0_0" [id=792, type=get_attr];
+"793 linear_38" [id=793, type=linear];
+"794 gelu_9" [id=794, type=gelu];
+"795 dropout_29" [id=795, type=dropout];
+"796 linear_39_updated_constant0" [id=796, type=get_attr];
+"797 dropout_29_0_0_nncf_smooth_quant_0" [id=797, type=call_module];
+"798 quantize_per_tensor_default_60" [id=798, type=quantize_per_tensor];
+"799 dequantize_per_tensor_default_60" [id=799, type=dequantize_per_tensor];
+"800 linear_39_scale_0" [id=800, type=get_attr];
+"801 linear_39_zero_point_0" [id=801, type=get_attr];
+"802 quantize_per_channel_default_40" [id=802, type=quantize_per_channel];
+"803 dequantize_per_channel_default_40" [id=803, type=dequantize_per_channel];
+"804 _param_constant123_0_0" [id=804, type=get_attr];
+"805 linear_39" [id=805, type=linear];
+"806 dropout_30" [id=806, type=dropout];
+"807 add_20" [id=807, type=add];
+"808 _param_constant124" [id=808, type=get_attr];
+"809 _param_constant125" [id=809, type=get_attr];
+"810 layer_norm_20" [id=810, type=layer_norm];
+"811 transpose_60" [id=811, type=transpose];
+"812 linear_40_updated_constant0" [id=812, type=get_attr];
+"813 transpose_60_0_0_nncf_smooth_quant_0" [id=813, type=call_module];
+"814 quantize_per_tensor_default_61" [id=814, type=quantize_per_tensor];
+"815 dequantize_per_tensor_default_61" [id=815, type=dequantize_per_tensor];
+"816 linear_40_scale_0" [id=816, type=get_attr];
+"817 linear_40_zero_point_0" [id=817, type=get_attr];
+"818 quantize_per_channel_default_41" [id=818, type=quantize_per_channel];
+"819 dequantize_per_channel_default_41" [id=819, type=dequantize_per_channel];
+"820 _param_constant127_0_0" [id=820, type=get_attr];
+"821 linear_40" [id=821, type=linear];
+"822 unflatten_10" [id=822, type=unflatten];
+"823 unsqueeze_10" [id=823, type=unsqueeze];
+"824 transpose_61" [id=824, type=transpose];
+"825 squeeze_10" [id=825, type=squeeze];
+"826 contiguous_10" [id=826, type=contiguous];
+"827 quantize_per_tensor_default_62" [id=827, type=quantize_per_tensor];
+"828 dequantize_per_tensor_default_62" [id=828, type=dequantize_per_tensor];
+"829 select_30" [id=829, type=select];
+"830 quantize_per_tensor_default_63" [id=830, type=quantize_per_tensor];
+"831 dequantize_per_tensor_default_63" [id=831, type=dequantize_per_tensor];
+"832 select_31" [id=832, type=select];
+"833 select_32" [id=833, type=select];
+"834 view_80" [id=834, type=view];
+"835 transpose_62" [id=835, type=transpose];
+"836 view_81" [id=836, type=view];
+"837 transpose_63" [id=837, type=transpose];
+"838 view_82" [id=838, type=view];
+"839 transpose_64" [id=839, type=transpose];
+"840 view_83" [id=840, type=view];
+"841 view_84" [id=841, type=view];
+"842 view_85" [id=842, type=view];
+"843 scaled_dot_product_attention_10" [id=843, type=scaled_dot_product_attention];
+"844 permute_11" [id=844, type=permute];
+"845 view_86" [id=845, type=view];
+"846 linear_41_updated_constant0" [id=846, type=get_attr];
+"847 view_86_0_0_nncf_smooth_quant_0" [id=847, type=call_module];
+"848 quantize_per_tensor_default_64" [id=848, type=quantize_per_tensor];
+"849 dequantize_per_tensor_default_64" [id=849, type=dequantize_per_tensor];
+"850 linear_41_scale_0" [id=850, type=get_attr];
+"851 linear_41_zero_point_0" [id=851, type=get_attr];
+"852 quantize_per_channel_default_42" [id=852, type=quantize_per_channel];
+"853 dequantize_per_channel_default_42" [id=853, type=dequantize_per_channel];
+"854 _param_constant129_0_0" [id=854, type=get_attr];
+"855 linear_41" [id=855, type=linear];
+"856 view_87" [id=856, type=view];
+"857 transpose_65" [id=857, type=transpose];
+"858 dropout_31" [id=858, type=dropout];
+"859 add_21" [id=859, type=add];
+"860 _param_constant130" [id=860, type=get_attr];
+"861 _param_constant131" [id=861, type=get_attr];
+"862 layer_norm_21" [id=862, type=layer_norm];
+"863 linear_42_updated_constant0" [id=863, type=get_attr];
+"864 layer_norm_21_0_0_nncf_smooth_quant_0" [id=864, type=call_module];
+"865 quantize_per_tensor_default_65" [id=865, type=quantize_per_tensor];
+"866 dequantize_per_tensor_default_65" [id=866, type=dequantize_per_tensor];
+"867 linear_42_scale_0" [id=867, type=get_attr];
+"868 linear_42_zero_point_0" [id=868, type=get_attr];
+"869 quantize_per_channel_default_43" [id=869, type=quantize_per_channel];
+"870 dequantize_per_channel_default_43" [id=870, type=dequantize_per_channel];
+"871 _param_constant133_0_0" [id=871, type=get_attr];
+"872 linear_42" [id=872, type=linear];
+"873 gelu_10" [id=873, type=gelu];
+"874 dropout_32" [id=874, type=dropout];
+"875 linear_43_updated_constant0" [id=875, type=get_attr];
+"876 dropout_32_0_0_nncf_smooth_quant_0" [id=876, type=call_module];
+"877 quantize_per_tensor_default_66" [id=877, type=quantize_per_tensor];
+"878 dequantize_per_tensor_default_66" [id=878, type=dequantize_per_tensor];
+"879 linear_43_scale_0" [id=879, type=get_attr];
+"880 linear_43_zero_point_0" [id=880, type=get_attr];
+"881 quantize_per_channel_default_44" [id=881, type=quantize_per_channel];
+"882 dequantize_per_channel_default_44" [id=882, type=dequantize_per_channel];
+"883 _param_constant135_0_0" [id=883, type=get_attr];
+"884 linear_43" [id=884, type=linear];
+"885 dropout_33" [id=885, type=dropout];
+"886 add_22" [id=886, type=add];
+"887 _param_constant136" [id=887, type=get_attr];
+"888 _param_constant137" [id=888, type=get_attr];
+"889 layer_norm_22" [id=889, type=layer_norm];
+"890 transpose_66" [id=890, type=transpose];
+"891 linear_44_updated_constant0" [id=891, type=get_attr];
+"892 transpose_66_0_0_nncf_smooth_quant_0" [id=892, type=call_module];
+"893 quantize_per_tensor_default_67" [id=893, type=quantize_per_tensor];
+"894 dequantize_per_tensor_default_67" [id=894, type=dequantize_per_tensor];
+"895 linear_44_scale_0" [id=895, type=get_attr];
+"896 linear_44_zero_point_0" [id=896, type=get_attr];
+"897 quantize_per_channel_default_45" [id=897, type=quantize_per_channel];
+"898 dequantize_per_channel_default_45" [id=898, type=dequantize_per_channel];
+"899 _param_constant139_0_0" [id=899, type=get_attr];
+"900 linear_44" [id=900, type=linear];
+"901 unflatten_11" [id=901, type=unflatten];
+"902 unsqueeze_11" [id=902, type=unsqueeze];
+"903 transpose_67" [id=903, type=transpose];
+"904 squeeze_11" [id=904, type=squeeze];
+"905 contiguous_11" [id=905, type=contiguous];
+"906 quantize_per_tensor_default_68" [id=906, type=quantize_per_tensor];
+"907 dequantize_per_tensor_default_68" [id=907, type=dequantize_per_tensor];
+"908 select_33" [id=908, type=select];
+"909 quantize_per_tensor_default_69" [id=909, type=quantize_per_tensor];
+"910 dequantize_per_tensor_default_69" [id=910, type=dequantize_per_tensor];
+"911 select_34" [id=911, type=select];
+"912 select_35" [id=912, type=select];
+"913 view_88" [id=913, type=view];
+"914 transpose_68" [id=914, type=transpose];
+"915 view_89" [id=915, type=view];
+"916 transpose_69" [id=916, type=transpose];
+"917 view_90" [id=917, type=view];
+"918 transpose_70" [id=918, type=transpose];
+"919 view_91" [id=919, type=view];
+"920 view_92" [id=920, type=view];
+"921 view_93" [id=921, type=view];
+"922 scaled_dot_product_attention_11" [id=922, type=scaled_dot_product_attention];
+"923 permute_12" [id=923, type=permute];
+"924 view_94" [id=924, type=view];
+"925 linear_45_updated_constant0" [id=925, type=get_attr];
+"926 view_94_0_0_nncf_smooth_quant_0" [id=926, type=call_module];
+"927 quantize_per_tensor_default_70" [id=927, type=quantize_per_tensor];
+"928 dequantize_per_tensor_default_70" [id=928, type=dequantize_per_tensor];
+"929 linear_45_scale_0" [id=929, type=get_attr];
+"930 linear_45_zero_point_0" [id=930, type=get_attr];
+"931 quantize_per_channel_default_46" [id=931, type=quantize_per_channel];
+"932 dequantize_per_channel_default_46" [id=932, type=dequantize_per_channel];
+"933 _param_constant141_0_0" [id=933, type=get_attr];
+"934 linear_45" [id=934, type=linear];
+"935 view_95" [id=935, type=view];
+"936 transpose_71" [id=936, type=transpose];
+"937 dropout_34" [id=937, type=dropout];
+"938 add_23" [id=938, type=add];
+"939 _param_constant142" [id=939, type=get_attr];
+"940 _param_constant143" [id=940, type=get_attr];
+"941 layer_norm_23" [id=941, type=layer_norm];
+"942 linear_46_updated_constant0" [id=942, type=get_attr];
+"943 layer_norm_23_0_0_nncf_smooth_quant_0" [id=943, type=call_module];
+"944 quantize_per_tensor_default_71" [id=944, type=quantize_per_tensor];
+"945 dequantize_per_tensor_default_71" [id=945, type=dequantize_per_tensor];
+"946 linear_46_scale_0" [id=946, type=get_attr];
+"947 linear_46_zero_point_0" [id=947, type=get_attr];
+"948 quantize_per_channel_default_47" [id=948, type=quantize_per_channel];
+"949 dequantize_per_channel_default_47" [id=949, type=dequantize_per_channel];
+"950 _param_constant145_0_0" [id=950, type=get_attr];
+"951 linear_46" [id=951, type=linear];
+"952 gelu_11" [id=952, type=gelu];
+"953 dropout_35" [id=953, type=dropout];
+"954 linear_47_updated_constant0" [id=954, type=get_attr];
+"955 dropout_35_0_0_nncf_smooth_quant_0" [id=955, type=call_module];
+"956 quantize_per_tensor_default_72" [id=956, type=quantize_per_tensor];
+"957 dequantize_per_tensor_default_72" [id=957, type=dequantize_per_tensor];
+"958 linear_47_scale_0" [id=958, type=get_attr];
+"959 linear_47_zero_point_0" [id=959, type=get_attr];
+"960 quantize_per_channel_default_48" [id=960, type=quantize_per_channel];
+"961 dequantize_per_channel_default_48" [id=961, type=dequantize_per_channel];
+"962 _param_constant147_0_0" [id=962, type=get_attr];
+"963 linear_47" [id=963, type=linear];
+"964 dropout_36" [id=964, type=dropout];
+"965 add_24" [id=965, type=add];
+"966 _param_constant148" [id=966, type=get_attr];
+"967 _param_constant149" [id=967, type=get_attr];
+"968 layer_norm_24" [id=968, type=layer_norm];
+"969 slice_1" [id=969, type=slice];
+"970 select_36" [id=970, type=select];
+"971 linear_48_updated_constant0" [id=971, type=get_attr];
+"972 select_36_0_0_nncf_smooth_quant_0" [id=972, type=call_module];
+"973 quantize_per_tensor_default_73" [id=973, type=quantize_per_tensor];
+"974 dequantize_per_tensor_default_73" [id=974, type=dequantize_per_tensor];
+"975 linear_48_scale_0" [id=975, type=get_attr];
+"976 linear_48_zero_point_0" [id=976, type=get_attr];
+"977 quantize_per_channel_default_49" [id=977, type=quantize_per_channel];
+"978 dequantize_per_channel_default_49" [id=978, type=dequantize_per_channel];
+"979 _param_constant151_0_0" [id=979, type=get_attr];
+"980 linear_48" [id=980, type=linear];
+"981 output" [id=981, type=output];
+"0 arg0_1" -> "1 quantize_per_tensor_default";
+"1 quantize_per_tensor_default" -> "2 dequantize_per_tensor_default";
+"2 dequantize_per_tensor_default" -> "9 conv2d";
+"3 _param_constant0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "6 quantize_per_channel_default";
+"4 conv2d_scale_0" -> "7 dequantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "6 quantize_per_channel_default";
+"5 conv2d_zero_point_0" -> "7 dequantize_per_channel_default";
+"6 quantize_per_channel_default" -> "7 dequantize_per_channel_default";
+"7 dequantize_per_channel_default" -> "9 conv2d";
+"8 _param_constant1_0_0" -> "9 conv2d";
+"9 conv2d" -> "10 reshape";
+"10 reshape" -> "11 permute";
+"11 permute" -> "14 cat";
+"12 _param_constant2" -> "13 expand";
+"13 expand" -> "14 cat";
+"14 cat" -> "16 add";
+"15 _param_constant3" -> "16 add";
+"16 add" -> "17 dropout";
+"17 dropout" -> "20 layer_norm";
+"17 dropout" -> "69 add_1";
+"18 _param_constant4" -> "20 layer_norm";
+"19 _param_constant5" -> "20 layer_norm";
+"20 layer_norm" -> "21 transpose";
+"21 transpose" -> "23 transpose_0_0_nncf_smooth_quant_0";
+"22 linear_updated_constant0" -> "28 quantize_per_channel_default_1";
+"23 transpose_0_0_nncf_smooth_quant_0" -> "24 quantize_per_tensor_default_1";
+"24 quantize_per_tensor_default_1" -> "25 dequantize_per_tensor_default_1";
+"25 dequantize_per_tensor_default_1" -> "31 linear";
+"26 linear_scale_0" -> "28 quantize_per_channel_default_1";
+"26 linear_scale_0" -> "29 dequantize_per_channel_default_1";
+"27 linear_zero_point_0" -> "28 quantize_per_channel_default_1";
+"27 linear_zero_point_0" -> "29 dequantize_per_channel_default_1";
+"28 quantize_per_channel_default_1" -> "29 dequantize_per_channel_default_1";
+"29 dequantize_per_channel_default_1" -> "31 linear";
+"30 _param_constant7_0_0" -> "31 linear";
+"31 linear" -> "32 unflatten";
+"32 unflatten" -> "33 unsqueeze";
+"33 unsqueeze" -> "34 transpose_1";
+"34 transpose_1" -> "35 squeeze";
+"35 squeeze" -> "36 contiguous";
+"36 contiguous" -> "37 quantize_per_tensor_default_2";
+"36 contiguous" -> "40 quantize_per_tensor_default_3";
+"36 contiguous" -> "43 select_2";
+"37 quantize_per_tensor_default_2" -> "38 dequantize_per_tensor_default_2";
+"38 dequantize_per_tensor_default_2" -> "39 select";
+"39 select" -> "44 view";
+"40 quantize_per_tensor_default_3" -> "41 dequantize_per_tensor_default_3";
+"41 dequantize_per_tensor_default_3" -> "42 select_1";
+"42 select_1" -> "46 view_1";
+"43 select_2" -> "48 view_2";
+"44 view" -> "45 transpose_2";
+"45 transpose_2" -> "50 view_3";
+"46 view_1" -> "47 transpose_3";
+"47 transpose_3" -> "51 view_4";
+"48 view_2" -> "49 transpose_4";
+"49 transpose_4" -> "52 view_5";
+"50 view_3" -> "53 scaled_dot_product_attention";
+"51 view_4" -> "53 scaled_dot_product_attention";
+"52 view_5" -> "53 scaled_dot_product_attention";
+"53 scaled_dot_product_attention" -> "54 permute_1";
+"54 permute_1" -> "55 view_6";
+"55 view_6" -> "57 view_6_0_0_nncf_smooth_quant_0";
+"56 linear_1_updated_constant0" -> "62 quantize_per_channel_default_2";
+"57 view_6_0_0_nncf_smooth_quant_0" -> "58 quantize_per_tensor_default_4";
+"58 quantize_per_tensor_default_4" -> "59 dequantize_per_tensor_default_4";
+"59 dequantize_per_tensor_default_4" -> "65 linear_1";
+"60 linear_1_scale_0" -> "62 quantize_per_channel_default_2";
+"60 linear_1_scale_0" -> "63 dequantize_per_channel_default_2";
+"61 linear_1_zero_point_0" -> "62 quantize_per_channel_default_2";
+"61 linear_1_zero_point_0" -> "63 dequantize_per_channel_default_2";
+"62 quantize_per_channel_default_2" -> "63 dequantize_per_channel_default_2";
+"63 dequantize_per_channel_default_2" -> "65 linear_1";
+"64 _param_constant9_0_0" -> "65 linear_1";
+"65 linear_1" -> "66 view_7";
+"66 view_7" -> "67 transpose_5";
+"67 transpose_5" -> "68 dropout_1";
+"68 dropout_1" -> "69 add_1";
+"69 add_1" -> "72 layer_norm_1";
+"69 add_1" -> "96 add_2";
+"70 _param_constant10" -> "72 layer_norm_1";
+"71 _param_constant11" -> "72 layer_norm_1";
+"72 layer_norm_1" -> "74 layer_norm_1_0_0_nncf_smooth_quant_0";
+"73 linear_2_updated_constant0" -> "79 quantize_per_channel_default_3";
+"74 layer_norm_1_0_0_nncf_smooth_quant_0" -> "75 quantize_per_tensor_default_5";
+"75 quantize_per_tensor_default_5" -> "76 dequantize_per_tensor_default_5";
+"76 dequantize_per_tensor_default_5" -> "82 linear_2";
+"77 linear_2_scale_0" -> "79 quantize_per_channel_default_3";
+"77 linear_2_scale_0" -> "80 dequantize_per_channel_default_3";
+"78 linear_2_zero_point_0" -> "79 quantize_per_channel_default_3";
+"78 linear_2_zero_point_0" -> "80 dequantize_per_channel_default_3";
+"79 quantize_per_channel_default_3" -> "80 dequantize_per_channel_default_3";
+"80 dequantize_per_channel_default_3" -> "82 linear_2";
+"81 _param_constant13_0_0" -> "82 linear_2";
+"82 linear_2" -> "83 gelu";
+"83 gelu" -> "84 dropout_2";
+"84 dropout_2" -> "86 dropout_2_0_0_nncf_smooth_quant_0";
+"85 linear_3_updated_constant0" -> "91 quantize_per_channel_default_4";
+"86 dropout_2_0_0_nncf_smooth_quant_0" -> "87 quantize_per_tensor_default_6";
+"87 quantize_per_tensor_default_6" -> "88 dequantize_per_tensor_default_6";
+"88 dequantize_per_tensor_default_6" -> "94 linear_3";
+"89 linear_3_scale_0" -> "91 quantize_per_channel_default_4";
+"89 linear_3_scale_0" -> "92 dequantize_per_channel_default_4";
+"90 linear_3_zero_point_0" -> "91 quantize_per_channel_default_4";
+"90 linear_3_zero_point_0" -> "92 dequantize_per_channel_default_4";
+"91 quantize_per_channel_default_4" -> "92 dequantize_per_channel_default_4";
+"92 dequantize_per_channel_default_4" -> "94 linear_3";
+"93 _param_constant15_0_0" -> "94 linear_3";
+"94 linear_3" -> "95 dropout_3";
+"95 dropout_3" -> "96 add_2";
+"96 add_2" -> "99 layer_norm_2";
+"96 add_2" -> "148 add_3";
+"97 _param_constant16" -> "99 layer_norm_2";
+"98 _param_constant17" -> "99 layer_norm_2";
+"99 layer_norm_2" -> "100 transpose_6";
+"100 transpose_6" -> "102 transpose_6_0_0_nncf_smooth_quant_0";
+"101 linear_4_updated_constant0" -> "107 quantize_per_channel_default_5";
+"102 transpose_6_0_0_nncf_smooth_quant_0" -> "103 quantize_per_tensor_default_7";
+"103 quantize_per_tensor_default_7" -> "104 dequantize_per_tensor_default_7";
+"104 dequantize_per_tensor_default_7" -> "110 linear_4";
+"105 linear_4_scale_0" -> "107 quantize_per_channel_default_5";
+"105 linear_4_scale_0" -> "108 dequantize_per_channel_default_5";
+"106 linear_4_zero_point_0" -> "107 quantize_per_channel_default_5";
+"106 linear_4_zero_point_0" -> "108 dequantize_per_channel_default_5";
+"107 quantize_per_channel_default_5" -> "108 dequantize_per_channel_default_5";
+"108 dequantize_per_channel_default_5" -> "110 linear_4";
+"109 _param_constant19_0_0" -> "110 linear_4";
+"110 linear_4" -> "111 unflatten_1";
+"111 unflatten_1" -> "112 unsqueeze_1";
+"112 unsqueeze_1" -> "113 transpose_7";
+"113 transpose_7" -> "114 squeeze_1";
+"114 squeeze_1" -> "115 contiguous_1";
+"115 contiguous_1" -> "116 quantize_per_tensor_default_8";
+"115 contiguous_1" -> "119 quantize_per_tensor_default_9";
+"115 contiguous_1" -> "122 select_5";
+"116 quantize_per_tensor_default_8" -> "117 dequantize_per_tensor_default_8";
+"117 dequantize_per_tensor_default_8" -> "118 select_3";
+"118 select_3" -> "123 view_8";
+"119 quantize_per_tensor_default_9" -> "120 dequantize_per_tensor_default_9";
+"120 dequantize_per_tensor_default_9" -> "121 select_4";
+"121 select_4" -> "125 view_9";
+"122 select_5" -> "127 view_10";
+"123 view_8" -> "124 transpose_8";
+"124 transpose_8" -> "129 view_11";
+"125 view_9" -> "126 transpose_9";
+"126 transpose_9" -> "130 view_12";
+"127 view_10" -> "128 transpose_10";
+"128 transpose_10" -> "131 view_13";
+"129 view_11" -> "132 scaled_dot_product_attention_1";
+"130 view_12" -> "132 scaled_dot_product_attention_1";
+"131 view_13" -> "132 scaled_dot_product_attention_1";
+"132 scaled_dot_product_attention_1" -> "133 permute_2";
+"133 permute_2" -> "134 view_14";
+"134 view_14" -> "136 view_14_0_0_nncf_smooth_quant_0";
+"135 linear_5_updated_constant0" -> "141 quantize_per_channel_default_6";
+"136 view_14_0_0_nncf_smooth_quant_0" -> "137 quantize_per_tensor_default_10";
+"137 quantize_per_tensor_default_10" -> "138 dequantize_per_tensor_default_10";
+"138 dequantize_per_tensor_default_10" -> "144 linear_5";
+"139 linear_5_scale_0" -> "141 quantize_per_channel_default_6";
+"139 linear_5_scale_0" -> "142 dequantize_per_channel_default_6";
+"140 linear_5_zero_point_0" -> "141 quantize_per_channel_default_6";
+"140 linear_5_zero_point_0" -> "142 dequantize_per_channel_default_6";
+"141 quantize_per_channel_default_6" -> "142 dequantize_per_channel_default_6";
+"142 dequantize_per_channel_default_6" -> "144 linear_5";
+"143 _param_constant21_0_0" -> "144 linear_5";
+"144 linear_5" -> "145 view_15";
+"145 view_15" -> "146 transpose_11";
+"146 transpose_11" -> "147 dropout_4";
+"147 dropout_4" -> "148 add_3";
+"148 add_3" -> "151 layer_norm_3";
+"148 add_3" -> "175 add_4";
+"149 _param_constant22" -> "151 layer_norm_3";
+"150 _param_constant23" -> "151 layer_norm_3";
+"151 layer_norm_3" -> "153 layer_norm_3_0_0_nncf_smooth_quant_0";
+"152 linear_6_updated_constant0" -> "158 quantize_per_channel_default_7";
+"153 layer_norm_3_0_0_nncf_smooth_quant_0" -> "154 quantize_per_tensor_default_11";
+"154 quantize_per_tensor_default_11" -> "155 dequantize_per_tensor_default_11";
+"155 dequantize_per_tensor_default_11" -> "161 linear_6";
+"156 linear_6_scale_0" -> "158 quantize_per_channel_default_7";
+"156 linear_6_scale_0" -> "159 dequantize_per_channel_default_7";
+"157 linear_6_zero_point_0" -> "158 quantize_per_channel_default_7";
+"157 linear_6_zero_point_0" -> "159 dequantize_per_channel_default_7";
+"158 quantize_per_channel_default_7" -> "159 dequantize_per_channel_default_7";
+"159 dequantize_per_channel_default_7" -> "161 linear_6";
+"160 _param_constant25_0_0" -> "161 linear_6";
+"161 linear_6" -> "162 gelu_1";
+"162 gelu_1" -> "163 dropout_5";
+"163 dropout_5" -> "165 dropout_5_0_0_nncf_smooth_quant_0";
+"164 linear_7_updated_constant0" -> "170 quantize_per_channel_default_8";
+"165 dropout_5_0_0_nncf_smooth_quant_0" -> "166 quantize_per_tensor_default_12";
+"166 quantize_per_tensor_default_12" -> "167 dequantize_per_tensor_default_12";
+"167 dequantize_per_tensor_default_12" -> "173 linear_7";
+"168 linear_7_scale_0" -> "170 quantize_per_channel_default_8";
+"168 linear_7_scale_0" -> "171 dequantize_per_channel_default_8";
+"169 linear_7_zero_point_0" -> "170 quantize_per_channel_default_8";
+"169 linear_7_zero_point_0" -> "171 dequantize_per_channel_default_8";
+"170 quantize_per_channel_default_8" -> "171 dequantize_per_channel_default_8";
+"171 dequantize_per_channel_default_8" -> "173 linear_7";
+"172 _param_constant27_0_0" -> "173 linear_7";
+"173 linear_7" -> "174 dropout_6";
+"174 dropout_6" -> "175 add_4";
+"175 add_4" -> "178 layer_norm_4";
+"175 add_4" -> "227 add_5";
+"176 _param_constant28" -> "178 layer_norm_4";
+"177 _param_constant29" -> "178 layer_norm_4";
+"178 layer_norm_4" -> "179 transpose_12";
+"179 transpose_12" -> "181 transpose_12_0_0_nncf_smooth_quant_0";
+"180 linear_8_updated_constant0" -> "186 quantize_per_channel_default_9";
+"181 transpose_12_0_0_nncf_smooth_quant_0" -> "182 quantize_per_tensor_default_13";
+"182 quantize_per_tensor_default_13" -> "183 dequantize_per_tensor_default_13";
+"183 dequantize_per_tensor_default_13" -> "189 linear_8";
+"184 linear_8_scale_0" -> "186 quantize_per_channel_default_9";
+"184 linear_8_scale_0" -> "187 dequantize_per_channel_default_9";
+"185 linear_8_zero_point_0" -> "186 quantize_per_channel_default_9";
+"185 linear_8_zero_point_0" -> "187 dequantize_per_channel_default_9";
+"186 quantize_per_channel_default_9" -> "187 dequantize_per_channel_default_9";
+"187 dequantize_per_channel_default_9" -> "189 linear_8";
+"188 _param_constant31_0_0" -> "189 linear_8";
+"189 linear_8" -> "190 unflatten_2";
+"190 unflatten_2" -> "191 unsqueeze_2";
+"191 unsqueeze_2" -> "192 transpose_13";
+"192 transpose_13" -> "193 squeeze_2";
+"193 squeeze_2" -> "194 contiguous_2";
+"194 contiguous_2" -> "195 quantize_per_tensor_default_14";
+"194 contiguous_2" -> "198 quantize_per_tensor_default_15";
+"194 contiguous_2" -> "201 select_8";
+"195 quantize_per_tensor_default_14" -> "196 dequantize_per_tensor_default_14";
+"196 dequantize_per_tensor_default_14" -> "197 select_6";
+"197 select_6" -> "202 view_16";
+"198 quantize_per_tensor_default_15" -> "199 dequantize_per_tensor_default_15";
+"199 dequantize_per_tensor_default_15" -> "200 select_7";
+"200 select_7" -> "204 view_17";
+"201 select_8" -> "206 view_18";
+"202 view_16" -> "203 transpose_14";
+"203 transpose_14" -> "208 view_19";
+"204 view_17" -> "205 transpose_15";
+"205 transpose_15" -> "209 view_20";
+"206 view_18" -> "207 transpose_16";
+"207 transpose_16" -> "210 view_21";
+"208 view_19" -> "211 scaled_dot_product_attention_2";
+"209 view_20" -> "211 scaled_dot_product_attention_2";
+"210 view_21" -> "211 scaled_dot_product_attention_2";
+"211 scaled_dot_product_attention_2" -> "212 permute_3";
+"212 permute_3" -> "213 view_22";
+"213 view_22" -> "215 view_22_0_0_nncf_smooth_quant_0";
+"214 linear_9_updated_constant0" -> "220 quantize_per_channel_default_10";
+"215 view_22_0_0_nncf_smooth_quant_0" -> "216 quantize_per_tensor_default_16";
+"216 quantize_per_tensor_default_16" -> "217 dequantize_per_tensor_default_16";
+"217 dequantize_per_tensor_default_16" -> "223 linear_9";
+"218 linear_9_scale_0" -> "220 quantize_per_channel_default_10";
+"218 linear_9_scale_0" -> "221 dequantize_per_channel_default_10";
+"219 linear_9_zero_point_0" -> "220 quantize_per_channel_default_10";
+"219 linear_9_zero_point_0" -> "221 dequantize_per_channel_default_10";
+"220 quantize_per_channel_default_10" -> "221 dequantize_per_channel_default_10";
+"221 dequantize_per_channel_default_10" -> "223 linear_9";
+"222 _param_constant33_0_0" -> "223 linear_9";
+"223 linear_9" -> "224 view_23";
+"224 view_23" -> "225 transpose_17";
+"225 transpose_17" -> "226 dropout_7";
+"226 dropout_7" -> "227 add_5";
+"227 add_5" -> "230 layer_norm_5";
+"227 add_5" -> "254 add_6";
+"228 _param_constant34" -> "230 layer_norm_5";
+"229 _param_constant35" -> "230 layer_norm_5";
+"230 layer_norm_5" -> "232 layer_norm_5_0_0_nncf_smooth_quant_0";
+"231 linear_10_updated_constant0" -> "237 quantize_per_channel_default_11";
+"232 layer_norm_5_0_0_nncf_smooth_quant_0" -> "233 quantize_per_tensor_default_17";
+"233 quantize_per_tensor_default_17" -> "234 dequantize_per_tensor_default_17";
+"234 dequantize_per_tensor_default_17" -> "240 linear_10";
+"235 linear_10_scale_0" -> "237 quantize_per_channel_default_11";
+"235 linear_10_scale_0" -> "238 dequantize_per_channel_default_11";
+"236 linear_10_zero_point_0" -> "237 quantize_per_channel_default_11";
+"236 linear_10_zero_point_0" -> "238 dequantize_per_channel_default_11";
+"237 quantize_per_channel_default_11" -> "238 dequantize_per_channel_default_11";
+"238 dequantize_per_channel_default_11" -> "240 linear_10";
+"239 _param_constant37_0_0" -> "240 linear_10";
+"240 linear_10" -> "241 gelu_2";
+"241 gelu_2" -> "242 dropout_8";
+"242 dropout_8" -> "244 dropout_8_0_0_nncf_smooth_quant_0";
+"243 linear_11_updated_constant0" -> "249 quantize_per_channel_default_12";
+"244 dropout_8_0_0_nncf_smooth_quant_0" -> "245 quantize_per_tensor_default_18";
+"245 quantize_per_tensor_default_18" -> "246 dequantize_per_tensor_default_18";
+"246 dequantize_per_tensor_default_18" -> "252 linear_11";
+"247 linear_11_scale_0" -> "249 quantize_per_channel_default_12";
+"247 linear_11_scale_0" -> "250 dequantize_per_channel_default_12";
+"248 linear_11_zero_point_0" -> "249 quantize_per_channel_default_12";
+"248 linear_11_zero_point_0" -> "250 dequantize_per_channel_default_12";
+"249 quantize_per_channel_default_12" -> "250 dequantize_per_channel_default_12";
+"250 dequantize_per_channel_default_12" -> "252 linear_11";
+"251 _param_constant39_0_0" -> "252 linear_11";
+"252 linear_11" -> "253 dropout_9";
+"253 dropout_9" -> "254 add_6";
+"254 add_6" -> "257 layer_norm_6";
+"254 add_6" -> "306 add_7";
+"255 _param_constant40" -> "257 layer_norm_6";
+"256 _param_constant41" -> "257 layer_norm_6";
+"257 layer_norm_6" -> "258 transpose_18";
+"258 transpose_18" -> "260 transpose_18_0_0_nncf_smooth_quant_0";
+"259 linear_12_updated_constant0" -> "265 quantize_per_channel_default_13";
+"260 transpose_18_0_0_nncf_smooth_quant_0" -> "261 quantize_per_tensor_default_19";
+"261 quantize_per_tensor_default_19" -> "262 dequantize_per_tensor_default_19";
+"262 dequantize_per_tensor_default_19" -> "268 linear_12";
+"263 linear_12_scale_0" -> "265 quantize_per_channel_default_13";
+"263 linear_12_scale_0" -> "266 dequantize_per_channel_default_13";
+"264 linear_12_zero_point_0" -> "265 quantize_per_channel_default_13";
+"264 linear_12_zero_point_0" -> "266 dequantize_per_channel_default_13";
+"265 quantize_per_channel_default_13" -> "266 dequantize_per_channel_default_13";
+"266 dequantize_per_channel_default_13" -> "268 linear_12";
+"267 _param_constant43_0_0" -> "268 linear_12";
+"268 linear_12" -> "269 unflatten_3";
+"269 unflatten_3" -> "270 unsqueeze_3";
+"270 unsqueeze_3" -> "271 transpose_19";
+"271 transpose_19" -> "272 squeeze_3";
+"272 squeeze_3" -> "273 contiguous_3";
+"273 contiguous_3" -> "274 quantize_per_tensor_default_20";
+"273 contiguous_3" -> "277 quantize_per_tensor_default_21";
+"273 contiguous_3" -> "280 select_11";
+"274 quantize_per_tensor_default_20" -> "275 dequantize_per_tensor_default_20";
+"275 dequantize_per_tensor_default_20" -> "276 select_9";
+"276 select_9" -> "281 view_24";
+"277 quantize_per_tensor_default_21" -> "278 dequantize_per_tensor_default_21";
+"278 dequantize_per_tensor_default_21" -> "279 select_10";
+"279 select_10" -> "283 view_25";
+"280 select_11" -> "285 view_26";
+"281 view_24" -> "282 transpose_20";
+"282 transpose_20" -> "287 view_27";
+"283 view_25" -> "284 transpose_21";
+"284 transpose_21" -> "288 view_28";
+"285 view_26" -> "286 transpose_22";
+"286 transpose_22" -> "289 view_29";
+"287 view_27" -> "290 scaled_dot_product_attention_3";
+"288 view_28" -> "290 scaled_dot_product_attention_3";
+"289 view_29" -> "290 scaled_dot_product_attention_3";
+"290 scaled_dot_product_attention_3" -> "291 permute_4";
+"291 permute_4" -> "292 view_30";
+"292 view_30" -> "294 view_30_0_0_nncf_smooth_quant_0";
+"293 linear_13_updated_constant0" -> "299 quantize_per_channel_default_14";
+"294 view_30_0_0_nncf_smooth_quant_0" -> "295 quantize_per_tensor_default_22";
+"295 quantize_per_tensor_default_22" -> "296 dequantize_per_tensor_default_22";
+"296 dequantize_per_tensor_default_22" -> "302 linear_13";
+"297 linear_13_scale_0" -> "299 quantize_per_channel_default_14";
+"297 linear_13_scale_0" -> "300 dequantize_per_channel_default_14";
+"298 linear_13_zero_point_0" -> "299 quantize_per_channel_default_14";
+"298 linear_13_zero_point_0" -> "300 dequantize_per_channel_default_14";
+"299 quantize_per_channel_default_14" -> "300 dequantize_per_channel_default_14";
+"300 dequantize_per_channel_default_14" -> "302 linear_13";
+"301 _param_constant45_0_0" -> "302 linear_13";
+"302 linear_13" -> "303 view_31";
+"303 view_31" -> "304 transpose_23";
+"304 transpose_23" -> "305 dropout_10";
+"305 dropout_10" -> "306 add_7";
+"306 add_7" -> "309 layer_norm_7";
+"306 add_7" -> "333 add_8";
+"307 _param_constant46" -> "309 layer_norm_7";
+"308 _param_constant47" -> "309 layer_norm_7";
+"309 layer_norm_7" -> "311 layer_norm_7_0_0_nncf_smooth_quant_0";
+"310 linear_14_updated_constant0" -> "316 quantize_per_channel_default_15";
+"311 layer_norm_7_0_0_nncf_smooth_quant_0" -> "312 quantize_per_tensor_default_23";
+"312 quantize_per_tensor_default_23" -> "313 dequantize_per_tensor_default_23";
+"313 dequantize_per_tensor_default_23" -> "319 linear_14";
+"314 linear_14_scale_0" -> "316 quantize_per_channel_default_15";
+"314 linear_14_scale_0" -> "317 dequantize_per_channel_default_15";
+"315 linear_14_zero_point_0" -> "316 quantize_per_channel_default_15";
+"315 linear_14_zero_point_0" -> "317 dequantize_per_channel_default_15";
+"316 quantize_per_channel_default_15" -> "317 dequantize_per_channel_default_15";
+"317 dequantize_per_channel_default_15" -> "319 linear_14";
+"318 _param_constant49_0_0" -> "319 linear_14";
+"319 linear_14" -> "320 gelu_3";
+"320 gelu_3" -> "321 dropout_11";
+"321 dropout_11" -> "323 dropout_11_0_0_nncf_smooth_quant_0";
+"322 linear_15_updated_constant0" -> "328 quantize_per_channel_default_16";
+"323 dropout_11_0_0_nncf_smooth_quant_0" -> "324 quantize_per_tensor_default_24";
+"324 quantize_per_tensor_default_24" -> "325 dequantize_per_tensor_default_24";
+"325 dequantize_per_tensor_default_24" -> "331 linear_15";
+"326 linear_15_scale_0" -> "328 quantize_per_channel_default_16";
+"326 linear_15_scale_0" -> "329 dequantize_per_channel_default_16";
+"327 linear_15_zero_point_0" -> "328 quantize_per_channel_default_16";
+"327 linear_15_zero_point_0" -> "329 dequantize_per_channel_default_16";
+"328 quantize_per_channel_default_16" -> "329 dequantize_per_channel_default_16";
+"329 dequantize_per_channel_default_16" -> "331 linear_15";
+"330 _param_constant51_0_0" -> "331 linear_15";
+"331 linear_15" -> "332 dropout_12";
+"332 dropout_12" -> "333 add_8";
+"333 add_8" -> "336 layer_norm_8";
+"333 add_8" -> "385 add_9";
+"334 _param_constant52" -> "336 layer_norm_8";
+"335 _param_constant53" -> "336 layer_norm_8";
+"336 layer_norm_8" -> "337 transpose_24";
+"337 transpose_24" -> "339 transpose_24_0_0_nncf_smooth_quant_0";
+"338 linear_16_updated_constant0" -> "344 quantize_per_channel_default_17";
+"339 transpose_24_0_0_nncf_smooth_quant_0" -> "340 quantize_per_tensor_default_25";
+"340 quantize_per_tensor_default_25" -> "341 dequantize_per_tensor_default_25";
+"341 dequantize_per_tensor_default_25" -> "347 linear_16";
+"342 linear_16_scale_0" -> "344 quantize_per_channel_default_17";
+"342 linear_16_scale_0" -> "345 dequantize_per_channel_default_17";
+"343 linear_16_zero_point_0" -> "344 quantize_per_channel_default_17";
+"343 linear_16_zero_point_0" -> "345 dequantize_per_channel_default_17";
+"344 quantize_per_channel_default_17" -> "345 dequantize_per_channel_default_17";
+"345 dequantize_per_channel_default_17" -> "347 linear_16";
+"346 _param_constant55_0_0" -> "347 linear_16";
+"347 linear_16" -> "348 unflatten_4";
+"348 unflatten_4" -> "349 unsqueeze_4";
+"349 unsqueeze_4" -> "350 transpose_25";
+"350 transpose_25" -> "351 squeeze_4";
+"351 squeeze_4" -> "352 contiguous_4";
+"352 contiguous_4" -> "353 quantize_per_tensor_default_26";
+"352 contiguous_4" -> "356 quantize_per_tensor_default_27";
+"352 contiguous_4" -> "359 select_14";
+"353 quantize_per_tensor_default_26" -> "354 dequantize_per_tensor_default_26";
+"354 dequantize_per_tensor_default_26" -> "355 select_12";
+"355 select_12" -> "360 view_32";
+"356 quantize_per_tensor_default_27" -> "357 dequantize_per_tensor_default_27";
+"357 dequantize_per_tensor_default_27" -> "358 select_13";
+"358 select_13" -> "362 view_33";
+"359 select_14" -> "364 view_34";
+"360 view_32" -> "361 transpose_26";
+"361 transpose_26" -> "366 view_35";
+"362 view_33" -> "363 transpose_27";
+"363 transpose_27" -> "367 view_36";
+"364 view_34" -> "365 transpose_28";
+"365 transpose_28" -> "368 view_37";
+"366 view_35" -> "369 scaled_dot_product_attention_4";
+"367 view_36" -> "369 scaled_dot_product_attention_4";
+"368 view_37" -> "369 scaled_dot_product_attention_4";
+"369 scaled_dot_product_attention_4" -> "370 permute_5";
+"370 permute_5" -> "371 view_38";
+"371 view_38" -> "373 view_38_0_0_nncf_smooth_quant_0";
+"372 linear_17_updated_constant0" -> "378 quantize_per_channel_default_18";
+"373 view_38_0_0_nncf_smooth_quant_0" -> "374 quantize_per_tensor_default_28";
+"374 quantize_per_tensor_default_28" -> "375 dequantize_per_tensor_default_28";
+"375 dequantize_per_tensor_default_28" -> "381 linear_17";
+"376 linear_17_scale_0" -> "378 quantize_per_channel_default_18";
+"376 linear_17_scale_0" -> "379 dequantize_per_channel_default_18";
+"377 linear_17_zero_point_0" -> "378 quantize_per_channel_default_18";
+"377 linear_17_zero_point_0" -> "379 dequantize_per_channel_default_18";
+"378 quantize_per_channel_default_18" -> "379 dequantize_per_channel_default_18";
+"379 dequantize_per_channel_default_18" -> "381 linear_17";
+"380 _param_constant57_0_0" -> "381 linear_17";
+"381 linear_17" -> "382 view_39";
+"382 view_39" -> "383 transpose_29";
+"383 transpose_29" -> "384 dropout_13";
+"384 dropout_13" -> "385 add_9";
+"385 add_9" -> "388 layer_norm_9";
+"385 add_9" -> "412 add_10";
+"386 _param_constant58" -> "388 layer_norm_9";
+"387 _param_constant59" -> "388 layer_norm_9";
+"388 layer_norm_9" -> "390 layer_norm_9_0_0_nncf_smooth_quant_0";
+"389 linear_18_updated_constant0" -> "395 quantize_per_channel_default_19";
+"390 layer_norm_9_0_0_nncf_smooth_quant_0" -> "391 quantize_per_tensor_default_29";
+"391 quantize_per_tensor_default_29" -> "392 dequantize_per_tensor_default_29";
+"392 dequantize_per_tensor_default_29" -> "398 linear_18";
+"393 linear_18_scale_0" -> "395 quantize_per_channel_default_19";
+"393 linear_18_scale_0" -> "396 dequantize_per_channel_default_19";
+"394 linear_18_zero_point_0" -> "395 quantize_per_channel_default_19";
+"394 linear_18_zero_point_0" -> "396 dequantize_per_channel_default_19";
+"395 quantize_per_channel_default_19" -> "396 dequantize_per_channel_default_19";
+"396 dequantize_per_channel_default_19" -> "398 linear_18";
+"397 _param_constant61_0_0" -> "398 linear_18";
+"398 linear_18" -> "399 gelu_4";
+"399 gelu_4" -> "400 dropout_14";
+"400 dropout_14" -> "402 dropout_14_0_0_nncf_smooth_quant_0";
+"401 linear_19_updated_constant0" -> "407 quantize_per_channel_default_20";
+"402 dropout_14_0_0_nncf_smooth_quant_0" -> "403 quantize_per_tensor_default_30";
+"403 quantize_per_tensor_default_30" -> "404 dequantize_per_tensor_default_30";
+"404 dequantize_per_tensor_default_30" -> "410 linear_19";
+"405 linear_19_scale_0" -> "407 quantize_per_channel_default_20";
+"405 linear_19_scale_0" -> "408 dequantize_per_channel_default_20";
+"406 linear_19_zero_point_0" -> "407 quantize_per_channel_default_20";
+"406 linear_19_zero_point_0" -> "408 dequantize_per_channel_default_20";
+"407 quantize_per_channel_default_20" -> "408 dequantize_per_channel_default_20";
+"408 dequantize_per_channel_default_20" -> "410 linear_19";
+"409 _param_constant63_0_0" -> "410 linear_19";
+"410 linear_19" -> "411 dropout_15";
+"411 dropout_15" -> "412 add_10";
+"412 add_10" -> "415 layer_norm_10";
+"412 add_10" -> "464 add_11";
+"413 _param_constant64" -> "415 layer_norm_10";
+"414 _param_constant65" -> "415 layer_norm_10";
+"415 layer_norm_10" -> "416 transpose_30";
+"416 transpose_30" -> "418 transpose_30_0_0_nncf_smooth_quant_0";
+"417 linear_20_updated_constant0" -> "423 quantize_per_channel_default_21";
+"418 transpose_30_0_0_nncf_smooth_quant_0" -> "419 quantize_per_tensor_default_31";
+"419 quantize_per_tensor_default_31" -> "420 dequantize_per_tensor_default_31";
+"420 dequantize_per_tensor_default_31" -> "426 linear_20";
+"421 linear_20_scale_0" -> "423 quantize_per_channel_default_21";
+"421 linear_20_scale_0" -> "424 dequantize_per_channel_default_21";
+"422 linear_20_zero_point_0" -> "423 quantize_per_channel_default_21";
+"422 linear_20_zero_point_0" -> "424 dequantize_per_channel_default_21";
+"423 quantize_per_channel_default_21" -> "424 dequantize_per_channel_default_21";
+"424 dequantize_per_channel_default_21" -> "426 linear_20";
+"425 _param_constant67_0_0" -> "426 linear_20";
+"426 linear_20" -> "427 unflatten_5";
+"427 unflatten_5" -> "428 unsqueeze_5";
+"428 unsqueeze_5" -> "429 transpose_31";
+"429 transpose_31" -> "430 squeeze_5";
+"430 squeeze_5" -> "431 contiguous_5";
+"431 contiguous_5" -> "432 quantize_per_tensor_default_32";
+"431 contiguous_5" -> "435 quantize_per_tensor_default_33";
+"431 contiguous_5" -> "438 select_17";
+"432 quantize_per_tensor_default_32" -> "433 dequantize_per_tensor_default_32";
+"433 dequantize_per_tensor_default_32" -> "434 select_15";
+"434 select_15" -> "439 view_40";
+"435 quantize_per_tensor_default_33" -> "436 dequantize_per_tensor_default_33";
+"436 dequantize_per_tensor_default_33" -> "437 select_16";
+"437 select_16" -> "441 view_41";
+"438 select_17" -> "443 view_42";
+"439 view_40" -> "440 transpose_32";
+"440 transpose_32" -> "445 view_43";
+"441 view_41" -> "442 transpose_33";
+"442 transpose_33" -> "446 view_44";
+"443 view_42" -> "444 transpose_34";
+"444 transpose_34" -> "447 view_45";
+"445 view_43" -> "448 scaled_dot_product_attention_5";
+"446 view_44" -> "448 scaled_dot_product_attention_5";
+"447 view_45" -> "448 scaled_dot_product_attention_5";
+"448 scaled_dot_product_attention_5" -> "449 permute_6";
+"449 permute_6" -> "450 view_46";
+"450 view_46" -> "452 view_46_0_0_nncf_smooth_quant_0";
+"451 linear_21_updated_constant0" -> "457 quantize_per_channel_default_22";
+"452 view_46_0_0_nncf_smooth_quant_0" -> "453 quantize_per_tensor_default_34";
+"453 quantize_per_tensor_default_34" -> "454 dequantize_per_tensor_default_34";
+"454 dequantize_per_tensor_default_34" -> "460 linear_21";
+"455 linear_21_scale_0" -> "457 quantize_per_channel_default_22";
+"455 linear_21_scale_0" -> "458 dequantize_per_channel_default_22";
+"456 linear_21_zero_point_0" -> "457 quantize_per_channel_default_22";
+"456 linear_21_zero_point_0" -> "458 dequantize_per_channel_default_22";
+"457 quantize_per_channel_default_22" -> "458 dequantize_per_channel_default_22";
+"458 dequantize_per_channel_default_22" -> "460 linear_21";
+"459 _param_constant69_0_0" -> "460 linear_21";
+"460 linear_21" -> "461 view_47";
+"461 view_47" -> "462 transpose_35";
+"462 transpose_35" -> "463 dropout_16";
+"463 dropout_16" -> "464 add_11";
+"464 add_11" -> "467 layer_norm_11";
+"464 add_11" -> "491 add_12";
+"465 _param_constant70" -> "467 layer_norm_11";
+"466 _param_constant71" -> "467 layer_norm_11";
+"467 layer_norm_11" -> "469 layer_norm_11_0_0_nncf_smooth_quant_0";
+"468 linear_22_updated_constant0" -> "474 quantize_per_channel_default_23";
+"469 layer_norm_11_0_0_nncf_smooth_quant_0" -> "470 quantize_per_tensor_default_35";
+"470 quantize_per_tensor_default_35" -> "471 dequantize_per_tensor_default_35";
+"471 dequantize_per_tensor_default_35" -> "477 linear_22";
+"472 linear_22_scale_0" -> "474 quantize_per_channel_default_23";
+"472 linear_22_scale_0" -> "475 dequantize_per_channel_default_23";
+"473 linear_22_zero_point_0" -> "474 quantize_per_channel_default_23";
+"473 linear_22_zero_point_0" -> "475 dequantize_per_channel_default_23";
+"474 quantize_per_channel_default_23" -> "475 dequantize_per_channel_default_23";
+"475 dequantize_per_channel_default_23" -> "477 linear_22";
+"476 _param_constant73_0_0" -> "477 linear_22";
+"477 linear_22" -> "478 gelu_5";
+"478 gelu_5" -> "479 dropout_17";
+"479 dropout_17" -> "481 dropout_17_0_0_nncf_smooth_quant_0";
+"480 linear_23_updated_constant0" -> "486 quantize_per_channel_default_24";
+"481 dropout_17_0_0_nncf_smooth_quant_0" -> "482 quantize_per_tensor_default_36";
+"482 quantize_per_tensor_default_36" -> "483 dequantize_per_tensor_default_36";
+"483 dequantize_per_tensor_default_36" -> "489 linear_23";
+"484 linear_23_scale_0" -> "486 quantize_per_channel_default_24";
+"484 linear_23_scale_0" -> "487 dequantize_per_channel_default_24";
+"485 linear_23_zero_point_0" -> "486 quantize_per_channel_default_24";
+"485 linear_23_zero_point_0" -> "487 dequantize_per_channel_default_24";
+"486 quantize_per_channel_default_24" -> "487 dequantize_per_channel_default_24";
+"487 dequantize_per_channel_default_24" -> "489 linear_23";
+"488 _param_constant75_0_0" -> "489 linear_23";
+"489 linear_23" -> "490 dropout_18";
+"490 dropout_18" -> "491 add_12";
+"491 add_12" -> "494 layer_norm_12";
+"491 add_12" -> "543 add_13";
+"492 _param_constant76" -> "494 layer_norm_12";
+"493 _param_constant77" -> "494 layer_norm_12";
+"494 layer_norm_12" -> "495 transpose_36";
+"495 transpose_36" -> "497 transpose_36_0_0_nncf_smooth_quant_0";
+"496 linear_24_updated_constant0" -> "502 quantize_per_channel_default_25";
+"497 transpose_36_0_0_nncf_smooth_quant_0" -> "498 quantize_per_tensor_default_37";
+"498 quantize_per_tensor_default_37" -> "499 dequantize_per_tensor_default_37";
+"499 dequantize_per_tensor_default_37" -> "505 linear_24";
+"500 linear_24_scale_0" -> "502 quantize_per_channel_default_25";
+"500 linear_24_scale_0" -> "503 dequantize_per_channel_default_25";
+"501 linear_24_zero_point_0" -> "502 quantize_per_channel_default_25";
+"501 linear_24_zero_point_0" -> "503 dequantize_per_channel_default_25";
+"502 quantize_per_channel_default_25" -> "503 dequantize_per_channel_default_25";
+"503 dequantize_per_channel_default_25" -> "505 linear_24";
+"504 _param_constant79_0_0" -> "505 linear_24";
+"505 linear_24" -> "506 unflatten_6";
+"506 unflatten_6" -> "507 unsqueeze_6";
+"507 unsqueeze_6" -> "508 transpose_37";
+"508 transpose_37" -> "509 squeeze_6";
+"509 squeeze_6" -> "510 contiguous_6";
+"510 contiguous_6" -> "511 quantize_per_tensor_default_38";
+"510 contiguous_6" -> "514 quantize_per_tensor_default_39";
+"510 contiguous_6" -> "517 select_20";
+"511 quantize_per_tensor_default_38" -> "512 dequantize_per_tensor_default_38";
+"512 dequantize_per_tensor_default_38" -> "513 select_18";
+"513 select_18" -> "518 view_48";
+"514 quantize_per_tensor_default_39" -> "515 dequantize_per_tensor_default_39";
+"515 dequantize_per_tensor_default_39" -> "516 select_19";
+"516 select_19" -> "520 view_49";
+"517 select_20" -> "522 view_50";
+"518 view_48" -> "519 transpose_38";
+"519 transpose_38" -> "524 view_51";
+"520 view_49" -> "521 transpose_39";
+"521 transpose_39" -> "525 view_52";
+"522 view_50" -> "523 transpose_40";
+"523 transpose_40" -> "526 view_53";
+"524 view_51" -> "527 scaled_dot_product_attention_6";
+"525 view_52" -> "527 scaled_dot_product_attention_6";
+"526 view_53" -> "527 scaled_dot_product_attention_6";
+"527 scaled_dot_product_attention_6" -> "528 permute_7";
+"528 permute_7" -> "529 view_54";
+"529 view_54" -> "531 view_54_0_0_nncf_smooth_quant_0";
+"530 linear_25_updated_constant0" -> "536 quantize_per_channel_default_26";
+"531 view_54_0_0_nncf_smooth_quant_0" -> "532 quantize_per_tensor_default_40";
+"532 quantize_per_tensor_default_40" -> "533 dequantize_per_tensor_default_40";
+"533 dequantize_per_tensor_default_40" -> "539 linear_25";
+"534 linear_25_scale_0" -> "536 quantize_per_channel_default_26";
+"534 linear_25_scale_0" -> "537 dequantize_per_channel_default_26";
+"535 linear_25_zero_point_0" -> "536 quantize_per_channel_default_26";
+"535 linear_25_zero_point_0" -> "537 dequantize_per_channel_default_26";
+"536 quantize_per_channel_default_26" -> "537 dequantize_per_channel_default_26";
+"537 dequantize_per_channel_default_26" -> "539 linear_25";
+"538 _param_constant81_0_0" -> "539 linear_25";
+"539 linear_25" -> "540 view_55";
+"540 view_55" -> "541 transpose_41";
+"541 transpose_41" -> "542 dropout_19";
+"542 dropout_19" -> "543 add_13";
+"543 add_13" -> "546 layer_norm_13";
+"543 add_13" -> "570 add_14";
+"544 _param_constant82" -> "546 layer_norm_13";
+"545 _param_constant83" -> "546 layer_norm_13";
+"546 layer_norm_13" -> "548 layer_norm_13_0_0_nncf_smooth_quant_0";
+"547 linear_26_updated_constant0" -> "553 quantize_per_channel_default_27";
+"548 layer_norm_13_0_0_nncf_smooth_quant_0" -> "549 quantize_per_tensor_default_41";
+"549 quantize_per_tensor_default_41" -> "550 dequantize_per_tensor_default_41";
+"550 dequantize_per_tensor_default_41" -> "556 linear_26";
+"551 linear_26_scale_0" -> "553 quantize_per_channel_default_27";
+"551 linear_26_scale_0" -> "554 dequantize_per_channel_default_27";
+"552 linear_26_zero_point_0" -> "553 quantize_per_channel_default_27";
+"552 linear_26_zero_point_0" -> "554 dequantize_per_channel_default_27";
+"553 quantize_per_channel_default_27" -> "554 dequantize_per_channel_default_27";
+"554 dequantize_per_channel_default_27" -> "556 linear_26";
+"555 _param_constant85_0_0" -> "556 linear_26";
+"556 linear_26" -> "557 gelu_6";
+"557 gelu_6" -> "558 dropout_20";
+"558 dropout_20" -> "560 dropout_20_0_0_nncf_smooth_quant_0";
+"559 linear_27_updated_constant0" -> "565 quantize_per_channel_default_28";
+"560 dropout_20_0_0_nncf_smooth_quant_0" -> "561 quantize_per_tensor_default_42";
+"561 quantize_per_tensor_default_42" -> "562 dequantize_per_tensor_default_42";
+"562 dequantize_per_tensor_default_42" -> "568 linear_27";
+"563 linear_27_scale_0" -> "565 quantize_per_channel_default_28";
+"563 linear_27_scale_0" -> "566 dequantize_per_channel_default_28";
+"564 linear_27_zero_point_0" -> "565 quantize_per_channel_default_28";
+"564 linear_27_zero_point_0" -> "566 dequantize_per_channel_default_28";
+"565 quantize_per_channel_default_28" -> "566 dequantize_per_channel_default_28";
+"566 dequantize_per_channel_default_28" -> "568 linear_27";
+"567 _param_constant87_0_0" -> "568 linear_27";
+"568 linear_27" -> "569 dropout_21";
+"569 dropout_21" -> "570 add_14";
+"570 add_14" -> "573 layer_norm_14";
+"570 add_14" -> "622 add_15";
+"571 _param_constant88" -> "573 layer_norm_14";
+"572 _param_constant89" -> "573 layer_norm_14";
+"573 layer_norm_14" -> "574 transpose_42";
+"574 transpose_42" -> "576 transpose_42_0_0_nncf_smooth_quant_0";
+"575 linear_28_updated_constant0" -> "581 quantize_per_channel_default_29";
+"576 transpose_42_0_0_nncf_smooth_quant_0" -> "577 quantize_per_tensor_default_43";
+"577 quantize_per_tensor_default_43" -> "578 dequantize_per_tensor_default_43";
+"578 dequantize_per_tensor_default_43" -> "584 linear_28";
+"579 linear_28_scale_0" -> "581 quantize_per_channel_default_29";
+"579 linear_28_scale_0" -> "582 dequantize_per_channel_default_29";
+"580 linear_28_zero_point_0" -> "581 quantize_per_channel_default_29";
+"580 linear_28_zero_point_0" -> "582 dequantize_per_channel_default_29";
+"581 quantize_per_channel_default_29" -> "582 dequantize_per_channel_default_29";
+"582 dequantize_per_channel_default_29" -> "584 linear_28";
+"583 _param_constant91_0_0" -> "584 linear_28";
+"584 linear_28" -> "585 unflatten_7";
+"585 unflatten_7" -> "586 unsqueeze_7";
+"586 unsqueeze_7" -> "587 transpose_43";
+"587 transpose_43" -> "588 squeeze_7";
+"588 squeeze_7" -> "589 contiguous_7";
+"589 contiguous_7" -> "590 quantize_per_tensor_default_44";
+"589 contiguous_7" -> "593 quantize_per_tensor_default_45";
+"589 contiguous_7" -> "596 select_23";
+"590 quantize_per_tensor_default_44" -> "591 dequantize_per_tensor_default_44";
+"591 dequantize_per_tensor_default_44" -> "592 select_21";
+"592 select_21" -> "597 view_56";
+"593 quantize_per_tensor_default_45" -> "594 dequantize_per_tensor_default_45";
+"594 dequantize_per_tensor_default_45" -> "595 select_22";
+"595 select_22" -> "599 view_57";
+"596 select_23" -> "601 view_58";
+"597 view_56" -> "598 transpose_44";
+"598 transpose_44" -> "603 view_59";
+"599 view_57" -> "600 transpose_45";
+"600 transpose_45" -> "604 view_60";
+"601 view_58" -> "602 transpose_46";
+"602 transpose_46" -> "605 view_61";
+"603 view_59" -> "606 scaled_dot_product_attention_7";
+"604 view_60" -> "606 scaled_dot_product_attention_7";
+"605 view_61" -> "606 scaled_dot_product_attention_7";
+"606 scaled_dot_product_attention_7" -> "607 permute_8";
+"607 permute_8" -> "608 view_62";
+"608 view_62" -> "610 view_62_0_0_nncf_smooth_quant_0";
+"609 linear_29_updated_constant0" -> "615 quantize_per_channel_default_30";
+"610 view_62_0_0_nncf_smooth_quant_0" -> "611 quantize_per_tensor_default_46";
+"611 quantize_per_tensor_default_46" -> "612 dequantize_per_tensor_default_46";
+"612 dequantize_per_tensor_default_46" -> "618 linear_29";
+"613 linear_29_scale_0" -> "615 quantize_per_channel_default_30";
+"613 linear_29_scale_0" -> "616 dequantize_per_channel_default_30";
+"614 linear_29_zero_point_0" -> "615 quantize_per_channel_default_30";
+"614 linear_29_zero_point_0" -> "616 dequantize_per_channel_default_30";
+"615 quantize_per_channel_default_30" -> "616 dequantize_per_channel_default_30";
+"616 dequantize_per_channel_default_30" -> "618 linear_29";
+"617 _param_constant93_0_0" -> "618 linear_29";
+"618 linear_29" -> "619 view_63";
+"619 view_63" -> "620 transpose_47";
+"620 transpose_47" -> "621 dropout_22";
+"621 dropout_22" -> "622 add_15";
+"622 add_15" -> "625 layer_norm_15";
+"622 add_15" -> "649 add_16";
+"623 _param_constant94" -> "625 layer_norm_15";
+"624 _param_constant95" -> "625 layer_norm_15";
+"625 layer_norm_15" -> "627 layer_norm_15_0_0_nncf_smooth_quant_0";
+"626 linear_30_updated_constant0" -> "632 quantize_per_channel_default_31";
+"627 layer_norm_15_0_0_nncf_smooth_quant_0" -> "628 quantize_per_tensor_default_47";
+"628 quantize_per_tensor_default_47" -> "629 dequantize_per_tensor_default_47";
+"629 dequantize_per_tensor_default_47" -> "635 linear_30";
+"630 linear_30_scale_0" -> "632 quantize_per_channel_default_31";
+"630 linear_30_scale_0" -> "633 dequantize_per_channel_default_31";
+"631 linear_30_zero_point_0" -> "632 quantize_per_channel_default_31";
+"631 linear_30_zero_point_0" -> "633 dequantize_per_channel_default_31";
+"632 quantize_per_channel_default_31" -> "633 dequantize_per_channel_default_31";
+"633 dequantize_per_channel_default_31" -> "635 linear_30";
+"634 _param_constant97_0_0" -> "635 linear_30";
+"635 linear_30" -> "636 gelu_7";
+"636 gelu_7" -> "637 dropout_23";
+"637 dropout_23" -> "639 dropout_23_0_0_nncf_smooth_quant_0";
+"638 linear_31_updated_constant0" -> "644 quantize_per_channel_default_32";
+"639 dropout_23_0_0_nncf_smooth_quant_0" -> "640 quantize_per_tensor_default_48";
+"640 quantize_per_tensor_default_48" -> "641 dequantize_per_tensor_default_48";
+"641 dequantize_per_tensor_default_48" -> "647 linear_31";
+"642 linear_31_scale_0" -> "644 quantize_per_channel_default_32";
+"642 linear_31_scale_0" -> "645 dequantize_per_channel_default_32";
+"643 linear_31_zero_point_0" -> "644 quantize_per_channel_default_32";
+"643 linear_31_zero_point_0" -> "645 dequantize_per_channel_default_32";
+"644 quantize_per_channel_default_32" -> "645 dequantize_per_channel_default_32";
+"645 dequantize_per_channel_default_32" -> "647 linear_31";
+"646 _param_constant99_0_0" -> "647 linear_31";
+"647 linear_31" -> "648 dropout_24";
+"648 dropout_24" -> "649 add_16";
+"649 add_16" -> "652 layer_norm_16";
+"649 add_16" -> "701 add_17";
+"650 _param_constant100" -> "652 layer_norm_16";
+"651 _param_constant101" -> "652 layer_norm_16";
+"652 layer_norm_16" -> "653 transpose_48";
+"653 transpose_48" -> "655 transpose_48_0_0_nncf_smooth_quant_0";
+"654 linear_32_updated_constant0" -> "660 quantize_per_channel_default_33";
+"655 transpose_48_0_0_nncf_smooth_quant_0" -> "656 quantize_per_tensor_default_49";
+"656 quantize_per_tensor_default_49" -> "657 dequantize_per_tensor_default_49";
+"657 dequantize_per_tensor_default_49" -> "663 linear_32";
+"658 linear_32_scale_0" -> "660 quantize_per_channel_default_33";
+"658 linear_32_scale_0" -> "661 dequantize_per_channel_default_33";
+"659 linear_32_zero_point_0" -> "660 quantize_per_channel_default_33";
+"659 linear_32_zero_point_0" -> "661 dequantize_per_channel_default_33";
+"660 quantize_per_channel_default_33" -> "661 dequantize_per_channel_default_33";
+"661 dequantize_per_channel_default_33" -> "663 linear_32";
+"662 _param_constant103_0_0" -> "663 linear_32";
+"663 linear_32" -> "664 unflatten_8";
+"664 unflatten_8" -> "665 unsqueeze_8";
+"665 unsqueeze_8" -> "666 transpose_49";
+"666 transpose_49" -> "667 squeeze_8";
+"667 squeeze_8" -> "668 contiguous_8";
+"668 contiguous_8" -> "669 quantize_per_tensor_default_50";
+"668 contiguous_8" -> "672 quantize_per_tensor_default_51";
+"668 contiguous_8" -> "675 select_26";
+"669 quantize_per_tensor_default_50" -> "670 dequantize_per_tensor_default_50";
+"670 dequantize_per_tensor_default_50" -> "671 select_24";
+"671 select_24" -> "676 view_64";
+"672 quantize_per_tensor_default_51" -> "673 dequantize_per_tensor_default_51";
+"673 dequantize_per_tensor_default_51" -> "674 select_25";
+"674 select_25" -> "678 view_65";
+"675 select_26" -> "680 view_66";
+"676 view_64" -> "677 transpose_50";
+"677 transpose_50" -> "682 view_67";
+"678 view_65" -> "679 transpose_51";
+"679 transpose_51" -> "683 view_68";
+"680 view_66" -> "681 transpose_52";
+"681 transpose_52" -> "684 view_69";
+"682 view_67" -> "685 scaled_dot_product_attention_8";
+"683 view_68" -> "685 scaled_dot_product_attention_8";
+"684 view_69" -> "685 scaled_dot_product_attention_8";
+"685 scaled_dot_product_attention_8" -> "686 permute_9";
+"686 permute_9" -> "687 view_70";
+"687 view_70" -> "689 view_70_0_0_nncf_smooth_quant_0";
+"688 linear_33_updated_constant0" -> "694 quantize_per_channel_default_34";
+"689 view_70_0_0_nncf_smooth_quant_0" -> "690 quantize_per_tensor_default_52";
+"690 quantize_per_tensor_default_52" -> "691 dequantize_per_tensor_default_52";
+"691 dequantize_per_tensor_default_52" -> "697 linear_33";
+"692 linear_33_scale_0" -> "694 quantize_per_channel_default_34";
+"692 linear_33_scale_0" -> "695 dequantize_per_channel_default_34";
+"693 linear_33_zero_point_0" -> "694 quantize_per_channel_default_34";
+"693 linear_33_zero_point_0" -> "695 dequantize_per_channel_default_34";
+"694 quantize_per_channel_default_34" -> "695 dequantize_per_channel_default_34";
+"695 dequantize_per_channel_default_34" -> "697 linear_33";
+"696 _param_constant105_0_0" -> "697 linear_33";
+"697 linear_33" -> "698 view_71";
+"698 view_71" -> "699 transpose_53";
+"699 transpose_53" -> "700 dropout_25";
+"700 dropout_25" -> "701 add_17";
+"701 add_17" -> "704 layer_norm_17";
+"701 add_17" -> "728 add_18";
+"702 _param_constant106" -> "704 layer_norm_17";
+"703 _param_constant107" -> "704 layer_norm_17";
+"704 layer_norm_17" -> "706 layer_norm_17_0_0_nncf_smooth_quant_0";
+"705 linear_34_updated_constant0" -> "711 quantize_per_channel_default_35";
+"706 layer_norm_17_0_0_nncf_smooth_quant_0" -> "707 quantize_per_tensor_default_53";
+"707 quantize_per_tensor_default_53" -> "708 dequantize_per_tensor_default_53";
+"708 dequantize_per_tensor_default_53" -> "714 linear_34";
+"709 linear_34_scale_0" -> "711 quantize_per_channel_default_35";
+"709 linear_34_scale_0" -> "712 dequantize_per_channel_default_35";
+"710 linear_34_zero_point_0" -> "711 quantize_per_channel_default_35";
+"710 linear_34_zero_point_0" -> "712 dequantize_per_channel_default_35";
+"711 quantize_per_channel_default_35" -> "712 dequantize_per_channel_default_35";
+"712 dequantize_per_channel_default_35" -> "714 linear_34";
+"713 _param_constant109_0_0" -> "714 linear_34";
+"714 linear_34" -> "715 gelu_8";
+"715 gelu_8" -> "716 dropout_26";
+"716 dropout_26" -> "718 dropout_26_0_0_nncf_smooth_quant_0";
+"717 linear_35_updated_constant0" -> "723 quantize_per_channel_default_36";
+"718 dropout_26_0_0_nncf_smooth_quant_0" -> "719 quantize_per_tensor_default_54";
+"719 quantize_per_tensor_default_54" -> "720 dequantize_per_tensor_default_54";
+"720 dequantize_per_tensor_default_54" -> "726 linear_35";
+"721 linear_35_scale_0" -> "723 quantize_per_channel_default_36";
+"721 linear_35_scale_0" -> "724 dequantize_per_channel_default_36";
+"722 linear_35_zero_point_0" -> "723 quantize_per_channel_default_36";
+"722 linear_35_zero_point_0" -> "724 dequantize_per_channel_default_36";
+"723 quantize_per_channel_default_36" -> "724 dequantize_per_channel_default_36";
+"724 dequantize_per_channel_default_36" -> "726 linear_35";
+"725 _param_constant111_0_0" -> "726 linear_35";
+"726 linear_35" -> "727 dropout_27";
+"727 dropout_27" -> "728 add_18";
+"728 add_18" -> "731 layer_norm_18";
+"728 add_18" -> "780 add_19";
+"729 _param_constant112" -> "731 layer_norm_18";
+"730 _param_constant113" -> "731 layer_norm_18";
+"731 layer_norm_18" -> "732 transpose_54";
+"732 transpose_54" -> "734 transpose_54_0_0_nncf_smooth_quant_0";
+"733 linear_36_updated_constant0" -> "739 quantize_per_channel_default_37";
+"734 transpose_54_0_0_nncf_smooth_quant_0" -> "735 quantize_per_tensor_default_55";
+"735 quantize_per_tensor_default_55" -> "736 dequantize_per_tensor_default_55";
+"736 dequantize_per_tensor_default_55" -> "742 linear_36";
+"737 linear_36_scale_0" -> "739 quantize_per_channel_default_37";
+"737 linear_36_scale_0" -> "740 dequantize_per_channel_default_37";
+"738 linear_36_zero_point_0" -> "739 quantize_per_channel_default_37";
+"738 linear_36_zero_point_0" -> "740 dequantize_per_channel_default_37";
+"739 quantize_per_channel_default_37" -> "740 dequantize_per_channel_default_37";
+"740 dequantize_per_channel_default_37" -> "742 linear_36";
+"741 _param_constant115_0_0" -> "742 linear_36";
+"742 linear_36" -> "743 unflatten_9";
+"743 unflatten_9" -> "744 unsqueeze_9";
+"744 unsqueeze_9" -> "745 transpose_55";
+"745 transpose_55" -> "746 squeeze_9";
+"746 squeeze_9" -> "747 contiguous_9";
+"747 contiguous_9" -> "748 quantize_per_tensor_default_56";
+"747 contiguous_9" -> "751 quantize_per_tensor_default_57";
+"747 contiguous_9" -> "754 select_29";
+"748 quantize_per_tensor_default_56" -> "749 dequantize_per_tensor_default_56";
+"749 dequantize_per_tensor_default_56" -> "750 select_27";
+"750 select_27" -> "755 view_72";
+"751 quantize_per_tensor_default_57" -> "752 dequantize_per_tensor_default_57";
+"752 dequantize_per_tensor_default_57" -> "753 select_28";
+"753 select_28" -> "757 view_73";
+"754 select_29" -> "759 view_74";
+"755 view_72" -> "756 transpose_56";
+"756 transpose_56" -> "761 view_75";
+"757 view_73" -> "758 transpose_57";
+"758 transpose_57" -> "762 view_76";
+"759 view_74" -> "760 transpose_58";
+"760 transpose_58" -> "763 view_77";
+"761 view_75" -> "764 scaled_dot_product_attention_9";
+"762 view_76" -> "764 scaled_dot_product_attention_9";
+"763 view_77" -> "764 scaled_dot_product_attention_9";
+"764 scaled_dot_product_attention_9" -> "765 permute_10";
+"765 permute_10" -> "766 view_78";
+"766 view_78" -> "768 view_78_0_0_nncf_smooth_quant_0";
+"767 linear_37_updated_constant0" -> "773 quantize_per_channel_default_38";
+"768 view_78_0_0_nncf_smooth_quant_0" -> "769 quantize_per_tensor_default_58";
+"769 quantize_per_tensor_default_58" -> "770 dequantize_per_tensor_default_58";
+"770 dequantize_per_tensor_default_58" -> "776 linear_37";
+"771 linear_37_scale_0" -> "773 quantize_per_channel_default_38";
+"771 linear_37_scale_0" -> "774 dequantize_per_channel_default_38";
+"772 linear_37_zero_point_0" -> "773 quantize_per_channel_default_38";
+"772 linear_37_zero_point_0" -> "774 dequantize_per_channel_default_38";
+"773 quantize_per_channel_default_38" -> "774 dequantize_per_channel_default_38";
+"774 dequantize_per_channel_default_38" -> "776 linear_37";
+"775 _param_constant117_0_0" -> "776 linear_37";
+"776 linear_37" -> "777 view_79";
+"777 view_79" -> "778 transpose_59";
+"778 transpose_59" -> "779 dropout_28";
+"779 dropout_28" -> "780 add_19";
+"780 add_19" -> "783 layer_norm_19";
+"780 add_19" -> "807 add_20";
+"781 _param_constant118" -> "783 layer_norm_19";
+"782 _param_constant119" -> "783 layer_norm_19";
+"783 layer_norm_19" -> "785 layer_norm_19_0_0_nncf_smooth_quant_0";
+"784 linear_38_updated_constant0" -> "790 quantize_per_channel_default_39";
+"785 layer_norm_19_0_0_nncf_smooth_quant_0" -> "786 quantize_per_tensor_default_59";
+"786 quantize_per_tensor_default_59" -> "787 dequantize_per_tensor_default_59";
+"787 dequantize_per_tensor_default_59" -> "793 linear_38";
+"788 linear_38_scale_0" -> "790 quantize_per_channel_default_39";
+"788 linear_38_scale_0" -> "791 dequantize_per_channel_default_39";
+"789 linear_38_zero_point_0" -> "790 quantize_per_channel_default_39";
+"789 linear_38_zero_point_0" -> "791 dequantize_per_channel_default_39";
+"790 quantize_per_channel_default_39" -> "791 dequantize_per_channel_default_39";
+"791 dequantize_per_channel_default_39" -> "793 linear_38";
+"792 _param_constant121_0_0" -> "793 linear_38";
+"793 linear_38" -> "794 gelu_9";
+"794 gelu_9" -> "795 dropout_29";
+"795 dropout_29" -> "797 dropout_29_0_0_nncf_smooth_quant_0";
+"796 linear_39_updated_constant0" -> "802 quantize_per_channel_default_40";
+"797 dropout_29_0_0_nncf_smooth_quant_0" -> "798 quantize_per_tensor_default_60";
+"798 quantize_per_tensor_default_60" -> "799 dequantize_per_tensor_default_60";
+"799 dequantize_per_tensor_default_60" -> "805 linear_39";
+"800 linear_39_scale_0" -> "802 quantize_per_channel_default_40";
+"800 linear_39_scale_0" -> "803 dequantize_per_channel_default_40";
+"801 linear_39_zero_point_0" -> "802 quantize_per_channel_default_40";
+"801 linear_39_zero_point_0" -> "803 dequantize_per_channel_default_40";
+"802 quantize_per_channel_default_40" -> "803 dequantize_per_channel_default_40";
+"803 dequantize_per_channel_default_40" -> "805 linear_39";
+"804 _param_constant123_0_0" -> "805 linear_39";
+"805 linear_39" -> "806 dropout_30";
+"806 dropout_30" -> "807 add_20";
+"807 add_20" -> "810 layer_norm_20";
+"807 add_20" -> "859 add_21";
+"808 _param_constant124" -> "810 layer_norm_20";
+"809 _param_constant125" -> "810 layer_norm_20";
+"810 layer_norm_20" -> "811 transpose_60";
+"811 transpose_60" -> "813 transpose_60_0_0_nncf_smooth_quant_0";
+"812 linear_40_updated_constant0" -> "818 quantize_per_channel_default_41";
+"813 transpose_60_0_0_nncf_smooth_quant_0" -> "814 quantize_per_tensor_default_61";
+"814 quantize_per_tensor_default_61" -> "815 dequantize_per_tensor_default_61";
+"815 dequantize_per_tensor_default_61" -> "821 linear_40";
+"816 linear_40_scale_0" -> "818 quantize_per_channel_default_41";
+"816 linear_40_scale_0" -> "819 dequantize_per_channel_default_41";
+"817 linear_40_zero_point_0" -> "818 quantize_per_channel_default_41";
+"817 linear_40_zero_point_0" -> "819 dequantize_per_channel_default_41";
+"818 quantize_per_channel_default_41" -> "819 dequantize_per_channel_default_41";
+"819 dequantize_per_channel_default_41" -> "821 linear_40";
+"820 _param_constant127_0_0" -> "821 linear_40";
+"821 linear_40" -> "822 unflatten_10";
+"822 unflatten_10" -> "823 unsqueeze_10";
+"823 unsqueeze_10" -> "824 transpose_61";
+"824 transpose_61" -> "825 squeeze_10";
+"825 squeeze_10" -> "826 contiguous_10";
+"826 contiguous_10" -> "827 quantize_per_tensor_default_62";
+"826 contiguous_10" -> "830 quantize_per_tensor_default_63";
+"826 contiguous_10" -> "833 select_32";
+"827 quantize_per_tensor_default_62" -> "828 dequantize_per_tensor_default_62";
+"828 dequantize_per_tensor_default_62" -> "829 select_30";
+"829 select_30" -> "834 view_80";
+"830 quantize_per_tensor_default_63" -> "831 dequantize_per_tensor_default_63";
+"831 dequantize_per_tensor_default_63" -> "832 select_31";
+"832 select_31" -> "836 view_81";
+"833 select_32" -> "838 view_82";
+"834 view_80" -> "835 transpose_62";
+"835 transpose_62" -> "840 view_83";
+"836 view_81" -> "837 transpose_63";
+"837 transpose_63" -> "841 view_84";
+"838 view_82" -> "839 transpose_64";
+"839 transpose_64" -> "842 view_85";
+"840 view_83" -> "843 scaled_dot_product_attention_10";
+"841 view_84" -> "843 scaled_dot_product_attention_10";
+"842 view_85" -> "843 scaled_dot_product_attention_10";
+"843 scaled_dot_product_attention_10" -> "844 permute_11";
+"844 permute_11" -> "845 view_86";
+"845 view_86" -> "847 view_86_0_0_nncf_smooth_quant_0";
+"846 linear_41_updated_constant0" -> "852 quantize_per_channel_default_42";
+"847 view_86_0_0_nncf_smooth_quant_0" -> "848 quantize_per_tensor_default_64";
+"848 quantize_per_tensor_default_64" -> "849 dequantize_per_tensor_default_64";
+"849 dequantize_per_tensor_default_64" -> "855 linear_41";
+"850 linear_41_scale_0" -> "852 quantize_per_channel_default_42";
+"850 linear_41_scale_0" -> "853 dequantize_per_channel_default_42";
+"851 linear_41_zero_point_0" -> "852 quantize_per_channel_default_42";
+"851 linear_41_zero_point_0" -> "853 dequantize_per_channel_default_42";
+"852 quantize_per_channel_default_42" -> "853 dequantize_per_channel_default_42";
+"853 dequantize_per_channel_default_42" -> "855 linear_41";
+"854 _param_constant129_0_0" -> "855 linear_41";
+"855 linear_41" -> "856 view_87";
+"856 view_87" -> "857 transpose_65";
+"857 transpose_65" -> "858 dropout_31";
+"858 dropout_31" -> "859 add_21";
+"859 add_21" -> "862 layer_norm_21";
+"859 add_21" -> "886 add_22";
+"860 _param_constant130" -> "862 layer_norm_21";
+"861 _param_constant131" -> "862 layer_norm_21";
+"862 layer_norm_21" -> "864 layer_norm_21_0_0_nncf_smooth_quant_0";
+"863 linear_42_updated_constant0" -> "869 quantize_per_channel_default_43";
+"864 layer_norm_21_0_0_nncf_smooth_quant_0" -> "865 quantize_per_tensor_default_65";
+"865 quantize_per_tensor_default_65" -> "866 dequantize_per_tensor_default_65";
+"866 dequantize_per_tensor_default_65" -> "872 linear_42";
+"867 linear_42_scale_0" -> "869 quantize_per_channel_default_43";
+"867 linear_42_scale_0" -> "870 dequantize_per_channel_default_43";
+"868 linear_42_zero_point_0" -> "869 quantize_per_channel_default_43";
+"868 linear_42_zero_point_0" -> "870 dequantize_per_channel_default_43";
+"869 quantize_per_channel_default_43" -> "870 dequantize_per_channel_default_43";
+"870 dequantize_per_channel_default_43" -> "872 linear_42";
+"871 _param_constant133_0_0" -> "872 linear_42";
+"872 linear_42" -> "873 gelu_10";
+"873 gelu_10" -> "874 dropout_32";
+"874 dropout_32" -> "876 dropout_32_0_0_nncf_smooth_quant_0";
+"875 linear_43_updated_constant0" -> "881 quantize_per_channel_default_44";
+"876 dropout_32_0_0_nncf_smooth_quant_0" -> "877 quantize_per_tensor_default_66";
+"877 quantize_per_tensor_default_66" -> "878 dequantize_per_tensor_default_66";
+"878 dequantize_per_tensor_default_66" -> "884 linear_43";
+"879 linear_43_scale_0" -> "881 quantize_per_channel_default_44";
+"879 linear_43_scale_0" -> "882 dequantize_per_channel_default_44";
+"880 linear_43_zero_point_0" -> "881 quantize_per_channel_default_44";
+"880 linear_43_zero_point_0" -> "882 dequantize_per_channel_default_44";
+"881 quantize_per_channel_default_44" -> "882 dequantize_per_channel_default_44";
+"882 dequantize_per_channel_default_44" -> "884 linear_43";
+"883 _param_constant135_0_0" -> "884 linear_43";
+"884 linear_43" -> "885 dropout_33";
+"885 dropout_33" -> "886 add_22";
+"886 add_22" -> "889 layer_norm_22";
+"886 add_22" -> "938 add_23";
+"887 _param_constant136" -> "889 layer_norm_22";
+"888 _param_constant137" -> "889 layer_norm_22";
+"889 layer_norm_22" -> "890 transpose_66";
+"890 transpose_66" -> "892 transpose_66_0_0_nncf_smooth_quant_0";
+"891 linear_44_updated_constant0" -> "897 quantize_per_channel_default_45";
+"892 transpose_66_0_0_nncf_smooth_quant_0" -> "893 quantize_per_tensor_default_67";
+"893 quantize_per_tensor_default_67" -> "894 dequantize_per_tensor_default_67";
+"894 dequantize_per_tensor_default_67" -> "900 linear_44";
+"895 linear_44_scale_0" -> "897 quantize_per_channel_default_45";
+"895 linear_44_scale_0" -> "898 dequantize_per_channel_default_45";
+"896 linear_44_zero_point_0" -> "897 quantize_per_channel_default_45";
+"896 linear_44_zero_point_0" -> "898 dequantize_per_channel_default_45";
+"897 quantize_per_channel_default_45" -> "898 dequantize_per_channel_default_45";
+"898 dequantize_per_channel_default_45" -> "900 linear_44";
+"899 _param_constant139_0_0" -> "900 linear_44";
+"900 linear_44" -> "901 unflatten_11";
+"901 unflatten_11" -> "902 unsqueeze_11";
+"902 unsqueeze_11" -> "903 transpose_67";
+"903 transpose_67" -> "904 squeeze_11";
+"904 squeeze_11" -> "905 contiguous_11";
+"905 contiguous_11" -> "906 quantize_per_tensor_default_68";
+"905 contiguous_11" -> "909 quantize_per_tensor_default_69";
+"905 contiguous_11" -> "912 select_35";
+"906 quantize_per_tensor_default_68" -> "907 dequantize_per_tensor_default_68";
+"907 dequantize_per_tensor_default_68" -> "908 select_33";
+"908 select_33" -> "913 view_88";
+"909 quantize_per_tensor_default_69" -> "910 dequantize_per_tensor_default_69";
+"910 dequantize_per_tensor_default_69" -> "911 select_34";
+"911 select_34" -> "915 view_89";
+"912 select_35" -> "917 view_90";
+"913 view_88" -> "914 transpose_68";
+"914 transpose_68" -> "919 view_91";
+"915 view_89" -> "916 transpose_69";
+"916 transpose_69" -> "920 view_92";
+"917 view_90" -> "918 transpose_70";
+"918 transpose_70" -> "921 view_93";
+"919 view_91" -> "922 scaled_dot_product_attention_11";
+"920 view_92" -> "922 scaled_dot_product_attention_11";
+"921 view_93" -> "922 scaled_dot_product_attention_11";
+"922 scaled_dot_product_attention_11" -> "923 permute_12";
+"923 permute_12" -> "924 view_94";
+"924 view_94" -> "926 view_94_0_0_nncf_smooth_quant_0";
+"925 linear_45_updated_constant0" -> "931 quantize_per_channel_default_46";
+"926 view_94_0_0_nncf_smooth_quant_0" -> "927 quantize_per_tensor_default_70";
+"927 quantize_per_tensor_default_70" -> "928 dequantize_per_tensor_default_70";
+"928 dequantize_per_tensor_default_70" -> "934 linear_45";
+"929 linear_45_scale_0" -> "931 quantize_per_channel_default_46";
+"929 linear_45_scale_0" -> "932 dequantize_per_channel_default_46";
+"930 linear_45_zero_point_0" -> "931 quantize_per_channel_default_46";
+"930 linear_45_zero_point_0" -> "932 dequantize_per_channel_default_46";
+"931 quantize_per_channel_default_46" -> "932 dequantize_per_channel_default_46";
+"932 dequantize_per_channel_default_46" -> "934 linear_45";
+"933 _param_constant141_0_0" -> "934 linear_45";
+"934 linear_45" -> "935 view_95";
+"935 view_95" -> "936 transpose_71";
+"936 transpose_71" -> "937 dropout_34";
+"937 dropout_34" -> "938 add_23";
+"938 add_23" -> "941 layer_norm_23";
+"938 add_23" -> "965 add_24";
+"939 _param_constant142" -> "941 layer_norm_23";
+"940 _param_constant143" -> "941 layer_norm_23";
+"941 layer_norm_23" -> "943 layer_norm_23_0_0_nncf_smooth_quant_0";
+"942 linear_46_updated_constant0" -> "948 quantize_per_channel_default_47";
+"943 layer_norm_23_0_0_nncf_smooth_quant_0" -> "944 quantize_per_tensor_default_71";
+"944 quantize_per_tensor_default_71" -> "945 dequantize_per_tensor_default_71";
+"945 dequantize_per_tensor_default_71" -> "951 linear_46";
+"946 linear_46_scale_0" -> "948 quantize_per_channel_default_47";
+"946 linear_46_scale_0" -> "949 dequantize_per_channel_default_47";
+"947 linear_46_zero_point_0" -> "948 quantize_per_channel_default_47";
+"947 linear_46_zero_point_0" -> "949 dequantize_per_channel_default_47";
+"948 quantize_per_channel_default_47" -> "949 dequantize_per_channel_default_47";
+"949 dequantize_per_channel_default_47" -> "951 linear_46";
+"950 _param_constant145_0_0" -> "951 linear_46";
+"951 linear_46" -> "952 gelu_11";
+"952 gelu_11" -> "953 dropout_35";
+"953 dropout_35" -> "955 dropout_35_0_0_nncf_smooth_quant_0";
+"954 linear_47_updated_constant0" -> "960 quantize_per_channel_default_48";
+"955 dropout_35_0_0_nncf_smooth_quant_0" -> "956 quantize_per_tensor_default_72";
+"956 quantize_per_tensor_default_72" -> "957 dequantize_per_tensor_default_72";
+"957 dequantize_per_tensor_default_72" -> "963 linear_47";
+"958 linear_47_scale_0" -> "960 quantize_per_channel_default_48";
+"958 linear_47_scale_0" -> "961 dequantize_per_channel_default_48";
+"959 linear_47_zero_point_0" -> "960 quantize_per_channel_default_48";
+"959 linear_47_zero_point_0" -> "961 dequantize_per_channel_default_48";
+"960 quantize_per_channel_default_48" -> "961 dequantize_per_channel_default_48";
+"961 dequantize_per_channel_default_48" -> "963 linear_47";
+"962 _param_constant147_0_0" -> "963 linear_47";
+"963 linear_47" -> "964 dropout_36";
+"964 dropout_36" -> "965 add_24";
+"965 add_24" -> "968 layer_norm_24";
+"966 _param_constant148" -> "968 layer_norm_24";
+"967 _param_constant149" -> "968 layer_norm_24";
+"968 layer_norm_24" -> "969 slice_1";
+"969 slice_1" -> "970 select_36";
+"970 select_36" -> "972 select_36_0_0_nncf_smooth_quant_0";
+"971 linear_48_updated_constant0" -> "977 quantize_per_channel_default_49";
+"972 select_36_0_0_nncf_smooth_quant_0" -> "973 quantize_per_tensor_default_73";
+"973 quantize_per_tensor_default_73" -> "974 dequantize_per_tensor_default_73";
+"974 dequantize_per_tensor_default_73" -> "980 linear_48";
+"975 linear_48_scale_0" -> "977 quantize_per_channel_default_49";
+"975 linear_48_scale_0" -> "978 dequantize_per_channel_default_49";
+"976 linear_48_zero_point_0" -> "977 quantize_per_channel_default_49";
+"976 linear_48_zero_point_0" -> "978 dequantize_per_channel_default_49";
+"977 quantize_per_channel_default_49" -> "978 dequantize_per_channel_default_49";
+"978 dequantize_per_channel_default_49" -> "980 linear_48";
+"979 _param_constant151_0_0" -> "980 linear_48";
+"980 linear_48" -> "981 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/reference_metatypes/mobilenet_v3_small.json b/tests/torch/data/reference_graphs/fx/reference_metatypes/mobilenet_v3_small.json
new file mode 100644
index 00000000000..64c7d3b0e66
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/reference_metatypes/mobilenet_v3_small.json
@@ -0,0 +1,507 @@
+{
+ "arg0_1": "PTInputNoopMetatype",
+ "_param_constant0": "PTConstNoopMetatype",
+ "conv2d": "PTConv2dMetatype",
+ "empty": "UnknownMetatype",
+ "_param_constant1": "PTConstNoopMetatype",
+ "_param_constant2": "PTConstNoopMetatype",
+ "_tensor_constant0": "PTConstNoopMetatype",
+ "_tensor_constant1": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training": "PTBatchNormMetatype",
+ "getitem": "PTGatherMetatype",
+ "getitem_1": "PTGatherMetatype",
+ "getitem_2": "PTGatherMetatype",
+ "hardswish_": "PTHardSwishMetatype",
+ "_param_constant3": "PTConstNoopMetatype",
+ "conv2d_1": "PTDepthwiseConv2dSubtype",
+ "empty_1": "UnknownMetatype",
+ "_param_constant4": "PTConstNoopMetatype",
+ "_param_constant5": "PTConstNoopMetatype",
+ "_tensor_constant2": "PTConstNoopMetatype",
+ "_tensor_constant3": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_1": "PTBatchNormMetatype",
+ "getitem_3": "PTGatherMetatype",
+ "getitem_4": "PTGatherMetatype",
+ "getitem_5": "PTGatherMetatype",
+ "relu_": "PTRELUMetatype",
+ "adaptive_avg_pool2d": "PTAvgPool2dMetatype",
+ "_param_constant6": "PTConstNoopMetatype",
+ "_param_constant7": "PTConstNoopMetatype",
+ "conv2d_2": "PTConv2dMetatype",
+ "relu": "PTRELUMetatype",
+ "_param_constant8": "PTConstNoopMetatype",
+ "_param_constant9": "PTConstNoopMetatype",
+ "conv2d_3": "PTConv2dMetatype",
+ "hardsigmoid": "PTHardSigmoidMetatype",
+ "mul": "PTMulMetatype",
+ "_param_constant10": "PTConstNoopMetatype",
+ "conv2d_4": "PTConv2dMetatype",
+ "empty_2": "UnknownMetatype",
+ "_param_constant11": "PTConstNoopMetatype",
+ "_param_constant12": "PTConstNoopMetatype",
+ "_tensor_constant4": "PTConstNoopMetatype",
+ "_tensor_constant5": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_2": "PTBatchNormMetatype",
+ "getitem_6": "PTGatherMetatype",
+ "getitem_7": "PTGatherMetatype",
+ "getitem_8": "PTGatherMetatype",
+ "_param_constant13": "PTConstNoopMetatype",
+ "conv2d_5": "PTConv2dMetatype",
+ "empty_3": "UnknownMetatype",
+ "_param_constant14": "PTConstNoopMetatype",
+ "_param_constant15": "PTConstNoopMetatype",
+ "_tensor_constant6": "PTConstNoopMetatype",
+ "_tensor_constant7": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_3": "PTBatchNormMetatype",
+ "getitem_9": "PTGatherMetatype",
+ "getitem_10": "PTGatherMetatype",
+ "getitem_11": "PTGatherMetatype",
+ "relu__1": "PTRELUMetatype",
+ "_param_constant16": "PTConstNoopMetatype",
+ "conv2d_6": "PTDepthwiseConv2dSubtype",
+ "empty_4": "UnknownMetatype",
+ "_param_constant17": "PTConstNoopMetatype",
+ "_param_constant18": "PTConstNoopMetatype",
+ "_tensor_constant8": "PTConstNoopMetatype",
+ "_tensor_constant9": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_4": "PTBatchNormMetatype",
+ "getitem_12": "PTGatherMetatype",
+ "getitem_13": "PTGatherMetatype",
+ "getitem_14": "PTGatherMetatype",
+ "relu__2": "PTRELUMetatype",
+ "_param_constant19": "PTConstNoopMetatype",
+ "conv2d_7": "PTConv2dMetatype",
+ "empty_5": "UnknownMetatype",
+ "_param_constant20": "PTConstNoopMetatype",
+ "_param_constant21": "PTConstNoopMetatype",
+ "_tensor_constant10": "PTConstNoopMetatype",
+ "_tensor_constant11": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_5": "PTBatchNormMetatype",
+ "getitem_15": "PTGatherMetatype",
+ "getitem_16": "PTGatherMetatype",
+ "getitem_17": "PTGatherMetatype",
+ "_param_constant22": "PTConstNoopMetatype",
+ "conv2d_8": "PTConv2dMetatype",
+ "empty_6": "UnknownMetatype",
+ "_param_constant23": "PTConstNoopMetatype",
+ "_param_constant24": "PTConstNoopMetatype",
+ "_tensor_constant12": "PTConstNoopMetatype",
+ "_tensor_constant13": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_6": "PTBatchNormMetatype",
+ "getitem_18": "PTGatherMetatype",
+ "getitem_19": "PTGatherMetatype",
+ "getitem_20": "PTGatherMetatype",
+ "relu__3": "PTRELUMetatype",
+ "_param_constant25": "PTConstNoopMetatype",
+ "conv2d_9": "PTDepthwiseConv2dSubtype",
+ "empty_7": "UnknownMetatype",
+ "_param_constant26": "PTConstNoopMetatype",
+ "_param_constant27": "PTConstNoopMetatype",
+ "_tensor_constant14": "PTConstNoopMetatype",
+ "_tensor_constant15": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_7": "PTBatchNormMetatype",
+ "getitem_21": "PTGatherMetatype",
+ "getitem_22": "PTGatherMetatype",
+ "getitem_23": "PTGatherMetatype",
+ "relu__4": "PTRELUMetatype",
+ "_param_constant28": "PTConstNoopMetatype",
+ "conv2d_10": "PTConv2dMetatype",
+ "empty_8": "UnknownMetatype",
+ "_param_constant29": "PTConstNoopMetatype",
+ "_param_constant30": "PTConstNoopMetatype",
+ "_tensor_constant16": "PTConstNoopMetatype",
+ "_tensor_constant17": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_8": "PTBatchNormMetatype",
+ "getitem_24": "PTGatherMetatype",
+ "getitem_25": "PTGatherMetatype",
+ "getitem_26": "PTGatherMetatype",
+ "add_": "PTAddMetatype",
+ "_param_constant31": "PTConstNoopMetatype",
+ "conv2d_11": "PTConv2dMetatype",
+ "empty_9": "UnknownMetatype",
+ "_param_constant32": "PTConstNoopMetatype",
+ "_param_constant33": "PTConstNoopMetatype",
+ "_tensor_constant18": "PTConstNoopMetatype",
+ "_tensor_constant19": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_9": "PTBatchNormMetatype",
+ "getitem_27": "PTGatherMetatype",
+ "getitem_28": "PTGatherMetatype",
+ "getitem_29": "PTGatherMetatype",
+ "hardswish__1": "PTHardSwishMetatype",
+ "_param_constant34": "PTConstNoopMetatype",
+ "conv2d_12": "PTDepthwiseConv2dSubtype",
+ "empty_10": "UnknownMetatype",
+ "_param_constant35": "PTConstNoopMetatype",
+ "_param_constant36": "PTConstNoopMetatype",
+ "_tensor_constant20": "PTConstNoopMetatype",
+ "_tensor_constant21": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_10": "PTBatchNormMetatype",
+ "getitem_30": "PTGatherMetatype",
+ "getitem_31": "PTGatherMetatype",
+ "getitem_32": "PTGatherMetatype",
+ "hardswish__2": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_1": "PTAvgPool2dMetatype",
+ "_param_constant37": "PTConstNoopMetatype",
+ "_param_constant38": "PTConstNoopMetatype",
+ "conv2d_13": "PTConv2dMetatype",
+ "relu_1": "PTRELUMetatype",
+ "_param_constant39": "PTConstNoopMetatype",
+ "_param_constant40": "PTConstNoopMetatype",
+ "conv2d_14": "PTConv2dMetatype",
+ "hardsigmoid_1": "PTHardSigmoidMetatype",
+ "mul_1": "PTMulMetatype",
+ "_param_constant41": "PTConstNoopMetatype",
+ "conv2d_15": "PTConv2dMetatype",
+ "empty_11": "UnknownMetatype",
+ "_param_constant42": "PTConstNoopMetatype",
+ "_param_constant43": "PTConstNoopMetatype",
+ "_tensor_constant22": "PTConstNoopMetatype",
+ "_tensor_constant23": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_11": "PTBatchNormMetatype",
+ "getitem_33": "PTGatherMetatype",
+ "getitem_34": "PTGatherMetatype",
+ "getitem_35": "PTGatherMetatype",
+ "_param_constant44": "PTConstNoopMetatype",
+ "conv2d_16": "PTConv2dMetatype",
+ "empty_12": "UnknownMetatype",
+ "_param_constant45": "PTConstNoopMetatype",
+ "_param_constant46": "PTConstNoopMetatype",
+ "_tensor_constant24": "PTConstNoopMetatype",
+ "_tensor_constant25": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_12": "PTBatchNormMetatype",
+ "getitem_36": "PTGatherMetatype",
+ "getitem_37": "PTGatherMetatype",
+ "getitem_38": "PTGatherMetatype",
+ "hardswish__3": "PTHardSwishMetatype",
+ "_param_constant47": "PTConstNoopMetatype",
+ "conv2d_17": "PTDepthwiseConv2dSubtype",
+ "empty_13": "UnknownMetatype",
+ "_param_constant48": "PTConstNoopMetatype",
+ "_param_constant49": "PTConstNoopMetatype",
+ "_tensor_constant26": "PTConstNoopMetatype",
+ "_tensor_constant27": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_13": "PTBatchNormMetatype",
+ "getitem_39": "PTGatherMetatype",
+ "getitem_40": "PTGatherMetatype",
+ "getitem_41": "PTGatherMetatype",
+ "hardswish__4": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_2": "PTAvgPool2dMetatype",
+ "_param_constant50": "PTConstNoopMetatype",
+ "_param_constant51": "PTConstNoopMetatype",
+ "conv2d_18": "PTConv2dMetatype",
+ "relu_2": "PTRELUMetatype",
+ "_param_constant52": "PTConstNoopMetatype",
+ "_param_constant53": "PTConstNoopMetatype",
+ "conv2d_19": "PTConv2dMetatype",
+ "hardsigmoid_2": "PTHardSigmoidMetatype",
+ "mul_2": "PTMulMetatype",
+ "_param_constant54": "PTConstNoopMetatype",
+ "conv2d_20": "PTConv2dMetatype",
+ "empty_14": "UnknownMetatype",
+ "_param_constant55": "PTConstNoopMetatype",
+ "_param_constant56": "PTConstNoopMetatype",
+ "_tensor_constant28": "PTConstNoopMetatype",
+ "_tensor_constant29": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_14": "PTBatchNormMetatype",
+ "getitem_42": "PTGatherMetatype",
+ "getitem_43": "PTGatherMetatype",
+ "getitem_44": "PTGatherMetatype",
+ "add__1": "PTAddMetatype",
+ "_param_constant57": "PTConstNoopMetatype",
+ "conv2d_21": "PTConv2dMetatype",
+ "empty_15": "UnknownMetatype",
+ "_param_constant58": "PTConstNoopMetatype",
+ "_param_constant59": "PTConstNoopMetatype",
+ "_tensor_constant30": "PTConstNoopMetatype",
+ "_tensor_constant31": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_15": "PTBatchNormMetatype",
+ "getitem_45": "PTGatherMetatype",
+ "getitem_46": "PTGatherMetatype",
+ "getitem_47": "PTGatherMetatype",
+ "hardswish__5": "PTHardSwishMetatype",
+ "_param_constant60": "PTConstNoopMetatype",
+ "conv2d_22": "PTDepthwiseConv2dSubtype",
+ "empty_16": "UnknownMetatype",
+ "_param_constant61": "PTConstNoopMetatype",
+ "_param_constant62": "PTConstNoopMetatype",
+ "_tensor_constant32": "PTConstNoopMetatype",
+ "_tensor_constant33": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_16": "PTBatchNormMetatype",
+ "getitem_48": "PTGatherMetatype",
+ "getitem_49": "PTGatherMetatype",
+ "getitem_50": "PTGatherMetatype",
+ "hardswish__6": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_3": "PTAvgPool2dMetatype",
+ "_param_constant63": "PTConstNoopMetatype",
+ "_param_constant64": "PTConstNoopMetatype",
+ "conv2d_23": "PTConv2dMetatype",
+ "relu_3": "PTRELUMetatype",
+ "_param_constant65": "PTConstNoopMetatype",
+ "_param_constant66": "PTConstNoopMetatype",
+ "conv2d_24": "PTConv2dMetatype",
+ "hardsigmoid_3": "PTHardSigmoidMetatype",
+ "mul_3": "PTMulMetatype",
+ "_param_constant67": "PTConstNoopMetatype",
+ "conv2d_25": "PTConv2dMetatype",
+ "empty_17": "UnknownMetatype",
+ "_param_constant68": "PTConstNoopMetatype",
+ "_param_constant69": "PTConstNoopMetatype",
+ "_tensor_constant34": "PTConstNoopMetatype",
+ "_tensor_constant35": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_17": "PTBatchNormMetatype",
+ "getitem_51": "PTGatherMetatype",
+ "getitem_52": "PTGatherMetatype",
+ "getitem_53": "PTGatherMetatype",
+ "add__2": "PTAddMetatype",
+ "_param_constant70": "PTConstNoopMetatype",
+ "conv2d_26": "PTConv2dMetatype",
+ "empty_18": "UnknownMetatype",
+ "_param_constant71": "PTConstNoopMetatype",
+ "_param_constant72": "PTConstNoopMetatype",
+ "_tensor_constant36": "PTConstNoopMetatype",
+ "_tensor_constant37": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_18": "PTBatchNormMetatype",
+ "getitem_54": "PTGatherMetatype",
+ "getitem_55": "PTGatherMetatype",
+ "getitem_56": "PTGatherMetatype",
+ "hardswish__7": "PTHardSwishMetatype",
+ "_param_constant73": "PTConstNoopMetatype",
+ "conv2d_27": "PTDepthwiseConv2dSubtype",
+ "empty_19": "UnknownMetatype",
+ "_param_constant74": "PTConstNoopMetatype",
+ "_param_constant75": "PTConstNoopMetatype",
+ "_tensor_constant38": "PTConstNoopMetatype",
+ "_tensor_constant39": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_19": "PTBatchNormMetatype",
+ "getitem_57": "PTGatherMetatype",
+ "getitem_58": "PTGatherMetatype",
+ "getitem_59": "PTGatherMetatype",
+ "hardswish__8": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_4": "PTAvgPool2dMetatype",
+ "_param_constant76": "PTConstNoopMetatype",
+ "_param_constant77": "PTConstNoopMetatype",
+ "conv2d_28": "PTConv2dMetatype",
+ "relu_4": "PTRELUMetatype",
+ "_param_constant78": "PTConstNoopMetatype",
+ "_param_constant79": "PTConstNoopMetatype",
+ "conv2d_29": "PTConv2dMetatype",
+ "hardsigmoid_4": "PTHardSigmoidMetatype",
+ "mul_4": "PTMulMetatype",
+ "_param_constant80": "PTConstNoopMetatype",
+ "conv2d_30": "PTConv2dMetatype",
+ "empty_20": "UnknownMetatype",
+ "_param_constant81": "PTConstNoopMetatype",
+ "_param_constant82": "PTConstNoopMetatype",
+ "_tensor_constant40": "PTConstNoopMetatype",
+ "_tensor_constant41": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_20": "PTBatchNormMetatype",
+ "getitem_60": "PTGatherMetatype",
+ "getitem_61": "PTGatherMetatype",
+ "getitem_62": "PTGatherMetatype",
+ "_param_constant83": "PTConstNoopMetatype",
+ "conv2d_31": "PTConv2dMetatype",
+ "empty_21": "UnknownMetatype",
+ "_param_constant84": "PTConstNoopMetatype",
+ "_param_constant85": "PTConstNoopMetatype",
+ "_tensor_constant42": "PTConstNoopMetatype",
+ "_tensor_constant43": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_21": "PTBatchNormMetatype",
+ "getitem_63": "PTGatherMetatype",
+ "getitem_64": "PTGatherMetatype",
+ "getitem_65": "PTGatherMetatype",
+ "hardswish__9": "PTHardSwishMetatype",
+ "_param_constant86": "PTConstNoopMetatype",
+ "conv2d_32": "PTDepthwiseConv2dSubtype",
+ "empty_22": "UnknownMetatype",
+ "_param_constant87": "PTConstNoopMetatype",
+ "_param_constant88": "PTConstNoopMetatype",
+ "_tensor_constant44": "PTConstNoopMetatype",
+ "_tensor_constant45": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_22": "PTBatchNormMetatype",
+ "getitem_66": "PTGatherMetatype",
+ "getitem_67": "PTGatherMetatype",
+ "getitem_68": "PTGatherMetatype",
+ "hardswish__10": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_5": "PTAvgPool2dMetatype",
+ "_param_constant89": "PTConstNoopMetatype",
+ "_param_constant90": "PTConstNoopMetatype",
+ "conv2d_33": "PTConv2dMetatype",
+ "relu_5": "PTRELUMetatype",
+ "_param_constant91": "PTConstNoopMetatype",
+ "_param_constant92": "PTConstNoopMetatype",
+ "conv2d_34": "PTConv2dMetatype",
+ "hardsigmoid_5": "PTHardSigmoidMetatype",
+ "mul_5": "PTMulMetatype",
+ "_param_constant93": "PTConstNoopMetatype",
+ "conv2d_35": "PTConv2dMetatype",
+ "empty_23": "UnknownMetatype",
+ "_param_constant94": "PTConstNoopMetatype",
+ "_param_constant95": "PTConstNoopMetatype",
+ "_tensor_constant46": "PTConstNoopMetatype",
+ "_tensor_constant47": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_23": "PTBatchNormMetatype",
+ "getitem_69": "PTGatherMetatype",
+ "getitem_70": "PTGatherMetatype",
+ "getitem_71": "PTGatherMetatype",
+ "add__3": "PTAddMetatype",
+ "_param_constant96": "PTConstNoopMetatype",
+ "conv2d_36": "PTConv2dMetatype",
+ "empty_24": "UnknownMetatype",
+ "_param_constant97": "PTConstNoopMetatype",
+ "_param_constant98": "PTConstNoopMetatype",
+ "_tensor_constant48": "PTConstNoopMetatype",
+ "_tensor_constant49": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_24": "PTBatchNormMetatype",
+ "getitem_72": "PTGatherMetatype",
+ "getitem_73": "PTGatherMetatype",
+ "getitem_74": "PTGatherMetatype",
+ "hardswish__11": "PTHardSwishMetatype",
+ "_param_constant99": "PTConstNoopMetatype",
+ "conv2d_37": "PTDepthwiseConv2dSubtype",
+ "empty_25": "UnknownMetatype",
+ "_param_constant100": "PTConstNoopMetatype",
+ "_param_constant101": "PTConstNoopMetatype",
+ "_tensor_constant50": "PTConstNoopMetatype",
+ "_tensor_constant51": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_25": "PTBatchNormMetatype",
+ "getitem_75": "PTGatherMetatype",
+ "getitem_76": "PTGatherMetatype",
+ "getitem_77": "PTGatherMetatype",
+ "hardswish__12": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_6": "PTAvgPool2dMetatype",
+ "_param_constant102": "PTConstNoopMetatype",
+ "_param_constant103": "PTConstNoopMetatype",
+ "conv2d_38": "PTConv2dMetatype",
+ "relu_6": "PTRELUMetatype",
+ "_param_constant104": "PTConstNoopMetatype",
+ "_param_constant105": "PTConstNoopMetatype",
+ "conv2d_39": "PTConv2dMetatype",
+ "hardsigmoid_6": "PTHardSigmoidMetatype",
+ "mul_6": "PTMulMetatype",
+ "_param_constant106": "PTConstNoopMetatype",
+ "conv2d_40": "PTConv2dMetatype",
+ "empty_26": "UnknownMetatype",
+ "_param_constant107": "PTConstNoopMetatype",
+ "_param_constant108": "PTConstNoopMetatype",
+ "_tensor_constant52": "PTConstNoopMetatype",
+ "_tensor_constant53": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_26": "PTBatchNormMetatype",
+ "getitem_78": "PTGatherMetatype",
+ "getitem_79": "PTGatherMetatype",
+ "getitem_80": "PTGatherMetatype",
+ "_param_constant109": "PTConstNoopMetatype",
+ "conv2d_41": "PTConv2dMetatype",
+ "empty_27": "UnknownMetatype",
+ "_param_constant110": "PTConstNoopMetatype",
+ "_param_constant111": "PTConstNoopMetatype",
+ "_tensor_constant54": "PTConstNoopMetatype",
+ "_tensor_constant55": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_27": "PTBatchNormMetatype",
+ "getitem_81": "PTGatherMetatype",
+ "getitem_82": "PTGatherMetatype",
+ "getitem_83": "PTGatherMetatype",
+ "hardswish__13": "PTHardSwishMetatype",
+ "_param_constant112": "PTConstNoopMetatype",
+ "conv2d_42": "PTDepthwiseConv2dSubtype",
+ "empty_28": "UnknownMetatype",
+ "_param_constant113": "PTConstNoopMetatype",
+ "_param_constant114": "PTConstNoopMetatype",
+ "_tensor_constant56": "PTConstNoopMetatype",
+ "_tensor_constant57": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_28": "PTBatchNormMetatype",
+ "getitem_84": "PTGatherMetatype",
+ "getitem_85": "PTGatherMetatype",
+ "getitem_86": "PTGatherMetatype",
+ "hardswish__14": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_7": "PTAvgPool2dMetatype",
+ "_param_constant115": "PTConstNoopMetatype",
+ "_param_constant116": "PTConstNoopMetatype",
+ "conv2d_43": "PTConv2dMetatype",
+ "relu_7": "PTRELUMetatype",
+ "_param_constant117": "PTConstNoopMetatype",
+ "_param_constant118": "PTConstNoopMetatype",
+ "conv2d_44": "PTConv2dMetatype",
+ "hardsigmoid_7": "PTHardSigmoidMetatype",
+ "mul_7": "PTMulMetatype",
+ "_param_constant119": "PTConstNoopMetatype",
+ "conv2d_45": "PTConv2dMetatype",
+ "empty_29": "UnknownMetatype",
+ "_param_constant120": "PTConstNoopMetatype",
+ "_param_constant121": "PTConstNoopMetatype",
+ "_tensor_constant58": "PTConstNoopMetatype",
+ "_tensor_constant59": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_29": "PTBatchNormMetatype",
+ "getitem_87": "PTGatherMetatype",
+ "getitem_88": "PTGatherMetatype",
+ "getitem_89": "PTGatherMetatype",
+ "add__4": "PTAddMetatype",
+ "_param_constant122": "PTConstNoopMetatype",
+ "conv2d_46": "PTConv2dMetatype",
+ "empty_30": "UnknownMetatype",
+ "_param_constant123": "PTConstNoopMetatype",
+ "_param_constant124": "PTConstNoopMetatype",
+ "_tensor_constant60": "PTConstNoopMetatype",
+ "_tensor_constant61": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_30": "PTBatchNormMetatype",
+ "getitem_90": "PTGatherMetatype",
+ "getitem_91": "PTGatherMetatype",
+ "getitem_92": "PTGatherMetatype",
+ "hardswish__15": "PTHardSwishMetatype",
+ "_param_constant125": "PTConstNoopMetatype",
+ "conv2d_47": "PTDepthwiseConv2dSubtype",
+ "empty_31": "UnknownMetatype",
+ "_param_constant126": "PTConstNoopMetatype",
+ "_param_constant127": "PTConstNoopMetatype",
+ "_tensor_constant62": "PTConstNoopMetatype",
+ "_tensor_constant63": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_31": "PTBatchNormMetatype",
+ "getitem_93": "PTGatherMetatype",
+ "getitem_94": "PTGatherMetatype",
+ "getitem_95": "PTGatherMetatype",
+ "hardswish__16": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_8": "PTAvgPool2dMetatype",
+ "_param_constant128": "PTConstNoopMetatype",
+ "_param_constant129": "PTConstNoopMetatype",
+ "conv2d_48": "PTConv2dMetatype",
+ "relu_8": "PTRELUMetatype",
+ "_param_constant130": "PTConstNoopMetatype",
+ "_param_constant131": "PTConstNoopMetatype",
+ "conv2d_49": "PTConv2dMetatype",
+ "hardsigmoid_8": "PTHardSigmoidMetatype",
+ "mul_8": "PTMulMetatype",
+ "_param_constant132": "PTConstNoopMetatype",
+ "conv2d_50": "PTConv2dMetatype",
+ "empty_32": "UnknownMetatype",
+ "_param_constant133": "PTConstNoopMetatype",
+ "_param_constant134": "PTConstNoopMetatype",
+ "_tensor_constant64": "PTConstNoopMetatype",
+ "_tensor_constant65": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_32": "PTBatchNormMetatype",
+ "getitem_96": "PTGatherMetatype",
+ "getitem_97": "PTGatherMetatype",
+ "getitem_98": "PTGatherMetatype",
+ "add__5": "PTAddMetatype",
+ "_param_constant135": "PTConstNoopMetatype",
+ "conv2d_51": "PTConv2dMetatype",
+ "empty_33": "UnknownMetatype",
+ "_param_constant136": "PTConstNoopMetatype",
+ "_param_constant137": "PTConstNoopMetatype",
+ "_tensor_constant66": "PTConstNoopMetatype",
+ "_tensor_constant67": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_33": "PTBatchNormMetatype",
+ "getitem_99": "PTGatherMetatype",
+ "getitem_100": "PTGatherMetatype",
+ "getitem_101": "PTGatherMetatype",
+ "hardswish__17": "PTHardSwishMetatype",
+ "adaptive_avg_pool2d_9": "PTAvgPool2dMetatype",
+ "flatten": "PTReshapeMetatype",
+ "_param_constant138": "PTConstNoopMetatype",
+ "_param_constant139": "PTConstNoopMetatype",
+ "linear": "PTLinearMetatype",
+ "hardswish__18": "PTHardSwishMetatype",
+ "dropout_": "PTDropoutMetatype",
+ "_param_constant140": "PTConstNoopMetatype",
+ "_param_constant141": "PTConstNoopMetatype",
+ "linear_1": "PTLinearMetatype",
+ "output": "PTOutputNoopMetatype"
+}
\ No newline at end of file
diff --git a/tests/torch/data/reference_graphs/fx/reference_metatypes/resnet18.json b/tests/torch/data/reference_graphs/fx/reference_metatypes/resnet18.json
new file mode 100644
index 00000000000..1ae38c3acae
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/reference_metatypes/resnet18.json
@@ -0,0 +1,255 @@
+{
+ "arg0_1": "PTInputNoopMetatype",
+ "_param_constant0": "PTConstNoopMetatype",
+ "conv2d": "PTConv2dMetatype",
+ "empty": "UnknownMetatype",
+ "_param_constant1": "PTConstNoopMetatype",
+ "_param_constant2": "PTConstNoopMetatype",
+ "_tensor_constant0": "PTConstNoopMetatype",
+ "_tensor_constant1": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training": "PTBatchNormMetatype",
+ "getitem": "PTGatherMetatype",
+ "getitem_1": "PTGatherMetatype",
+ "getitem_2": "PTGatherMetatype",
+ "relu_": "PTRELUMetatype",
+ "max_pool2d": "PTMaxPool2dMetatype",
+ "_param_constant3": "PTConstNoopMetatype",
+ "conv2d_1": "PTConv2dMetatype",
+ "empty_1": "UnknownMetatype",
+ "_param_constant4": "PTConstNoopMetatype",
+ "_param_constant5": "PTConstNoopMetatype",
+ "_tensor_constant2": "PTConstNoopMetatype",
+ "_tensor_constant3": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_1": "PTBatchNormMetatype",
+ "getitem_3": "PTGatherMetatype",
+ "getitem_4": "PTGatherMetatype",
+ "getitem_5": "PTGatherMetatype",
+ "relu__1": "PTRELUMetatype",
+ "_param_constant6": "PTConstNoopMetatype",
+ "conv2d_2": "PTConv2dMetatype",
+ "empty_2": "UnknownMetatype",
+ "_param_constant7": "PTConstNoopMetatype",
+ "_param_constant8": "PTConstNoopMetatype",
+ "_tensor_constant4": "PTConstNoopMetatype",
+ "_tensor_constant5": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_2": "PTBatchNormMetatype",
+ "getitem_6": "PTGatherMetatype",
+ "getitem_7": "PTGatherMetatype",
+ "getitem_8": "PTGatherMetatype",
+ "add_": "PTAddMetatype",
+ "relu__2": "PTRELUMetatype",
+ "_param_constant9": "PTConstNoopMetatype",
+ "conv2d_3": "PTConv2dMetatype",
+ "empty_3": "UnknownMetatype",
+ "_param_constant10": "PTConstNoopMetatype",
+ "_param_constant11": "PTConstNoopMetatype",
+ "_tensor_constant6": "PTConstNoopMetatype",
+ "_tensor_constant7": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_3": "PTBatchNormMetatype",
+ "getitem_9": "PTGatherMetatype",
+ "getitem_10": "PTGatherMetatype",
+ "getitem_11": "PTGatherMetatype",
+ "relu__3": "PTRELUMetatype",
+ "_param_constant12": "PTConstNoopMetatype",
+ "conv2d_4": "PTConv2dMetatype",
+ "empty_4": "UnknownMetatype",
+ "_param_constant13": "PTConstNoopMetatype",
+ "_param_constant14": "PTConstNoopMetatype",
+ "_tensor_constant8": "PTConstNoopMetatype",
+ "_tensor_constant9": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_4": "PTBatchNormMetatype",
+ "getitem_12": "PTGatherMetatype",
+ "getitem_13": "PTGatherMetatype",
+ "getitem_14": "PTGatherMetatype",
+ "add__1": "PTAddMetatype",
+ "relu__4": "PTRELUMetatype",
+ "_param_constant15": "PTConstNoopMetatype",
+ "conv2d_5": "PTConv2dMetatype",
+ "empty_5": "UnknownMetatype",
+ "_param_constant16": "PTConstNoopMetatype",
+ "_param_constant17": "PTConstNoopMetatype",
+ "_tensor_constant10": "PTConstNoopMetatype",
+ "_tensor_constant11": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_5": "PTBatchNormMetatype",
+ "getitem_15": "PTGatherMetatype",
+ "getitem_16": "PTGatherMetatype",
+ "getitem_17": "PTGatherMetatype",
+ "relu__5": "PTRELUMetatype",
+ "_param_constant18": "PTConstNoopMetatype",
+ "conv2d_6": "PTConv2dMetatype",
+ "empty_6": "UnknownMetatype",
+ "_param_constant19": "PTConstNoopMetatype",
+ "_param_constant20": "PTConstNoopMetatype",
+ "_tensor_constant12": "PTConstNoopMetatype",
+ "_tensor_constant13": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_6": "PTBatchNormMetatype",
+ "getitem_18": "PTGatherMetatype",
+ "getitem_19": "PTGatherMetatype",
+ "getitem_20": "PTGatherMetatype",
+ "_param_constant21": "PTConstNoopMetatype",
+ "conv2d_7": "PTConv2dMetatype",
+ "empty_7": "UnknownMetatype",
+ "_param_constant22": "PTConstNoopMetatype",
+ "_param_constant23": "PTConstNoopMetatype",
+ "_tensor_constant14": "PTConstNoopMetatype",
+ "_tensor_constant15": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_7": "PTBatchNormMetatype",
+ "getitem_21": "PTGatherMetatype",
+ "getitem_22": "PTGatherMetatype",
+ "getitem_23": "PTGatherMetatype",
+ "add__2": "PTAddMetatype",
+ "relu__6": "PTRELUMetatype",
+ "_param_constant24": "PTConstNoopMetatype",
+ "conv2d_8": "PTConv2dMetatype",
+ "empty_8": "UnknownMetatype",
+ "_param_constant25": "PTConstNoopMetatype",
+ "_param_constant26": "PTConstNoopMetatype",
+ "_tensor_constant16": "PTConstNoopMetatype",
+ "_tensor_constant17": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_8": "PTBatchNormMetatype",
+ "getitem_24": "PTGatherMetatype",
+ "getitem_25": "PTGatherMetatype",
+ "getitem_26": "PTGatherMetatype",
+ "relu__7": "PTRELUMetatype",
+ "_param_constant27": "PTConstNoopMetatype",
+ "conv2d_9": "PTConv2dMetatype",
+ "empty_9": "UnknownMetatype",
+ "_param_constant28": "PTConstNoopMetatype",
+ "_param_constant29": "PTConstNoopMetatype",
+ "_tensor_constant18": "PTConstNoopMetatype",
+ "_tensor_constant19": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_9": "PTBatchNormMetatype",
+ "getitem_27": "PTGatherMetatype",
+ "getitem_28": "PTGatherMetatype",
+ "getitem_29": "PTGatherMetatype",
+ "add__3": "PTAddMetatype",
+ "relu__8": "PTRELUMetatype",
+ "_param_constant30": "PTConstNoopMetatype",
+ "conv2d_10": "PTConv2dMetatype",
+ "empty_10": "UnknownMetatype",
+ "_param_constant31": "PTConstNoopMetatype",
+ "_param_constant32": "PTConstNoopMetatype",
+ "_tensor_constant20": "PTConstNoopMetatype",
+ "_tensor_constant21": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_10": "PTBatchNormMetatype",
+ "getitem_30": "PTGatherMetatype",
+ "getitem_31": "PTGatherMetatype",
+ "getitem_32": "PTGatherMetatype",
+ "relu__9": "PTRELUMetatype",
+ "_param_constant33": "PTConstNoopMetatype",
+ "conv2d_11": "PTConv2dMetatype",
+ "empty_11": "UnknownMetatype",
+ "_param_constant34": "PTConstNoopMetatype",
+ "_param_constant35": "PTConstNoopMetatype",
+ "_tensor_constant22": "PTConstNoopMetatype",
+ "_tensor_constant23": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_11": "PTBatchNormMetatype",
+ "getitem_33": "PTGatherMetatype",
+ "getitem_34": "PTGatherMetatype",
+ "getitem_35": "PTGatherMetatype",
+ "_param_constant36": "PTConstNoopMetatype",
+ "conv2d_12": "PTConv2dMetatype",
+ "empty_12": "UnknownMetatype",
+ "_param_constant37": "PTConstNoopMetatype",
+ "_param_constant38": "PTConstNoopMetatype",
+ "_tensor_constant24": "PTConstNoopMetatype",
+ "_tensor_constant25": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_12": "PTBatchNormMetatype",
+ "getitem_36": "PTGatherMetatype",
+ "getitem_37": "PTGatherMetatype",
+ "getitem_38": "PTGatherMetatype",
+ "add__4": "PTAddMetatype",
+ "relu__10": "PTRELUMetatype",
+ "_param_constant39": "PTConstNoopMetatype",
+ "conv2d_13": "PTConv2dMetatype",
+ "empty_13": "UnknownMetatype",
+ "_param_constant40": "PTConstNoopMetatype",
+ "_param_constant41": "PTConstNoopMetatype",
+ "_tensor_constant26": "PTConstNoopMetatype",
+ "_tensor_constant27": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_13": "PTBatchNormMetatype",
+ "getitem_39": "PTGatherMetatype",
+ "getitem_40": "PTGatherMetatype",
+ "getitem_41": "PTGatherMetatype",
+ "relu__11": "PTRELUMetatype",
+ "_param_constant42": "PTConstNoopMetatype",
+ "conv2d_14": "PTConv2dMetatype",
+ "empty_14": "UnknownMetatype",
+ "_param_constant43": "PTConstNoopMetatype",
+ "_param_constant44": "PTConstNoopMetatype",
+ "_tensor_constant28": "PTConstNoopMetatype",
+ "_tensor_constant29": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_14": "PTBatchNormMetatype",
+ "getitem_42": "PTGatherMetatype",
+ "getitem_43": "PTGatherMetatype",
+ "getitem_44": "PTGatherMetatype",
+ "add__5": "PTAddMetatype",
+ "relu__12": "PTRELUMetatype",
+ "_param_constant45": "PTConstNoopMetatype",
+ "conv2d_15": "PTConv2dMetatype",
+ "empty_15": "UnknownMetatype",
+ "_param_constant46": "PTConstNoopMetatype",
+ "_param_constant47": "PTConstNoopMetatype",
+ "_tensor_constant30": "PTConstNoopMetatype",
+ "_tensor_constant31": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_15": "PTBatchNormMetatype",
+ "getitem_45": "PTGatherMetatype",
+ "getitem_46": "PTGatherMetatype",
+ "getitem_47": "PTGatherMetatype",
+ "relu__13": "PTRELUMetatype",
+ "_param_constant48": "PTConstNoopMetatype",
+ "conv2d_16": "PTConv2dMetatype",
+ "empty_16": "UnknownMetatype",
+ "_param_constant49": "PTConstNoopMetatype",
+ "_param_constant50": "PTConstNoopMetatype",
+ "_tensor_constant32": "PTConstNoopMetatype",
+ "_tensor_constant33": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_16": "PTBatchNormMetatype",
+ "getitem_48": "PTGatherMetatype",
+ "getitem_49": "PTGatherMetatype",
+ "getitem_50": "PTGatherMetatype",
+ "_param_constant51": "PTConstNoopMetatype",
+ "conv2d_17": "PTConv2dMetatype",
+ "empty_17": "UnknownMetatype",
+ "_param_constant52": "PTConstNoopMetatype",
+ "_param_constant53": "PTConstNoopMetatype",
+ "_tensor_constant34": "PTConstNoopMetatype",
+ "_tensor_constant35": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_17": "PTBatchNormMetatype",
+ "getitem_51": "PTGatherMetatype",
+ "getitem_52": "PTGatherMetatype",
+ "getitem_53": "PTGatherMetatype",
+ "add__6": "PTAddMetatype",
+ "relu__14": "PTRELUMetatype",
+ "_param_constant54": "PTConstNoopMetatype",
+ "conv2d_18": "PTConv2dMetatype",
+ "empty_18": "UnknownMetatype",
+ "_param_constant55": "PTConstNoopMetatype",
+ "_param_constant56": "PTConstNoopMetatype",
+ "_tensor_constant36": "PTConstNoopMetatype",
+ "_tensor_constant37": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_18": "PTBatchNormMetatype",
+ "getitem_54": "PTGatherMetatype",
+ "getitem_55": "PTGatherMetatype",
+ "getitem_56": "PTGatherMetatype",
+ "relu__15": "PTRELUMetatype",
+ "_param_constant57": "PTConstNoopMetatype",
+ "conv2d_19": "PTConv2dMetatype",
+ "empty_19": "UnknownMetatype",
+ "_param_constant58": "PTConstNoopMetatype",
+ "_param_constant59": "PTConstNoopMetatype",
+ "_tensor_constant38": "PTConstNoopMetatype",
+ "_tensor_constant39": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_19": "PTBatchNormMetatype",
+ "getitem_57": "PTGatherMetatype",
+ "getitem_58": "PTGatherMetatype",
+ "getitem_59": "PTGatherMetatype",
+ "add__7": "PTAddMetatype",
+ "relu__16": "PTRELUMetatype",
+ "adaptive_avg_pool2d": "PTAvgPool2dMetatype",
+ "flatten": "PTReshapeMetatype",
+ "_param_constant60": "PTConstNoopMetatype",
+ "_param_constant61": "PTConstNoopMetatype",
+ "linear": "PTLinearMetatype",
+ "output": "PTOutputNoopMetatype"
+}
\ No newline at end of file
diff --git a/tests/torch/data/reference_graphs/fx/reference_metatypes/swin_v2_s.json b/tests/torch/data/reference_graphs/fx/reference_metatypes/swin_v2_s.json
new file mode 100644
index 00000000000..6f038197c8e
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/reference_metatypes/swin_v2_s.json
@@ -0,0 +1,2684 @@
+{
+ "arg0_1": "PTInputNoopMetatype",
+ "_param_constant0": "PTConstNoopMetatype",
+ "_param_constant1": "PTConstNoopMetatype",
+ "conv2d": "PTConv2dMetatype",
+ "permute": "PTTransposeMetatype",
+ "_param_constant2": "PTConstNoopMetatype",
+ "_param_constant3": "PTConstNoopMetatype",
+ "layer_norm": "PTLayerNormMetatype",
+ "_tensor_constant0": "PTConstNoopMetatype",
+ "_param_constant4": "PTConstNoopMetatype",
+ "_param_constant5": "PTConstNoopMetatype",
+ "linear": "PTLinearMetatype",
+ "relu_": "PTRELUMetatype",
+ "_param_constant6": "PTConstNoopMetatype",
+ "linear_1": "PTLinearMetatype",
+ "view": "PTReshapeMetatype",
+ "_tensor_constant1": "PTConstNoopMetatype",
+ "index": "UnknownMetatype",
+ "view_1": "PTReshapeMetatype",
+ "permute_1": "PTTransposeMetatype",
+ "contiguous": "PTNoopMetatype",
+ "unsqueeze": "PTReshapeMetatype",
+ "sigmoid": "PTSigmoidMetatype",
+ "mul": "PTMulMetatype",
+ "pad": "PTPadMetatype",
+ "view_2": "PTReshapeMetatype",
+ "permute_2": "PTTransposeMetatype",
+ "reshape": "PTReshapeMetatype",
+ "_param_constant7": "PTConstNoopMetatype",
+ "clone": "PTNoopMetatype",
+ "slice_1": "PTGatherMetatype",
+ "zero_": "UnknownMetatype",
+ "_param_constant8": "PTConstNoopMetatype",
+ "linear_2": "PTLinearMetatype",
+ "reshape_1": "PTReshapeMetatype",
+ "permute_3": "PTTransposeMetatype",
+ "select": "PTGatherMetatype",
+ "select_1": "PTGatherMetatype",
+ "select_2": "PTGatherMetatype",
+ "linalg_vector_norm": "UnknownMetatype",
+ "clamp_min": "UnknownMetatype",
+ "expand_as": "PTExpandAsMetatype",
+ "div": "PTDivMetatype",
+ "linalg_vector_norm_1": "UnknownMetatype",
+ "clamp_min_1": "UnknownMetatype",
+ "expand_as_1": "PTExpandAsMetatype",
+ "div_1": "PTDivMetatype",
+ "transpose": "PTTransposeMetatype",
+ "matmul": "PTMatMulMetatype",
+ "_param_constant9": "PTConstNoopMetatype",
+ "clamp": "UnknownMetatype",
+ "exp": "PTExpMetatype",
+ "mul_1": "PTMulMetatype",
+ "add": "PTAddMetatype",
+ "softmax": "PTSoftmaxMetatype",
+ "dropout": "PTDropoutMetatype",
+ "matmul_1": "PTMatMulMetatype",
+ "transpose_1": "PTTransposeMetatype",
+ "reshape_2": "PTReshapeMetatype",
+ "_param_constant10": "PTConstNoopMetatype",
+ "_param_constant11": "PTConstNoopMetatype",
+ "linear_3": "PTLinearMetatype",
+ "dropout_1": "PTDropoutMetatype",
+ "view_3": "PTReshapeMetatype",
+ "permute_4": "PTTransposeMetatype",
+ "reshape_3": "PTReshapeMetatype",
+ "slice_2": "PTGatherMetatype",
+ "slice_3": "PTGatherMetatype",
+ "_param_constant12": "PTConstNoopMetatype",
+ "_param_constant13": "PTConstNoopMetatype",
+ "layer_norm_1": "PTLayerNormMetatype",
+ "add_1": "PTAddMetatype",
+ "_param_constant14": "PTConstNoopMetatype",
+ "_param_constant15": "PTConstNoopMetatype",
+ "linear_4": "PTLinearMetatype",
+ "gelu": "PTGELUMetatype",
+ "dropout_2": "PTDropoutMetatype",
+ "_param_constant16": "PTConstNoopMetatype",
+ "_param_constant17": "PTConstNoopMetatype",
+ "linear_5": "PTLinearMetatype",
+ "dropout_3": "PTDropoutMetatype",
+ "_param_constant18": "PTConstNoopMetatype",
+ "_param_constant19": "PTConstNoopMetatype",
+ "layer_norm_2": "PTLayerNormMetatype",
+ "add_2": "PTAddMetatype",
+ "_tensor_constant2": "PTConstNoopMetatype",
+ "_param_constant20": "PTConstNoopMetatype",
+ "_param_constant21": "PTConstNoopMetatype",
+ "linear_6": "PTLinearMetatype",
+ "relu__1": "PTRELUMetatype",
+ "_param_constant22": "PTConstNoopMetatype",
+ "linear_7": "PTLinearMetatype",
+ "view_4": "PTReshapeMetatype",
+ "_tensor_constant3": "PTConstNoopMetatype",
+ "index_1": "UnknownMetatype",
+ "view_5": "PTReshapeMetatype",
+ "permute_5": "PTTransposeMetatype",
+ "contiguous_1": "PTNoopMetatype",
+ "unsqueeze_1": "PTReshapeMetatype",
+ "sigmoid_1": "PTSigmoidMetatype",
+ "mul_2": "PTMulMetatype",
+ "pad_1": "PTPadMetatype",
+ "roll": "UnknownMetatype",
+ "view_6": "PTReshapeMetatype",
+ "permute_6": "PTTransposeMetatype",
+ "reshape_4": "PTReshapeMetatype",
+ "_param_constant23": "PTConstNoopMetatype",
+ "clone_1": "PTNoopMetatype",
+ "slice_4": "PTGatherMetatype",
+ "zero__1": "UnknownMetatype",
+ "_param_constant24": "PTConstNoopMetatype",
+ "linear_8": "PTLinearMetatype",
+ "reshape_5": "PTReshapeMetatype",
+ "permute_7": "PTTransposeMetatype",
+ "select_3": "PTGatherMetatype",
+ "select_4": "PTGatherMetatype",
+ "select_5": "PTGatherMetatype",
+ "linalg_vector_norm_2": "UnknownMetatype",
+ "clamp_min_2": "UnknownMetatype",
+ "expand_as_2": "PTExpandAsMetatype",
+ "div_2": "PTDivMetatype",
+ "linalg_vector_norm_3": "UnknownMetatype",
+ "clamp_min_3": "UnknownMetatype",
+ "expand_as_3": "PTExpandAsMetatype",
+ "div_3": "PTDivMetatype",
+ "transpose_2": "PTTransposeMetatype",
+ "matmul_2": "PTMatMulMetatype",
+ "_param_constant25": "PTConstNoopMetatype",
+ "clamp_1": "UnknownMetatype",
+ "exp_1": "PTExpMetatype",
+ "mul_3": "PTMulMetatype",
+ "add_3": "PTAddMetatype",
+ "new_zeros": "UnknownMetatype",
+ "_tensor_constant4": "PTConstNoopMetatype",
+ "lift_fresh_copy": "UnknownMetatype",
+ "slice_5": "PTGatherMetatype",
+ "slice_6": "PTGatherMetatype",
+ "fill_": "UnknownMetatype",
+ "_tensor_constant5": "PTConstNoopMetatype",
+ "lift_fresh_copy_1": "UnknownMetatype",
+ "slice_7": "PTGatherMetatype",
+ "slice_8": "PTGatherMetatype",
+ "fill__1": "UnknownMetatype",
+ "_tensor_constant6": "PTConstNoopMetatype",
+ "lift_fresh_copy_2": "UnknownMetatype",
+ "slice_9": "PTGatherMetatype",
+ "slice_10": "PTGatherMetatype",
+ "fill__2": "UnknownMetatype",
+ "_tensor_constant7": "PTConstNoopMetatype",
+ "lift_fresh_copy_3": "UnknownMetatype",
+ "slice_11": "PTGatherMetatype",
+ "slice_12": "PTGatherMetatype",
+ "fill__3": "UnknownMetatype",
+ "_tensor_constant8": "PTConstNoopMetatype",
+ "lift_fresh_copy_4": "UnknownMetatype",
+ "slice_13": "PTGatherMetatype",
+ "slice_14": "PTGatherMetatype",
+ "fill__4": "UnknownMetatype",
+ "_tensor_constant9": "PTConstNoopMetatype",
+ "lift_fresh_copy_5": "UnknownMetatype",
+ "slice_15": "PTGatherMetatype",
+ "slice_16": "PTGatherMetatype",
+ "fill__5": "UnknownMetatype",
+ "_tensor_constant10": "PTConstNoopMetatype",
+ "lift_fresh_copy_6": "UnknownMetatype",
+ "slice_17": "PTGatherMetatype",
+ "slice_18": "PTGatherMetatype",
+ "fill__6": "UnknownMetatype",
+ "_tensor_constant11": "PTConstNoopMetatype",
+ "lift_fresh_copy_7": "UnknownMetatype",
+ "slice_19": "PTGatherMetatype",
+ "slice_20": "PTGatherMetatype",
+ "fill__7": "UnknownMetatype",
+ "_tensor_constant12": "PTConstNoopMetatype",
+ "lift_fresh_copy_8": "UnknownMetatype",
+ "slice_21": "PTGatherMetatype",
+ "slice_22": "PTGatherMetatype",
+ "fill__8": "UnknownMetatype",
+ "view_7": "PTReshapeMetatype",
+ "permute_8": "PTTransposeMetatype",
+ "reshape_6": "PTReshapeMetatype",
+ "unsqueeze_2": "PTReshapeMetatype",
+ "unsqueeze_3": "PTReshapeMetatype",
+ "sub": "PTSubMetatype",
+ "ne": "UnknownMetatype",
+ "masked_fill": "PTScatterMetatype",
+ "eq": "UnknownMetatype",
+ "masked_fill_1": "PTScatterMetatype",
+ "view_8": "PTReshapeMetatype",
+ "unsqueeze_4": "PTReshapeMetatype",
+ "unsqueeze_5": "PTReshapeMetatype",
+ "add_4": "PTAddMetatype",
+ "view_9": "PTReshapeMetatype",
+ "softmax_1": "PTSoftmaxMetatype",
+ "dropout_4": "PTDropoutMetatype",
+ "matmul_3": "PTMatMulMetatype",
+ "transpose_3": "PTTransposeMetatype",
+ "reshape_7": "PTReshapeMetatype",
+ "_param_constant26": "PTConstNoopMetatype",
+ "_param_constant27": "PTConstNoopMetatype",
+ "linear_9": "PTLinearMetatype",
+ "dropout_5": "PTDropoutMetatype",
+ "view_10": "PTReshapeMetatype",
+ "permute_9": "PTTransposeMetatype",
+ "reshape_8": "PTReshapeMetatype",
+ "roll_1": "UnknownMetatype",
+ "slice_23": "PTGatherMetatype",
+ "slice_24": "PTGatherMetatype",
+ "_param_constant28": "PTConstNoopMetatype",
+ "_param_constant29": "PTConstNoopMetatype",
+ "layer_norm_3": "PTLayerNormMetatype",
+ "add_5": "PTAddMetatype",
+ "_param_constant30": "PTConstNoopMetatype",
+ "_param_constant31": "PTConstNoopMetatype",
+ "linear_10": "PTLinearMetatype",
+ "gelu_1": "PTGELUMetatype",
+ "dropout_6": "PTDropoutMetatype",
+ "_param_constant32": "PTConstNoopMetatype",
+ "_param_constant33": "PTConstNoopMetatype",
+ "linear_11": "PTLinearMetatype",
+ "dropout_7": "PTDropoutMetatype",
+ "_param_constant34": "PTConstNoopMetatype",
+ "_param_constant35": "PTConstNoopMetatype",
+ "layer_norm_4": "PTLayerNormMetatype",
+ "add_6": "PTAddMetatype",
+ "pad_2": "PTPadMetatype",
+ "slice_25": "PTGatherMetatype",
+ "slice_26": "PTGatherMetatype",
+ "slice_27": "PTGatherMetatype",
+ "slice_28": "PTGatherMetatype",
+ "slice_29": "PTGatherMetatype",
+ "slice_30": "PTGatherMetatype",
+ "slice_31": "PTGatherMetatype",
+ "slice_32": "PTGatherMetatype",
+ "slice_33": "PTGatherMetatype",
+ "slice_34": "PTGatherMetatype",
+ "slice_35": "PTGatherMetatype",
+ "slice_36": "PTGatherMetatype",
+ "cat": "PTCatMetatype",
+ "_param_constant36": "PTConstNoopMetatype",
+ "linear_12": "PTLinearMetatype",
+ "_param_constant37": "PTConstNoopMetatype",
+ "_param_constant38": "PTConstNoopMetatype",
+ "layer_norm_5": "PTLayerNormMetatype",
+ "_tensor_constant13": "PTConstNoopMetatype",
+ "_param_constant39": "PTConstNoopMetatype",
+ "_param_constant40": "PTConstNoopMetatype",
+ "linear_13": "PTLinearMetatype",
+ "relu__2": "PTRELUMetatype",
+ "_param_constant41": "PTConstNoopMetatype",
+ "linear_14": "PTLinearMetatype",
+ "view_11": "PTReshapeMetatype",
+ "_tensor_constant14": "PTConstNoopMetatype",
+ "index_2": "UnknownMetatype",
+ "view_12": "PTReshapeMetatype",
+ "permute_10": "PTTransposeMetatype",
+ "contiguous_2": "PTNoopMetatype",
+ "unsqueeze_6": "PTReshapeMetatype",
+ "sigmoid_2": "PTSigmoidMetatype",
+ "mul_4": "PTMulMetatype",
+ "pad_3": "PTPadMetatype",
+ "view_13": "PTReshapeMetatype",
+ "permute_11": "PTTransposeMetatype",
+ "reshape_9": "PTReshapeMetatype",
+ "_param_constant42": "PTConstNoopMetatype",
+ "clone_2": "PTNoopMetatype",
+ "slice_37": "PTGatherMetatype",
+ "zero__2": "UnknownMetatype",
+ "_param_constant43": "PTConstNoopMetatype",
+ "linear_15": "PTLinearMetatype",
+ "reshape_10": "PTReshapeMetatype",
+ "permute_12": "PTTransposeMetatype",
+ "select_6": "PTGatherMetatype",
+ "select_7": "PTGatherMetatype",
+ "select_8": "PTGatherMetatype",
+ "linalg_vector_norm_4": "UnknownMetatype",
+ "clamp_min_4": "UnknownMetatype",
+ "expand_as_4": "PTExpandAsMetatype",
+ "div_4": "PTDivMetatype",
+ "linalg_vector_norm_5": "UnknownMetatype",
+ "clamp_min_5": "UnknownMetatype",
+ "expand_as_5": "PTExpandAsMetatype",
+ "div_5": "PTDivMetatype",
+ "transpose_4": "PTTransposeMetatype",
+ "matmul_4": "PTMatMulMetatype",
+ "_param_constant44": "PTConstNoopMetatype",
+ "clamp_2": "UnknownMetatype",
+ "exp_2": "PTExpMetatype",
+ "mul_5": "PTMulMetatype",
+ "add_7": "PTAddMetatype",
+ "softmax_2": "PTSoftmaxMetatype",
+ "dropout_8": "PTDropoutMetatype",
+ "matmul_5": "PTMatMulMetatype",
+ "transpose_5": "PTTransposeMetatype",
+ "reshape_11": "PTReshapeMetatype",
+ "_param_constant45": "PTConstNoopMetatype",
+ "_param_constant46": "PTConstNoopMetatype",
+ "linear_16": "PTLinearMetatype",
+ "dropout_9": "PTDropoutMetatype",
+ "view_14": "PTReshapeMetatype",
+ "permute_13": "PTTransposeMetatype",
+ "reshape_12": "PTReshapeMetatype",
+ "slice_38": "PTGatherMetatype",
+ "slice_39": "PTGatherMetatype",
+ "slice_40": "PTGatherMetatype",
+ "slice_41": "PTGatherMetatype",
+ "contiguous_3": "PTNoopMetatype",
+ "_param_constant47": "PTConstNoopMetatype",
+ "_param_constant48": "PTConstNoopMetatype",
+ "layer_norm_6": "PTLayerNormMetatype",
+ "add_8": "PTAddMetatype",
+ "_param_constant49": "PTConstNoopMetatype",
+ "_param_constant50": "PTConstNoopMetatype",
+ "linear_17": "PTLinearMetatype",
+ "gelu_2": "PTGELUMetatype",
+ "dropout_10": "PTDropoutMetatype",
+ "_param_constant51": "PTConstNoopMetatype",
+ "_param_constant52": "PTConstNoopMetatype",
+ "linear_18": "PTLinearMetatype",
+ "dropout_11": "PTDropoutMetatype",
+ "_param_constant53": "PTConstNoopMetatype",
+ "_param_constant54": "PTConstNoopMetatype",
+ "layer_norm_7": "PTLayerNormMetatype",
+ "add_9": "PTAddMetatype",
+ "_tensor_constant15": "PTConstNoopMetatype",
+ "_param_constant55": "PTConstNoopMetatype",
+ "_param_constant56": "PTConstNoopMetatype",
+ "linear_19": "PTLinearMetatype",
+ "relu__3": "PTRELUMetatype",
+ "_param_constant57": "PTConstNoopMetatype",
+ "linear_20": "PTLinearMetatype",
+ "view_15": "PTReshapeMetatype",
+ "_tensor_constant16": "PTConstNoopMetatype",
+ "index_3": "UnknownMetatype",
+ "view_16": "PTReshapeMetatype",
+ "permute_14": "PTTransposeMetatype",
+ "contiguous_4": "PTNoopMetatype",
+ "unsqueeze_7": "PTReshapeMetatype",
+ "sigmoid_3": "PTSigmoidMetatype",
+ "mul_6": "PTMulMetatype",
+ "pad_4": "PTPadMetatype",
+ "roll_2": "UnknownMetatype",
+ "view_17": "PTReshapeMetatype",
+ "permute_15": "PTTransposeMetatype",
+ "reshape_13": "PTReshapeMetatype",
+ "_param_constant58": "PTConstNoopMetatype",
+ "clone_3": "PTNoopMetatype",
+ "slice_42": "PTGatherMetatype",
+ "zero__3": "UnknownMetatype",
+ "_param_constant59": "PTConstNoopMetatype",
+ "linear_21": "PTLinearMetatype",
+ "reshape_14": "PTReshapeMetatype",
+ "permute_16": "PTTransposeMetatype",
+ "select_9": "PTGatherMetatype",
+ "select_10": "PTGatherMetatype",
+ "select_11": "PTGatherMetatype",
+ "linalg_vector_norm_6": "UnknownMetatype",
+ "clamp_min_6": "UnknownMetatype",
+ "expand_as_6": "PTExpandAsMetatype",
+ "div_6": "PTDivMetatype",
+ "linalg_vector_norm_7": "UnknownMetatype",
+ "clamp_min_7": "UnknownMetatype",
+ "expand_as_7": "PTExpandAsMetatype",
+ "div_7": "PTDivMetatype",
+ "transpose_6": "PTTransposeMetatype",
+ "matmul_6": "PTMatMulMetatype",
+ "_param_constant60": "PTConstNoopMetatype",
+ "clamp_3": "UnknownMetatype",
+ "exp_3": "PTExpMetatype",
+ "mul_7": "PTMulMetatype",
+ "add_10": "PTAddMetatype",
+ "new_zeros_1": "UnknownMetatype",
+ "_tensor_constant17": "PTConstNoopMetatype",
+ "lift_fresh_copy_9": "UnknownMetatype",
+ "slice_43": "PTGatherMetatype",
+ "slice_44": "PTGatherMetatype",
+ "fill__9": "UnknownMetatype",
+ "_tensor_constant18": "PTConstNoopMetatype",
+ "lift_fresh_copy_10": "UnknownMetatype",
+ "slice_45": "PTGatherMetatype",
+ "slice_46": "PTGatherMetatype",
+ "fill__10": "UnknownMetatype",
+ "_tensor_constant19": "PTConstNoopMetatype",
+ "lift_fresh_copy_11": "UnknownMetatype",
+ "slice_47": "PTGatherMetatype",
+ "slice_48": "PTGatherMetatype",
+ "fill__11": "UnknownMetatype",
+ "_tensor_constant20": "PTConstNoopMetatype",
+ "lift_fresh_copy_12": "UnknownMetatype",
+ "slice_49": "PTGatherMetatype",
+ "slice_50": "PTGatherMetatype",
+ "fill__12": "UnknownMetatype",
+ "_tensor_constant21": "PTConstNoopMetatype",
+ "lift_fresh_copy_13": "UnknownMetatype",
+ "slice_51": "PTGatherMetatype",
+ "slice_52": "PTGatherMetatype",
+ "fill__13": "UnknownMetatype",
+ "_tensor_constant22": "PTConstNoopMetatype",
+ "lift_fresh_copy_14": "UnknownMetatype",
+ "slice_53": "PTGatherMetatype",
+ "slice_54": "PTGatherMetatype",
+ "fill__14": "UnknownMetatype",
+ "_tensor_constant23": "PTConstNoopMetatype",
+ "lift_fresh_copy_15": "UnknownMetatype",
+ "slice_55": "PTGatherMetatype",
+ "slice_56": "PTGatherMetatype",
+ "fill__15": "UnknownMetatype",
+ "_tensor_constant24": "PTConstNoopMetatype",
+ "lift_fresh_copy_16": "UnknownMetatype",
+ "slice_57": "PTGatherMetatype",
+ "slice_58": "PTGatherMetatype",
+ "fill__16": "UnknownMetatype",
+ "_tensor_constant25": "PTConstNoopMetatype",
+ "lift_fresh_copy_17": "UnknownMetatype",
+ "slice_59": "PTGatherMetatype",
+ "slice_60": "PTGatherMetatype",
+ "fill__17": "UnknownMetatype",
+ "view_18": "PTReshapeMetatype",
+ "permute_17": "PTTransposeMetatype",
+ "reshape_15": "PTReshapeMetatype",
+ "unsqueeze_8": "PTReshapeMetatype",
+ "unsqueeze_9": "PTReshapeMetatype",
+ "sub_1": "PTSubMetatype",
+ "ne_1": "UnknownMetatype",
+ "masked_fill_2": "PTScatterMetatype",
+ "eq_1": "UnknownMetatype",
+ "masked_fill_3": "PTScatterMetatype",
+ "view_19": "PTReshapeMetatype",
+ "unsqueeze_10": "PTReshapeMetatype",
+ "unsqueeze_11": "PTReshapeMetatype",
+ "add_11": "PTAddMetatype",
+ "view_20": "PTReshapeMetatype",
+ "softmax_3": "PTSoftmaxMetatype",
+ "dropout_12": "PTDropoutMetatype",
+ "matmul_7": "PTMatMulMetatype",
+ "transpose_7": "PTTransposeMetatype",
+ "reshape_16": "PTReshapeMetatype",
+ "_param_constant61": "PTConstNoopMetatype",
+ "_param_constant62": "PTConstNoopMetatype",
+ "linear_22": "PTLinearMetatype",
+ "dropout_13": "PTDropoutMetatype",
+ "view_21": "PTReshapeMetatype",
+ "permute_18": "PTTransposeMetatype",
+ "reshape_17": "PTReshapeMetatype",
+ "roll_3": "UnknownMetatype",
+ "slice_61": "PTGatherMetatype",
+ "slice_62": "PTGatherMetatype",
+ "slice_63": "PTGatherMetatype",
+ "slice_64": "PTGatherMetatype",
+ "contiguous_5": "PTNoopMetatype",
+ "_param_constant63": "PTConstNoopMetatype",
+ "_param_constant64": "PTConstNoopMetatype",
+ "layer_norm_8": "PTLayerNormMetatype",
+ "add_12": "PTAddMetatype",
+ "_param_constant65": "PTConstNoopMetatype",
+ "_param_constant66": "PTConstNoopMetatype",
+ "linear_23": "PTLinearMetatype",
+ "gelu_3": "PTGELUMetatype",
+ "dropout_14": "PTDropoutMetatype",
+ "_param_constant67": "PTConstNoopMetatype",
+ "_param_constant68": "PTConstNoopMetatype",
+ "linear_24": "PTLinearMetatype",
+ "dropout_15": "PTDropoutMetatype",
+ "_param_constant69": "PTConstNoopMetatype",
+ "_param_constant70": "PTConstNoopMetatype",
+ "layer_norm_9": "PTLayerNormMetatype",
+ "add_13": "PTAddMetatype",
+ "pad_5": "PTPadMetatype",
+ "slice_65": "PTGatherMetatype",
+ "slice_66": "PTGatherMetatype",
+ "slice_67": "PTGatherMetatype",
+ "slice_68": "PTGatherMetatype",
+ "slice_69": "PTGatherMetatype",
+ "slice_70": "PTGatherMetatype",
+ "slice_71": "PTGatherMetatype",
+ "slice_72": "PTGatherMetatype",
+ "slice_73": "PTGatherMetatype",
+ "slice_74": "PTGatherMetatype",
+ "slice_75": "PTGatherMetatype",
+ "slice_76": "PTGatherMetatype",
+ "cat_1": "PTCatMetatype",
+ "_param_constant71": "PTConstNoopMetatype",
+ "linear_25": "PTLinearMetatype",
+ "_param_constant72": "PTConstNoopMetatype",
+ "_param_constant73": "PTConstNoopMetatype",
+ "layer_norm_10": "PTLayerNormMetatype",
+ "_tensor_constant26": "PTConstNoopMetatype",
+ "_param_constant74": "PTConstNoopMetatype",
+ "_param_constant75": "PTConstNoopMetatype",
+ "linear_26": "PTLinearMetatype",
+ "relu__4": "PTRELUMetatype",
+ "_param_constant76": "PTConstNoopMetatype",
+ "linear_27": "PTLinearMetatype",
+ "view_22": "PTReshapeMetatype",
+ "_tensor_constant27": "PTConstNoopMetatype",
+ "index_4": "UnknownMetatype",
+ "view_23": "PTReshapeMetatype",
+ "permute_19": "PTTransposeMetatype",
+ "contiguous_6": "PTNoopMetatype",
+ "unsqueeze_12": "PTReshapeMetatype",
+ "sigmoid_4": "PTSigmoidMetatype",
+ "mul_8": "PTMulMetatype",
+ "pad_6": "PTPadMetatype",
+ "view_24": "PTReshapeMetatype",
+ "permute_20": "PTTransposeMetatype",
+ "reshape_18": "PTReshapeMetatype",
+ "_param_constant77": "PTConstNoopMetatype",
+ "clone_4": "PTNoopMetatype",
+ "slice_77": "PTGatherMetatype",
+ "zero__4": "UnknownMetatype",
+ "_param_constant78": "PTConstNoopMetatype",
+ "linear_28": "PTLinearMetatype",
+ "reshape_19": "PTReshapeMetatype",
+ "permute_21": "PTTransposeMetatype",
+ "select_12": "PTGatherMetatype",
+ "select_13": "PTGatherMetatype",
+ "select_14": "PTGatherMetatype",
+ "linalg_vector_norm_8": "UnknownMetatype",
+ "clamp_min_8": "UnknownMetatype",
+ "expand_as_8": "PTExpandAsMetatype",
+ "div_8": "PTDivMetatype",
+ "linalg_vector_norm_9": "UnknownMetatype",
+ "clamp_min_9": "UnknownMetatype",
+ "expand_as_9": "PTExpandAsMetatype",
+ "div_9": "PTDivMetatype",
+ "transpose_8": "PTTransposeMetatype",
+ "matmul_8": "PTMatMulMetatype",
+ "_param_constant79": "PTConstNoopMetatype",
+ "clamp_4": "UnknownMetatype",
+ "exp_4": "PTExpMetatype",
+ "mul_9": "PTMulMetatype",
+ "add_14": "PTAddMetatype",
+ "softmax_4": "PTSoftmaxMetatype",
+ "dropout_16": "PTDropoutMetatype",
+ "matmul_9": "PTMatMulMetatype",
+ "transpose_9": "PTTransposeMetatype",
+ "reshape_20": "PTReshapeMetatype",
+ "_param_constant80": "PTConstNoopMetatype",
+ "_param_constant81": "PTConstNoopMetatype",
+ "linear_29": "PTLinearMetatype",
+ "dropout_17": "PTDropoutMetatype",
+ "view_25": "PTReshapeMetatype",
+ "permute_22": "PTTransposeMetatype",
+ "reshape_21": "PTReshapeMetatype",
+ "slice_78": "PTGatherMetatype",
+ "slice_79": "PTGatherMetatype",
+ "slice_80": "PTGatherMetatype",
+ "slice_81": "PTGatherMetatype",
+ "contiguous_7": "PTNoopMetatype",
+ "_param_constant82": "PTConstNoopMetatype",
+ "_param_constant83": "PTConstNoopMetatype",
+ "layer_norm_11": "PTLayerNormMetatype",
+ "add_15": "PTAddMetatype",
+ "_param_constant84": "PTConstNoopMetatype",
+ "_param_constant85": "PTConstNoopMetatype",
+ "linear_30": "PTLinearMetatype",
+ "gelu_4": "PTGELUMetatype",
+ "dropout_18": "PTDropoutMetatype",
+ "_param_constant86": "PTConstNoopMetatype",
+ "_param_constant87": "PTConstNoopMetatype",
+ "linear_31": "PTLinearMetatype",
+ "dropout_19": "PTDropoutMetatype",
+ "_param_constant88": "PTConstNoopMetatype",
+ "_param_constant89": "PTConstNoopMetatype",
+ "layer_norm_12": "PTLayerNormMetatype",
+ "add_16": "PTAddMetatype",
+ "_tensor_constant28": "PTConstNoopMetatype",
+ "_param_constant90": "PTConstNoopMetatype",
+ "_param_constant91": "PTConstNoopMetatype",
+ "linear_32": "PTLinearMetatype",
+ "relu__5": "PTRELUMetatype",
+ "_param_constant92": "PTConstNoopMetatype",
+ "linear_33": "PTLinearMetatype",
+ "view_26": "PTReshapeMetatype",
+ "_tensor_constant29": "PTConstNoopMetatype",
+ "index_5": "UnknownMetatype",
+ "view_27": "PTReshapeMetatype",
+ "permute_23": "PTTransposeMetatype",
+ "contiguous_8": "PTNoopMetatype",
+ "unsqueeze_13": "PTReshapeMetatype",
+ "sigmoid_5": "PTSigmoidMetatype",
+ "mul_10": "PTMulMetatype",
+ "pad_7": "PTPadMetatype",
+ "roll_4": "UnknownMetatype",
+ "view_28": "PTReshapeMetatype",
+ "permute_24": "PTTransposeMetatype",
+ "reshape_22": "PTReshapeMetatype",
+ "_param_constant93": "PTConstNoopMetatype",
+ "clone_5": "PTNoopMetatype",
+ "slice_82": "PTGatherMetatype",
+ "zero__5": "UnknownMetatype",
+ "_param_constant94": "PTConstNoopMetatype",
+ "linear_34": "PTLinearMetatype",
+ "reshape_23": "PTReshapeMetatype",
+ "permute_25": "PTTransposeMetatype",
+ "select_15": "PTGatherMetatype",
+ "select_16": "PTGatherMetatype",
+ "select_17": "PTGatherMetatype",
+ "linalg_vector_norm_10": "UnknownMetatype",
+ "clamp_min_10": "UnknownMetatype",
+ "expand_as_10": "PTExpandAsMetatype",
+ "div_10": "PTDivMetatype",
+ "linalg_vector_norm_11": "UnknownMetatype",
+ "clamp_min_11": "UnknownMetatype",
+ "expand_as_11": "PTExpandAsMetatype",
+ "div_11": "PTDivMetatype",
+ "transpose_10": "PTTransposeMetatype",
+ "matmul_10": "PTMatMulMetatype",
+ "_param_constant95": "PTConstNoopMetatype",
+ "clamp_5": "UnknownMetatype",
+ "exp_5": "PTExpMetatype",
+ "mul_11": "PTMulMetatype",
+ "add_17": "PTAddMetatype",
+ "new_zeros_2": "UnknownMetatype",
+ "_tensor_constant30": "PTConstNoopMetatype",
+ "lift_fresh_copy_18": "UnknownMetatype",
+ "slice_83": "PTGatherMetatype",
+ "slice_84": "PTGatherMetatype",
+ "fill__18": "UnknownMetatype",
+ "_tensor_constant31": "PTConstNoopMetatype",
+ "lift_fresh_copy_19": "UnknownMetatype",
+ "slice_85": "PTGatherMetatype",
+ "slice_86": "PTGatherMetatype",
+ "fill__19": "UnknownMetatype",
+ "_tensor_constant32": "PTConstNoopMetatype",
+ "lift_fresh_copy_20": "UnknownMetatype",
+ "slice_87": "PTGatherMetatype",
+ "slice_88": "PTGatherMetatype",
+ "fill__20": "UnknownMetatype",
+ "_tensor_constant33": "PTConstNoopMetatype",
+ "lift_fresh_copy_21": "UnknownMetatype",
+ "slice_89": "PTGatherMetatype",
+ "slice_90": "PTGatherMetatype",
+ "fill__21": "UnknownMetatype",
+ "_tensor_constant34": "PTConstNoopMetatype",
+ "lift_fresh_copy_22": "UnknownMetatype",
+ "slice_91": "PTGatherMetatype",
+ "slice_92": "PTGatherMetatype",
+ "fill__22": "UnknownMetatype",
+ "_tensor_constant35": "PTConstNoopMetatype",
+ "lift_fresh_copy_23": "UnknownMetatype",
+ "slice_93": "PTGatherMetatype",
+ "slice_94": "PTGatherMetatype",
+ "fill__23": "UnknownMetatype",
+ "_tensor_constant36": "PTConstNoopMetatype",
+ "lift_fresh_copy_24": "UnknownMetatype",
+ "slice_95": "PTGatherMetatype",
+ "slice_96": "PTGatherMetatype",
+ "fill__24": "UnknownMetatype",
+ "_tensor_constant37": "PTConstNoopMetatype",
+ "lift_fresh_copy_25": "UnknownMetatype",
+ "slice_97": "PTGatherMetatype",
+ "slice_98": "PTGatherMetatype",
+ "fill__25": "UnknownMetatype",
+ "_tensor_constant38": "PTConstNoopMetatype",
+ "lift_fresh_copy_26": "UnknownMetatype",
+ "slice_99": "PTGatherMetatype",
+ "slice_100": "PTGatherMetatype",
+ "fill__26": "UnknownMetatype",
+ "view_29": "PTReshapeMetatype",
+ "permute_26": "PTTransposeMetatype",
+ "reshape_24": "PTReshapeMetatype",
+ "unsqueeze_14": "PTReshapeMetatype",
+ "unsqueeze_15": "PTReshapeMetatype",
+ "sub_2": "PTSubMetatype",
+ "ne_2": "UnknownMetatype",
+ "masked_fill_4": "PTScatterMetatype",
+ "eq_2": "UnknownMetatype",
+ "masked_fill_5": "PTScatterMetatype",
+ "view_30": "PTReshapeMetatype",
+ "unsqueeze_16": "PTReshapeMetatype",
+ "unsqueeze_17": "PTReshapeMetatype",
+ "add_18": "PTAddMetatype",
+ "view_31": "PTReshapeMetatype",
+ "softmax_5": "PTSoftmaxMetatype",
+ "dropout_20": "PTDropoutMetatype",
+ "matmul_11": "PTMatMulMetatype",
+ "transpose_11": "PTTransposeMetatype",
+ "reshape_25": "PTReshapeMetatype",
+ "_param_constant96": "PTConstNoopMetatype",
+ "_param_constant97": "PTConstNoopMetatype",
+ "linear_35": "PTLinearMetatype",
+ "dropout_21": "PTDropoutMetatype",
+ "view_32": "PTReshapeMetatype",
+ "permute_27": "PTTransposeMetatype",
+ "reshape_26": "PTReshapeMetatype",
+ "roll_5": "UnknownMetatype",
+ "slice_101": "PTGatherMetatype",
+ "slice_102": "PTGatherMetatype",
+ "slice_103": "PTGatherMetatype",
+ "slice_104": "PTGatherMetatype",
+ "contiguous_9": "PTNoopMetatype",
+ "_param_constant98": "PTConstNoopMetatype",
+ "_param_constant99": "PTConstNoopMetatype",
+ "layer_norm_13": "PTLayerNormMetatype",
+ "add_19": "PTAddMetatype",
+ "_param_constant100": "PTConstNoopMetatype",
+ "_param_constant101": "PTConstNoopMetatype",
+ "linear_36": "PTLinearMetatype",
+ "gelu_5": "PTGELUMetatype",
+ "dropout_22": "PTDropoutMetatype",
+ "_param_constant102": "PTConstNoopMetatype",
+ "_param_constant103": "PTConstNoopMetatype",
+ "linear_37": "PTLinearMetatype",
+ "dropout_23": "PTDropoutMetatype",
+ "_param_constant104": "PTConstNoopMetatype",
+ "_param_constant105": "PTConstNoopMetatype",
+ "layer_norm_14": "PTLayerNormMetatype",
+ "add_20": "PTAddMetatype",
+ "_tensor_constant39": "PTConstNoopMetatype",
+ "_param_constant106": "PTConstNoopMetatype",
+ "_param_constant107": "PTConstNoopMetatype",
+ "linear_38": "PTLinearMetatype",
+ "relu__6": "PTRELUMetatype",
+ "_param_constant108": "PTConstNoopMetatype",
+ "linear_39": "PTLinearMetatype",
+ "view_33": "PTReshapeMetatype",
+ "_tensor_constant40": "PTConstNoopMetatype",
+ "index_6": "UnknownMetatype",
+ "view_34": "PTReshapeMetatype",
+ "permute_28": "PTTransposeMetatype",
+ "contiguous_10": "PTNoopMetatype",
+ "unsqueeze_18": "PTReshapeMetatype",
+ "sigmoid_6": "PTSigmoidMetatype",
+ "mul_12": "PTMulMetatype",
+ "pad_8": "PTPadMetatype",
+ "view_35": "PTReshapeMetatype",
+ "permute_29": "PTTransposeMetatype",
+ "reshape_27": "PTReshapeMetatype",
+ "_param_constant109": "PTConstNoopMetatype",
+ "clone_6": "PTNoopMetatype",
+ "slice_105": "PTGatherMetatype",
+ "zero__6": "UnknownMetatype",
+ "_param_constant110": "PTConstNoopMetatype",
+ "linear_40": "PTLinearMetatype",
+ "reshape_28": "PTReshapeMetatype",
+ "permute_30": "PTTransposeMetatype",
+ "select_18": "PTGatherMetatype",
+ "select_19": "PTGatherMetatype",
+ "select_20": "PTGatherMetatype",
+ "linalg_vector_norm_12": "UnknownMetatype",
+ "clamp_min_12": "UnknownMetatype",
+ "expand_as_12": "PTExpandAsMetatype",
+ "div_12": "PTDivMetatype",
+ "linalg_vector_norm_13": "UnknownMetatype",
+ "clamp_min_13": "UnknownMetatype",
+ "expand_as_13": "PTExpandAsMetatype",
+ "div_13": "PTDivMetatype",
+ "transpose_12": "PTTransposeMetatype",
+ "matmul_12": "PTMatMulMetatype",
+ "_param_constant111": "PTConstNoopMetatype",
+ "clamp_6": "UnknownMetatype",
+ "exp_6": "PTExpMetatype",
+ "mul_13": "PTMulMetatype",
+ "add_21": "PTAddMetatype",
+ "softmax_6": "PTSoftmaxMetatype",
+ "dropout_24": "PTDropoutMetatype",
+ "matmul_13": "PTMatMulMetatype",
+ "transpose_13": "PTTransposeMetatype",
+ "reshape_29": "PTReshapeMetatype",
+ "_param_constant112": "PTConstNoopMetatype",
+ "_param_constant113": "PTConstNoopMetatype",
+ "linear_41": "PTLinearMetatype",
+ "dropout_25": "PTDropoutMetatype",
+ "view_36": "PTReshapeMetatype",
+ "permute_31": "PTTransposeMetatype",
+ "reshape_30": "PTReshapeMetatype",
+ "slice_106": "PTGatherMetatype",
+ "slice_107": "PTGatherMetatype",
+ "slice_108": "PTGatherMetatype",
+ "slice_109": "PTGatherMetatype",
+ "contiguous_11": "PTNoopMetatype",
+ "_param_constant114": "PTConstNoopMetatype",
+ "_param_constant115": "PTConstNoopMetatype",
+ "layer_norm_15": "PTLayerNormMetatype",
+ "add_22": "PTAddMetatype",
+ "_param_constant116": "PTConstNoopMetatype",
+ "_param_constant117": "PTConstNoopMetatype",
+ "linear_42": "PTLinearMetatype",
+ "gelu_6": "PTGELUMetatype",
+ "dropout_26": "PTDropoutMetatype",
+ "_param_constant118": "PTConstNoopMetatype",
+ "_param_constant119": "PTConstNoopMetatype",
+ "linear_43": "PTLinearMetatype",
+ "dropout_27": "PTDropoutMetatype",
+ "_param_constant120": "PTConstNoopMetatype",
+ "_param_constant121": "PTConstNoopMetatype",
+ "layer_norm_16": "PTLayerNormMetatype",
+ "add_23": "PTAddMetatype",
+ "_tensor_constant41": "PTConstNoopMetatype",
+ "_param_constant122": "PTConstNoopMetatype",
+ "_param_constant123": "PTConstNoopMetatype",
+ "linear_44": "PTLinearMetatype",
+ "relu__7": "PTRELUMetatype",
+ "_param_constant124": "PTConstNoopMetatype",
+ "linear_45": "PTLinearMetatype",
+ "view_37": "PTReshapeMetatype",
+ "_tensor_constant42": "PTConstNoopMetatype",
+ "index_7": "UnknownMetatype",
+ "view_38": "PTReshapeMetatype",
+ "permute_32": "PTTransposeMetatype",
+ "contiguous_12": "PTNoopMetatype",
+ "unsqueeze_19": "PTReshapeMetatype",
+ "sigmoid_7": "PTSigmoidMetatype",
+ "mul_14": "PTMulMetatype",
+ "pad_9": "PTPadMetatype",
+ "roll_6": "UnknownMetatype",
+ "view_39": "PTReshapeMetatype",
+ "permute_33": "PTTransposeMetatype",
+ "reshape_31": "PTReshapeMetatype",
+ "_param_constant125": "PTConstNoopMetatype",
+ "clone_7": "PTNoopMetatype",
+ "slice_110": "PTGatherMetatype",
+ "zero__7": "UnknownMetatype",
+ "_param_constant126": "PTConstNoopMetatype",
+ "linear_46": "PTLinearMetatype",
+ "reshape_32": "PTReshapeMetatype",
+ "permute_34": "PTTransposeMetatype",
+ "select_21": "PTGatherMetatype",
+ "select_22": "PTGatherMetatype",
+ "select_23": "PTGatherMetatype",
+ "linalg_vector_norm_14": "UnknownMetatype",
+ "clamp_min_14": "UnknownMetatype",
+ "expand_as_14": "PTExpandAsMetatype",
+ "div_14": "PTDivMetatype",
+ "linalg_vector_norm_15": "UnknownMetatype",
+ "clamp_min_15": "UnknownMetatype",
+ "expand_as_15": "PTExpandAsMetatype",
+ "div_15": "PTDivMetatype",
+ "transpose_14": "PTTransposeMetatype",
+ "matmul_14": "PTMatMulMetatype",
+ "_param_constant127": "PTConstNoopMetatype",
+ "clamp_7": "UnknownMetatype",
+ "exp_7": "PTExpMetatype",
+ "mul_15": "PTMulMetatype",
+ "add_24": "PTAddMetatype",
+ "new_zeros_3": "UnknownMetatype",
+ "_tensor_constant43": "PTConstNoopMetatype",
+ "lift_fresh_copy_27": "UnknownMetatype",
+ "slice_111": "PTGatherMetatype",
+ "slice_112": "PTGatherMetatype",
+ "fill__27": "UnknownMetatype",
+ "_tensor_constant44": "PTConstNoopMetatype",
+ "lift_fresh_copy_28": "UnknownMetatype",
+ "slice_113": "PTGatherMetatype",
+ "slice_114": "PTGatherMetatype",
+ "fill__28": "UnknownMetatype",
+ "_tensor_constant45": "PTConstNoopMetatype",
+ "lift_fresh_copy_29": "UnknownMetatype",
+ "slice_115": "PTGatherMetatype",
+ "slice_116": "PTGatherMetatype",
+ "fill__29": "UnknownMetatype",
+ "_tensor_constant46": "PTConstNoopMetatype",
+ "lift_fresh_copy_30": "UnknownMetatype",
+ "slice_117": "PTGatherMetatype",
+ "slice_118": "PTGatherMetatype",
+ "fill__30": "UnknownMetatype",
+ "_tensor_constant47": "PTConstNoopMetatype",
+ "lift_fresh_copy_31": "UnknownMetatype",
+ "slice_119": "PTGatherMetatype",
+ "slice_120": "PTGatherMetatype",
+ "fill__31": "UnknownMetatype",
+ "_tensor_constant48": "PTConstNoopMetatype",
+ "lift_fresh_copy_32": "UnknownMetatype",
+ "slice_121": "PTGatherMetatype",
+ "slice_122": "PTGatherMetatype",
+ "fill__32": "UnknownMetatype",
+ "_tensor_constant49": "PTConstNoopMetatype",
+ "lift_fresh_copy_33": "UnknownMetatype",
+ "slice_123": "PTGatherMetatype",
+ "slice_124": "PTGatherMetatype",
+ "fill__33": "UnknownMetatype",
+ "_tensor_constant50": "PTConstNoopMetatype",
+ "lift_fresh_copy_34": "UnknownMetatype",
+ "slice_125": "PTGatherMetatype",
+ "slice_126": "PTGatherMetatype",
+ "fill__34": "UnknownMetatype",
+ "_tensor_constant51": "PTConstNoopMetatype",
+ "lift_fresh_copy_35": "UnknownMetatype",
+ "slice_127": "PTGatherMetatype",
+ "slice_128": "PTGatherMetatype",
+ "fill__35": "UnknownMetatype",
+ "view_40": "PTReshapeMetatype",
+ "permute_35": "PTTransposeMetatype",
+ "reshape_33": "PTReshapeMetatype",
+ "unsqueeze_20": "PTReshapeMetatype",
+ "unsqueeze_21": "PTReshapeMetatype",
+ "sub_3": "PTSubMetatype",
+ "ne_3": "UnknownMetatype",
+ "masked_fill_6": "PTScatterMetatype",
+ "eq_3": "UnknownMetatype",
+ "masked_fill_7": "PTScatterMetatype",
+ "view_41": "PTReshapeMetatype",
+ "unsqueeze_22": "PTReshapeMetatype",
+ "unsqueeze_23": "PTReshapeMetatype",
+ "add_25": "PTAddMetatype",
+ "view_42": "PTReshapeMetatype",
+ "softmax_7": "PTSoftmaxMetatype",
+ "dropout_28": "PTDropoutMetatype",
+ "matmul_15": "PTMatMulMetatype",
+ "transpose_15": "PTTransposeMetatype",
+ "reshape_34": "PTReshapeMetatype",
+ "_param_constant128": "PTConstNoopMetatype",
+ "_param_constant129": "PTConstNoopMetatype",
+ "linear_47": "PTLinearMetatype",
+ "dropout_29": "PTDropoutMetatype",
+ "view_43": "PTReshapeMetatype",
+ "permute_36": "PTTransposeMetatype",
+ "reshape_35": "PTReshapeMetatype",
+ "roll_7": "UnknownMetatype",
+ "slice_129": "PTGatherMetatype",
+ "slice_130": "PTGatherMetatype",
+ "slice_131": "PTGatherMetatype",
+ "slice_132": "PTGatherMetatype",
+ "contiguous_13": "PTNoopMetatype",
+ "_param_constant130": "PTConstNoopMetatype",
+ "_param_constant131": "PTConstNoopMetatype",
+ "layer_norm_17": "PTLayerNormMetatype",
+ "add_26": "PTAddMetatype",
+ "_param_constant132": "PTConstNoopMetatype",
+ "_param_constant133": "PTConstNoopMetatype",
+ "linear_48": "PTLinearMetatype",
+ "gelu_7": "PTGELUMetatype",
+ "dropout_30": "PTDropoutMetatype",
+ "_param_constant134": "PTConstNoopMetatype",
+ "_param_constant135": "PTConstNoopMetatype",
+ "linear_49": "PTLinearMetatype",
+ "dropout_31": "PTDropoutMetatype",
+ "_param_constant136": "PTConstNoopMetatype",
+ "_param_constant137": "PTConstNoopMetatype",
+ "layer_norm_18": "PTLayerNormMetatype",
+ "add_27": "PTAddMetatype",
+ "_tensor_constant52": "PTConstNoopMetatype",
+ "_param_constant138": "PTConstNoopMetatype",
+ "_param_constant139": "PTConstNoopMetatype",
+ "linear_50": "PTLinearMetatype",
+ "relu__8": "PTRELUMetatype",
+ "_param_constant140": "PTConstNoopMetatype",
+ "linear_51": "PTLinearMetatype",
+ "view_44": "PTReshapeMetatype",
+ "_tensor_constant53": "PTConstNoopMetatype",
+ "index_8": "UnknownMetatype",
+ "view_45": "PTReshapeMetatype",
+ "permute_37": "PTTransposeMetatype",
+ "contiguous_14": "PTNoopMetatype",
+ "unsqueeze_24": "PTReshapeMetatype",
+ "sigmoid_8": "PTSigmoidMetatype",
+ "mul_16": "PTMulMetatype",
+ "pad_10": "PTPadMetatype",
+ "view_46": "PTReshapeMetatype",
+ "permute_38": "PTTransposeMetatype",
+ "reshape_36": "PTReshapeMetatype",
+ "_param_constant141": "PTConstNoopMetatype",
+ "clone_8": "PTNoopMetatype",
+ "slice_133": "PTGatherMetatype",
+ "zero__8": "UnknownMetatype",
+ "_param_constant142": "PTConstNoopMetatype",
+ "linear_52": "PTLinearMetatype",
+ "reshape_37": "PTReshapeMetatype",
+ "permute_39": "PTTransposeMetatype",
+ "select_24": "PTGatherMetatype",
+ "select_25": "PTGatherMetatype",
+ "select_26": "PTGatherMetatype",
+ "linalg_vector_norm_16": "UnknownMetatype",
+ "clamp_min_16": "UnknownMetatype",
+ "expand_as_16": "PTExpandAsMetatype",
+ "div_16": "PTDivMetatype",
+ "linalg_vector_norm_17": "UnknownMetatype",
+ "clamp_min_17": "UnknownMetatype",
+ "expand_as_17": "PTExpandAsMetatype",
+ "div_17": "PTDivMetatype",
+ "transpose_16": "PTTransposeMetatype",
+ "matmul_16": "PTMatMulMetatype",
+ "_param_constant143": "PTConstNoopMetatype",
+ "clamp_8": "UnknownMetatype",
+ "exp_8": "PTExpMetatype",
+ "mul_17": "PTMulMetatype",
+ "add_28": "PTAddMetatype",
+ "softmax_8": "PTSoftmaxMetatype",
+ "dropout_32": "PTDropoutMetatype",
+ "matmul_17": "PTMatMulMetatype",
+ "transpose_17": "PTTransposeMetatype",
+ "reshape_38": "PTReshapeMetatype",
+ "_param_constant144": "PTConstNoopMetatype",
+ "_param_constant145": "PTConstNoopMetatype",
+ "linear_53": "PTLinearMetatype",
+ "dropout_33": "PTDropoutMetatype",
+ "view_47": "PTReshapeMetatype",
+ "permute_40": "PTTransposeMetatype",
+ "reshape_39": "PTReshapeMetatype",
+ "slice_134": "PTGatherMetatype",
+ "slice_135": "PTGatherMetatype",
+ "slice_136": "PTGatherMetatype",
+ "slice_137": "PTGatherMetatype",
+ "contiguous_15": "PTNoopMetatype",
+ "_param_constant146": "PTConstNoopMetatype",
+ "_param_constant147": "PTConstNoopMetatype",
+ "layer_norm_19": "PTLayerNormMetatype",
+ "add_29": "PTAddMetatype",
+ "_param_constant148": "PTConstNoopMetatype",
+ "_param_constant149": "PTConstNoopMetatype",
+ "linear_54": "PTLinearMetatype",
+ "gelu_8": "PTGELUMetatype",
+ "dropout_34": "PTDropoutMetatype",
+ "_param_constant150": "PTConstNoopMetatype",
+ "_param_constant151": "PTConstNoopMetatype",
+ "linear_55": "PTLinearMetatype",
+ "dropout_35": "PTDropoutMetatype",
+ "_param_constant152": "PTConstNoopMetatype",
+ "_param_constant153": "PTConstNoopMetatype",
+ "layer_norm_20": "PTLayerNormMetatype",
+ "add_30": "PTAddMetatype",
+ "_tensor_constant54": "PTConstNoopMetatype",
+ "_param_constant154": "PTConstNoopMetatype",
+ "_param_constant155": "PTConstNoopMetatype",
+ "linear_56": "PTLinearMetatype",
+ "relu__9": "PTRELUMetatype",
+ "_param_constant156": "PTConstNoopMetatype",
+ "linear_57": "PTLinearMetatype",
+ "view_48": "PTReshapeMetatype",
+ "_tensor_constant55": "PTConstNoopMetatype",
+ "index_9": "UnknownMetatype",
+ "view_49": "PTReshapeMetatype",
+ "permute_41": "PTTransposeMetatype",
+ "contiguous_16": "PTNoopMetatype",
+ "unsqueeze_25": "PTReshapeMetatype",
+ "sigmoid_9": "PTSigmoidMetatype",
+ "mul_18": "PTMulMetatype",
+ "pad_11": "PTPadMetatype",
+ "roll_8": "UnknownMetatype",
+ "view_50": "PTReshapeMetatype",
+ "permute_42": "PTTransposeMetatype",
+ "reshape_40": "PTReshapeMetatype",
+ "_param_constant157": "PTConstNoopMetatype",
+ "clone_9": "PTNoopMetatype",
+ "slice_138": "PTGatherMetatype",
+ "zero__9": "UnknownMetatype",
+ "_param_constant158": "PTConstNoopMetatype",
+ "linear_58": "PTLinearMetatype",
+ "reshape_41": "PTReshapeMetatype",
+ "permute_43": "PTTransposeMetatype",
+ "select_27": "PTGatherMetatype",
+ "select_28": "PTGatherMetatype",
+ "select_29": "PTGatherMetatype",
+ "linalg_vector_norm_18": "UnknownMetatype",
+ "clamp_min_18": "UnknownMetatype",
+ "expand_as_18": "PTExpandAsMetatype",
+ "div_18": "PTDivMetatype",
+ "linalg_vector_norm_19": "UnknownMetatype",
+ "clamp_min_19": "UnknownMetatype",
+ "expand_as_19": "PTExpandAsMetatype",
+ "div_19": "PTDivMetatype",
+ "transpose_18": "PTTransposeMetatype",
+ "matmul_18": "PTMatMulMetatype",
+ "_param_constant159": "PTConstNoopMetatype",
+ "clamp_9": "UnknownMetatype",
+ "exp_9": "PTExpMetatype",
+ "mul_19": "PTMulMetatype",
+ "add_31": "PTAddMetatype",
+ "new_zeros_4": "UnknownMetatype",
+ "_tensor_constant56": "PTConstNoopMetatype",
+ "lift_fresh_copy_36": "UnknownMetatype",
+ "slice_139": "PTGatherMetatype",
+ "slice_140": "PTGatherMetatype",
+ "fill__36": "UnknownMetatype",
+ "_tensor_constant57": "PTConstNoopMetatype",
+ "lift_fresh_copy_37": "UnknownMetatype",
+ "slice_141": "PTGatherMetatype",
+ "slice_142": "PTGatherMetatype",
+ "fill__37": "UnknownMetatype",
+ "_tensor_constant58": "PTConstNoopMetatype",
+ "lift_fresh_copy_38": "UnknownMetatype",
+ "slice_143": "PTGatherMetatype",
+ "slice_144": "PTGatherMetatype",
+ "fill__38": "UnknownMetatype",
+ "_tensor_constant59": "PTConstNoopMetatype",
+ "lift_fresh_copy_39": "UnknownMetatype",
+ "slice_145": "PTGatherMetatype",
+ "slice_146": "PTGatherMetatype",
+ "fill__39": "UnknownMetatype",
+ "_tensor_constant60": "PTConstNoopMetatype",
+ "lift_fresh_copy_40": "UnknownMetatype",
+ "slice_147": "PTGatherMetatype",
+ "slice_148": "PTGatherMetatype",
+ "fill__40": "UnknownMetatype",
+ "_tensor_constant61": "PTConstNoopMetatype",
+ "lift_fresh_copy_41": "UnknownMetatype",
+ "slice_149": "PTGatherMetatype",
+ "slice_150": "PTGatherMetatype",
+ "fill__41": "UnknownMetatype",
+ "_tensor_constant62": "PTConstNoopMetatype",
+ "lift_fresh_copy_42": "UnknownMetatype",
+ "slice_151": "PTGatherMetatype",
+ "slice_152": "PTGatherMetatype",
+ "fill__42": "UnknownMetatype",
+ "_tensor_constant63": "PTConstNoopMetatype",
+ "lift_fresh_copy_43": "UnknownMetatype",
+ "slice_153": "PTGatherMetatype",
+ "slice_154": "PTGatherMetatype",
+ "fill__43": "UnknownMetatype",
+ "_tensor_constant64": "PTConstNoopMetatype",
+ "lift_fresh_copy_44": "UnknownMetatype",
+ "slice_155": "PTGatherMetatype",
+ "slice_156": "PTGatherMetatype",
+ "fill__44": "UnknownMetatype",
+ "view_51": "PTReshapeMetatype",
+ "permute_44": "PTTransposeMetatype",
+ "reshape_42": "PTReshapeMetatype",
+ "unsqueeze_26": "PTReshapeMetatype",
+ "unsqueeze_27": "PTReshapeMetatype",
+ "sub_4": "PTSubMetatype",
+ "ne_4": "UnknownMetatype",
+ "masked_fill_8": "PTScatterMetatype",
+ "eq_4": "UnknownMetatype",
+ "masked_fill_9": "PTScatterMetatype",
+ "view_52": "PTReshapeMetatype",
+ "unsqueeze_28": "PTReshapeMetatype",
+ "unsqueeze_29": "PTReshapeMetatype",
+ "add_32": "PTAddMetatype",
+ "view_53": "PTReshapeMetatype",
+ "softmax_9": "PTSoftmaxMetatype",
+ "dropout_36": "PTDropoutMetatype",
+ "matmul_19": "PTMatMulMetatype",
+ "transpose_19": "PTTransposeMetatype",
+ "reshape_43": "PTReshapeMetatype",
+ "_param_constant160": "PTConstNoopMetatype",
+ "_param_constant161": "PTConstNoopMetatype",
+ "linear_59": "PTLinearMetatype",
+ "dropout_37": "PTDropoutMetatype",
+ "view_54": "PTReshapeMetatype",
+ "permute_45": "PTTransposeMetatype",
+ "reshape_44": "PTReshapeMetatype",
+ "roll_9": "UnknownMetatype",
+ "slice_157": "PTGatherMetatype",
+ "slice_158": "PTGatherMetatype",
+ "slice_159": "PTGatherMetatype",
+ "slice_160": "PTGatherMetatype",
+ "contiguous_17": "PTNoopMetatype",
+ "_param_constant162": "PTConstNoopMetatype",
+ "_param_constant163": "PTConstNoopMetatype",
+ "layer_norm_21": "PTLayerNormMetatype",
+ "add_33": "PTAddMetatype",
+ "_param_constant164": "PTConstNoopMetatype",
+ "_param_constant165": "PTConstNoopMetatype",
+ "linear_60": "PTLinearMetatype",
+ "gelu_9": "PTGELUMetatype",
+ "dropout_38": "PTDropoutMetatype",
+ "_param_constant166": "PTConstNoopMetatype",
+ "_param_constant167": "PTConstNoopMetatype",
+ "linear_61": "PTLinearMetatype",
+ "dropout_39": "PTDropoutMetatype",
+ "_param_constant168": "PTConstNoopMetatype",
+ "_param_constant169": "PTConstNoopMetatype",
+ "layer_norm_22": "PTLayerNormMetatype",
+ "add_34": "PTAddMetatype",
+ "_tensor_constant65": "PTConstNoopMetatype",
+ "_param_constant170": "PTConstNoopMetatype",
+ "_param_constant171": "PTConstNoopMetatype",
+ "linear_62": "PTLinearMetatype",
+ "relu__10": "PTRELUMetatype",
+ "_param_constant172": "PTConstNoopMetatype",
+ "linear_63": "PTLinearMetatype",
+ "view_55": "PTReshapeMetatype",
+ "_tensor_constant66": "PTConstNoopMetatype",
+ "index_10": "UnknownMetatype",
+ "view_56": "PTReshapeMetatype",
+ "permute_46": "PTTransposeMetatype",
+ "contiguous_18": "PTNoopMetatype",
+ "unsqueeze_30": "PTReshapeMetatype",
+ "sigmoid_10": "PTSigmoidMetatype",
+ "mul_20": "PTMulMetatype",
+ "pad_12": "PTPadMetatype",
+ "view_57": "PTReshapeMetatype",
+ "permute_47": "PTTransposeMetatype",
+ "reshape_45": "PTReshapeMetatype",
+ "_param_constant173": "PTConstNoopMetatype",
+ "clone_10": "PTNoopMetatype",
+ "slice_161": "PTGatherMetatype",
+ "zero__10": "UnknownMetatype",
+ "_param_constant174": "PTConstNoopMetatype",
+ "linear_64": "PTLinearMetatype",
+ "reshape_46": "PTReshapeMetatype",
+ "permute_48": "PTTransposeMetatype",
+ "select_30": "PTGatherMetatype",
+ "select_31": "PTGatherMetatype",
+ "select_32": "PTGatherMetatype",
+ "linalg_vector_norm_20": "UnknownMetatype",
+ "clamp_min_20": "UnknownMetatype",
+ "expand_as_20": "PTExpandAsMetatype",
+ "div_20": "PTDivMetatype",
+ "linalg_vector_norm_21": "UnknownMetatype",
+ "clamp_min_21": "UnknownMetatype",
+ "expand_as_21": "PTExpandAsMetatype",
+ "div_21": "PTDivMetatype",
+ "transpose_20": "PTTransposeMetatype",
+ "matmul_20": "PTMatMulMetatype",
+ "_param_constant175": "PTConstNoopMetatype",
+ "clamp_10": "UnknownMetatype",
+ "exp_10": "PTExpMetatype",
+ "mul_21": "PTMulMetatype",
+ "add_35": "PTAddMetatype",
+ "softmax_10": "PTSoftmaxMetatype",
+ "dropout_40": "PTDropoutMetatype",
+ "matmul_21": "PTMatMulMetatype",
+ "transpose_21": "PTTransposeMetatype",
+ "reshape_47": "PTReshapeMetatype",
+ "_param_constant176": "PTConstNoopMetatype",
+ "_param_constant177": "PTConstNoopMetatype",
+ "linear_65": "PTLinearMetatype",
+ "dropout_41": "PTDropoutMetatype",
+ "view_58": "PTReshapeMetatype",
+ "permute_49": "PTTransposeMetatype",
+ "reshape_48": "PTReshapeMetatype",
+ "slice_162": "PTGatherMetatype",
+ "slice_163": "PTGatherMetatype",
+ "slice_164": "PTGatherMetatype",
+ "slice_165": "PTGatherMetatype",
+ "contiguous_19": "PTNoopMetatype",
+ "_param_constant178": "PTConstNoopMetatype",
+ "_param_constant179": "PTConstNoopMetatype",
+ "layer_norm_23": "PTLayerNormMetatype",
+ "add_36": "PTAddMetatype",
+ "_param_constant180": "PTConstNoopMetatype",
+ "_param_constant181": "PTConstNoopMetatype",
+ "linear_66": "PTLinearMetatype",
+ "gelu_10": "PTGELUMetatype",
+ "dropout_42": "PTDropoutMetatype",
+ "_param_constant182": "PTConstNoopMetatype",
+ "_param_constant183": "PTConstNoopMetatype",
+ "linear_67": "PTLinearMetatype",
+ "dropout_43": "PTDropoutMetatype",
+ "_param_constant184": "PTConstNoopMetatype",
+ "_param_constant185": "PTConstNoopMetatype",
+ "layer_norm_24": "PTLayerNormMetatype",
+ "add_37": "PTAddMetatype",
+ "_tensor_constant67": "PTConstNoopMetatype",
+ "_param_constant186": "PTConstNoopMetatype",
+ "_param_constant187": "PTConstNoopMetatype",
+ "linear_68": "PTLinearMetatype",
+ "relu__11": "PTRELUMetatype",
+ "_param_constant188": "PTConstNoopMetatype",
+ "linear_69": "PTLinearMetatype",
+ "view_59": "PTReshapeMetatype",
+ "_tensor_constant68": "PTConstNoopMetatype",
+ "index_11": "UnknownMetatype",
+ "view_60": "PTReshapeMetatype",
+ "permute_50": "PTTransposeMetatype",
+ "contiguous_20": "PTNoopMetatype",
+ "unsqueeze_31": "PTReshapeMetatype",
+ "sigmoid_11": "PTSigmoidMetatype",
+ "mul_22": "PTMulMetatype",
+ "pad_13": "PTPadMetatype",
+ "roll_10": "UnknownMetatype",
+ "view_61": "PTReshapeMetatype",
+ "permute_51": "PTTransposeMetatype",
+ "reshape_49": "PTReshapeMetatype",
+ "_param_constant189": "PTConstNoopMetatype",
+ "clone_11": "PTNoopMetatype",
+ "slice_166": "PTGatherMetatype",
+ "zero__11": "UnknownMetatype",
+ "_param_constant190": "PTConstNoopMetatype",
+ "linear_70": "PTLinearMetatype",
+ "reshape_50": "PTReshapeMetatype",
+ "permute_52": "PTTransposeMetatype",
+ "select_33": "PTGatherMetatype",
+ "select_34": "PTGatherMetatype",
+ "select_35": "PTGatherMetatype",
+ "linalg_vector_norm_22": "UnknownMetatype",
+ "clamp_min_22": "UnknownMetatype",
+ "expand_as_22": "PTExpandAsMetatype",
+ "div_22": "PTDivMetatype",
+ "linalg_vector_norm_23": "UnknownMetatype",
+ "clamp_min_23": "UnknownMetatype",
+ "expand_as_23": "PTExpandAsMetatype",
+ "div_23": "PTDivMetatype",
+ "transpose_22": "PTTransposeMetatype",
+ "matmul_22": "PTMatMulMetatype",
+ "_param_constant191": "PTConstNoopMetatype",
+ "clamp_11": "UnknownMetatype",
+ "exp_11": "PTExpMetatype",
+ "mul_23": "PTMulMetatype",
+ "add_38": "PTAddMetatype",
+ "new_zeros_5": "UnknownMetatype",
+ "_tensor_constant69": "PTConstNoopMetatype",
+ "lift_fresh_copy_45": "UnknownMetatype",
+ "slice_167": "PTGatherMetatype",
+ "slice_168": "PTGatherMetatype",
+ "fill__45": "UnknownMetatype",
+ "_tensor_constant70": "PTConstNoopMetatype",
+ "lift_fresh_copy_46": "UnknownMetatype",
+ "slice_169": "PTGatherMetatype",
+ "slice_170": "PTGatherMetatype",
+ "fill__46": "UnknownMetatype",
+ "_tensor_constant71": "PTConstNoopMetatype",
+ "lift_fresh_copy_47": "UnknownMetatype",
+ "slice_171": "PTGatherMetatype",
+ "slice_172": "PTGatherMetatype",
+ "fill__47": "UnknownMetatype",
+ "_tensor_constant72": "PTConstNoopMetatype",
+ "lift_fresh_copy_48": "UnknownMetatype",
+ "slice_173": "PTGatherMetatype",
+ "slice_174": "PTGatherMetatype",
+ "fill__48": "UnknownMetatype",
+ "_tensor_constant73": "PTConstNoopMetatype",
+ "lift_fresh_copy_49": "UnknownMetatype",
+ "slice_175": "PTGatherMetatype",
+ "slice_176": "PTGatherMetatype",
+ "fill__49": "UnknownMetatype",
+ "_tensor_constant74": "PTConstNoopMetatype",
+ "lift_fresh_copy_50": "UnknownMetatype",
+ "slice_177": "PTGatherMetatype",
+ "slice_178": "PTGatherMetatype",
+ "fill__50": "UnknownMetatype",
+ "_tensor_constant75": "PTConstNoopMetatype",
+ "lift_fresh_copy_51": "UnknownMetatype",
+ "slice_179": "PTGatherMetatype",
+ "slice_180": "PTGatherMetatype",
+ "fill__51": "UnknownMetatype",
+ "_tensor_constant76": "PTConstNoopMetatype",
+ "lift_fresh_copy_52": "UnknownMetatype",
+ "slice_181": "PTGatherMetatype",
+ "slice_182": "PTGatherMetatype",
+ "fill__52": "UnknownMetatype",
+ "_tensor_constant77": "PTConstNoopMetatype",
+ "lift_fresh_copy_53": "UnknownMetatype",
+ "slice_183": "PTGatherMetatype",
+ "slice_184": "PTGatherMetatype",
+ "fill__53": "UnknownMetatype",
+ "view_62": "PTReshapeMetatype",
+ "permute_53": "PTTransposeMetatype",
+ "reshape_51": "PTReshapeMetatype",
+ "unsqueeze_32": "PTReshapeMetatype",
+ "unsqueeze_33": "PTReshapeMetatype",
+ "sub_5": "PTSubMetatype",
+ "ne_5": "UnknownMetatype",
+ "masked_fill_10": "PTScatterMetatype",
+ "eq_5": "UnknownMetatype",
+ "masked_fill_11": "PTScatterMetatype",
+ "view_63": "PTReshapeMetatype",
+ "unsqueeze_34": "PTReshapeMetatype",
+ "unsqueeze_35": "PTReshapeMetatype",
+ "add_39": "PTAddMetatype",
+ "view_64": "PTReshapeMetatype",
+ "softmax_11": "PTSoftmaxMetatype",
+ "dropout_44": "PTDropoutMetatype",
+ "matmul_23": "PTMatMulMetatype",
+ "transpose_23": "PTTransposeMetatype",
+ "reshape_52": "PTReshapeMetatype",
+ "_param_constant192": "PTConstNoopMetatype",
+ "_param_constant193": "PTConstNoopMetatype",
+ "linear_71": "PTLinearMetatype",
+ "dropout_45": "PTDropoutMetatype",
+ "view_65": "PTReshapeMetatype",
+ "permute_54": "PTTransposeMetatype",
+ "reshape_53": "PTReshapeMetatype",
+ "roll_11": "UnknownMetatype",
+ "slice_185": "PTGatherMetatype",
+ "slice_186": "PTGatherMetatype",
+ "slice_187": "PTGatherMetatype",
+ "slice_188": "PTGatherMetatype",
+ "contiguous_21": "PTNoopMetatype",
+ "_param_constant194": "PTConstNoopMetatype",
+ "_param_constant195": "PTConstNoopMetatype",
+ "layer_norm_25": "PTLayerNormMetatype",
+ "add_40": "PTAddMetatype",
+ "_param_constant196": "PTConstNoopMetatype",
+ "_param_constant197": "PTConstNoopMetatype",
+ "linear_72": "PTLinearMetatype",
+ "gelu_11": "PTGELUMetatype",
+ "dropout_46": "PTDropoutMetatype",
+ "_param_constant198": "PTConstNoopMetatype",
+ "_param_constant199": "PTConstNoopMetatype",
+ "linear_73": "PTLinearMetatype",
+ "dropout_47": "PTDropoutMetatype",
+ "_param_constant200": "PTConstNoopMetatype",
+ "_param_constant201": "PTConstNoopMetatype",
+ "layer_norm_26": "PTLayerNormMetatype",
+ "add_41": "PTAddMetatype",
+ "_tensor_constant78": "PTConstNoopMetatype",
+ "_param_constant202": "PTConstNoopMetatype",
+ "_param_constant203": "PTConstNoopMetatype",
+ "linear_74": "PTLinearMetatype",
+ "relu__12": "PTRELUMetatype",
+ "_param_constant204": "PTConstNoopMetatype",
+ "linear_75": "PTLinearMetatype",
+ "view_66": "PTReshapeMetatype",
+ "_tensor_constant79": "PTConstNoopMetatype",
+ "index_12": "UnknownMetatype",
+ "view_67": "PTReshapeMetatype",
+ "permute_55": "PTTransposeMetatype",
+ "contiguous_22": "PTNoopMetatype",
+ "unsqueeze_36": "PTReshapeMetatype",
+ "sigmoid_12": "PTSigmoidMetatype",
+ "mul_24": "PTMulMetatype",
+ "pad_14": "PTPadMetatype",
+ "view_68": "PTReshapeMetatype",
+ "permute_56": "PTTransposeMetatype",
+ "reshape_54": "PTReshapeMetatype",
+ "_param_constant205": "PTConstNoopMetatype",
+ "clone_12": "PTNoopMetatype",
+ "slice_189": "PTGatherMetatype",
+ "zero__12": "UnknownMetatype",
+ "_param_constant206": "PTConstNoopMetatype",
+ "linear_76": "PTLinearMetatype",
+ "reshape_55": "PTReshapeMetatype",
+ "permute_57": "PTTransposeMetatype",
+ "select_36": "PTGatherMetatype",
+ "select_37": "PTGatherMetatype",
+ "select_38": "PTGatherMetatype",
+ "linalg_vector_norm_24": "UnknownMetatype",
+ "clamp_min_24": "UnknownMetatype",
+ "expand_as_24": "PTExpandAsMetatype",
+ "div_24": "PTDivMetatype",
+ "linalg_vector_norm_25": "UnknownMetatype",
+ "clamp_min_25": "UnknownMetatype",
+ "expand_as_25": "PTExpandAsMetatype",
+ "div_25": "PTDivMetatype",
+ "transpose_24": "PTTransposeMetatype",
+ "matmul_24": "PTMatMulMetatype",
+ "_param_constant207": "PTConstNoopMetatype",
+ "clamp_12": "UnknownMetatype",
+ "exp_12": "PTExpMetatype",
+ "mul_25": "PTMulMetatype",
+ "add_42": "PTAddMetatype",
+ "softmax_12": "PTSoftmaxMetatype",
+ "dropout_48": "PTDropoutMetatype",
+ "matmul_25": "PTMatMulMetatype",
+ "transpose_25": "PTTransposeMetatype",
+ "reshape_56": "PTReshapeMetatype",
+ "_param_constant208": "PTConstNoopMetatype",
+ "_param_constant209": "PTConstNoopMetatype",
+ "linear_77": "PTLinearMetatype",
+ "dropout_49": "PTDropoutMetatype",
+ "view_69": "PTReshapeMetatype",
+ "permute_58": "PTTransposeMetatype",
+ "reshape_57": "PTReshapeMetatype",
+ "slice_190": "PTGatherMetatype",
+ "slice_191": "PTGatherMetatype",
+ "slice_192": "PTGatherMetatype",
+ "slice_193": "PTGatherMetatype",
+ "contiguous_23": "PTNoopMetatype",
+ "_param_constant210": "PTConstNoopMetatype",
+ "_param_constant211": "PTConstNoopMetatype",
+ "layer_norm_27": "PTLayerNormMetatype",
+ "add_43": "PTAddMetatype",
+ "_param_constant212": "PTConstNoopMetatype",
+ "_param_constant213": "PTConstNoopMetatype",
+ "linear_78": "PTLinearMetatype",
+ "gelu_12": "PTGELUMetatype",
+ "dropout_50": "PTDropoutMetatype",
+ "_param_constant214": "PTConstNoopMetatype",
+ "_param_constant215": "PTConstNoopMetatype",
+ "linear_79": "PTLinearMetatype",
+ "dropout_51": "PTDropoutMetatype",
+ "_param_constant216": "PTConstNoopMetatype",
+ "_param_constant217": "PTConstNoopMetatype",
+ "layer_norm_28": "PTLayerNormMetatype",
+ "add_44": "PTAddMetatype",
+ "_tensor_constant80": "PTConstNoopMetatype",
+ "_param_constant218": "PTConstNoopMetatype",
+ "_param_constant219": "PTConstNoopMetatype",
+ "linear_80": "PTLinearMetatype",
+ "relu__13": "PTRELUMetatype",
+ "_param_constant220": "PTConstNoopMetatype",
+ "linear_81": "PTLinearMetatype",
+ "view_70": "PTReshapeMetatype",
+ "_tensor_constant81": "PTConstNoopMetatype",
+ "index_13": "UnknownMetatype",
+ "view_71": "PTReshapeMetatype",
+ "permute_59": "PTTransposeMetatype",
+ "contiguous_24": "PTNoopMetatype",
+ "unsqueeze_37": "PTReshapeMetatype",
+ "sigmoid_13": "PTSigmoidMetatype",
+ "mul_26": "PTMulMetatype",
+ "pad_15": "PTPadMetatype",
+ "roll_12": "UnknownMetatype",
+ "view_72": "PTReshapeMetatype",
+ "permute_60": "PTTransposeMetatype",
+ "reshape_58": "PTReshapeMetatype",
+ "_param_constant221": "PTConstNoopMetatype",
+ "clone_13": "PTNoopMetatype",
+ "slice_194": "PTGatherMetatype",
+ "zero__13": "UnknownMetatype",
+ "_param_constant222": "PTConstNoopMetatype",
+ "linear_82": "PTLinearMetatype",
+ "reshape_59": "PTReshapeMetatype",
+ "permute_61": "PTTransposeMetatype",
+ "select_39": "PTGatherMetatype",
+ "select_40": "PTGatherMetatype",
+ "select_41": "PTGatherMetatype",
+ "linalg_vector_norm_26": "UnknownMetatype",
+ "clamp_min_26": "UnknownMetatype",
+ "expand_as_26": "PTExpandAsMetatype",
+ "div_26": "PTDivMetatype",
+ "linalg_vector_norm_27": "UnknownMetatype",
+ "clamp_min_27": "UnknownMetatype",
+ "expand_as_27": "PTExpandAsMetatype",
+ "div_27": "PTDivMetatype",
+ "transpose_26": "PTTransposeMetatype",
+ "matmul_26": "PTMatMulMetatype",
+ "_param_constant223": "PTConstNoopMetatype",
+ "clamp_13": "UnknownMetatype",
+ "exp_13": "PTExpMetatype",
+ "mul_27": "PTMulMetatype",
+ "add_45": "PTAddMetatype",
+ "new_zeros_6": "UnknownMetatype",
+ "_tensor_constant82": "PTConstNoopMetatype",
+ "lift_fresh_copy_54": "UnknownMetatype",
+ "slice_195": "PTGatherMetatype",
+ "slice_196": "PTGatherMetatype",
+ "fill__54": "UnknownMetatype",
+ "_tensor_constant83": "PTConstNoopMetatype",
+ "lift_fresh_copy_55": "UnknownMetatype",
+ "slice_197": "PTGatherMetatype",
+ "slice_198": "PTGatherMetatype",
+ "fill__55": "UnknownMetatype",
+ "_tensor_constant84": "PTConstNoopMetatype",
+ "lift_fresh_copy_56": "UnknownMetatype",
+ "slice_199": "PTGatherMetatype",
+ "slice_200": "PTGatherMetatype",
+ "fill__56": "UnknownMetatype",
+ "_tensor_constant85": "PTConstNoopMetatype",
+ "lift_fresh_copy_57": "UnknownMetatype",
+ "slice_201": "PTGatherMetatype",
+ "slice_202": "PTGatherMetatype",
+ "fill__57": "UnknownMetatype",
+ "_tensor_constant86": "PTConstNoopMetatype",
+ "lift_fresh_copy_58": "UnknownMetatype",
+ "slice_203": "PTGatherMetatype",
+ "slice_204": "PTGatherMetatype",
+ "fill__58": "UnknownMetatype",
+ "_tensor_constant87": "PTConstNoopMetatype",
+ "lift_fresh_copy_59": "UnknownMetatype",
+ "slice_205": "PTGatherMetatype",
+ "slice_206": "PTGatherMetatype",
+ "fill__59": "UnknownMetatype",
+ "_tensor_constant88": "PTConstNoopMetatype",
+ "lift_fresh_copy_60": "UnknownMetatype",
+ "slice_207": "PTGatherMetatype",
+ "slice_208": "PTGatherMetatype",
+ "fill__60": "UnknownMetatype",
+ "_tensor_constant89": "PTConstNoopMetatype",
+ "lift_fresh_copy_61": "UnknownMetatype",
+ "slice_209": "PTGatherMetatype",
+ "slice_210": "PTGatherMetatype",
+ "fill__61": "UnknownMetatype",
+ "_tensor_constant90": "PTConstNoopMetatype",
+ "lift_fresh_copy_62": "UnknownMetatype",
+ "slice_211": "PTGatherMetatype",
+ "slice_212": "PTGatherMetatype",
+ "fill__62": "UnknownMetatype",
+ "view_73": "PTReshapeMetatype",
+ "permute_62": "PTTransposeMetatype",
+ "reshape_60": "PTReshapeMetatype",
+ "unsqueeze_38": "PTReshapeMetatype",
+ "unsqueeze_39": "PTReshapeMetatype",
+ "sub_6": "PTSubMetatype",
+ "ne_6": "UnknownMetatype",
+ "masked_fill_12": "PTScatterMetatype",
+ "eq_6": "UnknownMetatype",
+ "masked_fill_13": "PTScatterMetatype",
+ "view_74": "PTReshapeMetatype",
+ "unsqueeze_40": "PTReshapeMetatype",
+ "unsqueeze_41": "PTReshapeMetatype",
+ "add_46": "PTAddMetatype",
+ "view_75": "PTReshapeMetatype",
+ "softmax_13": "PTSoftmaxMetatype",
+ "dropout_52": "PTDropoutMetatype",
+ "matmul_27": "PTMatMulMetatype",
+ "transpose_27": "PTTransposeMetatype",
+ "reshape_61": "PTReshapeMetatype",
+ "_param_constant224": "PTConstNoopMetatype",
+ "_param_constant225": "PTConstNoopMetatype",
+ "linear_83": "PTLinearMetatype",
+ "dropout_53": "PTDropoutMetatype",
+ "view_76": "PTReshapeMetatype",
+ "permute_63": "PTTransposeMetatype",
+ "reshape_62": "PTReshapeMetatype",
+ "roll_13": "UnknownMetatype",
+ "slice_213": "PTGatherMetatype",
+ "slice_214": "PTGatherMetatype",
+ "slice_215": "PTGatherMetatype",
+ "slice_216": "PTGatherMetatype",
+ "contiguous_25": "PTNoopMetatype",
+ "_param_constant226": "PTConstNoopMetatype",
+ "_param_constant227": "PTConstNoopMetatype",
+ "layer_norm_29": "PTLayerNormMetatype",
+ "add_47": "PTAddMetatype",
+ "_param_constant228": "PTConstNoopMetatype",
+ "_param_constant229": "PTConstNoopMetatype",
+ "linear_84": "PTLinearMetatype",
+ "gelu_13": "PTGELUMetatype",
+ "dropout_54": "PTDropoutMetatype",
+ "_param_constant230": "PTConstNoopMetatype",
+ "_param_constant231": "PTConstNoopMetatype",
+ "linear_85": "PTLinearMetatype",
+ "dropout_55": "PTDropoutMetatype",
+ "_param_constant232": "PTConstNoopMetatype",
+ "_param_constant233": "PTConstNoopMetatype",
+ "layer_norm_30": "PTLayerNormMetatype",
+ "add_48": "PTAddMetatype",
+ "_tensor_constant91": "PTConstNoopMetatype",
+ "_param_constant234": "PTConstNoopMetatype",
+ "_param_constant235": "PTConstNoopMetatype",
+ "linear_86": "PTLinearMetatype",
+ "relu__14": "PTRELUMetatype",
+ "_param_constant236": "PTConstNoopMetatype",
+ "linear_87": "PTLinearMetatype",
+ "view_77": "PTReshapeMetatype",
+ "_tensor_constant92": "PTConstNoopMetatype",
+ "index_14": "UnknownMetatype",
+ "view_78": "PTReshapeMetatype",
+ "permute_64": "PTTransposeMetatype",
+ "contiguous_26": "PTNoopMetatype",
+ "unsqueeze_42": "PTReshapeMetatype",
+ "sigmoid_14": "PTSigmoidMetatype",
+ "mul_28": "PTMulMetatype",
+ "pad_16": "PTPadMetatype",
+ "view_79": "PTReshapeMetatype",
+ "permute_65": "PTTransposeMetatype",
+ "reshape_63": "PTReshapeMetatype",
+ "_param_constant237": "PTConstNoopMetatype",
+ "clone_14": "PTNoopMetatype",
+ "slice_217": "PTGatherMetatype",
+ "zero__14": "UnknownMetatype",
+ "_param_constant238": "PTConstNoopMetatype",
+ "linear_88": "PTLinearMetatype",
+ "reshape_64": "PTReshapeMetatype",
+ "permute_66": "PTTransposeMetatype",
+ "select_42": "PTGatherMetatype",
+ "select_43": "PTGatherMetatype",
+ "select_44": "PTGatherMetatype",
+ "linalg_vector_norm_28": "UnknownMetatype",
+ "clamp_min_28": "UnknownMetatype",
+ "expand_as_28": "PTExpandAsMetatype",
+ "div_28": "PTDivMetatype",
+ "linalg_vector_norm_29": "UnknownMetatype",
+ "clamp_min_29": "UnknownMetatype",
+ "expand_as_29": "PTExpandAsMetatype",
+ "div_29": "PTDivMetatype",
+ "transpose_28": "PTTransposeMetatype",
+ "matmul_28": "PTMatMulMetatype",
+ "_param_constant239": "PTConstNoopMetatype",
+ "clamp_14": "UnknownMetatype",
+ "exp_14": "PTExpMetatype",
+ "mul_29": "PTMulMetatype",
+ "add_49": "PTAddMetatype",
+ "softmax_14": "PTSoftmaxMetatype",
+ "dropout_56": "PTDropoutMetatype",
+ "matmul_29": "PTMatMulMetatype",
+ "transpose_29": "PTTransposeMetatype",
+ "reshape_65": "PTReshapeMetatype",
+ "_param_constant240": "PTConstNoopMetatype",
+ "_param_constant241": "PTConstNoopMetatype",
+ "linear_89": "PTLinearMetatype",
+ "dropout_57": "PTDropoutMetatype",
+ "view_80": "PTReshapeMetatype",
+ "permute_67": "PTTransposeMetatype",
+ "reshape_66": "PTReshapeMetatype",
+ "slice_218": "PTGatherMetatype",
+ "slice_219": "PTGatherMetatype",
+ "slice_220": "PTGatherMetatype",
+ "slice_221": "PTGatherMetatype",
+ "contiguous_27": "PTNoopMetatype",
+ "_param_constant242": "PTConstNoopMetatype",
+ "_param_constant243": "PTConstNoopMetatype",
+ "layer_norm_31": "PTLayerNormMetatype",
+ "add_50": "PTAddMetatype",
+ "_param_constant244": "PTConstNoopMetatype",
+ "_param_constant245": "PTConstNoopMetatype",
+ "linear_90": "PTLinearMetatype",
+ "gelu_14": "PTGELUMetatype",
+ "dropout_58": "PTDropoutMetatype",
+ "_param_constant246": "PTConstNoopMetatype",
+ "_param_constant247": "PTConstNoopMetatype",
+ "linear_91": "PTLinearMetatype",
+ "dropout_59": "PTDropoutMetatype",
+ "_param_constant248": "PTConstNoopMetatype",
+ "_param_constant249": "PTConstNoopMetatype",
+ "layer_norm_32": "PTLayerNormMetatype",
+ "add_51": "PTAddMetatype",
+ "_tensor_constant93": "PTConstNoopMetatype",
+ "_param_constant250": "PTConstNoopMetatype",
+ "_param_constant251": "PTConstNoopMetatype",
+ "linear_92": "PTLinearMetatype",
+ "relu__15": "PTRELUMetatype",
+ "_param_constant252": "PTConstNoopMetatype",
+ "linear_93": "PTLinearMetatype",
+ "view_81": "PTReshapeMetatype",
+ "_tensor_constant94": "PTConstNoopMetatype",
+ "index_15": "UnknownMetatype",
+ "view_82": "PTReshapeMetatype",
+ "permute_68": "PTTransposeMetatype",
+ "contiguous_28": "PTNoopMetatype",
+ "unsqueeze_43": "PTReshapeMetatype",
+ "sigmoid_15": "PTSigmoidMetatype",
+ "mul_30": "PTMulMetatype",
+ "pad_17": "PTPadMetatype",
+ "roll_14": "UnknownMetatype",
+ "view_83": "PTReshapeMetatype",
+ "permute_69": "PTTransposeMetatype",
+ "reshape_67": "PTReshapeMetatype",
+ "_param_constant253": "PTConstNoopMetatype",
+ "clone_15": "PTNoopMetatype",
+ "slice_222": "PTGatherMetatype",
+ "zero__15": "UnknownMetatype",
+ "_param_constant254": "PTConstNoopMetatype",
+ "linear_94": "PTLinearMetatype",
+ "reshape_68": "PTReshapeMetatype",
+ "permute_70": "PTTransposeMetatype",
+ "select_45": "PTGatherMetatype",
+ "select_46": "PTGatherMetatype",
+ "select_47": "PTGatherMetatype",
+ "linalg_vector_norm_30": "UnknownMetatype",
+ "clamp_min_30": "UnknownMetatype",
+ "expand_as_30": "PTExpandAsMetatype",
+ "div_30": "PTDivMetatype",
+ "linalg_vector_norm_31": "UnknownMetatype",
+ "clamp_min_31": "UnknownMetatype",
+ "expand_as_31": "PTExpandAsMetatype",
+ "div_31": "PTDivMetatype",
+ "transpose_30": "PTTransposeMetatype",
+ "matmul_30": "PTMatMulMetatype",
+ "_param_constant255": "PTConstNoopMetatype",
+ "clamp_15": "UnknownMetatype",
+ "exp_15": "PTExpMetatype",
+ "mul_31": "PTMulMetatype",
+ "add_52": "PTAddMetatype",
+ "new_zeros_7": "UnknownMetatype",
+ "_tensor_constant95": "PTConstNoopMetatype",
+ "lift_fresh_copy_63": "UnknownMetatype",
+ "slice_223": "PTGatherMetatype",
+ "slice_224": "PTGatherMetatype",
+ "fill__63": "UnknownMetatype",
+ "_tensor_constant96": "PTConstNoopMetatype",
+ "lift_fresh_copy_64": "UnknownMetatype",
+ "slice_225": "PTGatherMetatype",
+ "slice_226": "PTGatherMetatype",
+ "fill__64": "UnknownMetatype",
+ "_tensor_constant97": "PTConstNoopMetatype",
+ "lift_fresh_copy_65": "UnknownMetatype",
+ "slice_227": "PTGatherMetatype",
+ "slice_228": "PTGatherMetatype",
+ "fill__65": "UnknownMetatype",
+ "_tensor_constant98": "PTConstNoopMetatype",
+ "lift_fresh_copy_66": "UnknownMetatype",
+ "slice_229": "PTGatherMetatype",
+ "slice_230": "PTGatherMetatype",
+ "fill__66": "UnknownMetatype",
+ "_tensor_constant99": "PTConstNoopMetatype",
+ "lift_fresh_copy_67": "UnknownMetatype",
+ "slice_231": "PTGatherMetatype",
+ "slice_232": "PTGatherMetatype",
+ "fill__67": "UnknownMetatype",
+ "_tensor_constant100": "PTConstNoopMetatype",
+ "lift_fresh_copy_68": "UnknownMetatype",
+ "slice_233": "PTGatherMetatype",
+ "slice_234": "PTGatherMetatype",
+ "fill__68": "UnknownMetatype",
+ "_tensor_constant101": "PTConstNoopMetatype",
+ "lift_fresh_copy_69": "UnknownMetatype",
+ "slice_235": "PTGatherMetatype",
+ "slice_236": "PTGatherMetatype",
+ "fill__69": "UnknownMetatype",
+ "_tensor_constant102": "PTConstNoopMetatype",
+ "lift_fresh_copy_70": "UnknownMetatype",
+ "slice_237": "PTGatherMetatype",
+ "slice_238": "PTGatherMetatype",
+ "fill__70": "UnknownMetatype",
+ "_tensor_constant103": "PTConstNoopMetatype",
+ "lift_fresh_copy_71": "UnknownMetatype",
+ "slice_239": "PTGatherMetatype",
+ "slice_240": "PTGatherMetatype",
+ "fill__71": "UnknownMetatype",
+ "view_84": "PTReshapeMetatype",
+ "permute_71": "PTTransposeMetatype",
+ "reshape_69": "PTReshapeMetatype",
+ "unsqueeze_44": "PTReshapeMetatype",
+ "unsqueeze_45": "PTReshapeMetatype",
+ "sub_7": "PTSubMetatype",
+ "ne_7": "UnknownMetatype",
+ "masked_fill_14": "PTScatterMetatype",
+ "eq_7": "UnknownMetatype",
+ "masked_fill_15": "PTScatterMetatype",
+ "view_85": "PTReshapeMetatype",
+ "unsqueeze_46": "PTReshapeMetatype",
+ "unsqueeze_47": "PTReshapeMetatype",
+ "add_53": "PTAddMetatype",
+ "view_86": "PTReshapeMetatype",
+ "softmax_15": "PTSoftmaxMetatype",
+ "dropout_60": "PTDropoutMetatype",
+ "matmul_31": "PTMatMulMetatype",
+ "transpose_31": "PTTransposeMetatype",
+ "reshape_70": "PTReshapeMetatype",
+ "_param_constant256": "PTConstNoopMetatype",
+ "_param_constant257": "PTConstNoopMetatype",
+ "linear_95": "PTLinearMetatype",
+ "dropout_61": "PTDropoutMetatype",
+ "view_87": "PTReshapeMetatype",
+ "permute_72": "PTTransposeMetatype",
+ "reshape_71": "PTReshapeMetatype",
+ "roll_15": "UnknownMetatype",
+ "slice_241": "PTGatherMetatype",
+ "slice_242": "PTGatherMetatype",
+ "slice_243": "PTGatherMetatype",
+ "slice_244": "PTGatherMetatype",
+ "contiguous_29": "PTNoopMetatype",
+ "_param_constant258": "PTConstNoopMetatype",
+ "_param_constant259": "PTConstNoopMetatype",
+ "layer_norm_33": "PTLayerNormMetatype",
+ "add_54": "PTAddMetatype",
+ "_param_constant260": "PTConstNoopMetatype",
+ "_param_constant261": "PTConstNoopMetatype",
+ "linear_96": "PTLinearMetatype",
+ "gelu_15": "PTGELUMetatype",
+ "dropout_62": "PTDropoutMetatype",
+ "_param_constant262": "PTConstNoopMetatype",
+ "_param_constant263": "PTConstNoopMetatype",
+ "linear_97": "PTLinearMetatype",
+ "dropout_63": "PTDropoutMetatype",
+ "_param_constant264": "PTConstNoopMetatype",
+ "_param_constant265": "PTConstNoopMetatype",
+ "layer_norm_34": "PTLayerNormMetatype",
+ "add_55": "PTAddMetatype",
+ "_tensor_constant104": "PTConstNoopMetatype",
+ "_param_constant266": "PTConstNoopMetatype",
+ "_param_constant267": "PTConstNoopMetatype",
+ "linear_98": "PTLinearMetatype",
+ "relu__16": "PTRELUMetatype",
+ "_param_constant268": "PTConstNoopMetatype",
+ "linear_99": "PTLinearMetatype",
+ "view_88": "PTReshapeMetatype",
+ "_tensor_constant105": "PTConstNoopMetatype",
+ "index_16": "UnknownMetatype",
+ "view_89": "PTReshapeMetatype",
+ "permute_73": "PTTransposeMetatype",
+ "contiguous_30": "PTNoopMetatype",
+ "unsqueeze_48": "PTReshapeMetatype",
+ "sigmoid_16": "PTSigmoidMetatype",
+ "mul_32": "PTMulMetatype",
+ "pad_18": "PTPadMetatype",
+ "view_90": "PTReshapeMetatype",
+ "permute_74": "PTTransposeMetatype",
+ "reshape_72": "PTReshapeMetatype",
+ "_param_constant269": "PTConstNoopMetatype",
+ "clone_16": "PTNoopMetatype",
+ "slice_245": "PTGatherMetatype",
+ "zero__16": "UnknownMetatype",
+ "_param_constant270": "PTConstNoopMetatype",
+ "linear_100": "PTLinearMetatype",
+ "reshape_73": "PTReshapeMetatype",
+ "permute_75": "PTTransposeMetatype",
+ "select_48": "PTGatherMetatype",
+ "select_49": "PTGatherMetatype",
+ "select_50": "PTGatherMetatype",
+ "linalg_vector_norm_32": "UnknownMetatype",
+ "clamp_min_32": "UnknownMetatype",
+ "expand_as_32": "PTExpandAsMetatype",
+ "div_32": "PTDivMetatype",
+ "linalg_vector_norm_33": "UnknownMetatype",
+ "clamp_min_33": "UnknownMetatype",
+ "expand_as_33": "PTExpandAsMetatype",
+ "div_33": "PTDivMetatype",
+ "transpose_32": "PTTransposeMetatype",
+ "matmul_32": "PTMatMulMetatype",
+ "_param_constant271": "PTConstNoopMetatype",
+ "clamp_16": "UnknownMetatype",
+ "exp_16": "PTExpMetatype",
+ "mul_33": "PTMulMetatype",
+ "add_56": "PTAddMetatype",
+ "softmax_16": "PTSoftmaxMetatype",
+ "dropout_64": "PTDropoutMetatype",
+ "matmul_33": "PTMatMulMetatype",
+ "transpose_33": "PTTransposeMetatype",
+ "reshape_74": "PTReshapeMetatype",
+ "_param_constant272": "PTConstNoopMetatype",
+ "_param_constant273": "PTConstNoopMetatype",
+ "linear_101": "PTLinearMetatype",
+ "dropout_65": "PTDropoutMetatype",
+ "view_91": "PTReshapeMetatype",
+ "permute_76": "PTTransposeMetatype",
+ "reshape_75": "PTReshapeMetatype",
+ "slice_246": "PTGatherMetatype",
+ "slice_247": "PTGatherMetatype",
+ "slice_248": "PTGatherMetatype",
+ "slice_249": "PTGatherMetatype",
+ "contiguous_31": "PTNoopMetatype",
+ "_param_constant274": "PTConstNoopMetatype",
+ "_param_constant275": "PTConstNoopMetatype",
+ "layer_norm_35": "PTLayerNormMetatype",
+ "add_57": "PTAddMetatype",
+ "_param_constant276": "PTConstNoopMetatype",
+ "_param_constant277": "PTConstNoopMetatype",
+ "linear_102": "PTLinearMetatype",
+ "gelu_16": "PTGELUMetatype",
+ "dropout_66": "PTDropoutMetatype",
+ "_param_constant278": "PTConstNoopMetatype",
+ "_param_constant279": "PTConstNoopMetatype",
+ "linear_103": "PTLinearMetatype",
+ "dropout_67": "PTDropoutMetatype",
+ "_param_constant280": "PTConstNoopMetatype",
+ "_param_constant281": "PTConstNoopMetatype",
+ "layer_norm_36": "PTLayerNormMetatype",
+ "add_58": "PTAddMetatype",
+ "_tensor_constant106": "PTConstNoopMetatype",
+ "_param_constant282": "PTConstNoopMetatype",
+ "_param_constant283": "PTConstNoopMetatype",
+ "linear_104": "PTLinearMetatype",
+ "relu__17": "PTRELUMetatype",
+ "_param_constant284": "PTConstNoopMetatype",
+ "linear_105": "PTLinearMetatype",
+ "view_92": "PTReshapeMetatype",
+ "_tensor_constant107": "PTConstNoopMetatype",
+ "index_17": "UnknownMetatype",
+ "view_93": "PTReshapeMetatype",
+ "permute_77": "PTTransposeMetatype",
+ "contiguous_32": "PTNoopMetatype",
+ "unsqueeze_49": "PTReshapeMetatype",
+ "sigmoid_17": "PTSigmoidMetatype",
+ "mul_34": "PTMulMetatype",
+ "pad_19": "PTPadMetatype",
+ "roll_16": "UnknownMetatype",
+ "view_94": "PTReshapeMetatype",
+ "permute_78": "PTTransposeMetatype",
+ "reshape_76": "PTReshapeMetatype",
+ "_param_constant285": "PTConstNoopMetatype",
+ "clone_17": "PTNoopMetatype",
+ "slice_250": "PTGatherMetatype",
+ "zero__17": "UnknownMetatype",
+ "_param_constant286": "PTConstNoopMetatype",
+ "linear_106": "PTLinearMetatype",
+ "reshape_77": "PTReshapeMetatype",
+ "permute_79": "PTTransposeMetatype",
+ "select_51": "PTGatherMetatype",
+ "select_52": "PTGatherMetatype",
+ "select_53": "PTGatherMetatype",
+ "linalg_vector_norm_34": "UnknownMetatype",
+ "clamp_min_34": "UnknownMetatype",
+ "expand_as_34": "PTExpandAsMetatype",
+ "div_34": "PTDivMetatype",
+ "linalg_vector_norm_35": "UnknownMetatype",
+ "clamp_min_35": "UnknownMetatype",
+ "expand_as_35": "PTExpandAsMetatype",
+ "div_35": "PTDivMetatype",
+ "transpose_34": "PTTransposeMetatype",
+ "matmul_34": "PTMatMulMetatype",
+ "_param_constant287": "PTConstNoopMetatype",
+ "clamp_17": "UnknownMetatype",
+ "exp_17": "PTExpMetatype",
+ "mul_35": "PTMulMetatype",
+ "add_59": "PTAddMetatype",
+ "new_zeros_8": "UnknownMetatype",
+ "_tensor_constant108": "PTConstNoopMetatype",
+ "lift_fresh_copy_72": "UnknownMetatype",
+ "slice_251": "PTGatherMetatype",
+ "slice_252": "PTGatherMetatype",
+ "fill__72": "UnknownMetatype",
+ "_tensor_constant109": "PTConstNoopMetatype",
+ "lift_fresh_copy_73": "UnknownMetatype",
+ "slice_253": "PTGatherMetatype",
+ "slice_254": "PTGatherMetatype",
+ "fill__73": "UnknownMetatype",
+ "_tensor_constant110": "PTConstNoopMetatype",
+ "lift_fresh_copy_74": "UnknownMetatype",
+ "slice_255": "PTGatherMetatype",
+ "slice_256": "PTGatherMetatype",
+ "fill__74": "UnknownMetatype",
+ "_tensor_constant111": "PTConstNoopMetatype",
+ "lift_fresh_copy_75": "UnknownMetatype",
+ "slice_257": "PTGatherMetatype",
+ "slice_258": "PTGatherMetatype",
+ "fill__75": "UnknownMetatype",
+ "_tensor_constant112": "PTConstNoopMetatype",
+ "lift_fresh_copy_76": "UnknownMetatype",
+ "slice_259": "PTGatherMetatype",
+ "slice_260": "PTGatherMetatype",
+ "fill__76": "UnknownMetatype",
+ "_tensor_constant113": "PTConstNoopMetatype",
+ "lift_fresh_copy_77": "UnknownMetatype",
+ "slice_261": "PTGatherMetatype",
+ "slice_262": "PTGatherMetatype",
+ "fill__77": "UnknownMetatype",
+ "_tensor_constant114": "PTConstNoopMetatype",
+ "lift_fresh_copy_78": "UnknownMetatype",
+ "slice_263": "PTGatherMetatype",
+ "slice_264": "PTGatherMetatype",
+ "fill__78": "UnknownMetatype",
+ "_tensor_constant115": "PTConstNoopMetatype",
+ "lift_fresh_copy_79": "UnknownMetatype",
+ "slice_265": "PTGatherMetatype",
+ "slice_266": "PTGatherMetatype",
+ "fill__79": "UnknownMetatype",
+ "_tensor_constant116": "PTConstNoopMetatype",
+ "lift_fresh_copy_80": "UnknownMetatype",
+ "slice_267": "PTGatherMetatype",
+ "slice_268": "PTGatherMetatype",
+ "fill__80": "UnknownMetatype",
+ "view_95": "PTReshapeMetatype",
+ "permute_80": "PTTransposeMetatype",
+ "reshape_78": "PTReshapeMetatype",
+ "unsqueeze_50": "PTReshapeMetatype",
+ "unsqueeze_51": "PTReshapeMetatype",
+ "sub_8": "PTSubMetatype",
+ "ne_8": "UnknownMetatype",
+ "masked_fill_16": "PTScatterMetatype",
+ "eq_8": "UnknownMetatype",
+ "masked_fill_17": "PTScatterMetatype",
+ "view_96": "PTReshapeMetatype",
+ "unsqueeze_52": "PTReshapeMetatype",
+ "unsqueeze_53": "PTReshapeMetatype",
+ "add_60": "PTAddMetatype",
+ "view_97": "PTReshapeMetatype",
+ "softmax_17": "PTSoftmaxMetatype",
+ "dropout_68": "PTDropoutMetatype",
+ "matmul_35": "PTMatMulMetatype",
+ "transpose_35": "PTTransposeMetatype",
+ "reshape_79": "PTReshapeMetatype",
+ "_param_constant288": "PTConstNoopMetatype",
+ "_param_constant289": "PTConstNoopMetatype",
+ "linear_107": "PTLinearMetatype",
+ "dropout_69": "PTDropoutMetatype",
+ "view_98": "PTReshapeMetatype",
+ "permute_81": "PTTransposeMetatype",
+ "reshape_80": "PTReshapeMetatype",
+ "roll_17": "UnknownMetatype",
+ "slice_269": "PTGatherMetatype",
+ "slice_270": "PTGatherMetatype",
+ "slice_271": "PTGatherMetatype",
+ "slice_272": "PTGatherMetatype",
+ "contiguous_33": "PTNoopMetatype",
+ "_param_constant290": "PTConstNoopMetatype",
+ "_param_constant291": "PTConstNoopMetatype",
+ "layer_norm_37": "PTLayerNormMetatype",
+ "add_61": "PTAddMetatype",
+ "_param_constant292": "PTConstNoopMetatype",
+ "_param_constant293": "PTConstNoopMetatype",
+ "linear_108": "PTLinearMetatype",
+ "gelu_17": "PTGELUMetatype",
+ "dropout_70": "PTDropoutMetatype",
+ "_param_constant294": "PTConstNoopMetatype",
+ "_param_constant295": "PTConstNoopMetatype",
+ "linear_109": "PTLinearMetatype",
+ "dropout_71": "PTDropoutMetatype",
+ "_param_constant296": "PTConstNoopMetatype",
+ "_param_constant297": "PTConstNoopMetatype",
+ "layer_norm_38": "PTLayerNormMetatype",
+ "add_62": "PTAddMetatype",
+ "_tensor_constant117": "PTConstNoopMetatype",
+ "_param_constant298": "PTConstNoopMetatype",
+ "_param_constant299": "PTConstNoopMetatype",
+ "linear_110": "PTLinearMetatype",
+ "relu__18": "PTRELUMetatype",
+ "_param_constant300": "PTConstNoopMetatype",
+ "linear_111": "PTLinearMetatype",
+ "view_99": "PTReshapeMetatype",
+ "_tensor_constant118": "PTConstNoopMetatype",
+ "index_18": "UnknownMetatype",
+ "view_100": "PTReshapeMetatype",
+ "permute_82": "PTTransposeMetatype",
+ "contiguous_34": "PTNoopMetatype",
+ "unsqueeze_54": "PTReshapeMetatype",
+ "sigmoid_18": "PTSigmoidMetatype",
+ "mul_36": "PTMulMetatype",
+ "pad_20": "PTPadMetatype",
+ "view_101": "PTReshapeMetatype",
+ "permute_83": "PTTransposeMetatype",
+ "reshape_81": "PTReshapeMetatype",
+ "_param_constant301": "PTConstNoopMetatype",
+ "clone_18": "PTNoopMetatype",
+ "slice_273": "PTGatherMetatype",
+ "zero__18": "UnknownMetatype",
+ "_param_constant302": "PTConstNoopMetatype",
+ "linear_112": "PTLinearMetatype",
+ "reshape_82": "PTReshapeMetatype",
+ "permute_84": "PTTransposeMetatype",
+ "select_54": "PTGatherMetatype",
+ "select_55": "PTGatherMetatype",
+ "select_56": "PTGatherMetatype",
+ "linalg_vector_norm_36": "UnknownMetatype",
+ "clamp_min_36": "UnknownMetatype",
+ "expand_as_36": "PTExpandAsMetatype",
+ "div_36": "PTDivMetatype",
+ "linalg_vector_norm_37": "UnknownMetatype",
+ "clamp_min_37": "UnknownMetatype",
+ "expand_as_37": "PTExpandAsMetatype",
+ "div_37": "PTDivMetatype",
+ "transpose_36": "PTTransposeMetatype",
+ "matmul_36": "PTMatMulMetatype",
+ "_param_constant303": "PTConstNoopMetatype",
+ "clamp_18": "UnknownMetatype",
+ "exp_18": "PTExpMetatype",
+ "mul_37": "PTMulMetatype",
+ "add_63": "PTAddMetatype",
+ "softmax_18": "PTSoftmaxMetatype",
+ "dropout_72": "PTDropoutMetatype",
+ "matmul_37": "PTMatMulMetatype",
+ "transpose_37": "PTTransposeMetatype",
+ "reshape_83": "PTReshapeMetatype",
+ "_param_constant304": "PTConstNoopMetatype",
+ "_param_constant305": "PTConstNoopMetatype",
+ "linear_113": "PTLinearMetatype",
+ "dropout_73": "PTDropoutMetatype",
+ "view_102": "PTReshapeMetatype",
+ "permute_85": "PTTransposeMetatype",
+ "reshape_84": "PTReshapeMetatype",
+ "slice_274": "PTGatherMetatype",
+ "slice_275": "PTGatherMetatype",
+ "slice_276": "PTGatherMetatype",
+ "slice_277": "PTGatherMetatype",
+ "contiguous_35": "PTNoopMetatype",
+ "_param_constant306": "PTConstNoopMetatype",
+ "_param_constant307": "PTConstNoopMetatype",
+ "layer_norm_39": "PTLayerNormMetatype",
+ "add_64": "PTAddMetatype",
+ "_param_constant308": "PTConstNoopMetatype",
+ "_param_constant309": "PTConstNoopMetatype",
+ "linear_114": "PTLinearMetatype",
+ "gelu_18": "PTGELUMetatype",
+ "dropout_74": "PTDropoutMetatype",
+ "_param_constant310": "PTConstNoopMetatype",
+ "_param_constant311": "PTConstNoopMetatype",
+ "linear_115": "PTLinearMetatype",
+ "dropout_75": "PTDropoutMetatype",
+ "_param_constant312": "PTConstNoopMetatype",
+ "_param_constant313": "PTConstNoopMetatype",
+ "layer_norm_40": "PTLayerNormMetatype",
+ "add_65": "PTAddMetatype",
+ "_tensor_constant119": "PTConstNoopMetatype",
+ "_param_constant314": "PTConstNoopMetatype",
+ "_param_constant315": "PTConstNoopMetatype",
+ "linear_116": "PTLinearMetatype",
+ "relu__19": "PTRELUMetatype",
+ "_param_constant316": "PTConstNoopMetatype",
+ "linear_117": "PTLinearMetatype",
+ "view_103": "PTReshapeMetatype",
+ "_tensor_constant120": "PTConstNoopMetatype",
+ "index_19": "UnknownMetatype",
+ "view_104": "PTReshapeMetatype",
+ "permute_86": "PTTransposeMetatype",
+ "contiguous_36": "PTNoopMetatype",
+ "unsqueeze_55": "PTReshapeMetatype",
+ "sigmoid_19": "PTSigmoidMetatype",
+ "mul_38": "PTMulMetatype",
+ "pad_21": "PTPadMetatype",
+ "roll_18": "UnknownMetatype",
+ "view_105": "PTReshapeMetatype",
+ "permute_87": "PTTransposeMetatype",
+ "reshape_85": "PTReshapeMetatype",
+ "_param_constant317": "PTConstNoopMetatype",
+ "clone_19": "PTNoopMetatype",
+ "slice_278": "PTGatherMetatype",
+ "zero__19": "UnknownMetatype",
+ "_param_constant318": "PTConstNoopMetatype",
+ "linear_118": "PTLinearMetatype",
+ "reshape_86": "PTReshapeMetatype",
+ "permute_88": "PTTransposeMetatype",
+ "select_57": "PTGatherMetatype",
+ "select_58": "PTGatherMetatype",
+ "select_59": "PTGatherMetatype",
+ "linalg_vector_norm_38": "UnknownMetatype",
+ "clamp_min_38": "UnknownMetatype",
+ "expand_as_38": "PTExpandAsMetatype",
+ "div_38": "PTDivMetatype",
+ "linalg_vector_norm_39": "UnknownMetatype",
+ "clamp_min_39": "UnknownMetatype",
+ "expand_as_39": "PTExpandAsMetatype",
+ "div_39": "PTDivMetatype",
+ "transpose_38": "PTTransposeMetatype",
+ "matmul_38": "PTMatMulMetatype",
+ "_param_constant319": "PTConstNoopMetatype",
+ "clamp_19": "UnknownMetatype",
+ "exp_19": "PTExpMetatype",
+ "mul_39": "PTMulMetatype",
+ "add_66": "PTAddMetatype",
+ "new_zeros_9": "UnknownMetatype",
+ "_tensor_constant121": "PTConstNoopMetatype",
+ "lift_fresh_copy_81": "UnknownMetatype",
+ "slice_279": "PTGatherMetatype",
+ "slice_280": "PTGatherMetatype",
+ "fill__81": "UnknownMetatype",
+ "_tensor_constant122": "PTConstNoopMetatype",
+ "lift_fresh_copy_82": "UnknownMetatype",
+ "slice_281": "PTGatherMetatype",
+ "slice_282": "PTGatherMetatype",
+ "fill__82": "UnknownMetatype",
+ "_tensor_constant123": "PTConstNoopMetatype",
+ "lift_fresh_copy_83": "UnknownMetatype",
+ "slice_283": "PTGatherMetatype",
+ "slice_284": "PTGatherMetatype",
+ "fill__83": "UnknownMetatype",
+ "_tensor_constant124": "PTConstNoopMetatype",
+ "lift_fresh_copy_84": "UnknownMetatype",
+ "slice_285": "PTGatherMetatype",
+ "slice_286": "PTGatherMetatype",
+ "fill__84": "UnknownMetatype",
+ "_tensor_constant125": "PTConstNoopMetatype",
+ "lift_fresh_copy_85": "UnknownMetatype",
+ "slice_287": "PTGatherMetatype",
+ "slice_288": "PTGatherMetatype",
+ "fill__85": "UnknownMetatype",
+ "_tensor_constant126": "PTConstNoopMetatype",
+ "lift_fresh_copy_86": "UnknownMetatype",
+ "slice_289": "PTGatherMetatype",
+ "slice_290": "PTGatherMetatype",
+ "fill__86": "UnknownMetatype",
+ "_tensor_constant127": "PTConstNoopMetatype",
+ "lift_fresh_copy_87": "UnknownMetatype",
+ "slice_291": "PTGatherMetatype",
+ "slice_292": "PTGatherMetatype",
+ "fill__87": "UnknownMetatype",
+ "_tensor_constant128": "PTConstNoopMetatype",
+ "lift_fresh_copy_88": "UnknownMetatype",
+ "slice_293": "PTGatherMetatype",
+ "slice_294": "PTGatherMetatype",
+ "fill__88": "UnknownMetatype",
+ "_tensor_constant129": "PTConstNoopMetatype",
+ "lift_fresh_copy_89": "UnknownMetatype",
+ "slice_295": "PTGatherMetatype",
+ "slice_296": "PTGatherMetatype",
+ "fill__89": "UnknownMetatype",
+ "view_106": "PTReshapeMetatype",
+ "permute_89": "PTTransposeMetatype",
+ "reshape_87": "PTReshapeMetatype",
+ "unsqueeze_56": "PTReshapeMetatype",
+ "unsqueeze_57": "PTReshapeMetatype",
+ "sub_9": "PTSubMetatype",
+ "ne_9": "UnknownMetatype",
+ "masked_fill_18": "PTScatterMetatype",
+ "eq_9": "UnknownMetatype",
+ "masked_fill_19": "PTScatterMetatype",
+ "view_107": "PTReshapeMetatype",
+ "unsqueeze_58": "PTReshapeMetatype",
+ "unsqueeze_59": "PTReshapeMetatype",
+ "add_67": "PTAddMetatype",
+ "view_108": "PTReshapeMetatype",
+ "softmax_19": "PTSoftmaxMetatype",
+ "dropout_76": "PTDropoutMetatype",
+ "matmul_39": "PTMatMulMetatype",
+ "transpose_39": "PTTransposeMetatype",
+ "reshape_88": "PTReshapeMetatype",
+ "_param_constant320": "PTConstNoopMetatype",
+ "_param_constant321": "PTConstNoopMetatype",
+ "linear_119": "PTLinearMetatype",
+ "dropout_77": "PTDropoutMetatype",
+ "view_109": "PTReshapeMetatype",
+ "permute_90": "PTTransposeMetatype",
+ "reshape_89": "PTReshapeMetatype",
+ "roll_19": "UnknownMetatype",
+ "slice_297": "PTGatherMetatype",
+ "slice_298": "PTGatherMetatype",
+ "slice_299": "PTGatherMetatype",
+ "slice_300": "PTGatherMetatype",
+ "contiguous_37": "PTNoopMetatype",
+ "_param_constant322": "PTConstNoopMetatype",
+ "_param_constant323": "PTConstNoopMetatype",
+ "layer_norm_41": "PTLayerNormMetatype",
+ "add_68": "PTAddMetatype",
+ "_param_constant324": "PTConstNoopMetatype",
+ "_param_constant325": "PTConstNoopMetatype",
+ "linear_120": "PTLinearMetatype",
+ "gelu_19": "PTGELUMetatype",
+ "dropout_78": "PTDropoutMetatype",
+ "_param_constant326": "PTConstNoopMetatype",
+ "_param_constant327": "PTConstNoopMetatype",
+ "linear_121": "PTLinearMetatype",
+ "dropout_79": "PTDropoutMetatype",
+ "_param_constant328": "PTConstNoopMetatype",
+ "_param_constant329": "PTConstNoopMetatype",
+ "layer_norm_42": "PTLayerNormMetatype",
+ "add_69": "PTAddMetatype",
+ "_tensor_constant130": "PTConstNoopMetatype",
+ "_param_constant330": "PTConstNoopMetatype",
+ "_param_constant331": "PTConstNoopMetatype",
+ "linear_122": "PTLinearMetatype",
+ "relu__20": "PTRELUMetatype",
+ "_param_constant332": "PTConstNoopMetatype",
+ "linear_123": "PTLinearMetatype",
+ "view_110": "PTReshapeMetatype",
+ "_tensor_constant131": "PTConstNoopMetatype",
+ "index_20": "UnknownMetatype",
+ "view_111": "PTReshapeMetatype",
+ "permute_91": "PTTransposeMetatype",
+ "contiguous_38": "PTNoopMetatype",
+ "unsqueeze_60": "PTReshapeMetatype",
+ "sigmoid_20": "PTSigmoidMetatype",
+ "mul_40": "PTMulMetatype",
+ "pad_22": "PTPadMetatype",
+ "view_112": "PTReshapeMetatype",
+ "permute_92": "PTTransposeMetatype",
+ "reshape_90": "PTReshapeMetatype",
+ "_param_constant333": "PTConstNoopMetatype",
+ "clone_20": "PTNoopMetatype",
+ "slice_301": "PTGatherMetatype",
+ "zero__20": "UnknownMetatype",
+ "_param_constant334": "PTConstNoopMetatype",
+ "linear_124": "PTLinearMetatype",
+ "reshape_91": "PTReshapeMetatype",
+ "permute_93": "PTTransposeMetatype",
+ "select_60": "PTGatherMetatype",
+ "select_61": "PTGatherMetatype",
+ "select_62": "PTGatherMetatype",
+ "linalg_vector_norm_40": "UnknownMetatype",
+ "clamp_min_40": "UnknownMetatype",
+ "expand_as_40": "PTExpandAsMetatype",
+ "div_40": "PTDivMetatype",
+ "linalg_vector_norm_41": "UnknownMetatype",
+ "clamp_min_41": "UnknownMetatype",
+ "expand_as_41": "PTExpandAsMetatype",
+ "div_41": "PTDivMetatype",
+ "transpose_40": "PTTransposeMetatype",
+ "matmul_40": "PTMatMulMetatype",
+ "_param_constant335": "PTConstNoopMetatype",
+ "clamp_20": "UnknownMetatype",
+ "exp_20": "PTExpMetatype",
+ "mul_41": "PTMulMetatype",
+ "add_70": "PTAddMetatype",
+ "softmax_20": "PTSoftmaxMetatype",
+ "dropout_80": "PTDropoutMetatype",
+ "matmul_41": "PTMatMulMetatype",
+ "transpose_41": "PTTransposeMetatype",
+ "reshape_92": "PTReshapeMetatype",
+ "_param_constant336": "PTConstNoopMetatype",
+ "_param_constant337": "PTConstNoopMetatype",
+ "linear_125": "PTLinearMetatype",
+ "dropout_81": "PTDropoutMetatype",
+ "view_113": "PTReshapeMetatype",
+ "permute_94": "PTTransposeMetatype",
+ "reshape_93": "PTReshapeMetatype",
+ "slice_302": "PTGatherMetatype",
+ "slice_303": "PTGatherMetatype",
+ "slice_304": "PTGatherMetatype",
+ "slice_305": "PTGatherMetatype",
+ "contiguous_39": "PTNoopMetatype",
+ "_param_constant338": "PTConstNoopMetatype",
+ "_param_constant339": "PTConstNoopMetatype",
+ "layer_norm_43": "PTLayerNormMetatype",
+ "add_71": "PTAddMetatype",
+ "_param_constant340": "PTConstNoopMetatype",
+ "_param_constant341": "PTConstNoopMetatype",
+ "linear_126": "PTLinearMetatype",
+ "gelu_20": "PTGELUMetatype",
+ "dropout_82": "PTDropoutMetatype",
+ "_param_constant342": "PTConstNoopMetatype",
+ "_param_constant343": "PTConstNoopMetatype",
+ "linear_127": "PTLinearMetatype",
+ "dropout_83": "PTDropoutMetatype",
+ "_param_constant344": "PTConstNoopMetatype",
+ "_param_constant345": "PTConstNoopMetatype",
+ "layer_norm_44": "PTLayerNormMetatype",
+ "add_72": "PTAddMetatype",
+ "_tensor_constant132": "PTConstNoopMetatype",
+ "_param_constant346": "PTConstNoopMetatype",
+ "_param_constant347": "PTConstNoopMetatype",
+ "linear_128": "PTLinearMetatype",
+ "relu__21": "PTRELUMetatype",
+ "_param_constant348": "PTConstNoopMetatype",
+ "linear_129": "PTLinearMetatype",
+ "view_114": "PTReshapeMetatype",
+ "_tensor_constant133": "PTConstNoopMetatype",
+ "index_21": "UnknownMetatype",
+ "view_115": "PTReshapeMetatype",
+ "permute_95": "PTTransposeMetatype",
+ "contiguous_40": "PTNoopMetatype",
+ "unsqueeze_61": "PTReshapeMetatype",
+ "sigmoid_21": "PTSigmoidMetatype",
+ "mul_42": "PTMulMetatype",
+ "pad_23": "PTPadMetatype",
+ "roll_20": "UnknownMetatype",
+ "view_116": "PTReshapeMetatype",
+ "permute_96": "PTTransposeMetatype",
+ "reshape_94": "PTReshapeMetatype",
+ "_param_constant349": "PTConstNoopMetatype",
+ "clone_21": "PTNoopMetatype",
+ "slice_306": "PTGatherMetatype",
+ "zero__21": "UnknownMetatype",
+ "_param_constant350": "PTConstNoopMetatype",
+ "linear_130": "PTLinearMetatype",
+ "reshape_95": "PTReshapeMetatype",
+ "permute_97": "PTTransposeMetatype",
+ "select_63": "PTGatherMetatype",
+ "select_64": "PTGatherMetatype",
+ "select_65": "PTGatherMetatype",
+ "linalg_vector_norm_42": "UnknownMetatype",
+ "clamp_min_42": "UnknownMetatype",
+ "expand_as_42": "PTExpandAsMetatype",
+ "div_42": "PTDivMetatype",
+ "linalg_vector_norm_43": "UnknownMetatype",
+ "clamp_min_43": "UnknownMetatype",
+ "expand_as_43": "PTExpandAsMetatype",
+ "div_43": "PTDivMetatype",
+ "transpose_42": "PTTransposeMetatype",
+ "matmul_42": "PTMatMulMetatype",
+ "_param_constant351": "PTConstNoopMetatype",
+ "clamp_21": "UnknownMetatype",
+ "exp_21": "PTExpMetatype",
+ "mul_43": "PTMulMetatype",
+ "add_73": "PTAddMetatype",
+ "new_zeros_10": "UnknownMetatype",
+ "_tensor_constant134": "PTConstNoopMetatype",
+ "lift_fresh_copy_90": "UnknownMetatype",
+ "slice_307": "PTGatherMetatype",
+ "slice_308": "PTGatherMetatype",
+ "fill__90": "UnknownMetatype",
+ "_tensor_constant135": "PTConstNoopMetatype",
+ "lift_fresh_copy_91": "UnknownMetatype",
+ "slice_309": "PTGatherMetatype",
+ "slice_310": "PTGatherMetatype",
+ "fill__91": "UnknownMetatype",
+ "_tensor_constant136": "PTConstNoopMetatype",
+ "lift_fresh_copy_92": "UnknownMetatype",
+ "slice_311": "PTGatherMetatype",
+ "slice_312": "PTGatherMetatype",
+ "fill__92": "UnknownMetatype",
+ "_tensor_constant137": "PTConstNoopMetatype",
+ "lift_fresh_copy_93": "UnknownMetatype",
+ "slice_313": "PTGatherMetatype",
+ "slice_314": "PTGatherMetatype",
+ "fill__93": "UnknownMetatype",
+ "_tensor_constant138": "PTConstNoopMetatype",
+ "lift_fresh_copy_94": "UnknownMetatype",
+ "slice_315": "PTGatherMetatype",
+ "slice_316": "PTGatherMetatype",
+ "fill__94": "UnknownMetatype",
+ "_tensor_constant139": "PTConstNoopMetatype",
+ "lift_fresh_copy_95": "UnknownMetatype",
+ "slice_317": "PTGatherMetatype",
+ "slice_318": "PTGatherMetatype",
+ "fill__95": "UnknownMetatype",
+ "_tensor_constant140": "PTConstNoopMetatype",
+ "lift_fresh_copy_96": "UnknownMetatype",
+ "slice_319": "PTGatherMetatype",
+ "slice_320": "PTGatherMetatype",
+ "fill__96": "UnknownMetatype",
+ "_tensor_constant141": "PTConstNoopMetatype",
+ "lift_fresh_copy_97": "UnknownMetatype",
+ "slice_321": "PTGatherMetatype",
+ "slice_322": "PTGatherMetatype",
+ "fill__97": "UnknownMetatype",
+ "_tensor_constant142": "PTConstNoopMetatype",
+ "lift_fresh_copy_98": "UnknownMetatype",
+ "slice_323": "PTGatherMetatype",
+ "slice_324": "PTGatherMetatype",
+ "fill__98": "UnknownMetatype",
+ "view_117": "PTReshapeMetatype",
+ "permute_98": "PTTransposeMetatype",
+ "reshape_96": "PTReshapeMetatype",
+ "unsqueeze_62": "PTReshapeMetatype",
+ "unsqueeze_63": "PTReshapeMetatype",
+ "sub_10": "PTSubMetatype",
+ "ne_10": "UnknownMetatype",
+ "masked_fill_20": "PTScatterMetatype",
+ "eq_10": "UnknownMetatype",
+ "masked_fill_21": "PTScatterMetatype",
+ "view_118": "PTReshapeMetatype",
+ "unsqueeze_64": "PTReshapeMetatype",
+ "unsqueeze_65": "PTReshapeMetatype",
+ "add_74": "PTAddMetatype",
+ "view_119": "PTReshapeMetatype",
+ "softmax_21": "PTSoftmaxMetatype",
+ "dropout_84": "PTDropoutMetatype",
+ "matmul_43": "PTMatMulMetatype",
+ "transpose_43": "PTTransposeMetatype",
+ "reshape_97": "PTReshapeMetatype",
+ "_param_constant352": "PTConstNoopMetatype",
+ "_param_constant353": "PTConstNoopMetatype",
+ "linear_131": "PTLinearMetatype",
+ "dropout_85": "PTDropoutMetatype",
+ "view_120": "PTReshapeMetatype",
+ "permute_99": "PTTransposeMetatype",
+ "reshape_98": "PTReshapeMetatype",
+ "roll_21": "UnknownMetatype",
+ "slice_325": "PTGatherMetatype",
+ "slice_326": "PTGatherMetatype",
+ "slice_327": "PTGatherMetatype",
+ "slice_328": "PTGatherMetatype",
+ "contiguous_41": "PTNoopMetatype",
+ "_param_constant354": "PTConstNoopMetatype",
+ "_param_constant355": "PTConstNoopMetatype",
+ "layer_norm_45": "PTLayerNormMetatype",
+ "add_75": "PTAddMetatype",
+ "_param_constant356": "PTConstNoopMetatype",
+ "_param_constant357": "PTConstNoopMetatype",
+ "linear_132": "PTLinearMetatype",
+ "gelu_21": "PTGELUMetatype",
+ "dropout_86": "PTDropoutMetatype",
+ "_param_constant358": "PTConstNoopMetatype",
+ "_param_constant359": "PTConstNoopMetatype",
+ "linear_133": "PTLinearMetatype",
+ "dropout_87": "PTDropoutMetatype",
+ "_param_constant360": "PTConstNoopMetatype",
+ "_param_constant361": "PTConstNoopMetatype",
+ "layer_norm_46": "PTLayerNormMetatype",
+ "add_76": "PTAddMetatype",
+ "pad_24": "PTPadMetatype",
+ "slice_329": "PTGatherMetatype",
+ "slice_330": "PTGatherMetatype",
+ "slice_331": "PTGatherMetatype",
+ "slice_332": "PTGatherMetatype",
+ "slice_333": "PTGatherMetatype",
+ "slice_334": "PTGatherMetatype",
+ "slice_335": "PTGatherMetatype",
+ "slice_336": "PTGatherMetatype",
+ "slice_337": "PTGatherMetatype",
+ "slice_338": "PTGatherMetatype",
+ "slice_339": "PTGatherMetatype",
+ "slice_340": "PTGatherMetatype",
+ "cat_2": "PTCatMetatype",
+ "_param_constant362": "PTConstNoopMetatype",
+ "linear_134": "PTLinearMetatype",
+ "_param_constant363": "PTConstNoopMetatype",
+ "_param_constant364": "PTConstNoopMetatype",
+ "layer_norm_47": "PTLayerNormMetatype",
+ "_tensor_constant143": "PTConstNoopMetatype",
+ "_param_constant365": "PTConstNoopMetatype",
+ "_param_constant366": "PTConstNoopMetatype",
+ "linear_135": "PTLinearMetatype",
+ "relu__22": "PTRELUMetatype",
+ "_param_constant367": "PTConstNoopMetatype",
+ "linear_136": "PTLinearMetatype",
+ "view_121": "PTReshapeMetatype",
+ "_tensor_constant144": "PTConstNoopMetatype",
+ "index_22": "UnknownMetatype",
+ "view_122": "PTReshapeMetatype",
+ "permute_100": "PTTransposeMetatype",
+ "contiguous_42": "PTNoopMetatype",
+ "unsqueeze_66": "PTReshapeMetatype",
+ "sigmoid_22": "PTSigmoidMetatype",
+ "mul_44": "PTMulMetatype",
+ "pad_25": "PTPadMetatype",
+ "view_123": "PTReshapeMetatype",
+ "permute_101": "PTTransposeMetatype",
+ "reshape_99": "PTReshapeMetatype",
+ "_param_constant368": "PTConstNoopMetatype",
+ "clone_22": "PTNoopMetatype",
+ "slice_341": "PTGatherMetatype",
+ "zero__22": "UnknownMetatype",
+ "_param_constant369": "PTConstNoopMetatype",
+ "linear_137": "PTLinearMetatype",
+ "reshape_100": "PTReshapeMetatype",
+ "permute_102": "PTTransposeMetatype",
+ "select_66": "PTGatherMetatype",
+ "select_67": "PTGatherMetatype",
+ "select_68": "PTGatherMetatype",
+ "linalg_vector_norm_44": "UnknownMetatype",
+ "clamp_min_44": "UnknownMetatype",
+ "expand_as_44": "PTExpandAsMetatype",
+ "div_44": "PTDivMetatype",
+ "linalg_vector_norm_45": "UnknownMetatype",
+ "clamp_min_45": "UnknownMetatype",
+ "expand_as_45": "PTExpandAsMetatype",
+ "div_45": "PTDivMetatype",
+ "transpose_44": "PTTransposeMetatype",
+ "matmul_44": "PTMatMulMetatype",
+ "_param_constant370": "PTConstNoopMetatype",
+ "clamp_22": "UnknownMetatype",
+ "exp_22": "PTExpMetatype",
+ "mul_45": "PTMulMetatype",
+ "add_77": "PTAddMetatype",
+ "softmax_22": "PTSoftmaxMetatype",
+ "dropout_88": "PTDropoutMetatype",
+ "matmul_45": "PTMatMulMetatype",
+ "transpose_45": "PTTransposeMetatype",
+ "reshape_101": "PTReshapeMetatype",
+ "_param_constant371": "PTConstNoopMetatype",
+ "_param_constant372": "PTConstNoopMetatype",
+ "linear_138": "PTLinearMetatype",
+ "dropout_89": "PTDropoutMetatype",
+ "view_124": "PTReshapeMetatype",
+ "permute_103": "PTTransposeMetatype",
+ "reshape_102": "PTReshapeMetatype",
+ "slice_342": "PTGatherMetatype",
+ "slice_343": "PTGatherMetatype",
+ "slice_344": "PTGatherMetatype",
+ "slice_345": "PTGatherMetatype",
+ "contiguous_43": "PTNoopMetatype",
+ "_param_constant373": "PTConstNoopMetatype",
+ "_param_constant374": "PTConstNoopMetatype",
+ "layer_norm_48": "PTLayerNormMetatype",
+ "add_78": "PTAddMetatype",
+ "_param_constant375": "PTConstNoopMetatype",
+ "_param_constant376": "PTConstNoopMetatype",
+ "linear_139": "PTLinearMetatype",
+ "gelu_22": "PTGELUMetatype",
+ "dropout_90": "PTDropoutMetatype",
+ "_param_constant377": "PTConstNoopMetatype",
+ "_param_constant378": "PTConstNoopMetatype",
+ "linear_140": "PTLinearMetatype",
+ "dropout_91": "PTDropoutMetatype",
+ "_param_constant379": "PTConstNoopMetatype",
+ "_param_constant380": "PTConstNoopMetatype",
+ "layer_norm_49": "PTLayerNormMetatype",
+ "add_79": "PTAddMetatype",
+ "_tensor_constant145": "PTConstNoopMetatype",
+ "_param_constant381": "PTConstNoopMetatype",
+ "_param_constant382": "PTConstNoopMetatype",
+ "linear_141": "PTLinearMetatype",
+ "relu__23": "PTRELUMetatype",
+ "_param_constant383": "PTConstNoopMetatype",
+ "linear_142": "PTLinearMetatype",
+ "view_125": "PTReshapeMetatype",
+ "_tensor_constant146": "PTConstNoopMetatype",
+ "index_23": "UnknownMetatype",
+ "view_126": "PTReshapeMetatype",
+ "permute_104": "PTTransposeMetatype",
+ "contiguous_44": "PTNoopMetatype",
+ "unsqueeze_67": "PTReshapeMetatype",
+ "sigmoid_23": "PTSigmoidMetatype",
+ "mul_46": "PTMulMetatype",
+ "pad_26": "PTPadMetatype",
+ "view_127": "PTReshapeMetatype",
+ "permute_105": "PTTransposeMetatype",
+ "reshape_103": "PTReshapeMetatype",
+ "_param_constant384": "PTConstNoopMetatype",
+ "clone_23": "PTNoopMetatype",
+ "slice_346": "PTGatherMetatype",
+ "zero__23": "UnknownMetatype",
+ "_param_constant385": "PTConstNoopMetatype",
+ "linear_143": "PTLinearMetatype",
+ "reshape_104": "PTReshapeMetatype",
+ "permute_106": "PTTransposeMetatype",
+ "select_69": "PTGatherMetatype",
+ "select_70": "PTGatherMetatype",
+ "select_71": "PTGatherMetatype",
+ "linalg_vector_norm_46": "UnknownMetatype",
+ "clamp_min_46": "UnknownMetatype",
+ "expand_as_46": "PTExpandAsMetatype",
+ "div_46": "PTDivMetatype",
+ "linalg_vector_norm_47": "UnknownMetatype",
+ "clamp_min_47": "UnknownMetatype",
+ "expand_as_47": "PTExpandAsMetatype",
+ "div_47": "PTDivMetatype",
+ "transpose_46": "PTTransposeMetatype",
+ "matmul_46": "PTMatMulMetatype",
+ "_param_constant386": "PTConstNoopMetatype",
+ "clamp_23": "UnknownMetatype",
+ "exp_23": "PTExpMetatype",
+ "mul_47": "PTMulMetatype",
+ "add_80": "PTAddMetatype",
+ "softmax_23": "PTSoftmaxMetatype",
+ "dropout_92": "PTDropoutMetatype",
+ "matmul_47": "PTMatMulMetatype",
+ "transpose_47": "PTTransposeMetatype",
+ "reshape_105": "PTReshapeMetatype",
+ "_param_constant387": "PTConstNoopMetatype",
+ "_param_constant388": "PTConstNoopMetatype",
+ "linear_144": "PTLinearMetatype",
+ "dropout_93": "PTDropoutMetatype",
+ "view_128": "PTReshapeMetatype",
+ "permute_107": "PTTransposeMetatype",
+ "reshape_106": "PTReshapeMetatype",
+ "slice_347": "PTGatherMetatype",
+ "slice_348": "PTGatherMetatype",
+ "slice_349": "PTGatherMetatype",
+ "slice_350": "PTGatherMetatype",
+ "contiguous_45": "PTNoopMetatype",
+ "_param_constant389": "PTConstNoopMetatype",
+ "_param_constant390": "PTConstNoopMetatype",
+ "layer_norm_50": "PTLayerNormMetatype",
+ "add_81": "PTAddMetatype",
+ "_param_constant391": "PTConstNoopMetatype",
+ "_param_constant392": "PTConstNoopMetatype",
+ "linear_145": "PTLinearMetatype",
+ "gelu_23": "PTGELUMetatype",
+ "dropout_94": "PTDropoutMetatype",
+ "_param_constant393": "PTConstNoopMetatype",
+ "_param_constant394": "PTConstNoopMetatype",
+ "linear_146": "PTLinearMetatype",
+ "dropout_95": "PTDropoutMetatype",
+ "_param_constant395": "PTConstNoopMetatype",
+ "_param_constant396": "PTConstNoopMetatype",
+ "layer_norm_51": "PTLayerNormMetatype",
+ "add_82": "PTAddMetatype",
+ "_param_constant397": "PTConstNoopMetatype",
+ "_param_constant398": "PTConstNoopMetatype",
+ "layer_norm_52": "PTLayerNormMetatype",
+ "permute_108": "PTTransposeMetatype",
+ "adaptive_avg_pool2d": "PTAvgPool2dMetatype",
+ "flatten": "PTReshapeMetatype",
+ "_param_constant399": "PTConstNoopMetatype",
+ "_param_constant400": "PTConstNoopMetatype",
+ "linear_147": "PTLinearMetatype",
+ "output": "PTOutputNoopMetatype"
+}
\ No newline at end of file
diff --git a/tests/torch/data/reference_graphs/fx/reference_metatypes/unet.json b/tests/torch/data/reference_graphs/fx/reference_metatypes/unet.json
new file mode 100644
index 00000000000..fb26ec71994
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/reference_metatypes/unet.json
@@ -0,0 +1,277 @@
+{
+ "arg0_1": "PTInputNoopMetatype",
+ "_param_constant0": "PTConstNoopMetatype",
+ "_param_constant1": "PTConstNoopMetatype",
+ "conv2d": "PTConv2dMetatype",
+ "empty": "UnknownMetatype",
+ "_param_constant2": "PTConstNoopMetatype",
+ "_param_constant3": "PTConstNoopMetatype",
+ "_tensor_constant0": "PTConstNoopMetatype",
+ "_tensor_constant1": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training": "PTBatchNormMetatype",
+ "getitem": "PTGatherMetatype",
+ "getitem_1": "PTGatherMetatype",
+ "getitem_2": "PTGatherMetatype",
+ "relu": "PTRELUMetatype",
+ "_param_constant4": "PTConstNoopMetatype",
+ "_param_constant5": "PTConstNoopMetatype",
+ "conv2d_1": "PTConv2dMetatype",
+ "empty_1": "UnknownMetatype",
+ "_param_constant6": "PTConstNoopMetatype",
+ "_param_constant7": "PTConstNoopMetatype",
+ "_tensor_constant2": "PTConstNoopMetatype",
+ "_tensor_constant3": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_1": "PTBatchNormMetatype",
+ "getitem_3": "PTGatherMetatype",
+ "getitem_4": "PTGatherMetatype",
+ "getitem_5": "PTGatherMetatype",
+ "relu_1": "PTRELUMetatype",
+ "max_pool2d": "PTMaxPool2dMetatype",
+ "_param_constant8": "PTConstNoopMetatype",
+ "_param_constant9": "PTConstNoopMetatype",
+ "conv2d_2": "PTConv2dMetatype",
+ "empty_2": "UnknownMetatype",
+ "_param_constant10": "PTConstNoopMetatype",
+ "_param_constant11": "PTConstNoopMetatype",
+ "_tensor_constant4": "PTConstNoopMetatype",
+ "_tensor_constant5": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_2": "PTBatchNormMetatype",
+ "getitem_6": "PTGatherMetatype",
+ "getitem_7": "PTGatherMetatype",
+ "getitem_8": "PTGatherMetatype",
+ "relu_2": "PTRELUMetatype",
+ "_param_constant12": "PTConstNoopMetatype",
+ "_param_constant13": "PTConstNoopMetatype",
+ "conv2d_3": "PTConv2dMetatype",
+ "empty_3": "UnknownMetatype",
+ "_param_constant14": "PTConstNoopMetatype",
+ "_param_constant15": "PTConstNoopMetatype",
+ "_tensor_constant6": "PTConstNoopMetatype",
+ "_tensor_constant7": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_3": "PTBatchNormMetatype",
+ "getitem_9": "PTGatherMetatype",
+ "getitem_10": "PTGatherMetatype",
+ "getitem_11": "PTGatherMetatype",
+ "relu_3": "PTRELUMetatype",
+ "max_pool2d_1": "PTMaxPool2dMetatype",
+ "_param_constant16": "PTConstNoopMetatype",
+ "_param_constant17": "PTConstNoopMetatype",
+ "conv2d_4": "PTConv2dMetatype",
+ "empty_4": "UnknownMetatype",
+ "_param_constant18": "PTConstNoopMetatype",
+ "_param_constant19": "PTConstNoopMetatype",
+ "_tensor_constant8": "PTConstNoopMetatype",
+ "_tensor_constant9": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_4": "PTBatchNormMetatype",
+ "getitem_12": "PTGatherMetatype",
+ "getitem_13": "PTGatherMetatype",
+ "getitem_14": "PTGatherMetatype",
+ "relu_4": "PTRELUMetatype",
+ "_param_constant20": "PTConstNoopMetatype",
+ "_param_constant21": "PTConstNoopMetatype",
+ "conv2d_5": "PTConv2dMetatype",
+ "empty_5": "UnknownMetatype",
+ "_param_constant22": "PTConstNoopMetatype",
+ "_param_constant23": "PTConstNoopMetatype",
+ "_tensor_constant10": "PTConstNoopMetatype",
+ "_tensor_constant11": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_5": "PTBatchNormMetatype",
+ "getitem_15": "PTGatherMetatype",
+ "getitem_16": "PTGatherMetatype",
+ "getitem_17": "PTGatherMetatype",
+ "relu_5": "PTRELUMetatype",
+ "max_pool2d_2": "PTMaxPool2dMetatype",
+ "_param_constant24": "PTConstNoopMetatype",
+ "_param_constant25": "PTConstNoopMetatype",
+ "conv2d_6": "PTConv2dMetatype",
+ "empty_6": "UnknownMetatype",
+ "_param_constant26": "PTConstNoopMetatype",
+ "_param_constant27": "PTConstNoopMetatype",
+ "_tensor_constant12": "PTConstNoopMetatype",
+ "_tensor_constant13": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_6": "PTBatchNormMetatype",
+ "getitem_18": "PTGatherMetatype",
+ "getitem_19": "PTGatherMetatype",
+ "getitem_20": "PTGatherMetatype",
+ "relu_6": "PTRELUMetatype",
+ "_param_constant28": "PTConstNoopMetatype",
+ "_param_constant29": "PTConstNoopMetatype",
+ "conv2d_7": "PTConv2dMetatype",
+ "empty_7": "UnknownMetatype",
+ "_param_constant30": "PTConstNoopMetatype",
+ "_param_constant31": "PTConstNoopMetatype",
+ "_tensor_constant14": "PTConstNoopMetatype",
+ "_tensor_constant15": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_7": "PTBatchNormMetatype",
+ "getitem_21": "PTGatherMetatype",
+ "getitem_22": "PTGatherMetatype",
+ "getitem_23": "PTGatherMetatype",
+ "relu_7": "PTRELUMetatype",
+ "max_pool2d_3": "PTMaxPool2dMetatype",
+ "_param_constant32": "PTConstNoopMetatype",
+ "_param_constant33": "PTConstNoopMetatype",
+ "conv2d_8": "PTConv2dMetatype",
+ "empty_8": "UnknownMetatype",
+ "_param_constant34": "PTConstNoopMetatype",
+ "_param_constant35": "PTConstNoopMetatype",
+ "_tensor_constant16": "PTConstNoopMetatype",
+ "_tensor_constant17": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_8": "PTBatchNormMetatype",
+ "getitem_24": "PTGatherMetatype",
+ "getitem_25": "PTGatherMetatype",
+ "getitem_26": "PTGatherMetatype",
+ "relu_8": "PTRELUMetatype",
+ "_param_constant36": "PTConstNoopMetatype",
+ "_param_constant37": "PTConstNoopMetatype",
+ "conv2d_9": "PTConv2dMetatype",
+ "empty_9": "UnknownMetatype",
+ "_param_constant38": "PTConstNoopMetatype",
+ "_param_constant39": "PTConstNoopMetatype",
+ "_tensor_constant18": "PTConstNoopMetatype",
+ "_tensor_constant19": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_9": "PTBatchNormMetatype",
+ "getitem_27": "PTGatherMetatype",
+ "getitem_28": "PTGatherMetatype",
+ "getitem_29": "PTGatherMetatype",
+ "relu_9": "PTRELUMetatype",
+ "_param_constant40": "PTConstNoopMetatype",
+ "_param_constant41": "PTConstNoopMetatype",
+ "conv_transpose2d": "PTConvTranspose2dMetatype",
+ "slice_1": "PTGatherMetatype",
+ "slice_2": "PTGatherMetatype",
+ "slice_3": "PTGatherMetatype",
+ "slice_4": "PTGatherMetatype",
+ "cat": "PTCatMetatype",
+ "_param_constant42": "PTConstNoopMetatype",
+ "_param_constant43": "PTConstNoopMetatype",
+ "conv2d_10": "PTConv2dMetatype",
+ "empty_10": "UnknownMetatype",
+ "_param_constant44": "PTConstNoopMetatype",
+ "_param_constant45": "PTConstNoopMetatype",
+ "_tensor_constant20": "PTConstNoopMetatype",
+ "_tensor_constant21": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_10": "PTBatchNormMetatype",
+ "getitem_30": "PTGatherMetatype",
+ "getitem_31": "PTGatherMetatype",
+ "getitem_32": "PTGatherMetatype",
+ "relu_10": "PTRELUMetatype",
+ "_param_constant46": "PTConstNoopMetatype",
+ "_param_constant47": "PTConstNoopMetatype",
+ "conv2d_11": "PTConv2dMetatype",
+ "empty_11": "UnknownMetatype",
+ "_param_constant48": "PTConstNoopMetatype",
+ "_param_constant49": "PTConstNoopMetatype",
+ "_tensor_constant22": "PTConstNoopMetatype",
+ "_tensor_constant23": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_11": "PTBatchNormMetatype",
+ "getitem_33": "PTGatherMetatype",
+ "getitem_34": "PTGatherMetatype",
+ "getitem_35": "PTGatherMetatype",
+ "relu_11": "PTRELUMetatype",
+ "_param_constant50": "PTConstNoopMetatype",
+ "_param_constant51": "PTConstNoopMetatype",
+ "conv_transpose2d_1": "PTConvTranspose2dMetatype",
+ "slice_5": "PTGatherMetatype",
+ "slice_6": "PTGatherMetatype",
+ "slice_7": "PTGatherMetatype",
+ "slice_8": "PTGatherMetatype",
+ "cat_1": "PTCatMetatype",
+ "_param_constant52": "PTConstNoopMetatype",
+ "_param_constant53": "PTConstNoopMetatype",
+ "conv2d_12": "PTConv2dMetatype",
+ "empty_12": "UnknownMetatype",
+ "_param_constant54": "PTConstNoopMetatype",
+ "_param_constant55": "PTConstNoopMetatype",
+ "_tensor_constant24": "PTConstNoopMetatype",
+ "_tensor_constant25": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_12": "PTBatchNormMetatype",
+ "getitem_36": "PTGatherMetatype",
+ "getitem_37": "PTGatherMetatype",
+ "getitem_38": "PTGatherMetatype",
+ "relu_12": "PTRELUMetatype",
+ "_param_constant56": "PTConstNoopMetatype",
+ "_param_constant57": "PTConstNoopMetatype",
+ "conv2d_13": "PTConv2dMetatype",
+ "empty_13": "UnknownMetatype",
+ "_param_constant58": "PTConstNoopMetatype",
+ "_param_constant59": "PTConstNoopMetatype",
+ "_tensor_constant26": "PTConstNoopMetatype",
+ "_tensor_constant27": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_13": "PTBatchNormMetatype",
+ "getitem_39": "PTGatherMetatype",
+ "getitem_40": "PTGatherMetatype",
+ "getitem_41": "PTGatherMetatype",
+ "relu_13": "PTRELUMetatype",
+ "_param_constant60": "PTConstNoopMetatype",
+ "_param_constant61": "PTConstNoopMetatype",
+ "conv_transpose2d_2": "PTConvTranspose2dMetatype",
+ "slice_9": "PTGatherMetatype",
+ "slice_10": "PTGatherMetatype",
+ "slice_11": "PTGatherMetatype",
+ "slice_12": "PTGatherMetatype",
+ "cat_2": "PTCatMetatype",
+ "_param_constant62": "PTConstNoopMetatype",
+ "_param_constant63": "PTConstNoopMetatype",
+ "conv2d_14": "PTConv2dMetatype",
+ "empty_14": "UnknownMetatype",
+ "_param_constant64": "PTConstNoopMetatype",
+ "_param_constant65": "PTConstNoopMetatype",
+ "_tensor_constant28": "PTConstNoopMetatype",
+ "_tensor_constant29": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_14": "PTBatchNormMetatype",
+ "getitem_42": "PTGatherMetatype",
+ "getitem_43": "PTGatherMetatype",
+ "getitem_44": "PTGatherMetatype",
+ "relu_14": "PTRELUMetatype",
+ "_param_constant66": "PTConstNoopMetatype",
+ "_param_constant67": "PTConstNoopMetatype",
+ "conv2d_15": "PTConv2dMetatype",
+ "empty_15": "UnknownMetatype",
+ "_param_constant68": "PTConstNoopMetatype",
+ "_param_constant69": "PTConstNoopMetatype",
+ "_tensor_constant30": "PTConstNoopMetatype",
+ "_tensor_constant31": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_15": "PTBatchNormMetatype",
+ "getitem_45": "PTGatherMetatype",
+ "getitem_46": "PTGatherMetatype",
+ "getitem_47": "PTGatherMetatype",
+ "relu_15": "PTRELUMetatype",
+ "_param_constant70": "PTConstNoopMetatype",
+ "_param_constant71": "PTConstNoopMetatype",
+ "conv_transpose2d_3": "PTConvTranspose2dMetatype",
+ "slice_13": "PTGatherMetatype",
+ "slice_14": "PTGatherMetatype",
+ "slice_15": "PTGatherMetatype",
+ "slice_16": "PTGatherMetatype",
+ "cat_3": "PTCatMetatype",
+ "_param_constant72": "PTConstNoopMetatype",
+ "_param_constant73": "PTConstNoopMetatype",
+ "conv2d_16": "PTConv2dMetatype",
+ "empty_16": "UnknownMetatype",
+ "_param_constant74": "PTConstNoopMetatype",
+ "_param_constant75": "PTConstNoopMetatype",
+ "_tensor_constant32": "PTConstNoopMetatype",
+ "_tensor_constant33": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_16": "PTBatchNormMetatype",
+ "getitem_48": "PTGatherMetatype",
+ "getitem_49": "PTGatherMetatype",
+ "getitem_50": "PTGatherMetatype",
+ "relu_16": "PTRELUMetatype",
+ "_param_constant76": "PTConstNoopMetatype",
+ "_param_constant77": "PTConstNoopMetatype",
+ "conv2d_17": "PTConv2dMetatype",
+ "empty_17": "UnknownMetatype",
+ "_param_constant78": "PTConstNoopMetatype",
+ "_param_constant79": "PTConstNoopMetatype",
+ "_tensor_constant34": "PTConstNoopMetatype",
+ "_tensor_constant35": "PTConstNoopMetatype",
+ "_native_batch_norm_legit_no_training_17": "PTBatchNormMetatype",
+ "getitem_51": "PTGatherMetatype",
+ "getitem_52": "PTGatherMetatype",
+ "getitem_53": "PTGatherMetatype",
+ "relu_17": "PTRELUMetatype",
+ "_param_constant80": "PTConstNoopMetatype",
+ "_param_constant81": "PTConstNoopMetatype",
+ "conv2d_18": "PTConv2dMetatype",
+ "output": "PTOutputNoopMetatype"
+}
\ No newline at end of file
diff --git a/tests/torch/data/reference_graphs/fx/reference_metatypes/vit_b_16.json b/tests/torch/data/reference_graphs/fx/reference_metatypes/vit_b_16.json
new file mode 100644
index 00000000000..2b9eb7fa783
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/reference_metatypes/vit_b_16.json
@@ -0,0 +1,587 @@
+{
+ "arg0_1": "PTInputNoopMetatype",
+ "_param_constant0": "PTConstNoopMetatype",
+ "_param_constant1": "PTConstNoopMetatype",
+ "conv2d": "PTConv2dMetatype",
+ "reshape": "PTReshapeMetatype",
+ "permute": "PTTransposeMetatype",
+ "_param_constant2": "PTConstNoopMetatype",
+ "expand": "PTExpandMetatype",
+ "cat": "PTCatMetatype",
+ "_param_constant3": "PTConstNoopMetatype",
+ "add": "PTAddMetatype",
+ "dropout": "PTDropoutMetatype",
+ "_param_constant4": "PTConstNoopMetatype",
+ "_param_constant5": "PTConstNoopMetatype",
+ "layer_norm": "PTLayerNormMetatype",
+ "transpose": "PTTransposeMetatype",
+ "_param_constant6": "PTConstNoopMetatype",
+ "_param_constant7": "PTConstNoopMetatype",
+ "linear": "PTLinearMetatype",
+ "unflatten": "PTReshapeMetatype",
+ "unsqueeze": "PTReshapeMetatype",
+ "transpose_1": "PTTransposeMetatype",
+ "squeeze": "PTSqueezeMetatype",
+ "contiguous": "PTNoopMetatype",
+ "select": "PTGatherMetatype",
+ "select_1": "PTGatherMetatype",
+ "select_2": "PTGatherMetatype",
+ "view": "PTReshapeMetatype",
+ "transpose_2": "PTTransposeMetatype",
+ "view_1": "PTReshapeMetatype",
+ "transpose_3": "PTTransposeMetatype",
+ "view_2": "PTReshapeMetatype",
+ "transpose_4": "PTTransposeMetatype",
+ "view_3": "PTReshapeMetatype",
+ "view_4": "PTReshapeMetatype",
+ "view_5": "PTReshapeMetatype",
+ "scaled_dot_product_attention": "PTScaledDotProductAttentionMetatype",
+ "permute_1": "PTTransposeMetatype",
+ "view_6": "PTReshapeMetatype",
+ "_param_constant8": "PTConstNoopMetatype",
+ "_param_constant9": "PTConstNoopMetatype",
+ "linear_1": "PTLinearMetatype",
+ "view_7": "PTReshapeMetatype",
+ "transpose_5": "PTTransposeMetatype",
+ "dropout_1": "PTDropoutMetatype",
+ "add_1": "PTAddMetatype",
+ "_param_constant10": "PTConstNoopMetatype",
+ "_param_constant11": "PTConstNoopMetatype",
+ "layer_norm_1": "PTLayerNormMetatype",
+ "_param_constant12": "PTConstNoopMetatype",
+ "_param_constant13": "PTConstNoopMetatype",
+ "linear_2": "PTLinearMetatype",
+ "gelu": "PTGELUMetatype",
+ "dropout_2": "PTDropoutMetatype",
+ "_param_constant14": "PTConstNoopMetatype",
+ "_param_constant15": "PTConstNoopMetatype",
+ "linear_3": "PTLinearMetatype",
+ "dropout_3": "PTDropoutMetatype",
+ "add_2": "PTAddMetatype",
+ "_param_constant16": "PTConstNoopMetatype",
+ "_param_constant17": "PTConstNoopMetatype",
+ "layer_norm_2": "PTLayerNormMetatype",
+ "transpose_6": "PTTransposeMetatype",
+ "_param_constant18": "PTConstNoopMetatype",
+ "_param_constant19": "PTConstNoopMetatype",
+ "linear_4": "PTLinearMetatype",
+ "unflatten_1": "PTReshapeMetatype",
+ "unsqueeze_1": "PTReshapeMetatype",
+ "transpose_7": "PTTransposeMetatype",
+ "squeeze_1": "PTSqueezeMetatype",
+ "contiguous_1": "PTNoopMetatype",
+ "select_3": "PTGatherMetatype",
+ "select_4": "PTGatherMetatype",
+ "select_5": "PTGatherMetatype",
+ "view_8": "PTReshapeMetatype",
+ "transpose_8": "PTTransposeMetatype",
+ "view_9": "PTReshapeMetatype",
+ "transpose_9": "PTTransposeMetatype",
+ "view_10": "PTReshapeMetatype",
+ "transpose_10": "PTTransposeMetatype",
+ "view_11": "PTReshapeMetatype",
+ "view_12": "PTReshapeMetatype",
+ "view_13": "PTReshapeMetatype",
+ "scaled_dot_product_attention_1": "PTScaledDotProductAttentionMetatype",
+ "permute_2": "PTTransposeMetatype",
+ "view_14": "PTReshapeMetatype",
+ "_param_constant20": "PTConstNoopMetatype",
+ "_param_constant21": "PTConstNoopMetatype",
+ "linear_5": "PTLinearMetatype",
+ "view_15": "PTReshapeMetatype",
+ "transpose_11": "PTTransposeMetatype",
+ "dropout_4": "PTDropoutMetatype",
+ "add_3": "PTAddMetatype",
+ "_param_constant22": "PTConstNoopMetatype",
+ "_param_constant23": "PTConstNoopMetatype",
+ "layer_norm_3": "PTLayerNormMetatype",
+ "_param_constant24": "PTConstNoopMetatype",
+ "_param_constant25": "PTConstNoopMetatype",
+ "linear_6": "PTLinearMetatype",
+ "gelu_1": "PTGELUMetatype",
+ "dropout_5": "PTDropoutMetatype",
+ "_param_constant26": "PTConstNoopMetatype",
+ "_param_constant27": "PTConstNoopMetatype",
+ "linear_7": "PTLinearMetatype",
+ "dropout_6": "PTDropoutMetatype",
+ "add_4": "PTAddMetatype",
+ "_param_constant28": "PTConstNoopMetatype",
+ "_param_constant29": "PTConstNoopMetatype",
+ "layer_norm_4": "PTLayerNormMetatype",
+ "transpose_12": "PTTransposeMetatype",
+ "_param_constant30": "PTConstNoopMetatype",
+ "_param_constant31": "PTConstNoopMetatype",
+ "linear_8": "PTLinearMetatype",
+ "unflatten_2": "PTReshapeMetatype",
+ "unsqueeze_2": "PTReshapeMetatype",
+ "transpose_13": "PTTransposeMetatype",
+ "squeeze_2": "PTSqueezeMetatype",
+ "contiguous_2": "PTNoopMetatype",
+ "select_6": "PTGatherMetatype",
+ "select_7": "PTGatherMetatype",
+ "select_8": "PTGatherMetatype",
+ "view_16": "PTReshapeMetatype",
+ "transpose_14": "PTTransposeMetatype",
+ "view_17": "PTReshapeMetatype",
+ "transpose_15": "PTTransposeMetatype",
+ "view_18": "PTReshapeMetatype",
+ "transpose_16": "PTTransposeMetatype",
+ "view_19": "PTReshapeMetatype",
+ "view_20": "PTReshapeMetatype",
+ "view_21": "PTReshapeMetatype",
+ "scaled_dot_product_attention_2": "PTScaledDotProductAttentionMetatype",
+ "permute_3": "PTTransposeMetatype",
+ "view_22": "PTReshapeMetatype",
+ "_param_constant32": "PTConstNoopMetatype",
+ "_param_constant33": "PTConstNoopMetatype",
+ "linear_9": "PTLinearMetatype",
+ "view_23": "PTReshapeMetatype",
+ "transpose_17": "PTTransposeMetatype",
+ "dropout_7": "PTDropoutMetatype",
+ "add_5": "PTAddMetatype",
+ "_param_constant34": "PTConstNoopMetatype",
+ "_param_constant35": "PTConstNoopMetatype",
+ "layer_norm_5": "PTLayerNormMetatype",
+ "_param_constant36": "PTConstNoopMetatype",
+ "_param_constant37": "PTConstNoopMetatype",
+ "linear_10": "PTLinearMetatype",
+ "gelu_2": "PTGELUMetatype",
+ "dropout_8": "PTDropoutMetatype",
+ "_param_constant38": "PTConstNoopMetatype",
+ "_param_constant39": "PTConstNoopMetatype",
+ "linear_11": "PTLinearMetatype",
+ "dropout_9": "PTDropoutMetatype",
+ "add_6": "PTAddMetatype",
+ "_param_constant40": "PTConstNoopMetatype",
+ "_param_constant41": "PTConstNoopMetatype",
+ "layer_norm_6": "PTLayerNormMetatype",
+ "transpose_18": "PTTransposeMetatype",
+ "_param_constant42": "PTConstNoopMetatype",
+ "_param_constant43": "PTConstNoopMetatype",
+ "linear_12": "PTLinearMetatype",
+ "unflatten_3": "PTReshapeMetatype",
+ "unsqueeze_3": "PTReshapeMetatype",
+ "transpose_19": "PTTransposeMetatype",
+ "squeeze_3": "PTSqueezeMetatype",
+ "contiguous_3": "PTNoopMetatype",
+ "select_9": "PTGatherMetatype",
+ "select_10": "PTGatherMetatype",
+ "select_11": "PTGatherMetatype",
+ "view_24": "PTReshapeMetatype",
+ "transpose_20": "PTTransposeMetatype",
+ "view_25": "PTReshapeMetatype",
+ "transpose_21": "PTTransposeMetatype",
+ "view_26": "PTReshapeMetatype",
+ "transpose_22": "PTTransposeMetatype",
+ "view_27": "PTReshapeMetatype",
+ "view_28": "PTReshapeMetatype",
+ "view_29": "PTReshapeMetatype",
+ "scaled_dot_product_attention_3": "PTScaledDotProductAttentionMetatype",
+ "permute_4": "PTTransposeMetatype",
+ "view_30": "PTReshapeMetatype",
+ "_param_constant44": "PTConstNoopMetatype",
+ "_param_constant45": "PTConstNoopMetatype",
+ "linear_13": "PTLinearMetatype",
+ "view_31": "PTReshapeMetatype",
+ "transpose_23": "PTTransposeMetatype",
+ "dropout_10": "PTDropoutMetatype",
+ "add_7": "PTAddMetatype",
+ "_param_constant46": "PTConstNoopMetatype",
+ "_param_constant47": "PTConstNoopMetatype",
+ "layer_norm_7": "PTLayerNormMetatype",
+ "_param_constant48": "PTConstNoopMetatype",
+ "_param_constant49": "PTConstNoopMetatype",
+ "linear_14": "PTLinearMetatype",
+ "gelu_3": "PTGELUMetatype",
+ "dropout_11": "PTDropoutMetatype",
+ "_param_constant50": "PTConstNoopMetatype",
+ "_param_constant51": "PTConstNoopMetatype",
+ "linear_15": "PTLinearMetatype",
+ "dropout_12": "PTDropoutMetatype",
+ "add_8": "PTAddMetatype",
+ "_param_constant52": "PTConstNoopMetatype",
+ "_param_constant53": "PTConstNoopMetatype",
+ "layer_norm_8": "PTLayerNormMetatype",
+ "transpose_24": "PTTransposeMetatype",
+ "_param_constant54": "PTConstNoopMetatype",
+ "_param_constant55": "PTConstNoopMetatype",
+ "linear_16": "PTLinearMetatype",
+ "unflatten_4": "PTReshapeMetatype",
+ "unsqueeze_4": "PTReshapeMetatype",
+ "transpose_25": "PTTransposeMetatype",
+ "squeeze_4": "PTSqueezeMetatype",
+ "contiguous_4": "PTNoopMetatype",
+ "select_12": "PTGatherMetatype",
+ "select_13": "PTGatherMetatype",
+ "select_14": "PTGatherMetatype",
+ "view_32": "PTReshapeMetatype",
+ "transpose_26": "PTTransposeMetatype",
+ "view_33": "PTReshapeMetatype",
+ "transpose_27": "PTTransposeMetatype",
+ "view_34": "PTReshapeMetatype",
+ "transpose_28": "PTTransposeMetatype",
+ "view_35": "PTReshapeMetatype",
+ "view_36": "PTReshapeMetatype",
+ "view_37": "PTReshapeMetatype",
+ "scaled_dot_product_attention_4": "PTScaledDotProductAttentionMetatype",
+ "permute_5": "PTTransposeMetatype",
+ "view_38": "PTReshapeMetatype",
+ "_param_constant56": "PTConstNoopMetatype",
+ "_param_constant57": "PTConstNoopMetatype",
+ "linear_17": "PTLinearMetatype",
+ "view_39": "PTReshapeMetatype",
+ "transpose_29": "PTTransposeMetatype",
+ "dropout_13": "PTDropoutMetatype",
+ "add_9": "PTAddMetatype",
+ "_param_constant58": "PTConstNoopMetatype",
+ "_param_constant59": "PTConstNoopMetatype",
+ "layer_norm_9": "PTLayerNormMetatype",
+ "_param_constant60": "PTConstNoopMetatype",
+ "_param_constant61": "PTConstNoopMetatype",
+ "linear_18": "PTLinearMetatype",
+ "gelu_4": "PTGELUMetatype",
+ "dropout_14": "PTDropoutMetatype",
+ "_param_constant62": "PTConstNoopMetatype",
+ "_param_constant63": "PTConstNoopMetatype",
+ "linear_19": "PTLinearMetatype",
+ "dropout_15": "PTDropoutMetatype",
+ "add_10": "PTAddMetatype",
+ "_param_constant64": "PTConstNoopMetatype",
+ "_param_constant65": "PTConstNoopMetatype",
+ "layer_norm_10": "PTLayerNormMetatype",
+ "transpose_30": "PTTransposeMetatype",
+ "_param_constant66": "PTConstNoopMetatype",
+ "_param_constant67": "PTConstNoopMetatype",
+ "linear_20": "PTLinearMetatype",
+ "unflatten_5": "PTReshapeMetatype",
+ "unsqueeze_5": "PTReshapeMetatype",
+ "transpose_31": "PTTransposeMetatype",
+ "squeeze_5": "PTSqueezeMetatype",
+ "contiguous_5": "PTNoopMetatype",
+ "select_15": "PTGatherMetatype",
+ "select_16": "PTGatherMetatype",
+ "select_17": "PTGatherMetatype",
+ "view_40": "PTReshapeMetatype",
+ "transpose_32": "PTTransposeMetatype",
+ "view_41": "PTReshapeMetatype",
+ "transpose_33": "PTTransposeMetatype",
+ "view_42": "PTReshapeMetatype",
+ "transpose_34": "PTTransposeMetatype",
+ "view_43": "PTReshapeMetatype",
+ "view_44": "PTReshapeMetatype",
+ "view_45": "PTReshapeMetatype",
+ "scaled_dot_product_attention_5": "PTScaledDotProductAttentionMetatype",
+ "permute_6": "PTTransposeMetatype",
+ "view_46": "PTReshapeMetatype",
+ "_param_constant68": "PTConstNoopMetatype",
+ "_param_constant69": "PTConstNoopMetatype",
+ "linear_21": "PTLinearMetatype",
+ "view_47": "PTReshapeMetatype",
+ "transpose_35": "PTTransposeMetatype",
+ "dropout_16": "PTDropoutMetatype",
+ "add_11": "PTAddMetatype",
+ "_param_constant70": "PTConstNoopMetatype",
+ "_param_constant71": "PTConstNoopMetatype",
+ "layer_norm_11": "PTLayerNormMetatype",
+ "_param_constant72": "PTConstNoopMetatype",
+ "_param_constant73": "PTConstNoopMetatype",
+ "linear_22": "PTLinearMetatype",
+ "gelu_5": "PTGELUMetatype",
+ "dropout_17": "PTDropoutMetatype",
+ "_param_constant74": "PTConstNoopMetatype",
+ "_param_constant75": "PTConstNoopMetatype",
+ "linear_23": "PTLinearMetatype",
+ "dropout_18": "PTDropoutMetatype",
+ "add_12": "PTAddMetatype",
+ "_param_constant76": "PTConstNoopMetatype",
+ "_param_constant77": "PTConstNoopMetatype",
+ "layer_norm_12": "PTLayerNormMetatype",
+ "transpose_36": "PTTransposeMetatype",
+ "_param_constant78": "PTConstNoopMetatype",
+ "_param_constant79": "PTConstNoopMetatype",
+ "linear_24": "PTLinearMetatype",
+ "unflatten_6": "PTReshapeMetatype",
+ "unsqueeze_6": "PTReshapeMetatype",
+ "transpose_37": "PTTransposeMetatype",
+ "squeeze_6": "PTSqueezeMetatype",
+ "contiguous_6": "PTNoopMetatype",
+ "select_18": "PTGatherMetatype",
+ "select_19": "PTGatherMetatype",
+ "select_20": "PTGatherMetatype",
+ "view_48": "PTReshapeMetatype",
+ "transpose_38": "PTTransposeMetatype",
+ "view_49": "PTReshapeMetatype",
+ "transpose_39": "PTTransposeMetatype",
+ "view_50": "PTReshapeMetatype",
+ "transpose_40": "PTTransposeMetatype",
+ "view_51": "PTReshapeMetatype",
+ "view_52": "PTReshapeMetatype",
+ "view_53": "PTReshapeMetatype",
+ "scaled_dot_product_attention_6": "PTScaledDotProductAttentionMetatype",
+ "permute_7": "PTTransposeMetatype",
+ "view_54": "PTReshapeMetatype",
+ "_param_constant80": "PTConstNoopMetatype",
+ "_param_constant81": "PTConstNoopMetatype",
+ "linear_25": "PTLinearMetatype",
+ "view_55": "PTReshapeMetatype",
+ "transpose_41": "PTTransposeMetatype",
+ "dropout_19": "PTDropoutMetatype",
+ "add_13": "PTAddMetatype",
+ "_param_constant82": "PTConstNoopMetatype",
+ "_param_constant83": "PTConstNoopMetatype",
+ "layer_norm_13": "PTLayerNormMetatype",
+ "_param_constant84": "PTConstNoopMetatype",
+ "_param_constant85": "PTConstNoopMetatype",
+ "linear_26": "PTLinearMetatype",
+ "gelu_6": "PTGELUMetatype",
+ "dropout_20": "PTDropoutMetatype",
+ "_param_constant86": "PTConstNoopMetatype",
+ "_param_constant87": "PTConstNoopMetatype",
+ "linear_27": "PTLinearMetatype",
+ "dropout_21": "PTDropoutMetatype",
+ "add_14": "PTAddMetatype",
+ "_param_constant88": "PTConstNoopMetatype",
+ "_param_constant89": "PTConstNoopMetatype",
+ "layer_norm_14": "PTLayerNormMetatype",
+ "transpose_42": "PTTransposeMetatype",
+ "_param_constant90": "PTConstNoopMetatype",
+ "_param_constant91": "PTConstNoopMetatype",
+ "linear_28": "PTLinearMetatype",
+ "unflatten_7": "PTReshapeMetatype",
+ "unsqueeze_7": "PTReshapeMetatype",
+ "transpose_43": "PTTransposeMetatype",
+ "squeeze_7": "PTSqueezeMetatype",
+ "contiguous_7": "PTNoopMetatype",
+ "select_21": "PTGatherMetatype",
+ "select_22": "PTGatherMetatype",
+ "select_23": "PTGatherMetatype",
+ "view_56": "PTReshapeMetatype",
+ "transpose_44": "PTTransposeMetatype",
+ "view_57": "PTReshapeMetatype",
+ "transpose_45": "PTTransposeMetatype",
+ "view_58": "PTReshapeMetatype",
+ "transpose_46": "PTTransposeMetatype",
+ "view_59": "PTReshapeMetatype",
+ "view_60": "PTReshapeMetatype",
+ "view_61": "PTReshapeMetatype",
+ "scaled_dot_product_attention_7": "PTScaledDotProductAttentionMetatype",
+ "permute_8": "PTTransposeMetatype",
+ "view_62": "PTReshapeMetatype",
+ "_param_constant92": "PTConstNoopMetatype",
+ "_param_constant93": "PTConstNoopMetatype",
+ "linear_29": "PTLinearMetatype",
+ "view_63": "PTReshapeMetatype",
+ "transpose_47": "PTTransposeMetatype",
+ "dropout_22": "PTDropoutMetatype",
+ "add_15": "PTAddMetatype",
+ "_param_constant94": "PTConstNoopMetatype",
+ "_param_constant95": "PTConstNoopMetatype",
+ "layer_norm_15": "PTLayerNormMetatype",
+ "_param_constant96": "PTConstNoopMetatype",
+ "_param_constant97": "PTConstNoopMetatype",
+ "linear_30": "PTLinearMetatype",
+ "gelu_7": "PTGELUMetatype",
+ "dropout_23": "PTDropoutMetatype",
+ "_param_constant98": "PTConstNoopMetatype",
+ "_param_constant99": "PTConstNoopMetatype",
+ "linear_31": "PTLinearMetatype",
+ "dropout_24": "PTDropoutMetatype",
+ "add_16": "PTAddMetatype",
+ "_param_constant100": "PTConstNoopMetatype",
+ "_param_constant101": "PTConstNoopMetatype",
+ "layer_norm_16": "PTLayerNormMetatype",
+ "transpose_48": "PTTransposeMetatype",
+ "_param_constant102": "PTConstNoopMetatype",
+ "_param_constant103": "PTConstNoopMetatype",
+ "linear_32": "PTLinearMetatype",
+ "unflatten_8": "PTReshapeMetatype",
+ "unsqueeze_8": "PTReshapeMetatype",
+ "transpose_49": "PTTransposeMetatype",
+ "squeeze_8": "PTSqueezeMetatype",
+ "contiguous_8": "PTNoopMetatype",
+ "select_24": "PTGatherMetatype",
+ "select_25": "PTGatherMetatype",
+ "select_26": "PTGatherMetatype",
+ "view_64": "PTReshapeMetatype",
+ "transpose_50": "PTTransposeMetatype",
+ "view_65": "PTReshapeMetatype",
+ "transpose_51": "PTTransposeMetatype",
+ "view_66": "PTReshapeMetatype",
+ "transpose_52": "PTTransposeMetatype",
+ "view_67": "PTReshapeMetatype",
+ "view_68": "PTReshapeMetatype",
+ "view_69": "PTReshapeMetatype",
+ "scaled_dot_product_attention_8": "PTScaledDotProductAttentionMetatype",
+ "permute_9": "PTTransposeMetatype",
+ "view_70": "PTReshapeMetatype",
+ "_param_constant104": "PTConstNoopMetatype",
+ "_param_constant105": "PTConstNoopMetatype",
+ "linear_33": "PTLinearMetatype",
+ "view_71": "PTReshapeMetatype",
+ "transpose_53": "PTTransposeMetatype",
+ "dropout_25": "PTDropoutMetatype",
+ "add_17": "PTAddMetatype",
+ "_param_constant106": "PTConstNoopMetatype",
+ "_param_constant107": "PTConstNoopMetatype",
+ "layer_norm_17": "PTLayerNormMetatype",
+ "_param_constant108": "PTConstNoopMetatype",
+ "_param_constant109": "PTConstNoopMetatype",
+ "linear_34": "PTLinearMetatype",
+ "gelu_8": "PTGELUMetatype",
+ "dropout_26": "PTDropoutMetatype",
+ "_param_constant110": "PTConstNoopMetatype",
+ "_param_constant111": "PTConstNoopMetatype",
+ "linear_35": "PTLinearMetatype",
+ "dropout_27": "PTDropoutMetatype",
+ "add_18": "PTAddMetatype",
+ "_param_constant112": "PTConstNoopMetatype",
+ "_param_constant113": "PTConstNoopMetatype",
+ "layer_norm_18": "PTLayerNormMetatype",
+ "transpose_54": "PTTransposeMetatype",
+ "_param_constant114": "PTConstNoopMetatype",
+ "_param_constant115": "PTConstNoopMetatype",
+ "linear_36": "PTLinearMetatype",
+ "unflatten_9": "PTReshapeMetatype",
+ "unsqueeze_9": "PTReshapeMetatype",
+ "transpose_55": "PTTransposeMetatype",
+ "squeeze_9": "PTSqueezeMetatype",
+ "contiguous_9": "PTNoopMetatype",
+ "select_27": "PTGatherMetatype",
+ "select_28": "PTGatherMetatype",
+ "select_29": "PTGatherMetatype",
+ "view_72": "PTReshapeMetatype",
+ "transpose_56": "PTTransposeMetatype",
+ "view_73": "PTReshapeMetatype",
+ "transpose_57": "PTTransposeMetatype",
+ "view_74": "PTReshapeMetatype",
+ "transpose_58": "PTTransposeMetatype",
+ "view_75": "PTReshapeMetatype",
+ "view_76": "PTReshapeMetatype",
+ "view_77": "PTReshapeMetatype",
+ "scaled_dot_product_attention_9": "PTScaledDotProductAttentionMetatype",
+ "permute_10": "PTTransposeMetatype",
+ "view_78": "PTReshapeMetatype",
+ "_param_constant116": "PTConstNoopMetatype",
+ "_param_constant117": "PTConstNoopMetatype",
+ "linear_37": "PTLinearMetatype",
+ "view_79": "PTReshapeMetatype",
+ "transpose_59": "PTTransposeMetatype",
+ "dropout_28": "PTDropoutMetatype",
+ "add_19": "PTAddMetatype",
+ "_param_constant118": "PTConstNoopMetatype",
+ "_param_constant119": "PTConstNoopMetatype",
+ "layer_norm_19": "PTLayerNormMetatype",
+ "_param_constant120": "PTConstNoopMetatype",
+ "_param_constant121": "PTConstNoopMetatype",
+ "linear_38": "PTLinearMetatype",
+ "gelu_9": "PTGELUMetatype",
+ "dropout_29": "PTDropoutMetatype",
+ "_param_constant122": "PTConstNoopMetatype",
+ "_param_constant123": "PTConstNoopMetatype",
+ "linear_39": "PTLinearMetatype",
+ "dropout_30": "PTDropoutMetatype",
+ "add_20": "PTAddMetatype",
+ "_param_constant124": "PTConstNoopMetatype",
+ "_param_constant125": "PTConstNoopMetatype",
+ "layer_norm_20": "PTLayerNormMetatype",
+ "transpose_60": "PTTransposeMetatype",
+ "_param_constant126": "PTConstNoopMetatype",
+ "_param_constant127": "PTConstNoopMetatype",
+ "linear_40": "PTLinearMetatype",
+ "unflatten_10": "PTReshapeMetatype",
+ "unsqueeze_10": "PTReshapeMetatype",
+ "transpose_61": "PTTransposeMetatype",
+ "squeeze_10": "PTSqueezeMetatype",
+ "contiguous_10": "PTNoopMetatype",
+ "select_30": "PTGatherMetatype",
+ "select_31": "PTGatherMetatype",
+ "select_32": "PTGatherMetatype",
+ "view_80": "PTReshapeMetatype",
+ "transpose_62": "PTTransposeMetatype",
+ "view_81": "PTReshapeMetatype",
+ "transpose_63": "PTTransposeMetatype",
+ "view_82": "PTReshapeMetatype",
+ "transpose_64": "PTTransposeMetatype",
+ "view_83": "PTReshapeMetatype",
+ "view_84": "PTReshapeMetatype",
+ "view_85": "PTReshapeMetatype",
+ "scaled_dot_product_attention_10": "PTScaledDotProductAttentionMetatype",
+ "permute_11": "PTTransposeMetatype",
+ "view_86": "PTReshapeMetatype",
+ "_param_constant128": "PTConstNoopMetatype",
+ "_param_constant129": "PTConstNoopMetatype",
+ "linear_41": "PTLinearMetatype",
+ "view_87": "PTReshapeMetatype",
+ "transpose_65": "PTTransposeMetatype",
+ "dropout_31": "PTDropoutMetatype",
+ "add_21": "PTAddMetatype",
+ "_param_constant130": "PTConstNoopMetatype",
+ "_param_constant131": "PTConstNoopMetatype",
+ "layer_norm_21": "PTLayerNormMetatype",
+ "_param_constant132": "PTConstNoopMetatype",
+ "_param_constant133": "PTConstNoopMetatype",
+ "linear_42": "PTLinearMetatype",
+ "gelu_10": "PTGELUMetatype",
+ "dropout_32": "PTDropoutMetatype",
+ "_param_constant134": "PTConstNoopMetatype",
+ "_param_constant135": "PTConstNoopMetatype",
+ "linear_43": "PTLinearMetatype",
+ "dropout_33": "PTDropoutMetatype",
+ "add_22": "PTAddMetatype",
+ "_param_constant136": "PTConstNoopMetatype",
+ "_param_constant137": "PTConstNoopMetatype",
+ "layer_norm_22": "PTLayerNormMetatype",
+ "transpose_66": "PTTransposeMetatype",
+ "_param_constant138": "PTConstNoopMetatype",
+ "_param_constant139": "PTConstNoopMetatype",
+ "linear_44": "PTLinearMetatype",
+ "unflatten_11": "PTReshapeMetatype",
+ "unsqueeze_11": "PTReshapeMetatype",
+ "transpose_67": "PTTransposeMetatype",
+ "squeeze_11": "PTSqueezeMetatype",
+ "contiguous_11": "PTNoopMetatype",
+ "select_33": "PTGatherMetatype",
+ "select_34": "PTGatherMetatype",
+ "select_35": "PTGatherMetatype",
+ "view_88": "PTReshapeMetatype",
+ "transpose_68": "PTTransposeMetatype",
+ "view_89": "PTReshapeMetatype",
+ "transpose_69": "PTTransposeMetatype",
+ "view_90": "PTReshapeMetatype",
+ "transpose_70": "PTTransposeMetatype",
+ "view_91": "PTReshapeMetatype",
+ "view_92": "PTReshapeMetatype",
+ "view_93": "PTReshapeMetatype",
+ "scaled_dot_product_attention_11": "PTScaledDotProductAttentionMetatype",
+ "permute_12": "PTTransposeMetatype",
+ "view_94": "PTReshapeMetatype",
+ "_param_constant140": "PTConstNoopMetatype",
+ "_param_constant141": "PTConstNoopMetatype",
+ "linear_45": "PTLinearMetatype",
+ "view_95": "PTReshapeMetatype",
+ "transpose_71": "PTTransposeMetatype",
+ "dropout_34": "PTDropoutMetatype",
+ "add_23": "PTAddMetatype",
+ "_param_constant142": "PTConstNoopMetatype",
+ "_param_constant143": "PTConstNoopMetatype",
+ "layer_norm_23": "PTLayerNormMetatype",
+ "_param_constant144": "PTConstNoopMetatype",
+ "_param_constant145": "PTConstNoopMetatype",
+ "linear_46": "PTLinearMetatype",
+ "gelu_11": "PTGELUMetatype",
+ "dropout_35": "PTDropoutMetatype",
+ "_param_constant146": "PTConstNoopMetatype",
+ "_param_constant147": "PTConstNoopMetatype",
+ "linear_47": "PTLinearMetatype",
+ "dropout_36": "PTDropoutMetatype",
+ "add_24": "PTAddMetatype",
+ "_param_constant148": "PTConstNoopMetatype",
+ "_param_constant149": "PTConstNoopMetatype",
+ "layer_norm_24": "PTLayerNormMetatype",
+ "slice_1": "PTGatherMetatype",
+ "select_36": "PTGatherMetatype",
+ "_param_constant150": "PTConstNoopMetatype",
+ "_param_constant151": "PTConstNoopMetatype",
+ "linear_48": "PTLinearMetatype",
+ "output": "PTOutputNoopMetatype"
+}
\ No newline at end of file
diff --git a/tests/torch/data/reference_graphs/fx/resnet18.dot b/tests/torch/data/reference_graphs/fx/resnet18.dot
new file mode 100644
index 00000000000..562374583ff
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/resnet18.dot
@@ -0,0 +1,495 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 _param_constant0" [id=1, type=get_attr];
+"2 conv2d" [id=2, type=conv2d];
+"3 empty" [id=3, type=empty];
+"4 _param_constant1" [id=4, type=get_attr];
+"5 _param_constant2" [id=5, type=get_attr];
+"6 _tensor_constant0" [id=6, type=get_attr];
+"7 _tensor_constant1" [id=7, type=get_attr];
+"8 _native_batch_norm_legit_no_training" [id=8, type=_native_batch_norm_legit_no_training];
+"9 getitem" [id=9, type=__getitem__];
+"10 getitem_1" [id=10, type=__getitem__];
+"11 getitem_2" [id=11, type=__getitem__];
+"12 relu_" [id=12, type=relu_];
+"13 max_pool2d" [id=13, type=max_pool2d];
+"14 _param_constant3" [id=14, type=get_attr];
+"15 conv2d_1" [id=15, type=conv2d];
+"16 empty_1" [id=16, type=empty];
+"17 _param_constant4" [id=17, type=get_attr];
+"18 _param_constant5" [id=18, type=get_attr];
+"19 _tensor_constant2" [id=19, type=get_attr];
+"20 _tensor_constant3" [id=20, type=get_attr];
+"21 _native_batch_norm_legit_no_training_1" [id=21, type=_native_batch_norm_legit_no_training];
+"22 getitem_3" [id=22, type=__getitem__];
+"23 getitem_4" [id=23, type=__getitem__];
+"24 getitem_5" [id=24, type=__getitem__];
+"25 relu__1" [id=25, type=relu_];
+"26 _param_constant6" [id=26, type=get_attr];
+"27 conv2d_2" [id=27, type=conv2d];
+"28 empty_2" [id=28, type=empty];
+"29 _param_constant7" [id=29, type=get_attr];
+"30 _param_constant8" [id=30, type=get_attr];
+"31 _tensor_constant4" [id=31, type=get_attr];
+"32 _tensor_constant5" [id=32, type=get_attr];
+"33 _native_batch_norm_legit_no_training_2" [id=33, type=_native_batch_norm_legit_no_training];
+"34 getitem_6" [id=34, type=__getitem__];
+"35 getitem_7" [id=35, type=__getitem__];
+"36 getitem_8" [id=36, type=__getitem__];
+"37 add_" [id=37, type=add_];
+"38 relu__2" [id=38, type=relu_];
+"39 _param_constant9" [id=39, type=get_attr];
+"40 conv2d_3" [id=40, type=conv2d];
+"41 empty_3" [id=41, type=empty];
+"42 _param_constant10" [id=42, type=get_attr];
+"43 _param_constant11" [id=43, type=get_attr];
+"44 _tensor_constant6" [id=44, type=get_attr];
+"45 _tensor_constant7" [id=45, type=get_attr];
+"46 _native_batch_norm_legit_no_training_3" [id=46, type=_native_batch_norm_legit_no_training];
+"47 getitem_9" [id=47, type=__getitem__];
+"48 getitem_10" [id=48, type=__getitem__];
+"49 getitem_11" [id=49, type=__getitem__];
+"50 relu__3" [id=50, type=relu_];
+"51 _param_constant12" [id=51, type=get_attr];
+"52 conv2d_4" [id=52, type=conv2d];
+"53 empty_4" [id=53, type=empty];
+"54 _param_constant13" [id=54, type=get_attr];
+"55 _param_constant14" [id=55, type=get_attr];
+"56 _tensor_constant8" [id=56, type=get_attr];
+"57 _tensor_constant9" [id=57, type=get_attr];
+"58 _native_batch_norm_legit_no_training_4" [id=58, type=_native_batch_norm_legit_no_training];
+"59 getitem_12" [id=59, type=__getitem__];
+"60 getitem_13" [id=60, type=__getitem__];
+"61 getitem_14" [id=61, type=__getitem__];
+"62 add__1" [id=62, type=add_];
+"63 relu__4" [id=63, type=relu_];
+"64 _param_constant15" [id=64, type=get_attr];
+"65 conv2d_5" [id=65, type=conv2d];
+"66 empty_5" [id=66, type=empty];
+"67 _param_constant16" [id=67, type=get_attr];
+"68 _param_constant17" [id=68, type=get_attr];
+"69 _tensor_constant10" [id=69, type=get_attr];
+"70 _tensor_constant11" [id=70, type=get_attr];
+"71 _native_batch_norm_legit_no_training_5" [id=71, type=_native_batch_norm_legit_no_training];
+"72 getitem_15" [id=72, type=__getitem__];
+"73 getitem_16" [id=73, type=__getitem__];
+"74 getitem_17" [id=74, type=__getitem__];
+"75 relu__5" [id=75, type=relu_];
+"76 _param_constant18" [id=76, type=get_attr];
+"77 conv2d_6" [id=77, type=conv2d];
+"78 empty_6" [id=78, type=empty];
+"79 _param_constant19" [id=79, type=get_attr];
+"80 _param_constant20" [id=80, type=get_attr];
+"81 _tensor_constant12" [id=81, type=get_attr];
+"82 _tensor_constant13" [id=82, type=get_attr];
+"83 _native_batch_norm_legit_no_training_6" [id=83, type=_native_batch_norm_legit_no_training];
+"84 getitem_18" [id=84, type=__getitem__];
+"85 getitem_19" [id=85, type=__getitem__];
+"86 getitem_20" [id=86, type=__getitem__];
+"87 _param_constant21" [id=87, type=get_attr];
+"88 conv2d_7" [id=88, type=conv2d];
+"89 empty_7" [id=89, type=empty];
+"90 _param_constant22" [id=90, type=get_attr];
+"91 _param_constant23" [id=91, type=get_attr];
+"92 _tensor_constant14" [id=92, type=get_attr];
+"93 _tensor_constant15" [id=93, type=get_attr];
+"94 _native_batch_norm_legit_no_training_7" [id=94, type=_native_batch_norm_legit_no_training];
+"95 getitem_21" [id=95, type=__getitem__];
+"96 getitem_22" [id=96, type=__getitem__];
+"97 getitem_23" [id=97, type=__getitem__];
+"98 add__2" [id=98, type=add_];
+"99 relu__6" [id=99, type=relu_];
+"100 _param_constant24" [id=100, type=get_attr];
+"101 conv2d_8" [id=101, type=conv2d];
+"102 empty_8" [id=102, type=empty];
+"103 _param_constant25" [id=103, type=get_attr];
+"104 _param_constant26" [id=104, type=get_attr];
+"105 _tensor_constant16" [id=105, type=get_attr];
+"106 _tensor_constant17" [id=106, type=get_attr];
+"107 _native_batch_norm_legit_no_training_8" [id=107, type=_native_batch_norm_legit_no_training];
+"108 getitem_24" [id=108, type=__getitem__];
+"109 getitem_25" [id=109, type=__getitem__];
+"110 getitem_26" [id=110, type=__getitem__];
+"111 relu__7" [id=111, type=relu_];
+"112 _param_constant27" [id=112, type=get_attr];
+"113 conv2d_9" [id=113, type=conv2d];
+"114 empty_9" [id=114, type=empty];
+"115 _param_constant28" [id=115, type=get_attr];
+"116 _param_constant29" [id=116, type=get_attr];
+"117 _tensor_constant18" [id=117, type=get_attr];
+"118 _tensor_constant19" [id=118, type=get_attr];
+"119 _native_batch_norm_legit_no_training_9" [id=119, type=_native_batch_norm_legit_no_training];
+"120 getitem_27" [id=120, type=__getitem__];
+"121 getitem_28" [id=121, type=__getitem__];
+"122 getitem_29" [id=122, type=__getitem__];
+"123 add__3" [id=123, type=add_];
+"124 relu__8" [id=124, type=relu_];
+"125 _param_constant30" [id=125, type=get_attr];
+"126 conv2d_10" [id=126, type=conv2d];
+"127 empty_10" [id=127, type=empty];
+"128 _param_constant31" [id=128, type=get_attr];
+"129 _param_constant32" [id=129, type=get_attr];
+"130 _tensor_constant20" [id=130, type=get_attr];
+"131 _tensor_constant21" [id=131, type=get_attr];
+"132 _native_batch_norm_legit_no_training_10" [id=132, type=_native_batch_norm_legit_no_training];
+"133 getitem_30" [id=133, type=__getitem__];
+"134 getitem_31" [id=134, type=__getitem__];
+"135 getitem_32" [id=135, type=__getitem__];
+"136 relu__9" [id=136, type=relu_];
+"137 _param_constant33" [id=137, type=get_attr];
+"138 conv2d_11" [id=138, type=conv2d];
+"139 empty_11" [id=139, type=empty];
+"140 _param_constant34" [id=140, type=get_attr];
+"141 _param_constant35" [id=141, type=get_attr];
+"142 _tensor_constant22" [id=142, type=get_attr];
+"143 _tensor_constant23" [id=143, type=get_attr];
+"144 _native_batch_norm_legit_no_training_11" [id=144, type=_native_batch_norm_legit_no_training];
+"145 getitem_33" [id=145, type=__getitem__];
+"146 getitem_34" [id=146, type=__getitem__];
+"147 getitem_35" [id=147, type=__getitem__];
+"148 _param_constant36" [id=148, type=get_attr];
+"149 conv2d_12" [id=149, type=conv2d];
+"150 empty_12" [id=150, type=empty];
+"151 _param_constant37" [id=151, type=get_attr];
+"152 _param_constant38" [id=152, type=get_attr];
+"153 _tensor_constant24" [id=153, type=get_attr];
+"154 _tensor_constant25" [id=154, type=get_attr];
+"155 _native_batch_norm_legit_no_training_12" [id=155, type=_native_batch_norm_legit_no_training];
+"156 getitem_36" [id=156, type=__getitem__];
+"157 getitem_37" [id=157, type=__getitem__];
+"158 getitem_38" [id=158, type=__getitem__];
+"159 add__4" [id=159, type=add_];
+"160 relu__10" [id=160, type=relu_];
+"161 _param_constant39" [id=161, type=get_attr];
+"162 conv2d_13" [id=162, type=conv2d];
+"163 empty_13" [id=163, type=empty];
+"164 _param_constant40" [id=164, type=get_attr];
+"165 _param_constant41" [id=165, type=get_attr];
+"166 _tensor_constant26" [id=166, type=get_attr];
+"167 _tensor_constant27" [id=167, type=get_attr];
+"168 _native_batch_norm_legit_no_training_13" [id=168, type=_native_batch_norm_legit_no_training];
+"169 getitem_39" [id=169, type=__getitem__];
+"170 getitem_40" [id=170, type=__getitem__];
+"171 getitem_41" [id=171, type=__getitem__];
+"172 relu__11" [id=172, type=relu_];
+"173 _param_constant42" [id=173, type=get_attr];
+"174 conv2d_14" [id=174, type=conv2d];
+"175 empty_14" [id=175, type=empty];
+"176 _param_constant43" [id=176, type=get_attr];
+"177 _param_constant44" [id=177, type=get_attr];
+"178 _tensor_constant28" [id=178, type=get_attr];
+"179 _tensor_constant29" [id=179, type=get_attr];
+"180 _native_batch_norm_legit_no_training_14" [id=180, type=_native_batch_norm_legit_no_training];
+"181 getitem_42" [id=181, type=__getitem__];
+"182 getitem_43" [id=182, type=__getitem__];
+"183 getitem_44" [id=183, type=__getitem__];
+"184 add__5" [id=184, type=add_];
+"185 relu__12" [id=185, type=relu_];
+"186 _param_constant45" [id=186, type=get_attr];
+"187 conv2d_15" [id=187, type=conv2d];
+"188 empty_15" [id=188, type=empty];
+"189 _param_constant46" [id=189, type=get_attr];
+"190 _param_constant47" [id=190, type=get_attr];
+"191 _tensor_constant30" [id=191, type=get_attr];
+"192 _tensor_constant31" [id=192, type=get_attr];
+"193 _native_batch_norm_legit_no_training_15" [id=193, type=_native_batch_norm_legit_no_training];
+"194 getitem_45" [id=194, type=__getitem__];
+"195 getitem_46" [id=195, type=__getitem__];
+"196 getitem_47" [id=196, type=__getitem__];
+"197 relu__13" [id=197, type=relu_];
+"198 _param_constant48" [id=198, type=get_attr];
+"199 conv2d_16" [id=199, type=conv2d];
+"200 empty_16" [id=200, type=empty];
+"201 _param_constant49" [id=201, type=get_attr];
+"202 _param_constant50" [id=202, type=get_attr];
+"203 _tensor_constant32" [id=203, type=get_attr];
+"204 _tensor_constant33" [id=204, type=get_attr];
+"205 _native_batch_norm_legit_no_training_16" [id=205, type=_native_batch_norm_legit_no_training];
+"206 getitem_48" [id=206, type=__getitem__];
+"207 getitem_49" [id=207, type=__getitem__];
+"208 getitem_50" [id=208, type=__getitem__];
+"209 _param_constant51" [id=209, type=get_attr];
+"210 conv2d_17" [id=210, type=conv2d];
+"211 empty_17" [id=211, type=empty];
+"212 _param_constant52" [id=212, type=get_attr];
+"213 _param_constant53" [id=213, type=get_attr];
+"214 _tensor_constant34" [id=214, type=get_attr];
+"215 _tensor_constant35" [id=215, type=get_attr];
+"216 _native_batch_norm_legit_no_training_17" [id=216, type=_native_batch_norm_legit_no_training];
+"217 getitem_51" [id=217, type=__getitem__];
+"218 getitem_52" [id=218, type=__getitem__];
+"219 getitem_53" [id=219, type=__getitem__];
+"220 add__6" [id=220, type=add_];
+"221 relu__14" [id=221, type=relu_];
+"222 _param_constant54" [id=222, type=get_attr];
+"223 conv2d_18" [id=223, type=conv2d];
+"224 empty_18" [id=224, type=empty];
+"225 _param_constant55" [id=225, type=get_attr];
+"226 _param_constant56" [id=226, type=get_attr];
+"227 _tensor_constant36" [id=227, type=get_attr];
+"228 _tensor_constant37" [id=228, type=get_attr];
+"229 _native_batch_norm_legit_no_training_18" [id=229, type=_native_batch_norm_legit_no_training];
+"230 getitem_54" [id=230, type=__getitem__];
+"231 getitem_55" [id=231, type=__getitem__];
+"232 getitem_56" [id=232, type=__getitem__];
+"233 relu__15" [id=233, type=relu_];
+"234 _param_constant57" [id=234, type=get_attr];
+"235 conv2d_19" [id=235, type=conv2d];
+"236 empty_19" [id=236, type=empty];
+"237 _param_constant58" [id=237, type=get_attr];
+"238 _param_constant59" [id=238, type=get_attr];
+"239 _tensor_constant38" [id=239, type=get_attr];
+"240 _tensor_constant39" [id=240, type=get_attr];
+"241 _native_batch_norm_legit_no_training_19" [id=241, type=_native_batch_norm_legit_no_training];
+"242 getitem_57" [id=242, type=__getitem__];
+"243 getitem_58" [id=243, type=__getitem__];
+"244 getitem_59" [id=244, type=__getitem__];
+"245 add__7" [id=245, type=add_];
+"246 relu__16" [id=246, type=relu_];
+"247 adaptive_avg_pool2d" [id=247, type=adaptive_avg_pool2d];
+"248 flatten" [id=248, type=flatten];
+"249 _param_constant60" [id=249, type=get_attr];
+"250 _param_constant61" [id=250, type=get_attr];
+"251 linear" [id=251, type=linear];
+"252 output" [id=252, type=output];
+"0 arg0_1" -> "2 conv2d";
+"1 _param_constant0" -> "2 conv2d";
+"2 conv2d" -> "8 _native_batch_norm_legit_no_training";
+"4 _param_constant1" -> "8 _native_batch_norm_legit_no_training";
+"5 _param_constant2" -> "8 _native_batch_norm_legit_no_training";
+"6 _tensor_constant0" -> "8 _native_batch_norm_legit_no_training";
+"7 _tensor_constant1" -> "8 _native_batch_norm_legit_no_training";
+"8 _native_batch_norm_legit_no_training" -> "9 getitem";
+"8 _native_batch_norm_legit_no_training" -> "10 getitem_1";
+"8 _native_batch_norm_legit_no_training" -> "11 getitem_2";
+"9 getitem" -> "12 relu_";
+"12 relu_" -> "13 max_pool2d";
+"13 max_pool2d" -> "15 conv2d_1";
+"13 max_pool2d" -> "37 add_";
+"14 _param_constant3" -> "15 conv2d_1";
+"15 conv2d_1" -> "21 _native_batch_norm_legit_no_training_1";
+"17 _param_constant4" -> "21 _native_batch_norm_legit_no_training_1";
+"18 _param_constant5" -> "21 _native_batch_norm_legit_no_training_1";
+"19 _tensor_constant2" -> "21 _native_batch_norm_legit_no_training_1";
+"20 _tensor_constant3" -> "21 _native_batch_norm_legit_no_training_1";
+"21 _native_batch_norm_legit_no_training_1" -> "22 getitem_3";
+"21 _native_batch_norm_legit_no_training_1" -> "23 getitem_4";
+"21 _native_batch_norm_legit_no_training_1" -> "24 getitem_5";
+"22 getitem_3" -> "25 relu__1";
+"25 relu__1" -> "27 conv2d_2";
+"26 _param_constant6" -> "27 conv2d_2";
+"27 conv2d_2" -> "33 _native_batch_norm_legit_no_training_2";
+"29 _param_constant7" -> "33 _native_batch_norm_legit_no_training_2";
+"30 _param_constant8" -> "33 _native_batch_norm_legit_no_training_2";
+"31 _tensor_constant4" -> "33 _native_batch_norm_legit_no_training_2";
+"32 _tensor_constant5" -> "33 _native_batch_norm_legit_no_training_2";
+"33 _native_batch_norm_legit_no_training_2" -> "34 getitem_6";
+"33 _native_batch_norm_legit_no_training_2" -> "35 getitem_7";
+"33 _native_batch_norm_legit_no_training_2" -> "36 getitem_8";
+"34 getitem_6" -> "37 add_";
+"37 add_" -> "38 relu__2";
+"38 relu__2" -> "40 conv2d_3";
+"38 relu__2" -> "62 add__1";
+"39 _param_constant9" -> "40 conv2d_3";
+"40 conv2d_3" -> "46 _native_batch_norm_legit_no_training_3";
+"42 _param_constant10" -> "46 _native_batch_norm_legit_no_training_3";
+"43 _param_constant11" -> "46 _native_batch_norm_legit_no_training_3";
+"44 _tensor_constant6" -> "46 _native_batch_norm_legit_no_training_3";
+"45 _tensor_constant7" -> "46 _native_batch_norm_legit_no_training_3";
+"46 _native_batch_norm_legit_no_training_3" -> "47 getitem_9";
+"46 _native_batch_norm_legit_no_training_3" -> "48 getitem_10";
+"46 _native_batch_norm_legit_no_training_3" -> "49 getitem_11";
+"47 getitem_9" -> "50 relu__3";
+"50 relu__3" -> "52 conv2d_4";
+"51 _param_constant12" -> "52 conv2d_4";
+"52 conv2d_4" -> "58 _native_batch_norm_legit_no_training_4";
+"54 _param_constant13" -> "58 _native_batch_norm_legit_no_training_4";
+"55 _param_constant14" -> "58 _native_batch_norm_legit_no_training_4";
+"56 _tensor_constant8" -> "58 _native_batch_norm_legit_no_training_4";
+"57 _tensor_constant9" -> "58 _native_batch_norm_legit_no_training_4";
+"58 _native_batch_norm_legit_no_training_4" -> "59 getitem_12";
+"58 _native_batch_norm_legit_no_training_4" -> "60 getitem_13";
+"58 _native_batch_norm_legit_no_training_4" -> "61 getitem_14";
+"59 getitem_12" -> "62 add__1";
+"62 add__1" -> "63 relu__4";
+"63 relu__4" -> "65 conv2d_5";
+"63 relu__4" -> "88 conv2d_7";
+"64 _param_constant15" -> "65 conv2d_5";
+"65 conv2d_5" -> "71 _native_batch_norm_legit_no_training_5";
+"67 _param_constant16" -> "71 _native_batch_norm_legit_no_training_5";
+"68 _param_constant17" -> "71 _native_batch_norm_legit_no_training_5";
+"69 _tensor_constant10" -> "71 _native_batch_norm_legit_no_training_5";
+"70 _tensor_constant11" -> "71 _native_batch_norm_legit_no_training_5";
+"71 _native_batch_norm_legit_no_training_5" -> "72 getitem_15";
+"71 _native_batch_norm_legit_no_training_5" -> "73 getitem_16";
+"71 _native_batch_norm_legit_no_training_5" -> "74 getitem_17";
+"72 getitem_15" -> "75 relu__5";
+"75 relu__5" -> "77 conv2d_6";
+"76 _param_constant18" -> "77 conv2d_6";
+"77 conv2d_6" -> "83 _native_batch_norm_legit_no_training_6";
+"79 _param_constant19" -> "83 _native_batch_norm_legit_no_training_6";
+"80 _param_constant20" -> "83 _native_batch_norm_legit_no_training_6";
+"81 _tensor_constant12" -> "83 _native_batch_norm_legit_no_training_6";
+"82 _tensor_constant13" -> "83 _native_batch_norm_legit_no_training_6";
+"83 _native_batch_norm_legit_no_training_6" -> "84 getitem_18";
+"83 _native_batch_norm_legit_no_training_6" -> "85 getitem_19";
+"83 _native_batch_norm_legit_no_training_6" -> "86 getitem_20";
+"84 getitem_18" -> "98 add__2";
+"87 _param_constant21" -> "88 conv2d_7";
+"88 conv2d_7" -> "94 _native_batch_norm_legit_no_training_7";
+"90 _param_constant22" -> "94 _native_batch_norm_legit_no_training_7";
+"91 _param_constant23" -> "94 _native_batch_norm_legit_no_training_7";
+"92 _tensor_constant14" -> "94 _native_batch_norm_legit_no_training_7";
+"93 _tensor_constant15" -> "94 _native_batch_norm_legit_no_training_7";
+"94 _native_batch_norm_legit_no_training_7" -> "95 getitem_21";
+"94 _native_batch_norm_legit_no_training_7" -> "96 getitem_22";
+"94 _native_batch_norm_legit_no_training_7" -> "97 getitem_23";
+"95 getitem_21" -> "98 add__2";
+"98 add__2" -> "99 relu__6";
+"99 relu__6" -> "101 conv2d_8";
+"99 relu__6" -> "123 add__3";
+"100 _param_constant24" -> "101 conv2d_8";
+"101 conv2d_8" -> "107 _native_batch_norm_legit_no_training_8";
+"103 _param_constant25" -> "107 _native_batch_norm_legit_no_training_8";
+"104 _param_constant26" -> "107 _native_batch_norm_legit_no_training_8";
+"105 _tensor_constant16" -> "107 _native_batch_norm_legit_no_training_8";
+"106 _tensor_constant17" -> "107 _native_batch_norm_legit_no_training_8";
+"107 _native_batch_norm_legit_no_training_8" -> "108 getitem_24";
+"107 _native_batch_norm_legit_no_training_8" -> "109 getitem_25";
+"107 _native_batch_norm_legit_no_training_8" -> "110 getitem_26";
+"108 getitem_24" -> "111 relu__7";
+"111 relu__7" -> "113 conv2d_9";
+"112 _param_constant27" -> "113 conv2d_9";
+"113 conv2d_9" -> "119 _native_batch_norm_legit_no_training_9";
+"115 _param_constant28" -> "119 _native_batch_norm_legit_no_training_9";
+"116 _param_constant29" -> "119 _native_batch_norm_legit_no_training_9";
+"117 _tensor_constant18" -> "119 _native_batch_norm_legit_no_training_9";
+"118 _tensor_constant19" -> "119 _native_batch_norm_legit_no_training_9";
+"119 _native_batch_norm_legit_no_training_9" -> "120 getitem_27";
+"119 _native_batch_norm_legit_no_training_9" -> "121 getitem_28";
+"119 _native_batch_norm_legit_no_training_9" -> "122 getitem_29";
+"120 getitem_27" -> "123 add__3";
+"123 add__3" -> "124 relu__8";
+"124 relu__8" -> "126 conv2d_10";
+"124 relu__8" -> "149 conv2d_12";
+"125 _param_constant30" -> "126 conv2d_10";
+"126 conv2d_10" -> "132 _native_batch_norm_legit_no_training_10";
+"128 _param_constant31" -> "132 _native_batch_norm_legit_no_training_10";
+"129 _param_constant32" -> "132 _native_batch_norm_legit_no_training_10";
+"130 _tensor_constant20" -> "132 _native_batch_norm_legit_no_training_10";
+"131 _tensor_constant21" -> "132 _native_batch_norm_legit_no_training_10";
+"132 _native_batch_norm_legit_no_training_10" -> "133 getitem_30";
+"132 _native_batch_norm_legit_no_training_10" -> "134 getitem_31";
+"132 _native_batch_norm_legit_no_training_10" -> "135 getitem_32";
+"133 getitem_30" -> "136 relu__9";
+"136 relu__9" -> "138 conv2d_11";
+"137 _param_constant33" -> "138 conv2d_11";
+"138 conv2d_11" -> "144 _native_batch_norm_legit_no_training_11";
+"140 _param_constant34" -> "144 _native_batch_norm_legit_no_training_11";
+"141 _param_constant35" -> "144 _native_batch_norm_legit_no_training_11";
+"142 _tensor_constant22" -> "144 _native_batch_norm_legit_no_training_11";
+"143 _tensor_constant23" -> "144 _native_batch_norm_legit_no_training_11";
+"144 _native_batch_norm_legit_no_training_11" -> "145 getitem_33";
+"144 _native_batch_norm_legit_no_training_11" -> "146 getitem_34";
+"144 _native_batch_norm_legit_no_training_11" -> "147 getitem_35";
+"145 getitem_33" -> "159 add__4";
+"148 _param_constant36" -> "149 conv2d_12";
+"149 conv2d_12" -> "155 _native_batch_norm_legit_no_training_12";
+"151 _param_constant37" -> "155 _native_batch_norm_legit_no_training_12";
+"152 _param_constant38" -> "155 _native_batch_norm_legit_no_training_12";
+"153 _tensor_constant24" -> "155 _native_batch_norm_legit_no_training_12";
+"154 _tensor_constant25" -> "155 _native_batch_norm_legit_no_training_12";
+"155 _native_batch_norm_legit_no_training_12" -> "156 getitem_36";
+"155 _native_batch_norm_legit_no_training_12" -> "157 getitem_37";
+"155 _native_batch_norm_legit_no_training_12" -> "158 getitem_38";
+"156 getitem_36" -> "159 add__4";
+"159 add__4" -> "160 relu__10";
+"160 relu__10" -> "162 conv2d_13";
+"160 relu__10" -> "184 add__5";
+"161 _param_constant39" -> "162 conv2d_13";
+"162 conv2d_13" -> "168 _native_batch_norm_legit_no_training_13";
+"164 _param_constant40" -> "168 _native_batch_norm_legit_no_training_13";
+"165 _param_constant41" -> "168 _native_batch_norm_legit_no_training_13";
+"166 _tensor_constant26" -> "168 _native_batch_norm_legit_no_training_13";
+"167 _tensor_constant27" -> "168 _native_batch_norm_legit_no_training_13";
+"168 _native_batch_norm_legit_no_training_13" -> "169 getitem_39";
+"168 _native_batch_norm_legit_no_training_13" -> "170 getitem_40";
+"168 _native_batch_norm_legit_no_training_13" -> "171 getitem_41";
+"169 getitem_39" -> "172 relu__11";
+"172 relu__11" -> "174 conv2d_14";
+"173 _param_constant42" -> "174 conv2d_14";
+"174 conv2d_14" -> "180 _native_batch_norm_legit_no_training_14";
+"176 _param_constant43" -> "180 _native_batch_norm_legit_no_training_14";
+"177 _param_constant44" -> "180 _native_batch_norm_legit_no_training_14";
+"178 _tensor_constant28" -> "180 _native_batch_norm_legit_no_training_14";
+"179 _tensor_constant29" -> "180 _native_batch_norm_legit_no_training_14";
+"180 _native_batch_norm_legit_no_training_14" -> "181 getitem_42";
+"180 _native_batch_norm_legit_no_training_14" -> "182 getitem_43";
+"180 _native_batch_norm_legit_no_training_14" -> "183 getitem_44";
+"181 getitem_42" -> "184 add__5";
+"184 add__5" -> "185 relu__12";
+"185 relu__12" -> "187 conv2d_15";
+"185 relu__12" -> "210 conv2d_17";
+"186 _param_constant45" -> "187 conv2d_15";
+"187 conv2d_15" -> "193 _native_batch_norm_legit_no_training_15";
+"189 _param_constant46" -> "193 _native_batch_norm_legit_no_training_15";
+"190 _param_constant47" -> "193 _native_batch_norm_legit_no_training_15";
+"191 _tensor_constant30" -> "193 _native_batch_norm_legit_no_training_15";
+"192 _tensor_constant31" -> "193 _native_batch_norm_legit_no_training_15";
+"193 _native_batch_norm_legit_no_training_15" -> "194 getitem_45";
+"193 _native_batch_norm_legit_no_training_15" -> "195 getitem_46";
+"193 _native_batch_norm_legit_no_training_15" -> "196 getitem_47";
+"194 getitem_45" -> "197 relu__13";
+"197 relu__13" -> "199 conv2d_16";
+"198 _param_constant48" -> "199 conv2d_16";
+"199 conv2d_16" -> "205 _native_batch_norm_legit_no_training_16";
+"201 _param_constant49" -> "205 _native_batch_norm_legit_no_training_16";
+"202 _param_constant50" -> "205 _native_batch_norm_legit_no_training_16";
+"203 _tensor_constant32" -> "205 _native_batch_norm_legit_no_training_16";
+"204 _tensor_constant33" -> "205 _native_batch_norm_legit_no_training_16";
+"205 _native_batch_norm_legit_no_training_16" -> "206 getitem_48";
+"205 _native_batch_norm_legit_no_training_16" -> "207 getitem_49";
+"205 _native_batch_norm_legit_no_training_16" -> "208 getitem_50";
+"206 getitem_48" -> "220 add__6";
+"209 _param_constant51" -> "210 conv2d_17";
+"210 conv2d_17" -> "216 _native_batch_norm_legit_no_training_17";
+"212 _param_constant52" -> "216 _native_batch_norm_legit_no_training_17";
+"213 _param_constant53" -> "216 _native_batch_norm_legit_no_training_17";
+"214 _tensor_constant34" -> "216 _native_batch_norm_legit_no_training_17";
+"215 _tensor_constant35" -> "216 _native_batch_norm_legit_no_training_17";
+"216 _native_batch_norm_legit_no_training_17" -> "217 getitem_51";
+"216 _native_batch_norm_legit_no_training_17" -> "218 getitem_52";
+"216 _native_batch_norm_legit_no_training_17" -> "219 getitem_53";
+"217 getitem_51" -> "220 add__6";
+"220 add__6" -> "221 relu__14";
+"221 relu__14" -> "223 conv2d_18";
+"221 relu__14" -> "245 add__7";
+"222 _param_constant54" -> "223 conv2d_18";
+"223 conv2d_18" -> "229 _native_batch_norm_legit_no_training_18";
+"225 _param_constant55" -> "229 _native_batch_norm_legit_no_training_18";
+"226 _param_constant56" -> "229 _native_batch_norm_legit_no_training_18";
+"227 _tensor_constant36" -> "229 _native_batch_norm_legit_no_training_18";
+"228 _tensor_constant37" -> "229 _native_batch_norm_legit_no_training_18";
+"229 _native_batch_norm_legit_no_training_18" -> "230 getitem_54";
+"229 _native_batch_norm_legit_no_training_18" -> "231 getitem_55";
+"229 _native_batch_norm_legit_no_training_18" -> "232 getitem_56";
+"230 getitem_54" -> "233 relu__15";
+"233 relu__15" -> "235 conv2d_19";
+"234 _param_constant57" -> "235 conv2d_19";
+"235 conv2d_19" -> "241 _native_batch_norm_legit_no_training_19";
+"237 _param_constant58" -> "241 _native_batch_norm_legit_no_training_19";
+"238 _param_constant59" -> "241 _native_batch_norm_legit_no_training_19";
+"239 _tensor_constant38" -> "241 _native_batch_norm_legit_no_training_19";
+"240 _tensor_constant39" -> "241 _native_batch_norm_legit_no_training_19";
+"241 _native_batch_norm_legit_no_training_19" -> "242 getitem_57";
+"241 _native_batch_norm_legit_no_training_19" -> "243 getitem_58";
+"241 _native_batch_norm_legit_no_training_19" -> "244 getitem_59";
+"242 getitem_57" -> "245 add__7";
+"245 add__7" -> "246 relu__16";
+"246 relu__16" -> "247 adaptive_avg_pool2d";
+"247 adaptive_avg_pool2d" -> "248 flatten";
+"248 flatten" -> "251 linear";
+"249 _param_constant60" -> "251 linear";
+"250 _param_constant61" -> "251 linear";
+"251 linear" -> "252 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/swin_v2_s.dot b/tests/torch/data/reference_graphs/fx/swin_v2_s.dot
new file mode 100644
index 00000000000..95a0b21237d
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/swin_v2_s.dot
@@ -0,0 +1,5610 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 _param_constant0" [id=1, type=get_attr];
+"2 _param_constant1" [id=2, type=get_attr];
+"3 conv2d" [id=3, type=conv2d];
+"4 permute" [id=4, type=permute];
+"5 _param_constant2" [id=5, type=get_attr];
+"6 _param_constant3" [id=6, type=get_attr];
+"7 layer_norm" [id=7, type=layer_norm];
+"8 _tensor_constant0" [id=8, type=get_attr];
+"9 _param_constant4" [id=9, type=get_attr];
+"10 _param_constant5" [id=10, type=get_attr];
+"11 linear" [id=11, type=linear];
+"12 relu_" [id=12, type=relu_];
+"13 _param_constant6" [id=13, type=get_attr];
+"14 linear_1" [id=14, type=linear];
+"15 view" [id=15, type=view];
+"16 _tensor_constant1" [id=16, type=get_attr];
+"17 index" [id=17, type=index];
+"18 view_1" [id=18, type=view];
+"19 permute_1" [id=19, type=permute];
+"20 contiguous" [id=20, type=contiguous];
+"21 unsqueeze" [id=21, type=unsqueeze];
+"22 sigmoid" [id=22, type=sigmoid];
+"23 mul" [id=23, type=mul];
+"24 pad" [id=24, type=pad];
+"25 view_2" [id=25, type=view];
+"26 permute_2" [id=26, type=permute];
+"27 reshape" [id=27, type=reshape];
+"28 _param_constant7" [id=28, type=get_attr];
+"29 clone" [id=29, type=clone];
+"30 slice_1" [id=30, type=slice];
+"31 zero_" [id=31, type=zero_];
+"32 _param_constant8" [id=32, type=get_attr];
+"33 linear_2" [id=33, type=linear];
+"34 reshape_1" [id=34, type=reshape];
+"35 permute_3" [id=35, type=permute];
+"36 select" [id=36, type=select];
+"37 select_1" [id=37, type=select];
+"38 select_2" [id=38, type=select];
+"39 linalg_vector_norm" [id=39, type=linalg_vector_norm];
+"40 clamp_min" [id=40, type=clamp_min];
+"41 expand_as" [id=41, type=expand_as];
+"42 div" [id=42, type=div];
+"43 linalg_vector_norm_1" [id=43, type=linalg_vector_norm];
+"44 clamp_min_1" [id=44, type=clamp_min];
+"45 expand_as_1" [id=45, type=expand_as];
+"46 div_1" [id=46, type=div];
+"47 transpose" [id=47, type=transpose];
+"48 matmul" [id=48, type=matmul];
+"49 _param_constant9" [id=49, type=get_attr];
+"50 clamp" [id=50, type=clamp];
+"51 exp" [id=51, type=exp];
+"52 mul_1" [id=52, type=mul];
+"53 add" [id=53, type=add];
+"54 softmax" [id=54, type=softmax];
+"55 dropout" [id=55, type=dropout];
+"56 matmul_1" [id=56, type=matmul];
+"57 transpose_1" [id=57, type=transpose];
+"58 reshape_2" [id=58, type=reshape];
+"59 _param_constant10" [id=59, type=get_attr];
+"60 _param_constant11" [id=60, type=get_attr];
+"61 linear_3" [id=61, type=linear];
+"62 dropout_1" [id=62, type=dropout];
+"63 view_3" [id=63, type=view];
+"64 permute_4" [id=64, type=permute];
+"65 reshape_3" [id=65, type=reshape];
+"66 slice_2" [id=66, type=slice];
+"67 slice_3" [id=67, type=slice];
+"68 _param_constant12" [id=68, type=get_attr];
+"69 _param_constant13" [id=69, type=get_attr];
+"70 layer_norm_1" [id=70, type=layer_norm];
+"71 add_1" [id=71, type=add];
+"72 _param_constant14" [id=72, type=get_attr];
+"73 _param_constant15" [id=73, type=get_attr];
+"74 linear_4" [id=74, type=linear];
+"75 gelu" [id=75, type=gelu];
+"76 dropout_2" [id=76, type=dropout];
+"77 _param_constant16" [id=77, type=get_attr];
+"78 _param_constant17" [id=78, type=get_attr];
+"79 linear_5" [id=79, type=linear];
+"80 dropout_3" [id=80, type=dropout];
+"81 _param_constant18" [id=81, type=get_attr];
+"82 _param_constant19" [id=82, type=get_attr];
+"83 layer_norm_2" [id=83, type=layer_norm];
+"84 add_2" [id=84, type=add];
+"85 _tensor_constant2" [id=85, type=get_attr];
+"86 _param_constant20" [id=86, type=get_attr];
+"87 _param_constant21" [id=87, type=get_attr];
+"88 linear_6" [id=88, type=linear];
+"89 relu__1" [id=89, type=relu_];
+"90 _param_constant22" [id=90, type=get_attr];
+"91 linear_7" [id=91, type=linear];
+"92 view_4" [id=92, type=view];
+"93 _tensor_constant3" [id=93, type=get_attr];
+"94 index_1" [id=94, type=index];
+"95 view_5" [id=95, type=view];
+"96 permute_5" [id=96, type=permute];
+"97 contiguous_1" [id=97, type=contiguous];
+"98 unsqueeze_1" [id=98, type=unsqueeze];
+"99 sigmoid_1" [id=99, type=sigmoid];
+"100 mul_2" [id=100, type=mul];
+"101 pad_1" [id=101, type=pad];
+"102 roll" [id=102, type=roll];
+"103 view_6" [id=103, type=view];
+"104 permute_6" [id=104, type=permute];
+"105 reshape_4" [id=105, type=reshape];
+"106 _param_constant23" [id=106, type=get_attr];
+"107 clone_1" [id=107, type=clone];
+"108 slice_4" [id=108, type=slice];
+"109 zero__1" [id=109, type=zero_];
+"110 _param_constant24" [id=110, type=get_attr];
+"111 linear_8" [id=111, type=linear];
+"112 reshape_5" [id=112, type=reshape];
+"113 permute_7" [id=113, type=permute];
+"114 select_3" [id=114, type=select];
+"115 select_4" [id=115, type=select];
+"116 select_5" [id=116, type=select];
+"117 linalg_vector_norm_2" [id=117, type=linalg_vector_norm];
+"118 clamp_min_2" [id=118, type=clamp_min];
+"119 expand_as_2" [id=119, type=expand_as];
+"120 div_2" [id=120, type=div];
+"121 linalg_vector_norm_3" [id=121, type=linalg_vector_norm];
+"122 clamp_min_3" [id=122, type=clamp_min];
+"123 expand_as_3" [id=123, type=expand_as];
+"124 div_3" [id=124, type=div];
+"125 transpose_2" [id=125, type=transpose];
+"126 matmul_2" [id=126, type=matmul];
+"127 _param_constant25" [id=127, type=get_attr];
+"128 clamp_1" [id=128, type=clamp];
+"129 exp_1" [id=129, type=exp];
+"130 mul_3" [id=130, type=mul];
+"131 add_3" [id=131, type=add];
+"132 new_zeros" [id=132, type=new_zeros];
+"133 _tensor_constant4" [id=133, type=get_attr];
+"134 lift_fresh_copy" [id=134, type=lift_fresh_copy];
+"135 slice_5" [id=135, type=slice];
+"136 slice_6" [id=136, type=slice];
+"137 fill_" [id=137, type=fill_];
+"138 _tensor_constant5" [id=138, type=get_attr];
+"139 lift_fresh_copy_1" [id=139, type=lift_fresh_copy];
+"140 slice_7" [id=140, type=slice];
+"141 slice_8" [id=141, type=slice];
+"142 fill__1" [id=142, type=fill_];
+"143 _tensor_constant6" [id=143, type=get_attr];
+"144 lift_fresh_copy_2" [id=144, type=lift_fresh_copy];
+"145 slice_9" [id=145, type=slice];
+"146 slice_10" [id=146, type=slice];
+"147 fill__2" [id=147, type=fill_];
+"148 _tensor_constant7" [id=148, type=get_attr];
+"149 lift_fresh_copy_3" [id=149, type=lift_fresh_copy];
+"150 slice_11" [id=150, type=slice];
+"151 slice_12" [id=151, type=slice];
+"152 fill__3" [id=152, type=fill_];
+"153 _tensor_constant8" [id=153, type=get_attr];
+"154 lift_fresh_copy_4" [id=154, type=lift_fresh_copy];
+"155 slice_13" [id=155, type=slice];
+"156 slice_14" [id=156, type=slice];
+"157 fill__4" [id=157, type=fill_];
+"158 _tensor_constant9" [id=158, type=get_attr];
+"159 lift_fresh_copy_5" [id=159, type=lift_fresh_copy];
+"160 slice_15" [id=160, type=slice];
+"161 slice_16" [id=161, type=slice];
+"162 fill__5" [id=162, type=fill_];
+"163 _tensor_constant10" [id=163, type=get_attr];
+"164 lift_fresh_copy_6" [id=164, type=lift_fresh_copy];
+"165 slice_17" [id=165, type=slice];
+"166 slice_18" [id=166, type=slice];
+"167 fill__6" [id=167, type=fill_];
+"168 _tensor_constant11" [id=168, type=get_attr];
+"169 lift_fresh_copy_7" [id=169, type=lift_fresh_copy];
+"170 slice_19" [id=170, type=slice];
+"171 slice_20" [id=171, type=slice];
+"172 fill__7" [id=172, type=fill_];
+"173 _tensor_constant12" [id=173, type=get_attr];
+"174 lift_fresh_copy_8" [id=174, type=lift_fresh_copy];
+"175 slice_21" [id=175, type=slice];
+"176 slice_22" [id=176, type=slice];
+"177 fill__8" [id=177, type=fill_];
+"178 view_7" [id=178, type=view];
+"179 permute_8" [id=179, type=permute];
+"180 reshape_6" [id=180, type=reshape];
+"181 unsqueeze_2" [id=181, type=unsqueeze];
+"182 unsqueeze_3" [id=182, type=unsqueeze];
+"183 sub" [id=183, type=sub];
+"184 ne" [id=184, type=ne];
+"185 masked_fill" [id=185, type=masked_fill];
+"186 eq" [id=186, type=eq];
+"187 masked_fill_1" [id=187, type=masked_fill];
+"188 view_8" [id=188, type=view];
+"189 unsqueeze_4" [id=189, type=unsqueeze];
+"190 unsqueeze_5" [id=190, type=unsqueeze];
+"191 add_4" [id=191, type=add];
+"192 view_9" [id=192, type=view];
+"193 softmax_1" [id=193, type=softmax];
+"194 dropout_4" [id=194, type=dropout];
+"195 matmul_3" [id=195, type=matmul];
+"196 transpose_3" [id=196, type=transpose];
+"197 reshape_7" [id=197, type=reshape];
+"198 _param_constant26" [id=198, type=get_attr];
+"199 _param_constant27" [id=199, type=get_attr];
+"200 linear_9" [id=200, type=linear];
+"201 dropout_5" [id=201, type=dropout];
+"202 view_10" [id=202, type=view];
+"203 permute_9" [id=203, type=permute];
+"204 reshape_8" [id=204, type=reshape];
+"205 roll_1" [id=205, type=roll];
+"206 slice_23" [id=206, type=slice];
+"207 slice_24" [id=207, type=slice];
+"208 _param_constant28" [id=208, type=get_attr];
+"209 _param_constant29" [id=209, type=get_attr];
+"210 layer_norm_3" [id=210, type=layer_norm];
+"211 add_5" [id=211, type=add];
+"212 _param_constant30" [id=212, type=get_attr];
+"213 _param_constant31" [id=213, type=get_attr];
+"214 linear_10" [id=214, type=linear];
+"215 gelu_1" [id=215, type=gelu];
+"216 dropout_6" [id=216, type=dropout];
+"217 _param_constant32" [id=217, type=get_attr];
+"218 _param_constant33" [id=218, type=get_attr];
+"219 linear_11" [id=219, type=linear];
+"220 dropout_7" [id=220, type=dropout];
+"221 _param_constant34" [id=221, type=get_attr];
+"222 _param_constant35" [id=222, type=get_attr];
+"223 layer_norm_4" [id=223, type=layer_norm];
+"224 add_6" [id=224, type=add];
+"225 pad_2" [id=225, type=pad];
+"226 slice_25" [id=226, type=slice];
+"227 slice_26" [id=227, type=slice];
+"228 slice_27" [id=228, type=slice];
+"229 slice_28" [id=229, type=slice];
+"230 slice_29" [id=230, type=slice];
+"231 slice_30" [id=231, type=slice];
+"232 slice_31" [id=232, type=slice];
+"233 slice_32" [id=233, type=slice];
+"234 slice_33" [id=234, type=slice];
+"235 slice_34" [id=235, type=slice];
+"236 slice_35" [id=236, type=slice];
+"237 slice_36" [id=237, type=slice];
+"238 cat" [id=238, type=cat];
+"239 _param_constant36" [id=239, type=get_attr];
+"240 linear_12" [id=240, type=linear];
+"241 _param_constant37" [id=241, type=get_attr];
+"242 _param_constant38" [id=242, type=get_attr];
+"243 layer_norm_5" [id=243, type=layer_norm];
+"244 _tensor_constant13" [id=244, type=get_attr];
+"245 _param_constant39" [id=245, type=get_attr];
+"246 _param_constant40" [id=246, type=get_attr];
+"247 linear_13" [id=247, type=linear];
+"248 relu__2" [id=248, type=relu_];
+"249 _param_constant41" [id=249, type=get_attr];
+"250 linear_14" [id=250, type=linear];
+"251 view_11" [id=251, type=view];
+"252 _tensor_constant14" [id=252, type=get_attr];
+"253 index_2" [id=253, type=index];
+"254 view_12" [id=254, type=view];
+"255 permute_10" [id=255, type=permute];
+"256 contiguous_2" [id=256, type=contiguous];
+"257 unsqueeze_6" [id=257, type=unsqueeze];
+"258 sigmoid_2" [id=258, type=sigmoid];
+"259 mul_4" [id=259, type=mul];
+"260 pad_3" [id=260, type=pad];
+"261 view_13" [id=261, type=view];
+"262 permute_11" [id=262, type=permute];
+"263 reshape_9" [id=263, type=reshape];
+"264 _param_constant42" [id=264, type=get_attr];
+"265 clone_2" [id=265, type=clone];
+"266 slice_37" [id=266, type=slice];
+"267 zero__2" [id=267, type=zero_];
+"268 _param_constant43" [id=268, type=get_attr];
+"269 linear_15" [id=269, type=linear];
+"270 reshape_10" [id=270, type=reshape];
+"271 permute_12" [id=271, type=permute];
+"272 select_6" [id=272, type=select];
+"273 select_7" [id=273, type=select];
+"274 select_8" [id=274, type=select];
+"275 linalg_vector_norm_4" [id=275, type=linalg_vector_norm];
+"276 clamp_min_4" [id=276, type=clamp_min];
+"277 expand_as_4" [id=277, type=expand_as];
+"278 div_4" [id=278, type=div];
+"279 linalg_vector_norm_5" [id=279, type=linalg_vector_norm];
+"280 clamp_min_5" [id=280, type=clamp_min];
+"281 expand_as_5" [id=281, type=expand_as];
+"282 div_5" [id=282, type=div];
+"283 transpose_4" [id=283, type=transpose];
+"284 matmul_4" [id=284, type=matmul];
+"285 _param_constant44" [id=285, type=get_attr];
+"286 clamp_2" [id=286, type=clamp];
+"287 exp_2" [id=287, type=exp];
+"288 mul_5" [id=288, type=mul];
+"289 add_7" [id=289, type=add];
+"290 softmax_2" [id=290, type=softmax];
+"291 dropout_8" [id=291, type=dropout];
+"292 matmul_5" [id=292, type=matmul];
+"293 transpose_5" [id=293, type=transpose];
+"294 reshape_11" [id=294, type=reshape];
+"295 _param_constant45" [id=295, type=get_attr];
+"296 _param_constant46" [id=296, type=get_attr];
+"297 linear_16" [id=297, type=linear];
+"298 dropout_9" [id=298, type=dropout];
+"299 view_14" [id=299, type=view];
+"300 permute_13" [id=300, type=permute];
+"301 reshape_12" [id=301, type=reshape];
+"302 slice_38" [id=302, type=slice];
+"303 slice_39" [id=303, type=slice];
+"304 slice_40" [id=304, type=slice];
+"305 slice_41" [id=305, type=slice];
+"306 contiguous_3" [id=306, type=contiguous];
+"307 _param_constant47" [id=307, type=get_attr];
+"308 _param_constant48" [id=308, type=get_attr];
+"309 layer_norm_6" [id=309, type=layer_norm];
+"310 add_8" [id=310, type=add];
+"311 _param_constant49" [id=311, type=get_attr];
+"312 _param_constant50" [id=312, type=get_attr];
+"313 linear_17" [id=313, type=linear];
+"314 gelu_2" [id=314, type=gelu];
+"315 dropout_10" [id=315, type=dropout];
+"316 _param_constant51" [id=316, type=get_attr];
+"317 _param_constant52" [id=317, type=get_attr];
+"318 linear_18" [id=318, type=linear];
+"319 dropout_11" [id=319, type=dropout];
+"320 _param_constant53" [id=320, type=get_attr];
+"321 _param_constant54" [id=321, type=get_attr];
+"322 layer_norm_7" [id=322, type=layer_norm];
+"323 add_9" [id=323, type=add];
+"324 _tensor_constant15" [id=324, type=get_attr];
+"325 _param_constant55" [id=325, type=get_attr];
+"326 _param_constant56" [id=326, type=get_attr];
+"327 linear_19" [id=327, type=linear];
+"328 relu__3" [id=328, type=relu_];
+"329 _param_constant57" [id=329, type=get_attr];
+"330 linear_20" [id=330, type=linear];
+"331 view_15" [id=331, type=view];
+"332 _tensor_constant16" [id=332, type=get_attr];
+"333 index_3" [id=333, type=index];
+"334 view_16" [id=334, type=view];
+"335 permute_14" [id=335, type=permute];
+"336 contiguous_4" [id=336, type=contiguous];
+"337 unsqueeze_7" [id=337, type=unsqueeze];
+"338 sigmoid_3" [id=338, type=sigmoid];
+"339 mul_6" [id=339, type=mul];
+"340 pad_4" [id=340, type=pad];
+"341 roll_2" [id=341, type=roll];
+"342 view_17" [id=342, type=view];
+"343 permute_15" [id=343, type=permute];
+"344 reshape_13" [id=344, type=reshape];
+"345 _param_constant58" [id=345, type=get_attr];
+"346 clone_3" [id=346, type=clone];
+"347 slice_42" [id=347, type=slice];
+"348 zero__3" [id=348, type=zero_];
+"349 _param_constant59" [id=349, type=get_attr];
+"350 linear_21" [id=350, type=linear];
+"351 reshape_14" [id=351, type=reshape];
+"352 permute_16" [id=352, type=permute];
+"353 select_9" [id=353, type=select];
+"354 select_10" [id=354, type=select];
+"355 select_11" [id=355, type=select];
+"356 linalg_vector_norm_6" [id=356, type=linalg_vector_norm];
+"357 clamp_min_6" [id=357, type=clamp_min];
+"358 expand_as_6" [id=358, type=expand_as];
+"359 div_6" [id=359, type=div];
+"360 linalg_vector_norm_7" [id=360, type=linalg_vector_norm];
+"361 clamp_min_7" [id=361, type=clamp_min];
+"362 expand_as_7" [id=362, type=expand_as];
+"363 div_7" [id=363, type=div];
+"364 transpose_6" [id=364, type=transpose];
+"365 matmul_6" [id=365, type=matmul];
+"366 _param_constant60" [id=366, type=get_attr];
+"367 clamp_3" [id=367, type=clamp];
+"368 exp_3" [id=368, type=exp];
+"369 mul_7" [id=369, type=mul];
+"370 add_10" [id=370, type=add];
+"371 new_zeros_1" [id=371, type=new_zeros];
+"372 _tensor_constant17" [id=372, type=get_attr];
+"373 lift_fresh_copy_9" [id=373, type=lift_fresh_copy];
+"374 slice_43" [id=374, type=slice];
+"375 slice_44" [id=375, type=slice];
+"376 fill__9" [id=376, type=fill_];
+"377 _tensor_constant18" [id=377, type=get_attr];
+"378 lift_fresh_copy_10" [id=378, type=lift_fresh_copy];
+"379 slice_45" [id=379, type=slice];
+"380 slice_46" [id=380, type=slice];
+"381 fill__10" [id=381, type=fill_];
+"382 _tensor_constant19" [id=382, type=get_attr];
+"383 lift_fresh_copy_11" [id=383, type=lift_fresh_copy];
+"384 slice_47" [id=384, type=slice];
+"385 slice_48" [id=385, type=slice];
+"386 fill__11" [id=386, type=fill_];
+"387 _tensor_constant20" [id=387, type=get_attr];
+"388 lift_fresh_copy_12" [id=388, type=lift_fresh_copy];
+"389 slice_49" [id=389, type=slice];
+"390 slice_50" [id=390, type=slice];
+"391 fill__12" [id=391, type=fill_];
+"392 _tensor_constant21" [id=392, type=get_attr];
+"393 lift_fresh_copy_13" [id=393, type=lift_fresh_copy];
+"394 slice_51" [id=394, type=slice];
+"395 slice_52" [id=395, type=slice];
+"396 fill__13" [id=396, type=fill_];
+"397 _tensor_constant22" [id=397, type=get_attr];
+"398 lift_fresh_copy_14" [id=398, type=lift_fresh_copy];
+"399 slice_53" [id=399, type=slice];
+"400 slice_54" [id=400, type=slice];
+"401 fill__14" [id=401, type=fill_];
+"402 _tensor_constant23" [id=402, type=get_attr];
+"403 lift_fresh_copy_15" [id=403, type=lift_fresh_copy];
+"404 slice_55" [id=404, type=slice];
+"405 slice_56" [id=405, type=slice];
+"406 fill__15" [id=406, type=fill_];
+"407 _tensor_constant24" [id=407, type=get_attr];
+"408 lift_fresh_copy_16" [id=408, type=lift_fresh_copy];
+"409 slice_57" [id=409, type=slice];
+"410 slice_58" [id=410, type=slice];
+"411 fill__16" [id=411, type=fill_];
+"412 _tensor_constant25" [id=412, type=get_attr];
+"413 lift_fresh_copy_17" [id=413, type=lift_fresh_copy];
+"414 slice_59" [id=414, type=slice];
+"415 slice_60" [id=415, type=slice];
+"416 fill__17" [id=416, type=fill_];
+"417 view_18" [id=417, type=view];
+"418 permute_17" [id=418, type=permute];
+"419 reshape_15" [id=419, type=reshape];
+"420 unsqueeze_8" [id=420, type=unsqueeze];
+"421 unsqueeze_9" [id=421, type=unsqueeze];
+"422 sub_1" [id=422, type=sub];
+"423 ne_1" [id=423, type=ne];
+"424 masked_fill_2" [id=424, type=masked_fill];
+"425 eq_1" [id=425, type=eq];
+"426 masked_fill_3" [id=426, type=masked_fill];
+"427 view_19" [id=427, type=view];
+"428 unsqueeze_10" [id=428, type=unsqueeze];
+"429 unsqueeze_11" [id=429, type=unsqueeze];
+"430 add_11" [id=430, type=add];
+"431 view_20" [id=431, type=view];
+"432 softmax_3" [id=432, type=softmax];
+"433 dropout_12" [id=433, type=dropout];
+"434 matmul_7" [id=434, type=matmul];
+"435 transpose_7" [id=435, type=transpose];
+"436 reshape_16" [id=436, type=reshape];
+"437 _param_constant61" [id=437, type=get_attr];
+"438 _param_constant62" [id=438, type=get_attr];
+"439 linear_22" [id=439, type=linear];
+"440 dropout_13" [id=440, type=dropout];
+"441 view_21" [id=441, type=view];
+"442 permute_18" [id=442, type=permute];
+"443 reshape_17" [id=443, type=reshape];
+"444 roll_3" [id=444, type=roll];
+"445 slice_61" [id=445, type=slice];
+"446 slice_62" [id=446, type=slice];
+"447 slice_63" [id=447, type=slice];
+"448 slice_64" [id=448, type=slice];
+"449 contiguous_5" [id=449, type=contiguous];
+"450 _param_constant63" [id=450, type=get_attr];
+"451 _param_constant64" [id=451, type=get_attr];
+"452 layer_norm_8" [id=452, type=layer_norm];
+"453 add_12" [id=453, type=add];
+"454 _param_constant65" [id=454, type=get_attr];
+"455 _param_constant66" [id=455, type=get_attr];
+"456 linear_23" [id=456, type=linear];
+"457 gelu_3" [id=457, type=gelu];
+"458 dropout_14" [id=458, type=dropout];
+"459 _param_constant67" [id=459, type=get_attr];
+"460 _param_constant68" [id=460, type=get_attr];
+"461 linear_24" [id=461, type=linear];
+"462 dropout_15" [id=462, type=dropout];
+"463 _param_constant69" [id=463, type=get_attr];
+"464 _param_constant70" [id=464, type=get_attr];
+"465 layer_norm_9" [id=465, type=layer_norm];
+"466 add_13" [id=466, type=add];
+"467 pad_5" [id=467, type=pad];
+"468 slice_65" [id=468, type=slice];
+"469 slice_66" [id=469, type=slice];
+"470 slice_67" [id=470, type=slice];
+"471 slice_68" [id=471, type=slice];
+"472 slice_69" [id=472, type=slice];
+"473 slice_70" [id=473, type=slice];
+"474 slice_71" [id=474, type=slice];
+"475 slice_72" [id=475, type=slice];
+"476 slice_73" [id=476, type=slice];
+"477 slice_74" [id=477, type=slice];
+"478 slice_75" [id=478, type=slice];
+"479 slice_76" [id=479, type=slice];
+"480 cat_1" [id=480, type=cat];
+"481 _param_constant71" [id=481, type=get_attr];
+"482 linear_25" [id=482, type=linear];
+"483 _param_constant72" [id=483, type=get_attr];
+"484 _param_constant73" [id=484, type=get_attr];
+"485 layer_norm_10" [id=485, type=layer_norm];
+"486 _tensor_constant26" [id=486, type=get_attr];
+"487 _param_constant74" [id=487, type=get_attr];
+"488 _param_constant75" [id=488, type=get_attr];
+"489 linear_26" [id=489, type=linear];
+"490 relu__4" [id=490, type=relu_];
+"491 _param_constant76" [id=491, type=get_attr];
+"492 linear_27" [id=492, type=linear];
+"493 view_22" [id=493, type=view];
+"494 _tensor_constant27" [id=494, type=get_attr];
+"495 index_4" [id=495, type=index];
+"496 view_23" [id=496, type=view];
+"497 permute_19" [id=497, type=permute];
+"498 contiguous_6" [id=498, type=contiguous];
+"499 unsqueeze_12" [id=499, type=unsqueeze];
+"500 sigmoid_4" [id=500, type=sigmoid];
+"501 mul_8" [id=501, type=mul];
+"502 pad_6" [id=502, type=pad];
+"503 view_24" [id=503, type=view];
+"504 permute_20" [id=504, type=permute];
+"505 reshape_18" [id=505, type=reshape];
+"506 _param_constant77" [id=506, type=get_attr];
+"507 clone_4" [id=507, type=clone];
+"508 slice_77" [id=508, type=slice];
+"509 zero__4" [id=509, type=zero_];
+"510 _param_constant78" [id=510, type=get_attr];
+"511 linear_28" [id=511, type=linear];
+"512 reshape_19" [id=512, type=reshape];
+"513 permute_21" [id=513, type=permute];
+"514 select_12" [id=514, type=select];
+"515 select_13" [id=515, type=select];
+"516 select_14" [id=516, type=select];
+"517 linalg_vector_norm_8" [id=517, type=linalg_vector_norm];
+"518 clamp_min_8" [id=518, type=clamp_min];
+"519 expand_as_8" [id=519, type=expand_as];
+"520 div_8" [id=520, type=div];
+"521 linalg_vector_norm_9" [id=521, type=linalg_vector_norm];
+"522 clamp_min_9" [id=522, type=clamp_min];
+"523 expand_as_9" [id=523, type=expand_as];
+"524 div_9" [id=524, type=div];
+"525 transpose_8" [id=525, type=transpose];
+"526 matmul_8" [id=526, type=matmul];
+"527 _param_constant79" [id=527, type=get_attr];
+"528 clamp_4" [id=528, type=clamp];
+"529 exp_4" [id=529, type=exp];
+"530 mul_9" [id=530, type=mul];
+"531 add_14" [id=531, type=add];
+"532 softmax_4" [id=532, type=softmax];
+"533 dropout_16" [id=533, type=dropout];
+"534 matmul_9" [id=534, type=matmul];
+"535 transpose_9" [id=535, type=transpose];
+"536 reshape_20" [id=536, type=reshape];
+"537 _param_constant80" [id=537, type=get_attr];
+"538 _param_constant81" [id=538, type=get_attr];
+"539 linear_29" [id=539, type=linear];
+"540 dropout_17" [id=540, type=dropout];
+"541 view_25" [id=541, type=view];
+"542 permute_22" [id=542, type=permute];
+"543 reshape_21" [id=543, type=reshape];
+"544 slice_78" [id=544, type=slice];
+"545 slice_79" [id=545, type=slice];
+"546 slice_80" [id=546, type=slice];
+"547 slice_81" [id=547, type=slice];
+"548 contiguous_7" [id=548, type=contiguous];
+"549 _param_constant82" [id=549, type=get_attr];
+"550 _param_constant83" [id=550, type=get_attr];
+"551 layer_norm_11" [id=551, type=layer_norm];
+"552 add_15" [id=552, type=add];
+"553 _param_constant84" [id=553, type=get_attr];
+"554 _param_constant85" [id=554, type=get_attr];
+"555 linear_30" [id=555, type=linear];
+"556 gelu_4" [id=556, type=gelu];
+"557 dropout_18" [id=557, type=dropout];
+"558 _param_constant86" [id=558, type=get_attr];
+"559 _param_constant87" [id=559, type=get_attr];
+"560 linear_31" [id=560, type=linear];
+"561 dropout_19" [id=561, type=dropout];
+"562 _param_constant88" [id=562, type=get_attr];
+"563 _param_constant89" [id=563, type=get_attr];
+"564 layer_norm_12" [id=564, type=layer_norm];
+"565 add_16" [id=565, type=add];
+"566 _tensor_constant28" [id=566, type=get_attr];
+"567 _param_constant90" [id=567, type=get_attr];
+"568 _param_constant91" [id=568, type=get_attr];
+"569 linear_32" [id=569, type=linear];
+"570 relu__5" [id=570, type=relu_];
+"571 _param_constant92" [id=571, type=get_attr];
+"572 linear_33" [id=572, type=linear];
+"573 view_26" [id=573, type=view];
+"574 _tensor_constant29" [id=574, type=get_attr];
+"575 index_5" [id=575, type=index];
+"576 view_27" [id=576, type=view];
+"577 permute_23" [id=577, type=permute];
+"578 contiguous_8" [id=578, type=contiguous];
+"579 unsqueeze_13" [id=579, type=unsqueeze];
+"580 sigmoid_5" [id=580, type=sigmoid];
+"581 mul_10" [id=581, type=mul];
+"582 pad_7" [id=582, type=pad];
+"583 roll_4" [id=583, type=roll];
+"584 view_28" [id=584, type=view];
+"585 permute_24" [id=585, type=permute];
+"586 reshape_22" [id=586, type=reshape];
+"587 _param_constant93" [id=587, type=get_attr];
+"588 clone_5" [id=588, type=clone];
+"589 slice_82" [id=589, type=slice];
+"590 zero__5" [id=590, type=zero_];
+"591 _param_constant94" [id=591, type=get_attr];
+"592 linear_34" [id=592, type=linear];
+"593 reshape_23" [id=593, type=reshape];
+"594 permute_25" [id=594, type=permute];
+"595 select_15" [id=595, type=select];
+"596 select_16" [id=596, type=select];
+"597 select_17" [id=597, type=select];
+"598 linalg_vector_norm_10" [id=598, type=linalg_vector_norm];
+"599 clamp_min_10" [id=599, type=clamp_min];
+"600 expand_as_10" [id=600, type=expand_as];
+"601 div_10" [id=601, type=div];
+"602 linalg_vector_norm_11" [id=602, type=linalg_vector_norm];
+"603 clamp_min_11" [id=603, type=clamp_min];
+"604 expand_as_11" [id=604, type=expand_as];
+"605 div_11" [id=605, type=div];
+"606 transpose_10" [id=606, type=transpose];
+"607 matmul_10" [id=607, type=matmul];
+"608 _param_constant95" [id=608, type=get_attr];
+"609 clamp_5" [id=609, type=clamp];
+"610 exp_5" [id=610, type=exp];
+"611 mul_11" [id=611, type=mul];
+"612 add_17" [id=612, type=add];
+"613 new_zeros_2" [id=613, type=new_zeros];
+"614 _tensor_constant30" [id=614, type=get_attr];
+"615 lift_fresh_copy_18" [id=615, type=lift_fresh_copy];
+"616 slice_83" [id=616, type=slice];
+"617 slice_84" [id=617, type=slice];
+"618 fill__18" [id=618, type=fill_];
+"619 _tensor_constant31" [id=619, type=get_attr];
+"620 lift_fresh_copy_19" [id=620, type=lift_fresh_copy];
+"621 slice_85" [id=621, type=slice];
+"622 slice_86" [id=622, type=slice];
+"623 fill__19" [id=623, type=fill_];
+"624 _tensor_constant32" [id=624, type=get_attr];
+"625 lift_fresh_copy_20" [id=625, type=lift_fresh_copy];
+"626 slice_87" [id=626, type=slice];
+"627 slice_88" [id=627, type=slice];
+"628 fill__20" [id=628, type=fill_];
+"629 _tensor_constant33" [id=629, type=get_attr];
+"630 lift_fresh_copy_21" [id=630, type=lift_fresh_copy];
+"631 slice_89" [id=631, type=slice];
+"632 slice_90" [id=632, type=slice];
+"633 fill__21" [id=633, type=fill_];
+"634 _tensor_constant34" [id=634, type=get_attr];
+"635 lift_fresh_copy_22" [id=635, type=lift_fresh_copy];
+"636 slice_91" [id=636, type=slice];
+"637 slice_92" [id=637, type=slice];
+"638 fill__22" [id=638, type=fill_];
+"639 _tensor_constant35" [id=639, type=get_attr];
+"640 lift_fresh_copy_23" [id=640, type=lift_fresh_copy];
+"641 slice_93" [id=641, type=slice];
+"642 slice_94" [id=642, type=slice];
+"643 fill__23" [id=643, type=fill_];
+"644 _tensor_constant36" [id=644, type=get_attr];
+"645 lift_fresh_copy_24" [id=645, type=lift_fresh_copy];
+"646 slice_95" [id=646, type=slice];
+"647 slice_96" [id=647, type=slice];
+"648 fill__24" [id=648, type=fill_];
+"649 _tensor_constant37" [id=649, type=get_attr];
+"650 lift_fresh_copy_25" [id=650, type=lift_fresh_copy];
+"651 slice_97" [id=651, type=slice];
+"652 slice_98" [id=652, type=slice];
+"653 fill__25" [id=653, type=fill_];
+"654 _tensor_constant38" [id=654, type=get_attr];
+"655 lift_fresh_copy_26" [id=655, type=lift_fresh_copy];
+"656 slice_99" [id=656, type=slice];
+"657 slice_100" [id=657, type=slice];
+"658 fill__26" [id=658, type=fill_];
+"659 view_29" [id=659, type=view];
+"660 permute_26" [id=660, type=permute];
+"661 reshape_24" [id=661, type=reshape];
+"662 unsqueeze_14" [id=662, type=unsqueeze];
+"663 unsqueeze_15" [id=663, type=unsqueeze];
+"664 sub_2" [id=664, type=sub];
+"665 ne_2" [id=665, type=ne];
+"666 masked_fill_4" [id=666, type=masked_fill];
+"667 eq_2" [id=667, type=eq];
+"668 masked_fill_5" [id=668, type=masked_fill];
+"669 view_30" [id=669, type=view];
+"670 unsqueeze_16" [id=670, type=unsqueeze];
+"671 unsqueeze_17" [id=671, type=unsqueeze];
+"672 add_18" [id=672, type=add];
+"673 view_31" [id=673, type=view];
+"674 softmax_5" [id=674, type=softmax];
+"675 dropout_20" [id=675, type=dropout];
+"676 matmul_11" [id=676, type=matmul];
+"677 transpose_11" [id=677, type=transpose];
+"678 reshape_25" [id=678, type=reshape];
+"679 _param_constant96" [id=679, type=get_attr];
+"680 _param_constant97" [id=680, type=get_attr];
+"681 linear_35" [id=681, type=linear];
+"682 dropout_21" [id=682, type=dropout];
+"683 view_32" [id=683, type=view];
+"684 permute_27" [id=684, type=permute];
+"685 reshape_26" [id=685, type=reshape];
+"686 roll_5" [id=686, type=roll];
+"687 slice_101" [id=687, type=slice];
+"688 slice_102" [id=688, type=slice];
+"689 slice_103" [id=689, type=slice];
+"690 slice_104" [id=690, type=slice];
+"691 contiguous_9" [id=691, type=contiguous];
+"692 _param_constant98" [id=692, type=get_attr];
+"693 _param_constant99" [id=693, type=get_attr];
+"694 layer_norm_13" [id=694, type=layer_norm];
+"695 add_19" [id=695, type=add];
+"696 _param_constant100" [id=696, type=get_attr];
+"697 _param_constant101" [id=697, type=get_attr];
+"698 linear_36" [id=698, type=linear];
+"699 gelu_5" [id=699, type=gelu];
+"700 dropout_22" [id=700, type=dropout];
+"701 _param_constant102" [id=701, type=get_attr];
+"702 _param_constant103" [id=702, type=get_attr];
+"703 linear_37" [id=703, type=linear];
+"704 dropout_23" [id=704, type=dropout];
+"705 _param_constant104" [id=705, type=get_attr];
+"706 _param_constant105" [id=706, type=get_attr];
+"707 layer_norm_14" [id=707, type=layer_norm];
+"708 add_20" [id=708, type=add];
+"709 _tensor_constant39" [id=709, type=get_attr];
+"710 _param_constant106" [id=710, type=get_attr];
+"711 _param_constant107" [id=711, type=get_attr];
+"712 linear_38" [id=712, type=linear];
+"713 relu__6" [id=713, type=relu_];
+"714 _param_constant108" [id=714, type=get_attr];
+"715 linear_39" [id=715, type=linear];
+"716 view_33" [id=716, type=view];
+"717 _tensor_constant40" [id=717, type=get_attr];
+"718 index_6" [id=718, type=index];
+"719 view_34" [id=719, type=view];
+"720 permute_28" [id=720, type=permute];
+"721 contiguous_10" [id=721, type=contiguous];
+"722 unsqueeze_18" [id=722, type=unsqueeze];
+"723 sigmoid_6" [id=723, type=sigmoid];
+"724 mul_12" [id=724, type=mul];
+"725 pad_8" [id=725, type=pad];
+"726 view_35" [id=726, type=view];
+"727 permute_29" [id=727, type=permute];
+"728 reshape_27" [id=728, type=reshape];
+"729 _param_constant109" [id=729, type=get_attr];
+"730 clone_6" [id=730, type=clone];
+"731 slice_105" [id=731, type=slice];
+"732 zero__6" [id=732, type=zero_];
+"733 _param_constant110" [id=733, type=get_attr];
+"734 linear_40" [id=734, type=linear];
+"735 reshape_28" [id=735, type=reshape];
+"736 permute_30" [id=736, type=permute];
+"737 select_18" [id=737, type=select];
+"738 select_19" [id=738, type=select];
+"739 select_20" [id=739, type=select];
+"740 linalg_vector_norm_12" [id=740, type=linalg_vector_norm];
+"741 clamp_min_12" [id=741, type=clamp_min];
+"742 expand_as_12" [id=742, type=expand_as];
+"743 div_12" [id=743, type=div];
+"744 linalg_vector_norm_13" [id=744, type=linalg_vector_norm];
+"745 clamp_min_13" [id=745, type=clamp_min];
+"746 expand_as_13" [id=746, type=expand_as];
+"747 div_13" [id=747, type=div];
+"748 transpose_12" [id=748, type=transpose];
+"749 matmul_12" [id=749, type=matmul];
+"750 _param_constant111" [id=750, type=get_attr];
+"751 clamp_6" [id=751, type=clamp];
+"752 exp_6" [id=752, type=exp];
+"753 mul_13" [id=753, type=mul];
+"754 add_21" [id=754, type=add];
+"755 softmax_6" [id=755, type=softmax];
+"756 dropout_24" [id=756, type=dropout];
+"757 matmul_13" [id=757, type=matmul];
+"758 transpose_13" [id=758, type=transpose];
+"759 reshape_29" [id=759, type=reshape];
+"760 _param_constant112" [id=760, type=get_attr];
+"761 _param_constant113" [id=761, type=get_attr];
+"762 linear_41" [id=762, type=linear];
+"763 dropout_25" [id=763, type=dropout];
+"764 view_36" [id=764, type=view];
+"765 permute_31" [id=765, type=permute];
+"766 reshape_30" [id=766, type=reshape];
+"767 slice_106" [id=767, type=slice];
+"768 slice_107" [id=768, type=slice];
+"769 slice_108" [id=769, type=slice];
+"770 slice_109" [id=770, type=slice];
+"771 contiguous_11" [id=771, type=contiguous];
+"772 _param_constant114" [id=772, type=get_attr];
+"773 _param_constant115" [id=773, type=get_attr];
+"774 layer_norm_15" [id=774, type=layer_norm];
+"775 add_22" [id=775, type=add];
+"776 _param_constant116" [id=776, type=get_attr];
+"777 _param_constant117" [id=777, type=get_attr];
+"778 linear_42" [id=778, type=linear];
+"779 gelu_6" [id=779, type=gelu];
+"780 dropout_26" [id=780, type=dropout];
+"781 _param_constant118" [id=781, type=get_attr];
+"782 _param_constant119" [id=782, type=get_attr];
+"783 linear_43" [id=783, type=linear];
+"784 dropout_27" [id=784, type=dropout];
+"785 _param_constant120" [id=785, type=get_attr];
+"786 _param_constant121" [id=786, type=get_attr];
+"787 layer_norm_16" [id=787, type=layer_norm];
+"788 add_23" [id=788, type=add];
+"789 _tensor_constant41" [id=789, type=get_attr];
+"790 _param_constant122" [id=790, type=get_attr];
+"791 _param_constant123" [id=791, type=get_attr];
+"792 linear_44" [id=792, type=linear];
+"793 relu__7" [id=793, type=relu_];
+"794 _param_constant124" [id=794, type=get_attr];
+"795 linear_45" [id=795, type=linear];
+"796 view_37" [id=796, type=view];
+"797 _tensor_constant42" [id=797, type=get_attr];
+"798 index_7" [id=798, type=index];
+"799 view_38" [id=799, type=view];
+"800 permute_32" [id=800, type=permute];
+"801 contiguous_12" [id=801, type=contiguous];
+"802 unsqueeze_19" [id=802, type=unsqueeze];
+"803 sigmoid_7" [id=803, type=sigmoid];
+"804 mul_14" [id=804, type=mul];
+"805 pad_9" [id=805, type=pad];
+"806 roll_6" [id=806, type=roll];
+"807 view_39" [id=807, type=view];
+"808 permute_33" [id=808, type=permute];
+"809 reshape_31" [id=809, type=reshape];
+"810 _param_constant125" [id=810, type=get_attr];
+"811 clone_7" [id=811, type=clone];
+"812 slice_110" [id=812, type=slice];
+"813 zero__7" [id=813, type=zero_];
+"814 _param_constant126" [id=814, type=get_attr];
+"815 linear_46" [id=815, type=linear];
+"816 reshape_32" [id=816, type=reshape];
+"817 permute_34" [id=817, type=permute];
+"818 select_21" [id=818, type=select];
+"819 select_22" [id=819, type=select];
+"820 select_23" [id=820, type=select];
+"821 linalg_vector_norm_14" [id=821, type=linalg_vector_norm];
+"822 clamp_min_14" [id=822, type=clamp_min];
+"823 expand_as_14" [id=823, type=expand_as];
+"824 div_14" [id=824, type=div];
+"825 linalg_vector_norm_15" [id=825, type=linalg_vector_norm];
+"826 clamp_min_15" [id=826, type=clamp_min];
+"827 expand_as_15" [id=827, type=expand_as];
+"828 div_15" [id=828, type=div];
+"829 transpose_14" [id=829, type=transpose];
+"830 matmul_14" [id=830, type=matmul];
+"831 _param_constant127" [id=831, type=get_attr];
+"832 clamp_7" [id=832, type=clamp];
+"833 exp_7" [id=833, type=exp];
+"834 mul_15" [id=834, type=mul];
+"835 add_24" [id=835, type=add];
+"836 new_zeros_3" [id=836, type=new_zeros];
+"837 _tensor_constant43" [id=837, type=get_attr];
+"838 lift_fresh_copy_27" [id=838, type=lift_fresh_copy];
+"839 slice_111" [id=839, type=slice];
+"840 slice_112" [id=840, type=slice];
+"841 fill__27" [id=841, type=fill_];
+"842 _tensor_constant44" [id=842, type=get_attr];
+"843 lift_fresh_copy_28" [id=843, type=lift_fresh_copy];
+"844 slice_113" [id=844, type=slice];
+"845 slice_114" [id=845, type=slice];
+"846 fill__28" [id=846, type=fill_];
+"847 _tensor_constant45" [id=847, type=get_attr];
+"848 lift_fresh_copy_29" [id=848, type=lift_fresh_copy];
+"849 slice_115" [id=849, type=slice];
+"850 slice_116" [id=850, type=slice];
+"851 fill__29" [id=851, type=fill_];
+"852 _tensor_constant46" [id=852, type=get_attr];
+"853 lift_fresh_copy_30" [id=853, type=lift_fresh_copy];
+"854 slice_117" [id=854, type=slice];
+"855 slice_118" [id=855, type=slice];
+"856 fill__30" [id=856, type=fill_];
+"857 _tensor_constant47" [id=857, type=get_attr];
+"858 lift_fresh_copy_31" [id=858, type=lift_fresh_copy];
+"859 slice_119" [id=859, type=slice];
+"860 slice_120" [id=860, type=slice];
+"861 fill__31" [id=861, type=fill_];
+"862 _tensor_constant48" [id=862, type=get_attr];
+"863 lift_fresh_copy_32" [id=863, type=lift_fresh_copy];
+"864 slice_121" [id=864, type=slice];
+"865 slice_122" [id=865, type=slice];
+"866 fill__32" [id=866, type=fill_];
+"867 _tensor_constant49" [id=867, type=get_attr];
+"868 lift_fresh_copy_33" [id=868, type=lift_fresh_copy];
+"869 slice_123" [id=869, type=slice];
+"870 slice_124" [id=870, type=slice];
+"871 fill__33" [id=871, type=fill_];
+"872 _tensor_constant50" [id=872, type=get_attr];
+"873 lift_fresh_copy_34" [id=873, type=lift_fresh_copy];
+"874 slice_125" [id=874, type=slice];
+"875 slice_126" [id=875, type=slice];
+"876 fill__34" [id=876, type=fill_];
+"877 _tensor_constant51" [id=877, type=get_attr];
+"878 lift_fresh_copy_35" [id=878, type=lift_fresh_copy];
+"879 slice_127" [id=879, type=slice];
+"880 slice_128" [id=880, type=slice];
+"881 fill__35" [id=881, type=fill_];
+"882 view_40" [id=882, type=view];
+"883 permute_35" [id=883, type=permute];
+"884 reshape_33" [id=884, type=reshape];
+"885 unsqueeze_20" [id=885, type=unsqueeze];
+"886 unsqueeze_21" [id=886, type=unsqueeze];
+"887 sub_3" [id=887, type=sub];
+"888 ne_3" [id=888, type=ne];
+"889 masked_fill_6" [id=889, type=masked_fill];
+"890 eq_3" [id=890, type=eq];
+"891 masked_fill_7" [id=891, type=masked_fill];
+"892 view_41" [id=892, type=view];
+"893 unsqueeze_22" [id=893, type=unsqueeze];
+"894 unsqueeze_23" [id=894, type=unsqueeze];
+"895 add_25" [id=895, type=add];
+"896 view_42" [id=896, type=view];
+"897 softmax_7" [id=897, type=softmax];
+"898 dropout_28" [id=898, type=dropout];
+"899 matmul_15" [id=899, type=matmul];
+"900 transpose_15" [id=900, type=transpose];
+"901 reshape_34" [id=901, type=reshape];
+"902 _param_constant128" [id=902, type=get_attr];
+"903 _param_constant129" [id=903, type=get_attr];
+"904 linear_47" [id=904, type=linear];
+"905 dropout_29" [id=905, type=dropout];
+"906 view_43" [id=906, type=view];
+"907 permute_36" [id=907, type=permute];
+"908 reshape_35" [id=908, type=reshape];
+"909 roll_7" [id=909, type=roll];
+"910 slice_129" [id=910, type=slice];
+"911 slice_130" [id=911, type=slice];
+"912 slice_131" [id=912, type=slice];
+"913 slice_132" [id=913, type=slice];
+"914 contiguous_13" [id=914, type=contiguous];
+"915 _param_constant130" [id=915, type=get_attr];
+"916 _param_constant131" [id=916, type=get_attr];
+"917 layer_norm_17" [id=917, type=layer_norm];
+"918 add_26" [id=918, type=add];
+"919 _param_constant132" [id=919, type=get_attr];
+"920 _param_constant133" [id=920, type=get_attr];
+"921 linear_48" [id=921, type=linear];
+"922 gelu_7" [id=922, type=gelu];
+"923 dropout_30" [id=923, type=dropout];
+"924 _param_constant134" [id=924, type=get_attr];
+"925 _param_constant135" [id=925, type=get_attr];
+"926 linear_49" [id=926, type=linear];
+"927 dropout_31" [id=927, type=dropout];
+"928 _param_constant136" [id=928, type=get_attr];
+"929 _param_constant137" [id=929, type=get_attr];
+"930 layer_norm_18" [id=930, type=layer_norm];
+"931 add_27" [id=931, type=add];
+"932 _tensor_constant52" [id=932, type=get_attr];
+"933 _param_constant138" [id=933, type=get_attr];
+"934 _param_constant139" [id=934, type=get_attr];
+"935 linear_50" [id=935, type=linear];
+"936 relu__8" [id=936, type=relu_];
+"937 _param_constant140" [id=937, type=get_attr];
+"938 linear_51" [id=938, type=linear];
+"939 view_44" [id=939, type=view];
+"940 _tensor_constant53" [id=940, type=get_attr];
+"941 index_8" [id=941, type=index];
+"942 view_45" [id=942, type=view];
+"943 permute_37" [id=943, type=permute];
+"944 contiguous_14" [id=944, type=contiguous];
+"945 unsqueeze_24" [id=945, type=unsqueeze];
+"946 sigmoid_8" [id=946, type=sigmoid];
+"947 mul_16" [id=947, type=mul];
+"948 pad_10" [id=948, type=pad];
+"949 view_46" [id=949, type=view];
+"950 permute_38" [id=950, type=permute];
+"951 reshape_36" [id=951, type=reshape];
+"952 _param_constant141" [id=952, type=get_attr];
+"953 clone_8" [id=953, type=clone];
+"954 slice_133" [id=954, type=slice];
+"955 zero__8" [id=955, type=zero_];
+"956 _param_constant142" [id=956, type=get_attr];
+"957 linear_52" [id=957, type=linear];
+"958 reshape_37" [id=958, type=reshape];
+"959 permute_39" [id=959, type=permute];
+"960 select_24" [id=960, type=select];
+"961 select_25" [id=961, type=select];
+"962 select_26" [id=962, type=select];
+"963 linalg_vector_norm_16" [id=963, type=linalg_vector_norm];
+"964 clamp_min_16" [id=964, type=clamp_min];
+"965 expand_as_16" [id=965, type=expand_as];
+"966 div_16" [id=966, type=div];
+"967 linalg_vector_norm_17" [id=967, type=linalg_vector_norm];
+"968 clamp_min_17" [id=968, type=clamp_min];
+"969 expand_as_17" [id=969, type=expand_as];
+"970 div_17" [id=970, type=div];
+"971 transpose_16" [id=971, type=transpose];
+"972 matmul_16" [id=972, type=matmul];
+"973 _param_constant143" [id=973, type=get_attr];
+"974 clamp_8" [id=974, type=clamp];
+"975 exp_8" [id=975, type=exp];
+"976 mul_17" [id=976, type=mul];
+"977 add_28" [id=977, type=add];
+"978 softmax_8" [id=978, type=softmax];
+"979 dropout_32" [id=979, type=dropout];
+"980 matmul_17" [id=980, type=matmul];
+"981 transpose_17" [id=981, type=transpose];
+"982 reshape_38" [id=982, type=reshape];
+"983 _param_constant144" [id=983, type=get_attr];
+"984 _param_constant145" [id=984, type=get_attr];
+"985 linear_53" [id=985, type=linear];
+"986 dropout_33" [id=986, type=dropout];
+"987 view_47" [id=987, type=view];
+"988 permute_40" [id=988, type=permute];
+"989 reshape_39" [id=989, type=reshape];
+"990 slice_134" [id=990, type=slice];
+"991 slice_135" [id=991, type=slice];
+"992 slice_136" [id=992, type=slice];
+"993 slice_137" [id=993, type=slice];
+"994 contiguous_15" [id=994, type=contiguous];
+"995 _param_constant146" [id=995, type=get_attr];
+"996 _param_constant147" [id=996, type=get_attr];
+"997 layer_norm_19" [id=997, type=layer_norm];
+"998 add_29" [id=998, type=add];
+"999 _param_constant148" [id=999, type=get_attr];
+"1000 _param_constant149" [id=1000, type=get_attr];
+"1001 linear_54" [id=1001, type=linear];
+"1002 gelu_8" [id=1002, type=gelu];
+"1003 dropout_34" [id=1003, type=dropout];
+"1004 _param_constant150" [id=1004, type=get_attr];
+"1005 _param_constant151" [id=1005, type=get_attr];
+"1006 linear_55" [id=1006, type=linear];
+"1007 dropout_35" [id=1007, type=dropout];
+"1008 _param_constant152" [id=1008, type=get_attr];
+"1009 _param_constant153" [id=1009, type=get_attr];
+"1010 layer_norm_20" [id=1010, type=layer_norm];
+"1011 add_30" [id=1011, type=add];
+"1012 _tensor_constant54" [id=1012, type=get_attr];
+"1013 _param_constant154" [id=1013, type=get_attr];
+"1014 _param_constant155" [id=1014, type=get_attr];
+"1015 linear_56" [id=1015, type=linear];
+"1016 relu__9" [id=1016, type=relu_];
+"1017 _param_constant156" [id=1017, type=get_attr];
+"1018 linear_57" [id=1018, type=linear];
+"1019 view_48" [id=1019, type=view];
+"1020 _tensor_constant55" [id=1020, type=get_attr];
+"1021 index_9" [id=1021, type=index];
+"1022 view_49" [id=1022, type=view];
+"1023 permute_41" [id=1023, type=permute];
+"1024 contiguous_16" [id=1024, type=contiguous];
+"1025 unsqueeze_25" [id=1025, type=unsqueeze];
+"1026 sigmoid_9" [id=1026, type=sigmoid];
+"1027 mul_18" [id=1027, type=mul];
+"1028 pad_11" [id=1028, type=pad];
+"1029 roll_8" [id=1029, type=roll];
+"1030 view_50" [id=1030, type=view];
+"1031 permute_42" [id=1031, type=permute];
+"1032 reshape_40" [id=1032, type=reshape];
+"1033 _param_constant157" [id=1033, type=get_attr];
+"1034 clone_9" [id=1034, type=clone];
+"1035 slice_138" [id=1035, type=slice];
+"1036 zero__9" [id=1036, type=zero_];
+"1037 _param_constant158" [id=1037, type=get_attr];
+"1038 linear_58" [id=1038, type=linear];
+"1039 reshape_41" [id=1039, type=reshape];
+"1040 permute_43" [id=1040, type=permute];
+"1041 select_27" [id=1041, type=select];
+"1042 select_28" [id=1042, type=select];
+"1043 select_29" [id=1043, type=select];
+"1044 linalg_vector_norm_18" [id=1044, type=linalg_vector_norm];
+"1045 clamp_min_18" [id=1045, type=clamp_min];
+"1046 expand_as_18" [id=1046, type=expand_as];
+"1047 div_18" [id=1047, type=div];
+"1048 linalg_vector_norm_19" [id=1048, type=linalg_vector_norm];
+"1049 clamp_min_19" [id=1049, type=clamp_min];
+"1050 expand_as_19" [id=1050, type=expand_as];
+"1051 div_19" [id=1051, type=div];
+"1052 transpose_18" [id=1052, type=transpose];
+"1053 matmul_18" [id=1053, type=matmul];
+"1054 _param_constant159" [id=1054, type=get_attr];
+"1055 clamp_9" [id=1055, type=clamp];
+"1056 exp_9" [id=1056, type=exp];
+"1057 mul_19" [id=1057, type=mul];
+"1058 add_31" [id=1058, type=add];
+"1059 new_zeros_4" [id=1059, type=new_zeros];
+"1060 _tensor_constant56" [id=1060, type=get_attr];
+"1061 lift_fresh_copy_36" [id=1061, type=lift_fresh_copy];
+"1062 slice_139" [id=1062, type=slice];
+"1063 slice_140" [id=1063, type=slice];
+"1064 fill__36" [id=1064, type=fill_];
+"1065 _tensor_constant57" [id=1065, type=get_attr];
+"1066 lift_fresh_copy_37" [id=1066, type=lift_fresh_copy];
+"1067 slice_141" [id=1067, type=slice];
+"1068 slice_142" [id=1068, type=slice];
+"1069 fill__37" [id=1069, type=fill_];
+"1070 _tensor_constant58" [id=1070, type=get_attr];
+"1071 lift_fresh_copy_38" [id=1071, type=lift_fresh_copy];
+"1072 slice_143" [id=1072, type=slice];
+"1073 slice_144" [id=1073, type=slice];
+"1074 fill__38" [id=1074, type=fill_];
+"1075 _tensor_constant59" [id=1075, type=get_attr];
+"1076 lift_fresh_copy_39" [id=1076, type=lift_fresh_copy];
+"1077 slice_145" [id=1077, type=slice];
+"1078 slice_146" [id=1078, type=slice];
+"1079 fill__39" [id=1079, type=fill_];
+"1080 _tensor_constant60" [id=1080, type=get_attr];
+"1081 lift_fresh_copy_40" [id=1081, type=lift_fresh_copy];
+"1082 slice_147" [id=1082, type=slice];
+"1083 slice_148" [id=1083, type=slice];
+"1084 fill__40" [id=1084, type=fill_];
+"1085 _tensor_constant61" [id=1085, type=get_attr];
+"1086 lift_fresh_copy_41" [id=1086, type=lift_fresh_copy];
+"1087 slice_149" [id=1087, type=slice];
+"1088 slice_150" [id=1088, type=slice];
+"1089 fill__41" [id=1089, type=fill_];
+"1090 _tensor_constant62" [id=1090, type=get_attr];
+"1091 lift_fresh_copy_42" [id=1091, type=lift_fresh_copy];
+"1092 slice_151" [id=1092, type=slice];
+"1093 slice_152" [id=1093, type=slice];
+"1094 fill__42" [id=1094, type=fill_];
+"1095 _tensor_constant63" [id=1095, type=get_attr];
+"1096 lift_fresh_copy_43" [id=1096, type=lift_fresh_copy];
+"1097 slice_153" [id=1097, type=slice];
+"1098 slice_154" [id=1098, type=slice];
+"1099 fill__43" [id=1099, type=fill_];
+"1100 _tensor_constant64" [id=1100, type=get_attr];
+"1101 lift_fresh_copy_44" [id=1101, type=lift_fresh_copy];
+"1102 slice_155" [id=1102, type=slice];
+"1103 slice_156" [id=1103, type=slice];
+"1104 fill__44" [id=1104, type=fill_];
+"1105 view_51" [id=1105, type=view];
+"1106 permute_44" [id=1106, type=permute];
+"1107 reshape_42" [id=1107, type=reshape];
+"1108 unsqueeze_26" [id=1108, type=unsqueeze];
+"1109 unsqueeze_27" [id=1109, type=unsqueeze];
+"1110 sub_4" [id=1110, type=sub];
+"1111 ne_4" [id=1111, type=ne];
+"1112 masked_fill_8" [id=1112, type=masked_fill];
+"1113 eq_4" [id=1113, type=eq];
+"1114 masked_fill_9" [id=1114, type=masked_fill];
+"1115 view_52" [id=1115, type=view];
+"1116 unsqueeze_28" [id=1116, type=unsqueeze];
+"1117 unsqueeze_29" [id=1117, type=unsqueeze];
+"1118 add_32" [id=1118, type=add];
+"1119 view_53" [id=1119, type=view];
+"1120 softmax_9" [id=1120, type=softmax];
+"1121 dropout_36" [id=1121, type=dropout];
+"1122 matmul_19" [id=1122, type=matmul];
+"1123 transpose_19" [id=1123, type=transpose];
+"1124 reshape_43" [id=1124, type=reshape];
+"1125 _param_constant160" [id=1125, type=get_attr];
+"1126 _param_constant161" [id=1126, type=get_attr];
+"1127 linear_59" [id=1127, type=linear];
+"1128 dropout_37" [id=1128, type=dropout];
+"1129 view_54" [id=1129, type=view];
+"1130 permute_45" [id=1130, type=permute];
+"1131 reshape_44" [id=1131, type=reshape];
+"1132 roll_9" [id=1132, type=roll];
+"1133 slice_157" [id=1133, type=slice];
+"1134 slice_158" [id=1134, type=slice];
+"1135 slice_159" [id=1135, type=slice];
+"1136 slice_160" [id=1136, type=slice];
+"1137 contiguous_17" [id=1137, type=contiguous];
+"1138 _param_constant162" [id=1138, type=get_attr];
+"1139 _param_constant163" [id=1139, type=get_attr];
+"1140 layer_norm_21" [id=1140, type=layer_norm];
+"1141 add_33" [id=1141, type=add];
+"1142 _param_constant164" [id=1142, type=get_attr];
+"1143 _param_constant165" [id=1143, type=get_attr];
+"1144 linear_60" [id=1144, type=linear];
+"1145 gelu_9" [id=1145, type=gelu];
+"1146 dropout_38" [id=1146, type=dropout];
+"1147 _param_constant166" [id=1147, type=get_attr];
+"1148 _param_constant167" [id=1148, type=get_attr];
+"1149 linear_61" [id=1149, type=linear];
+"1150 dropout_39" [id=1150, type=dropout];
+"1151 _param_constant168" [id=1151, type=get_attr];
+"1152 _param_constant169" [id=1152, type=get_attr];
+"1153 layer_norm_22" [id=1153, type=layer_norm];
+"1154 add_34" [id=1154, type=add];
+"1155 _tensor_constant65" [id=1155, type=get_attr];
+"1156 _param_constant170" [id=1156, type=get_attr];
+"1157 _param_constant171" [id=1157, type=get_attr];
+"1158 linear_62" [id=1158, type=linear];
+"1159 relu__10" [id=1159, type=relu_];
+"1160 _param_constant172" [id=1160, type=get_attr];
+"1161 linear_63" [id=1161, type=linear];
+"1162 view_55" [id=1162, type=view];
+"1163 _tensor_constant66" [id=1163, type=get_attr];
+"1164 index_10" [id=1164, type=index];
+"1165 view_56" [id=1165, type=view];
+"1166 permute_46" [id=1166, type=permute];
+"1167 contiguous_18" [id=1167, type=contiguous];
+"1168 unsqueeze_30" [id=1168, type=unsqueeze];
+"1169 sigmoid_10" [id=1169, type=sigmoid];
+"1170 mul_20" [id=1170, type=mul];
+"1171 pad_12" [id=1171, type=pad];
+"1172 view_57" [id=1172, type=view];
+"1173 permute_47" [id=1173, type=permute];
+"1174 reshape_45" [id=1174, type=reshape];
+"1175 _param_constant173" [id=1175, type=get_attr];
+"1176 clone_10" [id=1176, type=clone];
+"1177 slice_161" [id=1177, type=slice];
+"1178 zero__10" [id=1178, type=zero_];
+"1179 _param_constant174" [id=1179, type=get_attr];
+"1180 linear_64" [id=1180, type=linear];
+"1181 reshape_46" [id=1181, type=reshape];
+"1182 permute_48" [id=1182, type=permute];
+"1183 select_30" [id=1183, type=select];
+"1184 select_31" [id=1184, type=select];
+"1185 select_32" [id=1185, type=select];
+"1186 linalg_vector_norm_20" [id=1186, type=linalg_vector_norm];
+"1187 clamp_min_20" [id=1187, type=clamp_min];
+"1188 expand_as_20" [id=1188, type=expand_as];
+"1189 div_20" [id=1189, type=div];
+"1190 linalg_vector_norm_21" [id=1190, type=linalg_vector_norm];
+"1191 clamp_min_21" [id=1191, type=clamp_min];
+"1192 expand_as_21" [id=1192, type=expand_as];
+"1193 div_21" [id=1193, type=div];
+"1194 transpose_20" [id=1194, type=transpose];
+"1195 matmul_20" [id=1195, type=matmul];
+"1196 _param_constant175" [id=1196, type=get_attr];
+"1197 clamp_10" [id=1197, type=clamp];
+"1198 exp_10" [id=1198, type=exp];
+"1199 mul_21" [id=1199, type=mul];
+"1200 add_35" [id=1200, type=add];
+"1201 softmax_10" [id=1201, type=softmax];
+"1202 dropout_40" [id=1202, type=dropout];
+"1203 matmul_21" [id=1203, type=matmul];
+"1204 transpose_21" [id=1204, type=transpose];
+"1205 reshape_47" [id=1205, type=reshape];
+"1206 _param_constant176" [id=1206, type=get_attr];
+"1207 _param_constant177" [id=1207, type=get_attr];
+"1208 linear_65" [id=1208, type=linear];
+"1209 dropout_41" [id=1209, type=dropout];
+"1210 view_58" [id=1210, type=view];
+"1211 permute_49" [id=1211, type=permute];
+"1212 reshape_48" [id=1212, type=reshape];
+"1213 slice_162" [id=1213, type=slice];
+"1214 slice_163" [id=1214, type=slice];
+"1215 slice_164" [id=1215, type=slice];
+"1216 slice_165" [id=1216, type=slice];
+"1217 contiguous_19" [id=1217, type=contiguous];
+"1218 _param_constant178" [id=1218, type=get_attr];
+"1219 _param_constant179" [id=1219, type=get_attr];
+"1220 layer_norm_23" [id=1220, type=layer_norm];
+"1221 add_36" [id=1221, type=add];
+"1222 _param_constant180" [id=1222, type=get_attr];
+"1223 _param_constant181" [id=1223, type=get_attr];
+"1224 linear_66" [id=1224, type=linear];
+"1225 gelu_10" [id=1225, type=gelu];
+"1226 dropout_42" [id=1226, type=dropout];
+"1227 _param_constant182" [id=1227, type=get_attr];
+"1228 _param_constant183" [id=1228, type=get_attr];
+"1229 linear_67" [id=1229, type=linear];
+"1230 dropout_43" [id=1230, type=dropout];
+"1231 _param_constant184" [id=1231, type=get_attr];
+"1232 _param_constant185" [id=1232, type=get_attr];
+"1233 layer_norm_24" [id=1233, type=layer_norm];
+"1234 add_37" [id=1234, type=add];
+"1235 _tensor_constant67" [id=1235, type=get_attr];
+"1236 _param_constant186" [id=1236, type=get_attr];
+"1237 _param_constant187" [id=1237, type=get_attr];
+"1238 linear_68" [id=1238, type=linear];
+"1239 relu__11" [id=1239, type=relu_];
+"1240 _param_constant188" [id=1240, type=get_attr];
+"1241 linear_69" [id=1241, type=linear];
+"1242 view_59" [id=1242, type=view];
+"1243 _tensor_constant68" [id=1243, type=get_attr];
+"1244 index_11" [id=1244, type=index];
+"1245 view_60" [id=1245, type=view];
+"1246 permute_50" [id=1246, type=permute];
+"1247 contiguous_20" [id=1247, type=contiguous];
+"1248 unsqueeze_31" [id=1248, type=unsqueeze];
+"1249 sigmoid_11" [id=1249, type=sigmoid];
+"1250 mul_22" [id=1250, type=mul];
+"1251 pad_13" [id=1251, type=pad];
+"1252 roll_10" [id=1252, type=roll];
+"1253 view_61" [id=1253, type=view];
+"1254 permute_51" [id=1254, type=permute];
+"1255 reshape_49" [id=1255, type=reshape];
+"1256 _param_constant189" [id=1256, type=get_attr];
+"1257 clone_11" [id=1257, type=clone];
+"1258 slice_166" [id=1258, type=slice];
+"1259 zero__11" [id=1259, type=zero_];
+"1260 _param_constant190" [id=1260, type=get_attr];
+"1261 linear_70" [id=1261, type=linear];
+"1262 reshape_50" [id=1262, type=reshape];
+"1263 permute_52" [id=1263, type=permute];
+"1264 select_33" [id=1264, type=select];
+"1265 select_34" [id=1265, type=select];
+"1266 select_35" [id=1266, type=select];
+"1267 linalg_vector_norm_22" [id=1267, type=linalg_vector_norm];
+"1268 clamp_min_22" [id=1268, type=clamp_min];
+"1269 expand_as_22" [id=1269, type=expand_as];
+"1270 div_22" [id=1270, type=div];
+"1271 linalg_vector_norm_23" [id=1271, type=linalg_vector_norm];
+"1272 clamp_min_23" [id=1272, type=clamp_min];
+"1273 expand_as_23" [id=1273, type=expand_as];
+"1274 div_23" [id=1274, type=div];
+"1275 transpose_22" [id=1275, type=transpose];
+"1276 matmul_22" [id=1276, type=matmul];
+"1277 _param_constant191" [id=1277, type=get_attr];
+"1278 clamp_11" [id=1278, type=clamp];
+"1279 exp_11" [id=1279, type=exp];
+"1280 mul_23" [id=1280, type=mul];
+"1281 add_38" [id=1281, type=add];
+"1282 new_zeros_5" [id=1282, type=new_zeros];
+"1283 _tensor_constant69" [id=1283, type=get_attr];
+"1284 lift_fresh_copy_45" [id=1284, type=lift_fresh_copy];
+"1285 slice_167" [id=1285, type=slice];
+"1286 slice_168" [id=1286, type=slice];
+"1287 fill__45" [id=1287, type=fill_];
+"1288 _tensor_constant70" [id=1288, type=get_attr];
+"1289 lift_fresh_copy_46" [id=1289, type=lift_fresh_copy];
+"1290 slice_169" [id=1290, type=slice];
+"1291 slice_170" [id=1291, type=slice];
+"1292 fill__46" [id=1292, type=fill_];
+"1293 _tensor_constant71" [id=1293, type=get_attr];
+"1294 lift_fresh_copy_47" [id=1294, type=lift_fresh_copy];
+"1295 slice_171" [id=1295, type=slice];
+"1296 slice_172" [id=1296, type=slice];
+"1297 fill__47" [id=1297, type=fill_];
+"1298 _tensor_constant72" [id=1298, type=get_attr];
+"1299 lift_fresh_copy_48" [id=1299, type=lift_fresh_copy];
+"1300 slice_173" [id=1300, type=slice];
+"1301 slice_174" [id=1301, type=slice];
+"1302 fill__48" [id=1302, type=fill_];
+"1303 _tensor_constant73" [id=1303, type=get_attr];
+"1304 lift_fresh_copy_49" [id=1304, type=lift_fresh_copy];
+"1305 slice_175" [id=1305, type=slice];
+"1306 slice_176" [id=1306, type=slice];
+"1307 fill__49" [id=1307, type=fill_];
+"1308 _tensor_constant74" [id=1308, type=get_attr];
+"1309 lift_fresh_copy_50" [id=1309, type=lift_fresh_copy];
+"1310 slice_177" [id=1310, type=slice];
+"1311 slice_178" [id=1311, type=slice];
+"1312 fill__50" [id=1312, type=fill_];
+"1313 _tensor_constant75" [id=1313, type=get_attr];
+"1314 lift_fresh_copy_51" [id=1314, type=lift_fresh_copy];
+"1315 slice_179" [id=1315, type=slice];
+"1316 slice_180" [id=1316, type=slice];
+"1317 fill__51" [id=1317, type=fill_];
+"1318 _tensor_constant76" [id=1318, type=get_attr];
+"1319 lift_fresh_copy_52" [id=1319, type=lift_fresh_copy];
+"1320 slice_181" [id=1320, type=slice];
+"1321 slice_182" [id=1321, type=slice];
+"1322 fill__52" [id=1322, type=fill_];
+"1323 _tensor_constant77" [id=1323, type=get_attr];
+"1324 lift_fresh_copy_53" [id=1324, type=lift_fresh_copy];
+"1325 slice_183" [id=1325, type=slice];
+"1326 slice_184" [id=1326, type=slice];
+"1327 fill__53" [id=1327, type=fill_];
+"1328 view_62" [id=1328, type=view];
+"1329 permute_53" [id=1329, type=permute];
+"1330 reshape_51" [id=1330, type=reshape];
+"1331 unsqueeze_32" [id=1331, type=unsqueeze];
+"1332 unsqueeze_33" [id=1332, type=unsqueeze];
+"1333 sub_5" [id=1333, type=sub];
+"1334 ne_5" [id=1334, type=ne];
+"1335 masked_fill_10" [id=1335, type=masked_fill];
+"1336 eq_5" [id=1336, type=eq];
+"1337 masked_fill_11" [id=1337, type=masked_fill];
+"1338 view_63" [id=1338, type=view];
+"1339 unsqueeze_34" [id=1339, type=unsqueeze];
+"1340 unsqueeze_35" [id=1340, type=unsqueeze];
+"1341 add_39" [id=1341, type=add];
+"1342 view_64" [id=1342, type=view];
+"1343 softmax_11" [id=1343, type=softmax];
+"1344 dropout_44" [id=1344, type=dropout];
+"1345 matmul_23" [id=1345, type=matmul];
+"1346 transpose_23" [id=1346, type=transpose];
+"1347 reshape_52" [id=1347, type=reshape];
+"1348 _param_constant192" [id=1348, type=get_attr];
+"1349 _param_constant193" [id=1349, type=get_attr];
+"1350 linear_71" [id=1350, type=linear];
+"1351 dropout_45" [id=1351, type=dropout];
+"1352 view_65" [id=1352, type=view];
+"1353 permute_54" [id=1353, type=permute];
+"1354 reshape_53" [id=1354, type=reshape];
+"1355 roll_11" [id=1355, type=roll];
+"1356 slice_185" [id=1356, type=slice];
+"1357 slice_186" [id=1357, type=slice];
+"1358 slice_187" [id=1358, type=slice];
+"1359 slice_188" [id=1359, type=slice];
+"1360 contiguous_21" [id=1360, type=contiguous];
+"1361 _param_constant194" [id=1361, type=get_attr];
+"1362 _param_constant195" [id=1362, type=get_attr];
+"1363 layer_norm_25" [id=1363, type=layer_norm];
+"1364 add_40" [id=1364, type=add];
+"1365 _param_constant196" [id=1365, type=get_attr];
+"1366 _param_constant197" [id=1366, type=get_attr];
+"1367 linear_72" [id=1367, type=linear];
+"1368 gelu_11" [id=1368, type=gelu];
+"1369 dropout_46" [id=1369, type=dropout];
+"1370 _param_constant198" [id=1370, type=get_attr];
+"1371 _param_constant199" [id=1371, type=get_attr];
+"1372 linear_73" [id=1372, type=linear];
+"1373 dropout_47" [id=1373, type=dropout];
+"1374 _param_constant200" [id=1374, type=get_attr];
+"1375 _param_constant201" [id=1375, type=get_attr];
+"1376 layer_norm_26" [id=1376, type=layer_norm];
+"1377 add_41" [id=1377, type=add];
+"1378 _tensor_constant78" [id=1378, type=get_attr];
+"1379 _param_constant202" [id=1379, type=get_attr];
+"1380 _param_constant203" [id=1380, type=get_attr];
+"1381 linear_74" [id=1381, type=linear];
+"1382 relu__12" [id=1382, type=relu_];
+"1383 _param_constant204" [id=1383, type=get_attr];
+"1384 linear_75" [id=1384, type=linear];
+"1385 view_66" [id=1385, type=view];
+"1386 _tensor_constant79" [id=1386, type=get_attr];
+"1387 index_12" [id=1387, type=index];
+"1388 view_67" [id=1388, type=view];
+"1389 permute_55" [id=1389, type=permute];
+"1390 contiguous_22" [id=1390, type=contiguous];
+"1391 unsqueeze_36" [id=1391, type=unsqueeze];
+"1392 sigmoid_12" [id=1392, type=sigmoid];
+"1393 mul_24" [id=1393, type=mul];
+"1394 pad_14" [id=1394, type=pad];
+"1395 view_68" [id=1395, type=view];
+"1396 permute_56" [id=1396, type=permute];
+"1397 reshape_54" [id=1397, type=reshape];
+"1398 _param_constant205" [id=1398, type=get_attr];
+"1399 clone_12" [id=1399, type=clone];
+"1400 slice_189" [id=1400, type=slice];
+"1401 zero__12" [id=1401, type=zero_];
+"1402 _param_constant206" [id=1402, type=get_attr];
+"1403 linear_76" [id=1403, type=linear];
+"1404 reshape_55" [id=1404, type=reshape];
+"1405 permute_57" [id=1405, type=permute];
+"1406 select_36" [id=1406, type=select];
+"1407 select_37" [id=1407, type=select];
+"1408 select_38" [id=1408, type=select];
+"1409 linalg_vector_norm_24" [id=1409, type=linalg_vector_norm];
+"1410 clamp_min_24" [id=1410, type=clamp_min];
+"1411 expand_as_24" [id=1411, type=expand_as];
+"1412 div_24" [id=1412, type=div];
+"1413 linalg_vector_norm_25" [id=1413, type=linalg_vector_norm];
+"1414 clamp_min_25" [id=1414, type=clamp_min];
+"1415 expand_as_25" [id=1415, type=expand_as];
+"1416 div_25" [id=1416, type=div];
+"1417 transpose_24" [id=1417, type=transpose];
+"1418 matmul_24" [id=1418, type=matmul];
+"1419 _param_constant207" [id=1419, type=get_attr];
+"1420 clamp_12" [id=1420, type=clamp];
+"1421 exp_12" [id=1421, type=exp];
+"1422 mul_25" [id=1422, type=mul];
+"1423 add_42" [id=1423, type=add];
+"1424 softmax_12" [id=1424, type=softmax];
+"1425 dropout_48" [id=1425, type=dropout];
+"1426 matmul_25" [id=1426, type=matmul];
+"1427 transpose_25" [id=1427, type=transpose];
+"1428 reshape_56" [id=1428, type=reshape];
+"1429 _param_constant208" [id=1429, type=get_attr];
+"1430 _param_constant209" [id=1430, type=get_attr];
+"1431 linear_77" [id=1431, type=linear];
+"1432 dropout_49" [id=1432, type=dropout];
+"1433 view_69" [id=1433, type=view];
+"1434 permute_58" [id=1434, type=permute];
+"1435 reshape_57" [id=1435, type=reshape];
+"1436 slice_190" [id=1436, type=slice];
+"1437 slice_191" [id=1437, type=slice];
+"1438 slice_192" [id=1438, type=slice];
+"1439 slice_193" [id=1439, type=slice];
+"1440 contiguous_23" [id=1440, type=contiguous];
+"1441 _param_constant210" [id=1441, type=get_attr];
+"1442 _param_constant211" [id=1442, type=get_attr];
+"1443 layer_norm_27" [id=1443, type=layer_norm];
+"1444 add_43" [id=1444, type=add];
+"1445 _param_constant212" [id=1445, type=get_attr];
+"1446 _param_constant213" [id=1446, type=get_attr];
+"1447 linear_78" [id=1447, type=linear];
+"1448 gelu_12" [id=1448, type=gelu];
+"1449 dropout_50" [id=1449, type=dropout];
+"1450 _param_constant214" [id=1450, type=get_attr];
+"1451 _param_constant215" [id=1451, type=get_attr];
+"1452 linear_79" [id=1452, type=linear];
+"1453 dropout_51" [id=1453, type=dropout];
+"1454 _param_constant216" [id=1454, type=get_attr];
+"1455 _param_constant217" [id=1455, type=get_attr];
+"1456 layer_norm_28" [id=1456, type=layer_norm];
+"1457 add_44" [id=1457, type=add];
+"1458 _tensor_constant80" [id=1458, type=get_attr];
+"1459 _param_constant218" [id=1459, type=get_attr];
+"1460 _param_constant219" [id=1460, type=get_attr];
+"1461 linear_80" [id=1461, type=linear];
+"1462 relu__13" [id=1462, type=relu_];
+"1463 _param_constant220" [id=1463, type=get_attr];
+"1464 linear_81" [id=1464, type=linear];
+"1465 view_70" [id=1465, type=view];
+"1466 _tensor_constant81" [id=1466, type=get_attr];
+"1467 index_13" [id=1467, type=index];
+"1468 view_71" [id=1468, type=view];
+"1469 permute_59" [id=1469, type=permute];
+"1470 contiguous_24" [id=1470, type=contiguous];
+"1471 unsqueeze_37" [id=1471, type=unsqueeze];
+"1472 sigmoid_13" [id=1472, type=sigmoid];
+"1473 mul_26" [id=1473, type=mul];
+"1474 pad_15" [id=1474, type=pad];
+"1475 roll_12" [id=1475, type=roll];
+"1476 view_72" [id=1476, type=view];
+"1477 permute_60" [id=1477, type=permute];
+"1478 reshape_58" [id=1478, type=reshape];
+"1479 _param_constant221" [id=1479, type=get_attr];
+"1480 clone_13" [id=1480, type=clone];
+"1481 slice_194" [id=1481, type=slice];
+"1482 zero__13" [id=1482, type=zero_];
+"1483 _param_constant222" [id=1483, type=get_attr];
+"1484 linear_82" [id=1484, type=linear];
+"1485 reshape_59" [id=1485, type=reshape];
+"1486 permute_61" [id=1486, type=permute];
+"1487 select_39" [id=1487, type=select];
+"1488 select_40" [id=1488, type=select];
+"1489 select_41" [id=1489, type=select];
+"1490 linalg_vector_norm_26" [id=1490, type=linalg_vector_norm];
+"1491 clamp_min_26" [id=1491, type=clamp_min];
+"1492 expand_as_26" [id=1492, type=expand_as];
+"1493 div_26" [id=1493, type=div];
+"1494 linalg_vector_norm_27" [id=1494, type=linalg_vector_norm];
+"1495 clamp_min_27" [id=1495, type=clamp_min];
+"1496 expand_as_27" [id=1496, type=expand_as];
+"1497 div_27" [id=1497, type=div];
+"1498 transpose_26" [id=1498, type=transpose];
+"1499 matmul_26" [id=1499, type=matmul];
+"1500 _param_constant223" [id=1500, type=get_attr];
+"1501 clamp_13" [id=1501, type=clamp];
+"1502 exp_13" [id=1502, type=exp];
+"1503 mul_27" [id=1503, type=mul];
+"1504 add_45" [id=1504, type=add];
+"1505 new_zeros_6" [id=1505, type=new_zeros];
+"1506 _tensor_constant82" [id=1506, type=get_attr];
+"1507 lift_fresh_copy_54" [id=1507, type=lift_fresh_copy];
+"1508 slice_195" [id=1508, type=slice];
+"1509 slice_196" [id=1509, type=slice];
+"1510 fill__54" [id=1510, type=fill_];
+"1511 _tensor_constant83" [id=1511, type=get_attr];
+"1512 lift_fresh_copy_55" [id=1512, type=lift_fresh_copy];
+"1513 slice_197" [id=1513, type=slice];
+"1514 slice_198" [id=1514, type=slice];
+"1515 fill__55" [id=1515, type=fill_];
+"1516 _tensor_constant84" [id=1516, type=get_attr];
+"1517 lift_fresh_copy_56" [id=1517, type=lift_fresh_copy];
+"1518 slice_199" [id=1518, type=slice];
+"1519 slice_200" [id=1519, type=slice];
+"1520 fill__56" [id=1520, type=fill_];
+"1521 _tensor_constant85" [id=1521, type=get_attr];
+"1522 lift_fresh_copy_57" [id=1522, type=lift_fresh_copy];
+"1523 slice_201" [id=1523, type=slice];
+"1524 slice_202" [id=1524, type=slice];
+"1525 fill__57" [id=1525, type=fill_];
+"1526 _tensor_constant86" [id=1526, type=get_attr];
+"1527 lift_fresh_copy_58" [id=1527, type=lift_fresh_copy];
+"1528 slice_203" [id=1528, type=slice];
+"1529 slice_204" [id=1529, type=slice];
+"1530 fill__58" [id=1530, type=fill_];
+"1531 _tensor_constant87" [id=1531, type=get_attr];
+"1532 lift_fresh_copy_59" [id=1532, type=lift_fresh_copy];
+"1533 slice_205" [id=1533, type=slice];
+"1534 slice_206" [id=1534, type=slice];
+"1535 fill__59" [id=1535, type=fill_];
+"1536 _tensor_constant88" [id=1536, type=get_attr];
+"1537 lift_fresh_copy_60" [id=1537, type=lift_fresh_copy];
+"1538 slice_207" [id=1538, type=slice];
+"1539 slice_208" [id=1539, type=slice];
+"1540 fill__60" [id=1540, type=fill_];
+"1541 _tensor_constant89" [id=1541, type=get_attr];
+"1542 lift_fresh_copy_61" [id=1542, type=lift_fresh_copy];
+"1543 slice_209" [id=1543, type=slice];
+"1544 slice_210" [id=1544, type=slice];
+"1545 fill__61" [id=1545, type=fill_];
+"1546 _tensor_constant90" [id=1546, type=get_attr];
+"1547 lift_fresh_copy_62" [id=1547, type=lift_fresh_copy];
+"1548 slice_211" [id=1548, type=slice];
+"1549 slice_212" [id=1549, type=slice];
+"1550 fill__62" [id=1550, type=fill_];
+"1551 view_73" [id=1551, type=view];
+"1552 permute_62" [id=1552, type=permute];
+"1553 reshape_60" [id=1553, type=reshape];
+"1554 unsqueeze_38" [id=1554, type=unsqueeze];
+"1555 unsqueeze_39" [id=1555, type=unsqueeze];
+"1556 sub_6" [id=1556, type=sub];
+"1557 ne_6" [id=1557, type=ne];
+"1558 masked_fill_12" [id=1558, type=masked_fill];
+"1559 eq_6" [id=1559, type=eq];
+"1560 masked_fill_13" [id=1560, type=masked_fill];
+"1561 view_74" [id=1561, type=view];
+"1562 unsqueeze_40" [id=1562, type=unsqueeze];
+"1563 unsqueeze_41" [id=1563, type=unsqueeze];
+"1564 add_46" [id=1564, type=add];
+"1565 view_75" [id=1565, type=view];
+"1566 softmax_13" [id=1566, type=softmax];
+"1567 dropout_52" [id=1567, type=dropout];
+"1568 matmul_27" [id=1568, type=matmul];
+"1569 transpose_27" [id=1569, type=transpose];
+"1570 reshape_61" [id=1570, type=reshape];
+"1571 _param_constant224" [id=1571, type=get_attr];
+"1572 _param_constant225" [id=1572, type=get_attr];
+"1573 linear_83" [id=1573, type=linear];
+"1574 dropout_53" [id=1574, type=dropout];
+"1575 view_76" [id=1575, type=view];
+"1576 permute_63" [id=1576, type=permute];
+"1577 reshape_62" [id=1577, type=reshape];
+"1578 roll_13" [id=1578, type=roll];
+"1579 slice_213" [id=1579, type=slice];
+"1580 slice_214" [id=1580, type=slice];
+"1581 slice_215" [id=1581, type=slice];
+"1582 slice_216" [id=1582, type=slice];
+"1583 contiguous_25" [id=1583, type=contiguous];
+"1584 _param_constant226" [id=1584, type=get_attr];
+"1585 _param_constant227" [id=1585, type=get_attr];
+"1586 layer_norm_29" [id=1586, type=layer_norm];
+"1587 add_47" [id=1587, type=add];
+"1588 _param_constant228" [id=1588, type=get_attr];
+"1589 _param_constant229" [id=1589, type=get_attr];
+"1590 linear_84" [id=1590, type=linear];
+"1591 gelu_13" [id=1591, type=gelu];
+"1592 dropout_54" [id=1592, type=dropout];
+"1593 _param_constant230" [id=1593, type=get_attr];
+"1594 _param_constant231" [id=1594, type=get_attr];
+"1595 linear_85" [id=1595, type=linear];
+"1596 dropout_55" [id=1596, type=dropout];
+"1597 _param_constant232" [id=1597, type=get_attr];
+"1598 _param_constant233" [id=1598, type=get_attr];
+"1599 layer_norm_30" [id=1599, type=layer_norm];
+"1600 add_48" [id=1600, type=add];
+"1601 _tensor_constant91" [id=1601, type=get_attr];
+"1602 _param_constant234" [id=1602, type=get_attr];
+"1603 _param_constant235" [id=1603, type=get_attr];
+"1604 linear_86" [id=1604, type=linear];
+"1605 relu__14" [id=1605, type=relu_];
+"1606 _param_constant236" [id=1606, type=get_attr];
+"1607 linear_87" [id=1607, type=linear];
+"1608 view_77" [id=1608, type=view];
+"1609 _tensor_constant92" [id=1609, type=get_attr];
+"1610 index_14" [id=1610, type=index];
+"1611 view_78" [id=1611, type=view];
+"1612 permute_64" [id=1612, type=permute];
+"1613 contiguous_26" [id=1613, type=contiguous];
+"1614 unsqueeze_42" [id=1614, type=unsqueeze];
+"1615 sigmoid_14" [id=1615, type=sigmoid];
+"1616 mul_28" [id=1616, type=mul];
+"1617 pad_16" [id=1617, type=pad];
+"1618 view_79" [id=1618, type=view];
+"1619 permute_65" [id=1619, type=permute];
+"1620 reshape_63" [id=1620, type=reshape];
+"1621 _param_constant237" [id=1621, type=get_attr];
+"1622 clone_14" [id=1622, type=clone];
+"1623 slice_217" [id=1623, type=slice];
+"1624 zero__14" [id=1624, type=zero_];
+"1625 _param_constant238" [id=1625, type=get_attr];
+"1626 linear_88" [id=1626, type=linear];
+"1627 reshape_64" [id=1627, type=reshape];
+"1628 permute_66" [id=1628, type=permute];
+"1629 select_42" [id=1629, type=select];
+"1630 select_43" [id=1630, type=select];
+"1631 select_44" [id=1631, type=select];
+"1632 linalg_vector_norm_28" [id=1632, type=linalg_vector_norm];
+"1633 clamp_min_28" [id=1633, type=clamp_min];
+"1634 expand_as_28" [id=1634, type=expand_as];
+"1635 div_28" [id=1635, type=div];
+"1636 linalg_vector_norm_29" [id=1636, type=linalg_vector_norm];
+"1637 clamp_min_29" [id=1637, type=clamp_min];
+"1638 expand_as_29" [id=1638, type=expand_as];
+"1639 div_29" [id=1639, type=div];
+"1640 transpose_28" [id=1640, type=transpose];
+"1641 matmul_28" [id=1641, type=matmul];
+"1642 _param_constant239" [id=1642, type=get_attr];
+"1643 clamp_14" [id=1643, type=clamp];
+"1644 exp_14" [id=1644, type=exp];
+"1645 mul_29" [id=1645, type=mul];
+"1646 add_49" [id=1646, type=add];
+"1647 softmax_14" [id=1647, type=softmax];
+"1648 dropout_56" [id=1648, type=dropout];
+"1649 matmul_29" [id=1649, type=matmul];
+"1650 transpose_29" [id=1650, type=transpose];
+"1651 reshape_65" [id=1651, type=reshape];
+"1652 _param_constant240" [id=1652, type=get_attr];
+"1653 _param_constant241" [id=1653, type=get_attr];
+"1654 linear_89" [id=1654, type=linear];
+"1655 dropout_57" [id=1655, type=dropout];
+"1656 view_80" [id=1656, type=view];
+"1657 permute_67" [id=1657, type=permute];
+"1658 reshape_66" [id=1658, type=reshape];
+"1659 slice_218" [id=1659, type=slice];
+"1660 slice_219" [id=1660, type=slice];
+"1661 slice_220" [id=1661, type=slice];
+"1662 slice_221" [id=1662, type=slice];
+"1663 contiguous_27" [id=1663, type=contiguous];
+"1664 _param_constant242" [id=1664, type=get_attr];
+"1665 _param_constant243" [id=1665, type=get_attr];
+"1666 layer_norm_31" [id=1666, type=layer_norm];
+"1667 add_50" [id=1667, type=add];
+"1668 _param_constant244" [id=1668, type=get_attr];
+"1669 _param_constant245" [id=1669, type=get_attr];
+"1670 linear_90" [id=1670, type=linear];
+"1671 gelu_14" [id=1671, type=gelu];
+"1672 dropout_58" [id=1672, type=dropout];
+"1673 _param_constant246" [id=1673, type=get_attr];
+"1674 _param_constant247" [id=1674, type=get_attr];
+"1675 linear_91" [id=1675, type=linear];
+"1676 dropout_59" [id=1676, type=dropout];
+"1677 _param_constant248" [id=1677, type=get_attr];
+"1678 _param_constant249" [id=1678, type=get_attr];
+"1679 layer_norm_32" [id=1679, type=layer_norm];
+"1680 add_51" [id=1680, type=add];
+"1681 _tensor_constant93" [id=1681, type=get_attr];
+"1682 _param_constant250" [id=1682, type=get_attr];
+"1683 _param_constant251" [id=1683, type=get_attr];
+"1684 linear_92" [id=1684, type=linear];
+"1685 relu__15" [id=1685, type=relu_];
+"1686 _param_constant252" [id=1686, type=get_attr];
+"1687 linear_93" [id=1687, type=linear];
+"1688 view_81" [id=1688, type=view];
+"1689 _tensor_constant94" [id=1689, type=get_attr];
+"1690 index_15" [id=1690, type=index];
+"1691 view_82" [id=1691, type=view];
+"1692 permute_68" [id=1692, type=permute];
+"1693 contiguous_28" [id=1693, type=contiguous];
+"1694 unsqueeze_43" [id=1694, type=unsqueeze];
+"1695 sigmoid_15" [id=1695, type=sigmoid];
+"1696 mul_30" [id=1696, type=mul];
+"1697 pad_17" [id=1697, type=pad];
+"1698 roll_14" [id=1698, type=roll];
+"1699 view_83" [id=1699, type=view];
+"1700 permute_69" [id=1700, type=permute];
+"1701 reshape_67" [id=1701, type=reshape];
+"1702 _param_constant253" [id=1702, type=get_attr];
+"1703 clone_15" [id=1703, type=clone];
+"1704 slice_222" [id=1704, type=slice];
+"1705 zero__15" [id=1705, type=zero_];
+"1706 _param_constant254" [id=1706, type=get_attr];
+"1707 linear_94" [id=1707, type=linear];
+"1708 reshape_68" [id=1708, type=reshape];
+"1709 permute_70" [id=1709, type=permute];
+"1710 select_45" [id=1710, type=select];
+"1711 select_46" [id=1711, type=select];
+"1712 select_47" [id=1712, type=select];
+"1713 linalg_vector_norm_30" [id=1713, type=linalg_vector_norm];
+"1714 clamp_min_30" [id=1714, type=clamp_min];
+"1715 expand_as_30" [id=1715, type=expand_as];
+"1716 div_30" [id=1716, type=div];
+"1717 linalg_vector_norm_31" [id=1717, type=linalg_vector_norm];
+"1718 clamp_min_31" [id=1718, type=clamp_min];
+"1719 expand_as_31" [id=1719, type=expand_as];
+"1720 div_31" [id=1720, type=div];
+"1721 transpose_30" [id=1721, type=transpose];
+"1722 matmul_30" [id=1722, type=matmul];
+"1723 _param_constant255" [id=1723, type=get_attr];
+"1724 clamp_15" [id=1724, type=clamp];
+"1725 exp_15" [id=1725, type=exp];
+"1726 mul_31" [id=1726, type=mul];
+"1727 add_52" [id=1727, type=add];
+"1728 new_zeros_7" [id=1728, type=new_zeros];
+"1729 _tensor_constant95" [id=1729, type=get_attr];
+"1730 lift_fresh_copy_63" [id=1730, type=lift_fresh_copy];
+"1731 slice_223" [id=1731, type=slice];
+"1732 slice_224" [id=1732, type=slice];
+"1733 fill__63" [id=1733, type=fill_];
+"1734 _tensor_constant96" [id=1734, type=get_attr];
+"1735 lift_fresh_copy_64" [id=1735, type=lift_fresh_copy];
+"1736 slice_225" [id=1736, type=slice];
+"1737 slice_226" [id=1737, type=slice];
+"1738 fill__64" [id=1738, type=fill_];
+"1739 _tensor_constant97" [id=1739, type=get_attr];
+"1740 lift_fresh_copy_65" [id=1740, type=lift_fresh_copy];
+"1741 slice_227" [id=1741, type=slice];
+"1742 slice_228" [id=1742, type=slice];
+"1743 fill__65" [id=1743, type=fill_];
+"1744 _tensor_constant98" [id=1744, type=get_attr];
+"1745 lift_fresh_copy_66" [id=1745, type=lift_fresh_copy];
+"1746 slice_229" [id=1746, type=slice];
+"1747 slice_230" [id=1747, type=slice];
+"1748 fill__66" [id=1748, type=fill_];
+"1749 _tensor_constant99" [id=1749, type=get_attr];
+"1750 lift_fresh_copy_67" [id=1750, type=lift_fresh_copy];
+"1751 slice_231" [id=1751, type=slice];
+"1752 slice_232" [id=1752, type=slice];
+"1753 fill__67" [id=1753, type=fill_];
+"1754 _tensor_constant100" [id=1754, type=get_attr];
+"1755 lift_fresh_copy_68" [id=1755, type=lift_fresh_copy];
+"1756 slice_233" [id=1756, type=slice];
+"1757 slice_234" [id=1757, type=slice];
+"1758 fill__68" [id=1758, type=fill_];
+"1759 _tensor_constant101" [id=1759, type=get_attr];
+"1760 lift_fresh_copy_69" [id=1760, type=lift_fresh_copy];
+"1761 slice_235" [id=1761, type=slice];
+"1762 slice_236" [id=1762, type=slice];
+"1763 fill__69" [id=1763, type=fill_];
+"1764 _tensor_constant102" [id=1764, type=get_attr];
+"1765 lift_fresh_copy_70" [id=1765, type=lift_fresh_copy];
+"1766 slice_237" [id=1766, type=slice];
+"1767 slice_238" [id=1767, type=slice];
+"1768 fill__70" [id=1768, type=fill_];
+"1769 _tensor_constant103" [id=1769, type=get_attr];
+"1770 lift_fresh_copy_71" [id=1770, type=lift_fresh_copy];
+"1771 slice_239" [id=1771, type=slice];
+"1772 slice_240" [id=1772, type=slice];
+"1773 fill__71" [id=1773, type=fill_];
+"1774 view_84" [id=1774, type=view];
+"1775 permute_71" [id=1775, type=permute];
+"1776 reshape_69" [id=1776, type=reshape];
+"1777 unsqueeze_44" [id=1777, type=unsqueeze];
+"1778 unsqueeze_45" [id=1778, type=unsqueeze];
+"1779 sub_7" [id=1779, type=sub];
+"1780 ne_7" [id=1780, type=ne];
+"1781 masked_fill_14" [id=1781, type=masked_fill];
+"1782 eq_7" [id=1782, type=eq];
+"1783 masked_fill_15" [id=1783, type=masked_fill];
+"1784 view_85" [id=1784, type=view];
+"1785 unsqueeze_46" [id=1785, type=unsqueeze];
+"1786 unsqueeze_47" [id=1786, type=unsqueeze];
+"1787 add_53" [id=1787, type=add];
+"1788 view_86" [id=1788, type=view];
+"1789 softmax_15" [id=1789, type=softmax];
+"1790 dropout_60" [id=1790, type=dropout];
+"1791 matmul_31" [id=1791, type=matmul];
+"1792 transpose_31" [id=1792, type=transpose];
+"1793 reshape_70" [id=1793, type=reshape];
+"1794 _param_constant256" [id=1794, type=get_attr];
+"1795 _param_constant257" [id=1795, type=get_attr];
+"1796 linear_95" [id=1796, type=linear];
+"1797 dropout_61" [id=1797, type=dropout];
+"1798 view_87" [id=1798, type=view];
+"1799 permute_72" [id=1799, type=permute];
+"1800 reshape_71" [id=1800, type=reshape];
+"1801 roll_15" [id=1801, type=roll];
+"1802 slice_241" [id=1802, type=slice];
+"1803 slice_242" [id=1803, type=slice];
+"1804 slice_243" [id=1804, type=slice];
+"1805 slice_244" [id=1805, type=slice];
+"1806 contiguous_29" [id=1806, type=contiguous];
+"1807 _param_constant258" [id=1807, type=get_attr];
+"1808 _param_constant259" [id=1808, type=get_attr];
+"1809 layer_norm_33" [id=1809, type=layer_norm];
+"1810 add_54" [id=1810, type=add];
+"1811 _param_constant260" [id=1811, type=get_attr];
+"1812 _param_constant261" [id=1812, type=get_attr];
+"1813 linear_96" [id=1813, type=linear];
+"1814 gelu_15" [id=1814, type=gelu];
+"1815 dropout_62" [id=1815, type=dropout];
+"1816 _param_constant262" [id=1816, type=get_attr];
+"1817 _param_constant263" [id=1817, type=get_attr];
+"1818 linear_97" [id=1818, type=linear];
+"1819 dropout_63" [id=1819, type=dropout];
+"1820 _param_constant264" [id=1820, type=get_attr];
+"1821 _param_constant265" [id=1821, type=get_attr];
+"1822 layer_norm_34" [id=1822, type=layer_norm];
+"1823 add_55" [id=1823, type=add];
+"1824 _tensor_constant104" [id=1824, type=get_attr];
+"1825 _param_constant266" [id=1825, type=get_attr];
+"1826 _param_constant267" [id=1826, type=get_attr];
+"1827 linear_98" [id=1827, type=linear];
+"1828 relu__16" [id=1828, type=relu_];
+"1829 _param_constant268" [id=1829, type=get_attr];
+"1830 linear_99" [id=1830, type=linear];
+"1831 view_88" [id=1831, type=view];
+"1832 _tensor_constant105" [id=1832, type=get_attr];
+"1833 index_16" [id=1833, type=index];
+"1834 view_89" [id=1834, type=view];
+"1835 permute_73" [id=1835, type=permute];
+"1836 contiguous_30" [id=1836, type=contiguous];
+"1837 unsqueeze_48" [id=1837, type=unsqueeze];
+"1838 sigmoid_16" [id=1838, type=sigmoid];
+"1839 mul_32" [id=1839, type=mul];
+"1840 pad_18" [id=1840, type=pad];
+"1841 view_90" [id=1841, type=view];
+"1842 permute_74" [id=1842, type=permute];
+"1843 reshape_72" [id=1843, type=reshape];
+"1844 _param_constant269" [id=1844, type=get_attr];
+"1845 clone_16" [id=1845, type=clone];
+"1846 slice_245" [id=1846, type=slice];
+"1847 zero__16" [id=1847, type=zero_];
+"1848 _param_constant270" [id=1848, type=get_attr];
+"1849 linear_100" [id=1849, type=linear];
+"1850 reshape_73" [id=1850, type=reshape];
+"1851 permute_75" [id=1851, type=permute];
+"1852 select_48" [id=1852, type=select];
+"1853 select_49" [id=1853, type=select];
+"1854 select_50" [id=1854, type=select];
+"1855 linalg_vector_norm_32" [id=1855, type=linalg_vector_norm];
+"1856 clamp_min_32" [id=1856, type=clamp_min];
+"1857 expand_as_32" [id=1857, type=expand_as];
+"1858 div_32" [id=1858, type=div];
+"1859 linalg_vector_norm_33" [id=1859, type=linalg_vector_norm];
+"1860 clamp_min_33" [id=1860, type=clamp_min];
+"1861 expand_as_33" [id=1861, type=expand_as];
+"1862 div_33" [id=1862, type=div];
+"1863 transpose_32" [id=1863, type=transpose];
+"1864 matmul_32" [id=1864, type=matmul];
+"1865 _param_constant271" [id=1865, type=get_attr];
+"1866 clamp_16" [id=1866, type=clamp];
+"1867 exp_16" [id=1867, type=exp];
+"1868 mul_33" [id=1868, type=mul];
+"1869 add_56" [id=1869, type=add];
+"1870 softmax_16" [id=1870, type=softmax];
+"1871 dropout_64" [id=1871, type=dropout];
+"1872 matmul_33" [id=1872, type=matmul];
+"1873 transpose_33" [id=1873, type=transpose];
+"1874 reshape_74" [id=1874, type=reshape];
+"1875 _param_constant272" [id=1875, type=get_attr];
+"1876 _param_constant273" [id=1876, type=get_attr];
+"1877 linear_101" [id=1877, type=linear];
+"1878 dropout_65" [id=1878, type=dropout];
+"1879 view_91" [id=1879, type=view];
+"1880 permute_76" [id=1880, type=permute];
+"1881 reshape_75" [id=1881, type=reshape];
+"1882 slice_246" [id=1882, type=slice];
+"1883 slice_247" [id=1883, type=slice];
+"1884 slice_248" [id=1884, type=slice];
+"1885 slice_249" [id=1885, type=slice];
+"1886 contiguous_31" [id=1886, type=contiguous];
+"1887 _param_constant274" [id=1887, type=get_attr];
+"1888 _param_constant275" [id=1888, type=get_attr];
+"1889 layer_norm_35" [id=1889, type=layer_norm];
+"1890 add_57" [id=1890, type=add];
+"1891 _param_constant276" [id=1891, type=get_attr];
+"1892 _param_constant277" [id=1892, type=get_attr];
+"1893 linear_102" [id=1893, type=linear];
+"1894 gelu_16" [id=1894, type=gelu];
+"1895 dropout_66" [id=1895, type=dropout];
+"1896 _param_constant278" [id=1896, type=get_attr];
+"1897 _param_constant279" [id=1897, type=get_attr];
+"1898 linear_103" [id=1898, type=linear];
+"1899 dropout_67" [id=1899, type=dropout];
+"1900 _param_constant280" [id=1900, type=get_attr];
+"1901 _param_constant281" [id=1901, type=get_attr];
+"1902 layer_norm_36" [id=1902, type=layer_norm];
+"1903 add_58" [id=1903, type=add];
+"1904 _tensor_constant106" [id=1904, type=get_attr];
+"1905 _param_constant282" [id=1905, type=get_attr];
+"1906 _param_constant283" [id=1906, type=get_attr];
+"1907 linear_104" [id=1907, type=linear];
+"1908 relu__17" [id=1908, type=relu_];
+"1909 _param_constant284" [id=1909, type=get_attr];
+"1910 linear_105" [id=1910, type=linear];
+"1911 view_92" [id=1911, type=view];
+"1912 _tensor_constant107" [id=1912, type=get_attr];
+"1913 index_17" [id=1913, type=index];
+"1914 view_93" [id=1914, type=view];
+"1915 permute_77" [id=1915, type=permute];
+"1916 contiguous_32" [id=1916, type=contiguous];
+"1917 unsqueeze_49" [id=1917, type=unsqueeze];
+"1918 sigmoid_17" [id=1918, type=sigmoid];
+"1919 mul_34" [id=1919, type=mul];
+"1920 pad_19" [id=1920, type=pad];
+"1921 roll_16" [id=1921, type=roll];
+"1922 view_94" [id=1922, type=view];
+"1923 permute_78" [id=1923, type=permute];
+"1924 reshape_76" [id=1924, type=reshape];
+"1925 _param_constant285" [id=1925, type=get_attr];
+"1926 clone_17" [id=1926, type=clone];
+"1927 slice_250" [id=1927, type=slice];
+"1928 zero__17" [id=1928, type=zero_];
+"1929 _param_constant286" [id=1929, type=get_attr];
+"1930 linear_106" [id=1930, type=linear];
+"1931 reshape_77" [id=1931, type=reshape];
+"1932 permute_79" [id=1932, type=permute];
+"1933 select_51" [id=1933, type=select];
+"1934 select_52" [id=1934, type=select];
+"1935 select_53" [id=1935, type=select];
+"1936 linalg_vector_norm_34" [id=1936, type=linalg_vector_norm];
+"1937 clamp_min_34" [id=1937, type=clamp_min];
+"1938 expand_as_34" [id=1938, type=expand_as];
+"1939 div_34" [id=1939, type=div];
+"1940 linalg_vector_norm_35" [id=1940, type=linalg_vector_norm];
+"1941 clamp_min_35" [id=1941, type=clamp_min];
+"1942 expand_as_35" [id=1942, type=expand_as];
+"1943 div_35" [id=1943, type=div];
+"1944 transpose_34" [id=1944, type=transpose];
+"1945 matmul_34" [id=1945, type=matmul];
+"1946 _param_constant287" [id=1946, type=get_attr];
+"1947 clamp_17" [id=1947, type=clamp];
+"1948 exp_17" [id=1948, type=exp];
+"1949 mul_35" [id=1949, type=mul];
+"1950 add_59" [id=1950, type=add];
+"1951 new_zeros_8" [id=1951, type=new_zeros];
+"1952 _tensor_constant108" [id=1952, type=get_attr];
+"1953 lift_fresh_copy_72" [id=1953, type=lift_fresh_copy];
+"1954 slice_251" [id=1954, type=slice];
+"1955 slice_252" [id=1955, type=slice];
+"1956 fill__72" [id=1956, type=fill_];
+"1957 _tensor_constant109" [id=1957, type=get_attr];
+"1958 lift_fresh_copy_73" [id=1958, type=lift_fresh_copy];
+"1959 slice_253" [id=1959, type=slice];
+"1960 slice_254" [id=1960, type=slice];
+"1961 fill__73" [id=1961, type=fill_];
+"1962 _tensor_constant110" [id=1962, type=get_attr];
+"1963 lift_fresh_copy_74" [id=1963, type=lift_fresh_copy];
+"1964 slice_255" [id=1964, type=slice];
+"1965 slice_256" [id=1965, type=slice];
+"1966 fill__74" [id=1966, type=fill_];
+"1967 _tensor_constant111" [id=1967, type=get_attr];
+"1968 lift_fresh_copy_75" [id=1968, type=lift_fresh_copy];
+"1969 slice_257" [id=1969, type=slice];
+"1970 slice_258" [id=1970, type=slice];
+"1971 fill__75" [id=1971, type=fill_];
+"1972 _tensor_constant112" [id=1972, type=get_attr];
+"1973 lift_fresh_copy_76" [id=1973, type=lift_fresh_copy];
+"1974 slice_259" [id=1974, type=slice];
+"1975 slice_260" [id=1975, type=slice];
+"1976 fill__76" [id=1976, type=fill_];
+"1977 _tensor_constant113" [id=1977, type=get_attr];
+"1978 lift_fresh_copy_77" [id=1978, type=lift_fresh_copy];
+"1979 slice_261" [id=1979, type=slice];
+"1980 slice_262" [id=1980, type=slice];
+"1981 fill__77" [id=1981, type=fill_];
+"1982 _tensor_constant114" [id=1982, type=get_attr];
+"1983 lift_fresh_copy_78" [id=1983, type=lift_fresh_copy];
+"1984 slice_263" [id=1984, type=slice];
+"1985 slice_264" [id=1985, type=slice];
+"1986 fill__78" [id=1986, type=fill_];
+"1987 _tensor_constant115" [id=1987, type=get_attr];
+"1988 lift_fresh_copy_79" [id=1988, type=lift_fresh_copy];
+"1989 slice_265" [id=1989, type=slice];
+"1990 slice_266" [id=1990, type=slice];
+"1991 fill__79" [id=1991, type=fill_];
+"1992 _tensor_constant116" [id=1992, type=get_attr];
+"1993 lift_fresh_copy_80" [id=1993, type=lift_fresh_copy];
+"1994 slice_267" [id=1994, type=slice];
+"1995 slice_268" [id=1995, type=slice];
+"1996 fill__80" [id=1996, type=fill_];
+"1997 view_95" [id=1997, type=view];
+"1998 permute_80" [id=1998, type=permute];
+"1999 reshape_78" [id=1999, type=reshape];
+"2000 unsqueeze_50" [id=2000, type=unsqueeze];
+"2001 unsqueeze_51" [id=2001, type=unsqueeze];
+"2002 sub_8" [id=2002, type=sub];
+"2003 ne_8" [id=2003, type=ne];
+"2004 masked_fill_16" [id=2004, type=masked_fill];
+"2005 eq_8" [id=2005, type=eq];
+"2006 masked_fill_17" [id=2006, type=masked_fill];
+"2007 view_96" [id=2007, type=view];
+"2008 unsqueeze_52" [id=2008, type=unsqueeze];
+"2009 unsqueeze_53" [id=2009, type=unsqueeze];
+"2010 add_60" [id=2010, type=add];
+"2011 view_97" [id=2011, type=view];
+"2012 softmax_17" [id=2012, type=softmax];
+"2013 dropout_68" [id=2013, type=dropout];
+"2014 matmul_35" [id=2014, type=matmul];
+"2015 transpose_35" [id=2015, type=transpose];
+"2016 reshape_79" [id=2016, type=reshape];
+"2017 _param_constant288" [id=2017, type=get_attr];
+"2018 _param_constant289" [id=2018, type=get_attr];
+"2019 linear_107" [id=2019, type=linear];
+"2020 dropout_69" [id=2020, type=dropout];
+"2021 view_98" [id=2021, type=view];
+"2022 permute_81" [id=2022, type=permute];
+"2023 reshape_80" [id=2023, type=reshape];
+"2024 roll_17" [id=2024, type=roll];
+"2025 slice_269" [id=2025, type=slice];
+"2026 slice_270" [id=2026, type=slice];
+"2027 slice_271" [id=2027, type=slice];
+"2028 slice_272" [id=2028, type=slice];
+"2029 contiguous_33" [id=2029, type=contiguous];
+"2030 _param_constant290" [id=2030, type=get_attr];
+"2031 _param_constant291" [id=2031, type=get_attr];
+"2032 layer_norm_37" [id=2032, type=layer_norm];
+"2033 add_61" [id=2033, type=add];
+"2034 _param_constant292" [id=2034, type=get_attr];
+"2035 _param_constant293" [id=2035, type=get_attr];
+"2036 linear_108" [id=2036, type=linear];
+"2037 gelu_17" [id=2037, type=gelu];
+"2038 dropout_70" [id=2038, type=dropout];
+"2039 _param_constant294" [id=2039, type=get_attr];
+"2040 _param_constant295" [id=2040, type=get_attr];
+"2041 linear_109" [id=2041, type=linear];
+"2042 dropout_71" [id=2042, type=dropout];
+"2043 _param_constant296" [id=2043, type=get_attr];
+"2044 _param_constant297" [id=2044, type=get_attr];
+"2045 layer_norm_38" [id=2045, type=layer_norm];
+"2046 add_62" [id=2046, type=add];
+"2047 _tensor_constant117" [id=2047, type=get_attr];
+"2048 _param_constant298" [id=2048, type=get_attr];
+"2049 _param_constant299" [id=2049, type=get_attr];
+"2050 linear_110" [id=2050, type=linear];
+"2051 relu__18" [id=2051, type=relu_];
+"2052 _param_constant300" [id=2052, type=get_attr];
+"2053 linear_111" [id=2053, type=linear];
+"2054 view_99" [id=2054, type=view];
+"2055 _tensor_constant118" [id=2055, type=get_attr];
+"2056 index_18" [id=2056, type=index];
+"2057 view_100" [id=2057, type=view];
+"2058 permute_82" [id=2058, type=permute];
+"2059 contiguous_34" [id=2059, type=contiguous];
+"2060 unsqueeze_54" [id=2060, type=unsqueeze];
+"2061 sigmoid_18" [id=2061, type=sigmoid];
+"2062 mul_36" [id=2062, type=mul];
+"2063 pad_20" [id=2063, type=pad];
+"2064 view_101" [id=2064, type=view];
+"2065 permute_83" [id=2065, type=permute];
+"2066 reshape_81" [id=2066, type=reshape];
+"2067 _param_constant301" [id=2067, type=get_attr];
+"2068 clone_18" [id=2068, type=clone];
+"2069 slice_273" [id=2069, type=slice];
+"2070 zero__18" [id=2070, type=zero_];
+"2071 _param_constant302" [id=2071, type=get_attr];
+"2072 linear_112" [id=2072, type=linear];
+"2073 reshape_82" [id=2073, type=reshape];
+"2074 permute_84" [id=2074, type=permute];
+"2075 select_54" [id=2075, type=select];
+"2076 select_55" [id=2076, type=select];
+"2077 select_56" [id=2077, type=select];
+"2078 linalg_vector_norm_36" [id=2078, type=linalg_vector_norm];
+"2079 clamp_min_36" [id=2079, type=clamp_min];
+"2080 expand_as_36" [id=2080, type=expand_as];
+"2081 div_36" [id=2081, type=div];
+"2082 linalg_vector_norm_37" [id=2082, type=linalg_vector_norm];
+"2083 clamp_min_37" [id=2083, type=clamp_min];
+"2084 expand_as_37" [id=2084, type=expand_as];
+"2085 div_37" [id=2085, type=div];
+"2086 transpose_36" [id=2086, type=transpose];
+"2087 matmul_36" [id=2087, type=matmul];
+"2088 _param_constant303" [id=2088, type=get_attr];
+"2089 clamp_18" [id=2089, type=clamp];
+"2090 exp_18" [id=2090, type=exp];
+"2091 mul_37" [id=2091, type=mul];
+"2092 add_63" [id=2092, type=add];
+"2093 softmax_18" [id=2093, type=softmax];
+"2094 dropout_72" [id=2094, type=dropout];
+"2095 matmul_37" [id=2095, type=matmul];
+"2096 transpose_37" [id=2096, type=transpose];
+"2097 reshape_83" [id=2097, type=reshape];
+"2098 _param_constant304" [id=2098, type=get_attr];
+"2099 _param_constant305" [id=2099, type=get_attr];
+"2100 linear_113" [id=2100, type=linear];
+"2101 dropout_73" [id=2101, type=dropout];
+"2102 view_102" [id=2102, type=view];
+"2103 permute_85" [id=2103, type=permute];
+"2104 reshape_84" [id=2104, type=reshape];
+"2105 slice_274" [id=2105, type=slice];
+"2106 slice_275" [id=2106, type=slice];
+"2107 slice_276" [id=2107, type=slice];
+"2108 slice_277" [id=2108, type=slice];
+"2109 contiguous_35" [id=2109, type=contiguous];
+"2110 _param_constant306" [id=2110, type=get_attr];
+"2111 _param_constant307" [id=2111, type=get_attr];
+"2112 layer_norm_39" [id=2112, type=layer_norm];
+"2113 add_64" [id=2113, type=add];
+"2114 _param_constant308" [id=2114, type=get_attr];
+"2115 _param_constant309" [id=2115, type=get_attr];
+"2116 linear_114" [id=2116, type=linear];
+"2117 gelu_18" [id=2117, type=gelu];
+"2118 dropout_74" [id=2118, type=dropout];
+"2119 _param_constant310" [id=2119, type=get_attr];
+"2120 _param_constant311" [id=2120, type=get_attr];
+"2121 linear_115" [id=2121, type=linear];
+"2122 dropout_75" [id=2122, type=dropout];
+"2123 _param_constant312" [id=2123, type=get_attr];
+"2124 _param_constant313" [id=2124, type=get_attr];
+"2125 layer_norm_40" [id=2125, type=layer_norm];
+"2126 add_65" [id=2126, type=add];
+"2127 _tensor_constant119" [id=2127, type=get_attr];
+"2128 _param_constant314" [id=2128, type=get_attr];
+"2129 _param_constant315" [id=2129, type=get_attr];
+"2130 linear_116" [id=2130, type=linear];
+"2131 relu__19" [id=2131, type=relu_];
+"2132 _param_constant316" [id=2132, type=get_attr];
+"2133 linear_117" [id=2133, type=linear];
+"2134 view_103" [id=2134, type=view];
+"2135 _tensor_constant120" [id=2135, type=get_attr];
+"2136 index_19" [id=2136, type=index];
+"2137 view_104" [id=2137, type=view];
+"2138 permute_86" [id=2138, type=permute];
+"2139 contiguous_36" [id=2139, type=contiguous];
+"2140 unsqueeze_55" [id=2140, type=unsqueeze];
+"2141 sigmoid_19" [id=2141, type=sigmoid];
+"2142 mul_38" [id=2142, type=mul];
+"2143 pad_21" [id=2143, type=pad];
+"2144 roll_18" [id=2144, type=roll];
+"2145 view_105" [id=2145, type=view];
+"2146 permute_87" [id=2146, type=permute];
+"2147 reshape_85" [id=2147, type=reshape];
+"2148 _param_constant317" [id=2148, type=get_attr];
+"2149 clone_19" [id=2149, type=clone];
+"2150 slice_278" [id=2150, type=slice];
+"2151 zero__19" [id=2151, type=zero_];
+"2152 _param_constant318" [id=2152, type=get_attr];
+"2153 linear_118" [id=2153, type=linear];
+"2154 reshape_86" [id=2154, type=reshape];
+"2155 permute_88" [id=2155, type=permute];
+"2156 select_57" [id=2156, type=select];
+"2157 select_58" [id=2157, type=select];
+"2158 select_59" [id=2158, type=select];
+"2159 linalg_vector_norm_38" [id=2159, type=linalg_vector_norm];
+"2160 clamp_min_38" [id=2160, type=clamp_min];
+"2161 expand_as_38" [id=2161, type=expand_as];
+"2162 div_38" [id=2162, type=div];
+"2163 linalg_vector_norm_39" [id=2163, type=linalg_vector_norm];
+"2164 clamp_min_39" [id=2164, type=clamp_min];
+"2165 expand_as_39" [id=2165, type=expand_as];
+"2166 div_39" [id=2166, type=div];
+"2167 transpose_38" [id=2167, type=transpose];
+"2168 matmul_38" [id=2168, type=matmul];
+"2169 _param_constant319" [id=2169, type=get_attr];
+"2170 clamp_19" [id=2170, type=clamp];
+"2171 exp_19" [id=2171, type=exp];
+"2172 mul_39" [id=2172, type=mul];
+"2173 add_66" [id=2173, type=add];
+"2174 new_zeros_9" [id=2174, type=new_zeros];
+"2175 _tensor_constant121" [id=2175, type=get_attr];
+"2176 lift_fresh_copy_81" [id=2176, type=lift_fresh_copy];
+"2177 slice_279" [id=2177, type=slice];
+"2178 slice_280" [id=2178, type=slice];
+"2179 fill__81" [id=2179, type=fill_];
+"2180 _tensor_constant122" [id=2180, type=get_attr];
+"2181 lift_fresh_copy_82" [id=2181, type=lift_fresh_copy];
+"2182 slice_281" [id=2182, type=slice];
+"2183 slice_282" [id=2183, type=slice];
+"2184 fill__82" [id=2184, type=fill_];
+"2185 _tensor_constant123" [id=2185, type=get_attr];
+"2186 lift_fresh_copy_83" [id=2186, type=lift_fresh_copy];
+"2187 slice_283" [id=2187, type=slice];
+"2188 slice_284" [id=2188, type=slice];
+"2189 fill__83" [id=2189, type=fill_];
+"2190 _tensor_constant124" [id=2190, type=get_attr];
+"2191 lift_fresh_copy_84" [id=2191, type=lift_fresh_copy];
+"2192 slice_285" [id=2192, type=slice];
+"2193 slice_286" [id=2193, type=slice];
+"2194 fill__84" [id=2194, type=fill_];
+"2195 _tensor_constant125" [id=2195, type=get_attr];
+"2196 lift_fresh_copy_85" [id=2196, type=lift_fresh_copy];
+"2197 slice_287" [id=2197, type=slice];
+"2198 slice_288" [id=2198, type=slice];
+"2199 fill__85" [id=2199, type=fill_];
+"2200 _tensor_constant126" [id=2200, type=get_attr];
+"2201 lift_fresh_copy_86" [id=2201, type=lift_fresh_copy];
+"2202 slice_289" [id=2202, type=slice];
+"2203 slice_290" [id=2203, type=slice];
+"2204 fill__86" [id=2204, type=fill_];
+"2205 _tensor_constant127" [id=2205, type=get_attr];
+"2206 lift_fresh_copy_87" [id=2206, type=lift_fresh_copy];
+"2207 slice_291" [id=2207, type=slice];
+"2208 slice_292" [id=2208, type=slice];
+"2209 fill__87" [id=2209, type=fill_];
+"2210 _tensor_constant128" [id=2210, type=get_attr];
+"2211 lift_fresh_copy_88" [id=2211, type=lift_fresh_copy];
+"2212 slice_293" [id=2212, type=slice];
+"2213 slice_294" [id=2213, type=slice];
+"2214 fill__88" [id=2214, type=fill_];
+"2215 _tensor_constant129" [id=2215, type=get_attr];
+"2216 lift_fresh_copy_89" [id=2216, type=lift_fresh_copy];
+"2217 slice_295" [id=2217, type=slice];
+"2218 slice_296" [id=2218, type=slice];
+"2219 fill__89" [id=2219, type=fill_];
+"2220 view_106" [id=2220, type=view];
+"2221 permute_89" [id=2221, type=permute];
+"2222 reshape_87" [id=2222, type=reshape];
+"2223 unsqueeze_56" [id=2223, type=unsqueeze];
+"2224 unsqueeze_57" [id=2224, type=unsqueeze];
+"2225 sub_9" [id=2225, type=sub];
+"2226 ne_9" [id=2226, type=ne];
+"2227 masked_fill_18" [id=2227, type=masked_fill];
+"2228 eq_9" [id=2228, type=eq];
+"2229 masked_fill_19" [id=2229, type=masked_fill];
+"2230 view_107" [id=2230, type=view];
+"2231 unsqueeze_58" [id=2231, type=unsqueeze];
+"2232 unsqueeze_59" [id=2232, type=unsqueeze];
+"2233 add_67" [id=2233, type=add];
+"2234 view_108" [id=2234, type=view];
+"2235 softmax_19" [id=2235, type=softmax];
+"2236 dropout_76" [id=2236, type=dropout];
+"2237 matmul_39" [id=2237, type=matmul];
+"2238 transpose_39" [id=2238, type=transpose];
+"2239 reshape_88" [id=2239, type=reshape];
+"2240 _param_constant320" [id=2240, type=get_attr];
+"2241 _param_constant321" [id=2241, type=get_attr];
+"2242 linear_119" [id=2242, type=linear];
+"2243 dropout_77" [id=2243, type=dropout];
+"2244 view_109" [id=2244, type=view];
+"2245 permute_90" [id=2245, type=permute];
+"2246 reshape_89" [id=2246, type=reshape];
+"2247 roll_19" [id=2247, type=roll];
+"2248 slice_297" [id=2248, type=slice];
+"2249 slice_298" [id=2249, type=slice];
+"2250 slice_299" [id=2250, type=slice];
+"2251 slice_300" [id=2251, type=slice];
+"2252 contiguous_37" [id=2252, type=contiguous];
+"2253 _param_constant322" [id=2253, type=get_attr];
+"2254 _param_constant323" [id=2254, type=get_attr];
+"2255 layer_norm_41" [id=2255, type=layer_norm];
+"2256 add_68" [id=2256, type=add];
+"2257 _param_constant324" [id=2257, type=get_attr];
+"2258 _param_constant325" [id=2258, type=get_attr];
+"2259 linear_120" [id=2259, type=linear];
+"2260 gelu_19" [id=2260, type=gelu];
+"2261 dropout_78" [id=2261, type=dropout];
+"2262 _param_constant326" [id=2262, type=get_attr];
+"2263 _param_constant327" [id=2263, type=get_attr];
+"2264 linear_121" [id=2264, type=linear];
+"2265 dropout_79" [id=2265, type=dropout];
+"2266 _param_constant328" [id=2266, type=get_attr];
+"2267 _param_constant329" [id=2267, type=get_attr];
+"2268 layer_norm_42" [id=2268, type=layer_norm];
+"2269 add_69" [id=2269, type=add];
+"2270 _tensor_constant130" [id=2270, type=get_attr];
+"2271 _param_constant330" [id=2271, type=get_attr];
+"2272 _param_constant331" [id=2272, type=get_attr];
+"2273 linear_122" [id=2273, type=linear];
+"2274 relu__20" [id=2274, type=relu_];
+"2275 _param_constant332" [id=2275, type=get_attr];
+"2276 linear_123" [id=2276, type=linear];
+"2277 view_110" [id=2277, type=view];
+"2278 _tensor_constant131" [id=2278, type=get_attr];
+"2279 index_20" [id=2279, type=index];
+"2280 view_111" [id=2280, type=view];
+"2281 permute_91" [id=2281, type=permute];
+"2282 contiguous_38" [id=2282, type=contiguous];
+"2283 unsqueeze_60" [id=2283, type=unsqueeze];
+"2284 sigmoid_20" [id=2284, type=sigmoid];
+"2285 mul_40" [id=2285, type=mul];
+"2286 pad_22" [id=2286, type=pad];
+"2287 view_112" [id=2287, type=view];
+"2288 permute_92" [id=2288, type=permute];
+"2289 reshape_90" [id=2289, type=reshape];
+"2290 _param_constant333" [id=2290, type=get_attr];
+"2291 clone_20" [id=2291, type=clone];
+"2292 slice_301" [id=2292, type=slice];
+"2293 zero__20" [id=2293, type=zero_];
+"2294 _param_constant334" [id=2294, type=get_attr];
+"2295 linear_124" [id=2295, type=linear];
+"2296 reshape_91" [id=2296, type=reshape];
+"2297 permute_93" [id=2297, type=permute];
+"2298 select_60" [id=2298, type=select];
+"2299 select_61" [id=2299, type=select];
+"2300 select_62" [id=2300, type=select];
+"2301 linalg_vector_norm_40" [id=2301, type=linalg_vector_norm];
+"2302 clamp_min_40" [id=2302, type=clamp_min];
+"2303 expand_as_40" [id=2303, type=expand_as];
+"2304 div_40" [id=2304, type=div];
+"2305 linalg_vector_norm_41" [id=2305, type=linalg_vector_norm];
+"2306 clamp_min_41" [id=2306, type=clamp_min];
+"2307 expand_as_41" [id=2307, type=expand_as];
+"2308 div_41" [id=2308, type=div];
+"2309 transpose_40" [id=2309, type=transpose];
+"2310 matmul_40" [id=2310, type=matmul];
+"2311 _param_constant335" [id=2311, type=get_attr];
+"2312 clamp_20" [id=2312, type=clamp];
+"2313 exp_20" [id=2313, type=exp];
+"2314 mul_41" [id=2314, type=mul];
+"2315 add_70" [id=2315, type=add];
+"2316 softmax_20" [id=2316, type=softmax];
+"2317 dropout_80" [id=2317, type=dropout];
+"2318 matmul_41" [id=2318, type=matmul];
+"2319 transpose_41" [id=2319, type=transpose];
+"2320 reshape_92" [id=2320, type=reshape];
+"2321 _param_constant336" [id=2321, type=get_attr];
+"2322 _param_constant337" [id=2322, type=get_attr];
+"2323 linear_125" [id=2323, type=linear];
+"2324 dropout_81" [id=2324, type=dropout];
+"2325 view_113" [id=2325, type=view];
+"2326 permute_94" [id=2326, type=permute];
+"2327 reshape_93" [id=2327, type=reshape];
+"2328 slice_302" [id=2328, type=slice];
+"2329 slice_303" [id=2329, type=slice];
+"2330 slice_304" [id=2330, type=slice];
+"2331 slice_305" [id=2331, type=slice];
+"2332 contiguous_39" [id=2332, type=contiguous];
+"2333 _param_constant338" [id=2333, type=get_attr];
+"2334 _param_constant339" [id=2334, type=get_attr];
+"2335 layer_norm_43" [id=2335, type=layer_norm];
+"2336 add_71" [id=2336, type=add];
+"2337 _param_constant340" [id=2337, type=get_attr];
+"2338 _param_constant341" [id=2338, type=get_attr];
+"2339 linear_126" [id=2339, type=linear];
+"2340 gelu_20" [id=2340, type=gelu];
+"2341 dropout_82" [id=2341, type=dropout];
+"2342 _param_constant342" [id=2342, type=get_attr];
+"2343 _param_constant343" [id=2343, type=get_attr];
+"2344 linear_127" [id=2344, type=linear];
+"2345 dropout_83" [id=2345, type=dropout];
+"2346 _param_constant344" [id=2346, type=get_attr];
+"2347 _param_constant345" [id=2347, type=get_attr];
+"2348 layer_norm_44" [id=2348, type=layer_norm];
+"2349 add_72" [id=2349, type=add];
+"2350 _tensor_constant132" [id=2350, type=get_attr];
+"2351 _param_constant346" [id=2351, type=get_attr];
+"2352 _param_constant347" [id=2352, type=get_attr];
+"2353 linear_128" [id=2353, type=linear];
+"2354 relu__21" [id=2354, type=relu_];
+"2355 _param_constant348" [id=2355, type=get_attr];
+"2356 linear_129" [id=2356, type=linear];
+"2357 view_114" [id=2357, type=view];
+"2358 _tensor_constant133" [id=2358, type=get_attr];
+"2359 index_21" [id=2359, type=index];
+"2360 view_115" [id=2360, type=view];
+"2361 permute_95" [id=2361, type=permute];
+"2362 contiguous_40" [id=2362, type=contiguous];
+"2363 unsqueeze_61" [id=2363, type=unsqueeze];
+"2364 sigmoid_21" [id=2364, type=sigmoid];
+"2365 mul_42" [id=2365, type=mul];
+"2366 pad_23" [id=2366, type=pad];
+"2367 roll_20" [id=2367, type=roll];
+"2368 view_116" [id=2368, type=view];
+"2369 permute_96" [id=2369, type=permute];
+"2370 reshape_94" [id=2370, type=reshape];
+"2371 _param_constant349" [id=2371, type=get_attr];
+"2372 clone_21" [id=2372, type=clone];
+"2373 slice_306" [id=2373, type=slice];
+"2374 zero__21" [id=2374, type=zero_];
+"2375 _param_constant350" [id=2375, type=get_attr];
+"2376 linear_130" [id=2376, type=linear];
+"2377 reshape_95" [id=2377, type=reshape];
+"2378 permute_97" [id=2378, type=permute];
+"2379 select_63" [id=2379, type=select];
+"2380 select_64" [id=2380, type=select];
+"2381 select_65" [id=2381, type=select];
+"2382 linalg_vector_norm_42" [id=2382, type=linalg_vector_norm];
+"2383 clamp_min_42" [id=2383, type=clamp_min];
+"2384 expand_as_42" [id=2384, type=expand_as];
+"2385 div_42" [id=2385, type=div];
+"2386 linalg_vector_norm_43" [id=2386, type=linalg_vector_norm];
+"2387 clamp_min_43" [id=2387, type=clamp_min];
+"2388 expand_as_43" [id=2388, type=expand_as];
+"2389 div_43" [id=2389, type=div];
+"2390 transpose_42" [id=2390, type=transpose];
+"2391 matmul_42" [id=2391, type=matmul];
+"2392 _param_constant351" [id=2392, type=get_attr];
+"2393 clamp_21" [id=2393, type=clamp];
+"2394 exp_21" [id=2394, type=exp];
+"2395 mul_43" [id=2395, type=mul];
+"2396 add_73" [id=2396, type=add];
+"2397 new_zeros_10" [id=2397, type=new_zeros];
+"2398 _tensor_constant134" [id=2398, type=get_attr];
+"2399 lift_fresh_copy_90" [id=2399, type=lift_fresh_copy];
+"2400 slice_307" [id=2400, type=slice];
+"2401 slice_308" [id=2401, type=slice];
+"2402 fill__90" [id=2402, type=fill_];
+"2403 _tensor_constant135" [id=2403, type=get_attr];
+"2404 lift_fresh_copy_91" [id=2404, type=lift_fresh_copy];
+"2405 slice_309" [id=2405, type=slice];
+"2406 slice_310" [id=2406, type=slice];
+"2407 fill__91" [id=2407, type=fill_];
+"2408 _tensor_constant136" [id=2408, type=get_attr];
+"2409 lift_fresh_copy_92" [id=2409, type=lift_fresh_copy];
+"2410 slice_311" [id=2410, type=slice];
+"2411 slice_312" [id=2411, type=slice];
+"2412 fill__92" [id=2412, type=fill_];
+"2413 _tensor_constant137" [id=2413, type=get_attr];
+"2414 lift_fresh_copy_93" [id=2414, type=lift_fresh_copy];
+"2415 slice_313" [id=2415, type=slice];
+"2416 slice_314" [id=2416, type=slice];
+"2417 fill__93" [id=2417, type=fill_];
+"2418 _tensor_constant138" [id=2418, type=get_attr];
+"2419 lift_fresh_copy_94" [id=2419, type=lift_fresh_copy];
+"2420 slice_315" [id=2420, type=slice];
+"2421 slice_316" [id=2421, type=slice];
+"2422 fill__94" [id=2422, type=fill_];
+"2423 _tensor_constant139" [id=2423, type=get_attr];
+"2424 lift_fresh_copy_95" [id=2424, type=lift_fresh_copy];
+"2425 slice_317" [id=2425, type=slice];
+"2426 slice_318" [id=2426, type=slice];
+"2427 fill__95" [id=2427, type=fill_];
+"2428 _tensor_constant140" [id=2428, type=get_attr];
+"2429 lift_fresh_copy_96" [id=2429, type=lift_fresh_copy];
+"2430 slice_319" [id=2430, type=slice];
+"2431 slice_320" [id=2431, type=slice];
+"2432 fill__96" [id=2432, type=fill_];
+"2433 _tensor_constant141" [id=2433, type=get_attr];
+"2434 lift_fresh_copy_97" [id=2434, type=lift_fresh_copy];
+"2435 slice_321" [id=2435, type=slice];
+"2436 slice_322" [id=2436, type=slice];
+"2437 fill__97" [id=2437, type=fill_];
+"2438 _tensor_constant142" [id=2438, type=get_attr];
+"2439 lift_fresh_copy_98" [id=2439, type=lift_fresh_copy];
+"2440 slice_323" [id=2440, type=slice];
+"2441 slice_324" [id=2441, type=slice];
+"2442 fill__98" [id=2442, type=fill_];
+"2443 view_117" [id=2443, type=view];
+"2444 permute_98" [id=2444, type=permute];
+"2445 reshape_96" [id=2445, type=reshape];
+"2446 unsqueeze_62" [id=2446, type=unsqueeze];
+"2447 unsqueeze_63" [id=2447, type=unsqueeze];
+"2448 sub_10" [id=2448, type=sub];
+"2449 ne_10" [id=2449, type=ne];
+"2450 masked_fill_20" [id=2450, type=masked_fill];
+"2451 eq_10" [id=2451, type=eq];
+"2452 masked_fill_21" [id=2452, type=masked_fill];
+"2453 view_118" [id=2453, type=view];
+"2454 unsqueeze_64" [id=2454, type=unsqueeze];
+"2455 unsqueeze_65" [id=2455, type=unsqueeze];
+"2456 add_74" [id=2456, type=add];
+"2457 view_119" [id=2457, type=view];
+"2458 softmax_21" [id=2458, type=softmax];
+"2459 dropout_84" [id=2459, type=dropout];
+"2460 matmul_43" [id=2460, type=matmul];
+"2461 transpose_43" [id=2461, type=transpose];
+"2462 reshape_97" [id=2462, type=reshape];
+"2463 _param_constant352" [id=2463, type=get_attr];
+"2464 _param_constant353" [id=2464, type=get_attr];
+"2465 linear_131" [id=2465, type=linear];
+"2466 dropout_85" [id=2466, type=dropout];
+"2467 view_120" [id=2467, type=view];
+"2468 permute_99" [id=2468, type=permute];
+"2469 reshape_98" [id=2469, type=reshape];
+"2470 roll_21" [id=2470, type=roll];
+"2471 slice_325" [id=2471, type=slice];
+"2472 slice_326" [id=2472, type=slice];
+"2473 slice_327" [id=2473, type=slice];
+"2474 slice_328" [id=2474, type=slice];
+"2475 contiguous_41" [id=2475, type=contiguous];
+"2476 _param_constant354" [id=2476, type=get_attr];
+"2477 _param_constant355" [id=2477, type=get_attr];
+"2478 layer_norm_45" [id=2478, type=layer_norm];
+"2479 add_75" [id=2479, type=add];
+"2480 _param_constant356" [id=2480, type=get_attr];
+"2481 _param_constant357" [id=2481, type=get_attr];
+"2482 linear_132" [id=2482, type=linear];
+"2483 gelu_21" [id=2483, type=gelu];
+"2484 dropout_86" [id=2484, type=dropout];
+"2485 _param_constant358" [id=2485, type=get_attr];
+"2486 _param_constant359" [id=2486, type=get_attr];
+"2487 linear_133" [id=2487, type=linear];
+"2488 dropout_87" [id=2488, type=dropout];
+"2489 _param_constant360" [id=2489, type=get_attr];
+"2490 _param_constant361" [id=2490, type=get_attr];
+"2491 layer_norm_46" [id=2491, type=layer_norm];
+"2492 add_76" [id=2492, type=add];
+"2493 pad_24" [id=2493, type=pad];
+"2494 slice_329" [id=2494, type=slice];
+"2495 slice_330" [id=2495, type=slice];
+"2496 slice_331" [id=2496, type=slice];
+"2497 slice_332" [id=2497, type=slice];
+"2498 slice_333" [id=2498, type=slice];
+"2499 slice_334" [id=2499, type=slice];
+"2500 slice_335" [id=2500, type=slice];
+"2501 slice_336" [id=2501, type=slice];
+"2502 slice_337" [id=2502, type=slice];
+"2503 slice_338" [id=2503, type=slice];
+"2504 slice_339" [id=2504, type=slice];
+"2505 slice_340" [id=2505, type=slice];
+"2506 cat_2" [id=2506, type=cat];
+"2507 _param_constant362" [id=2507, type=get_attr];
+"2508 linear_134" [id=2508, type=linear];
+"2509 _param_constant363" [id=2509, type=get_attr];
+"2510 _param_constant364" [id=2510, type=get_attr];
+"2511 layer_norm_47" [id=2511, type=layer_norm];
+"2512 _tensor_constant143" [id=2512, type=get_attr];
+"2513 _param_constant365" [id=2513, type=get_attr];
+"2514 _param_constant366" [id=2514, type=get_attr];
+"2515 linear_135" [id=2515, type=linear];
+"2516 relu__22" [id=2516, type=relu_];
+"2517 _param_constant367" [id=2517, type=get_attr];
+"2518 linear_136" [id=2518, type=linear];
+"2519 view_121" [id=2519, type=view];
+"2520 _tensor_constant144" [id=2520, type=get_attr];
+"2521 index_22" [id=2521, type=index];
+"2522 view_122" [id=2522, type=view];
+"2523 permute_100" [id=2523, type=permute];
+"2524 contiguous_42" [id=2524, type=contiguous];
+"2525 unsqueeze_66" [id=2525, type=unsqueeze];
+"2526 sigmoid_22" [id=2526, type=sigmoid];
+"2527 mul_44" [id=2527, type=mul];
+"2528 pad_25" [id=2528, type=pad];
+"2529 view_123" [id=2529, type=view];
+"2530 permute_101" [id=2530, type=permute];
+"2531 reshape_99" [id=2531, type=reshape];
+"2532 _param_constant368" [id=2532, type=get_attr];
+"2533 clone_22" [id=2533, type=clone];
+"2534 slice_341" [id=2534, type=slice];
+"2535 zero__22" [id=2535, type=zero_];
+"2536 _param_constant369" [id=2536, type=get_attr];
+"2537 linear_137" [id=2537, type=linear];
+"2538 reshape_100" [id=2538, type=reshape];
+"2539 permute_102" [id=2539, type=permute];
+"2540 select_66" [id=2540, type=select];
+"2541 select_67" [id=2541, type=select];
+"2542 select_68" [id=2542, type=select];
+"2543 linalg_vector_norm_44" [id=2543, type=linalg_vector_norm];
+"2544 clamp_min_44" [id=2544, type=clamp_min];
+"2545 expand_as_44" [id=2545, type=expand_as];
+"2546 div_44" [id=2546, type=div];
+"2547 linalg_vector_norm_45" [id=2547, type=linalg_vector_norm];
+"2548 clamp_min_45" [id=2548, type=clamp_min];
+"2549 expand_as_45" [id=2549, type=expand_as];
+"2550 div_45" [id=2550, type=div];
+"2551 transpose_44" [id=2551, type=transpose];
+"2552 matmul_44" [id=2552, type=matmul];
+"2553 _param_constant370" [id=2553, type=get_attr];
+"2554 clamp_22" [id=2554, type=clamp];
+"2555 exp_22" [id=2555, type=exp];
+"2556 mul_45" [id=2556, type=mul];
+"2557 add_77" [id=2557, type=add];
+"2558 softmax_22" [id=2558, type=softmax];
+"2559 dropout_88" [id=2559, type=dropout];
+"2560 matmul_45" [id=2560, type=matmul];
+"2561 transpose_45" [id=2561, type=transpose];
+"2562 reshape_101" [id=2562, type=reshape];
+"2563 _param_constant371" [id=2563, type=get_attr];
+"2564 _param_constant372" [id=2564, type=get_attr];
+"2565 linear_138" [id=2565, type=linear];
+"2566 dropout_89" [id=2566, type=dropout];
+"2567 view_124" [id=2567, type=view];
+"2568 permute_103" [id=2568, type=permute];
+"2569 reshape_102" [id=2569, type=reshape];
+"2570 slice_342" [id=2570, type=slice];
+"2571 slice_343" [id=2571, type=slice];
+"2572 slice_344" [id=2572, type=slice];
+"2573 slice_345" [id=2573, type=slice];
+"2574 contiguous_43" [id=2574, type=contiguous];
+"2575 _param_constant373" [id=2575, type=get_attr];
+"2576 _param_constant374" [id=2576, type=get_attr];
+"2577 layer_norm_48" [id=2577, type=layer_norm];
+"2578 add_78" [id=2578, type=add];
+"2579 _param_constant375" [id=2579, type=get_attr];
+"2580 _param_constant376" [id=2580, type=get_attr];
+"2581 linear_139" [id=2581, type=linear];
+"2582 gelu_22" [id=2582, type=gelu];
+"2583 dropout_90" [id=2583, type=dropout];
+"2584 _param_constant377" [id=2584, type=get_attr];
+"2585 _param_constant378" [id=2585, type=get_attr];
+"2586 linear_140" [id=2586, type=linear];
+"2587 dropout_91" [id=2587, type=dropout];
+"2588 _param_constant379" [id=2588, type=get_attr];
+"2589 _param_constant380" [id=2589, type=get_attr];
+"2590 layer_norm_49" [id=2590, type=layer_norm];
+"2591 add_79" [id=2591, type=add];
+"2592 _tensor_constant145" [id=2592, type=get_attr];
+"2593 _param_constant381" [id=2593, type=get_attr];
+"2594 _param_constant382" [id=2594, type=get_attr];
+"2595 linear_141" [id=2595, type=linear];
+"2596 relu__23" [id=2596, type=relu_];
+"2597 _param_constant383" [id=2597, type=get_attr];
+"2598 linear_142" [id=2598, type=linear];
+"2599 view_125" [id=2599, type=view];
+"2600 _tensor_constant146" [id=2600, type=get_attr];
+"2601 index_23" [id=2601, type=index];
+"2602 view_126" [id=2602, type=view];
+"2603 permute_104" [id=2603, type=permute];
+"2604 contiguous_44" [id=2604, type=contiguous];
+"2605 unsqueeze_67" [id=2605, type=unsqueeze];
+"2606 sigmoid_23" [id=2606, type=sigmoid];
+"2607 mul_46" [id=2607, type=mul];
+"2608 pad_26" [id=2608, type=pad];
+"2609 view_127" [id=2609, type=view];
+"2610 permute_105" [id=2610, type=permute];
+"2611 reshape_103" [id=2611, type=reshape];
+"2612 _param_constant384" [id=2612, type=get_attr];
+"2613 clone_23" [id=2613, type=clone];
+"2614 slice_346" [id=2614, type=slice];
+"2615 zero__23" [id=2615, type=zero_];
+"2616 _param_constant385" [id=2616, type=get_attr];
+"2617 linear_143" [id=2617, type=linear];
+"2618 reshape_104" [id=2618, type=reshape];
+"2619 permute_106" [id=2619, type=permute];
+"2620 select_69" [id=2620, type=select];
+"2621 select_70" [id=2621, type=select];
+"2622 select_71" [id=2622, type=select];
+"2623 linalg_vector_norm_46" [id=2623, type=linalg_vector_norm];
+"2624 clamp_min_46" [id=2624, type=clamp_min];
+"2625 expand_as_46" [id=2625, type=expand_as];
+"2626 div_46" [id=2626, type=div];
+"2627 linalg_vector_norm_47" [id=2627, type=linalg_vector_norm];
+"2628 clamp_min_47" [id=2628, type=clamp_min];
+"2629 expand_as_47" [id=2629, type=expand_as];
+"2630 div_47" [id=2630, type=div];
+"2631 transpose_46" [id=2631, type=transpose];
+"2632 matmul_46" [id=2632, type=matmul];
+"2633 _param_constant386" [id=2633, type=get_attr];
+"2634 clamp_23" [id=2634, type=clamp];
+"2635 exp_23" [id=2635, type=exp];
+"2636 mul_47" [id=2636, type=mul];
+"2637 add_80" [id=2637, type=add];
+"2638 softmax_23" [id=2638, type=softmax];
+"2639 dropout_92" [id=2639, type=dropout];
+"2640 matmul_47" [id=2640, type=matmul];
+"2641 transpose_47" [id=2641, type=transpose];
+"2642 reshape_105" [id=2642, type=reshape];
+"2643 _param_constant387" [id=2643, type=get_attr];
+"2644 _param_constant388" [id=2644, type=get_attr];
+"2645 linear_144" [id=2645, type=linear];
+"2646 dropout_93" [id=2646, type=dropout];
+"2647 view_128" [id=2647, type=view];
+"2648 permute_107" [id=2648, type=permute];
+"2649 reshape_106" [id=2649, type=reshape];
+"2650 slice_347" [id=2650, type=slice];
+"2651 slice_348" [id=2651, type=slice];
+"2652 slice_349" [id=2652, type=slice];
+"2653 slice_350" [id=2653, type=slice];
+"2654 contiguous_45" [id=2654, type=contiguous];
+"2655 _param_constant389" [id=2655, type=get_attr];
+"2656 _param_constant390" [id=2656, type=get_attr];
+"2657 layer_norm_50" [id=2657, type=layer_norm];
+"2658 add_81" [id=2658, type=add];
+"2659 _param_constant391" [id=2659, type=get_attr];
+"2660 _param_constant392" [id=2660, type=get_attr];
+"2661 linear_145" [id=2661, type=linear];
+"2662 gelu_23" [id=2662, type=gelu];
+"2663 dropout_94" [id=2663, type=dropout];
+"2664 _param_constant393" [id=2664, type=get_attr];
+"2665 _param_constant394" [id=2665, type=get_attr];
+"2666 linear_146" [id=2666, type=linear];
+"2667 dropout_95" [id=2667, type=dropout];
+"2668 _param_constant395" [id=2668, type=get_attr];
+"2669 _param_constant396" [id=2669, type=get_attr];
+"2670 layer_norm_51" [id=2670, type=layer_norm];
+"2671 add_82" [id=2671, type=add];
+"2672 _param_constant397" [id=2672, type=get_attr];
+"2673 _param_constant398" [id=2673, type=get_attr];
+"2674 layer_norm_52" [id=2674, type=layer_norm];
+"2675 permute_108" [id=2675, type=permute];
+"2676 adaptive_avg_pool2d" [id=2676, type=adaptive_avg_pool2d];
+"2677 flatten" [id=2677, type=flatten];
+"2678 _param_constant399" [id=2678, type=get_attr];
+"2679 _param_constant400" [id=2679, type=get_attr];
+"2680 linear_147" [id=2680, type=linear];
+"2681 output" [id=2681, type=output];
+"0 arg0_1" -> "3 conv2d";
+"1 _param_constant0" -> "3 conv2d";
+"2 _param_constant1" -> "3 conv2d";
+"3 conv2d" -> "4 permute";
+"4 permute" -> "7 layer_norm";
+"5 _param_constant2" -> "7 layer_norm";
+"6 _param_constant3" -> "7 layer_norm";
+"7 layer_norm" -> "24 pad";
+"7 layer_norm" -> "71 add_1";
+"8 _tensor_constant0" -> "11 linear";
+"9 _param_constant4" -> "11 linear";
+"10 _param_constant5" -> "11 linear";
+"11 linear" -> "12 relu_";
+"12 relu_" -> "14 linear_1";
+"13 _param_constant6" -> "14 linear_1";
+"14 linear_1" -> "15 view";
+"15 view" -> "17 index";
+"16 _tensor_constant1" -> "17 index";
+"17 index" -> "18 view_1";
+"18 view_1" -> "19 permute_1";
+"19 permute_1" -> "20 contiguous";
+"20 contiguous" -> "21 unsqueeze";
+"21 unsqueeze" -> "22 sigmoid";
+"22 sigmoid" -> "23 mul";
+"23 mul" -> "53 add";
+"24 pad" -> "25 view_2";
+"25 view_2" -> "26 permute_2";
+"26 permute_2" -> "27 reshape";
+"27 reshape" -> "33 linear_2";
+"28 _param_constant7" -> "29 clone";
+"29 clone" -> "30 slice_1";
+"29 clone" -> "33 linear_2";
+"30 slice_1" -> "31 zero_";
+"32 _param_constant8" -> "33 linear_2";
+"33 linear_2" -> "34 reshape_1";
+"34 reshape_1" -> "35 permute_3";
+"35 permute_3" -> "36 select";
+"35 permute_3" -> "37 select_1";
+"35 permute_3" -> "38 select_2";
+"36 select" -> "39 linalg_vector_norm";
+"36 select" -> "41 expand_as";
+"36 select" -> "42 div";
+"37 select_1" -> "43 linalg_vector_norm_1";
+"37 select_1" -> "45 expand_as_1";
+"37 select_1" -> "46 div_1";
+"38 select_2" -> "56 matmul_1";
+"39 linalg_vector_norm" -> "40 clamp_min";
+"40 clamp_min" -> "41 expand_as";
+"41 expand_as" -> "42 div";
+"42 div" -> "48 matmul";
+"43 linalg_vector_norm_1" -> "44 clamp_min_1";
+"44 clamp_min_1" -> "45 expand_as_1";
+"45 expand_as_1" -> "46 div_1";
+"46 div_1" -> "47 transpose";
+"47 transpose" -> "48 matmul";
+"48 matmul" -> "52 mul_1";
+"49 _param_constant9" -> "50 clamp";
+"50 clamp" -> "51 exp";
+"51 exp" -> "52 mul_1";
+"52 mul_1" -> "53 add";
+"53 add" -> "54 softmax";
+"54 softmax" -> "55 dropout";
+"55 dropout" -> "56 matmul_1";
+"56 matmul_1" -> "57 transpose_1";
+"57 transpose_1" -> "58 reshape_2";
+"58 reshape_2" -> "61 linear_3";
+"59 _param_constant10" -> "61 linear_3";
+"60 _param_constant11" -> "61 linear_3";
+"61 linear_3" -> "62 dropout_1";
+"62 dropout_1" -> "63 view_3";
+"63 view_3" -> "64 permute_4";
+"64 permute_4" -> "65 reshape_3";
+"65 reshape_3" -> "66 slice_2";
+"66 slice_2" -> "67 slice_3";
+"67 slice_3" -> "70 layer_norm_1";
+"68 _param_constant12" -> "70 layer_norm_1";
+"69 _param_constant13" -> "70 layer_norm_1";
+"70 layer_norm_1" -> "71 add_1";
+"71 add_1" -> "74 linear_4";
+"71 add_1" -> "84 add_2";
+"72 _param_constant14" -> "74 linear_4";
+"73 _param_constant15" -> "74 linear_4";
+"74 linear_4" -> "75 gelu";
+"75 gelu" -> "76 dropout_2";
+"76 dropout_2" -> "79 linear_5";
+"77 _param_constant16" -> "79 linear_5";
+"78 _param_constant17" -> "79 linear_5";
+"79 linear_5" -> "80 dropout_3";
+"80 dropout_3" -> "83 layer_norm_2";
+"81 _param_constant18" -> "83 layer_norm_2";
+"82 _param_constant19" -> "83 layer_norm_2";
+"83 layer_norm_2" -> "84 add_2";
+"84 add_2" -> "101 pad_1";
+"84 add_2" -> "211 add_5";
+"85 _tensor_constant2" -> "88 linear_6";
+"86 _param_constant20" -> "88 linear_6";
+"87 _param_constant21" -> "88 linear_6";
+"88 linear_6" -> "89 relu__1";
+"89 relu__1" -> "91 linear_7";
+"90 _param_constant22" -> "91 linear_7";
+"91 linear_7" -> "92 view_4";
+"92 view_4" -> "94 index_1";
+"93 _tensor_constant3" -> "94 index_1";
+"94 index_1" -> "95 view_5";
+"95 view_5" -> "96 permute_5";
+"96 permute_5" -> "97 contiguous_1";
+"97 contiguous_1" -> "98 unsqueeze_1";
+"98 unsqueeze_1" -> "99 sigmoid_1";
+"99 sigmoid_1" -> "100 mul_2";
+"100 mul_2" -> "131 add_3";
+"101 pad_1" -> "102 roll";
+"102 roll" -> "103 view_6";
+"103 view_6" -> "104 permute_6";
+"104 permute_6" -> "105 reshape_4";
+"105 reshape_4" -> "111 linear_8";
+"105 reshape_4" -> "132 new_zeros";
+"106 _param_constant23" -> "107 clone_1";
+"107 clone_1" -> "108 slice_4";
+"107 clone_1" -> "111 linear_8";
+"108 slice_4" -> "109 zero__1";
+"110 _param_constant24" -> "111 linear_8";
+"111 linear_8" -> "112 reshape_5";
+"112 reshape_5" -> "113 permute_7";
+"113 permute_7" -> "114 select_3";
+"113 permute_7" -> "115 select_4";
+"113 permute_7" -> "116 select_5";
+"114 select_3" -> "117 linalg_vector_norm_2";
+"114 select_3" -> "119 expand_as_2";
+"114 select_3" -> "120 div_2";
+"115 select_4" -> "121 linalg_vector_norm_3";
+"115 select_4" -> "123 expand_as_3";
+"115 select_4" -> "124 div_3";
+"116 select_5" -> "195 matmul_3";
+"117 linalg_vector_norm_2" -> "118 clamp_min_2";
+"118 clamp_min_2" -> "119 expand_as_2";
+"119 expand_as_2" -> "120 div_2";
+"120 div_2" -> "126 matmul_2";
+"121 linalg_vector_norm_3" -> "122 clamp_min_3";
+"122 clamp_min_3" -> "123 expand_as_3";
+"123 expand_as_3" -> "124 div_3";
+"124 div_3" -> "125 transpose_2";
+"125 transpose_2" -> "126 matmul_2";
+"126 matmul_2" -> "130 mul_3";
+"127 _param_constant25" -> "128 clamp_1";
+"128 clamp_1" -> "129 exp_1";
+"129 exp_1" -> "130 mul_3";
+"130 mul_3" -> "131 add_3";
+"131 add_3" -> "188 view_8";
+"132 new_zeros" -> "135 slice_5";
+"132 new_zeros" -> "140 slice_7";
+"132 new_zeros" -> "145 slice_9";
+"132 new_zeros" -> "150 slice_11";
+"132 new_zeros" -> "155 slice_13";
+"132 new_zeros" -> "160 slice_15";
+"132 new_zeros" -> "165 slice_17";
+"132 new_zeros" -> "170 slice_19";
+"132 new_zeros" -> "175 slice_21";
+"132 new_zeros" -> "178 view_7";
+"133 _tensor_constant4" -> "134 lift_fresh_copy";
+"134 lift_fresh_copy" -> "137 fill_";
+"135 slice_5" -> "136 slice_6";
+"136 slice_6" -> "137 fill_";
+"138 _tensor_constant5" -> "139 lift_fresh_copy_1";
+"139 lift_fresh_copy_1" -> "142 fill__1";
+"140 slice_7" -> "141 slice_8";
+"141 slice_8" -> "142 fill__1";
+"143 _tensor_constant6" -> "144 lift_fresh_copy_2";
+"144 lift_fresh_copy_2" -> "147 fill__2";
+"145 slice_9" -> "146 slice_10";
+"146 slice_10" -> "147 fill__2";
+"148 _tensor_constant7" -> "149 lift_fresh_copy_3";
+"149 lift_fresh_copy_3" -> "152 fill__3";
+"150 slice_11" -> "151 slice_12";
+"151 slice_12" -> "152 fill__3";
+"153 _tensor_constant8" -> "154 lift_fresh_copy_4";
+"154 lift_fresh_copy_4" -> "157 fill__4";
+"155 slice_13" -> "156 slice_14";
+"156 slice_14" -> "157 fill__4";
+"158 _tensor_constant9" -> "159 lift_fresh_copy_5";
+"159 lift_fresh_copy_5" -> "162 fill__5";
+"160 slice_15" -> "161 slice_16";
+"161 slice_16" -> "162 fill__5";
+"163 _tensor_constant10" -> "164 lift_fresh_copy_6";
+"164 lift_fresh_copy_6" -> "167 fill__6";
+"165 slice_17" -> "166 slice_18";
+"166 slice_18" -> "167 fill__6";
+"168 _tensor_constant11" -> "169 lift_fresh_copy_7";
+"169 lift_fresh_copy_7" -> "172 fill__7";
+"170 slice_19" -> "171 slice_20";
+"171 slice_20" -> "172 fill__7";
+"173 _tensor_constant12" -> "174 lift_fresh_copy_8";
+"174 lift_fresh_copy_8" -> "177 fill__8";
+"175 slice_21" -> "176 slice_22";
+"176 slice_22" -> "177 fill__8";
+"178 view_7" -> "179 permute_8";
+"179 permute_8" -> "180 reshape_6";
+"180 reshape_6" -> "181 unsqueeze_2";
+"180 reshape_6" -> "182 unsqueeze_3";
+"181 unsqueeze_2" -> "183 sub";
+"182 unsqueeze_3" -> "183 sub";
+"183 sub" -> "184 ne";
+"183 sub" -> "185 masked_fill";
+"183 sub" -> "186 eq";
+"184 ne" -> "185 masked_fill";
+"185 masked_fill" -> "187 masked_fill_1";
+"186 eq" -> "187 masked_fill_1";
+"187 masked_fill_1" -> "189 unsqueeze_4";
+"188 view_8" -> "191 add_4";
+"189 unsqueeze_4" -> "190 unsqueeze_5";
+"190 unsqueeze_5" -> "191 add_4";
+"191 add_4" -> "192 view_9";
+"192 view_9" -> "193 softmax_1";
+"193 softmax_1" -> "194 dropout_4";
+"194 dropout_4" -> "195 matmul_3";
+"195 matmul_3" -> "196 transpose_3";
+"196 transpose_3" -> "197 reshape_7";
+"197 reshape_7" -> "200 linear_9";
+"198 _param_constant26" -> "200 linear_9";
+"199 _param_constant27" -> "200 linear_9";
+"200 linear_9" -> "201 dropout_5";
+"201 dropout_5" -> "202 view_10";
+"202 view_10" -> "203 permute_9";
+"203 permute_9" -> "204 reshape_8";
+"204 reshape_8" -> "205 roll_1";
+"205 roll_1" -> "206 slice_23";
+"206 slice_23" -> "207 slice_24";
+"207 slice_24" -> "210 layer_norm_3";
+"208 _param_constant28" -> "210 layer_norm_3";
+"209 _param_constant29" -> "210 layer_norm_3";
+"210 layer_norm_3" -> "211 add_5";
+"211 add_5" -> "214 linear_10";
+"211 add_5" -> "224 add_6";
+"212 _param_constant30" -> "214 linear_10";
+"213 _param_constant31" -> "214 linear_10";
+"214 linear_10" -> "215 gelu_1";
+"215 gelu_1" -> "216 dropout_6";
+"216 dropout_6" -> "219 linear_11";
+"217 _param_constant32" -> "219 linear_11";
+"218 _param_constant33" -> "219 linear_11";
+"219 linear_11" -> "220 dropout_7";
+"220 dropout_7" -> "223 layer_norm_4";
+"221 _param_constant34" -> "223 layer_norm_4";
+"222 _param_constant35" -> "223 layer_norm_4";
+"223 layer_norm_4" -> "224 add_6";
+"224 add_6" -> "225 pad_2";
+"225 pad_2" -> "226 slice_25";
+"225 pad_2" -> "229 slice_28";
+"225 pad_2" -> "232 slice_31";
+"225 pad_2" -> "235 slice_34";
+"226 slice_25" -> "227 slice_26";
+"227 slice_26" -> "228 slice_27";
+"228 slice_27" -> "238 cat";
+"229 slice_28" -> "230 slice_29";
+"230 slice_29" -> "231 slice_30";
+"231 slice_30" -> "238 cat";
+"232 slice_31" -> "233 slice_32";
+"233 slice_32" -> "234 slice_33";
+"234 slice_33" -> "238 cat";
+"235 slice_34" -> "236 slice_35";
+"236 slice_35" -> "237 slice_36";
+"237 slice_36" -> "238 cat";
+"238 cat" -> "240 linear_12";
+"239 _param_constant36" -> "240 linear_12";
+"240 linear_12" -> "243 layer_norm_5";
+"241 _param_constant37" -> "243 layer_norm_5";
+"242 _param_constant38" -> "243 layer_norm_5";
+"243 layer_norm_5" -> "260 pad_3";
+"243 layer_norm_5" -> "310 add_8";
+"244 _tensor_constant13" -> "247 linear_13";
+"245 _param_constant39" -> "247 linear_13";
+"246 _param_constant40" -> "247 linear_13";
+"247 linear_13" -> "248 relu__2";
+"248 relu__2" -> "250 linear_14";
+"249 _param_constant41" -> "250 linear_14";
+"250 linear_14" -> "251 view_11";
+"251 view_11" -> "253 index_2";
+"252 _tensor_constant14" -> "253 index_2";
+"253 index_2" -> "254 view_12";
+"254 view_12" -> "255 permute_10";
+"255 permute_10" -> "256 contiguous_2";
+"256 contiguous_2" -> "257 unsqueeze_6";
+"257 unsqueeze_6" -> "258 sigmoid_2";
+"258 sigmoid_2" -> "259 mul_4";
+"259 mul_4" -> "289 add_7";
+"260 pad_3" -> "261 view_13";
+"261 view_13" -> "262 permute_11";
+"262 permute_11" -> "263 reshape_9";
+"263 reshape_9" -> "269 linear_15";
+"264 _param_constant42" -> "265 clone_2";
+"265 clone_2" -> "266 slice_37";
+"265 clone_2" -> "269 linear_15";
+"266 slice_37" -> "267 zero__2";
+"268 _param_constant43" -> "269 linear_15";
+"269 linear_15" -> "270 reshape_10";
+"270 reshape_10" -> "271 permute_12";
+"271 permute_12" -> "272 select_6";
+"271 permute_12" -> "273 select_7";
+"271 permute_12" -> "274 select_8";
+"272 select_6" -> "275 linalg_vector_norm_4";
+"272 select_6" -> "277 expand_as_4";
+"272 select_6" -> "278 div_4";
+"273 select_7" -> "279 linalg_vector_norm_5";
+"273 select_7" -> "281 expand_as_5";
+"273 select_7" -> "282 div_5";
+"274 select_8" -> "292 matmul_5";
+"275 linalg_vector_norm_4" -> "276 clamp_min_4";
+"276 clamp_min_4" -> "277 expand_as_4";
+"277 expand_as_4" -> "278 div_4";
+"278 div_4" -> "284 matmul_4";
+"279 linalg_vector_norm_5" -> "280 clamp_min_5";
+"280 clamp_min_5" -> "281 expand_as_5";
+"281 expand_as_5" -> "282 div_5";
+"282 div_5" -> "283 transpose_4";
+"283 transpose_4" -> "284 matmul_4";
+"284 matmul_4" -> "288 mul_5";
+"285 _param_constant44" -> "286 clamp_2";
+"286 clamp_2" -> "287 exp_2";
+"287 exp_2" -> "288 mul_5";
+"288 mul_5" -> "289 add_7";
+"289 add_7" -> "290 softmax_2";
+"290 softmax_2" -> "291 dropout_8";
+"291 dropout_8" -> "292 matmul_5";
+"292 matmul_5" -> "293 transpose_5";
+"293 transpose_5" -> "294 reshape_11";
+"294 reshape_11" -> "297 linear_16";
+"295 _param_constant45" -> "297 linear_16";
+"296 _param_constant46" -> "297 linear_16";
+"297 linear_16" -> "298 dropout_9";
+"298 dropout_9" -> "299 view_14";
+"299 view_14" -> "300 permute_13";
+"300 permute_13" -> "301 reshape_12";
+"301 reshape_12" -> "302 slice_38";
+"302 slice_38" -> "303 slice_39";
+"303 slice_39" -> "304 slice_40";
+"304 slice_40" -> "305 slice_41";
+"305 slice_41" -> "306 contiguous_3";
+"306 contiguous_3" -> "309 layer_norm_6";
+"307 _param_constant47" -> "309 layer_norm_6";
+"308 _param_constant48" -> "309 layer_norm_6";
+"309 layer_norm_6" -> "310 add_8";
+"310 add_8" -> "313 linear_17";
+"310 add_8" -> "323 add_9";
+"311 _param_constant49" -> "313 linear_17";
+"312 _param_constant50" -> "313 linear_17";
+"313 linear_17" -> "314 gelu_2";
+"314 gelu_2" -> "315 dropout_10";
+"315 dropout_10" -> "318 linear_18";
+"316 _param_constant51" -> "318 linear_18";
+"317 _param_constant52" -> "318 linear_18";
+"318 linear_18" -> "319 dropout_11";
+"319 dropout_11" -> "322 layer_norm_7";
+"320 _param_constant53" -> "322 layer_norm_7";
+"321 _param_constant54" -> "322 layer_norm_7";
+"322 layer_norm_7" -> "323 add_9";
+"323 add_9" -> "340 pad_4";
+"323 add_9" -> "453 add_12";
+"324 _tensor_constant15" -> "327 linear_19";
+"325 _param_constant55" -> "327 linear_19";
+"326 _param_constant56" -> "327 linear_19";
+"327 linear_19" -> "328 relu__3";
+"328 relu__3" -> "330 linear_20";
+"329 _param_constant57" -> "330 linear_20";
+"330 linear_20" -> "331 view_15";
+"331 view_15" -> "333 index_3";
+"332 _tensor_constant16" -> "333 index_3";
+"333 index_3" -> "334 view_16";
+"334 view_16" -> "335 permute_14";
+"335 permute_14" -> "336 contiguous_4";
+"336 contiguous_4" -> "337 unsqueeze_7";
+"337 unsqueeze_7" -> "338 sigmoid_3";
+"338 sigmoid_3" -> "339 mul_6";
+"339 mul_6" -> "370 add_10";
+"340 pad_4" -> "341 roll_2";
+"341 roll_2" -> "342 view_17";
+"342 view_17" -> "343 permute_15";
+"343 permute_15" -> "344 reshape_13";
+"344 reshape_13" -> "350 linear_21";
+"344 reshape_13" -> "371 new_zeros_1";
+"345 _param_constant58" -> "346 clone_3";
+"346 clone_3" -> "347 slice_42";
+"346 clone_3" -> "350 linear_21";
+"347 slice_42" -> "348 zero__3";
+"349 _param_constant59" -> "350 linear_21";
+"350 linear_21" -> "351 reshape_14";
+"351 reshape_14" -> "352 permute_16";
+"352 permute_16" -> "353 select_9";
+"352 permute_16" -> "354 select_10";
+"352 permute_16" -> "355 select_11";
+"353 select_9" -> "356 linalg_vector_norm_6";
+"353 select_9" -> "358 expand_as_6";
+"353 select_9" -> "359 div_6";
+"354 select_10" -> "360 linalg_vector_norm_7";
+"354 select_10" -> "362 expand_as_7";
+"354 select_10" -> "363 div_7";
+"355 select_11" -> "434 matmul_7";
+"356 linalg_vector_norm_6" -> "357 clamp_min_6";
+"357 clamp_min_6" -> "358 expand_as_6";
+"358 expand_as_6" -> "359 div_6";
+"359 div_6" -> "365 matmul_6";
+"360 linalg_vector_norm_7" -> "361 clamp_min_7";
+"361 clamp_min_7" -> "362 expand_as_7";
+"362 expand_as_7" -> "363 div_7";
+"363 div_7" -> "364 transpose_6";
+"364 transpose_6" -> "365 matmul_6";
+"365 matmul_6" -> "369 mul_7";
+"366 _param_constant60" -> "367 clamp_3";
+"367 clamp_3" -> "368 exp_3";
+"368 exp_3" -> "369 mul_7";
+"369 mul_7" -> "370 add_10";
+"370 add_10" -> "427 view_19";
+"371 new_zeros_1" -> "374 slice_43";
+"371 new_zeros_1" -> "379 slice_45";
+"371 new_zeros_1" -> "384 slice_47";
+"371 new_zeros_1" -> "389 slice_49";
+"371 new_zeros_1" -> "394 slice_51";
+"371 new_zeros_1" -> "399 slice_53";
+"371 new_zeros_1" -> "404 slice_55";
+"371 new_zeros_1" -> "409 slice_57";
+"371 new_zeros_1" -> "414 slice_59";
+"371 new_zeros_1" -> "417 view_18";
+"372 _tensor_constant17" -> "373 lift_fresh_copy_9";
+"373 lift_fresh_copy_9" -> "376 fill__9";
+"374 slice_43" -> "375 slice_44";
+"375 slice_44" -> "376 fill__9";
+"377 _tensor_constant18" -> "378 lift_fresh_copy_10";
+"378 lift_fresh_copy_10" -> "381 fill__10";
+"379 slice_45" -> "380 slice_46";
+"380 slice_46" -> "381 fill__10";
+"382 _tensor_constant19" -> "383 lift_fresh_copy_11";
+"383 lift_fresh_copy_11" -> "386 fill__11";
+"384 slice_47" -> "385 slice_48";
+"385 slice_48" -> "386 fill__11";
+"387 _tensor_constant20" -> "388 lift_fresh_copy_12";
+"388 lift_fresh_copy_12" -> "391 fill__12";
+"389 slice_49" -> "390 slice_50";
+"390 slice_50" -> "391 fill__12";
+"392 _tensor_constant21" -> "393 lift_fresh_copy_13";
+"393 lift_fresh_copy_13" -> "396 fill__13";
+"394 slice_51" -> "395 slice_52";
+"395 slice_52" -> "396 fill__13";
+"397 _tensor_constant22" -> "398 lift_fresh_copy_14";
+"398 lift_fresh_copy_14" -> "401 fill__14";
+"399 slice_53" -> "400 slice_54";
+"400 slice_54" -> "401 fill__14";
+"402 _tensor_constant23" -> "403 lift_fresh_copy_15";
+"403 lift_fresh_copy_15" -> "406 fill__15";
+"404 slice_55" -> "405 slice_56";
+"405 slice_56" -> "406 fill__15";
+"407 _tensor_constant24" -> "408 lift_fresh_copy_16";
+"408 lift_fresh_copy_16" -> "411 fill__16";
+"409 slice_57" -> "410 slice_58";
+"410 slice_58" -> "411 fill__16";
+"412 _tensor_constant25" -> "413 lift_fresh_copy_17";
+"413 lift_fresh_copy_17" -> "416 fill__17";
+"414 slice_59" -> "415 slice_60";
+"415 slice_60" -> "416 fill__17";
+"417 view_18" -> "418 permute_17";
+"418 permute_17" -> "419 reshape_15";
+"419 reshape_15" -> "420 unsqueeze_8";
+"419 reshape_15" -> "421 unsqueeze_9";
+"420 unsqueeze_8" -> "422 sub_1";
+"421 unsqueeze_9" -> "422 sub_1";
+"422 sub_1" -> "423 ne_1";
+"422 sub_1" -> "424 masked_fill_2";
+"422 sub_1" -> "425 eq_1";
+"423 ne_1" -> "424 masked_fill_2";
+"424 masked_fill_2" -> "426 masked_fill_3";
+"425 eq_1" -> "426 masked_fill_3";
+"426 masked_fill_3" -> "428 unsqueeze_10";
+"427 view_19" -> "430 add_11";
+"428 unsqueeze_10" -> "429 unsqueeze_11";
+"429 unsqueeze_11" -> "430 add_11";
+"430 add_11" -> "431 view_20";
+"431 view_20" -> "432 softmax_3";
+"432 softmax_3" -> "433 dropout_12";
+"433 dropout_12" -> "434 matmul_7";
+"434 matmul_7" -> "435 transpose_7";
+"435 transpose_7" -> "436 reshape_16";
+"436 reshape_16" -> "439 linear_22";
+"437 _param_constant61" -> "439 linear_22";
+"438 _param_constant62" -> "439 linear_22";
+"439 linear_22" -> "440 dropout_13";
+"440 dropout_13" -> "441 view_21";
+"441 view_21" -> "442 permute_18";
+"442 permute_18" -> "443 reshape_17";
+"443 reshape_17" -> "444 roll_3";
+"444 roll_3" -> "445 slice_61";
+"445 slice_61" -> "446 slice_62";
+"446 slice_62" -> "447 slice_63";
+"447 slice_63" -> "448 slice_64";
+"448 slice_64" -> "449 contiguous_5";
+"449 contiguous_5" -> "452 layer_norm_8";
+"450 _param_constant63" -> "452 layer_norm_8";
+"451 _param_constant64" -> "452 layer_norm_8";
+"452 layer_norm_8" -> "453 add_12";
+"453 add_12" -> "456 linear_23";
+"453 add_12" -> "466 add_13";
+"454 _param_constant65" -> "456 linear_23";
+"455 _param_constant66" -> "456 linear_23";
+"456 linear_23" -> "457 gelu_3";
+"457 gelu_3" -> "458 dropout_14";
+"458 dropout_14" -> "461 linear_24";
+"459 _param_constant67" -> "461 linear_24";
+"460 _param_constant68" -> "461 linear_24";
+"461 linear_24" -> "462 dropout_15";
+"462 dropout_15" -> "465 layer_norm_9";
+"463 _param_constant69" -> "465 layer_norm_9";
+"464 _param_constant70" -> "465 layer_norm_9";
+"465 layer_norm_9" -> "466 add_13";
+"466 add_13" -> "467 pad_5";
+"467 pad_5" -> "468 slice_65";
+"467 pad_5" -> "471 slice_68";
+"467 pad_5" -> "474 slice_71";
+"467 pad_5" -> "477 slice_74";
+"468 slice_65" -> "469 slice_66";
+"469 slice_66" -> "470 slice_67";
+"470 slice_67" -> "480 cat_1";
+"471 slice_68" -> "472 slice_69";
+"472 slice_69" -> "473 slice_70";
+"473 slice_70" -> "480 cat_1";
+"474 slice_71" -> "475 slice_72";
+"475 slice_72" -> "476 slice_73";
+"476 slice_73" -> "480 cat_1";
+"477 slice_74" -> "478 slice_75";
+"478 slice_75" -> "479 slice_76";
+"479 slice_76" -> "480 cat_1";
+"480 cat_1" -> "482 linear_25";
+"481 _param_constant71" -> "482 linear_25";
+"482 linear_25" -> "485 layer_norm_10";
+"483 _param_constant72" -> "485 layer_norm_10";
+"484 _param_constant73" -> "485 layer_norm_10";
+"485 layer_norm_10" -> "502 pad_6";
+"485 layer_norm_10" -> "552 add_15";
+"486 _tensor_constant26" -> "489 linear_26";
+"487 _param_constant74" -> "489 linear_26";
+"488 _param_constant75" -> "489 linear_26";
+"489 linear_26" -> "490 relu__4";
+"490 relu__4" -> "492 linear_27";
+"491 _param_constant76" -> "492 linear_27";
+"492 linear_27" -> "493 view_22";
+"493 view_22" -> "495 index_4";
+"494 _tensor_constant27" -> "495 index_4";
+"495 index_4" -> "496 view_23";
+"496 view_23" -> "497 permute_19";
+"497 permute_19" -> "498 contiguous_6";
+"498 contiguous_6" -> "499 unsqueeze_12";
+"499 unsqueeze_12" -> "500 sigmoid_4";
+"500 sigmoid_4" -> "501 mul_8";
+"501 mul_8" -> "531 add_14";
+"502 pad_6" -> "503 view_24";
+"503 view_24" -> "504 permute_20";
+"504 permute_20" -> "505 reshape_18";
+"505 reshape_18" -> "511 linear_28";
+"506 _param_constant77" -> "507 clone_4";
+"507 clone_4" -> "508 slice_77";
+"507 clone_4" -> "511 linear_28";
+"508 slice_77" -> "509 zero__4";
+"510 _param_constant78" -> "511 linear_28";
+"511 linear_28" -> "512 reshape_19";
+"512 reshape_19" -> "513 permute_21";
+"513 permute_21" -> "514 select_12";
+"513 permute_21" -> "515 select_13";
+"513 permute_21" -> "516 select_14";
+"514 select_12" -> "517 linalg_vector_norm_8";
+"514 select_12" -> "519 expand_as_8";
+"514 select_12" -> "520 div_8";
+"515 select_13" -> "521 linalg_vector_norm_9";
+"515 select_13" -> "523 expand_as_9";
+"515 select_13" -> "524 div_9";
+"516 select_14" -> "534 matmul_9";
+"517 linalg_vector_norm_8" -> "518 clamp_min_8";
+"518 clamp_min_8" -> "519 expand_as_8";
+"519 expand_as_8" -> "520 div_8";
+"520 div_8" -> "526 matmul_8";
+"521 linalg_vector_norm_9" -> "522 clamp_min_9";
+"522 clamp_min_9" -> "523 expand_as_9";
+"523 expand_as_9" -> "524 div_9";
+"524 div_9" -> "525 transpose_8";
+"525 transpose_8" -> "526 matmul_8";
+"526 matmul_8" -> "530 mul_9";
+"527 _param_constant79" -> "528 clamp_4";
+"528 clamp_4" -> "529 exp_4";
+"529 exp_4" -> "530 mul_9";
+"530 mul_9" -> "531 add_14";
+"531 add_14" -> "532 softmax_4";
+"532 softmax_4" -> "533 dropout_16";
+"533 dropout_16" -> "534 matmul_9";
+"534 matmul_9" -> "535 transpose_9";
+"535 transpose_9" -> "536 reshape_20";
+"536 reshape_20" -> "539 linear_29";
+"537 _param_constant80" -> "539 linear_29";
+"538 _param_constant81" -> "539 linear_29";
+"539 linear_29" -> "540 dropout_17";
+"540 dropout_17" -> "541 view_25";
+"541 view_25" -> "542 permute_22";
+"542 permute_22" -> "543 reshape_21";
+"543 reshape_21" -> "544 slice_78";
+"544 slice_78" -> "545 slice_79";
+"545 slice_79" -> "546 slice_80";
+"546 slice_80" -> "547 slice_81";
+"547 slice_81" -> "548 contiguous_7";
+"548 contiguous_7" -> "551 layer_norm_11";
+"549 _param_constant82" -> "551 layer_norm_11";
+"550 _param_constant83" -> "551 layer_norm_11";
+"551 layer_norm_11" -> "552 add_15";
+"552 add_15" -> "555 linear_30";
+"552 add_15" -> "565 add_16";
+"553 _param_constant84" -> "555 linear_30";
+"554 _param_constant85" -> "555 linear_30";
+"555 linear_30" -> "556 gelu_4";
+"556 gelu_4" -> "557 dropout_18";
+"557 dropout_18" -> "560 linear_31";
+"558 _param_constant86" -> "560 linear_31";
+"559 _param_constant87" -> "560 linear_31";
+"560 linear_31" -> "561 dropout_19";
+"561 dropout_19" -> "564 layer_norm_12";
+"562 _param_constant88" -> "564 layer_norm_12";
+"563 _param_constant89" -> "564 layer_norm_12";
+"564 layer_norm_12" -> "565 add_16";
+"565 add_16" -> "582 pad_7";
+"565 add_16" -> "695 add_19";
+"566 _tensor_constant28" -> "569 linear_32";
+"567 _param_constant90" -> "569 linear_32";
+"568 _param_constant91" -> "569 linear_32";
+"569 linear_32" -> "570 relu__5";
+"570 relu__5" -> "572 linear_33";
+"571 _param_constant92" -> "572 linear_33";
+"572 linear_33" -> "573 view_26";
+"573 view_26" -> "575 index_5";
+"574 _tensor_constant29" -> "575 index_5";
+"575 index_5" -> "576 view_27";
+"576 view_27" -> "577 permute_23";
+"577 permute_23" -> "578 contiguous_8";
+"578 contiguous_8" -> "579 unsqueeze_13";
+"579 unsqueeze_13" -> "580 sigmoid_5";
+"580 sigmoid_5" -> "581 mul_10";
+"581 mul_10" -> "612 add_17";
+"582 pad_7" -> "583 roll_4";
+"583 roll_4" -> "584 view_28";
+"584 view_28" -> "585 permute_24";
+"585 permute_24" -> "586 reshape_22";
+"586 reshape_22" -> "592 linear_34";
+"586 reshape_22" -> "613 new_zeros_2";
+"587 _param_constant93" -> "588 clone_5";
+"588 clone_5" -> "589 slice_82";
+"588 clone_5" -> "592 linear_34";
+"589 slice_82" -> "590 zero__5";
+"591 _param_constant94" -> "592 linear_34";
+"592 linear_34" -> "593 reshape_23";
+"593 reshape_23" -> "594 permute_25";
+"594 permute_25" -> "595 select_15";
+"594 permute_25" -> "596 select_16";
+"594 permute_25" -> "597 select_17";
+"595 select_15" -> "598 linalg_vector_norm_10";
+"595 select_15" -> "600 expand_as_10";
+"595 select_15" -> "601 div_10";
+"596 select_16" -> "602 linalg_vector_norm_11";
+"596 select_16" -> "604 expand_as_11";
+"596 select_16" -> "605 div_11";
+"597 select_17" -> "676 matmul_11";
+"598 linalg_vector_norm_10" -> "599 clamp_min_10";
+"599 clamp_min_10" -> "600 expand_as_10";
+"600 expand_as_10" -> "601 div_10";
+"601 div_10" -> "607 matmul_10";
+"602 linalg_vector_norm_11" -> "603 clamp_min_11";
+"603 clamp_min_11" -> "604 expand_as_11";
+"604 expand_as_11" -> "605 div_11";
+"605 div_11" -> "606 transpose_10";
+"606 transpose_10" -> "607 matmul_10";
+"607 matmul_10" -> "611 mul_11";
+"608 _param_constant95" -> "609 clamp_5";
+"609 clamp_5" -> "610 exp_5";
+"610 exp_5" -> "611 mul_11";
+"611 mul_11" -> "612 add_17";
+"612 add_17" -> "669 view_30";
+"613 new_zeros_2" -> "616 slice_83";
+"613 new_zeros_2" -> "621 slice_85";
+"613 new_zeros_2" -> "626 slice_87";
+"613 new_zeros_2" -> "631 slice_89";
+"613 new_zeros_2" -> "636 slice_91";
+"613 new_zeros_2" -> "641 slice_93";
+"613 new_zeros_2" -> "646 slice_95";
+"613 new_zeros_2" -> "651 slice_97";
+"613 new_zeros_2" -> "656 slice_99";
+"613 new_zeros_2" -> "659 view_29";
+"614 _tensor_constant30" -> "615 lift_fresh_copy_18";
+"615 lift_fresh_copy_18" -> "618 fill__18";
+"616 slice_83" -> "617 slice_84";
+"617 slice_84" -> "618 fill__18";
+"619 _tensor_constant31" -> "620 lift_fresh_copy_19";
+"620 lift_fresh_copy_19" -> "623 fill__19";
+"621 slice_85" -> "622 slice_86";
+"622 slice_86" -> "623 fill__19";
+"624 _tensor_constant32" -> "625 lift_fresh_copy_20";
+"625 lift_fresh_copy_20" -> "628 fill__20";
+"626 slice_87" -> "627 slice_88";
+"627 slice_88" -> "628 fill__20";
+"629 _tensor_constant33" -> "630 lift_fresh_copy_21";
+"630 lift_fresh_copy_21" -> "633 fill__21";
+"631 slice_89" -> "632 slice_90";
+"632 slice_90" -> "633 fill__21";
+"634 _tensor_constant34" -> "635 lift_fresh_copy_22";
+"635 lift_fresh_copy_22" -> "638 fill__22";
+"636 slice_91" -> "637 slice_92";
+"637 slice_92" -> "638 fill__22";
+"639 _tensor_constant35" -> "640 lift_fresh_copy_23";
+"640 lift_fresh_copy_23" -> "643 fill__23";
+"641 slice_93" -> "642 slice_94";
+"642 slice_94" -> "643 fill__23";
+"644 _tensor_constant36" -> "645 lift_fresh_copy_24";
+"645 lift_fresh_copy_24" -> "648 fill__24";
+"646 slice_95" -> "647 slice_96";
+"647 slice_96" -> "648 fill__24";
+"649 _tensor_constant37" -> "650 lift_fresh_copy_25";
+"650 lift_fresh_copy_25" -> "653 fill__25";
+"651 slice_97" -> "652 slice_98";
+"652 slice_98" -> "653 fill__25";
+"654 _tensor_constant38" -> "655 lift_fresh_copy_26";
+"655 lift_fresh_copy_26" -> "658 fill__26";
+"656 slice_99" -> "657 slice_100";
+"657 slice_100" -> "658 fill__26";
+"659 view_29" -> "660 permute_26";
+"660 permute_26" -> "661 reshape_24";
+"661 reshape_24" -> "662 unsqueeze_14";
+"661 reshape_24" -> "663 unsqueeze_15";
+"662 unsqueeze_14" -> "664 sub_2";
+"663 unsqueeze_15" -> "664 sub_2";
+"664 sub_2" -> "665 ne_2";
+"664 sub_2" -> "666 masked_fill_4";
+"664 sub_2" -> "667 eq_2";
+"665 ne_2" -> "666 masked_fill_4";
+"666 masked_fill_4" -> "668 masked_fill_5";
+"667 eq_2" -> "668 masked_fill_5";
+"668 masked_fill_5" -> "670 unsqueeze_16";
+"669 view_30" -> "672 add_18";
+"670 unsqueeze_16" -> "671 unsqueeze_17";
+"671 unsqueeze_17" -> "672 add_18";
+"672 add_18" -> "673 view_31";
+"673 view_31" -> "674 softmax_5";
+"674 softmax_5" -> "675 dropout_20";
+"675 dropout_20" -> "676 matmul_11";
+"676 matmul_11" -> "677 transpose_11";
+"677 transpose_11" -> "678 reshape_25";
+"678 reshape_25" -> "681 linear_35";
+"679 _param_constant96" -> "681 linear_35";
+"680 _param_constant97" -> "681 linear_35";
+"681 linear_35" -> "682 dropout_21";
+"682 dropout_21" -> "683 view_32";
+"683 view_32" -> "684 permute_27";
+"684 permute_27" -> "685 reshape_26";
+"685 reshape_26" -> "686 roll_5";
+"686 roll_5" -> "687 slice_101";
+"687 slice_101" -> "688 slice_102";
+"688 slice_102" -> "689 slice_103";
+"689 slice_103" -> "690 slice_104";
+"690 slice_104" -> "691 contiguous_9";
+"691 contiguous_9" -> "694 layer_norm_13";
+"692 _param_constant98" -> "694 layer_norm_13";
+"693 _param_constant99" -> "694 layer_norm_13";
+"694 layer_norm_13" -> "695 add_19";
+"695 add_19" -> "698 linear_36";
+"695 add_19" -> "708 add_20";
+"696 _param_constant100" -> "698 linear_36";
+"697 _param_constant101" -> "698 linear_36";
+"698 linear_36" -> "699 gelu_5";
+"699 gelu_5" -> "700 dropout_22";
+"700 dropout_22" -> "703 linear_37";
+"701 _param_constant102" -> "703 linear_37";
+"702 _param_constant103" -> "703 linear_37";
+"703 linear_37" -> "704 dropout_23";
+"704 dropout_23" -> "707 layer_norm_14";
+"705 _param_constant104" -> "707 layer_norm_14";
+"706 _param_constant105" -> "707 layer_norm_14";
+"707 layer_norm_14" -> "708 add_20";
+"708 add_20" -> "725 pad_8";
+"708 add_20" -> "775 add_22";
+"709 _tensor_constant39" -> "712 linear_38";
+"710 _param_constant106" -> "712 linear_38";
+"711 _param_constant107" -> "712 linear_38";
+"712 linear_38" -> "713 relu__6";
+"713 relu__6" -> "715 linear_39";
+"714 _param_constant108" -> "715 linear_39";
+"715 linear_39" -> "716 view_33";
+"716 view_33" -> "718 index_6";
+"717 _tensor_constant40" -> "718 index_6";
+"718 index_6" -> "719 view_34";
+"719 view_34" -> "720 permute_28";
+"720 permute_28" -> "721 contiguous_10";
+"721 contiguous_10" -> "722 unsqueeze_18";
+"722 unsqueeze_18" -> "723 sigmoid_6";
+"723 sigmoid_6" -> "724 mul_12";
+"724 mul_12" -> "754 add_21";
+"725 pad_8" -> "726 view_35";
+"726 view_35" -> "727 permute_29";
+"727 permute_29" -> "728 reshape_27";
+"728 reshape_27" -> "734 linear_40";
+"729 _param_constant109" -> "730 clone_6";
+"730 clone_6" -> "731 slice_105";
+"730 clone_6" -> "734 linear_40";
+"731 slice_105" -> "732 zero__6";
+"733 _param_constant110" -> "734 linear_40";
+"734 linear_40" -> "735 reshape_28";
+"735 reshape_28" -> "736 permute_30";
+"736 permute_30" -> "737 select_18";
+"736 permute_30" -> "738 select_19";
+"736 permute_30" -> "739 select_20";
+"737 select_18" -> "740 linalg_vector_norm_12";
+"737 select_18" -> "742 expand_as_12";
+"737 select_18" -> "743 div_12";
+"738 select_19" -> "744 linalg_vector_norm_13";
+"738 select_19" -> "746 expand_as_13";
+"738 select_19" -> "747 div_13";
+"739 select_20" -> "757 matmul_13";
+"740 linalg_vector_norm_12" -> "741 clamp_min_12";
+"741 clamp_min_12" -> "742 expand_as_12";
+"742 expand_as_12" -> "743 div_12";
+"743 div_12" -> "749 matmul_12";
+"744 linalg_vector_norm_13" -> "745 clamp_min_13";
+"745 clamp_min_13" -> "746 expand_as_13";
+"746 expand_as_13" -> "747 div_13";
+"747 div_13" -> "748 transpose_12";
+"748 transpose_12" -> "749 matmul_12";
+"749 matmul_12" -> "753 mul_13";
+"750 _param_constant111" -> "751 clamp_6";
+"751 clamp_6" -> "752 exp_6";
+"752 exp_6" -> "753 mul_13";
+"753 mul_13" -> "754 add_21";
+"754 add_21" -> "755 softmax_6";
+"755 softmax_6" -> "756 dropout_24";
+"756 dropout_24" -> "757 matmul_13";
+"757 matmul_13" -> "758 transpose_13";
+"758 transpose_13" -> "759 reshape_29";
+"759 reshape_29" -> "762 linear_41";
+"760 _param_constant112" -> "762 linear_41";
+"761 _param_constant113" -> "762 linear_41";
+"762 linear_41" -> "763 dropout_25";
+"763 dropout_25" -> "764 view_36";
+"764 view_36" -> "765 permute_31";
+"765 permute_31" -> "766 reshape_30";
+"766 reshape_30" -> "767 slice_106";
+"767 slice_106" -> "768 slice_107";
+"768 slice_107" -> "769 slice_108";
+"769 slice_108" -> "770 slice_109";
+"770 slice_109" -> "771 contiguous_11";
+"771 contiguous_11" -> "774 layer_norm_15";
+"772 _param_constant114" -> "774 layer_norm_15";
+"773 _param_constant115" -> "774 layer_norm_15";
+"774 layer_norm_15" -> "775 add_22";
+"775 add_22" -> "778 linear_42";
+"775 add_22" -> "788 add_23";
+"776 _param_constant116" -> "778 linear_42";
+"777 _param_constant117" -> "778 linear_42";
+"778 linear_42" -> "779 gelu_6";
+"779 gelu_6" -> "780 dropout_26";
+"780 dropout_26" -> "783 linear_43";
+"781 _param_constant118" -> "783 linear_43";
+"782 _param_constant119" -> "783 linear_43";
+"783 linear_43" -> "784 dropout_27";
+"784 dropout_27" -> "787 layer_norm_16";
+"785 _param_constant120" -> "787 layer_norm_16";
+"786 _param_constant121" -> "787 layer_norm_16";
+"787 layer_norm_16" -> "788 add_23";
+"788 add_23" -> "805 pad_9";
+"788 add_23" -> "918 add_26";
+"789 _tensor_constant41" -> "792 linear_44";
+"790 _param_constant122" -> "792 linear_44";
+"791 _param_constant123" -> "792 linear_44";
+"792 linear_44" -> "793 relu__7";
+"793 relu__7" -> "795 linear_45";
+"794 _param_constant124" -> "795 linear_45";
+"795 linear_45" -> "796 view_37";
+"796 view_37" -> "798 index_7";
+"797 _tensor_constant42" -> "798 index_7";
+"798 index_7" -> "799 view_38";
+"799 view_38" -> "800 permute_32";
+"800 permute_32" -> "801 contiguous_12";
+"801 contiguous_12" -> "802 unsqueeze_19";
+"802 unsqueeze_19" -> "803 sigmoid_7";
+"803 sigmoid_7" -> "804 mul_14";
+"804 mul_14" -> "835 add_24";
+"805 pad_9" -> "806 roll_6";
+"806 roll_6" -> "807 view_39";
+"807 view_39" -> "808 permute_33";
+"808 permute_33" -> "809 reshape_31";
+"809 reshape_31" -> "815 linear_46";
+"809 reshape_31" -> "836 new_zeros_3";
+"810 _param_constant125" -> "811 clone_7";
+"811 clone_7" -> "812 slice_110";
+"811 clone_7" -> "815 linear_46";
+"812 slice_110" -> "813 zero__7";
+"814 _param_constant126" -> "815 linear_46";
+"815 linear_46" -> "816 reshape_32";
+"816 reshape_32" -> "817 permute_34";
+"817 permute_34" -> "818 select_21";
+"817 permute_34" -> "819 select_22";
+"817 permute_34" -> "820 select_23";
+"818 select_21" -> "821 linalg_vector_norm_14";
+"818 select_21" -> "823 expand_as_14";
+"818 select_21" -> "824 div_14";
+"819 select_22" -> "825 linalg_vector_norm_15";
+"819 select_22" -> "827 expand_as_15";
+"819 select_22" -> "828 div_15";
+"820 select_23" -> "899 matmul_15";
+"821 linalg_vector_norm_14" -> "822 clamp_min_14";
+"822 clamp_min_14" -> "823 expand_as_14";
+"823 expand_as_14" -> "824 div_14";
+"824 div_14" -> "830 matmul_14";
+"825 linalg_vector_norm_15" -> "826 clamp_min_15";
+"826 clamp_min_15" -> "827 expand_as_15";
+"827 expand_as_15" -> "828 div_15";
+"828 div_15" -> "829 transpose_14";
+"829 transpose_14" -> "830 matmul_14";
+"830 matmul_14" -> "834 mul_15";
+"831 _param_constant127" -> "832 clamp_7";
+"832 clamp_7" -> "833 exp_7";
+"833 exp_7" -> "834 mul_15";
+"834 mul_15" -> "835 add_24";
+"835 add_24" -> "892 view_41";
+"836 new_zeros_3" -> "839 slice_111";
+"836 new_zeros_3" -> "844 slice_113";
+"836 new_zeros_3" -> "849 slice_115";
+"836 new_zeros_3" -> "854 slice_117";
+"836 new_zeros_3" -> "859 slice_119";
+"836 new_zeros_3" -> "864 slice_121";
+"836 new_zeros_3" -> "869 slice_123";
+"836 new_zeros_3" -> "874 slice_125";
+"836 new_zeros_3" -> "879 slice_127";
+"836 new_zeros_3" -> "882 view_40";
+"837 _tensor_constant43" -> "838 lift_fresh_copy_27";
+"838 lift_fresh_copy_27" -> "841 fill__27";
+"839 slice_111" -> "840 slice_112";
+"840 slice_112" -> "841 fill__27";
+"842 _tensor_constant44" -> "843 lift_fresh_copy_28";
+"843 lift_fresh_copy_28" -> "846 fill__28";
+"844 slice_113" -> "845 slice_114";
+"845 slice_114" -> "846 fill__28";
+"847 _tensor_constant45" -> "848 lift_fresh_copy_29";
+"848 lift_fresh_copy_29" -> "851 fill__29";
+"849 slice_115" -> "850 slice_116";
+"850 slice_116" -> "851 fill__29";
+"852 _tensor_constant46" -> "853 lift_fresh_copy_30";
+"853 lift_fresh_copy_30" -> "856 fill__30";
+"854 slice_117" -> "855 slice_118";
+"855 slice_118" -> "856 fill__30";
+"857 _tensor_constant47" -> "858 lift_fresh_copy_31";
+"858 lift_fresh_copy_31" -> "861 fill__31";
+"859 slice_119" -> "860 slice_120";
+"860 slice_120" -> "861 fill__31";
+"862 _tensor_constant48" -> "863 lift_fresh_copy_32";
+"863 lift_fresh_copy_32" -> "866 fill__32";
+"864 slice_121" -> "865 slice_122";
+"865 slice_122" -> "866 fill__32";
+"867 _tensor_constant49" -> "868 lift_fresh_copy_33";
+"868 lift_fresh_copy_33" -> "871 fill__33";
+"869 slice_123" -> "870 slice_124";
+"870 slice_124" -> "871 fill__33";
+"872 _tensor_constant50" -> "873 lift_fresh_copy_34";
+"873 lift_fresh_copy_34" -> "876 fill__34";
+"874 slice_125" -> "875 slice_126";
+"875 slice_126" -> "876 fill__34";
+"877 _tensor_constant51" -> "878 lift_fresh_copy_35";
+"878 lift_fresh_copy_35" -> "881 fill__35";
+"879 slice_127" -> "880 slice_128";
+"880 slice_128" -> "881 fill__35";
+"882 view_40" -> "883 permute_35";
+"883 permute_35" -> "884 reshape_33";
+"884 reshape_33" -> "885 unsqueeze_20";
+"884 reshape_33" -> "886 unsqueeze_21";
+"885 unsqueeze_20" -> "887 sub_3";
+"886 unsqueeze_21" -> "887 sub_3";
+"887 sub_3" -> "888 ne_3";
+"887 sub_3" -> "889 masked_fill_6";
+"887 sub_3" -> "890 eq_3";
+"888 ne_3" -> "889 masked_fill_6";
+"889 masked_fill_6" -> "891 masked_fill_7";
+"890 eq_3" -> "891 masked_fill_7";
+"891 masked_fill_7" -> "893 unsqueeze_22";
+"892 view_41" -> "895 add_25";
+"893 unsqueeze_22" -> "894 unsqueeze_23";
+"894 unsqueeze_23" -> "895 add_25";
+"895 add_25" -> "896 view_42";
+"896 view_42" -> "897 softmax_7";
+"897 softmax_7" -> "898 dropout_28";
+"898 dropout_28" -> "899 matmul_15";
+"899 matmul_15" -> "900 transpose_15";
+"900 transpose_15" -> "901 reshape_34";
+"901 reshape_34" -> "904 linear_47";
+"902 _param_constant128" -> "904 linear_47";
+"903 _param_constant129" -> "904 linear_47";
+"904 linear_47" -> "905 dropout_29";
+"905 dropout_29" -> "906 view_43";
+"906 view_43" -> "907 permute_36";
+"907 permute_36" -> "908 reshape_35";
+"908 reshape_35" -> "909 roll_7";
+"909 roll_7" -> "910 slice_129";
+"910 slice_129" -> "911 slice_130";
+"911 slice_130" -> "912 slice_131";
+"912 slice_131" -> "913 slice_132";
+"913 slice_132" -> "914 contiguous_13";
+"914 contiguous_13" -> "917 layer_norm_17";
+"915 _param_constant130" -> "917 layer_norm_17";
+"916 _param_constant131" -> "917 layer_norm_17";
+"917 layer_norm_17" -> "918 add_26";
+"918 add_26" -> "921 linear_48";
+"918 add_26" -> "931 add_27";
+"919 _param_constant132" -> "921 linear_48";
+"920 _param_constant133" -> "921 linear_48";
+"921 linear_48" -> "922 gelu_7";
+"922 gelu_7" -> "923 dropout_30";
+"923 dropout_30" -> "926 linear_49";
+"924 _param_constant134" -> "926 linear_49";
+"925 _param_constant135" -> "926 linear_49";
+"926 linear_49" -> "927 dropout_31";
+"927 dropout_31" -> "930 layer_norm_18";
+"928 _param_constant136" -> "930 layer_norm_18";
+"929 _param_constant137" -> "930 layer_norm_18";
+"930 layer_norm_18" -> "931 add_27";
+"931 add_27" -> "948 pad_10";
+"931 add_27" -> "998 add_29";
+"932 _tensor_constant52" -> "935 linear_50";
+"933 _param_constant138" -> "935 linear_50";
+"934 _param_constant139" -> "935 linear_50";
+"935 linear_50" -> "936 relu__8";
+"936 relu__8" -> "938 linear_51";
+"937 _param_constant140" -> "938 linear_51";
+"938 linear_51" -> "939 view_44";
+"939 view_44" -> "941 index_8";
+"940 _tensor_constant53" -> "941 index_8";
+"941 index_8" -> "942 view_45";
+"942 view_45" -> "943 permute_37";
+"943 permute_37" -> "944 contiguous_14";
+"944 contiguous_14" -> "945 unsqueeze_24";
+"945 unsqueeze_24" -> "946 sigmoid_8";
+"946 sigmoid_8" -> "947 mul_16";
+"947 mul_16" -> "977 add_28";
+"948 pad_10" -> "949 view_46";
+"949 view_46" -> "950 permute_38";
+"950 permute_38" -> "951 reshape_36";
+"951 reshape_36" -> "957 linear_52";
+"952 _param_constant141" -> "953 clone_8";
+"953 clone_8" -> "954 slice_133";
+"953 clone_8" -> "957 linear_52";
+"954 slice_133" -> "955 zero__8";
+"956 _param_constant142" -> "957 linear_52";
+"957 linear_52" -> "958 reshape_37";
+"958 reshape_37" -> "959 permute_39";
+"959 permute_39" -> "960 select_24";
+"959 permute_39" -> "961 select_25";
+"959 permute_39" -> "962 select_26";
+"960 select_24" -> "963 linalg_vector_norm_16";
+"960 select_24" -> "965 expand_as_16";
+"960 select_24" -> "966 div_16";
+"961 select_25" -> "967 linalg_vector_norm_17";
+"961 select_25" -> "969 expand_as_17";
+"961 select_25" -> "970 div_17";
+"962 select_26" -> "980 matmul_17";
+"963 linalg_vector_norm_16" -> "964 clamp_min_16";
+"964 clamp_min_16" -> "965 expand_as_16";
+"965 expand_as_16" -> "966 div_16";
+"966 div_16" -> "972 matmul_16";
+"967 linalg_vector_norm_17" -> "968 clamp_min_17";
+"968 clamp_min_17" -> "969 expand_as_17";
+"969 expand_as_17" -> "970 div_17";
+"970 div_17" -> "971 transpose_16";
+"971 transpose_16" -> "972 matmul_16";
+"972 matmul_16" -> "976 mul_17";
+"973 _param_constant143" -> "974 clamp_8";
+"974 clamp_8" -> "975 exp_8";
+"975 exp_8" -> "976 mul_17";
+"976 mul_17" -> "977 add_28";
+"977 add_28" -> "978 softmax_8";
+"978 softmax_8" -> "979 dropout_32";
+"979 dropout_32" -> "980 matmul_17";
+"980 matmul_17" -> "981 transpose_17";
+"981 transpose_17" -> "982 reshape_38";
+"982 reshape_38" -> "985 linear_53";
+"983 _param_constant144" -> "985 linear_53";
+"984 _param_constant145" -> "985 linear_53";
+"985 linear_53" -> "986 dropout_33";
+"986 dropout_33" -> "987 view_47";
+"987 view_47" -> "988 permute_40";
+"988 permute_40" -> "989 reshape_39";
+"989 reshape_39" -> "990 slice_134";
+"990 slice_134" -> "991 slice_135";
+"991 slice_135" -> "992 slice_136";
+"992 slice_136" -> "993 slice_137";
+"993 slice_137" -> "994 contiguous_15";
+"994 contiguous_15" -> "997 layer_norm_19";
+"995 _param_constant146" -> "997 layer_norm_19";
+"996 _param_constant147" -> "997 layer_norm_19";
+"997 layer_norm_19" -> "998 add_29";
+"998 add_29" -> "1001 linear_54";
+"998 add_29" -> "1011 add_30";
+"999 _param_constant148" -> "1001 linear_54";
+"1000 _param_constant149" -> "1001 linear_54";
+"1001 linear_54" -> "1002 gelu_8";
+"1002 gelu_8" -> "1003 dropout_34";
+"1003 dropout_34" -> "1006 linear_55";
+"1004 _param_constant150" -> "1006 linear_55";
+"1005 _param_constant151" -> "1006 linear_55";
+"1006 linear_55" -> "1007 dropout_35";
+"1007 dropout_35" -> "1010 layer_norm_20";
+"1008 _param_constant152" -> "1010 layer_norm_20";
+"1009 _param_constant153" -> "1010 layer_norm_20";
+"1010 layer_norm_20" -> "1011 add_30";
+"1011 add_30" -> "1028 pad_11";
+"1011 add_30" -> "1141 add_33";
+"1012 _tensor_constant54" -> "1015 linear_56";
+"1013 _param_constant154" -> "1015 linear_56";
+"1014 _param_constant155" -> "1015 linear_56";
+"1015 linear_56" -> "1016 relu__9";
+"1016 relu__9" -> "1018 linear_57";
+"1017 _param_constant156" -> "1018 linear_57";
+"1018 linear_57" -> "1019 view_48";
+"1019 view_48" -> "1021 index_9";
+"1020 _tensor_constant55" -> "1021 index_9";
+"1021 index_9" -> "1022 view_49";
+"1022 view_49" -> "1023 permute_41";
+"1023 permute_41" -> "1024 contiguous_16";
+"1024 contiguous_16" -> "1025 unsqueeze_25";
+"1025 unsqueeze_25" -> "1026 sigmoid_9";
+"1026 sigmoid_9" -> "1027 mul_18";
+"1027 mul_18" -> "1058 add_31";
+"1028 pad_11" -> "1029 roll_8";
+"1029 roll_8" -> "1030 view_50";
+"1030 view_50" -> "1031 permute_42";
+"1031 permute_42" -> "1032 reshape_40";
+"1032 reshape_40" -> "1038 linear_58";
+"1032 reshape_40" -> "1059 new_zeros_4";
+"1033 _param_constant157" -> "1034 clone_9";
+"1034 clone_9" -> "1035 slice_138";
+"1034 clone_9" -> "1038 linear_58";
+"1035 slice_138" -> "1036 zero__9";
+"1037 _param_constant158" -> "1038 linear_58";
+"1038 linear_58" -> "1039 reshape_41";
+"1039 reshape_41" -> "1040 permute_43";
+"1040 permute_43" -> "1041 select_27";
+"1040 permute_43" -> "1042 select_28";
+"1040 permute_43" -> "1043 select_29";
+"1041 select_27" -> "1044 linalg_vector_norm_18";
+"1041 select_27" -> "1046 expand_as_18";
+"1041 select_27" -> "1047 div_18";
+"1042 select_28" -> "1048 linalg_vector_norm_19";
+"1042 select_28" -> "1050 expand_as_19";
+"1042 select_28" -> "1051 div_19";
+"1043 select_29" -> "1122 matmul_19";
+"1044 linalg_vector_norm_18" -> "1045 clamp_min_18";
+"1045 clamp_min_18" -> "1046 expand_as_18";
+"1046 expand_as_18" -> "1047 div_18";
+"1047 div_18" -> "1053 matmul_18";
+"1048 linalg_vector_norm_19" -> "1049 clamp_min_19";
+"1049 clamp_min_19" -> "1050 expand_as_19";
+"1050 expand_as_19" -> "1051 div_19";
+"1051 div_19" -> "1052 transpose_18";
+"1052 transpose_18" -> "1053 matmul_18";
+"1053 matmul_18" -> "1057 mul_19";
+"1054 _param_constant159" -> "1055 clamp_9";
+"1055 clamp_9" -> "1056 exp_9";
+"1056 exp_9" -> "1057 mul_19";
+"1057 mul_19" -> "1058 add_31";
+"1058 add_31" -> "1115 view_52";
+"1059 new_zeros_4" -> "1062 slice_139";
+"1059 new_zeros_4" -> "1067 slice_141";
+"1059 new_zeros_4" -> "1072 slice_143";
+"1059 new_zeros_4" -> "1077 slice_145";
+"1059 new_zeros_4" -> "1082 slice_147";
+"1059 new_zeros_4" -> "1087 slice_149";
+"1059 new_zeros_4" -> "1092 slice_151";
+"1059 new_zeros_4" -> "1097 slice_153";
+"1059 new_zeros_4" -> "1102 slice_155";
+"1059 new_zeros_4" -> "1105 view_51";
+"1060 _tensor_constant56" -> "1061 lift_fresh_copy_36";
+"1061 lift_fresh_copy_36" -> "1064 fill__36";
+"1062 slice_139" -> "1063 slice_140";
+"1063 slice_140" -> "1064 fill__36";
+"1065 _tensor_constant57" -> "1066 lift_fresh_copy_37";
+"1066 lift_fresh_copy_37" -> "1069 fill__37";
+"1067 slice_141" -> "1068 slice_142";
+"1068 slice_142" -> "1069 fill__37";
+"1070 _tensor_constant58" -> "1071 lift_fresh_copy_38";
+"1071 lift_fresh_copy_38" -> "1074 fill__38";
+"1072 slice_143" -> "1073 slice_144";
+"1073 slice_144" -> "1074 fill__38";
+"1075 _tensor_constant59" -> "1076 lift_fresh_copy_39";
+"1076 lift_fresh_copy_39" -> "1079 fill__39";
+"1077 slice_145" -> "1078 slice_146";
+"1078 slice_146" -> "1079 fill__39";
+"1080 _tensor_constant60" -> "1081 lift_fresh_copy_40";
+"1081 lift_fresh_copy_40" -> "1084 fill__40";
+"1082 slice_147" -> "1083 slice_148";
+"1083 slice_148" -> "1084 fill__40";
+"1085 _tensor_constant61" -> "1086 lift_fresh_copy_41";
+"1086 lift_fresh_copy_41" -> "1089 fill__41";
+"1087 slice_149" -> "1088 slice_150";
+"1088 slice_150" -> "1089 fill__41";
+"1090 _tensor_constant62" -> "1091 lift_fresh_copy_42";
+"1091 lift_fresh_copy_42" -> "1094 fill__42";
+"1092 slice_151" -> "1093 slice_152";
+"1093 slice_152" -> "1094 fill__42";
+"1095 _tensor_constant63" -> "1096 lift_fresh_copy_43";
+"1096 lift_fresh_copy_43" -> "1099 fill__43";
+"1097 slice_153" -> "1098 slice_154";
+"1098 slice_154" -> "1099 fill__43";
+"1100 _tensor_constant64" -> "1101 lift_fresh_copy_44";
+"1101 lift_fresh_copy_44" -> "1104 fill__44";
+"1102 slice_155" -> "1103 slice_156";
+"1103 slice_156" -> "1104 fill__44";
+"1105 view_51" -> "1106 permute_44";
+"1106 permute_44" -> "1107 reshape_42";
+"1107 reshape_42" -> "1108 unsqueeze_26";
+"1107 reshape_42" -> "1109 unsqueeze_27";
+"1108 unsqueeze_26" -> "1110 sub_4";
+"1109 unsqueeze_27" -> "1110 sub_4";
+"1110 sub_4" -> "1111 ne_4";
+"1110 sub_4" -> "1112 masked_fill_8";
+"1110 sub_4" -> "1113 eq_4";
+"1111 ne_4" -> "1112 masked_fill_8";
+"1112 masked_fill_8" -> "1114 masked_fill_9";
+"1113 eq_4" -> "1114 masked_fill_9";
+"1114 masked_fill_9" -> "1116 unsqueeze_28";
+"1115 view_52" -> "1118 add_32";
+"1116 unsqueeze_28" -> "1117 unsqueeze_29";
+"1117 unsqueeze_29" -> "1118 add_32";
+"1118 add_32" -> "1119 view_53";
+"1119 view_53" -> "1120 softmax_9";
+"1120 softmax_9" -> "1121 dropout_36";
+"1121 dropout_36" -> "1122 matmul_19";
+"1122 matmul_19" -> "1123 transpose_19";
+"1123 transpose_19" -> "1124 reshape_43";
+"1124 reshape_43" -> "1127 linear_59";
+"1125 _param_constant160" -> "1127 linear_59";
+"1126 _param_constant161" -> "1127 linear_59";
+"1127 linear_59" -> "1128 dropout_37";
+"1128 dropout_37" -> "1129 view_54";
+"1129 view_54" -> "1130 permute_45";
+"1130 permute_45" -> "1131 reshape_44";
+"1131 reshape_44" -> "1132 roll_9";
+"1132 roll_9" -> "1133 slice_157";
+"1133 slice_157" -> "1134 slice_158";
+"1134 slice_158" -> "1135 slice_159";
+"1135 slice_159" -> "1136 slice_160";
+"1136 slice_160" -> "1137 contiguous_17";
+"1137 contiguous_17" -> "1140 layer_norm_21";
+"1138 _param_constant162" -> "1140 layer_norm_21";
+"1139 _param_constant163" -> "1140 layer_norm_21";
+"1140 layer_norm_21" -> "1141 add_33";
+"1141 add_33" -> "1144 linear_60";
+"1141 add_33" -> "1154 add_34";
+"1142 _param_constant164" -> "1144 linear_60";
+"1143 _param_constant165" -> "1144 linear_60";
+"1144 linear_60" -> "1145 gelu_9";
+"1145 gelu_9" -> "1146 dropout_38";
+"1146 dropout_38" -> "1149 linear_61";
+"1147 _param_constant166" -> "1149 linear_61";
+"1148 _param_constant167" -> "1149 linear_61";
+"1149 linear_61" -> "1150 dropout_39";
+"1150 dropout_39" -> "1153 layer_norm_22";
+"1151 _param_constant168" -> "1153 layer_norm_22";
+"1152 _param_constant169" -> "1153 layer_norm_22";
+"1153 layer_norm_22" -> "1154 add_34";
+"1154 add_34" -> "1171 pad_12";
+"1154 add_34" -> "1221 add_36";
+"1155 _tensor_constant65" -> "1158 linear_62";
+"1156 _param_constant170" -> "1158 linear_62";
+"1157 _param_constant171" -> "1158 linear_62";
+"1158 linear_62" -> "1159 relu__10";
+"1159 relu__10" -> "1161 linear_63";
+"1160 _param_constant172" -> "1161 linear_63";
+"1161 linear_63" -> "1162 view_55";
+"1162 view_55" -> "1164 index_10";
+"1163 _tensor_constant66" -> "1164 index_10";
+"1164 index_10" -> "1165 view_56";
+"1165 view_56" -> "1166 permute_46";
+"1166 permute_46" -> "1167 contiguous_18";
+"1167 contiguous_18" -> "1168 unsqueeze_30";
+"1168 unsqueeze_30" -> "1169 sigmoid_10";
+"1169 sigmoid_10" -> "1170 mul_20";
+"1170 mul_20" -> "1200 add_35";
+"1171 pad_12" -> "1172 view_57";
+"1172 view_57" -> "1173 permute_47";
+"1173 permute_47" -> "1174 reshape_45";
+"1174 reshape_45" -> "1180 linear_64";
+"1175 _param_constant173" -> "1176 clone_10";
+"1176 clone_10" -> "1177 slice_161";
+"1176 clone_10" -> "1180 linear_64";
+"1177 slice_161" -> "1178 zero__10";
+"1179 _param_constant174" -> "1180 linear_64";
+"1180 linear_64" -> "1181 reshape_46";
+"1181 reshape_46" -> "1182 permute_48";
+"1182 permute_48" -> "1183 select_30";
+"1182 permute_48" -> "1184 select_31";
+"1182 permute_48" -> "1185 select_32";
+"1183 select_30" -> "1186 linalg_vector_norm_20";
+"1183 select_30" -> "1188 expand_as_20";
+"1183 select_30" -> "1189 div_20";
+"1184 select_31" -> "1190 linalg_vector_norm_21";
+"1184 select_31" -> "1192 expand_as_21";
+"1184 select_31" -> "1193 div_21";
+"1185 select_32" -> "1203 matmul_21";
+"1186 linalg_vector_norm_20" -> "1187 clamp_min_20";
+"1187 clamp_min_20" -> "1188 expand_as_20";
+"1188 expand_as_20" -> "1189 div_20";
+"1189 div_20" -> "1195 matmul_20";
+"1190 linalg_vector_norm_21" -> "1191 clamp_min_21";
+"1191 clamp_min_21" -> "1192 expand_as_21";
+"1192 expand_as_21" -> "1193 div_21";
+"1193 div_21" -> "1194 transpose_20";
+"1194 transpose_20" -> "1195 matmul_20";
+"1195 matmul_20" -> "1199 mul_21";
+"1196 _param_constant175" -> "1197 clamp_10";
+"1197 clamp_10" -> "1198 exp_10";
+"1198 exp_10" -> "1199 mul_21";
+"1199 mul_21" -> "1200 add_35";
+"1200 add_35" -> "1201 softmax_10";
+"1201 softmax_10" -> "1202 dropout_40";
+"1202 dropout_40" -> "1203 matmul_21";
+"1203 matmul_21" -> "1204 transpose_21";
+"1204 transpose_21" -> "1205 reshape_47";
+"1205 reshape_47" -> "1208 linear_65";
+"1206 _param_constant176" -> "1208 linear_65";
+"1207 _param_constant177" -> "1208 linear_65";
+"1208 linear_65" -> "1209 dropout_41";
+"1209 dropout_41" -> "1210 view_58";
+"1210 view_58" -> "1211 permute_49";
+"1211 permute_49" -> "1212 reshape_48";
+"1212 reshape_48" -> "1213 slice_162";
+"1213 slice_162" -> "1214 slice_163";
+"1214 slice_163" -> "1215 slice_164";
+"1215 slice_164" -> "1216 slice_165";
+"1216 slice_165" -> "1217 contiguous_19";
+"1217 contiguous_19" -> "1220 layer_norm_23";
+"1218 _param_constant178" -> "1220 layer_norm_23";
+"1219 _param_constant179" -> "1220 layer_norm_23";
+"1220 layer_norm_23" -> "1221 add_36";
+"1221 add_36" -> "1224 linear_66";
+"1221 add_36" -> "1234 add_37";
+"1222 _param_constant180" -> "1224 linear_66";
+"1223 _param_constant181" -> "1224 linear_66";
+"1224 linear_66" -> "1225 gelu_10";
+"1225 gelu_10" -> "1226 dropout_42";
+"1226 dropout_42" -> "1229 linear_67";
+"1227 _param_constant182" -> "1229 linear_67";
+"1228 _param_constant183" -> "1229 linear_67";
+"1229 linear_67" -> "1230 dropout_43";
+"1230 dropout_43" -> "1233 layer_norm_24";
+"1231 _param_constant184" -> "1233 layer_norm_24";
+"1232 _param_constant185" -> "1233 layer_norm_24";
+"1233 layer_norm_24" -> "1234 add_37";
+"1234 add_37" -> "1251 pad_13";
+"1234 add_37" -> "1364 add_40";
+"1235 _tensor_constant67" -> "1238 linear_68";
+"1236 _param_constant186" -> "1238 linear_68";
+"1237 _param_constant187" -> "1238 linear_68";
+"1238 linear_68" -> "1239 relu__11";
+"1239 relu__11" -> "1241 linear_69";
+"1240 _param_constant188" -> "1241 linear_69";
+"1241 linear_69" -> "1242 view_59";
+"1242 view_59" -> "1244 index_11";
+"1243 _tensor_constant68" -> "1244 index_11";
+"1244 index_11" -> "1245 view_60";
+"1245 view_60" -> "1246 permute_50";
+"1246 permute_50" -> "1247 contiguous_20";
+"1247 contiguous_20" -> "1248 unsqueeze_31";
+"1248 unsqueeze_31" -> "1249 sigmoid_11";
+"1249 sigmoid_11" -> "1250 mul_22";
+"1250 mul_22" -> "1281 add_38";
+"1251 pad_13" -> "1252 roll_10";
+"1252 roll_10" -> "1253 view_61";
+"1253 view_61" -> "1254 permute_51";
+"1254 permute_51" -> "1255 reshape_49";
+"1255 reshape_49" -> "1261 linear_70";
+"1255 reshape_49" -> "1282 new_zeros_5";
+"1256 _param_constant189" -> "1257 clone_11";
+"1257 clone_11" -> "1258 slice_166";
+"1257 clone_11" -> "1261 linear_70";
+"1258 slice_166" -> "1259 zero__11";
+"1260 _param_constant190" -> "1261 linear_70";
+"1261 linear_70" -> "1262 reshape_50";
+"1262 reshape_50" -> "1263 permute_52";
+"1263 permute_52" -> "1264 select_33";
+"1263 permute_52" -> "1265 select_34";
+"1263 permute_52" -> "1266 select_35";
+"1264 select_33" -> "1267 linalg_vector_norm_22";
+"1264 select_33" -> "1269 expand_as_22";
+"1264 select_33" -> "1270 div_22";
+"1265 select_34" -> "1271 linalg_vector_norm_23";
+"1265 select_34" -> "1273 expand_as_23";
+"1265 select_34" -> "1274 div_23";
+"1266 select_35" -> "1345 matmul_23";
+"1267 linalg_vector_norm_22" -> "1268 clamp_min_22";
+"1268 clamp_min_22" -> "1269 expand_as_22";
+"1269 expand_as_22" -> "1270 div_22";
+"1270 div_22" -> "1276 matmul_22";
+"1271 linalg_vector_norm_23" -> "1272 clamp_min_23";
+"1272 clamp_min_23" -> "1273 expand_as_23";
+"1273 expand_as_23" -> "1274 div_23";
+"1274 div_23" -> "1275 transpose_22";
+"1275 transpose_22" -> "1276 matmul_22";
+"1276 matmul_22" -> "1280 mul_23";
+"1277 _param_constant191" -> "1278 clamp_11";
+"1278 clamp_11" -> "1279 exp_11";
+"1279 exp_11" -> "1280 mul_23";
+"1280 mul_23" -> "1281 add_38";
+"1281 add_38" -> "1338 view_63";
+"1282 new_zeros_5" -> "1285 slice_167";
+"1282 new_zeros_5" -> "1290 slice_169";
+"1282 new_zeros_5" -> "1295 slice_171";
+"1282 new_zeros_5" -> "1300 slice_173";
+"1282 new_zeros_5" -> "1305 slice_175";
+"1282 new_zeros_5" -> "1310 slice_177";
+"1282 new_zeros_5" -> "1315 slice_179";
+"1282 new_zeros_5" -> "1320 slice_181";
+"1282 new_zeros_5" -> "1325 slice_183";
+"1282 new_zeros_5" -> "1328 view_62";
+"1283 _tensor_constant69" -> "1284 lift_fresh_copy_45";
+"1284 lift_fresh_copy_45" -> "1287 fill__45";
+"1285 slice_167" -> "1286 slice_168";
+"1286 slice_168" -> "1287 fill__45";
+"1288 _tensor_constant70" -> "1289 lift_fresh_copy_46";
+"1289 lift_fresh_copy_46" -> "1292 fill__46";
+"1290 slice_169" -> "1291 slice_170";
+"1291 slice_170" -> "1292 fill__46";
+"1293 _tensor_constant71" -> "1294 lift_fresh_copy_47";
+"1294 lift_fresh_copy_47" -> "1297 fill__47";
+"1295 slice_171" -> "1296 slice_172";
+"1296 slice_172" -> "1297 fill__47";
+"1298 _tensor_constant72" -> "1299 lift_fresh_copy_48";
+"1299 lift_fresh_copy_48" -> "1302 fill__48";
+"1300 slice_173" -> "1301 slice_174";
+"1301 slice_174" -> "1302 fill__48";
+"1303 _tensor_constant73" -> "1304 lift_fresh_copy_49";
+"1304 lift_fresh_copy_49" -> "1307 fill__49";
+"1305 slice_175" -> "1306 slice_176";
+"1306 slice_176" -> "1307 fill__49";
+"1308 _tensor_constant74" -> "1309 lift_fresh_copy_50";
+"1309 lift_fresh_copy_50" -> "1312 fill__50";
+"1310 slice_177" -> "1311 slice_178";
+"1311 slice_178" -> "1312 fill__50";
+"1313 _tensor_constant75" -> "1314 lift_fresh_copy_51";
+"1314 lift_fresh_copy_51" -> "1317 fill__51";
+"1315 slice_179" -> "1316 slice_180";
+"1316 slice_180" -> "1317 fill__51";
+"1318 _tensor_constant76" -> "1319 lift_fresh_copy_52";
+"1319 lift_fresh_copy_52" -> "1322 fill__52";
+"1320 slice_181" -> "1321 slice_182";
+"1321 slice_182" -> "1322 fill__52";
+"1323 _tensor_constant77" -> "1324 lift_fresh_copy_53";
+"1324 lift_fresh_copy_53" -> "1327 fill__53";
+"1325 slice_183" -> "1326 slice_184";
+"1326 slice_184" -> "1327 fill__53";
+"1328 view_62" -> "1329 permute_53";
+"1329 permute_53" -> "1330 reshape_51";
+"1330 reshape_51" -> "1331 unsqueeze_32";
+"1330 reshape_51" -> "1332 unsqueeze_33";
+"1331 unsqueeze_32" -> "1333 sub_5";
+"1332 unsqueeze_33" -> "1333 sub_5";
+"1333 sub_5" -> "1334 ne_5";
+"1333 sub_5" -> "1335 masked_fill_10";
+"1333 sub_5" -> "1336 eq_5";
+"1334 ne_5" -> "1335 masked_fill_10";
+"1335 masked_fill_10" -> "1337 masked_fill_11";
+"1336 eq_5" -> "1337 masked_fill_11";
+"1337 masked_fill_11" -> "1339 unsqueeze_34";
+"1338 view_63" -> "1341 add_39";
+"1339 unsqueeze_34" -> "1340 unsqueeze_35";
+"1340 unsqueeze_35" -> "1341 add_39";
+"1341 add_39" -> "1342 view_64";
+"1342 view_64" -> "1343 softmax_11";
+"1343 softmax_11" -> "1344 dropout_44";
+"1344 dropout_44" -> "1345 matmul_23";
+"1345 matmul_23" -> "1346 transpose_23";
+"1346 transpose_23" -> "1347 reshape_52";
+"1347 reshape_52" -> "1350 linear_71";
+"1348 _param_constant192" -> "1350 linear_71";
+"1349 _param_constant193" -> "1350 linear_71";
+"1350 linear_71" -> "1351 dropout_45";
+"1351 dropout_45" -> "1352 view_65";
+"1352 view_65" -> "1353 permute_54";
+"1353 permute_54" -> "1354 reshape_53";
+"1354 reshape_53" -> "1355 roll_11";
+"1355 roll_11" -> "1356 slice_185";
+"1356 slice_185" -> "1357 slice_186";
+"1357 slice_186" -> "1358 slice_187";
+"1358 slice_187" -> "1359 slice_188";
+"1359 slice_188" -> "1360 contiguous_21";
+"1360 contiguous_21" -> "1363 layer_norm_25";
+"1361 _param_constant194" -> "1363 layer_norm_25";
+"1362 _param_constant195" -> "1363 layer_norm_25";
+"1363 layer_norm_25" -> "1364 add_40";
+"1364 add_40" -> "1367 linear_72";
+"1364 add_40" -> "1377 add_41";
+"1365 _param_constant196" -> "1367 linear_72";
+"1366 _param_constant197" -> "1367 linear_72";
+"1367 linear_72" -> "1368 gelu_11";
+"1368 gelu_11" -> "1369 dropout_46";
+"1369 dropout_46" -> "1372 linear_73";
+"1370 _param_constant198" -> "1372 linear_73";
+"1371 _param_constant199" -> "1372 linear_73";
+"1372 linear_73" -> "1373 dropout_47";
+"1373 dropout_47" -> "1376 layer_norm_26";
+"1374 _param_constant200" -> "1376 layer_norm_26";
+"1375 _param_constant201" -> "1376 layer_norm_26";
+"1376 layer_norm_26" -> "1377 add_41";
+"1377 add_41" -> "1394 pad_14";
+"1377 add_41" -> "1444 add_43";
+"1378 _tensor_constant78" -> "1381 linear_74";
+"1379 _param_constant202" -> "1381 linear_74";
+"1380 _param_constant203" -> "1381 linear_74";
+"1381 linear_74" -> "1382 relu__12";
+"1382 relu__12" -> "1384 linear_75";
+"1383 _param_constant204" -> "1384 linear_75";
+"1384 linear_75" -> "1385 view_66";
+"1385 view_66" -> "1387 index_12";
+"1386 _tensor_constant79" -> "1387 index_12";
+"1387 index_12" -> "1388 view_67";
+"1388 view_67" -> "1389 permute_55";
+"1389 permute_55" -> "1390 contiguous_22";
+"1390 contiguous_22" -> "1391 unsqueeze_36";
+"1391 unsqueeze_36" -> "1392 sigmoid_12";
+"1392 sigmoid_12" -> "1393 mul_24";
+"1393 mul_24" -> "1423 add_42";
+"1394 pad_14" -> "1395 view_68";
+"1395 view_68" -> "1396 permute_56";
+"1396 permute_56" -> "1397 reshape_54";
+"1397 reshape_54" -> "1403 linear_76";
+"1398 _param_constant205" -> "1399 clone_12";
+"1399 clone_12" -> "1400 slice_189";
+"1399 clone_12" -> "1403 linear_76";
+"1400 slice_189" -> "1401 zero__12";
+"1402 _param_constant206" -> "1403 linear_76";
+"1403 linear_76" -> "1404 reshape_55";
+"1404 reshape_55" -> "1405 permute_57";
+"1405 permute_57" -> "1406 select_36";
+"1405 permute_57" -> "1407 select_37";
+"1405 permute_57" -> "1408 select_38";
+"1406 select_36" -> "1409 linalg_vector_norm_24";
+"1406 select_36" -> "1411 expand_as_24";
+"1406 select_36" -> "1412 div_24";
+"1407 select_37" -> "1413 linalg_vector_norm_25";
+"1407 select_37" -> "1415 expand_as_25";
+"1407 select_37" -> "1416 div_25";
+"1408 select_38" -> "1426 matmul_25";
+"1409 linalg_vector_norm_24" -> "1410 clamp_min_24";
+"1410 clamp_min_24" -> "1411 expand_as_24";
+"1411 expand_as_24" -> "1412 div_24";
+"1412 div_24" -> "1418 matmul_24";
+"1413 linalg_vector_norm_25" -> "1414 clamp_min_25";
+"1414 clamp_min_25" -> "1415 expand_as_25";
+"1415 expand_as_25" -> "1416 div_25";
+"1416 div_25" -> "1417 transpose_24";
+"1417 transpose_24" -> "1418 matmul_24";
+"1418 matmul_24" -> "1422 mul_25";
+"1419 _param_constant207" -> "1420 clamp_12";
+"1420 clamp_12" -> "1421 exp_12";
+"1421 exp_12" -> "1422 mul_25";
+"1422 mul_25" -> "1423 add_42";
+"1423 add_42" -> "1424 softmax_12";
+"1424 softmax_12" -> "1425 dropout_48";
+"1425 dropout_48" -> "1426 matmul_25";
+"1426 matmul_25" -> "1427 transpose_25";
+"1427 transpose_25" -> "1428 reshape_56";
+"1428 reshape_56" -> "1431 linear_77";
+"1429 _param_constant208" -> "1431 linear_77";
+"1430 _param_constant209" -> "1431 linear_77";
+"1431 linear_77" -> "1432 dropout_49";
+"1432 dropout_49" -> "1433 view_69";
+"1433 view_69" -> "1434 permute_58";
+"1434 permute_58" -> "1435 reshape_57";
+"1435 reshape_57" -> "1436 slice_190";
+"1436 slice_190" -> "1437 slice_191";
+"1437 slice_191" -> "1438 slice_192";
+"1438 slice_192" -> "1439 slice_193";
+"1439 slice_193" -> "1440 contiguous_23";
+"1440 contiguous_23" -> "1443 layer_norm_27";
+"1441 _param_constant210" -> "1443 layer_norm_27";
+"1442 _param_constant211" -> "1443 layer_norm_27";
+"1443 layer_norm_27" -> "1444 add_43";
+"1444 add_43" -> "1447 linear_78";
+"1444 add_43" -> "1457 add_44";
+"1445 _param_constant212" -> "1447 linear_78";
+"1446 _param_constant213" -> "1447 linear_78";
+"1447 linear_78" -> "1448 gelu_12";
+"1448 gelu_12" -> "1449 dropout_50";
+"1449 dropout_50" -> "1452 linear_79";
+"1450 _param_constant214" -> "1452 linear_79";
+"1451 _param_constant215" -> "1452 linear_79";
+"1452 linear_79" -> "1453 dropout_51";
+"1453 dropout_51" -> "1456 layer_norm_28";
+"1454 _param_constant216" -> "1456 layer_norm_28";
+"1455 _param_constant217" -> "1456 layer_norm_28";
+"1456 layer_norm_28" -> "1457 add_44";
+"1457 add_44" -> "1474 pad_15";
+"1457 add_44" -> "1587 add_47";
+"1458 _tensor_constant80" -> "1461 linear_80";
+"1459 _param_constant218" -> "1461 linear_80";
+"1460 _param_constant219" -> "1461 linear_80";
+"1461 linear_80" -> "1462 relu__13";
+"1462 relu__13" -> "1464 linear_81";
+"1463 _param_constant220" -> "1464 linear_81";
+"1464 linear_81" -> "1465 view_70";
+"1465 view_70" -> "1467 index_13";
+"1466 _tensor_constant81" -> "1467 index_13";
+"1467 index_13" -> "1468 view_71";
+"1468 view_71" -> "1469 permute_59";
+"1469 permute_59" -> "1470 contiguous_24";
+"1470 contiguous_24" -> "1471 unsqueeze_37";
+"1471 unsqueeze_37" -> "1472 sigmoid_13";
+"1472 sigmoid_13" -> "1473 mul_26";
+"1473 mul_26" -> "1504 add_45";
+"1474 pad_15" -> "1475 roll_12";
+"1475 roll_12" -> "1476 view_72";
+"1476 view_72" -> "1477 permute_60";
+"1477 permute_60" -> "1478 reshape_58";
+"1478 reshape_58" -> "1484 linear_82";
+"1478 reshape_58" -> "1505 new_zeros_6";
+"1479 _param_constant221" -> "1480 clone_13";
+"1480 clone_13" -> "1481 slice_194";
+"1480 clone_13" -> "1484 linear_82";
+"1481 slice_194" -> "1482 zero__13";
+"1483 _param_constant222" -> "1484 linear_82";
+"1484 linear_82" -> "1485 reshape_59";
+"1485 reshape_59" -> "1486 permute_61";
+"1486 permute_61" -> "1487 select_39";
+"1486 permute_61" -> "1488 select_40";
+"1486 permute_61" -> "1489 select_41";
+"1487 select_39" -> "1490 linalg_vector_norm_26";
+"1487 select_39" -> "1492 expand_as_26";
+"1487 select_39" -> "1493 div_26";
+"1488 select_40" -> "1494 linalg_vector_norm_27";
+"1488 select_40" -> "1496 expand_as_27";
+"1488 select_40" -> "1497 div_27";
+"1489 select_41" -> "1568 matmul_27";
+"1490 linalg_vector_norm_26" -> "1491 clamp_min_26";
+"1491 clamp_min_26" -> "1492 expand_as_26";
+"1492 expand_as_26" -> "1493 div_26";
+"1493 div_26" -> "1499 matmul_26";
+"1494 linalg_vector_norm_27" -> "1495 clamp_min_27";
+"1495 clamp_min_27" -> "1496 expand_as_27";
+"1496 expand_as_27" -> "1497 div_27";
+"1497 div_27" -> "1498 transpose_26";
+"1498 transpose_26" -> "1499 matmul_26";
+"1499 matmul_26" -> "1503 mul_27";
+"1500 _param_constant223" -> "1501 clamp_13";
+"1501 clamp_13" -> "1502 exp_13";
+"1502 exp_13" -> "1503 mul_27";
+"1503 mul_27" -> "1504 add_45";
+"1504 add_45" -> "1561 view_74";
+"1505 new_zeros_6" -> "1508 slice_195";
+"1505 new_zeros_6" -> "1513 slice_197";
+"1505 new_zeros_6" -> "1518 slice_199";
+"1505 new_zeros_6" -> "1523 slice_201";
+"1505 new_zeros_6" -> "1528 slice_203";
+"1505 new_zeros_6" -> "1533 slice_205";
+"1505 new_zeros_6" -> "1538 slice_207";
+"1505 new_zeros_6" -> "1543 slice_209";
+"1505 new_zeros_6" -> "1548 slice_211";
+"1505 new_zeros_6" -> "1551 view_73";
+"1506 _tensor_constant82" -> "1507 lift_fresh_copy_54";
+"1507 lift_fresh_copy_54" -> "1510 fill__54";
+"1508 slice_195" -> "1509 slice_196";
+"1509 slice_196" -> "1510 fill__54";
+"1511 _tensor_constant83" -> "1512 lift_fresh_copy_55";
+"1512 lift_fresh_copy_55" -> "1515 fill__55";
+"1513 slice_197" -> "1514 slice_198";
+"1514 slice_198" -> "1515 fill__55";
+"1516 _tensor_constant84" -> "1517 lift_fresh_copy_56";
+"1517 lift_fresh_copy_56" -> "1520 fill__56";
+"1518 slice_199" -> "1519 slice_200";
+"1519 slice_200" -> "1520 fill__56";
+"1521 _tensor_constant85" -> "1522 lift_fresh_copy_57";
+"1522 lift_fresh_copy_57" -> "1525 fill__57";
+"1523 slice_201" -> "1524 slice_202";
+"1524 slice_202" -> "1525 fill__57";
+"1526 _tensor_constant86" -> "1527 lift_fresh_copy_58";
+"1527 lift_fresh_copy_58" -> "1530 fill__58";
+"1528 slice_203" -> "1529 slice_204";
+"1529 slice_204" -> "1530 fill__58";
+"1531 _tensor_constant87" -> "1532 lift_fresh_copy_59";
+"1532 lift_fresh_copy_59" -> "1535 fill__59";
+"1533 slice_205" -> "1534 slice_206";
+"1534 slice_206" -> "1535 fill__59";
+"1536 _tensor_constant88" -> "1537 lift_fresh_copy_60";
+"1537 lift_fresh_copy_60" -> "1540 fill__60";
+"1538 slice_207" -> "1539 slice_208";
+"1539 slice_208" -> "1540 fill__60";
+"1541 _tensor_constant89" -> "1542 lift_fresh_copy_61";
+"1542 lift_fresh_copy_61" -> "1545 fill__61";
+"1543 slice_209" -> "1544 slice_210";
+"1544 slice_210" -> "1545 fill__61";
+"1546 _tensor_constant90" -> "1547 lift_fresh_copy_62";
+"1547 lift_fresh_copy_62" -> "1550 fill__62";
+"1548 slice_211" -> "1549 slice_212";
+"1549 slice_212" -> "1550 fill__62";
+"1551 view_73" -> "1552 permute_62";
+"1552 permute_62" -> "1553 reshape_60";
+"1553 reshape_60" -> "1554 unsqueeze_38";
+"1553 reshape_60" -> "1555 unsqueeze_39";
+"1554 unsqueeze_38" -> "1556 sub_6";
+"1555 unsqueeze_39" -> "1556 sub_6";
+"1556 sub_6" -> "1557 ne_6";
+"1556 sub_6" -> "1558 masked_fill_12";
+"1556 sub_6" -> "1559 eq_6";
+"1557 ne_6" -> "1558 masked_fill_12";
+"1558 masked_fill_12" -> "1560 masked_fill_13";
+"1559 eq_6" -> "1560 masked_fill_13";
+"1560 masked_fill_13" -> "1562 unsqueeze_40";
+"1561 view_74" -> "1564 add_46";
+"1562 unsqueeze_40" -> "1563 unsqueeze_41";
+"1563 unsqueeze_41" -> "1564 add_46";
+"1564 add_46" -> "1565 view_75";
+"1565 view_75" -> "1566 softmax_13";
+"1566 softmax_13" -> "1567 dropout_52";
+"1567 dropout_52" -> "1568 matmul_27";
+"1568 matmul_27" -> "1569 transpose_27";
+"1569 transpose_27" -> "1570 reshape_61";
+"1570 reshape_61" -> "1573 linear_83";
+"1571 _param_constant224" -> "1573 linear_83";
+"1572 _param_constant225" -> "1573 linear_83";
+"1573 linear_83" -> "1574 dropout_53";
+"1574 dropout_53" -> "1575 view_76";
+"1575 view_76" -> "1576 permute_63";
+"1576 permute_63" -> "1577 reshape_62";
+"1577 reshape_62" -> "1578 roll_13";
+"1578 roll_13" -> "1579 slice_213";
+"1579 slice_213" -> "1580 slice_214";
+"1580 slice_214" -> "1581 slice_215";
+"1581 slice_215" -> "1582 slice_216";
+"1582 slice_216" -> "1583 contiguous_25";
+"1583 contiguous_25" -> "1586 layer_norm_29";
+"1584 _param_constant226" -> "1586 layer_norm_29";
+"1585 _param_constant227" -> "1586 layer_norm_29";
+"1586 layer_norm_29" -> "1587 add_47";
+"1587 add_47" -> "1590 linear_84";
+"1587 add_47" -> "1600 add_48";
+"1588 _param_constant228" -> "1590 linear_84";
+"1589 _param_constant229" -> "1590 linear_84";
+"1590 linear_84" -> "1591 gelu_13";
+"1591 gelu_13" -> "1592 dropout_54";
+"1592 dropout_54" -> "1595 linear_85";
+"1593 _param_constant230" -> "1595 linear_85";
+"1594 _param_constant231" -> "1595 linear_85";
+"1595 linear_85" -> "1596 dropout_55";
+"1596 dropout_55" -> "1599 layer_norm_30";
+"1597 _param_constant232" -> "1599 layer_norm_30";
+"1598 _param_constant233" -> "1599 layer_norm_30";
+"1599 layer_norm_30" -> "1600 add_48";
+"1600 add_48" -> "1617 pad_16";
+"1600 add_48" -> "1667 add_50";
+"1601 _tensor_constant91" -> "1604 linear_86";
+"1602 _param_constant234" -> "1604 linear_86";
+"1603 _param_constant235" -> "1604 linear_86";
+"1604 linear_86" -> "1605 relu__14";
+"1605 relu__14" -> "1607 linear_87";
+"1606 _param_constant236" -> "1607 linear_87";
+"1607 linear_87" -> "1608 view_77";
+"1608 view_77" -> "1610 index_14";
+"1609 _tensor_constant92" -> "1610 index_14";
+"1610 index_14" -> "1611 view_78";
+"1611 view_78" -> "1612 permute_64";
+"1612 permute_64" -> "1613 contiguous_26";
+"1613 contiguous_26" -> "1614 unsqueeze_42";
+"1614 unsqueeze_42" -> "1615 sigmoid_14";
+"1615 sigmoid_14" -> "1616 mul_28";
+"1616 mul_28" -> "1646 add_49";
+"1617 pad_16" -> "1618 view_79";
+"1618 view_79" -> "1619 permute_65";
+"1619 permute_65" -> "1620 reshape_63";
+"1620 reshape_63" -> "1626 linear_88";
+"1621 _param_constant237" -> "1622 clone_14";
+"1622 clone_14" -> "1623 slice_217";
+"1622 clone_14" -> "1626 linear_88";
+"1623 slice_217" -> "1624 zero__14";
+"1625 _param_constant238" -> "1626 linear_88";
+"1626 linear_88" -> "1627 reshape_64";
+"1627 reshape_64" -> "1628 permute_66";
+"1628 permute_66" -> "1629 select_42";
+"1628 permute_66" -> "1630 select_43";
+"1628 permute_66" -> "1631 select_44";
+"1629 select_42" -> "1632 linalg_vector_norm_28";
+"1629 select_42" -> "1634 expand_as_28";
+"1629 select_42" -> "1635 div_28";
+"1630 select_43" -> "1636 linalg_vector_norm_29";
+"1630 select_43" -> "1638 expand_as_29";
+"1630 select_43" -> "1639 div_29";
+"1631 select_44" -> "1649 matmul_29";
+"1632 linalg_vector_norm_28" -> "1633 clamp_min_28";
+"1633 clamp_min_28" -> "1634 expand_as_28";
+"1634 expand_as_28" -> "1635 div_28";
+"1635 div_28" -> "1641 matmul_28";
+"1636 linalg_vector_norm_29" -> "1637 clamp_min_29";
+"1637 clamp_min_29" -> "1638 expand_as_29";
+"1638 expand_as_29" -> "1639 div_29";
+"1639 div_29" -> "1640 transpose_28";
+"1640 transpose_28" -> "1641 matmul_28";
+"1641 matmul_28" -> "1645 mul_29";
+"1642 _param_constant239" -> "1643 clamp_14";
+"1643 clamp_14" -> "1644 exp_14";
+"1644 exp_14" -> "1645 mul_29";
+"1645 mul_29" -> "1646 add_49";
+"1646 add_49" -> "1647 softmax_14";
+"1647 softmax_14" -> "1648 dropout_56";
+"1648 dropout_56" -> "1649 matmul_29";
+"1649 matmul_29" -> "1650 transpose_29";
+"1650 transpose_29" -> "1651 reshape_65";
+"1651 reshape_65" -> "1654 linear_89";
+"1652 _param_constant240" -> "1654 linear_89";
+"1653 _param_constant241" -> "1654 linear_89";
+"1654 linear_89" -> "1655 dropout_57";
+"1655 dropout_57" -> "1656 view_80";
+"1656 view_80" -> "1657 permute_67";
+"1657 permute_67" -> "1658 reshape_66";
+"1658 reshape_66" -> "1659 slice_218";
+"1659 slice_218" -> "1660 slice_219";
+"1660 slice_219" -> "1661 slice_220";
+"1661 slice_220" -> "1662 slice_221";
+"1662 slice_221" -> "1663 contiguous_27";
+"1663 contiguous_27" -> "1666 layer_norm_31";
+"1664 _param_constant242" -> "1666 layer_norm_31";
+"1665 _param_constant243" -> "1666 layer_norm_31";
+"1666 layer_norm_31" -> "1667 add_50";
+"1667 add_50" -> "1670 linear_90";
+"1667 add_50" -> "1680 add_51";
+"1668 _param_constant244" -> "1670 linear_90";
+"1669 _param_constant245" -> "1670 linear_90";
+"1670 linear_90" -> "1671 gelu_14";
+"1671 gelu_14" -> "1672 dropout_58";
+"1672 dropout_58" -> "1675 linear_91";
+"1673 _param_constant246" -> "1675 linear_91";
+"1674 _param_constant247" -> "1675 linear_91";
+"1675 linear_91" -> "1676 dropout_59";
+"1676 dropout_59" -> "1679 layer_norm_32";
+"1677 _param_constant248" -> "1679 layer_norm_32";
+"1678 _param_constant249" -> "1679 layer_norm_32";
+"1679 layer_norm_32" -> "1680 add_51";
+"1680 add_51" -> "1697 pad_17";
+"1680 add_51" -> "1810 add_54";
+"1681 _tensor_constant93" -> "1684 linear_92";
+"1682 _param_constant250" -> "1684 linear_92";
+"1683 _param_constant251" -> "1684 linear_92";
+"1684 linear_92" -> "1685 relu__15";
+"1685 relu__15" -> "1687 linear_93";
+"1686 _param_constant252" -> "1687 linear_93";
+"1687 linear_93" -> "1688 view_81";
+"1688 view_81" -> "1690 index_15";
+"1689 _tensor_constant94" -> "1690 index_15";
+"1690 index_15" -> "1691 view_82";
+"1691 view_82" -> "1692 permute_68";
+"1692 permute_68" -> "1693 contiguous_28";
+"1693 contiguous_28" -> "1694 unsqueeze_43";
+"1694 unsqueeze_43" -> "1695 sigmoid_15";
+"1695 sigmoid_15" -> "1696 mul_30";
+"1696 mul_30" -> "1727 add_52";
+"1697 pad_17" -> "1698 roll_14";
+"1698 roll_14" -> "1699 view_83";
+"1699 view_83" -> "1700 permute_69";
+"1700 permute_69" -> "1701 reshape_67";
+"1701 reshape_67" -> "1707 linear_94";
+"1701 reshape_67" -> "1728 new_zeros_7";
+"1702 _param_constant253" -> "1703 clone_15";
+"1703 clone_15" -> "1704 slice_222";
+"1703 clone_15" -> "1707 linear_94";
+"1704 slice_222" -> "1705 zero__15";
+"1706 _param_constant254" -> "1707 linear_94";
+"1707 linear_94" -> "1708 reshape_68";
+"1708 reshape_68" -> "1709 permute_70";
+"1709 permute_70" -> "1710 select_45";
+"1709 permute_70" -> "1711 select_46";
+"1709 permute_70" -> "1712 select_47";
+"1710 select_45" -> "1713 linalg_vector_norm_30";
+"1710 select_45" -> "1715 expand_as_30";
+"1710 select_45" -> "1716 div_30";
+"1711 select_46" -> "1717 linalg_vector_norm_31";
+"1711 select_46" -> "1719 expand_as_31";
+"1711 select_46" -> "1720 div_31";
+"1712 select_47" -> "1791 matmul_31";
+"1713 linalg_vector_norm_30" -> "1714 clamp_min_30";
+"1714 clamp_min_30" -> "1715 expand_as_30";
+"1715 expand_as_30" -> "1716 div_30";
+"1716 div_30" -> "1722 matmul_30";
+"1717 linalg_vector_norm_31" -> "1718 clamp_min_31";
+"1718 clamp_min_31" -> "1719 expand_as_31";
+"1719 expand_as_31" -> "1720 div_31";
+"1720 div_31" -> "1721 transpose_30";
+"1721 transpose_30" -> "1722 matmul_30";
+"1722 matmul_30" -> "1726 mul_31";
+"1723 _param_constant255" -> "1724 clamp_15";
+"1724 clamp_15" -> "1725 exp_15";
+"1725 exp_15" -> "1726 mul_31";
+"1726 mul_31" -> "1727 add_52";
+"1727 add_52" -> "1784 view_85";
+"1728 new_zeros_7" -> "1731 slice_223";
+"1728 new_zeros_7" -> "1736 slice_225";
+"1728 new_zeros_7" -> "1741 slice_227";
+"1728 new_zeros_7" -> "1746 slice_229";
+"1728 new_zeros_7" -> "1751 slice_231";
+"1728 new_zeros_7" -> "1756 slice_233";
+"1728 new_zeros_7" -> "1761 slice_235";
+"1728 new_zeros_7" -> "1766 slice_237";
+"1728 new_zeros_7" -> "1771 slice_239";
+"1728 new_zeros_7" -> "1774 view_84";
+"1729 _tensor_constant95" -> "1730 lift_fresh_copy_63";
+"1730 lift_fresh_copy_63" -> "1733 fill__63";
+"1731 slice_223" -> "1732 slice_224";
+"1732 slice_224" -> "1733 fill__63";
+"1734 _tensor_constant96" -> "1735 lift_fresh_copy_64";
+"1735 lift_fresh_copy_64" -> "1738 fill__64";
+"1736 slice_225" -> "1737 slice_226";
+"1737 slice_226" -> "1738 fill__64";
+"1739 _tensor_constant97" -> "1740 lift_fresh_copy_65";
+"1740 lift_fresh_copy_65" -> "1743 fill__65";
+"1741 slice_227" -> "1742 slice_228";
+"1742 slice_228" -> "1743 fill__65";
+"1744 _tensor_constant98" -> "1745 lift_fresh_copy_66";
+"1745 lift_fresh_copy_66" -> "1748 fill__66";
+"1746 slice_229" -> "1747 slice_230";
+"1747 slice_230" -> "1748 fill__66";
+"1749 _tensor_constant99" -> "1750 lift_fresh_copy_67";
+"1750 lift_fresh_copy_67" -> "1753 fill__67";
+"1751 slice_231" -> "1752 slice_232";
+"1752 slice_232" -> "1753 fill__67";
+"1754 _tensor_constant100" -> "1755 lift_fresh_copy_68";
+"1755 lift_fresh_copy_68" -> "1758 fill__68";
+"1756 slice_233" -> "1757 slice_234";
+"1757 slice_234" -> "1758 fill__68";
+"1759 _tensor_constant101" -> "1760 lift_fresh_copy_69";
+"1760 lift_fresh_copy_69" -> "1763 fill__69";
+"1761 slice_235" -> "1762 slice_236";
+"1762 slice_236" -> "1763 fill__69";
+"1764 _tensor_constant102" -> "1765 lift_fresh_copy_70";
+"1765 lift_fresh_copy_70" -> "1768 fill__70";
+"1766 slice_237" -> "1767 slice_238";
+"1767 slice_238" -> "1768 fill__70";
+"1769 _tensor_constant103" -> "1770 lift_fresh_copy_71";
+"1770 lift_fresh_copy_71" -> "1773 fill__71";
+"1771 slice_239" -> "1772 slice_240";
+"1772 slice_240" -> "1773 fill__71";
+"1774 view_84" -> "1775 permute_71";
+"1775 permute_71" -> "1776 reshape_69";
+"1776 reshape_69" -> "1777 unsqueeze_44";
+"1776 reshape_69" -> "1778 unsqueeze_45";
+"1777 unsqueeze_44" -> "1779 sub_7";
+"1778 unsqueeze_45" -> "1779 sub_7";
+"1779 sub_7" -> "1780 ne_7";
+"1779 sub_7" -> "1781 masked_fill_14";
+"1779 sub_7" -> "1782 eq_7";
+"1780 ne_7" -> "1781 masked_fill_14";
+"1781 masked_fill_14" -> "1783 masked_fill_15";
+"1782 eq_7" -> "1783 masked_fill_15";
+"1783 masked_fill_15" -> "1785 unsqueeze_46";
+"1784 view_85" -> "1787 add_53";
+"1785 unsqueeze_46" -> "1786 unsqueeze_47";
+"1786 unsqueeze_47" -> "1787 add_53";
+"1787 add_53" -> "1788 view_86";
+"1788 view_86" -> "1789 softmax_15";
+"1789 softmax_15" -> "1790 dropout_60";
+"1790 dropout_60" -> "1791 matmul_31";
+"1791 matmul_31" -> "1792 transpose_31";
+"1792 transpose_31" -> "1793 reshape_70";
+"1793 reshape_70" -> "1796 linear_95";
+"1794 _param_constant256" -> "1796 linear_95";
+"1795 _param_constant257" -> "1796 linear_95";
+"1796 linear_95" -> "1797 dropout_61";
+"1797 dropout_61" -> "1798 view_87";
+"1798 view_87" -> "1799 permute_72";
+"1799 permute_72" -> "1800 reshape_71";
+"1800 reshape_71" -> "1801 roll_15";
+"1801 roll_15" -> "1802 slice_241";
+"1802 slice_241" -> "1803 slice_242";
+"1803 slice_242" -> "1804 slice_243";
+"1804 slice_243" -> "1805 slice_244";
+"1805 slice_244" -> "1806 contiguous_29";
+"1806 contiguous_29" -> "1809 layer_norm_33";
+"1807 _param_constant258" -> "1809 layer_norm_33";
+"1808 _param_constant259" -> "1809 layer_norm_33";
+"1809 layer_norm_33" -> "1810 add_54";
+"1810 add_54" -> "1813 linear_96";
+"1810 add_54" -> "1823 add_55";
+"1811 _param_constant260" -> "1813 linear_96";
+"1812 _param_constant261" -> "1813 linear_96";
+"1813 linear_96" -> "1814 gelu_15";
+"1814 gelu_15" -> "1815 dropout_62";
+"1815 dropout_62" -> "1818 linear_97";
+"1816 _param_constant262" -> "1818 linear_97";
+"1817 _param_constant263" -> "1818 linear_97";
+"1818 linear_97" -> "1819 dropout_63";
+"1819 dropout_63" -> "1822 layer_norm_34";
+"1820 _param_constant264" -> "1822 layer_norm_34";
+"1821 _param_constant265" -> "1822 layer_norm_34";
+"1822 layer_norm_34" -> "1823 add_55";
+"1823 add_55" -> "1840 pad_18";
+"1823 add_55" -> "1890 add_57";
+"1824 _tensor_constant104" -> "1827 linear_98";
+"1825 _param_constant266" -> "1827 linear_98";
+"1826 _param_constant267" -> "1827 linear_98";
+"1827 linear_98" -> "1828 relu__16";
+"1828 relu__16" -> "1830 linear_99";
+"1829 _param_constant268" -> "1830 linear_99";
+"1830 linear_99" -> "1831 view_88";
+"1831 view_88" -> "1833 index_16";
+"1832 _tensor_constant105" -> "1833 index_16";
+"1833 index_16" -> "1834 view_89";
+"1834 view_89" -> "1835 permute_73";
+"1835 permute_73" -> "1836 contiguous_30";
+"1836 contiguous_30" -> "1837 unsqueeze_48";
+"1837 unsqueeze_48" -> "1838 sigmoid_16";
+"1838 sigmoid_16" -> "1839 mul_32";
+"1839 mul_32" -> "1869 add_56";
+"1840 pad_18" -> "1841 view_90";
+"1841 view_90" -> "1842 permute_74";
+"1842 permute_74" -> "1843 reshape_72";
+"1843 reshape_72" -> "1849 linear_100";
+"1844 _param_constant269" -> "1845 clone_16";
+"1845 clone_16" -> "1846 slice_245";
+"1845 clone_16" -> "1849 linear_100";
+"1846 slice_245" -> "1847 zero__16";
+"1848 _param_constant270" -> "1849 linear_100";
+"1849 linear_100" -> "1850 reshape_73";
+"1850 reshape_73" -> "1851 permute_75";
+"1851 permute_75" -> "1852 select_48";
+"1851 permute_75" -> "1853 select_49";
+"1851 permute_75" -> "1854 select_50";
+"1852 select_48" -> "1855 linalg_vector_norm_32";
+"1852 select_48" -> "1857 expand_as_32";
+"1852 select_48" -> "1858 div_32";
+"1853 select_49" -> "1859 linalg_vector_norm_33";
+"1853 select_49" -> "1861 expand_as_33";
+"1853 select_49" -> "1862 div_33";
+"1854 select_50" -> "1872 matmul_33";
+"1855 linalg_vector_norm_32" -> "1856 clamp_min_32";
+"1856 clamp_min_32" -> "1857 expand_as_32";
+"1857 expand_as_32" -> "1858 div_32";
+"1858 div_32" -> "1864 matmul_32";
+"1859 linalg_vector_norm_33" -> "1860 clamp_min_33";
+"1860 clamp_min_33" -> "1861 expand_as_33";
+"1861 expand_as_33" -> "1862 div_33";
+"1862 div_33" -> "1863 transpose_32";
+"1863 transpose_32" -> "1864 matmul_32";
+"1864 matmul_32" -> "1868 mul_33";
+"1865 _param_constant271" -> "1866 clamp_16";
+"1866 clamp_16" -> "1867 exp_16";
+"1867 exp_16" -> "1868 mul_33";
+"1868 mul_33" -> "1869 add_56";
+"1869 add_56" -> "1870 softmax_16";
+"1870 softmax_16" -> "1871 dropout_64";
+"1871 dropout_64" -> "1872 matmul_33";
+"1872 matmul_33" -> "1873 transpose_33";
+"1873 transpose_33" -> "1874 reshape_74";
+"1874 reshape_74" -> "1877 linear_101";
+"1875 _param_constant272" -> "1877 linear_101";
+"1876 _param_constant273" -> "1877 linear_101";
+"1877 linear_101" -> "1878 dropout_65";
+"1878 dropout_65" -> "1879 view_91";
+"1879 view_91" -> "1880 permute_76";
+"1880 permute_76" -> "1881 reshape_75";
+"1881 reshape_75" -> "1882 slice_246";
+"1882 slice_246" -> "1883 slice_247";
+"1883 slice_247" -> "1884 slice_248";
+"1884 slice_248" -> "1885 slice_249";
+"1885 slice_249" -> "1886 contiguous_31";
+"1886 contiguous_31" -> "1889 layer_norm_35";
+"1887 _param_constant274" -> "1889 layer_norm_35";
+"1888 _param_constant275" -> "1889 layer_norm_35";
+"1889 layer_norm_35" -> "1890 add_57";
+"1890 add_57" -> "1893 linear_102";
+"1890 add_57" -> "1903 add_58";
+"1891 _param_constant276" -> "1893 linear_102";
+"1892 _param_constant277" -> "1893 linear_102";
+"1893 linear_102" -> "1894 gelu_16";
+"1894 gelu_16" -> "1895 dropout_66";
+"1895 dropout_66" -> "1898 linear_103";
+"1896 _param_constant278" -> "1898 linear_103";
+"1897 _param_constant279" -> "1898 linear_103";
+"1898 linear_103" -> "1899 dropout_67";
+"1899 dropout_67" -> "1902 layer_norm_36";
+"1900 _param_constant280" -> "1902 layer_norm_36";
+"1901 _param_constant281" -> "1902 layer_norm_36";
+"1902 layer_norm_36" -> "1903 add_58";
+"1903 add_58" -> "1920 pad_19";
+"1903 add_58" -> "2033 add_61";
+"1904 _tensor_constant106" -> "1907 linear_104";
+"1905 _param_constant282" -> "1907 linear_104";
+"1906 _param_constant283" -> "1907 linear_104";
+"1907 linear_104" -> "1908 relu__17";
+"1908 relu__17" -> "1910 linear_105";
+"1909 _param_constant284" -> "1910 linear_105";
+"1910 linear_105" -> "1911 view_92";
+"1911 view_92" -> "1913 index_17";
+"1912 _tensor_constant107" -> "1913 index_17";
+"1913 index_17" -> "1914 view_93";
+"1914 view_93" -> "1915 permute_77";
+"1915 permute_77" -> "1916 contiguous_32";
+"1916 contiguous_32" -> "1917 unsqueeze_49";
+"1917 unsqueeze_49" -> "1918 sigmoid_17";
+"1918 sigmoid_17" -> "1919 mul_34";
+"1919 mul_34" -> "1950 add_59";
+"1920 pad_19" -> "1921 roll_16";
+"1921 roll_16" -> "1922 view_94";
+"1922 view_94" -> "1923 permute_78";
+"1923 permute_78" -> "1924 reshape_76";
+"1924 reshape_76" -> "1930 linear_106";
+"1924 reshape_76" -> "1951 new_zeros_8";
+"1925 _param_constant285" -> "1926 clone_17";
+"1926 clone_17" -> "1927 slice_250";
+"1926 clone_17" -> "1930 linear_106";
+"1927 slice_250" -> "1928 zero__17";
+"1929 _param_constant286" -> "1930 linear_106";
+"1930 linear_106" -> "1931 reshape_77";
+"1931 reshape_77" -> "1932 permute_79";
+"1932 permute_79" -> "1933 select_51";
+"1932 permute_79" -> "1934 select_52";
+"1932 permute_79" -> "1935 select_53";
+"1933 select_51" -> "1936 linalg_vector_norm_34";
+"1933 select_51" -> "1938 expand_as_34";
+"1933 select_51" -> "1939 div_34";
+"1934 select_52" -> "1940 linalg_vector_norm_35";
+"1934 select_52" -> "1942 expand_as_35";
+"1934 select_52" -> "1943 div_35";
+"1935 select_53" -> "2014 matmul_35";
+"1936 linalg_vector_norm_34" -> "1937 clamp_min_34";
+"1937 clamp_min_34" -> "1938 expand_as_34";
+"1938 expand_as_34" -> "1939 div_34";
+"1939 div_34" -> "1945 matmul_34";
+"1940 linalg_vector_norm_35" -> "1941 clamp_min_35";
+"1941 clamp_min_35" -> "1942 expand_as_35";
+"1942 expand_as_35" -> "1943 div_35";
+"1943 div_35" -> "1944 transpose_34";
+"1944 transpose_34" -> "1945 matmul_34";
+"1945 matmul_34" -> "1949 mul_35";
+"1946 _param_constant287" -> "1947 clamp_17";
+"1947 clamp_17" -> "1948 exp_17";
+"1948 exp_17" -> "1949 mul_35";
+"1949 mul_35" -> "1950 add_59";
+"1950 add_59" -> "2007 view_96";
+"1951 new_zeros_8" -> "1954 slice_251";
+"1951 new_zeros_8" -> "1959 slice_253";
+"1951 new_zeros_8" -> "1964 slice_255";
+"1951 new_zeros_8" -> "1969 slice_257";
+"1951 new_zeros_8" -> "1974 slice_259";
+"1951 new_zeros_8" -> "1979 slice_261";
+"1951 new_zeros_8" -> "1984 slice_263";
+"1951 new_zeros_8" -> "1989 slice_265";
+"1951 new_zeros_8" -> "1994 slice_267";
+"1951 new_zeros_8" -> "1997 view_95";
+"1952 _tensor_constant108" -> "1953 lift_fresh_copy_72";
+"1953 lift_fresh_copy_72" -> "1956 fill__72";
+"1954 slice_251" -> "1955 slice_252";
+"1955 slice_252" -> "1956 fill__72";
+"1957 _tensor_constant109" -> "1958 lift_fresh_copy_73";
+"1958 lift_fresh_copy_73" -> "1961 fill__73";
+"1959 slice_253" -> "1960 slice_254";
+"1960 slice_254" -> "1961 fill__73";
+"1962 _tensor_constant110" -> "1963 lift_fresh_copy_74";
+"1963 lift_fresh_copy_74" -> "1966 fill__74";
+"1964 slice_255" -> "1965 slice_256";
+"1965 slice_256" -> "1966 fill__74";
+"1967 _tensor_constant111" -> "1968 lift_fresh_copy_75";
+"1968 lift_fresh_copy_75" -> "1971 fill__75";
+"1969 slice_257" -> "1970 slice_258";
+"1970 slice_258" -> "1971 fill__75";
+"1972 _tensor_constant112" -> "1973 lift_fresh_copy_76";
+"1973 lift_fresh_copy_76" -> "1976 fill__76";
+"1974 slice_259" -> "1975 slice_260";
+"1975 slice_260" -> "1976 fill__76";
+"1977 _tensor_constant113" -> "1978 lift_fresh_copy_77";
+"1978 lift_fresh_copy_77" -> "1981 fill__77";
+"1979 slice_261" -> "1980 slice_262";
+"1980 slice_262" -> "1981 fill__77";
+"1982 _tensor_constant114" -> "1983 lift_fresh_copy_78";
+"1983 lift_fresh_copy_78" -> "1986 fill__78";
+"1984 slice_263" -> "1985 slice_264";
+"1985 slice_264" -> "1986 fill__78";
+"1987 _tensor_constant115" -> "1988 lift_fresh_copy_79";
+"1988 lift_fresh_copy_79" -> "1991 fill__79";
+"1989 slice_265" -> "1990 slice_266";
+"1990 slice_266" -> "1991 fill__79";
+"1992 _tensor_constant116" -> "1993 lift_fresh_copy_80";
+"1993 lift_fresh_copy_80" -> "1996 fill__80";
+"1994 slice_267" -> "1995 slice_268";
+"1995 slice_268" -> "1996 fill__80";
+"1997 view_95" -> "1998 permute_80";
+"1998 permute_80" -> "1999 reshape_78";
+"1999 reshape_78" -> "2000 unsqueeze_50";
+"1999 reshape_78" -> "2001 unsqueeze_51";
+"2000 unsqueeze_50" -> "2002 sub_8";
+"2001 unsqueeze_51" -> "2002 sub_8";
+"2002 sub_8" -> "2003 ne_8";
+"2002 sub_8" -> "2004 masked_fill_16";
+"2002 sub_8" -> "2005 eq_8";
+"2003 ne_8" -> "2004 masked_fill_16";
+"2004 masked_fill_16" -> "2006 masked_fill_17";
+"2005 eq_8" -> "2006 masked_fill_17";
+"2006 masked_fill_17" -> "2008 unsqueeze_52";
+"2007 view_96" -> "2010 add_60";
+"2008 unsqueeze_52" -> "2009 unsqueeze_53";
+"2009 unsqueeze_53" -> "2010 add_60";
+"2010 add_60" -> "2011 view_97";
+"2011 view_97" -> "2012 softmax_17";
+"2012 softmax_17" -> "2013 dropout_68";
+"2013 dropout_68" -> "2014 matmul_35";
+"2014 matmul_35" -> "2015 transpose_35";
+"2015 transpose_35" -> "2016 reshape_79";
+"2016 reshape_79" -> "2019 linear_107";
+"2017 _param_constant288" -> "2019 linear_107";
+"2018 _param_constant289" -> "2019 linear_107";
+"2019 linear_107" -> "2020 dropout_69";
+"2020 dropout_69" -> "2021 view_98";
+"2021 view_98" -> "2022 permute_81";
+"2022 permute_81" -> "2023 reshape_80";
+"2023 reshape_80" -> "2024 roll_17";
+"2024 roll_17" -> "2025 slice_269";
+"2025 slice_269" -> "2026 slice_270";
+"2026 slice_270" -> "2027 slice_271";
+"2027 slice_271" -> "2028 slice_272";
+"2028 slice_272" -> "2029 contiguous_33";
+"2029 contiguous_33" -> "2032 layer_norm_37";
+"2030 _param_constant290" -> "2032 layer_norm_37";
+"2031 _param_constant291" -> "2032 layer_norm_37";
+"2032 layer_norm_37" -> "2033 add_61";
+"2033 add_61" -> "2036 linear_108";
+"2033 add_61" -> "2046 add_62";
+"2034 _param_constant292" -> "2036 linear_108";
+"2035 _param_constant293" -> "2036 linear_108";
+"2036 linear_108" -> "2037 gelu_17";
+"2037 gelu_17" -> "2038 dropout_70";
+"2038 dropout_70" -> "2041 linear_109";
+"2039 _param_constant294" -> "2041 linear_109";
+"2040 _param_constant295" -> "2041 linear_109";
+"2041 linear_109" -> "2042 dropout_71";
+"2042 dropout_71" -> "2045 layer_norm_38";
+"2043 _param_constant296" -> "2045 layer_norm_38";
+"2044 _param_constant297" -> "2045 layer_norm_38";
+"2045 layer_norm_38" -> "2046 add_62";
+"2046 add_62" -> "2063 pad_20";
+"2046 add_62" -> "2113 add_64";
+"2047 _tensor_constant117" -> "2050 linear_110";
+"2048 _param_constant298" -> "2050 linear_110";
+"2049 _param_constant299" -> "2050 linear_110";
+"2050 linear_110" -> "2051 relu__18";
+"2051 relu__18" -> "2053 linear_111";
+"2052 _param_constant300" -> "2053 linear_111";
+"2053 linear_111" -> "2054 view_99";
+"2054 view_99" -> "2056 index_18";
+"2055 _tensor_constant118" -> "2056 index_18";
+"2056 index_18" -> "2057 view_100";
+"2057 view_100" -> "2058 permute_82";
+"2058 permute_82" -> "2059 contiguous_34";
+"2059 contiguous_34" -> "2060 unsqueeze_54";
+"2060 unsqueeze_54" -> "2061 sigmoid_18";
+"2061 sigmoid_18" -> "2062 mul_36";
+"2062 mul_36" -> "2092 add_63";
+"2063 pad_20" -> "2064 view_101";
+"2064 view_101" -> "2065 permute_83";
+"2065 permute_83" -> "2066 reshape_81";
+"2066 reshape_81" -> "2072 linear_112";
+"2067 _param_constant301" -> "2068 clone_18";
+"2068 clone_18" -> "2069 slice_273";
+"2068 clone_18" -> "2072 linear_112";
+"2069 slice_273" -> "2070 zero__18";
+"2071 _param_constant302" -> "2072 linear_112";
+"2072 linear_112" -> "2073 reshape_82";
+"2073 reshape_82" -> "2074 permute_84";
+"2074 permute_84" -> "2075 select_54";
+"2074 permute_84" -> "2076 select_55";
+"2074 permute_84" -> "2077 select_56";
+"2075 select_54" -> "2078 linalg_vector_norm_36";
+"2075 select_54" -> "2080 expand_as_36";
+"2075 select_54" -> "2081 div_36";
+"2076 select_55" -> "2082 linalg_vector_norm_37";
+"2076 select_55" -> "2084 expand_as_37";
+"2076 select_55" -> "2085 div_37";
+"2077 select_56" -> "2095 matmul_37";
+"2078 linalg_vector_norm_36" -> "2079 clamp_min_36";
+"2079 clamp_min_36" -> "2080 expand_as_36";
+"2080 expand_as_36" -> "2081 div_36";
+"2081 div_36" -> "2087 matmul_36";
+"2082 linalg_vector_norm_37" -> "2083 clamp_min_37";
+"2083 clamp_min_37" -> "2084 expand_as_37";
+"2084 expand_as_37" -> "2085 div_37";
+"2085 div_37" -> "2086 transpose_36";
+"2086 transpose_36" -> "2087 matmul_36";
+"2087 matmul_36" -> "2091 mul_37";
+"2088 _param_constant303" -> "2089 clamp_18";
+"2089 clamp_18" -> "2090 exp_18";
+"2090 exp_18" -> "2091 mul_37";
+"2091 mul_37" -> "2092 add_63";
+"2092 add_63" -> "2093 softmax_18";
+"2093 softmax_18" -> "2094 dropout_72";
+"2094 dropout_72" -> "2095 matmul_37";
+"2095 matmul_37" -> "2096 transpose_37";
+"2096 transpose_37" -> "2097 reshape_83";
+"2097 reshape_83" -> "2100 linear_113";
+"2098 _param_constant304" -> "2100 linear_113";
+"2099 _param_constant305" -> "2100 linear_113";
+"2100 linear_113" -> "2101 dropout_73";
+"2101 dropout_73" -> "2102 view_102";
+"2102 view_102" -> "2103 permute_85";
+"2103 permute_85" -> "2104 reshape_84";
+"2104 reshape_84" -> "2105 slice_274";
+"2105 slice_274" -> "2106 slice_275";
+"2106 slice_275" -> "2107 slice_276";
+"2107 slice_276" -> "2108 slice_277";
+"2108 slice_277" -> "2109 contiguous_35";
+"2109 contiguous_35" -> "2112 layer_norm_39";
+"2110 _param_constant306" -> "2112 layer_norm_39";
+"2111 _param_constant307" -> "2112 layer_norm_39";
+"2112 layer_norm_39" -> "2113 add_64";
+"2113 add_64" -> "2116 linear_114";
+"2113 add_64" -> "2126 add_65";
+"2114 _param_constant308" -> "2116 linear_114";
+"2115 _param_constant309" -> "2116 linear_114";
+"2116 linear_114" -> "2117 gelu_18";
+"2117 gelu_18" -> "2118 dropout_74";
+"2118 dropout_74" -> "2121 linear_115";
+"2119 _param_constant310" -> "2121 linear_115";
+"2120 _param_constant311" -> "2121 linear_115";
+"2121 linear_115" -> "2122 dropout_75";
+"2122 dropout_75" -> "2125 layer_norm_40";
+"2123 _param_constant312" -> "2125 layer_norm_40";
+"2124 _param_constant313" -> "2125 layer_norm_40";
+"2125 layer_norm_40" -> "2126 add_65";
+"2126 add_65" -> "2143 pad_21";
+"2126 add_65" -> "2256 add_68";
+"2127 _tensor_constant119" -> "2130 linear_116";
+"2128 _param_constant314" -> "2130 linear_116";
+"2129 _param_constant315" -> "2130 linear_116";
+"2130 linear_116" -> "2131 relu__19";
+"2131 relu__19" -> "2133 linear_117";
+"2132 _param_constant316" -> "2133 linear_117";
+"2133 linear_117" -> "2134 view_103";
+"2134 view_103" -> "2136 index_19";
+"2135 _tensor_constant120" -> "2136 index_19";
+"2136 index_19" -> "2137 view_104";
+"2137 view_104" -> "2138 permute_86";
+"2138 permute_86" -> "2139 contiguous_36";
+"2139 contiguous_36" -> "2140 unsqueeze_55";
+"2140 unsqueeze_55" -> "2141 sigmoid_19";
+"2141 sigmoid_19" -> "2142 mul_38";
+"2142 mul_38" -> "2173 add_66";
+"2143 pad_21" -> "2144 roll_18";
+"2144 roll_18" -> "2145 view_105";
+"2145 view_105" -> "2146 permute_87";
+"2146 permute_87" -> "2147 reshape_85";
+"2147 reshape_85" -> "2153 linear_118";
+"2147 reshape_85" -> "2174 new_zeros_9";
+"2148 _param_constant317" -> "2149 clone_19";
+"2149 clone_19" -> "2150 slice_278";
+"2149 clone_19" -> "2153 linear_118";
+"2150 slice_278" -> "2151 zero__19";
+"2152 _param_constant318" -> "2153 linear_118";
+"2153 linear_118" -> "2154 reshape_86";
+"2154 reshape_86" -> "2155 permute_88";
+"2155 permute_88" -> "2156 select_57";
+"2155 permute_88" -> "2157 select_58";
+"2155 permute_88" -> "2158 select_59";
+"2156 select_57" -> "2159 linalg_vector_norm_38";
+"2156 select_57" -> "2161 expand_as_38";
+"2156 select_57" -> "2162 div_38";
+"2157 select_58" -> "2163 linalg_vector_norm_39";
+"2157 select_58" -> "2165 expand_as_39";
+"2157 select_58" -> "2166 div_39";
+"2158 select_59" -> "2237 matmul_39";
+"2159 linalg_vector_norm_38" -> "2160 clamp_min_38";
+"2160 clamp_min_38" -> "2161 expand_as_38";
+"2161 expand_as_38" -> "2162 div_38";
+"2162 div_38" -> "2168 matmul_38";
+"2163 linalg_vector_norm_39" -> "2164 clamp_min_39";
+"2164 clamp_min_39" -> "2165 expand_as_39";
+"2165 expand_as_39" -> "2166 div_39";
+"2166 div_39" -> "2167 transpose_38";
+"2167 transpose_38" -> "2168 matmul_38";
+"2168 matmul_38" -> "2172 mul_39";
+"2169 _param_constant319" -> "2170 clamp_19";
+"2170 clamp_19" -> "2171 exp_19";
+"2171 exp_19" -> "2172 mul_39";
+"2172 mul_39" -> "2173 add_66";
+"2173 add_66" -> "2230 view_107";
+"2174 new_zeros_9" -> "2177 slice_279";
+"2174 new_zeros_9" -> "2182 slice_281";
+"2174 new_zeros_9" -> "2187 slice_283";
+"2174 new_zeros_9" -> "2192 slice_285";
+"2174 new_zeros_9" -> "2197 slice_287";
+"2174 new_zeros_9" -> "2202 slice_289";
+"2174 new_zeros_9" -> "2207 slice_291";
+"2174 new_zeros_9" -> "2212 slice_293";
+"2174 new_zeros_9" -> "2217 slice_295";
+"2174 new_zeros_9" -> "2220 view_106";
+"2175 _tensor_constant121" -> "2176 lift_fresh_copy_81";
+"2176 lift_fresh_copy_81" -> "2179 fill__81";
+"2177 slice_279" -> "2178 slice_280";
+"2178 slice_280" -> "2179 fill__81";
+"2180 _tensor_constant122" -> "2181 lift_fresh_copy_82";
+"2181 lift_fresh_copy_82" -> "2184 fill__82";
+"2182 slice_281" -> "2183 slice_282";
+"2183 slice_282" -> "2184 fill__82";
+"2185 _tensor_constant123" -> "2186 lift_fresh_copy_83";
+"2186 lift_fresh_copy_83" -> "2189 fill__83";
+"2187 slice_283" -> "2188 slice_284";
+"2188 slice_284" -> "2189 fill__83";
+"2190 _tensor_constant124" -> "2191 lift_fresh_copy_84";
+"2191 lift_fresh_copy_84" -> "2194 fill__84";
+"2192 slice_285" -> "2193 slice_286";
+"2193 slice_286" -> "2194 fill__84";
+"2195 _tensor_constant125" -> "2196 lift_fresh_copy_85";
+"2196 lift_fresh_copy_85" -> "2199 fill__85";
+"2197 slice_287" -> "2198 slice_288";
+"2198 slice_288" -> "2199 fill__85";
+"2200 _tensor_constant126" -> "2201 lift_fresh_copy_86";
+"2201 lift_fresh_copy_86" -> "2204 fill__86";
+"2202 slice_289" -> "2203 slice_290";
+"2203 slice_290" -> "2204 fill__86";
+"2205 _tensor_constant127" -> "2206 lift_fresh_copy_87";
+"2206 lift_fresh_copy_87" -> "2209 fill__87";
+"2207 slice_291" -> "2208 slice_292";
+"2208 slice_292" -> "2209 fill__87";
+"2210 _tensor_constant128" -> "2211 lift_fresh_copy_88";
+"2211 lift_fresh_copy_88" -> "2214 fill__88";
+"2212 slice_293" -> "2213 slice_294";
+"2213 slice_294" -> "2214 fill__88";
+"2215 _tensor_constant129" -> "2216 lift_fresh_copy_89";
+"2216 lift_fresh_copy_89" -> "2219 fill__89";
+"2217 slice_295" -> "2218 slice_296";
+"2218 slice_296" -> "2219 fill__89";
+"2220 view_106" -> "2221 permute_89";
+"2221 permute_89" -> "2222 reshape_87";
+"2222 reshape_87" -> "2223 unsqueeze_56";
+"2222 reshape_87" -> "2224 unsqueeze_57";
+"2223 unsqueeze_56" -> "2225 sub_9";
+"2224 unsqueeze_57" -> "2225 sub_9";
+"2225 sub_9" -> "2226 ne_9";
+"2225 sub_9" -> "2227 masked_fill_18";
+"2225 sub_9" -> "2228 eq_9";
+"2226 ne_9" -> "2227 masked_fill_18";
+"2227 masked_fill_18" -> "2229 masked_fill_19";
+"2228 eq_9" -> "2229 masked_fill_19";
+"2229 masked_fill_19" -> "2231 unsqueeze_58";
+"2230 view_107" -> "2233 add_67";
+"2231 unsqueeze_58" -> "2232 unsqueeze_59";
+"2232 unsqueeze_59" -> "2233 add_67";
+"2233 add_67" -> "2234 view_108";
+"2234 view_108" -> "2235 softmax_19";
+"2235 softmax_19" -> "2236 dropout_76";
+"2236 dropout_76" -> "2237 matmul_39";
+"2237 matmul_39" -> "2238 transpose_39";
+"2238 transpose_39" -> "2239 reshape_88";
+"2239 reshape_88" -> "2242 linear_119";
+"2240 _param_constant320" -> "2242 linear_119";
+"2241 _param_constant321" -> "2242 linear_119";
+"2242 linear_119" -> "2243 dropout_77";
+"2243 dropout_77" -> "2244 view_109";
+"2244 view_109" -> "2245 permute_90";
+"2245 permute_90" -> "2246 reshape_89";
+"2246 reshape_89" -> "2247 roll_19";
+"2247 roll_19" -> "2248 slice_297";
+"2248 slice_297" -> "2249 slice_298";
+"2249 slice_298" -> "2250 slice_299";
+"2250 slice_299" -> "2251 slice_300";
+"2251 slice_300" -> "2252 contiguous_37";
+"2252 contiguous_37" -> "2255 layer_norm_41";
+"2253 _param_constant322" -> "2255 layer_norm_41";
+"2254 _param_constant323" -> "2255 layer_norm_41";
+"2255 layer_norm_41" -> "2256 add_68";
+"2256 add_68" -> "2259 linear_120";
+"2256 add_68" -> "2269 add_69";
+"2257 _param_constant324" -> "2259 linear_120";
+"2258 _param_constant325" -> "2259 linear_120";
+"2259 linear_120" -> "2260 gelu_19";
+"2260 gelu_19" -> "2261 dropout_78";
+"2261 dropout_78" -> "2264 linear_121";
+"2262 _param_constant326" -> "2264 linear_121";
+"2263 _param_constant327" -> "2264 linear_121";
+"2264 linear_121" -> "2265 dropout_79";
+"2265 dropout_79" -> "2268 layer_norm_42";
+"2266 _param_constant328" -> "2268 layer_norm_42";
+"2267 _param_constant329" -> "2268 layer_norm_42";
+"2268 layer_norm_42" -> "2269 add_69";
+"2269 add_69" -> "2286 pad_22";
+"2269 add_69" -> "2336 add_71";
+"2270 _tensor_constant130" -> "2273 linear_122";
+"2271 _param_constant330" -> "2273 linear_122";
+"2272 _param_constant331" -> "2273 linear_122";
+"2273 linear_122" -> "2274 relu__20";
+"2274 relu__20" -> "2276 linear_123";
+"2275 _param_constant332" -> "2276 linear_123";
+"2276 linear_123" -> "2277 view_110";
+"2277 view_110" -> "2279 index_20";
+"2278 _tensor_constant131" -> "2279 index_20";
+"2279 index_20" -> "2280 view_111";
+"2280 view_111" -> "2281 permute_91";
+"2281 permute_91" -> "2282 contiguous_38";
+"2282 contiguous_38" -> "2283 unsqueeze_60";
+"2283 unsqueeze_60" -> "2284 sigmoid_20";
+"2284 sigmoid_20" -> "2285 mul_40";
+"2285 mul_40" -> "2315 add_70";
+"2286 pad_22" -> "2287 view_112";
+"2287 view_112" -> "2288 permute_92";
+"2288 permute_92" -> "2289 reshape_90";
+"2289 reshape_90" -> "2295 linear_124";
+"2290 _param_constant333" -> "2291 clone_20";
+"2291 clone_20" -> "2292 slice_301";
+"2291 clone_20" -> "2295 linear_124";
+"2292 slice_301" -> "2293 zero__20";
+"2294 _param_constant334" -> "2295 linear_124";
+"2295 linear_124" -> "2296 reshape_91";
+"2296 reshape_91" -> "2297 permute_93";
+"2297 permute_93" -> "2298 select_60";
+"2297 permute_93" -> "2299 select_61";
+"2297 permute_93" -> "2300 select_62";
+"2298 select_60" -> "2301 linalg_vector_norm_40";
+"2298 select_60" -> "2303 expand_as_40";
+"2298 select_60" -> "2304 div_40";
+"2299 select_61" -> "2305 linalg_vector_norm_41";
+"2299 select_61" -> "2307 expand_as_41";
+"2299 select_61" -> "2308 div_41";
+"2300 select_62" -> "2318 matmul_41";
+"2301 linalg_vector_norm_40" -> "2302 clamp_min_40";
+"2302 clamp_min_40" -> "2303 expand_as_40";
+"2303 expand_as_40" -> "2304 div_40";
+"2304 div_40" -> "2310 matmul_40";
+"2305 linalg_vector_norm_41" -> "2306 clamp_min_41";
+"2306 clamp_min_41" -> "2307 expand_as_41";
+"2307 expand_as_41" -> "2308 div_41";
+"2308 div_41" -> "2309 transpose_40";
+"2309 transpose_40" -> "2310 matmul_40";
+"2310 matmul_40" -> "2314 mul_41";
+"2311 _param_constant335" -> "2312 clamp_20";
+"2312 clamp_20" -> "2313 exp_20";
+"2313 exp_20" -> "2314 mul_41";
+"2314 mul_41" -> "2315 add_70";
+"2315 add_70" -> "2316 softmax_20";
+"2316 softmax_20" -> "2317 dropout_80";
+"2317 dropout_80" -> "2318 matmul_41";
+"2318 matmul_41" -> "2319 transpose_41";
+"2319 transpose_41" -> "2320 reshape_92";
+"2320 reshape_92" -> "2323 linear_125";
+"2321 _param_constant336" -> "2323 linear_125";
+"2322 _param_constant337" -> "2323 linear_125";
+"2323 linear_125" -> "2324 dropout_81";
+"2324 dropout_81" -> "2325 view_113";
+"2325 view_113" -> "2326 permute_94";
+"2326 permute_94" -> "2327 reshape_93";
+"2327 reshape_93" -> "2328 slice_302";
+"2328 slice_302" -> "2329 slice_303";
+"2329 slice_303" -> "2330 slice_304";
+"2330 slice_304" -> "2331 slice_305";
+"2331 slice_305" -> "2332 contiguous_39";
+"2332 contiguous_39" -> "2335 layer_norm_43";
+"2333 _param_constant338" -> "2335 layer_norm_43";
+"2334 _param_constant339" -> "2335 layer_norm_43";
+"2335 layer_norm_43" -> "2336 add_71";
+"2336 add_71" -> "2339 linear_126";
+"2336 add_71" -> "2349 add_72";
+"2337 _param_constant340" -> "2339 linear_126";
+"2338 _param_constant341" -> "2339 linear_126";
+"2339 linear_126" -> "2340 gelu_20";
+"2340 gelu_20" -> "2341 dropout_82";
+"2341 dropout_82" -> "2344 linear_127";
+"2342 _param_constant342" -> "2344 linear_127";
+"2343 _param_constant343" -> "2344 linear_127";
+"2344 linear_127" -> "2345 dropout_83";
+"2345 dropout_83" -> "2348 layer_norm_44";
+"2346 _param_constant344" -> "2348 layer_norm_44";
+"2347 _param_constant345" -> "2348 layer_norm_44";
+"2348 layer_norm_44" -> "2349 add_72";
+"2349 add_72" -> "2366 pad_23";
+"2349 add_72" -> "2479 add_75";
+"2350 _tensor_constant132" -> "2353 linear_128";
+"2351 _param_constant346" -> "2353 linear_128";
+"2352 _param_constant347" -> "2353 linear_128";
+"2353 linear_128" -> "2354 relu__21";
+"2354 relu__21" -> "2356 linear_129";
+"2355 _param_constant348" -> "2356 linear_129";
+"2356 linear_129" -> "2357 view_114";
+"2357 view_114" -> "2359 index_21";
+"2358 _tensor_constant133" -> "2359 index_21";
+"2359 index_21" -> "2360 view_115";
+"2360 view_115" -> "2361 permute_95";
+"2361 permute_95" -> "2362 contiguous_40";
+"2362 contiguous_40" -> "2363 unsqueeze_61";
+"2363 unsqueeze_61" -> "2364 sigmoid_21";
+"2364 sigmoid_21" -> "2365 mul_42";
+"2365 mul_42" -> "2396 add_73";
+"2366 pad_23" -> "2367 roll_20";
+"2367 roll_20" -> "2368 view_116";
+"2368 view_116" -> "2369 permute_96";
+"2369 permute_96" -> "2370 reshape_94";
+"2370 reshape_94" -> "2376 linear_130";
+"2370 reshape_94" -> "2397 new_zeros_10";
+"2371 _param_constant349" -> "2372 clone_21";
+"2372 clone_21" -> "2373 slice_306";
+"2372 clone_21" -> "2376 linear_130";
+"2373 slice_306" -> "2374 zero__21";
+"2375 _param_constant350" -> "2376 linear_130";
+"2376 linear_130" -> "2377 reshape_95";
+"2377 reshape_95" -> "2378 permute_97";
+"2378 permute_97" -> "2379 select_63";
+"2378 permute_97" -> "2380 select_64";
+"2378 permute_97" -> "2381 select_65";
+"2379 select_63" -> "2382 linalg_vector_norm_42";
+"2379 select_63" -> "2384 expand_as_42";
+"2379 select_63" -> "2385 div_42";
+"2380 select_64" -> "2386 linalg_vector_norm_43";
+"2380 select_64" -> "2388 expand_as_43";
+"2380 select_64" -> "2389 div_43";
+"2381 select_65" -> "2460 matmul_43";
+"2382 linalg_vector_norm_42" -> "2383 clamp_min_42";
+"2383 clamp_min_42" -> "2384 expand_as_42";
+"2384 expand_as_42" -> "2385 div_42";
+"2385 div_42" -> "2391 matmul_42";
+"2386 linalg_vector_norm_43" -> "2387 clamp_min_43";
+"2387 clamp_min_43" -> "2388 expand_as_43";
+"2388 expand_as_43" -> "2389 div_43";
+"2389 div_43" -> "2390 transpose_42";
+"2390 transpose_42" -> "2391 matmul_42";
+"2391 matmul_42" -> "2395 mul_43";
+"2392 _param_constant351" -> "2393 clamp_21";
+"2393 clamp_21" -> "2394 exp_21";
+"2394 exp_21" -> "2395 mul_43";
+"2395 mul_43" -> "2396 add_73";
+"2396 add_73" -> "2453 view_118";
+"2397 new_zeros_10" -> "2400 slice_307";
+"2397 new_zeros_10" -> "2405 slice_309";
+"2397 new_zeros_10" -> "2410 slice_311";
+"2397 new_zeros_10" -> "2415 slice_313";
+"2397 new_zeros_10" -> "2420 slice_315";
+"2397 new_zeros_10" -> "2425 slice_317";
+"2397 new_zeros_10" -> "2430 slice_319";
+"2397 new_zeros_10" -> "2435 slice_321";
+"2397 new_zeros_10" -> "2440 slice_323";
+"2397 new_zeros_10" -> "2443 view_117";
+"2398 _tensor_constant134" -> "2399 lift_fresh_copy_90";
+"2399 lift_fresh_copy_90" -> "2402 fill__90";
+"2400 slice_307" -> "2401 slice_308";
+"2401 slice_308" -> "2402 fill__90";
+"2403 _tensor_constant135" -> "2404 lift_fresh_copy_91";
+"2404 lift_fresh_copy_91" -> "2407 fill__91";
+"2405 slice_309" -> "2406 slice_310";
+"2406 slice_310" -> "2407 fill__91";
+"2408 _tensor_constant136" -> "2409 lift_fresh_copy_92";
+"2409 lift_fresh_copy_92" -> "2412 fill__92";
+"2410 slice_311" -> "2411 slice_312";
+"2411 slice_312" -> "2412 fill__92";
+"2413 _tensor_constant137" -> "2414 lift_fresh_copy_93";
+"2414 lift_fresh_copy_93" -> "2417 fill__93";
+"2415 slice_313" -> "2416 slice_314";
+"2416 slice_314" -> "2417 fill__93";
+"2418 _tensor_constant138" -> "2419 lift_fresh_copy_94";
+"2419 lift_fresh_copy_94" -> "2422 fill__94";
+"2420 slice_315" -> "2421 slice_316";
+"2421 slice_316" -> "2422 fill__94";
+"2423 _tensor_constant139" -> "2424 lift_fresh_copy_95";
+"2424 lift_fresh_copy_95" -> "2427 fill__95";
+"2425 slice_317" -> "2426 slice_318";
+"2426 slice_318" -> "2427 fill__95";
+"2428 _tensor_constant140" -> "2429 lift_fresh_copy_96";
+"2429 lift_fresh_copy_96" -> "2432 fill__96";
+"2430 slice_319" -> "2431 slice_320";
+"2431 slice_320" -> "2432 fill__96";
+"2433 _tensor_constant141" -> "2434 lift_fresh_copy_97";
+"2434 lift_fresh_copy_97" -> "2437 fill__97";
+"2435 slice_321" -> "2436 slice_322";
+"2436 slice_322" -> "2437 fill__97";
+"2438 _tensor_constant142" -> "2439 lift_fresh_copy_98";
+"2439 lift_fresh_copy_98" -> "2442 fill__98";
+"2440 slice_323" -> "2441 slice_324";
+"2441 slice_324" -> "2442 fill__98";
+"2443 view_117" -> "2444 permute_98";
+"2444 permute_98" -> "2445 reshape_96";
+"2445 reshape_96" -> "2446 unsqueeze_62";
+"2445 reshape_96" -> "2447 unsqueeze_63";
+"2446 unsqueeze_62" -> "2448 sub_10";
+"2447 unsqueeze_63" -> "2448 sub_10";
+"2448 sub_10" -> "2449 ne_10";
+"2448 sub_10" -> "2450 masked_fill_20";
+"2448 sub_10" -> "2451 eq_10";
+"2449 ne_10" -> "2450 masked_fill_20";
+"2450 masked_fill_20" -> "2452 masked_fill_21";
+"2451 eq_10" -> "2452 masked_fill_21";
+"2452 masked_fill_21" -> "2454 unsqueeze_64";
+"2453 view_118" -> "2456 add_74";
+"2454 unsqueeze_64" -> "2455 unsqueeze_65";
+"2455 unsqueeze_65" -> "2456 add_74";
+"2456 add_74" -> "2457 view_119";
+"2457 view_119" -> "2458 softmax_21";
+"2458 softmax_21" -> "2459 dropout_84";
+"2459 dropout_84" -> "2460 matmul_43";
+"2460 matmul_43" -> "2461 transpose_43";
+"2461 transpose_43" -> "2462 reshape_97";
+"2462 reshape_97" -> "2465 linear_131";
+"2463 _param_constant352" -> "2465 linear_131";
+"2464 _param_constant353" -> "2465 linear_131";
+"2465 linear_131" -> "2466 dropout_85";
+"2466 dropout_85" -> "2467 view_120";
+"2467 view_120" -> "2468 permute_99";
+"2468 permute_99" -> "2469 reshape_98";
+"2469 reshape_98" -> "2470 roll_21";
+"2470 roll_21" -> "2471 slice_325";
+"2471 slice_325" -> "2472 slice_326";
+"2472 slice_326" -> "2473 slice_327";
+"2473 slice_327" -> "2474 slice_328";
+"2474 slice_328" -> "2475 contiguous_41";
+"2475 contiguous_41" -> "2478 layer_norm_45";
+"2476 _param_constant354" -> "2478 layer_norm_45";
+"2477 _param_constant355" -> "2478 layer_norm_45";
+"2478 layer_norm_45" -> "2479 add_75";
+"2479 add_75" -> "2482 linear_132";
+"2479 add_75" -> "2492 add_76";
+"2480 _param_constant356" -> "2482 linear_132";
+"2481 _param_constant357" -> "2482 linear_132";
+"2482 linear_132" -> "2483 gelu_21";
+"2483 gelu_21" -> "2484 dropout_86";
+"2484 dropout_86" -> "2487 linear_133";
+"2485 _param_constant358" -> "2487 linear_133";
+"2486 _param_constant359" -> "2487 linear_133";
+"2487 linear_133" -> "2488 dropout_87";
+"2488 dropout_87" -> "2491 layer_norm_46";
+"2489 _param_constant360" -> "2491 layer_norm_46";
+"2490 _param_constant361" -> "2491 layer_norm_46";
+"2491 layer_norm_46" -> "2492 add_76";
+"2492 add_76" -> "2493 pad_24";
+"2493 pad_24" -> "2494 slice_329";
+"2493 pad_24" -> "2497 slice_332";
+"2493 pad_24" -> "2500 slice_335";
+"2493 pad_24" -> "2503 slice_338";
+"2494 slice_329" -> "2495 slice_330";
+"2495 slice_330" -> "2496 slice_331";
+"2496 slice_331" -> "2506 cat_2";
+"2497 slice_332" -> "2498 slice_333";
+"2498 slice_333" -> "2499 slice_334";
+"2499 slice_334" -> "2506 cat_2";
+"2500 slice_335" -> "2501 slice_336";
+"2501 slice_336" -> "2502 slice_337";
+"2502 slice_337" -> "2506 cat_2";
+"2503 slice_338" -> "2504 slice_339";
+"2504 slice_339" -> "2505 slice_340";
+"2505 slice_340" -> "2506 cat_2";
+"2506 cat_2" -> "2508 linear_134";
+"2507 _param_constant362" -> "2508 linear_134";
+"2508 linear_134" -> "2511 layer_norm_47";
+"2509 _param_constant363" -> "2511 layer_norm_47";
+"2510 _param_constant364" -> "2511 layer_norm_47";
+"2511 layer_norm_47" -> "2528 pad_25";
+"2511 layer_norm_47" -> "2578 add_78";
+"2512 _tensor_constant143" -> "2515 linear_135";
+"2513 _param_constant365" -> "2515 linear_135";
+"2514 _param_constant366" -> "2515 linear_135";
+"2515 linear_135" -> "2516 relu__22";
+"2516 relu__22" -> "2518 linear_136";
+"2517 _param_constant367" -> "2518 linear_136";
+"2518 linear_136" -> "2519 view_121";
+"2519 view_121" -> "2521 index_22";
+"2520 _tensor_constant144" -> "2521 index_22";
+"2521 index_22" -> "2522 view_122";
+"2522 view_122" -> "2523 permute_100";
+"2523 permute_100" -> "2524 contiguous_42";
+"2524 contiguous_42" -> "2525 unsqueeze_66";
+"2525 unsqueeze_66" -> "2526 sigmoid_22";
+"2526 sigmoid_22" -> "2527 mul_44";
+"2527 mul_44" -> "2557 add_77";
+"2528 pad_25" -> "2529 view_123";
+"2529 view_123" -> "2530 permute_101";
+"2530 permute_101" -> "2531 reshape_99";
+"2531 reshape_99" -> "2537 linear_137";
+"2532 _param_constant368" -> "2533 clone_22";
+"2533 clone_22" -> "2534 slice_341";
+"2533 clone_22" -> "2537 linear_137";
+"2534 slice_341" -> "2535 zero__22";
+"2536 _param_constant369" -> "2537 linear_137";
+"2537 linear_137" -> "2538 reshape_100";
+"2538 reshape_100" -> "2539 permute_102";
+"2539 permute_102" -> "2540 select_66";
+"2539 permute_102" -> "2541 select_67";
+"2539 permute_102" -> "2542 select_68";
+"2540 select_66" -> "2543 linalg_vector_norm_44";
+"2540 select_66" -> "2545 expand_as_44";
+"2540 select_66" -> "2546 div_44";
+"2541 select_67" -> "2547 linalg_vector_norm_45";
+"2541 select_67" -> "2549 expand_as_45";
+"2541 select_67" -> "2550 div_45";
+"2542 select_68" -> "2560 matmul_45";
+"2543 linalg_vector_norm_44" -> "2544 clamp_min_44";
+"2544 clamp_min_44" -> "2545 expand_as_44";
+"2545 expand_as_44" -> "2546 div_44";
+"2546 div_44" -> "2552 matmul_44";
+"2547 linalg_vector_norm_45" -> "2548 clamp_min_45";
+"2548 clamp_min_45" -> "2549 expand_as_45";
+"2549 expand_as_45" -> "2550 div_45";
+"2550 div_45" -> "2551 transpose_44";
+"2551 transpose_44" -> "2552 matmul_44";
+"2552 matmul_44" -> "2556 mul_45";
+"2553 _param_constant370" -> "2554 clamp_22";
+"2554 clamp_22" -> "2555 exp_22";
+"2555 exp_22" -> "2556 mul_45";
+"2556 mul_45" -> "2557 add_77";
+"2557 add_77" -> "2558 softmax_22";
+"2558 softmax_22" -> "2559 dropout_88";
+"2559 dropout_88" -> "2560 matmul_45";
+"2560 matmul_45" -> "2561 transpose_45";
+"2561 transpose_45" -> "2562 reshape_101";
+"2562 reshape_101" -> "2565 linear_138";
+"2563 _param_constant371" -> "2565 linear_138";
+"2564 _param_constant372" -> "2565 linear_138";
+"2565 linear_138" -> "2566 dropout_89";
+"2566 dropout_89" -> "2567 view_124";
+"2567 view_124" -> "2568 permute_103";
+"2568 permute_103" -> "2569 reshape_102";
+"2569 reshape_102" -> "2570 slice_342";
+"2570 slice_342" -> "2571 slice_343";
+"2571 slice_343" -> "2572 slice_344";
+"2572 slice_344" -> "2573 slice_345";
+"2573 slice_345" -> "2574 contiguous_43";
+"2574 contiguous_43" -> "2577 layer_norm_48";
+"2575 _param_constant373" -> "2577 layer_norm_48";
+"2576 _param_constant374" -> "2577 layer_norm_48";
+"2577 layer_norm_48" -> "2578 add_78";
+"2578 add_78" -> "2581 linear_139";
+"2578 add_78" -> "2591 add_79";
+"2579 _param_constant375" -> "2581 linear_139";
+"2580 _param_constant376" -> "2581 linear_139";
+"2581 linear_139" -> "2582 gelu_22";
+"2582 gelu_22" -> "2583 dropout_90";
+"2583 dropout_90" -> "2586 linear_140";
+"2584 _param_constant377" -> "2586 linear_140";
+"2585 _param_constant378" -> "2586 linear_140";
+"2586 linear_140" -> "2587 dropout_91";
+"2587 dropout_91" -> "2590 layer_norm_49";
+"2588 _param_constant379" -> "2590 layer_norm_49";
+"2589 _param_constant380" -> "2590 layer_norm_49";
+"2590 layer_norm_49" -> "2591 add_79";
+"2591 add_79" -> "2608 pad_26";
+"2591 add_79" -> "2658 add_81";
+"2592 _tensor_constant145" -> "2595 linear_141";
+"2593 _param_constant381" -> "2595 linear_141";
+"2594 _param_constant382" -> "2595 linear_141";
+"2595 linear_141" -> "2596 relu__23";
+"2596 relu__23" -> "2598 linear_142";
+"2597 _param_constant383" -> "2598 linear_142";
+"2598 linear_142" -> "2599 view_125";
+"2599 view_125" -> "2601 index_23";
+"2600 _tensor_constant146" -> "2601 index_23";
+"2601 index_23" -> "2602 view_126";
+"2602 view_126" -> "2603 permute_104";
+"2603 permute_104" -> "2604 contiguous_44";
+"2604 contiguous_44" -> "2605 unsqueeze_67";
+"2605 unsqueeze_67" -> "2606 sigmoid_23";
+"2606 sigmoid_23" -> "2607 mul_46";
+"2607 mul_46" -> "2637 add_80";
+"2608 pad_26" -> "2609 view_127";
+"2609 view_127" -> "2610 permute_105";
+"2610 permute_105" -> "2611 reshape_103";
+"2611 reshape_103" -> "2617 linear_143";
+"2612 _param_constant384" -> "2613 clone_23";
+"2613 clone_23" -> "2614 slice_346";
+"2613 clone_23" -> "2617 linear_143";
+"2614 slice_346" -> "2615 zero__23";
+"2616 _param_constant385" -> "2617 linear_143";
+"2617 linear_143" -> "2618 reshape_104";
+"2618 reshape_104" -> "2619 permute_106";
+"2619 permute_106" -> "2620 select_69";
+"2619 permute_106" -> "2621 select_70";
+"2619 permute_106" -> "2622 select_71";
+"2620 select_69" -> "2623 linalg_vector_norm_46";
+"2620 select_69" -> "2625 expand_as_46";
+"2620 select_69" -> "2626 div_46";
+"2621 select_70" -> "2627 linalg_vector_norm_47";
+"2621 select_70" -> "2629 expand_as_47";
+"2621 select_70" -> "2630 div_47";
+"2622 select_71" -> "2640 matmul_47";
+"2623 linalg_vector_norm_46" -> "2624 clamp_min_46";
+"2624 clamp_min_46" -> "2625 expand_as_46";
+"2625 expand_as_46" -> "2626 div_46";
+"2626 div_46" -> "2632 matmul_46";
+"2627 linalg_vector_norm_47" -> "2628 clamp_min_47";
+"2628 clamp_min_47" -> "2629 expand_as_47";
+"2629 expand_as_47" -> "2630 div_47";
+"2630 div_47" -> "2631 transpose_46";
+"2631 transpose_46" -> "2632 matmul_46";
+"2632 matmul_46" -> "2636 mul_47";
+"2633 _param_constant386" -> "2634 clamp_23";
+"2634 clamp_23" -> "2635 exp_23";
+"2635 exp_23" -> "2636 mul_47";
+"2636 mul_47" -> "2637 add_80";
+"2637 add_80" -> "2638 softmax_23";
+"2638 softmax_23" -> "2639 dropout_92";
+"2639 dropout_92" -> "2640 matmul_47";
+"2640 matmul_47" -> "2641 transpose_47";
+"2641 transpose_47" -> "2642 reshape_105";
+"2642 reshape_105" -> "2645 linear_144";
+"2643 _param_constant387" -> "2645 linear_144";
+"2644 _param_constant388" -> "2645 linear_144";
+"2645 linear_144" -> "2646 dropout_93";
+"2646 dropout_93" -> "2647 view_128";
+"2647 view_128" -> "2648 permute_107";
+"2648 permute_107" -> "2649 reshape_106";
+"2649 reshape_106" -> "2650 slice_347";
+"2650 slice_347" -> "2651 slice_348";
+"2651 slice_348" -> "2652 slice_349";
+"2652 slice_349" -> "2653 slice_350";
+"2653 slice_350" -> "2654 contiguous_45";
+"2654 contiguous_45" -> "2657 layer_norm_50";
+"2655 _param_constant389" -> "2657 layer_norm_50";
+"2656 _param_constant390" -> "2657 layer_norm_50";
+"2657 layer_norm_50" -> "2658 add_81";
+"2658 add_81" -> "2661 linear_145";
+"2658 add_81" -> "2671 add_82";
+"2659 _param_constant391" -> "2661 linear_145";
+"2660 _param_constant392" -> "2661 linear_145";
+"2661 linear_145" -> "2662 gelu_23";
+"2662 gelu_23" -> "2663 dropout_94";
+"2663 dropout_94" -> "2666 linear_146";
+"2664 _param_constant393" -> "2666 linear_146";
+"2665 _param_constant394" -> "2666 linear_146";
+"2666 linear_146" -> "2667 dropout_95";
+"2667 dropout_95" -> "2670 layer_norm_51";
+"2668 _param_constant395" -> "2670 layer_norm_51";
+"2669 _param_constant396" -> "2670 layer_norm_51";
+"2670 layer_norm_51" -> "2671 add_82";
+"2671 add_82" -> "2674 layer_norm_52";
+"2672 _param_constant397" -> "2674 layer_norm_52";
+"2673 _param_constant398" -> "2674 layer_norm_52";
+"2674 layer_norm_52" -> "2675 permute_108";
+"2675 permute_108" -> "2676 adaptive_avg_pool2d";
+"2676 adaptive_avg_pool2d" -> "2677 flatten";
+"2677 flatten" -> "2680 linear_147";
+"2678 _param_constant399" -> "2680 linear_147";
+"2679 _param_constant400" -> "2680 linear_147";
+"2680 linear_147" -> "2681 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/unet.dot b/tests/torch/data/reference_graphs/fx/unet.dot
new file mode 100644
index 00000000000..6033f629f24
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/unet.dot
@@ -0,0 +1,537 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 _param_constant0" [id=1, type=get_attr];
+"2 _param_constant1" [id=2, type=get_attr];
+"3 conv2d" [id=3, type=conv2d];
+"4 empty" [id=4, type=empty];
+"5 _param_constant2" [id=5, type=get_attr];
+"6 _param_constant3" [id=6, type=get_attr];
+"7 _tensor_constant0" [id=7, type=get_attr];
+"8 _tensor_constant1" [id=8, type=get_attr];
+"9 _native_batch_norm_legit_no_training" [id=9, type=_native_batch_norm_legit_no_training];
+"10 getitem" [id=10, type=__getitem__];
+"11 getitem_1" [id=11, type=__getitem__];
+"12 getitem_2" [id=12, type=__getitem__];
+"13 relu" [id=13, type=relu];
+"14 _param_constant4" [id=14, type=get_attr];
+"15 _param_constant5" [id=15, type=get_attr];
+"16 conv2d_1" [id=16, type=conv2d];
+"17 empty_1" [id=17, type=empty];
+"18 _param_constant6" [id=18, type=get_attr];
+"19 _param_constant7" [id=19, type=get_attr];
+"20 _tensor_constant2" [id=20, type=get_attr];
+"21 _tensor_constant3" [id=21, type=get_attr];
+"22 _native_batch_norm_legit_no_training_1" [id=22, type=_native_batch_norm_legit_no_training];
+"23 getitem_3" [id=23, type=__getitem__];
+"24 getitem_4" [id=24, type=__getitem__];
+"25 getitem_5" [id=25, type=__getitem__];
+"26 relu_1" [id=26, type=relu];
+"27 max_pool2d" [id=27, type=max_pool2d];
+"28 _param_constant8" [id=28, type=get_attr];
+"29 _param_constant9" [id=29, type=get_attr];
+"30 conv2d_2" [id=30, type=conv2d];
+"31 empty_2" [id=31, type=empty];
+"32 _param_constant10" [id=32, type=get_attr];
+"33 _param_constant11" [id=33, type=get_attr];
+"34 _tensor_constant4" [id=34, type=get_attr];
+"35 _tensor_constant5" [id=35, type=get_attr];
+"36 _native_batch_norm_legit_no_training_2" [id=36, type=_native_batch_norm_legit_no_training];
+"37 getitem_6" [id=37, type=__getitem__];
+"38 getitem_7" [id=38, type=__getitem__];
+"39 getitem_8" [id=39, type=__getitem__];
+"40 relu_2" [id=40, type=relu];
+"41 _param_constant12" [id=41, type=get_attr];
+"42 _param_constant13" [id=42, type=get_attr];
+"43 conv2d_3" [id=43, type=conv2d];
+"44 empty_3" [id=44, type=empty];
+"45 _param_constant14" [id=45, type=get_attr];
+"46 _param_constant15" [id=46, type=get_attr];
+"47 _tensor_constant6" [id=47, type=get_attr];
+"48 _tensor_constant7" [id=48, type=get_attr];
+"49 _native_batch_norm_legit_no_training_3" [id=49, type=_native_batch_norm_legit_no_training];
+"50 getitem_9" [id=50, type=__getitem__];
+"51 getitem_10" [id=51, type=__getitem__];
+"52 getitem_11" [id=52, type=__getitem__];
+"53 relu_3" [id=53, type=relu];
+"54 max_pool2d_1" [id=54, type=max_pool2d];
+"55 _param_constant16" [id=55, type=get_attr];
+"56 _param_constant17" [id=56, type=get_attr];
+"57 conv2d_4" [id=57, type=conv2d];
+"58 empty_4" [id=58, type=empty];
+"59 _param_constant18" [id=59, type=get_attr];
+"60 _param_constant19" [id=60, type=get_attr];
+"61 _tensor_constant8" [id=61, type=get_attr];
+"62 _tensor_constant9" [id=62, type=get_attr];
+"63 _native_batch_norm_legit_no_training_4" [id=63, type=_native_batch_norm_legit_no_training];
+"64 getitem_12" [id=64, type=__getitem__];
+"65 getitem_13" [id=65, type=__getitem__];
+"66 getitem_14" [id=66, type=__getitem__];
+"67 relu_4" [id=67, type=relu];
+"68 _param_constant20" [id=68, type=get_attr];
+"69 _param_constant21" [id=69, type=get_attr];
+"70 conv2d_5" [id=70, type=conv2d];
+"71 empty_5" [id=71, type=empty];
+"72 _param_constant22" [id=72, type=get_attr];
+"73 _param_constant23" [id=73, type=get_attr];
+"74 _tensor_constant10" [id=74, type=get_attr];
+"75 _tensor_constant11" [id=75, type=get_attr];
+"76 _native_batch_norm_legit_no_training_5" [id=76, type=_native_batch_norm_legit_no_training];
+"77 getitem_15" [id=77, type=__getitem__];
+"78 getitem_16" [id=78, type=__getitem__];
+"79 getitem_17" [id=79, type=__getitem__];
+"80 relu_5" [id=80, type=relu];
+"81 max_pool2d_2" [id=81, type=max_pool2d];
+"82 _param_constant24" [id=82, type=get_attr];
+"83 _param_constant25" [id=83, type=get_attr];
+"84 conv2d_6" [id=84, type=conv2d];
+"85 empty_6" [id=85, type=empty];
+"86 _param_constant26" [id=86, type=get_attr];
+"87 _param_constant27" [id=87, type=get_attr];
+"88 _tensor_constant12" [id=88, type=get_attr];
+"89 _tensor_constant13" [id=89, type=get_attr];
+"90 _native_batch_norm_legit_no_training_6" [id=90, type=_native_batch_norm_legit_no_training];
+"91 getitem_18" [id=91, type=__getitem__];
+"92 getitem_19" [id=92, type=__getitem__];
+"93 getitem_20" [id=93, type=__getitem__];
+"94 relu_6" [id=94, type=relu];
+"95 _param_constant28" [id=95, type=get_attr];
+"96 _param_constant29" [id=96, type=get_attr];
+"97 conv2d_7" [id=97, type=conv2d];
+"98 empty_7" [id=98, type=empty];
+"99 _param_constant30" [id=99, type=get_attr];
+"100 _param_constant31" [id=100, type=get_attr];
+"101 _tensor_constant14" [id=101, type=get_attr];
+"102 _tensor_constant15" [id=102, type=get_attr];
+"103 _native_batch_norm_legit_no_training_7" [id=103, type=_native_batch_norm_legit_no_training];
+"104 getitem_21" [id=104, type=__getitem__];
+"105 getitem_22" [id=105, type=__getitem__];
+"106 getitem_23" [id=106, type=__getitem__];
+"107 relu_7" [id=107, type=relu];
+"108 max_pool2d_3" [id=108, type=max_pool2d];
+"109 _param_constant32" [id=109, type=get_attr];
+"110 _param_constant33" [id=110, type=get_attr];
+"111 conv2d_8" [id=111, type=conv2d];
+"112 empty_8" [id=112, type=empty];
+"113 _param_constant34" [id=113, type=get_attr];
+"114 _param_constant35" [id=114, type=get_attr];
+"115 _tensor_constant16" [id=115, type=get_attr];
+"116 _tensor_constant17" [id=116, type=get_attr];
+"117 _native_batch_norm_legit_no_training_8" [id=117, type=_native_batch_norm_legit_no_training];
+"118 getitem_24" [id=118, type=__getitem__];
+"119 getitem_25" [id=119, type=__getitem__];
+"120 getitem_26" [id=120, type=__getitem__];
+"121 relu_8" [id=121, type=relu];
+"122 _param_constant36" [id=122, type=get_attr];
+"123 _param_constant37" [id=123, type=get_attr];
+"124 conv2d_9" [id=124, type=conv2d];
+"125 empty_9" [id=125, type=empty];
+"126 _param_constant38" [id=126, type=get_attr];
+"127 _param_constant39" [id=127, type=get_attr];
+"128 _tensor_constant18" [id=128, type=get_attr];
+"129 _tensor_constant19" [id=129, type=get_attr];
+"130 _native_batch_norm_legit_no_training_9" [id=130, type=_native_batch_norm_legit_no_training];
+"131 getitem_27" [id=131, type=__getitem__];
+"132 getitem_28" [id=132, type=__getitem__];
+"133 getitem_29" [id=133, type=__getitem__];
+"134 relu_9" [id=134, type=relu];
+"135 _param_constant40" [id=135, type=get_attr];
+"136 _param_constant41" [id=136, type=get_attr];
+"137 conv_transpose2d" [id=137, type=conv_transpose2d];
+"138 slice_1" [id=138, type=slice];
+"139 slice_2" [id=139, type=slice];
+"140 slice_3" [id=140, type=slice];
+"141 slice_4" [id=141, type=slice];
+"142 cat" [id=142, type=cat];
+"143 _param_constant42" [id=143, type=get_attr];
+"144 _param_constant43" [id=144, type=get_attr];
+"145 conv2d_10" [id=145, type=conv2d];
+"146 empty_10" [id=146, type=empty];
+"147 _param_constant44" [id=147, type=get_attr];
+"148 _param_constant45" [id=148, type=get_attr];
+"149 _tensor_constant20" [id=149, type=get_attr];
+"150 _tensor_constant21" [id=150, type=get_attr];
+"151 _native_batch_norm_legit_no_training_10" [id=151, type=_native_batch_norm_legit_no_training];
+"152 getitem_30" [id=152, type=__getitem__];
+"153 getitem_31" [id=153, type=__getitem__];
+"154 getitem_32" [id=154, type=__getitem__];
+"155 relu_10" [id=155, type=relu];
+"156 _param_constant46" [id=156, type=get_attr];
+"157 _param_constant47" [id=157, type=get_attr];
+"158 conv2d_11" [id=158, type=conv2d];
+"159 empty_11" [id=159, type=empty];
+"160 _param_constant48" [id=160, type=get_attr];
+"161 _param_constant49" [id=161, type=get_attr];
+"162 _tensor_constant22" [id=162, type=get_attr];
+"163 _tensor_constant23" [id=163, type=get_attr];
+"164 _native_batch_norm_legit_no_training_11" [id=164, type=_native_batch_norm_legit_no_training];
+"165 getitem_33" [id=165, type=__getitem__];
+"166 getitem_34" [id=166, type=__getitem__];
+"167 getitem_35" [id=167, type=__getitem__];
+"168 relu_11" [id=168, type=relu];
+"169 _param_constant50" [id=169, type=get_attr];
+"170 _param_constant51" [id=170, type=get_attr];
+"171 conv_transpose2d_1" [id=171, type=conv_transpose2d];
+"172 slice_5" [id=172, type=slice];
+"173 slice_6" [id=173, type=slice];
+"174 slice_7" [id=174, type=slice];
+"175 slice_8" [id=175, type=slice];
+"176 cat_1" [id=176, type=cat];
+"177 _param_constant52" [id=177, type=get_attr];
+"178 _param_constant53" [id=178, type=get_attr];
+"179 conv2d_12" [id=179, type=conv2d];
+"180 empty_12" [id=180, type=empty];
+"181 _param_constant54" [id=181, type=get_attr];
+"182 _param_constant55" [id=182, type=get_attr];
+"183 _tensor_constant24" [id=183, type=get_attr];
+"184 _tensor_constant25" [id=184, type=get_attr];
+"185 _native_batch_norm_legit_no_training_12" [id=185, type=_native_batch_norm_legit_no_training];
+"186 getitem_36" [id=186, type=__getitem__];
+"187 getitem_37" [id=187, type=__getitem__];
+"188 getitem_38" [id=188, type=__getitem__];
+"189 relu_12" [id=189, type=relu];
+"190 _param_constant56" [id=190, type=get_attr];
+"191 _param_constant57" [id=191, type=get_attr];
+"192 conv2d_13" [id=192, type=conv2d];
+"193 empty_13" [id=193, type=empty];
+"194 _param_constant58" [id=194, type=get_attr];
+"195 _param_constant59" [id=195, type=get_attr];
+"196 _tensor_constant26" [id=196, type=get_attr];
+"197 _tensor_constant27" [id=197, type=get_attr];
+"198 _native_batch_norm_legit_no_training_13" [id=198, type=_native_batch_norm_legit_no_training];
+"199 getitem_39" [id=199, type=__getitem__];
+"200 getitem_40" [id=200, type=__getitem__];
+"201 getitem_41" [id=201, type=__getitem__];
+"202 relu_13" [id=202, type=relu];
+"203 _param_constant60" [id=203, type=get_attr];
+"204 _param_constant61" [id=204, type=get_attr];
+"205 conv_transpose2d_2" [id=205, type=conv_transpose2d];
+"206 slice_9" [id=206, type=slice];
+"207 slice_10" [id=207, type=slice];
+"208 slice_11" [id=208, type=slice];
+"209 slice_12" [id=209, type=slice];
+"210 cat_2" [id=210, type=cat];
+"211 _param_constant62" [id=211, type=get_attr];
+"212 _param_constant63" [id=212, type=get_attr];
+"213 conv2d_14" [id=213, type=conv2d];
+"214 empty_14" [id=214, type=empty];
+"215 _param_constant64" [id=215, type=get_attr];
+"216 _param_constant65" [id=216, type=get_attr];
+"217 _tensor_constant28" [id=217, type=get_attr];
+"218 _tensor_constant29" [id=218, type=get_attr];
+"219 _native_batch_norm_legit_no_training_14" [id=219, type=_native_batch_norm_legit_no_training];
+"220 getitem_42" [id=220, type=__getitem__];
+"221 getitem_43" [id=221, type=__getitem__];
+"222 getitem_44" [id=222, type=__getitem__];
+"223 relu_14" [id=223, type=relu];
+"224 _param_constant66" [id=224, type=get_attr];
+"225 _param_constant67" [id=225, type=get_attr];
+"226 conv2d_15" [id=226, type=conv2d];
+"227 empty_15" [id=227, type=empty];
+"228 _param_constant68" [id=228, type=get_attr];
+"229 _param_constant69" [id=229, type=get_attr];
+"230 _tensor_constant30" [id=230, type=get_attr];
+"231 _tensor_constant31" [id=231, type=get_attr];
+"232 _native_batch_norm_legit_no_training_15" [id=232, type=_native_batch_norm_legit_no_training];
+"233 getitem_45" [id=233, type=__getitem__];
+"234 getitem_46" [id=234, type=__getitem__];
+"235 getitem_47" [id=235, type=__getitem__];
+"236 relu_15" [id=236, type=relu];
+"237 _param_constant70" [id=237, type=get_attr];
+"238 _param_constant71" [id=238, type=get_attr];
+"239 conv_transpose2d_3" [id=239, type=conv_transpose2d];
+"240 slice_13" [id=240, type=slice];
+"241 slice_14" [id=241, type=slice];
+"242 slice_15" [id=242, type=slice];
+"243 slice_16" [id=243, type=slice];
+"244 cat_3" [id=244, type=cat];
+"245 _param_constant72" [id=245, type=get_attr];
+"246 _param_constant73" [id=246, type=get_attr];
+"247 conv2d_16" [id=247, type=conv2d];
+"248 empty_16" [id=248, type=empty];
+"249 _param_constant74" [id=249, type=get_attr];
+"250 _param_constant75" [id=250, type=get_attr];
+"251 _tensor_constant32" [id=251, type=get_attr];
+"252 _tensor_constant33" [id=252, type=get_attr];
+"253 _native_batch_norm_legit_no_training_16" [id=253, type=_native_batch_norm_legit_no_training];
+"254 getitem_48" [id=254, type=__getitem__];
+"255 getitem_49" [id=255, type=__getitem__];
+"256 getitem_50" [id=256, type=__getitem__];
+"257 relu_16" [id=257, type=relu];
+"258 _param_constant76" [id=258, type=get_attr];
+"259 _param_constant77" [id=259, type=get_attr];
+"260 conv2d_17" [id=260, type=conv2d];
+"261 empty_17" [id=261, type=empty];
+"262 _param_constant78" [id=262, type=get_attr];
+"263 _param_constant79" [id=263, type=get_attr];
+"264 _tensor_constant34" [id=264, type=get_attr];
+"265 _tensor_constant35" [id=265, type=get_attr];
+"266 _native_batch_norm_legit_no_training_17" [id=266, type=_native_batch_norm_legit_no_training];
+"267 getitem_51" [id=267, type=__getitem__];
+"268 getitem_52" [id=268, type=__getitem__];
+"269 getitem_53" [id=269, type=__getitem__];
+"270 relu_17" [id=270, type=relu];
+"271 _param_constant80" [id=271, type=get_attr];
+"272 _param_constant81" [id=272, type=get_attr];
+"273 conv2d_18" [id=273, type=conv2d];
+"274 output" [id=274, type=output];
+"0 arg0_1" -> "3 conv2d";
+"1 _param_constant0" -> "3 conv2d";
+"2 _param_constant1" -> "3 conv2d";
+"3 conv2d" -> "9 _native_batch_norm_legit_no_training";
+"5 _param_constant2" -> "9 _native_batch_norm_legit_no_training";
+"6 _param_constant3" -> "9 _native_batch_norm_legit_no_training";
+"7 _tensor_constant0" -> "9 _native_batch_norm_legit_no_training";
+"8 _tensor_constant1" -> "9 _native_batch_norm_legit_no_training";
+"9 _native_batch_norm_legit_no_training" -> "10 getitem";
+"9 _native_batch_norm_legit_no_training" -> "11 getitem_1";
+"9 _native_batch_norm_legit_no_training" -> "12 getitem_2";
+"10 getitem" -> "13 relu";
+"13 relu" -> "16 conv2d_1";
+"14 _param_constant4" -> "16 conv2d_1";
+"15 _param_constant5" -> "16 conv2d_1";
+"16 conv2d_1" -> "22 _native_batch_norm_legit_no_training_1";
+"18 _param_constant6" -> "22 _native_batch_norm_legit_no_training_1";
+"19 _param_constant7" -> "22 _native_batch_norm_legit_no_training_1";
+"20 _tensor_constant2" -> "22 _native_batch_norm_legit_no_training_1";
+"21 _tensor_constant3" -> "22 _native_batch_norm_legit_no_training_1";
+"22 _native_batch_norm_legit_no_training_1" -> "23 getitem_3";
+"22 _native_batch_norm_legit_no_training_1" -> "24 getitem_4";
+"22 _native_batch_norm_legit_no_training_1" -> "25 getitem_5";
+"23 getitem_3" -> "26 relu_1";
+"26 relu_1" -> "27 max_pool2d";
+"26 relu_1" -> "240 slice_13";
+"27 max_pool2d" -> "30 conv2d_2";
+"28 _param_constant8" -> "30 conv2d_2";
+"29 _param_constant9" -> "30 conv2d_2";
+"30 conv2d_2" -> "36 _native_batch_norm_legit_no_training_2";
+"32 _param_constant10" -> "36 _native_batch_norm_legit_no_training_2";
+"33 _param_constant11" -> "36 _native_batch_norm_legit_no_training_2";
+"34 _tensor_constant4" -> "36 _native_batch_norm_legit_no_training_2";
+"35 _tensor_constant5" -> "36 _native_batch_norm_legit_no_training_2";
+"36 _native_batch_norm_legit_no_training_2" -> "37 getitem_6";
+"36 _native_batch_norm_legit_no_training_2" -> "38 getitem_7";
+"36 _native_batch_norm_legit_no_training_2" -> "39 getitem_8";
+"37 getitem_6" -> "40 relu_2";
+"40 relu_2" -> "43 conv2d_3";
+"41 _param_constant12" -> "43 conv2d_3";
+"42 _param_constant13" -> "43 conv2d_3";
+"43 conv2d_3" -> "49 _native_batch_norm_legit_no_training_3";
+"45 _param_constant14" -> "49 _native_batch_norm_legit_no_training_3";
+"46 _param_constant15" -> "49 _native_batch_norm_legit_no_training_3";
+"47 _tensor_constant6" -> "49 _native_batch_norm_legit_no_training_3";
+"48 _tensor_constant7" -> "49 _native_batch_norm_legit_no_training_3";
+"49 _native_batch_norm_legit_no_training_3" -> "50 getitem_9";
+"49 _native_batch_norm_legit_no_training_3" -> "51 getitem_10";
+"49 _native_batch_norm_legit_no_training_3" -> "52 getitem_11";
+"50 getitem_9" -> "53 relu_3";
+"53 relu_3" -> "54 max_pool2d_1";
+"53 relu_3" -> "206 slice_9";
+"54 max_pool2d_1" -> "57 conv2d_4";
+"55 _param_constant16" -> "57 conv2d_4";
+"56 _param_constant17" -> "57 conv2d_4";
+"57 conv2d_4" -> "63 _native_batch_norm_legit_no_training_4";
+"59 _param_constant18" -> "63 _native_batch_norm_legit_no_training_4";
+"60 _param_constant19" -> "63 _native_batch_norm_legit_no_training_4";
+"61 _tensor_constant8" -> "63 _native_batch_norm_legit_no_training_4";
+"62 _tensor_constant9" -> "63 _native_batch_norm_legit_no_training_4";
+"63 _native_batch_norm_legit_no_training_4" -> "64 getitem_12";
+"63 _native_batch_norm_legit_no_training_4" -> "65 getitem_13";
+"63 _native_batch_norm_legit_no_training_4" -> "66 getitem_14";
+"64 getitem_12" -> "67 relu_4";
+"67 relu_4" -> "70 conv2d_5";
+"68 _param_constant20" -> "70 conv2d_5";
+"69 _param_constant21" -> "70 conv2d_5";
+"70 conv2d_5" -> "76 _native_batch_norm_legit_no_training_5";
+"72 _param_constant22" -> "76 _native_batch_norm_legit_no_training_5";
+"73 _param_constant23" -> "76 _native_batch_norm_legit_no_training_5";
+"74 _tensor_constant10" -> "76 _native_batch_norm_legit_no_training_5";
+"75 _tensor_constant11" -> "76 _native_batch_norm_legit_no_training_5";
+"76 _native_batch_norm_legit_no_training_5" -> "77 getitem_15";
+"76 _native_batch_norm_legit_no_training_5" -> "78 getitem_16";
+"76 _native_batch_norm_legit_no_training_5" -> "79 getitem_17";
+"77 getitem_15" -> "80 relu_5";
+"80 relu_5" -> "81 max_pool2d_2";
+"80 relu_5" -> "172 slice_5";
+"81 max_pool2d_2" -> "84 conv2d_6";
+"82 _param_constant24" -> "84 conv2d_6";
+"83 _param_constant25" -> "84 conv2d_6";
+"84 conv2d_6" -> "90 _native_batch_norm_legit_no_training_6";
+"86 _param_constant26" -> "90 _native_batch_norm_legit_no_training_6";
+"87 _param_constant27" -> "90 _native_batch_norm_legit_no_training_6";
+"88 _tensor_constant12" -> "90 _native_batch_norm_legit_no_training_6";
+"89 _tensor_constant13" -> "90 _native_batch_norm_legit_no_training_6";
+"90 _native_batch_norm_legit_no_training_6" -> "91 getitem_18";
+"90 _native_batch_norm_legit_no_training_6" -> "92 getitem_19";
+"90 _native_batch_norm_legit_no_training_6" -> "93 getitem_20";
+"91 getitem_18" -> "94 relu_6";
+"94 relu_6" -> "97 conv2d_7";
+"95 _param_constant28" -> "97 conv2d_7";
+"96 _param_constant29" -> "97 conv2d_7";
+"97 conv2d_7" -> "103 _native_batch_norm_legit_no_training_7";
+"99 _param_constant30" -> "103 _native_batch_norm_legit_no_training_7";
+"100 _param_constant31" -> "103 _native_batch_norm_legit_no_training_7";
+"101 _tensor_constant14" -> "103 _native_batch_norm_legit_no_training_7";
+"102 _tensor_constant15" -> "103 _native_batch_norm_legit_no_training_7";
+"103 _native_batch_norm_legit_no_training_7" -> "104 getitem_21";
+"103 _native_batch_norm_legit_no_training_7" -> "105 getitem_22";
+"103 _native_batch_norm_legit_no_training_7" -> "106 getitem_23";
+"104 getitem_21" -> "107 relu_7";
+"107 relu_7" -> "108 max_pool2d_3";
+"107 relu_7" -> "138 slice_1";
+"108 max_pool2d_3" -> "111 conv2d_8";
+"109 _param_constant32" -> "111 conv2d_8";
+"110 _param_constant33" -> "111 conv2d_8";
+"111 conv2d_8" -> "117 _native_batch_norm_legit_no_training_8";
+"113 _param_constant34" -> "117 _native_batch_norm_legit_no_training_8";
+"114 _param_constant35" -> "117 _native_batch_norm_legit_no_training_8";
+"115 _tensor_constant16" -> "117 _native_batch_norm_legit_no_training_8";
+"116 _tensor_constant17" -> "117 _native_batch_norm_legit_no_training_8";
+"117 _native_batch_norm_legit_no_training_8" -> "118 getitem_24";
+"117 _native_batch_norm_legit_no_training_8" -> "119 getitem_25";
+"117 _native_batch_norm_legit_no_training_8" -> "120 getitem_26";
+"118 getitem_24" -> "121 relu_8";
+"121 relu_8" -> "124 conv2d_9";
+"122 _param_constant36" -> "124 conv2d_9";
+"123 _param_constant37" -> "124 conv2d_9";
+"124 conv2d_9" -> "130 _native_batch_norm_legit_no_training_9";
+"126 _param_constant38" -> "130 _native_batch_norm_legit_no_training_9";
+"127 _param_constant39" -> "130 _native_batch_norm_legit_no_training_9";
+"128 _tensor_constant18" -> "130 _native_batch_norm_legit_no_training_9";
+"129 _tensor_constant19" -> "130 _native_batch_norm_legit_no_training_9";
+"130 _native_batch_norm_legit_no_training_9" -> "131 getitem_27";
+"130 _native_batch_norm_legit_no_training_9" -> "132 getitem_28";
+"130 _native_batch_norm_legit_no_training_9" -> "133 getitem_29";
+"131 getitem_27" -> "134 relu_9";
+"134 relu_9" -> "137 conv_transpose2d";
+"135 _param_constant40" -> "137 conv_transpose2d";
+"136 _param_constant41" -> "137 conv_transpose2d";
+"137 conv_transpose2d" -> "142 cat";
+"138 slice_1" -> "139 slice_2";
+"139 slice_2" -> "140 slice_3";
+"140 slice_3" -> "141 slice_4";
+"141 slice_4" -> "142 cat";
+"142 cat" -> "145 conv2d_10";
+"143 _param_constant42" -> "145 conv2d_10";
+"144 _param_constant43" -> "145 conv2d_10";
+"145 conv2d_10" -> "151 _native_batch_norm_legit_no_training_10";
+"147 _param_constant44" -> "151 _native_batch_norm_legit_no_training_10";
+"148 _param_constant45" -> "151 _native_batch_norm_legit_no_training_10";
+"149 _tensor_constant20" -> "151 _native_batch_norm_legit_no_training_10";
+"150 _tensor_constant21" -> "151 _native_batch_norm_legit_no_training_10";
+"151 _native_batch_norm_legit_no_training_10" -> "152 getitem_30";
+"151 _native_batch_norm_legit_no_training_10" -> "153 getitem_31";
+"151 _native_batch_norm_legit_no_training_10" -> "154 getitem_32";
+"152 getitem_30" -> "155 relu_10";
+"155 relu_10" -> "158 conv2d_11";
+"156 _param_constant46" -> "158 conv2d_11";
+"157 _param_constant47" -> "158 conv2d_11";
+"158 conv2d_11" -> "164 _native_batch_norm_legit_no_training_11";
+"160 _param_constant48" -> "164 _native_batch_norm_legit_no_training_11";
+"161 _param_constant49" -> "164 _native_batch_norm_legit_no_training_11";
+"162 _tensor_constant22" -> "164 _native_batch_norm_legit_no_training_11";
+"163 _tensor_constant23" -> "164 _native_batch_norm_legit_no_training_11";
+"164 _native_batch_norm_legit_no_training_11" -> "165 getitem_33";
+"164 _native_batch_norm_legit_no_training_11" -> "166 getitem_34";
+"164 _native_batch_norm_legit_no_training_11" -> "167 getitem_35";
+"165 getitem_33" -> "168 relu_11";
+"168 relu_11" -> "171 conv_transpose2d_1";
+"169 _param_constant50" -> "171 conv_transpose2d_1";
+"170 _param_constant51" -> "171 conv_transpose2d_1";
+"171 conv_transpose2d_1" -> "176 cat_1";
+"172 slice_5" -> "173 slice_6";
+"173 slice_6" -> "174 slice_7";
+"174 slice_7" -> "175 slice_8";
+"175 slice_8" -> "176 cat_1";
+"176 cat_1" -> "179 conv2d_12";
+"177 _param_constant52" -> "179 conv2d_12";
+"178 _param_constant53" -> "179 conv2d_12";
+"179 conv2d_12" -> "185 _native_batch_norm_legit_no_training_12";
+"181 _param_constant54" -> "185 _native_batch_norm_legit_no_training_12";
+"182 _param_constant55" -> "185 _native_batch_norm_legit_no_training_12";
+"183 _tensor_constant24" -> "185 _native_batch_norm_legit_no_training_12";
+"184 _tensor_constant25" -> "185 _native_batch_norm_legit_no_training_12";
+"185 _native_batch_norm_legit_no_training_12" -> "186 getitem_36";
+"185 _native_batch_norm_legit_no_training_12" -> "187 getitem_37";
+"185 _native_batch_norm_legit_no_training_12" -> "188 getitem_38";
+"186 getitem_36" -> "189 relu_12";
+"189 relu_12" -> "192 conv2d_13";
+"190 _param_constant56" -> "192 conv2d_13";
+"191 _param_constant57" -> "192 conv2d_13";
+"192 conv2d_13" -> "198 _native_batch_norm_legit_no_training_13";
+"194 _param_constant58" -> "198 _native_batch_norm_legit_no_training_13";
+"195 _param_constant59" -> "198 _native_batch_norm_legit_no_training_13";
+"196 _tensor_constant26" -> "198 _native_batch_norm_legit_no_training_13";
+"197 _tensor_constant27" -> "198 _native_batch_norm_legit_no_training_13";
+"198 _native_batch_norm_legit_no_training_13" -> "199 getitem_39";
+"198 _native_batch_norm_legit_no_training_13" -> "200 getitem_40";
+"198 _native_batch_norm_legit_no_training_13" -> "201 getitem_41";
+"199 getitem_39" -> "202 relu_13";
+"202 relu_13" -> "205 conv_transpose2d_2";
+"203 _param_constant60" -> "205 conv_transpose2d_2";
+"204 _param_constant61" -> "205 conv_transpose2d_2";
+"205 conv_transpose2d_2" -> "210 cat_2";
+"206 slice_9" -> "207 slice_10";
+"207 slice_10" -> "208 slice_11";
+"208 slice_11" -> "209 slice_12";
+"209 slice_12" -> "210 cat_2";
+"210 cat_2" -> "213 conv2d_14";
+"211 _param_constant62" -> "213 conv2d_14";
+"212 _param_constant63" -> "213 conv2d_14";
+"213 conv2d_14" -> "219 _native_batch_norm_legit_no_training_14";
+"215 _param_constant64" -> "219 _native_batch_norm_legit_no_training_14";
+"216 _param_constant65" -> "219 _native_batch_norm_legit_no_training_14";
+"217 _tensor_constant28" -> "219 _native_batch_norm_legit_no_training_14";
+"218 _tensor_constant29" -> "219 _native_batch_norm_legit_no_training_14";
+"219 _native_batch_norm_legit_no_training_14" -> "220 getitem_42";
+"219 _native_batch_norm_legit_no_training_14" -> "221 getitem_43";
+"219 _native_batch_norm_legit_no_training_14" -> "222 getitem_44";
+"220 getitem_42" -> "223 relu_14";
+"223 relu_14" -> "226 conv2d_15";
+"224 _param_constant66" -> "226 conv2d_15";
+"225 _param_constant67" -> "226 conv2d_15";
+"226 conv2d_15" -> "232 _native_batch_norm_legit_no_training_15";
+"228 _param_constant68" -> "232 _native_batch_norm_legit_no_training_15";
+"229 _param_constant69" -> "232 _native_batch_norm_legit_no_training_15";
+"230 _tensor_constant30" -> "232 _native_batch_norm_legit_no_training_15";
+"231 _tensor_constant31" -> "232 _native_batch_norm_legit_no_training_15";
+"232 _native_batch_norm_legit_no_training_15" -> "233 getitem_45";
+"232 _native_batch_norm_legit_no_training_15" -> "234 getitem_46";
+"232 _native_batch_norm_legit_no_training_15" -> "235 getitem_47";
+"233 getitem_45" -> "236 relu_15";
+"236 relu_15" -> "239 conv_transpose2d_3";
+"237 _param_constant70" -> "239 conv_transpose2d_3";
+"238 _param_constant71" -> "239 conv_transpose2d_3";
+"239 conv_transpose2d_3" -> "244 cat_3";
+"240 slice_13" -> "241 slice_14";
+"241 slice_14" -> "242 slice_15";
+"242 slice_15" -> "243 slice_16";
+"243 slice_16" -> "244 cat_3";
+"244 cat_3" -> "247 conv2d_16";
+"245 _param_constant72" -> "247 conv2d_16";
+"246 _param_constant73" -> "247 conv2d_16";
+"247 conv2d_16" -> "253 _native_batch_norm_legit_no_training_16";
+"249 _param_constant74" -> "253 _native_batch_norm_legit_no_training_16";
+"250 _param_constant75" -> "253 _native_batch_norm_legit_no_training_16";
+"251 _tensor_constant32" -> "253 _native_batch_norm_legit_no_training_16";
+"252 _tensor_constant33" -> "253 _native_batch_norm_legit_no_training_16";
+"253 _native_batch_norm_legit_no_training_16" -> "254 getitem_48";
+"253 _native_batch_norm_legit_no_training_16" -> "255 getitem_49";
+"253 _native_batch_norm_legit_no_training_16" -> "256 getitem_50";
+"254 getitem_48" -> "257 relu_16";
+"257 relu_16" -> "260 conv2d_17";
+"258 _param_constant76" -> "260 conv2d_17";
+"259 _param_constant77" -> "260 conv2d_17";
+"260 conv2d_17" -> "266 _native_batch_norm_legit_no_training_17";
+"262 _param_constant78" -> "266 _native_batch_norm_legit_no_training_17";
+"263 _param_constant79" -> "266 _native_batch_norm_legit_no_training_17";
+"264 _tensor_constant34" -> "266 _native_batch_norm_legit_no_training_17";
+"265 _tensor_constant35" -> "266 _native_batch_norm_legit_no_training_17";
+"266 _native_batch_norm_legit_no_training_17" -> "267 getitem_51";
+"266 _native_batch_norm_legit_no_training_17" -> "268 getitem_52";
+"266 _native_batch_norm_legit_no_training_17" -> "269 getitem_53";
+"267 getitem_51" -> "270 relu_17";
+"270 relu_17" -> "273 conv2d_18";
+"271 _param_constant80" -> "273 conv2d_18";
+"272 _param_constant81" -> "273 conv2d_18";
+"273 conv2d_18" -> "274 output";
+}
diff --git a/tests/torch/data/reference_graphs/fx/vit_b_16.dot b/tests/torch/data/reference_graphs/fx/vit_b_16.dot
new file mode 100644
index 00000000000..70e71d5e8ce
--- /dev/null
+++ b/tests/torch/data/reference_graphs/fx/vit_b_16.dot
@@ -0,0 +1,1219 @@
+strict digraph {
+"0 arg0_1" [id=0, type=input];
+"1 _param_constant0" [id=1, type=get_attr];
+"2 _param_constant1" [id=2, type=get_attr];
+"3 conv2d" [id=3, type=conv2d];
+"4 reshape" [id=4, type=reshape];
+"5 permute" [id=5, type=permute];
+"6 _param_constant2" [id=6, type=get_attr];
+"7 expand" [id=7, type=expand];
+"8 cat" [id=8, type=cat];
+"9 _param_constant3" [id=9, type=get_attr];
+"10 add" [id=10, type=add];
+"11 dropout" [id=11, type=dropout];
+"12 _param_constant4" [id=12, type=get_attr];
+"13 _param_constant5" [id=13, type=get_attr];
+"14 layer_norm" [id=14, type=layer_norm];
+"15 transpose" [id=15, type=transpose];
+"16 _param_constant6" [id=16, type=get_attr];
+"17 _param_constant7" [id=17, type=get_attr];
+"18 linear" [id=18, type=linear];
+"19 unflatten" [id=19, type=unflatten];
+"20 unsqueeze" [id=20, type=unsqueeze];
+"21 transpose_1" [id=21, type=transpose];
+"22 squeeze" [id=22, type=squeeze];
+"23 contiguous" [id=23, type=contiguous];
+"24 select" [id=24, type=select];
+"25 select_1" [id=25, type=select];
+"26 select_2" [id=26, type=select];
+"27 view" [id=27, type=view];
+"28 transpose_2" [id=28, type=transpose];
+"29 view_1" [id=29, type=view];
+"30 transpose_3" [id=30, type=transpose];
+"31 view_2" [id=31, type=view];
+"32 transpose_4" [id=32, type=transpose];
+"33 view_3" [id=33, type=view];
+"34 view_4" [id=34, type=view];
+"35 view_5" [id=35, type=view];
+"36 scaled_dot_product_attention" [id=36, type=scaled_dot_product_attention];
+"37 permute_1" [id=37, type=permute];
+"38 view_6" [id=38, type=view];
+"39 _param_constant8" [id=39, type=get_attr];
+"40 _param_constant9" [id=40, type=get_attr];
+"41 linear_1" [id=41, type=linear];
+"42 view_7" [id=42, type=view];
+"43 transpose_5" [id=43, type=transpose];
+"44 dropout_1" [id=44, type=dropout];
+"45 add_1" [id=45, type=add];
+"46 _param_constant10" [id=46, type=get_attr];
+"47 _param_constant11" [id=47, type=get_attr];
+"48 layer_norm_1" [id=48, type=layer_norm];
+"49 _param_constant12" [id=49, type=get_attr];
+"50 _param_constant13" [id=50, type=get_attr];
+"51 linear_2" [id=51, type=linear];
+"52 gelu" [id=52, type=gelu];
+"53 dropout_2" [id=53, type=dropout];
+"54 _param_constant14" [id=54, type=get_attr];
+"55 _param_constant15" [id=55, type=get_attr];
+"56 linear_3" [id=56, type=linear];
+"57 dropout_3" [id=57, type=dropout];
+"58 add_2" [id=58, type=add];
+"59 _param_constant16" [id=59, type=get_attr];
+"60 _param_constant17" [id=60, type=get_attr];
+"61 layer_norm_2" [id=61, type=layer_norm];
+"62 transpose_6" [id=62, type=transpose];
+"63 _param_constant18" [id=63, type=get_attr];
+"64 _param_constant19" [id=64, type=get_attr];
+"65 linear_4" [id=65, type=linear];
+"66 unflatten_1" [id=66, type=unflatten];
+"67 unsqueeze_1" [id=67, type=unsqueeze];
+"68 transpose_7" [id=68, type=transpose];
+"69 squeeze_1" [id=69, type=squeeze];
+"70 contiguous_1" [id=70, type=contiguous];
+"71 select_3" [id=71, type=select];
+"72 select_4" [id=72, type=select];
+"73 select_5" [id=73, type=select];
+"74 view_8" [id=74, type=view];
+"75 transpose_8" [id=75, type=transpose];
+"76 view_9" [id=76, type=view];
+"77 transpose_9" [id=77, type=transpose];
+"78 view_10" [id=78, type=view];
+"79 transpose_10" [id=79, type=transpose];
+"80 view_11" [id=80, type=view];
+"81 view_12" [id=81, type=view];
+"82 view_13" [id=82, type=view];
+"83 scaled_dot_product_attention_1" [id=83, type=scaled_dot_product_attention];
+"84 permute_2" [id=84, type=permute];
+"85 view_14" [id=85, type=view];
+"86 _param_constant20" [id=86, type=get_attr];
+"87 _param_constant21" [id=87, type=get_attr];
+"88 linear_5" [id=88, type=linear];
+"89 view_15" [id=89, type=view];
+"90 transpose_11" [id=90, type=transpose];
+"91 dropout_4" [id=91, type=dropout];
+"92 add_3" [id=92, type=add];
+"93 _param_constant22" [id=93, type=get_attr];
+"94 _param_constant23" [id=94, type=get_attr];
+"95 layer_norm_3" [id=95, type=layer_norm];
+"96 _param_constant24" [id=96, type=get_attr];
+"97 _param_constant25" [id=97, type=get_attr];
+"98 linear_6" [id=98, type=linear];
+"99 gelu_1" [id=99, type=gelu];
+"100 dropout_5" [id=100, type=dropout];
+"101 _param_constant26" [id=101, type=get_attr];
+"102 _param_constant27" [id=102, type=get_attr];
+"103 linear_7" [id=103, type=linear];
+"104 dropout_6" [id=104, type=dropout];
+"105 add_4" [id=105, type=add];
+"106 _param_constant28" [id=106, type=get_attr];
+"107 _param_constant29" [id=107, type=get_attr];
+"108 layer_norm_4" [id=108, type=layer_norm];
+"109 transpose_12" [id=109, type=transpose];
+"110 _param_constant30" [id=110, type=get_attr];
+"111 _param_constant31" [id=111, type=get_attr];
+"112 linear_8" [id=112, type=linear];
+"113 unflatten_2" [id=113, type=unflatten];
+"114 unsqueeze_2" [id=114, type=unsqueeze];
+"115 transpose_13" [id=115, type=transpose];
+"116 squeeze_2" [id=116, type=squeeze];
+"117 contiguous_2" [id=117, type=contiguous];
+"118 select_6" [id=118, type=select];
+"119 select_7" [id=119, type=select];
+"120 select_8" [id=120, type=select];
+"121 view_16" [id=121, type=view];
+"122 transpose_14" [id=122, type=transpose];
+"123 view_17" [id=123, type=view];
+"124 transpose_15" [id=124, type=transpose];
+"125 view_18" [id=125, type=view];
+"126 transpose_16" [id=126, type=transpose];
+"127 view_19" [id=127, type=view];
+"128 view_20" [id=128, type=view];
+"129 view_21" [id=129, type=view];
+"130 scaled_dot_product_attention_2" [id=130, type=scaled_dot_product_attention];
+"131 permute_3" [id=131, type=permute];
+"132 view_22" [id=132, type=view];
+"133 _param_constant32" [id=133, type=get_attr];
+"134 _param_constant33" [id=134, type=get_attr];
+"135 linear_9" [id=135, type=linear];
+"136 view_23" [id=136, type=view];
+"137 transpose_17" [id=137, type=transpose];
+"138 dropout_7" [id=138, type=dropout];
+"139 add_5" [id=139, type=add];
+"140 _param_constant34" [id=140, type=get_attr];
+"141 _param_constant35" [id=141, type=get_attr];
+"142 layer_norm_5" [id=142, type=layer_norm];
+"143 _param_constant36" [id=143, type=get_attr];
+"144 _param_constant37" [id=144, type=get_attr];
+"145 linear_10" [id=145, type=linear];
+"146 gelu_2" [id=146, type=gelu];
+"147 dropout_8" [id=147, type=dropout];
+"148 _param_constant38" [id=148, type=get_attr];
+"149 _param_constant39" [id=149, type=get_attr];
+"150 linear_11" [id=150, type=linear];
+"151 dropout_9" [id=151, type=dropout];
+"152 add_6" [id=152, type=add];
+"153 _param_constant40" [id=153, type=get_attr];
+"154 _param_constant41" [id=154, type=get_attr];
+"155 layer_norm_6" [id=155, type=layer_norm];
+"156 transpose_18" [id=156, type=transpose];
+"157 _param_constant42" [id=157, type=get_attr];
+"158 _param_constant43" [id=158, type=get_attr];
+"159 linear_12" [id=159, type=linear];
+"160 unflatten_3" [id=160, type=unflatten];
+"161 unsqueeze_3" [id=161, type=unsqueeze];
+"162 transpose_19" [id=162, type=transpose];
+"163 squeeze_3" [id=163, type=squeeze];
+"164 contiguous_3" [id=164, type=contiguous];
+"165 select_9" [id=165, type=select];
+"166 select_10" [id=166, type=select];
+"167 select_11" [id=167, type=select];
+"168 view_24" [id=168, type=view];
+"169 transpose_20" [id=169, type=transpose];
+"170 view_25" [id=170, type=view];
+"171 transpose_21" [id=171, type=transpose];
+"172 view_26" [id=172, type=view];
+"173 transpose_22" [id=173, type=transpose];
+"174 view_27" [id=174, type=view];
+"175 view_28" [id=175, type=view];
+"176 view_29" [id=176, type=view];
+"177 scaled_dot_product_attention_3" [id=177, type=scaled_dot_product_attention];
+"178 permute_4" [id=178, type=permute];
+"179 view_30" [id=179, type=view];
+"180 _param_constant44" [id=180, type=get_attr];
+"181 _param_constant45" [id=181, type=get_attr];
+"182 linear_13" [id=182, type=linear];
+"183 view_31" [id=183, type=view];
+"184 transpose_23" [id=184, type=transpose];
+"185 dropout_10" [id=185, type=dropout];
+"186 add_7" [id=186, type=add];
+"187 _param_constant46" [id=187, type=get_attr];
+"188 _param_constant47" [id=188, type=get_attr];
+"189 layer_norm_7" [id=189, type=layer_norm];
+"190 _param_constant48" [id=190, type=get_attr];
+"191 _param_constant49" [id=191, type=get_attr];
+"192 linear_14" [id=192, type=linear];
+"193 gelu_3" [id=193, type=gelu];
+"194 dropout_11" [id=194, type=dropout];
+"195 _param_constant50" [id=195, type=get_attr];
+"196 _param_constant51" [id=196, type=get_attr];
+"197 linear_15" [id=197, type=linear];
+"198 dropout_12" [id=198, type=dropout];
+"199 add_8" [id=199, type=add];
+"200 _param_constant52" [id=200, type=get_attr];
+"201 _param_constant53" [id=201, type=get_attr];
+"202 layer_norm_8" [id=202, type=layer_norm];
+"203 transpose_24" [id=203, type=transpose];
+"204 _param_constant54" [id=204, type=get_attr];
+"205 _param_constant55" [id=205, type=get_attr];
+"206 linear_16" [id=206, type=linear];
+"207 unflatten_4" [id=207, type=unflatten];
+"208 unsqueeze_4" [id=208, type=unsqueeze];
+"209 transpose_25" [id=209, type=transpose];
+"210 squeeze_4" [id=210, type=squeeze];
+"211 contiguous_4" [id=211, type=contiguous];
+"212 select_12" [id=212, type=select];
+"213 select_13" [id=213, type=select];
+"214 select_14" [id=214, type=select];
+"215 view_32" [id=215, type=view];
+"216 transpose_26" [id=216, type=transpose];
+"217 view_33" [id=217, type=view];
+"218 transpose_27" [id=218, type=transpose];
+"219 view_34" [id=219, type=view];
+"220 transpose_28" [id=220, type=transpose];
+"221 view_35" [id=221, type=view];
+"222 view_36" [id=222, type=view];
+"223 view_37" [id=223, type=view];
+"224 scaled_dot_product_attention_4" [id=224, type=scaled_dot_product_attention];
+"225 permute_5" [id=225, type=permute];
+"226 view_38" [id=226, type=view];
+"227 _param_constant56" [id=227, type=get_attr];
+"228 _param_constant57" [id=228, type=get_attr];
+"229 linear_17" [id=229, type=linear];
+"230 view_39" [id=230, type=view];
+"231 transpose_29" [id=231, type=transpose];
+"232 dropout_13" [id=232, type=dropout];
+"233 add_9" [id=233, type=add];
+"234 _param_constant58" [id=234, type=get_attr];
+"235 _param_constant59" [id=235, type=get_attr];
+"236 layer_norm_9" [id=236, type=layer_norm];
+"237 _param_constant60" [id=237, type=get_attr];
+"238 _param_constant61" [id=238, type=get_attr];
+"239 linear_18" [id=239, type=linear];
+"240 gelu_4" [id=240, type=gelu];
+"241 dropout_14" [id=241, type=dropout];
+"242 _param_constant62" [id=242, type=get_attr];
+"243 _param_constant63" [id=243, type=get_attr];
+"244 linear_19" [id=244, type=linear];
+"245 dropout_15" [id=245, type=dropout];
+"246 add_10" [id=246, type=add];
+"247 _param_constant64" [id=247, type=get_attr];
+"248 _param_constant65" [id=248, type=get_attr];
+"249 layer_norm_10" [id=249, type=layer_norm];
+"250 transpose_30" [id=250, type=transpose];
+"251 _param_constant66" [id=251, type=get_attr];
+"252 _param_constant67" [id=252, type=get_attr];
+"253 linear_20" [id=253, type=linear];
+"254 unflatten_5" [id=254, type=unflatten];
+"255 unsqueeze_5" [id=255, type=unsqueeze];
+"256 transpose_31" [id=256, type=transpose];
+"257 squeeze_5" [id=257, type=squeeze];
+"258 contiguous_5" [id=258, type=contiguous];
+"259 select_15" [id=259, type=select];
+"260 select_16" [id=260, type=select];
+"261 select_17" [id=261, type=select];
+"262 view_40" [id=262, type=view];
+"263 transpose_32" [id=263, type=transpose];
+"264 view_41" [id=264, type=view];
+"265 transpose_33" [id=265, type=transpose];
+"266 view_42" [id=266, type=view];
+"267 transpose_34" [id=267, type=transpose];
+"268 view_43" [id=268, type=view];
+"269 view_44" [id=269, type=view];
+"270 view_45" [id=270, type=view];
+"271 scaled_dot_product_attention_5" [id=271, type=scaled_dot_product_attention];
+"272 permute_6" [id=272, type=permute];
+"273 view_46" [id=273, type=view];
+"274 _param_constant68" [id=274, type=get_attr];
+"275 _param_constant69" [id=275, type=get_attr];
+"276 linear_21" [id=276, type=linear];
+"277 view_47" [id=277, type=view];
+"278 transpose_35" [id=278, type=transpose];
+"279 dropout_16" [id=279, type=dropout];
+"280 add_11" [id=280, type=add];
+"281 _param_constant70" [id=281, type=get_attr];
+"282 _param_constant71" [id=282, type=get_attr];
+"283 layer_norm_11" [id=283, type=layer_norm];
+"284 _param_constant72" [id=284, type=get_attr];
+"285 _param_constant73" [id=285, type=get_attr];
+"286 linear_22" [id=286, type=linear];
+"287 gelu_5" [id=287, type=gelu];
+"288 dropout_17" [id=288, type=dropout];
+"289 _param_constant74" [id=289, type=get_attr];
+"290 _param_constant75" [id=290, type=get_attr];
+"291 linear_23" [id=291, type=linear];
+"292 dropout_18" [id=292, type=dropout];
+"293 add_12" [id=293, type=add];
+"294 _param_constant76" [id=294, type=get_attr];
+"295 _param_constant77" [id=295, type=get_attr];
+"296 layer_norm_12" [id=296, type=layer_norm];
+"297 transpose_36" [id=297, type=transpose];
+"298 _param_constant78" [id=298, type=get_attr];
+"299 _param_constant79" [id=299, type=get_attr];
+"300 linear_24" [id=300, type=linear];
+"301 unflatten_6" [id=301, type=unflatten];
+"302 unsqueeze_6" [id=302, type=unsqueeze];
+"303 transpose_37" [id=303, type=transpose];
+"304 squeeze_6" [id=304, type=squeeze];
+"305 contiguous_6" [id=305, type=contiguous];
+"306 select_18" [id=306, type=select];
+"307 select_19" [id=307, type=select];
+"308 select_20" [id=308, type=select];
+"309 view_48" [id=309, type=view];
+"310 transpose_38" [id=310, type=transpose];
+"311 view_49" [id=311, type=view];
+"312 transpose_39" [id=312, type=transpose];
+"313 view_50" [id=313, type=view];
+"314 transpose_40" [id=314, type=transpose];
+"315 view_51" [id=315, type=view];
+"316 view_52" [id=316, type=view];
+"317 view_53" [id=317, type=view];
+"318 scaled_dot_product_attention_6" [id=318, type=scaled_dot_product_attention];
+"319 permute_7" [id=319, type=permute];
+"320 view_54" [id=320, type=view];
+"321 _param_constant80" [id=321, type=get_attr];
+"322 _param_constant81" [id=322, type=get_attr];
+"323 linear_25" [id=323, type=linear];
+"324 view_55" [id=324, type=view];
+"325 transpose_41" [id=325, type=transpose];
+"326 dropout_19" [id=326, type=dropout];
+"327 add_13" [id=327, type=add];
+"328 _param_constant82" [id=328, type=get_attr];
+"329 _param_constant83" [id=329, type=get_attr];
+"330 layer_norm_13" [id=330, type=layer_norm];
+"331 _param_constant84" [id=331, type=get_attr];
+"332 _param_constant85" [id=332, type=get_attr];
+"333 linear_26" [id=333, type=linear];
+"334 gelu_6" [id=334, type=gelu];
+"335 dropout_20" [id=335, type=dropout];
+"336 _param_constant86" [id=336, type=get_attr];
+"337 _param_constant87" [id=337, type=get_attr];
+"338 linear_27" [id=338, type=linear];
+"339 dropout_21" [id=339, type=dropout];
+"340 add_14" [id=340, type=add];
+"341 _param_constant88" [id=341, type=get_attr];
+"342 _param_constant89" [id=342, type=get_attr];
+"343 layer_norm_14" [id=343, type=layer_norm];
+"344 transpose_42" [id=344, type=transpose];
+"345 _param_constant90" [id=345, type=get_attr];
+"346 _param_constant91" [id=346, type=get_attr];
+"347 linear_28" [id=347, type=linear];
+"348 unflatten_7" [id=348, type=unflatten];
+"349 unsqueeze_7" [id=349, type=unsqueeze];
+"350 transpose_43" [id=350, type=transpose];
+"351 squeeze_7" [id=351, type=squeeze];
+"352 contiguous_7" [id=352, type=contiguous];
+"353 select_21" [id=353, type=select];
+"354 select_22" [id=354, type=select];
+"355 select_23" [id=355, type=select];
+"356 view_56" [id=356, type=view];
+"357 transpose_44" [id=357, type=transpose];
+"358 view_57" [id=358, type=view];
+"359 transpose_45" [id=359, type=transpose];
+"360 view_58" [id=360, type=view];
+"361 transpose_46" [id=361, type=transpose];
+"362 view_59" [id=362, type=view];
+"363 view_60" [id=363, type=view];
+"364 view_61" [id=364, type=view];
+"365 scaled_dot_product_attention_7" [id=365, type=scaled_dot_product_attention];
+"366 permute_8" [id=366, type=permute];
+"367 view_62" [id=367, type=view];
+"368 _param_constant92" [id=368, type=get_attr];
+"369 _param_constant93" [id=369, type=get_attr];
+"370 linear_29" [id=370, type=linear];
+"371 view_63" [id=371, type=view];
+"372 transpose_47" [id=372, type=transpose];
+"373 dropout_22" [id=373, type=dropout];
+"374 add_15" [id=374, type=add];
+"375 _param_constant94" [id=375, type=get_attr];
+"376 _param_constant95" [id=376, type=get_attr];
+"377 layer_norm_15" [id=377, type=layer_norm];
+"378 _param_constant96" [id=378, type=get_attr];
+"379 _param_constant97" [id=379, type=get_attr];
+"380 linear_30" [id=380, type=linear];
+"381 gelu_7" [id=381, type=gelu];
+"382 dropout_23" [id=382, type=dropout];
+"383 _param_constant98" [id=383, type=get_attr];
+"384 _param_constant99" [id=384, type=get_attr];
+"385 linear_31" [id=385, type=linear];
+"386 dropout_24" [id=386, type=dropout];
+"387 add_16" [id=387, type=add];
+"388 _param_constant100" [id=388, type=get_attr];
+"389 _param_constant101" [id=389, type=get_attr];
+"390 layer_norm_16" [id=390, type=layer_norm];
+"391 transpose_48" [id=391, type=transpose];
+"392 _param_constant102" [id=392, type=get_attr];
+"393 _param_constant103" [id=393, type=get_attr];
+"394 linear_32" [id=394, type=linear];
+"395 unflatten_8" [id=395, type=unflatten];
+"396 unsqueeze_8" [id=396, type=unsqueeze];
+"397 transpose_49" [id=397, type=transpose];
+"398 squeeze_8" [id=398, type=squeeze];
+"399 contiguous_8" [id=399, type=contiguous];
+"400 select_24" [id=400, type=select];
+"401 select_25" [id=401, type=select];
+"402 select_26" [id=402, type=select];
+"403 view_64" [id=403, type=view];
+"404 transpose_50" [id=404, type=transpose];
+"405 view_65" [id=405, type=view];
+"406 transpose_51" [id=406, type=transpose];
+"407 view_66" [id=407, type=view];
+"408 transpose_52" [id=408, type=transpose];
+"409 view_67" [id=409, type=view];
+"410 view_68" [id=410, type=view];
+"411 view_69" [id=411, type=view];
+"412 scaled_dot_product_attention_8" [id=412, type=scaled_dot_product_attention];
+"413 permute_9" [id=413, type=permute];
+"414 view_70" [id=414, type=view];
+"415 _param_constant104" [id=415, type=get_attr];
+"416 _param_constant105" [id=416, type=get_attr];
+"417 linear_33" [id=417, type=linear];
+"418 view_71" [id=418, type=view];
+"419 transpose_53" [id=419, type=transpose];
+"420 dropout_25" [id=420, type=dropout];
+"421 add_17" [id=421, type=add];
+"422 _param_constant106" [id=422, type=get_attr];
+"423 _param_constant107" [id=423, type=get_attr];
+"424 layer_norm_17" [id=424, type=layer_norm];
+"425 _param_constant108" [id=425, type=get_attr];
+"426 _param_constant109" [id=426, type=get_attr];
+"427 linear_34" [id=427, type=linear];
+"428 gelu_8" [id=428, type=gelu];
+"429 dropout_26" [id=429, type=dropout];
+"430 _param_constant110" [id=430, type=get_attr];
+"431 _param_constant111" [id=431, type=get_attr];
+"432 linear_35" [id=432, type=linear];
+"433 dropout_27" [id=433, type=dropout];
+"434 add_18" [id=434, type=add];
+"435 _param_constant112" [id=435, type=get_attr];
+"436 _param_constant113" [id=436, type=get_attr];
+"437 layer_norm_18" [id=437, type=layer_norm];
+"438 transpose_54" [id=438, type=transpose];
+"439 _param_constant114" [id=439, type=get_attr];
+"440 _param_constant115" [id=440, type=get_attr];
+"441 linear_36" [id=441, type=linear];
+"442 unflatten_9" [id=442, type=unflatten];
+"443 unsqueeze_9" [id=443, type=unsqueeze];
+"444 transpose_55" [id=444, type=transpose];
+"445 squeeze_9" [id=445, type=squeeze];
+"446 contiguous_9" [id=446, type=contiguous];
+"447 select_27" [id=447, type=select];
+"448 select_28" [id=448, type=select];
+"449 select_29" [id=449, type=select];
+"450 view_72" [id=450, type=view];
+"451 transpose_56" [id=451, type=transpose];
+"452 view_73" [id=452, type=view];
+"453 transpose_57" [id=453, type=transpose];
+"454 view_74" [id=454, type=view];
+"455 transpose_58" [id=455, type=transpose];
+"456 view_75" [id=456, type=view];
+"457 view_76" [id=457, type=view];
+"458 view_77" [id=458, type=view];
+"459 scaled_dot_product_attention_9" [id=459, type=scaled_dot_product_attention];
+"460 permute_10" [id=460, type=permute];
+"461 view_78" [id=461, type=view];
+"462 _param_constant116" [id=462, type=get_attr];
+"463 _param_constant117" [id=463, type=get_attr];
+"464 linear_37" [id=464, type=linear];
+"465 view_79" [id=465, type=view];
+"466 transpose_59" [id=466, type=transpose];
+"467 dropout_28" [id=467, type=dropout];
+"468 add_19" [id=468, type=add];
+"469 _param_constant118" [id=469, type=get_attr];
+"470 _param_constant119" [id=470, type=get_attr];
+"471 layer_norm_19" [id=471, type=layer_norm];
+"472 _param_constant120" [id=472, type=get_attr];
+"473 _param_constant121" [id=473, type=get_attr];
+"474 linear_38" [id=474, type=linear];
+"475 gelu_9" [id=475, type=gelu];
+"476 dropout_29" [id=476, type=dropout];
+"477 _param_constant122" [id=477, type=get_attr];
+"478 _param_constant123" [id=478, type=get_attr];
+"479 linear_39" [id=479, type=linear];
+"480 dropout_30" [id=480, type=dropout];
+"481 add_20" [id=481, type=add];
+"482 _param_constant124" [id=482, type=get_attr];
+"483 _param_constant125" [id=483, type=get_attr];
+"484 layer_norm_20" [id=484, type=layer_norm];
+"485 transpose_60" [id=485, type=transpose];
+"486 _param_constant126" [id=486, type=get_attr];
+"487 _param_constant127" [id=487, type=get_attr];
+"488 linear_40" [id=488, type=linear];
+"489 unflatten_10" [id=489, type=unflatten];
+"490 unsqueeze_10" [id=490, type=unsqueeze];
+"491 transpose_61" [id=491, type=transpose];
+"492 squeeze_10" [id=492, type=squeeze];
+"493 contiguous_10" [id=493, type=contiguous];
+"494 select_30" [id=494, type=select];
+"495 select_31" [id=495, type=select];
+"496 select_32" [id=496, type=select];
+"497 view_80" [id=497, type=view];
+"498 transpose_62" [id=498, type=transpose];
+"499 view_81" [id=499, type=view];
+"500 transpose_63" [id=500, type=transpose];
+"501 view_82" [id=501, type=view];
+"502 transpose_64" [id=502, type=transpose];
+"503 view_83" [id=503, type=view];
+"504 view_84" [id=504, type=view];
+"505 view_85" [id=505, type=view];
+"506 scaled_dot_product_attention_10" [id=506, type=scaled_dot_product_attention];
+"507 permute_11" [id=507, type=permute];
+"508 view_86" [id=508, type=view];
+"509 _param_constant128" [id=509, type=get_attr];
+"510 _param_constant129" [id=510, type=get_attr];
+"511 linear_41" [id=511, type=linear];
+"512 view_87" [id=512, type=view];
+"513 transpose_65" [id=513, type=transpose];
+"514 dropout_31" [id=514, type=dropout];
+"515 add_21" [id=515, type=add];
+"516 _param_constant130" [id=516, type=get_attr];
+"517 _param_constant131" [id=517, type=get_attr];
+"518 layer_norm_21" [id=518, type=layer_norm];
+"519 _param_constant132" [id=519, type=get_attr];
+"520 _param_constant133" [id=520, type=get_attr];
+"521 linear_42" [id=521, type=linear];
+"522 gelu_10" [id=522, type=gelu];
+"523 dropout_32" [id=523, type=dropout];
+"524 _param_constant134" [id=524, type=get_attr];
+"525 _param_constant135" [id=525, type=get_attr];
+"526 linear_43" [id=526, type=linear];
+"527 dropout_33" [id=527, type=dropout];
+"528 add_22" [id=528, type=add];
+"529 _param_constant136" [id=529, type=get_attr];
+"530 _param_constant137" [id=530, type=get_attr];
+"531 layer_norm_22" [id=531, type=layer_norm];
+"532 transpose_66" [id=532, type=transpose];
+"533 _param_constant138" [id=533, type=get_attr];
+"534 _param_constant139" [id=534, type=get_attr];
+"535 linear_44" [id=535, type=linear];
+"536 unflatten_11" [id=536, type=unflatten];
+"537 unsqueeze_11" [id=537, type=unsqueeze];
+"538 transpose_67" [id=538, type=transpose];
+"539 squeeze_11" [id=539, type=squeeze];
+"540 contiguous_11" [id=540, type=contiguous];
+"541 select_33" [id=541, type=select];
+"542 select_34" [id=542, type=select];
+"543 select_35" [id=543, type=select];
+"544 view_88" [id=544, type=view];
+"545 transpose_68" [id=545, type=transpose];
+"546 view_89" [id=546, type=view];
+"547 transpose_69" [id=547, type=transpose];
+"548 view_90" [id=548, type=view];
+"549 transpose_70" [id=549, type=transpose];
+"550 view_91" [id=550, type=view];
+"551 view_92" [id=551, type=view];
+"552 view_93" [id=552, type=view];
+"553 scaled_dot_product_attention_11" [id=553, type=scaled_dot_product_attention];
+"554 permute_12" [id=554, type=permute];
+"555 view_94" [id=555, type=view];
+"556 _param_constant140" [id=556, type=get_attr];
+"557 _param_constant141" [id=557, type=get_attr];
+"558 linear_45" [id=558, type=linear];
+"559 view_95" [id=559, type=view];
+"560 transpose_71" [id=560, type=transpose];
+"561 dropout_34" [id=561, type=dropout];
+"562 add_23" [id=562, type=add];
+"563 _param_constant142" [id=563, type=get_attr];
+"564 _param_constant143" [id=564, type=get_attr];
+"565 layer_norm_23" [id=565, type=layer_norm];
+"566 _param_constant144" [id=566, type=get_attr];
+"567 _param_constant145" [id=567, type=get_attr];
+"568 linear_46" [id=568, type=linear];
+"569 gelu_11" [id=569, type=gelu];
+"570 dropout_35" [id=570, type=dropout];
+"571 _param_constant146" [id=571, type=get_attr];
+"572 _param_constant147" [id=572, type=get_attr];
+"573 linear_47" [id=573, type=linear];
+"574 dropout_36" [id=574, type=dropout];
+"575 add_24" [id=575, type=add];
+"576 _param_constant148" [id=576, type=get_attr];
+"577 _param_constant149" [id=577, type=get_attr];
+"578 layer_norm_24" [id=578, type=layer_norm];
+"579 slice_1" [id=579, type=slice];
+"580 select_36" [id=580, type=select];
+"581 _param_constant150" [id=581, type=get_attr];
+"582 _param_constant151" [id=582, type=get_attr];
+"583 linear_48" [id=583, type=linear];
+"584 output" [id=584, type=output];
+"0 arg0_1" -> "3 conv2d";
+"1 _param_constant0" -> "3 conv2d";
+"2 _param_constant1" -> "3 conv2d";
+"3 conv2d" -> "4 reshape";
+"4 reshape" -> "5 permute";
+"5 permute" -> "8 cat";
+"6 _param_constant2" -> "7 expand";
+"7 expand" -> "8 cat";
+"8 cat" -> "10 add";
+"9 _param_constant3" -> "10 add";
+"10 add" -> "11 dropout";
+"11 dropout" -> "14 layer_norm";
+"11 dropout" -> "45 add_1";
+"12 _param_constant4" -> "14 layer_norm";
+"13 _param_constant5" -> "14 layer_norm";
+"14 layer_norm" -> "15 transpose";
+"15 transpose" -> "18 linear";
+"16 _param_constant6" -> "18 linear";
+"17 _param_constant7" -> "18 linear";
+"18 linear" -> "19 unflatten";
+"19 unflatten" -> "20 unsqueeze";
+"20 unsqueeze" -> "21 transpose_1";
+"21 transpose_1" -> "22 squeeze";
+"22 squeeze" -> "23 contiguous";
+"23 contiguous" -> "24 select";
+"23 contiguous" -> "25 select_1";
+"23 contiguous" -> "26 select_2";
+"24 select" -> "27 view";
+"25 select_1" -> "29 view_1";
+"26 select_2" -> "31 view_2";
+"27 view" -> "28 transpose_2";
+"28 transpose_2" -> "33 view_3";
+"29 view_1" -> "30 transpose_3";
+"30 transpose_3" -> "34 view_4";
+"31 view_2" -> "32 transpose_4";
+"32 transpose_4" -> "35 view_5";
+"33 view_3" -> "36 scaled_dot_product_attention";
+"34 view_4" -> "36 scaled_dot_product_attention";
+"35 view_5" -> "36 scaled_dot_product_attention";
+"36 scaled_dot_product_attention" -> "37 permute_1";
+"37 permute_1" -> "38 view_6";
+"38 view_6" -> "41 linear_1";
+"39 _param_constant8" -> "41 linear_1";
+"40 _param_constant9" -> "41 linear_1";
+"41 linear_1" -> "42 view_7";
+"42 view_7" -> "43 transpose_5";
+"43 transpose_5" -> "44 dropout_1";
+"44 dropout_1" -> "45 add_1";
+"45 add_1" -> "48 layer_norm_1";
+"45 add_1" -> "58 add_2";
+"46 _param_constant10" -> "48 layer_norm_1";
+"47 _param_constant11" -> "48 layer_norm_1";
+"48 layer_norm_1" -> "51 linear_2";
+"49 _param_constant12" -> "51 linear_2";
+"50 _param_constant13" -> "51 linear_2";
+"51 linear_2" -> "52 gelu";
+"52 gelu" -> "53 dropout_2";
+"53 dropout_2" -> "56 linear_3";
+"54 _param_constant14" -> "56 linear_3";
+"55 _param_constant15" -> "56 linear_3";
+"56 linear_3" -> "57 dropout_3";
+"57 dropout_3" -> "58 add_2";
+"58 add_2" -> "61 layer_norm_2";
+"58 add_2" -> "92 add_3";
+"59 _param_constant16" -> "61 layer_norm_2";
+"60 _param_constant17" -> "61 layer_norm_2";
+"61 layer_norm_2" -> "62 transpose_6";
+"62 transpose_6" -> "65 linear_4";
+"63 _param_constant18" -> "65 linear_4";
+"64 _param_constant19" -> "65 linear_4";
+"65 linear_4" -> "66 unflatten_1";
+"66 unflatten_1" -> "67 unsqueeze_1";
+"67 unsqueeze_1" -> "68 transpose_7";
+"68 transpose_7" -> "69 squeeze_1";
+"69 squeeze_1" -> "70 contiguous_1";
+"70 contiguous_1" -> "71 select_3";
+"70 contiguous_1" -> "72 select_4";
+"70 contiguous_1" -> "73 select_5";
+"71 select_3" -> "74 view_8";
+"72 select_4" -> "76 view_9";
+"73 select_5" -> "78 view_10";
+"74 view_8" -> "75 transpose_8";
+"75 transpose_8" -> "80 view_11";
+"76 view_9" -> "77 transpose_9";
+"77 transpose_9" -> "81 view_12";
+"78 view_10" -> "79 transpose_10";
+"79 transpose_10" -> "82 view_13";
+"80 view_11" -> "83 scaled_dot_product_attention_1";
+"81 view_12" -> "83 scaled_dot_product_attention_1";
+"82 view_13" -> "83 scaled_dot_product_attention_1";
+"83 scaled_dot_product_attention_1" -> "84 permute_2";
+"84 permute_2" -> "85 view_14";
+"85 view_14" -> "88 linear_5";
+"86 _param_constant20" -> "88 linear_5";
+"87 _param_constant21" -> "88 linear_5";
+"88 linear_5" -> "89 view_15";
+"89 view_15" -> "90 transpose_11";
+"90 transpose_11" -> "91 dropout_4";
+"91 dropout_4" -> "92 add_3";
+"92 add_3" -> "95 layer_norm_3";
+"92 add_3" -> "105 add_4";
+"93 _param_constant22" -> "95 layer_norm_3";
+"94 _param_constant23" -> "95 layer_norm_3";
+"95 layer_norm_3" -> "98 linear_6";
+"96 _param_constant24" -> "98 linear_6";
+"97 _param_constant25" -> "98 linear_6";
+"98 linear_6" -> "99 gelu_1";
+"99 gelu_1" -> "100 dropout_5";
+"100 dropout_5" -> "103 linear_7";
+"101 _param_constant26" -> "103 linear_7";
+"102 _param_constant27" -> "103 linear_7";
+"103 linear_7" -> "104 dropout_6";
+"104 dropout_6" -> "105 add_4";
+"105 add_4" -> "108 layer_norm_4";
+"105 add_4" -> "139 add_5";
+"106 _param_constant28" -> "108 layer_norm_4";
+"107 _param_constant29" -> "108 layer_norm_4";
+"108 layer_norm_4" -> "109 transpose_12";
+"109 transpose_12" -> "112 linear_8";
+"110 _param_constant30" -> "112 linear_8";
+"111 _param_constant31" -> "112 linear_8";
+"112 linear_8" -> "113 unflatten_2";
+"113 unflatten_2" -> "114 unsqueeze_2";
+"114 unsqueeze_2" -> "115 transpose_13";
+"115 transpose_13" -> "116 squeeze_2";
+"116 squeeze_2" -> "117 contiguous_2";
+"117 contiguous_2" -> "118 select_6";
+"117 contiguous_2" -> "119 select_7";
+"117 contiguous_2" -> "120 select_8";
+"118 select_6" -> "121 view_16";
+"119 select_7" -> "123 view_17";
+"120 select_8" -> "125 view_18";
+"121 view_16" -> "122 transpose_14";
+"122 transpose_14" -> "127 view_19";
+"123 view_17" -> "124 transpose_15";
+"124 transpose_15" -> "128 view_20";
+"125 view_18" -> "126 transpose_16";
+"126 transpose_16" -> "129 view_21";
+"127 view_19" -> "130 scaled_dot_product_attention_2";
+"128 view_20" -> "130 scaled_dot_product_attention_2";
+"129 view_21" -> "130 scaled_dot_product_attention_2";
+"130 scaled_dot_product_attention_2" -> "131 permute_3";
+"131 permute_3" -> "132 view_22";
+"132 view_22" -> "135 linear_9";
+"133 _param_constant32" -> "135 linear_9";
+"134 _param_constant33" -> "135 linear_9";
+"135 linear_9" -> "136 view_23";
+"136 view_23" -> "137 transpose_17";
+"137 transpose_17" -> "138 dropout_7";
+"138 dropout_7" -> "139 add_5";
+"139 add_5" -> "142 layer_norm_5";
+"139 add_5" -> "152 add_6";
+"140 _param_constant34" -> "142 layer_norm_5";
+"141 _param_constant35" -> "142 layer_norm_5";
+"142 layer_norm_5" -> "145 linear_10";
+"143 _param_constant36" -> "145 linear_10";
+"144 _param_constant37" -> "145 linear_10";
+"145 linear_10" -> "146 gelu_2";
+"146 gelu_2" -> "147 dropout_8";
+"147 dropout_8" -> "150 linear_11";
+"148 _param_constant38" -> "150 linear_11";
+"149 _param_constant39" -> "150 linear_11";
+"150 linear_11" -> "151 dropout_9";
+"151 dropout_9" -> "152 add_6";
+"152 add_6" -> "155 layer_norm_6";
+"152 add_6" -> "186 add_7";
+"153 _param_constant40" -> "155 layer_norm_6";
+"154 _param_constant41" -> "155 layer_norm_6";
+"155 layer_norm_6" -> "156 transpose_18";
+"156 transpose_18" -> "159 linear_12";
+"157 _param_constant42" -> "159 linear_12";
+"158 _param_constant43" -> "159 linear_12";
+"159 linear_12" -> "160 unflatten_3";
+"160 unflatten_3" -> "161 unsqueeze_3";
+"161 unsqueeze_3" -> "162 transpose_19";
+"162 transpose_19" -> "163 squeeze_3";
+"163 squeeze_3" -> "164 contiguous_3";
+"164 contiguous_3" -> "165 select_9";
+"164 contiguous_3" -> "166 select_10";
+"164 contiguous_3" -> "167 select_11";
+"165 select_9" -> "168 view_24";
+"166 select_10" -> "170 view_25";
+"167 select_11" -> "172 view_26";
+"168 view_24" -> "169 transpose_20";
+"169 transpose_20" -> "174 view_27";
+"170 view_25" -> "171 transpose_21";
+"171 transpose_21" -> "175 view_28";
+"172 view_26" -> "173 transpose_22";
+"173 transpose_22" -> "176 view_29";
+"174 view_27" -> "177 scaled_dot_product_attention_3";
+"175 view_28" -> "177 scaled_dot_product_attention_3";
+"176 view_29" -> "177 scaled_dot_product_attention_3";
+"177 scaled_dot_product_attention_3" -> "178 permute_4";
+"178 permute_4" -> "179 view_30";
+"179 view_30" -> "182 linear_13";
+"180 _param_constant44" -> "182 linear_13";
+"181 _param_constant45" -> "182 linear_13";
+"182 linear_13" -> "183 view_31";
+"183 view_31" -> "184 transpose_23";
+"184 transpose_23" -> "185 dropout_10";
+"185 dropout_10" -> "186 add_7";
+"186 add_7" -> "189 layer_norm_7";
+"186 add_7" -> "199 add_8";
+"187 _param_constant46" -> "189 layer_norm_7";
+"188 _param_constant47" -> "189 layer_norm_7";
+"189 layer_norm_7" -> "192 linear_14";
+"190 _param_constant48" -> "192 linear_14";
+"191 _param_constant49" -> "192 linear_14";
+"192 linear_14" -> "193 gelu_3";
+"193 gelu_3" -> "194 dropout_11";
+"194 dropout_11" -> "197 linear_15";
+"195 _param_constant50" -> "197 linear_15";
+"196 _param_constant51" -> "197 linear_15";
+"197 linear_15" -> "198 dropout_12";
+"198 dropout_12" -> "199 add_8";
+"199 add_8" -> "202 layer_norm_8";
+"199 add_8" -> "233 add_9";
+"200 _param_constant52" -> "202 layer_norm_8";
+"201 _param_constant53" -> "202 layer_norm_8";
+"202 layer_norm_8" -> "203 transpose_24";
+"203 transpose_24" -> "206 linear_16";
+"204 _param_constant54" -> "206 linear_16";
+"205 _param_constant55" -> "206 linear_16";
+"206 linear_16" -> "207 unflatten_4";
+"207 unflatten_4" -> "208 unsqueeze_4";
+"208 unsqueeze_4" -> "209 transpose_25";
+"209 transpose_25" -> "210 squeeze_4";
+"210 squeeze_4" -> "211 contiguous_4";
+"211 contiguous_4" -> "212 select_12";
+"211 contiguous_4" -> "213 select_13";
+"211 contiguous_4" -> "214 select_14";
+"212 select_12" -> "215 view_32";
+"213 select_13" -> "217 view_33";
+"214 select_14" -> "219 view_34";
+"215 view_32" -> "216 transpose_26";
+"216 transpose_26" -> "221 view_35";
+"217 view_33" -> "218 transpose_27";
+"218 transpose_27" -> "222 view_36";
+"219 view_34" -> "220 transpose_28";
+"220 transpose_28" -> "223 view_37";
+"221 view_35" -> "224 scaled_dot_product_attention_4";
+"222 view_36" -> "224 scaled_dot_product_attention_4";
+"223 view_37" -> "224 scaled_dot_product_attention_4";
+"224 scaled_dot_product_attention_4" -> "225 permute_5";
+"225 permute_5" -> "226 view_38";
+"226 view_38" -> "229 linear_17";
+"227 _param_constant56" -> "229 linear_17";
+"228 _param_constant57" -> "229 linear_17";
+"229 linear_17" -> "230 view_39";
+"230 view_39" -> "231 transpose_29";
+"231 transpose_29" -> "232 dropout_13";
+"232 dropout_13" -> "233 add_9";
+"233 add_9" -> "236 layer_norm_9";
+"233 add_9" -> "246 add_10";
+"234 _param_constant58" -> "236 layer_norm_9";
+"235 _param_constant59" -> "236 layer_norm_9";
+"236 layer_norm_9" -> "239 linear_18";
+"237 _param_constant60" -> "239 linear_18";
+"238 _param_constant61" -> "239 linear_18";
+"239 linear_18" -> "240 gelu_4";
+"240 gelu_4" -> "241 dropout_14";
+"241 dropout_14" -> "244 linear_19";
+"242 _param_constant62" -> "244 linear_19";
+"243 _param_constant63" -> "244 linear_19";
+"244 linear_19" -> "245 dropout_15";
+"245 dropout_15" -> "246 add_10";
+"246 add_10" -> "249 layer_norm_10";
+"246 add_10" -> "280 add_11";
+"247 _param_constant64" -> "249 layer_norm_10";
+"248 _param_constant65" -> "249 layer_norm_10";
+"249 layer_norm_10" -> "250 transpose_30";
+"250 transpose_30" -> "253 linear_20";
+"251 _param_constant66" -> "253 linear_20";
+"252 _param_constant67" -> "253 linear_20";
+"253 linear_20" -> "254 unflatten_5";
+"254 unflatten_5" -> "255 unsqueeze_5";
+"255 unsqueeze_5" -> "256 transpose_31";
+"256 transpose_31" -> "257 squeeze_5";
+"257 squeeze_5" -> "258 contiguous_5";
+"258 contiguous_5" -> "259 select_15";
+"258 contiguous_5" -> "260 select_16";
+"258 contiguous_5" -> "261 select_17";
+"259 select_15" -> "262 view_40";
+"260 select_16" -> "264 view_41";
+"261 select_17" -> "266 view_42";
+"262 view_40" -> "263 transpose_32";
+"263 transpose_32" -> "268 view_43";
+"264 view_41" -> "265 transpose_33";
+"265 transpose_33" -> "269 view_44";
+"266 view_42" -> "267 transpose_34";
+"267 transpose_34" -> "270 view_45";
+"268 view_43" -> "271 scaled_dot_product_attention_5";
+"269 view_44" -> "271 scaled_dot_product_attention_5";
+"270 view_45" -> "271 scaled_dot_product_attention_5";
+"271 scaled_dot_product_attention_5" -> "272 permute_6";
+"272 permute_6" -> "273 view_46";
+"273 view_46" -> "276 linear_21";
+"274 _param_constant68" -> "276 linear_21";
+"275 _param_constant69" -> "276 linear_21";
+"276 linear_21" -> "277 view_47";
+"277 view_47" -> "278 transpose_35";
+"278 transpose_35" -> "279 dropout_16";
+"279 dropout_16" -> "280 add_11";
+"280 add_11" -> "283 layer_norm_11";
+"280 add_11" -> "293 add_12";
+"281 _param_constant70" -> "283 layer_norm_11";
+"282 _param_constant71" -> "283 layer_norm_11";
+"283 layer_norm_11" -> "286 linear_22";
+"284 _param_constant72" -> "286 linear_22";
+"285 _param_constant73" -> "286 linear_22";
+"286 linear_22" -> "287 gelu_5";
+"287 gelu_5" -> "288 dropout_17";
+"288 dropout_17" -> "291 linear_23";
+"289 _param_constant74" -> "291 linear_23";
+"290 _param_constant75" -> "291 linear_23";
+"291 linear_23" -> "292 dropout_18";
+"292 dropout_18" -> "293 add_12";
+"293 add_12" -> "296 layer_norm_12";
+"293 add_12" -> "327 add_13";
+"294 _param_constant76" -> "296 layer_norm_12";
+"295 _param_constant77" -> "296 layer_norm_12";
+"296 layer_norm_12" -> "297 transpose_36";
+"297 transpose_36" -> "300 linear_24";
+"298 _param_constant78" -> "300 linear_24";
+"299 _param_constant79" -> "300 linear_24";
+"300 linear_24" -> "301 unflatten_6";
+"301 unflatten_6" -> "302 unsqueeze_6";
+"302 unsqueeze_6" -> "303 transpose_37";
+"303 transpose_37" -> "304 squeeze_6";
+"304 squeeze_6" -> "305 contiguous_6";
+"305 contiguous_6" -> "306 select_18";
+"305 contiguous_6" -> "307 select_19";
+"305 contiguous_6" -> "308 select_20";
+"306 select_18" -> "309 view_48";
+"307 select_19" -> "311 view_49";
+"308 select_20" -> "313 view_50";
+"309 view_48" -> "310 transpose_38";
+"310 transpose_38" -> "315 view_51";
+"311 view_49" -> "312 transpose_39";
+"312 transpose_39" -> "316 view_52";
+"313 view_50" -> "314 transpose_40";
+"314 transpose_40" -> "317 view_53";
+"315 view_51" -> "318 scaled_dot_product_attention_6";
+"316 view_52" -> "318 scaled_dot_product_attention_6";
+"317 view_53" -> "318 scaled_dot_product_attention_6";
+"318 scaled_dot_product_attention_6" -> "319 permute_7";
+"319 permute_7" -> "320 view_54";
+"320 view_54" -> "323 linear_25";
+"321 _param_constant80" -> "323 linear_25";
+"322 _param_constant81" -> "323 linear_25";
+"323 linear_25" -> "324 view_55";
+"324 view_55" -> "325 transpose_41";
+"325 transpose_41" -> "326 dropout_19";
+"326 dropout_19" -> "327 add_13";
+"327 add_13" -> "330 layer_norm_13";
+"327 add_13" -> "340 add_14";
+"328 _param_constant82" -> "330 layer_norm_13";
+"329 _param_constant83" -> "330 layer_norm_13";
+"330 layer_norm_13" -> "333 linear_26";
+"331 _param_constant84" -> "333 linear_26";
+"332 _param_constant85" -> "333 linear_26";
+"333 linear_26" -> "334 gelu_6";
+"334 gelu_6" -> "335 dropout_20";
+"335 dropout_20" -> "338 linear_27";
+"336 _param_constant86" -> "338 linear_27";
+"337 _param_constant87" -> "338 linear_27";
+"338 linear_27" -> "339 dropout_21";
+"339 dropout_21" -> "340 add_14";
+"340 add_14" -> "343 layer_norm_14";
+"340 add_14" -> "374 add_15";
+"341 _param_constant88" -> "343 layer_norm_14";
+"342 _param_constant89" -> "343 layer_norm_14";
+"343 layer_norm_14" -> "344 transpose_42";
+"344 transpose_42" -> "347 linear_28";
+"345 _param_constant90" -> "347 linear_28";
+"346 _param_constant91" -> "347 linear_28";
+"347 linear_28" -> "348 unflatten_7";
+"348 unflatten_7" -> "349 unsqueeze_7";
+"349 unsqueeze_7" -> "350 transpose_43";
+"350 transpose_43" -> "351 squeeze_7";
+"351 squeeze_7" -> "352 contiguous_7";
+"352 contiguous_7" -> "353 select_21";
+"352 contiguous_7" -> "354 select_22";
+"352 contiguous_7" -> "355 select_23";
+"353 select_21" -> "356 view_56";
+"354 select_22" -> "358 view_57";
+"355 select_23" -> "360 view_58";
+"356 view_56" -> "357 transpose_44";
+"357 transpose_44" -> "362 view_59";
+"358 view_57" -> "359 transpose_45";
+"359 transpose_45" -> "363 view_60";
+"360 view_58" -> "361 transpose_46";
+"361 transpose_46" -> "364 view_61";
+"362 view_59" -> "365 scaled_dot_product_attention_7";
+"363 view_60" -> "365 scaled_dot_product_attention_7";
+"364 view_61" -> "365 scaled_dot_product_attention_7";
+"365 scaled_dot_product_attention_7" -> "366 permute_8";
+"366 permute_8" -> "367 view_62";
+"367 view_62" -> "370 linear_29";
+"368 _param_constant92" -> "370 linear_29";
+"369 _param_constant93" -> "370 linear_29";
+"370 linear_29" -> "371 view_63";
+"371 view_63" -> "372 transpose_47";
+"372 transpose_47" -> "373 dropout_22";
+"373 dropout_22" -> "374 add_15";
+"374 add_15" -> "377 layer_norm_15";
+"374 add_15" -> "387 add_16";
+"375 _param_constant94" -> "377 layer_norm_15";
+"376 _param_constant95" -> "377 layer_norm_15";
+"377 layer_norm_15" -> "380 linear_30";
+"378 _param_constant96" -> "380 linear_30";
+"379 _param_constant97" -> "380 linear_30";
+"380 linear_30" -> "381 gelu_7";
+"381 gelu_7" -> "382 dropout_23";
+"382 dropout_23" -> "385 linear_31";
+"383 _param_constant98" -> "385 linear_31";
+"384 _param_constant99" -> "385 linear_31";
+"385 linear_31" -> "386 dropout_24";
+"386 dropout_24" -> "387 add_16";
+"387 add_16" -> "390 layer_norm_16";
+"387 add_16" -> "421 add_17";
+"388 _param_constant100" -> "390 layer_norm_16";
+"389 _param_constant101" -> "390 layer_norm_16";
+"390 layer_norm_16" -> "391 transpose_48";
+"391 transpose_48" -> "394 linear_32";
+"392 _param_constant102" -> "394 linear_32";
+"393 _param_constant103" -> "394 linear_32";
+"394 linear_32" -> "395 unflatten_8";
+"395 unflatten_8" -> "396 unsqueeze_8";
+"396 unsqueeze_8" -> "397 transpose_49";
+"397 transpose_49" -> "398 squeeze_8";
+"398 squeeze_8" -> "399 contiguous_8";
+"399 contiguous_8" -> "400 select_24";
+"399 contiguous_8" -> "401 select_25";
+"399 contiguous_8" -> "402 select_26";
+"400 select_24" -> "403 view_64";
+"401 select_25" -> "405 view_65";
+"402 select_26" -> "407 view_66";
+"403 view_64" -> "404 transpose_50";
+"404 transpose_50" -> "409 view_67";
+"405 view_65" -> "406 transpose_51";
+"406 transpose_51" -> "410 view_68";
+"407 view_66" -> "408 transpose_52";
+"408 transpose_52" -> "411 view_69";
+"409 view_67" -> "412 scaled_dot_product_attention_8";
+"410 view_68" -> "412 scaled_dot_product_attention_8";
+"411 view_69" -> "412 scaled_dot_product_attention_8";
+"412 scaled_dot_product_attention_8" -> "413 permute_9";
+"413 permute_9" -> "414 view_70";
+"414 view_70" -> "417 linear_33";
+"415 _param_constant104" -> "417 linear_33";
+"416 _param_constant105" -> "417 linear_33";
+"417 linear_33" -> "418 view_71";
+"418 view_71" -> "419 transpose_53";
+"419 transpose_53" -> "420 dropout_25";
+"420 dropout_25" -> "421 add_17";
+"421 add_17" -> "424 layer_norm_17";
+"421 add_17" -> "434 add_18";
+"422 _param_constant106" -> "424 layer_norm_17";
+"423 _param_constant107" -> "424 layer_norm_17";
+"424 layer_norm_17" -> "427 linear_34";
+"425 _param_constant108" -> "427 linear_34";
+"426 _param_constant109" -> "427 linear_34";
+"427 linear_34" -> "428 gelu_8";
+"428 gelu_8" -> "429 dropout_26";
+"429 dropout_26" -> "432 linear_35";
+"430 _param_constant110" -> "432 linear_35";
+"431 _param_constant111" -> "432 linear_35";
+"432 linear_35" -> "433 dropout_27";
+"433 dropout_27" -> "434 add_18";
+"434 add_18" -> "437 layer_norm_18";
+"434 add_18" -> "468 add_19";
+"435 _param_constant112" -> "437 layer_norm_18";
+"436 _param_constant113" -> "437 layer_norm_18";
+"437 layer_norm_18" -> "438 transpose_54";
+"438 transpose_54" -> "441 linear_36";
+"439 _param_constant114" -> "441 linear_36";
+"440 _param_constant115" -> "441 linear_36";
+"441 linear_36" -> "442 unflatten_9";
+"442 unflatten_9" -> "443 unsqueeze_9";
+"443 unsqueeze_9" -> "444 transpose_55";
+"444 transpose_55" -> "445 squeeze_9";
+"445 squeeze_9" -> "446 contiguous_9";
+"446 contiguous_9" -> "447 select_27";
+"446 contiguous_9" -> "448 select_28";
+"446 contiguous_9" -> "449 select_29";
+"447 select_27" -> "450 view_72";
+"448 select_28" -> "452 view_73";
+"449 select_29" -> "454 view_74";
+"450 view_72" -> "451 transpose_56";
+"451 transpose_56" -> "456 view_75";
+"452 view_73" -> "453 transpose_57";
+"453 transpose_57" -> "457 view_76";
+"454 view_74" -> "455 transpose_58";
+"455 transpose_58" -> "458 view_77";
+"456 view_75" -> "459 scaled_dot_product_attention_9";
+"457 view_76" -> "459 scaled_dot_product_attention_9";
+"458 view_77" -> "459 scaled_dot_product_attention_9";
+"459 scaled_dot_product_attention_9" -> "460 permute_10";
+"460 permute_10" -> "461 view_78";
+"461 view_78" -> "464 linear_37";
+"462 _param_constant116" -> "464 linear_37";
+"463 _param_constant117" -> "464 linear_37";
+"464 linear_37" -> "465 view_79";
+"465 view_79" -> "466 transpose_59";
+"466 transpose_59" -> "467 dropout_28";
+"467 dropout_28" -> "468 add_19";
+"468 add_19" -> "471 layer_norm_19";
+"468 add_19" -> "481 add_20";
+"469 _param_constant118" -> "471 layer_norm_19";
+"470 _param_constant119" -> "471 layer_norm_19";
+"471 layer_norm_19" -> "474 linear_38";
+"472 _param_constant120" -> "474 linear_38";
+"473 _param_constant121" -> "474 linear_38";
+"474 linear_38" -> "475 gelu_9";
+"475 gelu_9" -> "476 dropout_29";
+"476 dropout_29" -> "479 linear_39";
+"477 _param_constant122" -> "479 linear_39";
+"478 _param_constant123" -> "479 linear_39";
+"479 linear_39" -> "480 dropout_30";
+"480 dropout_30" -> "481 add_20";
+"481 add_20" -> "484 layer_norm_20";
+"481 add_20" -> "515 add_21";
+"482 _param_constant124" -> "484 layer_norm_20";
+"483 _param_constant125" -> "484 layer_norm_20";
+"484 layer_norm_20" -> "485 transpose_60";
+"485 transpose_60" -> "488 linear_40";
+"486 _param_constant126" -> "488 linear_40";
+"487 _param_constant127" -> "488 linear_40";
+"488 linear_40" -> "489 unflatten_10";
+"489 unflatten_10" -> "490 unsqueeze_10";
+"490 unsqueeze_10" -> "491 transpose_61";
+"491 transpose_61" -> "492 squeeze_10";
+"492 squeeze_10" -> "493 contiguous_10";
+"493 contiguous_10" -> "494 select_30";
+"493 contiguous_10" -> "495 select_31";
+"493 contiguous_10" -> "496 select_32";
+"494 select_30" -> "497 view_80";
+"495 select_31" -> "499 view_81";
+"496 select_32" -> "501 view_82";
+"497 view_80" -> "498 transpose_62";
+"498 transpose_62" -> "503 view_83";
+"499 view_81" -> "500 transpose_63";
+"500 transpose_63" -> "504 view_84";
+"501 view_82" -> "502 transpose_64";
+"502 transpose_64" -> "505 view_85";
+"503 view_83" -> "506 scaled_dot_product_attention_10";
+"504 view_84" -> "506 scaled_dot_product_attention_10";
+"505 view_85" -> "506 scaled_dot_product_attention_10";
+"506 scaled_dot_product_attention_10" -> "507 permute_11";
+"507 permute_11" -> "508 view_86";
+"508 view_86" -> "511 linear_41";
+"509 _param_constant128" -> "511 linear_41";
+"510 _param_constant129" -> "511 linear_41";
+"511 linear_41" -> "512 view_87";
+"512 view_87" -> "513 transpose_65";
+"513 transpose_65" -> "514 dropout_31";
+"514 dropout_31" -> "515 add_21";
+"515 add_21" -> "518 layer_norm_21";
+"515 add_21" -> "528 add_22";
+"516 _param_constant130" -> "518 layer_norm_21";
+"517 _param_constant131" -> "518 layer_norm_21";
+"518 layer_norm_21" -> "521 linear_42";
+"519 _param_constant132" -> "521 linear_42";
+"520 _param_constant133" -> "521 linear_42";
+"521 linear_42" -> "522 gelu_10";
+"522 gelu_10" -> "523 dropout_32";
+"523 dropout_32" -> "526 linear_43";
+"524 _param_constant134" -> "526 linear_43";
+"525 _param_constant135" -> "526 linear_43";
+"526 linear_43" -> "527 dropout_33";
+"527 dropout_33" -> "528 add_22";
+"528 add_22" -> "531 layer_norm_22";
+"528 add_22" -> "562 add_23";
+"529 _param_constant136" -> "531 layer_norm_22";
+"530 _param_constant137" -> "531 layer_norm_22";
+"531 layer_norm_22" -> "532 transpose_66";
+"532 transpose_66" -> "535 linear_44";
+"533 _param_constant138" -> "535 linear_44";
+"534 _param_constant139" -> "535 linear_44";
+"535 linear_44" -> "536 unflatten_11";
+"536 unflatten_11" -> "537 unsqueeze_11";
+"537 unsqueeze_11" -> "538 transpose_67";
+"538 transpose_67" -> "539 squeeze_11";
+"539 squeeze_11" -> "540 contiguous_11";
+"540 contiguous_11" -> "541 select_33";
+"540 contiguous_11" -> "542 select_34";
+"540 contiguous_11" -> "543 select_35";
+"541 select_33" -> "544 view_88";
+"542 select_34" -> "546 view_89";
+"543 select_35" -> "548 view_90";
+"544 view_88" -> "545 transpose_68";
+"545 transpose_68" -> "550 view_91";
+"546 view_89" -> "547 transpose_69";
+"547 transpose_69" -> "551 view_92";
+"548 view_90" -> "549 transpose_70";
+"549 transpose_70" -> "552 view_93";
+"550 view_91" -> "553 scaled_dot_product_attention_11";
+"551 view_92" -> "553 scaled_dot_product_attention_11";
+"552 view_93" -> "553 scaled_dot_product_attention_11";
+"553 scaled_dot_product_attention_11" -> "554 permute_12";
+"554 permute_12" -> "555 view_94";
+"555 view_94" -> "558 linear_45";
+"556 _param_constant140" -> "558 linear_45";
+"557 _param_constant141" -> "558 linear_45";
+"558 linear_45" -> "559 view_95";
+"559 view_95" -> "560 transpose_71";
+"560 transpose_71" -> "561 dropout_34";
+"561 dropout_34" -> "562 add_23";
+"562 add_23" -> "565 layer_norm_23";
+"562 add_23" -> "575 add_24";
+"563 _param_constant142" -> "565 layer_norm_23";
+"564 _param_constant143" -> "565 layer_norm_23";
+"565 layer_norm_23" -> "568 linear_46";
+"566 _param_constant144" -> "568 linear_46";
+"567 _param_constant145" -> "568 linear_46";
+"568 linear_46" -> "569 gelu_11";
+"569 gelu_11" -> "570 dropout_35";
+"570 dropout_35" -> "573 linear_47";
+"571 _param_constant146" -> "573 linear_47";
+"572 _param_constant147" -> "573 linear_47";
+"573 linear_47" -> "574 dropout_36";
+"574 dropout_36" -> "575 add_24";
+"575 add_24" -> "578 layer_norm_24";
+"576 _param_constant148" -> "578 layer_norm_24";
+"577 _param_constant149" -> "578 layer_norm_24";
+"578 layer_norm_24" -> "579 slice_1";
+"579 slice_1" -> "580 select_36";
+"580 select_36" -> "583 linear_48";
+"581 _param_constant150" -> "583 linear_48";
+"582 _param_constant151" -> "583 linear_48";
+"583 linear_48" -> "584 output";
+}
diff --git a/tests/torch/data/reference_graphs/quantized/synthetic_model/MHA_single_input.dot b/tests/torch/data/reference_graphs/quantized/synthetic_model/MHA_single_input.dot
index 578b6e795d7..5f55464d859 100644
--- a/tests/torch/data/reference_graphs/quantized/synthetic_model/MHA_single_input.dot
+++ b/tests/torch/data/reference_graphs/quantized/synthetic_model/MHA_single_input.dot
@@ -2,8 +2,8 @@ strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
"2 MHA_single_input/MultiheadAttention[mha]/linear_0" [id=2, type=linear];
-"3 MHA_single_input/MultiheadAttention[mha]/unflatten_0" [id=3, type=unflatten];
-"4 MHA_single_input/MultiheadAttention[mha]/SymmetricQuantizer/symmetric_quantize_0" [id=4, type=symmetric_quantize];
+"3 MHA_single_input/MultiheadAttention[mha]/SymmetricQuantizer/symmetric_quantize_0" [id=3, type=symmetric_quantize];
+"4 MHA_single_input/MultiheadAttention[mha]/unflatten_0" [id=4, type=unflatten];
"5 MHA_single_input/MultiheadAttention[mha]/unsqueeze_0" [id=5, type=unsqueeze];
"6 MHA_single_input/MultiheadAttention[mha]/transpose_0" [id=6, type=transpose];
"7 MHA_single_input/MultiheadAttention[mha]/squeeze_0" [id=7, type=squeeze];
@@ -36,9 +36,9 @@ strict digraph {
"34 /nncf_model_output_1" [id=34, type=nncf_model_output];
"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
"1 SymmetricQuantizer/symmetric_quantize_0" -> "2 MHA_single_input/MultiheadAttention[mha]/linear_0";
-"2 MHA_single_input/MultiheadAttention[mha]/linear_0" -> "3 MHA_single_input/MultiheadAttention[mha]/unflatten_0";
-"3 MHA_single_input/MultiheadAttention[mha]/unflatten_0" -> "4 MHA_single_input/MultiheadAttention[mha]/SymmetricQuantizer/symmetric_quantize_0";
-"4 MHA_single_input/MultiheadAttention[mha]/SymmetricQuantizer/symmetric_quantize_0" -> "5 MHA_single_input/MultiheadAttention[mha]/unsqueeze_0";
+"2 MHA_single_input/MultiheadAttention[mha]/linear_0" -> "3 MHA_single_input/MultiheadAttention[mha]/SymmetricQuantizer/symmetric_quantize_0";
+"3 MHA_single_input/MultiheadAttention[mha]/SymmetricQuantizer/symmetric_quantize_0" -> "4 MHA_single_input/MultiheadAttention[mha]/unflatten_0";
+"4 MHA_single_input/MultiheadAttention[mha]/unflatten_0" -> "5 MHA_single_input/MultiheadAttention[mha]/unsqueeze_0";
"5 MHA_single_input/MultiheadAttention[mha]/unsqueeze_0" -> "6 MHA_single_input/MultiheadAttention[mha]/transpose_0";
"6 MHA_single_input/MultiheadAttention[mha]/transpose_0" -> "7 MHA_single_input/MultiheadAttention[mha]/squeeze_0";
"7 MHA_single_input/MultiheadAttention[mha]/squeeze_0" -> "8 MHA_single_input/MultiheadAttention[mha]/contiguous_0";
diff --git a/tests/torch/data/reference_graphs/quantized/synthetic_model/ScaledDotProductModel.dot b/tests/torch/data/reference_graphs/quantized/synthetic_model/ScaledDotProductModel.dot
new file mode 100644
index 00000000000..7a9eb1bcfa0
--- /dev/null
+++ b/tests/torch/data/reference_graphs/quantized/synthetic_model/ScaledDotProductModel.dot
@@ -0,0 +1,17 @@
+strict digraph {
+"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
+"1 ScaledDotProductModel/view_0" [id=1, type=view];
+"2 ScaledDotProductModel/view_1" [id=2, type=view];
+"3 ScaledDotProductModel/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ScaledDotProductModel/scaled_dot_product_attention_0|INPUT0]/symmetric_quantize_0" [id=3, type=symmetric_quantize];
+"4 ScaledDotProductModel/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ScaledDotProductModel/scaled_dot_product_attention_0|INPUT1]/symmetric_quantize_0" [id=4, type=symmetric_quantize];
+"5 ScaledDotProductModel/scaled_dot_product_attention_0" [id=5, type=scaled_dot_product_attention];
+"6 /nncf_model_output_0" [id=6, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "1 ScaledDotProductModel/view_0";
+"1 ScaledDotProductModel/view_0" -> "2 ScaledDotProductModel/view_1";
+"2 ScaledDotProductModel/view_1" -> "3 ScaledDotProductModel/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ScaledDotProductModel/scaled_dot_product_attention_0|INPUT0]/symmetric_quantize_0";
+"2 ScaledDotProductModel/view_1" -> "4 ScaledDotProductModel/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ScaledDotProductModel/scaled_dot_product_attention_0|INPUT1]/symmetric_quantize_0";
+"2 ScaledDotProductModel/view_1" -> "5 ScaledDotProductModel/scaled_dot_product_attention_0";
+"3 ScaledDotProductModel/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ScaledDotProductModel/scaled_dot_product_attention_0|INPUT0]/symmetric_quantize_0" -> "5 ScaledDotProductModel/scaled_dot_product_attention_0";
+"4 ScaledDotProductModel/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ScaledDotProductModel/scaled_dot_product_attention_0|INPUT1]/symmetric_quantize_0" -> "5 ScaledDotProductModel/scaled_dot_product_attention_0";
+"5 ScaledDotProductModel/scaled_dot_product_attention_0" -> "6 /nncf_model_output_0";
+}
diff --git a/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__multi_input_branch.dot b/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__multi_input_branch.dot
index 3b5e80a9758..765baeccf24 100644
--- a/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__multi_input_branch.dot
+++ b/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__multi_input_branch.dot
@@ -1,25 +1,25 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
-"1 ShiftScaleParametrized/clone_0" [id=1, type=clone];
-"2 ShiftScaleParametrized/sub__0" [id=2, type=sub_];
-"3 ShiftScaleParametrized/div__0" [id=3, type=div_];
-"4 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" [id=4, type=symmetric_quantize];
-"5 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=5, type=symmetric_quantize];
-"6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" [id=6, type=conv2d];
-"7 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_1" [id=7, type=symmetric_quantize];
-"8 ShiftScaleParametrized/NNCFConv2d[conv]/SymmetricQuantizer/symmetric_quantize_0" [id=8, type=symmetric_quantize];
+"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
+"2 ShiftScaleParametrized/clone_0" [id=2, type=clone];
+"3 ShiftScaleParametrized/sub__0" [id=3, type=sub_];
+"4 ShiftScaleParametrized/div__0" [id=4, type=div_];
+"5 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" [id=5, type=symmetric_quantize];
+"6 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
+"7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" [id=7, type=conv2d];
+"8 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_1" [id=8, type=symmetric_quantize];
"9 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_1" [id=9, type=conv2d];
"10 /nncf_model_output_0" [id=10, type=nncf_model_output];
"11 /nncf_model_output_1" [id=11, type=nncf_model_output];
-"0 /nncf_model_input_0" -> "1 ShiftScaleParametrized/clone_0";
-"0 /nncf_model_input_0" -> "8 ShiftScaleParametrized/NNCFConv2d[conv]/SymmetricQuantizer/symmetric_quantize_0";
-"1 ShiftScaleParametrized/clone_0" -> "2 ShiftScaleParametrized/sub__0";
-"2 ShiftScaleParametrized/sub__0" -> "3 ShiftScaleParametrized/div__0";
-"3 ShiftScaleParametrized/div__0" -> "4 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0";
-"4 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" -> "6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
-"5 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
-"6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" -> "10 /nncf_model_output_0";
-"7 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_1" -> "9 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_1";
-"8 ShiftScaleParametrized/NNCFConv2d[conv]/SymmetricQuantizer/symmetric_quantize_0" -> "9 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_1";
+"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
+"1 SymmetricQuantizer/symmetric_quantize_0" -> "2 ShiftScaleParametrized/clone_0";
+"1 SymmetricQuantizer/symmetric_quantize_0" -> "9 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_1";
+"2 ShiftScaleParametrized/clone_0" -> "3 ShiftScaleParametrized/sub__0";
+"3 ShiftScaleParametrized/sub__0" -> "4 ShiftScaleParametrized/div__0";
+"4 ShiftScaleParametrized/div__0" -> "5 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0";
+"5 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" -> "7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
+"6 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
+"7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" -> "10 /nncf_model_output_0";
+"8 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_1" -> "9 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_1";
"9 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_1" -> "11 /nncf_model_output_1";
}
diff --git a/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__single_input_branch.dot b/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__single_input_branch.dot
index 9eab740c541..793bfa2f7da 100644
--- a/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__single_input_branch.dot
+++ b/tests/torch/data/reference_graphs/quantized/synthetic_model/ShiftScale__normalize__single_input_branch.dot
@@ -1,17 +1,19 @@
strict digraph {
"0 /nncf_model_input_0" [id=0, type=nncf_model_input];
-"1 ShiftScaleParametrized/clone_0" [id=1, type=clone];
-"2 ShiftScaleParametrized/sub__0" [id=2, type=sub_];
-"3 ShiftScaleParametrized/div__0" [id=3, type=div_];
-"4 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" [id=4, type=symmetric_quantize];
-"5 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=5, type=symmetric_quantize];
-"6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" [id=6, type=conv2d];
-"7 /nncf_model_output_0" [id=7, type=nncf_model_output];
-"0 /nncf_model_input_0" -> "1 ShiftScaleParametrized/clone_0";
-"1 ShiftScaleParametrized/clone_0" -> "2 ShiftScaleParametrized/sub__0";
-"2 ShiftScaleParametrized/sub__0" -> "3 ShiftScaleParametrized/div__0";
-"3 ShiftScaleParametrized/div__0" -> "4 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0";
-"4 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" -> "6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
-"5 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
-"6 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" -> "7 /nncf_model_output_0";
+"1 SymmetricQuantizer/symmetric_quantize_0" [id=1, type=symmetric_quantize];
+"2 ShiftScaleParametrized/clone_0" [id=2, type=clone];
+"3 ShiftScaleParametrized/sub__0" [id=3, type=sub_];
+"4 ShiftScaleParametrized/div__0" [id=4, type=div_];
+"5 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" [id=5, type=symmetric_quantize];
+"6 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" [id=6, type=symmetric_quantize];
+"7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" [id=7, type=conv2d];
+"8 /nncf_model_output_0" [id=8, type=nncf_model_output];
+"0 /nncf_model_input_0" -> "1 SymmetricQuantizer/symmetric_quantize_0";
+"1 SymmetricQuantizer/symmetric_quantize_0" -> "2 ShiftScaleParametrized/clone_0";
+"2 ShiftScaleParametrized/clone_0" -> "3 ShiftScaleParametrized/sub__0";
+"3 ShiftScaleParametrized/sub__0" -> "4 ShiftScaleParametrized/div__0";
+"4 ShiftScaleParametrized/div__0" -> "5 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0";
+"5 ShiftScaleParametrized/NNCFNetworkInterface[_nncf]/ModuleDict[external_quantizers]/SymmetricQuantizer[ShiftScaleParametrized/div__0|OUTPUT]/symmetric_quantize_0" -> "7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
+"6 ShiftScaleParametrized/NNCFConv2d[conv]/ModuleDict[pre_ops]/UpdateWeight[0]/SymmetricQuantizer[op]/symmetric_quantize_0" -> "7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0";
+"7 ShiftScaleParametrized/NNCFConv2d[conv]/conv2d_0" -> "8 /nncf_model_output_0";
}
diff --git a/tests/torch/experimental/sparsify_activations/__init__.py b/tests/torch/experimental/sparsify_activations/__init__.py
new file mode 100644
index 00000000000..2e49d63977d
--- /dev/null
+++ b/tests/torch/experimental/sparsify_activations/__init__.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/tests/torch/experimental/sparsify_activations/helpers.py b/tests/torch/experimental/sparsify_activations/helpers.py
new file mode 100644
index 00000000000..437103ec166
--- /dev/null
+++ b/tests/torch/experimental/sparsify_activations/helpers.py
@@ -0,0 +1,88 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from collections import defaultdict
+
+import openvino as ov
+import torch
+import torch.nn as nn
+import transformers.models
+
+from nncf import IgnoredScope
+from nncf.experimental.torch.sparsify_activations import TargetScope
+
+
+class ThreeLinearModel(nn.Module):
+ def __init__(self) -> None:
+ super().__init__()
+ self.embedding = nn.Embedding(32, 2)
+ self.linear1 = nn.Linear(2, 3)
+ self.linear2 = nn.Linear(2, 4, bias=False)
+ self.linear3 = nn.Linear(3, 5)
+
+ def forward(self, input_ids: torch.Tensor):
+ x = self.embedding(input_ids)
+ y0 = self.linear3(self.linear1(x))
+ y1 = self.linear2(x)
+ return y0, y1
+
+
+def dummy_llama_model():
+ config = transformers.models.llama.configuration_llama.LlamaConfig(
+ vocab_size=32,
+ hidden_size=8,
+ intermediate_size=14,
+ num_attention_heads=2,
+ num_key_value_heads=1,
+ num_hidden_layers=2,
+ use_cache=False,
+ return_dict=False,
+ )
+ model = transformers.AutoModelForCausalLM.from_config(config, attn_implementation="eager")
+ return model
+
+
+def count_sparsifier_patterns_in_ov(model: ov.Model) -> int:
+ """
+ Counts the number of activation sparsification pattern "Abs -> LessEqual -> Select"
+ in the OpenVINO model.
+ """
+ pattern = ("Abs", "LessEqual", "Select")
+ result = 0
+ connections = defaultdict(list)
+ for node in model.get_ops():
+ for output in node.outputs():
+ for input_ in output.get_target_inputs():
+ connections[node].append(input_.get_node())
+
+ def dfs(node, location=0):
+ nonlocal result
+ if location < len(pattern) and node.get_type_name() == pattern[location]:
+ if location == len(pattern) - 1:
+ result += 1
+ else:
+ for next_node in connections[node]:
+ dfs(next_node, location + 1)
+
+ for node in model.get_ops():
+ dfs(node)
+ return result
+
+
+def convert_ignored_scope_to_target_scope(ignored_scope: IgnoredScope) -> TargetScope:
+ return TargetScope(
+ ignored_scope.names,
+ ignored_scope.patterns,
+ ignored_scope.types,
+ ignored_scope.subgraphs,
+ ignored_scope.validate,
+ )
diff --git a/tests/torch/experimental/sparsify_activations/test_algo.py b/tests/torch/experimental/sparsify_activations/test_algo.py
new file mode 100644
index 00000000000..b7214aaa5fa
--- /dev/null
+++ b/tests/torch/experimental/sparsify_activations/test_algo.py
@@ -0,0 +1,302 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from dataclasses import dataclass
+from pathlib import Path
+from typing import Callable, Dict, Optional
+
+import openvino as ov
+import pytest
+import torch
+import torch.nn as nn
+
+import nncf
+import nncf.experimental
+import nncf.experimental.torch.sparsify_activations
+from nncf.experimental.torch.sparsify_activations.sparsify_activations_impl import SparsifyActivationsAlgorithm
+from nncf.experimental.torch.sparsify_activations.sparsify_activations_impl import TargetScope
+from nncf.experimental.torch.sparsify_activations.torch_backend import ACTIVATIONS_SPARSIFIER_PREFIX
+from nncf.experimental.torch.sparsify_activations.torch_backend import ActivationsSparsifier
+from nncf.scopes import IgnoredScope
+from nncf.torch.model_creation import wrap_model
+from nncf.torch.nncf_network import NNCFNetwork
+from tests.shared.nx_graph import compare_nx_graph_with_reference
+from tests.shared.paths import TEST_ROOT
+from tests.torch.experimental.sparsify_activations.helpers import ThreeLinearModel
+from tests.torch.experimental.sparsify_activations.helpers import count_sparsifier_patterns_in_ov
+from tests.torch.experimental.sparsify_activations.helpers import dummy_llama_model
+from tests.torch.helpers import set_torch_seed
+
+
+@dataclass
+class SparsifyActivationsAlgorithmTestDesc:
+ name: str
+ model_getter: Callable[[], nn.Module]
+ dataset_getter: Callable[[torch.device], nncf.Dataset]
+ target_sparsity_by_scope: Dict[TargetScope, float]
+ ignored_scope: Optional[nncf.IgnoredScope]
+ ref_sparsifier_target_sparsity: Dict[str, float]
+ ref_num_batches_tracked: int
+ ref_num_patterns_in_ov: int
+
+
+sparsify_activations_algorithm_test_descs = [
+ SparsifyActivationsAlgorithmTestDesc(
+ name="linear",
+ model_getter=lambda: nn.Linear(4, 2),
+ dataset_getter=lambda device: nncf.Dataset(torch.randn([3, 2, 4]).to(device)),
+ target_sparsity_by_scope={
+ TargetScope(names=["Linear/linear_0"]): 0.3,
+ },
+ ignored_scope=None,
+ ref_sparsifier_target_sparsity={
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_Linear/linear_0": 0.3,
+ },
+ ref_num_batches_tracked=3,
+ ref_num_patterns_in_ov=1,
+ ),
+ SparsifyActivationsAlgorithmTestDesc(
+ name="three_linear",
+ model_getter=ThreeLinearModel,
+ dataset_getter=lambda device: nncf.Dataset(torch.randint(0, 30, (3, 2, 8)).to(device)),
+ target_sparsity_by_scope={
+ TargetScope(types=["linear"]): 0.4,
+ },
+ ignored_scope=None,
+ ref_sparsifier_target_sparsity={
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_ThreeLinearModel/Linear[linear1]/linear_0": 0.4,
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_ThreeLinearModel/Linear[linear2]/linear_0": 0.4,
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_ThreeLinearModel/Linear[linear3]/linear_0": 0.4,
+ },
+ ref_num_batches_tracked=3,
+ ref_num_patterns_in_ov=2, # Sparsifiers are combined in linear1 and linear2
+ ),
+ SparsifyActivationsAlgorithmTestDesc(
+ name="three_linear_ignore1",
+ model_getter=ThreeLinearModel,
+ dataset_getter=lambda device: nncf.Dataset(torch.randint(0, 30, (3, 2, 8)).to(device)),
+ target_sparsity_by_scope={
+ TargetScope(names=["ThreeLinearModel/Linear[linear2]/linear_0"]): 0.4,
+ TargetScope(patterns=[".*linear3.*"]): 0.4,
+ },
+ ignored_scope=IgnoredScope(patterns=[".*linear1.*"]),
+ ref_sparsifier_target_sparsity={
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_ThreeLinearModel/Linear[linear2]/linear_0": 0.4,
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_ThreeLinearModel/Linear[linear3]/linear_0": 0.4,
+ },
+ ref_num_batches_tracked=3,
+ ref_num_patterns_in_ov=2,
+ ),
+ SparsifyActivationsAlgorithmTestDesc(
+ name="dummy_llama",
+ model_getter=dummy_llama_model,
+ dataset_getter=lambda device: nncf.Dataset(torch.randint(0, 30, (3, 2, 8)).to(device)),
+ target_sparsity_by_scope={
+ TargetScope(patterns=[".*gate_proj.*"]): 0.2,
+ TargetScope(patterns=[".*up_proj.*"]): 0.3,
+ TargetScope(patterns=[".*down_proj.*"]): 0.4,
+ },
+ ignored_scope=None,
+ ref_sparsifier_target_sparsity={
+ (
+ f"{ACTIVATIONS_SPARSIFIER_PREFIX}_LlamaForCausalLM/LlamaModel[model]/ModuleList[layers]/"
+ f"LlamaDecoderLayer[{layer_id}]/LlamaMLP[mlp]/Linear[{name}]/linear_0"
+ ): sparsity
+ for name, sparsity in [("gate_proj", 0.2), ("up_proj", 0.3), ("down_proj", 0.4)]
+ for layer_id in [0, 1]
+ },
+ ref_num_batches_tracked=3,
+ ref_num_patterns_in_ov=6,
+ ),
+]
+
+
+@pytest.mark.parametrize(
+ "desc",
+ sparsify_activations_algorithm_test_descs,
+ ids=[p.name for p in sparsify_activations_algorithm_test_descs],
+ scope="class",
+)
+@pytest.mark.parametrize("compress_weights", [False, True], scope="class")
+@pytest.mark.parametrize("use_cuda", [False, True], ids=["cpu", "cuda"], scope="class")
+class TestSparsifyActivationsAlgorithm:
+
+ @pytest.fixture(autouse=True, scope="class")
+ def setup(self, request, desc: SparsifyActivationsAlgorithmTestDesc, compress_weights: bool, use_cuda: bool):
+ if use_cuda and not torch.cuda.is_available():
+ pytest.skip("CUDA is not available")
+ request.cls.use_cuda = use_cuda
+ device = torch.device("cuda" if use_cuda else "cpu")
+ request.cls.device = device
+ request.cls.desc = desc
+ request.cls.compress_weights = compress_weights
+ with set_torch_seed():
+ model = desc.model_getter()
+ model = model.to(device).eval()
+ dataset = desc.dataset_getter(device)
+ if compress_weights:
+ model = nncf.compress_weights(
+ model,
+ mode=nncf.CompressWeightsMode.INT8_SYM,
+ dataset=dataset,
+ )
+ model = nncf.experimental.torch.sparsify_activations.sparsify_activations(
+ model=model,
+ dataset=dataset,
+ target_sparsity_by_scope=desc.target_sparsity_by_scope,
+ ignored_scope=desc.ignored_scope,
+ )
+ request.cls.model = model
+ request.cls.dataset = dataset
+
+ def test_inserted_sparsifier(self):
+ desc: SparsifyActivationsAlgorithmTestDesc = self.desc
+ model = self.model
+ assert isinstance(model, NNCFNetwork)
+ num_sparsifiers = 0
+ for name, op in model.nncf.external_op.items():
+ if isinstance(op, ActivationsSparsifier):
+ assert op.target_sparsity == desc.ref_sparsifier_target_sparsity[name]
+ assert op.num_batches_tracked == desc.ref_num_batches_tracked
+ num_sparsifiers += 1
+ assert num_sparsifiers == len(desc.ref_sparsifier_target_sparsity)
+
+ def test_nncf_graph(self):
+ desc: SparsifyActivationsAlgorithmTestDesc = self.desc
+ model: NNCFNetwork = self.model
+ file_name = "_".join(
+ filter(None, [desc.name, "int8_sym_weights" if self.compress_weights else None, "sparse_activations"])
+ )
+ ref_dot_path = Path(TEST_ROOT, "torch", "data", "experimental", "sparsify_activations", f"{file_name}.dot")
+ graph = model.nncf.get_graph().get_graph_for_structure_analysis()
+ compare_nx_graph_with_reference(graph, ref_dot_path)
+
+ def test_export_openvino(self):
+ model: NNCFNetwork = self.model
+ example_input = next(iter(self.dataset.get_inference_data()))
+ with torch.no_grad():
+ torch_outputs = model(example_input)
+ if isinstance(torch_outputs, dict):
+ torch_outputs = tuple(torch_outputs.values())
+ if not isinstance(torch_outputs, tuple):
+ torch_outputs = (torch_outputs,)
+
+ ov_model = ov.convert_model(model, example_input=example_input)
+ assert count_sparsifier_patterns_in_ov(ov_model) == self.desc.ref_num_patterns_in_ov
+
+ compiled_model = ov.compile_model(ov_model, "CPU", config={ov.properties.hint.inference_precision: "f32"})
+ ov_outputs = compiled_model(example_input.cpu()).to_tuple()
+ assert len(torch_outputs) == len(ov_outputs)
+ for torch_output, ov_output in zip(torch_outputs, ov_outputs):
+ torch.testing.assert_close(torch_output.cpu(), torch.from_numpy(ov_output), rtol=1e-3, atol=1e-3)
+
+
+@dataclass
+class TargetSparsityByNodeTestDesc:
+ target_sparsity_by_scope: Dict[TargetScope, float]
+ ignored_scope: IgnoredScope
+ ref_target_sparsity_by_node_name: Optional[Dict[str, float]] = None
+ raised_error_message: Optional[str] = None
+
+
+@pytest.mark.parametrize(
+ "desc",
+ [
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={TargetScope(patterns=[".*linear.*"]): 0.3},
+ ignored_scope=IgnoredScope(),
+ ref_target_sparsity_by_node_name={
+ "ThreeLinearModel/Linear[linear1]/linear_0": 0.3,
+ "ThreeLinearModel/Linear[linear2]/linear_0": 0.3,
+ "ThreeLinearModel/Linear[linear3]/linear_0": 0.3,
+ },
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={TargetScope(patterns=[".*linear[23].*"], types=["linear"]): 0.3},
+ ignored_scope=IgnoredScope(),
+ ref_target_sparsity_by_node_name={
+ "ThreeLinearModel/Linear[linear1]/linear_0": 0.3,
+ "ThreeLinearModel/Linear[linear2]/linear_0": 0.3,
+ "ThreeLinearModel/Linear[linear3]/linear_0": 0.3,
+ },
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={
+ TargetScope(
+ subgraphs=[nncf.Subgraph(inputs=["/nncf_model_input_0"], outputs=["/nncf_model_output_0"])]
+ ): 0.1,
+ },
+ ignored_scope=IgnoredScope(),
+ ref_target_sparsity_by_node_name={
+ "ThreeLinearModel/Linear[linear1]/linear_0": 0.1,
+ "ThreeLinearModel/Linear[linear3]/linear_0": 0.1,
+ },
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={
+ TargetScope(names=["ThreeLinearModel/Linear[linear1]/linear_0"]): 0.1,
+ TargetScope(patterns=[".*linear[23].*"]): 0.3,
+ },
+ ignored_scope=IgnoredScope(patterns=[".*linear2.*"]),
+ ref_target_sparsity_by_node_name={
+ "ThreeLinearModel/Linear[linear1]/linear_0": 0.1,
+ "ThreeLinearModel/Linear[linear3]/linear_0": 0.3,
+ },
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={
+ TargetScope(patterns=[".*nonexist.*"], validate=False): 0.3,
+ TargetScope(names=["ThreeLinearModel/Linear[linear1]/linear_0"]): 0.3,
+ },
+ ignored_scope=IgnoredScope(),
+ ref_target_sparsity_by_node_name={
+ "ThreeLinearModel/Linear[linear1]/linear_0": 0.3,
+ },
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={TargetScope(patterns=[".*nonexist.*"]): 0.3},
+ ignored_scope=IgnoredScope(),
+ raised_error_message="not found in the graph",
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={
+ TargetScope(patterns=[".*linear2.*"]): 0.3,
+ TargetScope(types=["embedding"]): 0.3, # Embedding is not supported
+ },
+ ignored_scope=IgnoredScope(patterns=[".*linear2.*"]),
+ raised_error_message="No layers to conduct activation sparsification",
+ ),
+ TargetSparsityByNodeTestDesc(
+ target_sparsity_by_scope={
+ TargetScope(names=["ThreeLinearModel/Linear[linear1]/linear_0"]): 0.3,
+ TargetScope(patterns=[".*linear1.*"]): 0.4,
+ },
+ ignored_scope=IgnoredScope(),
+ raised_error_message="matched by multiple items",
+ ),
+ ],
+)
+def test_get_target_sparsity_by_node(desc: TargetSparsityByNodeTestDesc):
+ model = wrap_model(
+ ThreeLinearModel(),
+ example_input=torch.ones((2, 4)).long(),
+ trace_parameters=True,
+ )
+ graph = model.nncf.get_graph()
+ algo = SparsifyActivationsAlgorithm(desc.target_sparsity_by_scope, desc.ignored_scope)
+ algo._set_backend_entity(model)
+ if desc.raised_error_message is not None:
+ with pytest.raises(nncf.ValidationError, match=desc.raised_error_message):
+ algo._get_target_sparsity_by_node(graph)
+ else:
+ target_sparsity_by_node = algo._get_target_sparsity_by_node(graph)
+ target_sparsity_by_node_name = {node.node_name: sparsity for node, sparsity in target_sparsity_by_node.items()}
+ assert sorted(target_sparsity_by_node_name.items()) == sorted(desc.ref_target_sparsity_by_node_name.items())
diff --git a/tests/torch/experimental/sparsify_activations/test_components.py b/tests/torch/experimental/sparsify_activations/test_components.py
new file mode 100644
index 00000000000..9c5fde1c9e5
--- /dev/null
+++ b/tests/torch/experimental/sparsify_activations/test_components.py
@@ -0,0 +1,295 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from dataclasses import dataclass
+from typing import List
+
+import pytest
+import torch
+
+import nncf
+import nncf.experimental
+import nncf.experimental.torch.sparsify_activations
+from nncf.experimental.torch.sparsify_activations.target_scope import TargetScope
+from nncf.experimental.torch.sparsify_activations.target_scope import get_target_node_names_from_target_scope
+from nncf.experimental.torch.sparsify_activations.torch_backend import ActivationsSparsifier
+from nncf.experimental.torch.sparsify_activations.torch_backend import PTSparsifyActivationsAlgoBackend
+from nncf.torch.model_creation import wrap_model
+from nncf.torch.nncf_network import NNCFNetwork
+from tests.common.test_ignored_scope import CONV_TYPE
+from tests.common.test_ignored_scope import IGNORED_SCOPES_TEST_DATA
+from tests.common.test_ignored_scope import LINEAR_TYPE
+from tests.common.test_ignored_scope import WRONG_IGNORED_SCOPES_TEST_DATA
+from tests.common.test_ignored_scope import NNCFGraphToTestIgnoredScope
+from tests.torch.experimental.sparsify_activations.helpers import ThreeLinearModel
+from tests.torch.experimental.sparsify_activations.helpers import convert_ignored_scope_to_target_scope
+
+
+@dataclass
+class SparsifierForwardTestDesc:
+ target_sparsity: float
+ alpha: float
+ input_batches: List[torch.Tensor]
+ ref_running_thresholds: List[torch.Tensor]
+ ref_outputs: List[torch.Tensor]
+
+
+sparsifier_forward_during_calibration_test_descs = {
+ "fp16": SparsifierForwardTestDesc(
+ target_sparsity=0.4,
+ alpha=0.2,
+ input_batches=[
+ torch.tensor([1.0, 3.0, 2.0, 4.0], dtype=torch.float16),
+ torch.tensor([4.0, 5.0, 4.5, -3.0], dtype=torch.float16),
+ ],
+ ref_running_thresholds=[
+ torch.tensor(2.1992, dtype=torch.float16),
+ torch.tensor(3.2559, dtype=torch.float16),
+ ],
+ ref_outputs=[
+ torch.tensor([0.0, 3.0, 0.0, 4.0], dtype=torch.float16),
+ torch.tensor([4.0, 5.0, 4.5, 0.0], dtype=torch.float16),
+ ],
+ ),
+ "fp32": SparsifierForwardTestDesc(
+ target_sparsity=0.8,
+ alpha=0.1,
+ input_batches=[
+ torch.tensor([-1.0, 1.0, 2.5]),
+ torch.tensor([1.0, 2.0, 0.0]),
+ torch.tensor([2.0, 0.0, 3.0]),
+ ],
+ ref_running_thresholds=[
+ torch.tensor(1.9000),
+ torch.tensor(1.7421),
+ torch.tensor(2.0587),
+ ],
+ ref_outputs=[
+ torch.tensor([0.0, 0.0, 2.5]),
+ torch.tensor([0.0, 2.0, 0.0]),
+ torch.tensor([0.0, 0.0, 3.0]),
+ ],
+ ),
+ "varying_shape": SparsifierForwardTestDesc(
+ target_sparsity=0.6,
+ alpha=0.5,
+ input_batches=[
+ torch.tensor([1.0, 2.0, 7.0]),
+ torch.tensor([[1.0, 2.0], [7.0, -3.0]]),
+ torch.tensor([[[1.0], [5.5], [8.5], [-3.0], [2.5]]]),
+ ],
+ ref_running_thresholds=[
+ torch.tensor(3.0000),
+ torch.tensor(2.8667),
+ torch.tensor(3.5143),
+ ],
+ ref_outputs=[
+ torch.tensor([0.0, 0.0, 7.0]),
+ torch.tensor([[0.0, 0.0], [7.0, -3.0]]),
+ torch.tensor([[[0.0], [5.5], [8.5], [0.0], [0.0]]]),
+ ],
+ ),
+}
+
+
+class TestActivationsSparsifier:
+ @pytest.fixture(autouse=True)
+ def setup(self, use_cuda: bool):
+ if use_cuda and not torch.cuda.is_available():
+ pytest.skip("CUDA is not available")
+ self.device = torch.device("cuda" if use_cuda else "cpu")
+
+ @pytest.mark.parametrize("dtype", [torch.float32, torch.float16])
+ def test_forward_before_calibration(self, use_cuda: bool, dtype: torch.dtype):
+ device = self.device
+ input_tensor = torch.rand([3, 3], device=device, dtype=dtype)
+ sparsifier = ActivationsSparsifier(target_sparsity=0.9).to(device)
+ assert sparsifier.freeze is True
+ assert not sparsifier.num_batches_tracked.is_nonzero()
+ assert sparsifier.running_threshold.isneginf()
+ output_tensor = sparsifier(input_tensor)
+ # The output tensor is a new tensor
+ assert not output_tensor.is_set_to(input_tensor)
+ # Before calibration, the sparsifier does not change the input
+ torch.testing.assert_close(output_tensor, input_tensor, rtol=1e-4, atol=1e-4)
+
+ @pytest.mark.parametrize(
+ "desc",
+ sparsifier_forward_during_calibration_test_descs.values(),
+ ids=sparsifier_forward_during_calibration_test_descs.keys(),
+ )
+ def test_forward_during_calibration(self, use_cuda: bool, desc: SparsifierForwardTestDesc):
+ device = self.device
+ sparsifier = ActivationsSparsifier(desc.target_sparsity, desc.alpha).to(device)
+ sparsifier.freeze = False
+ running_thresholds = []
+ outputs = []
+ with torch.no_grad():
+ for batch in desc.input_batches:
+ output = sparsifier(batch.to(device))
+ running_thresholds.append(sparsifier.running_threshold)
+ outputs.append(output)
+ assert sparsifier.num_batches_tracked == len(desc.input_batches)
+ assert len(running_thresholds) == len(desc.ref_running_thresholds)
+ for threshold, ref_threshold in zip(running_thresholds, desc.ref_running_thresholds):
+ assert threshold.device.type == device.type
+ torch.testing.assert_close(threshold, ref_threshold, rtol=1e-4, atol=1e-4, check_device=False)
+ assert len(outputs) == len(desc.ref_outputs)
+ for output, ref_output in zip(outputs, desc.ref_outputs):
+ assert output.device.type == device.type
+ torch.testing.assert_close(output, ref_output, rtol=1e-4, atol=1e-4, check_device=False)
+
+ @pytest.mark.parametrize("dtype", [torch.float32, torch.float16])
+ def test_forward_after_calibration(self, use_cuda: bool, dtype: torch.dtype):
+ device = self.device
+ sparsifier = ActivationsSparsifier(target_sparsity=0.9).to(device)
+ sparsifier.running_threshold.fill_(0.1)
+ sparsifier.num_batches_tracked.fill_(100)
+
+ for _ in range(2):
+ # The sparsifier does not change in the following forwards
+ input_tensor = torch.rand([2, 10], device=device, dtype=dtype)
+ ref_output = torch.where(input_tensor.abs() <= 0.1, 0.0, input_tensor)
+ output_tensor = sparsifier(ref_output)
+ assert sparsifier.num_batches_tracked == 100
+ torch.testing.assert_close(
+ sparsifier.running_threshold, torch.tensor(0.1, device=device), rtol=1e-4, atol=1e-4
+ )
+ torch.testing.assert_close(output_tensor, ref_output, rtol=1e-4, atol=1e-4)
+
+
+class TestPTSparsifyActivationsAlgoBackend:
+ def test_get_sparsifiers(self):
+ model, dataset = self.create_model_and_dataset()
+ sparse_model = nncf.experimental.torch.sparsify_activations.sparsify_activations(
+ model, dataset, target_sparsity_by_scope={TargetScope(patterns=[".*"]): 0.5}
+ )
+ backend = PTSparsifyActivationsAlgoBackend()
+ sparsifiers = backend.get_sparsifiers(sparse_model)
+ assert len(sparsifiers) == 3
+
+ @pytest.mark.parametrize("compress_weights", [False, True])
+ def test_insert_sparsifiers(self, compress_weights: bool):
+ model, dataset = self.create_model_and_dataset(compress_weights=compress_weights)
+ example_input = next(iter(dataset.get_inference_data()))
+ ref_output = model(example_input)
+
+ graph = model.nncf.get_graph()
+ nodes = graph.get_nodes_by_metatypes(PTSparsifyActivationsAlgoBackend.SUPPORTED_METATYPES)
+ backend = PTSparsifyActivationsAlgoBackend()
+ model_with_sparsifiers = backend.insert_sparsifiers(model, graph, {node: 0.9 for node in nodes})
+ assert len(backend.get_sparsifiers(model_with_sparsifiers)) == len(nodes)
+
+ output = model_with_sparsifiers(example_input)
+ torch.testing.assert_close(
+ output, ref_output, rtol=1e-4, atol=1e-4
+ ) # At this time the sparsifers do not change the output
+
+ def test_calibrate_sparsifiers(self, mocker):
+ model, dataset = self.create_model_and_dataset()
+ graph = model.nncf.get_graph()
+ backend = PTSparsifyActivationsAlgoBackend()
+ mock_sparsifier = ActivationsSparsifier(0.5, 0.1)
+ mock_sparsifier.freeze = True
+ num_model_forward_calls = 0
+
+ def model_forward_pre_hook(model: NNCFNetwork, args):
+ nonlocal num_model_forward_calls
+ num_model_forward_calls += 1
+ assert model.training is False
+
+ model.register_forward_pre_hook(model_forward_pre_hook)
+
+ with mocker.patch.object(backend, "get_sparsifiers", return_value=[mock_sparsifier]):
+ backend.calibrate_sparsifiers(model, graph, dataset)
+ assert mock_sparsifier.freeze is True
+ assert num_model_forward_calls == dataset.get_length()
+
+ def create_model_and_dataset(self, compress_weights: bool = False):
+ model = ThreeLinearModel()
+ dataset = nncf.Dataset(torch.randint(0, 30, (3, 2, 8)))
+ if compress_weights:
+ model = nncf.compress_weights(
+ model,
+ mode=nncf.CompressWeightsMode.INT8_SYM,
+ dataset=dataset,
+ )
+ else:
+ model = wrap_model(
+ model,
+ example_input=next(iter(dataset.get_inference_data())),
+ trace_parameters=True,
+ )
+ return model, dataset
+
+
+class TestTargetScope:
+ SAME_HASH_PAIRS = [
+ (TargetScope(), TargetScope()),
+ (
+ TargetScope(
+ names=["node_1", "node_2"],
+ patterns=["node\\d", "layer\\d"],
+ types=["Conv", "MatMul"],
+ subgraphs=[
+ nncf.Subgraph(inputs=["node_1", "node_2"], outputs=["node_3", "node_4"]),
+ nncf.Subgraph(inputs=["layer_1", "layer_2"], outputs=["layer_3", "layer_4", "layer_5"]),
+ ],
+ ),
+ TargetScope(
+ names=["node_2", "node_1"],
+ patterns=["layer\\d", "node\\d"],
+ types=["MatMul", "Conv"],
+ subgraphs=[
+ nncf.Subgraph(inputs=["layer_2", "layer_1"], outputs=["layer_5", "layer_4", "layer_3"]),
+ nncf.Subgraph(inputs=["node_2", "node_1"], outputs=["node_4", "node_3"]),
+ ],
+ ),
+ ),
+ ]
+
+ DIFFERENT_HASH_PAIRS = [
+ (TargetScope(), TargetScope(types=["Conv"])),
+ (
+ TargetScope(names=["node_1"]),
+ TargetScope(names=["node_1"], patterns=["layer\\d"]),
+ ),
+ (
+ TargetScope(subgraphs=[nncf.Subgraph(inputs=["node_1"], outputs=["node_2"])]),
+ TargetScope(subgraphs=[nncf.Subgraph(inputs=["node_1"], outputs=["node_3"])]),
+ ),
+ ]
+
+ TARGET_SCOPE_MATCH_DATA = [
+ (convert_ignored_scope_to_target_scope(ignored_scope), ref_ignored_names)
+ for ignored_scope, ref_ignored_names in IGNORED_SCOPES_TEST_DATA
+ ]
+ WRONG_TARGET_SCOPE_MATCH_DATA = list(map(convert_ignored_scope_to_target_scope, WRONG_IGNORED_SCOPES_TEST_DATA))
+
+ @pytest.mark.parametrize("target_scope1,target_scope2", SAME_HASH_PAIRS)
+ def test_same_hash(self, target_scope1: TargetScope, target_scope2: TargetScope):
+ assert hash(target_scope1) == hash(target_scope2)
+
+ @pytest.mark.parametrize("target_scope1,target_scope2", DIFFERENT_HASH_PAIRS)
+ def test_different_hash(self, target_scope1: TargetScope, target_scope2: TargetScope):
+ assert hash(target_scope1) != hash(target_scope2)
+
+ @pytest.mark.parametrize("target_scope,ref_target_names", TARGET_SCOPE_MATCH_DATA)
+ def test_get_target_node_names_from_target_scope(self, target_scope: TargetScope, ref_target_names: List[str]):
+ nncf_graph = NNCFGraphToTestIgnoredScope(CONV_TYPE, LINEAR_TYPE).nncf_graph
+ target_names = get_target_node_names_from_target_scope(target_scope, nncf_graph)
+ assert sorted(target_names) == sorted(ref_target_names)
+
+ @pytest.mark.parametrize("target_scope", WRONG_TARGET_SCOPE_MATCH_DATA)
+ def test_wrong_target_scope(self, target_scope: TargetScope):
+ nncf_graph = NNCFGraphToTestIgnoredScope(CONV_TYPE, LINEAR_TYPE).nncf_graph
+ with pytest.raises(nncf.ValidationError):
+ get_target_node_names_from_target_scope(target_scope, nncf_graph)
diff --git a/tests/torch/fx/__init__.py b/tests/torch/fx/__init__.py
new file mode 100644
index 00000000000..2e49d63977d
--- /dev/null
+++ b/tests/torch/fx/__init__.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/tests/torch/fx/helpers.py b/tests/torch/fx/helpers.py
new file mode 100644
index 00000000000..fc0f48274da
--- /dev/null
+++ b/tests/torch/fx/helpers.py
@@ -0,0 +1,111 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from pathlib import Path
+
+import torch.fx
+import torch.nn.parallel
+import torch.optim
+import torch.utils.data
+import torch.utils.data.distributed
+import torchvision.datasets as datasets
+import torchvision.transforms as transforms
+from fastdownload import FastDownload
+from torch.fx.passes.graph_drawer import FxGraphDrawer
+
+
+class TinyImagenetDatasetManager:
+ DATASET_URL = "http://cs231n.stanford.edu/tiny-imagenet-200.zip"
+ DATASET_PATH = "~/.cache/nncf/tests/datasets"
+
+ def __init__(self, image_size: int, batch_size: int) -> None:
+ self.image_size = image_size
+ self.batch_size = batch_size
+
+ @staticmethod
+ def download_dataset() -> Path:
+ downloader = FastDownload(base=TinyImagenetDatasetManager.DATASET_PATH, archive="downloaded", data="extracted")
+ return downloader.get(TinyImagenetDatasetManager.DATASET_URL)
+
+ @staticmethod
+ def prepare_tiny_imagenet_200(dataset_dir: Path):
+ # Format validation set the same way as train set is formatted.
+ val_data_dir = dataset_dir / "val"
+ val_images_dir = val_data_dir / "images"
+ if not val_images_dir.exists():
+ return
+
+ val_annotations_file = val_data_dir / "val_annotations.txt"
+ with open(val_annotations_file, "r") as f:
+ val_annotation_data = map(lambda line: line.split("\t")[:2], f.readlines())
+ for image_filename, image_label in val_annotation_data:
+ from_image_filepath = val_images_dir / image_filename
+ to_image_dir = val_data_dir / image_label
+ if not to_image_dir.exists():
+ to_image_dir.mkdir()
+ to_image_filepath = to_image_dir / image_filename
+ from_image_filepath.rename(to_image_filepath)
+ val_annotations_file.unlink()
+ val_images_dir.rmdir()
+
+ def create_data_loaders(self):
+ dataset_path = TinyImagenetDatasetManager.download_dataset()
+
+ TinyImagenetDatasetManager.prepare_tiny_imagenet_200(dataset_path)
+ print(f"Successfully downloaded and prepared dataset at: {dataset_path}")
+
+ train_dir = dataset_path / "train"
+ val_dir = dataset_path / "val"
+
+ normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
+
+ train_dataset = datasets.ImageFolder(
+ train_dir,
+ transforms.Compose(
+ [
+ transforms.Resize(self.image_size),
+ transforms.RandomHorizontalFlip(),
+ transforms.ToTensor(),
+ normalize,
+ ]
+ ),
+ )
+ val_dataset = datasets.ImageFolder(
+ val_dir,
+ transforms.Compose(
+ [
+ transforms.Resize(self.image_size),
+ transforms.ToTensor(),
+ normalize,
+ ]
+ ),
+ )
+
+ train_loader = torch.utils.data.DataLoader(
+ train_dataset, batch_size=self.batch_size, shuffle=True, num_workers=0, pin_memory=True, sampler=None
+ )
+
+ val_loader = torch.utils.data.DataLoader(
+ val_dataset, batch_size=self.batch_size, shuffle=False, num_workers=0, pin_memory=True
+ )
+
+ # Creating separate dataloader with batch size = 1
+ # as dataloaders with batches > 1 are not supported yet.
+ calibration_dataset = torch.utils.data.DataLoader(
+ val_dataset, batch_size=1, shuffle=False, num_workers=0, pin_memory=True
+ )
+
+ return train_loader, val_loader, calibration_dataset
+
+
+def visualize_fx_model(model: torch.fx.GraphModule, output_svg_path: str):
+ g = FxGraphDrawer(model, output_svg_path)
+ g.get_dot_graph().write_svg(output_svg_path)
diff --git a/tests/torch/fx/test_fast_bias_correction.py b/tests/torch/fx/test_fast_bias_correction.py
new file mode 100644
index 00000000000..dcc5b1e5e8d
--- /dev/null
+++ b/tests/torch/fx/test_fast_bias_correction.py
@@ -0,0 +1,98 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import List
+
+import pytest
+import torch
+import torch.fx
+from torch._export import capture_pre_autograd_graph
+
+from nncf.common.factory import NNCFGraphFactory
+from nncf.experimental.torch.fx.transformations import apply_quantization_transformations
+from nncf.quantization.algorithms.fast_bias_correction.torch_fx_backend import FXFastBiasCorrectionAlgoBackend
+from nncf.torch.dynamic_graph.patch_pytorch import disable_patching
+from nncf.torch.model_graph_manager import OPERATORS_WITH_BIAS_METATYPES
+from tests.cross_fw.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
+
+
+class TestTorchFXFBCAlgorithm(TemplateTestFBCAlgorithm):
+ @staticmethod
+ def list_to_backend_type(data: List) -> torch.Tensor:
+ return torch.Tensor(data)
+
+ @staticmethod
+ def get_backend() -> FXFastBiasCorrectionAlgoBackend:
+ return FXFastBiasCorrectionAlgoBackend
+
+ def _get_fx_model(model: torch.nn.Module) -> torch.fx.GraphModule:
+ device = next(model.named_parameters())[1].device
+ input_shape = model.INPUT_SIZE
+ if input_shape is None:
+ input_shape = [1, 3, 32, 32]
+ ex_input = torch.ones(input_shape).to(device)
+ model.eval()
+ with disable_patching():
+ fx_model = capture_pre_autograd_graph(model, args=(ex_input,))
+ apply_quantization_transformations(fx_model)
+ return fx_model
+
+ @staticmethod
+ def backend_specific_model(model: torch.nn.Module, tmp_dir: str) -> torch.fx.GraphModule:
+ fx_model = TestTorchFXFBCAlgorithm._get_fx_model(model)
+ return fx_model
+
+ @staticmethod
+ def fn_to_type(tensor):
+ return torch.Tensor(tensor)
+
+ @staticmethod
+ def get_transform_fn():
+ def transform_fn(data_item):
+ tensor, _ = data_item
+ return tensor
+
+ return transform_fn
+
+ @staticmethod
+ def check_bias(model: torch.fx.GraphModule, ref_bias: list):
+ ref_bias = torch.Tensor(ref_bias)
+ nncf_graph = NNCFGraphFactory.create(model)
+ for node in nncf_graph.get_all_nodes():
+ if node.metatype not in OPERATORS_WITH_BIAS_METATYPES:
+ continue
+ bias_value = FXFastBiasCorrectionAlgoBackend.get_bias_value(node, nncf_graph, model)
+ bias_value = torch.flatten(bias_value.data).cpu()
+ # TODO(AlexanderDokuchaev): return atol=0.0001 after fix 109189
+ assert torch.all(torch.isclose(bias_value, ref_bias, atol=0.02)), f"{bias_value} != {ref_bias}"
+ return
+ raise ValueError("Not found node with bias")
+
+
+@pytest.mark.cuda
+@pytest.mark.skipif(not torch.cuda.is_available(), reason="Skipping for CPU-only setups")
+class TestTorchFXCudaFBCAlgorithm(TestTorchFXFBCAlgorithm):
+ @staticmethod
+ def list_to_backend_type(data: List) -> torch.Tensor:
+ return torch.Tensor(data).cuda()
+
+ @staticmethod
+ def backend_specific_model(model: bool, tmp_dir: str):
+ fx_cuda_model = TestTorchFXFBCAlgorithm._get_fx_model(model.cuda())
+ return fx_cuda_model
+
+ @staticmethod
+ def fn_to_type(tensor):
+ return torch.Tensor(tensor).cuda()
+
+ @staticmethod
+ def check_bias(model: torch.fx.GraphModule, ref_bias: list):
+ TestTorchFXFBCAlgorithm.check_bias(model, ref_bias)
diff --git a/tests/torch/fx/test_model_transformer.py b/tests/torch/fx/test_model_transformer.py
new file mode 100644
index 00000000000..7edb8fa482d
--- /dev/null
+++ b/tests/torch/fx/test_model_transformer.py
@@ -0,0 +1,65 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from dataclasses import dataclass
+from pathlib import Path
+from typing import Any, Tuple
+
+import pytest
+import torch
+from torch._export import capture_pre_autograd_graph
+
+from nncf.common.graph.transformations.layout import TransformationLayout
+from nncf.experimental.torch.fx.model_transformer import FXModelTransformer
+from nncf.experimental.torch.fx.nncf_graph_builder import GraphConverter
+from nncf.torch import disable_patching
+from nncf.torch.graph.transformations.commands import PTModelExtractionCommand
+from tests.torch.test_compressed_graph import check_graph
+from tests.torch.test_models.synthetic import ConvolutionWithAllConstantInputsModel
+from tests.torch.test_models.synthetic import ConvolutionWithNotTensorBiasModel
+
+
+@dataclass
+class ModelExtractionTestCase:
+ model: torch.nn.Module
+ input_shape: Tuple[int, ...]
+ command: PTModelExtractionCommand
+ ref: None = None
+
+
+EXTRACTED_GRAPHS_DIR_NAME = Path("fx") / "extracted"
+
+MODEL_EXTRACTION_CASES = (
+ ModelExtractionTestCase(
+ ConvolutionWithNotTensorBiasModel, (1, 1, 3, 3), PTModelExtractionCommand(["conv2d"], ["conv2d"])
+ ),
+ ModelExtractionTestCase(
+ ConvolutionWithAllConstantInputsModel, (1, 1, 3, 3), PTModelExtractionCommand(["conv2d"], ["conv2d"])
+ ),
+)
+
+
+def idfn(value: Any):
+ if isinstance(value, ModelExtractionTestCase):
+ return value.model.__name__
+ return None
+
+
+@pytest.mark.parametrize("test_case", MODEL_EXTRACTION_CASES, ids=idfn)
+def test_model_extraction(test_case: ModelExtractionTestCase):
+ with torch.no_grad():
+ with disable_patching():
+ captured_model = capture_pre_autograd_graph(test_case.model(), (torch.ones(test_case.input_shape),))
+ layout = TransformationLayout()
+ layout.register(test_case.command)
+ extracted_model = FXModelTransformer(captured_model).transform(layout)
+ nncf_graph = GraphConverter.create_nncf_graph(extracted_model)
+ check_graph(nncf_graph, f"{test_case.model.__name__}.dot", str(EXTRACTED_GRAPHS_DIR_NAME))
diff --git a/tests/torch/fx/test_models.py b/tests/torch/fx/test_models.py
new file mode 100644
index 00000000000..1d86ec4fd63
--- /dev/null
+++ b/tests/torch/fx/test_models.py
@@ -0,0 +1,158 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json
+import os
+from dataclasses import dataclass
+from functools import partial
+from pathlib import Path
+from typing import Callable, Dict, Tuple, Type
+
+import openvino.torch # noqa
+import pytest
+import torch
+import torch.fx
+import torch.nn.parallel
+import torch.optim
+import torch.utils.data
+import torch.utils.data.distributed
+import torchvision.models as models
+from torch._export import capture_pre_autograd_graph
+
+import nncf
+from nncf.common.graph.graph import NNCFNodeName
+from nncf.common.graph.operator_metatypes import OperatorMetatype
+from nncf.common.utils.os import safe_open
+from nncf.experimental.torch.fx.nncf_graph_builder import GraphConverter
+from nncf.quantization.advanced_parameters import AdvancedQuantizationParameters
+from nncf.torch.dynamic_graph.patch_pytorch import disable_patching
+from tests.shared.paths import TEST_ROOT
+from tests.torch import test_models
+from tests.torch.test_compressed_graph import check_graph
+
+FX_DIR_NAME = Path("fx")
+FX_QUANTIZED_DIR_NAME = Path("fx") / "quantized"
+
+
+@dataclass
+class ModelCase:
+ model_builder: Callable[[], torch.nn.Module]
+ model_id: str
+ input_shape: Tuple[int]
+
+
+def torchvision_model_case(model_id: str, input_shape: Tuple[int,]):
+ model = getattr(models, model_id)
+ return ModelCase(partial(model, weights=None), model_id, input_shape)
+
+
+TEST_MODELS = (
+ torchvision_model_case("resnet18", (1, 3, 224, 224)),
+ torchvision_model_case("mobilenet_v3_small", (1, 3, 224, 224)),
+ torchvision_model_case("vit_b_16", (1, 3, 224, 224)),
+ torchvision_model_case("swin_v2_s", (1, 3, 224, 224)),
+ ModelCase(test_models.UNet, "unet", [1, 3, 224, 224]),
+)
+
+
+def get_dot_filename(model_name):
+ return model_name + ".dot"
+
+
+def get_json_filename(model_name):
+ return model_name + ".json"
+
+
+def get_full_path_to_json(model_json_name: str) -> str:
+ path_to_dir = TEST_ROOT / "torch" / "data" / "reference_graphs" / "fx" / "reference_metatypes"
+ path_to_json = path_to_dir / model_json_name
+ return path_to_json
+
+
+def get_ref_metatypes_from_json(
+ model_name: str, model_metatypes: Dict[NNCFNodeName, Type[OperatorMetatype]]
+) -> Dict[NNCFNodeName, Type[OperatorMetatype]]:
+
+ model_json_name = get_json_filename(model_name)
+ complete_path = get_full_path_to_json(model_json_name)
+
+ json_parent_dir = Path(complete_path).parent
+
+ if os.getenv("NNCF_TEST_REGEN_JSON") is not None:
+ if not os.path.exists(json_parent_dir):
+ os.makedirs(json_parent_dir)
+ with safe_open(complete_path, "w") as file:
+ json.dump(model_metatypes, file, indent=4)
+
+ with safe_open(complete_path, "r") as file:
+ return json.load(file)
+
+
+@pytest.mark.parametrize("test_case", TEST_MODELS, ids=[m.model_id for m in TEST_MODELS])
+def test_model(test_case: ModelCase):
+ with disable_patching():
+ device = torch.device("cpu")
+ model_name = test_case.model_id
+ model = test_case.model_builder()
+ model.to(device)
+
+ with torch.no_grad():
+ ex_input = torch.ones(test_case.input_shape)
+ model.eval()
+ exported_model = capture_pre_autograd_graph(model, args=(ex_input,))
+ nncf_graph = GraphConverter.create_nncf_graph(exported_model)
+
+ # Check NNCFGrpah
+ dot_filename = get_dot_filename(model_name)
+ check_graph(nncf_graph, dot_filename, FX_DIR_NAME)
+
+ # Check metatypes
+ model_metatypes = {n.node_name: n.metatype.__name__ for n in nncf_graph.get_all_nodes()}
+ ref_metatypes = get_ref_metatypes_from_json(model_name, model_metatypes)
+ assert model_metatypes == ref_metatypes
+
+
+TEST_MODELS_QUANIZED = (
+ (ModelCase(test_models.UNet, "unet", [1, 3, 224, 224]), {}),
+ (torchvision_model_case("resnet18", (1, 3, 224, 224)), {}),
+ (torchvision_model_case("mobilenet_v3_small", (1, 3, 224, 224)), {}),
+ (torchvision_model_case("vit_b_16", (1, 3, 224, 224)), {"model_type": nncf.ModelType.TRANSFORMER}),
+ (torchvision_model_case("swin_v2_s", (1, 3, 224, 224)), {"model_type": nncf.ModelType.TRANSFORMER}),
+)
+
+
+@pytest.mark.parametrize(
+ ("model_case", "quantization_parameters"), TEST_MODELS_QUANIZED, ids=[m[0].model_id for m in TEST_MODELS_QUANIZED]
+)
+def test_quantized_model(model_case: ModelCase, quantization_parameters):
+ with disable_patching():
+ model = model_case.model_builder()
+ example_input = torch.ones(model_case.input_shape)
+
+ with torch.no_grad():
+ model.eval()
+ fx_model = capture_pre_autograd_graph(model, args=(example_input,))
+
+ def transform_fn(data_item):
+ return data_item.to("cpu")
+
+ calibration_dataset = nncf.Dataset([example_input], transform_fn)
+
+ quantization_parameters["advanced_parameters"] = AdvancedQuantizationParameters(disable_bias_correction=True)
+ quantization_parameters["subset_size"] = 1
+
+ quantized_model = nncf.quantize(fx_model, calibration_dataset, **quantization_parameters)
+ # Uncomment to visualize torch fx graph
+ # from tests.torch.fx.helpers import visualize_fx_model
+ # visualize_fx_model(quantized_model, f"{model_case.model_id}_int8.svg")
+
+ nncf_graph = GraphConverter.create_nncf_graph(quantized_model)
+ check_graph(nncf_graph, get_dot_filename(model_case.model_id), FX_QUANTIZED_DIR_NAME)
diff --git a/tests/torch/fx/test_sanity.py b/tests/torch/fx/test_sanity.py
new file mode 100644
index 00000000000..a3f0d828260
--- /dev/null
+++ b/tests/torch/fx/test_sanity.py
@@ -0,0 +1,145 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from dataclasses import dataclass
+from typing import Tuple
+
+import numpy as np
+import openvino.torch # noqa
+import pytest
+import torch
+import torch.nn as nn
+import torch.nn.parallel
+import torch.optim
+import torch.utils.data
+import torch.utils.data.distributed
+import torchvision.models as models
+from torch._export import capture_pre_autograd_graph
+
+import nncf
+from nncf.common.logging.track_progress import track
+from nncf.torch.dynamic_graph.patch_pytorch import disable_patching
+from tests.torch.fx.helpers import TinyImagenetDatasetManager
+
+IMAGE_SIZE = 64
+BATCH_SIZE = 128
+
+
+@pytest.fixture(name="tiny_imagenet_dataset", scope="module")
+def tiny_imagenet_dataset_fixture():
+ return TinyImagenetDatasetManager(IMAGE_SIZE, BATCH_SIZE).create_data_loaders()
+
+
+@dataclass
+class SanitySampleCase:
+ model_id: str
+ checkpoint_url: str
+ top1_int8_ref: float
+ ref_num_q: int
+ ref_num_dq: int
+
+
+MODELS = (
+ SanitySampleCase(
+ "resnet18",
+ "https://storage.openvinotoolkit.org/repositories/nncf/openvino_notebook_ckpts/302_resnet18_fp32_v1.pth",
+ 55.35,
+ 51,
+ 58,
+ ),
+)
+
+
+def get_model(model_id: str, checkpoint_url: str, device: torch.device) -> torch.nn.Module:
+ num_classes = 200 # 200 is for Tiny ImageNet, default is 1000 for ImageNet
+ model = getattr(models, model_id)(weights=None)
+ # Update the last FC layer for Tiny ImageNet number of classes.
+ model.fc = nn.Linear(in_features=512, out_features=num_classes, bias=True)
+ model.to(device)
+ checkpoint = torch.hub.load_state_dict_from_url(checkpoint_url, map_location=torch.device("cpu"), progress=False)
+ model.load_state_dict(checkpoint["state_dict"])
+ return model
+
+
+def validate(val_loader: torch.utils.data.DataLoader, model: torch.nn.Module, device: torch.device) -> float:
+ top1_sum = 0.0
+ with torch.no_grad():
+ for images, target in track(val_loader, total=len(val_loader), description="Validation:"):
+ images = images.to(device)
+ target = target.to(device)
+
+ # Compute output.
+ output = model(images)
+
+ # Measure accuracy and record loss.
+ [acc1] = accuracy(output, target, topk=(1,))
+ top1_sum += acc1.item()
+
+ num_samples = len(val_loader)
+ top1_avg = top1_sum / num_samples
+ return top1_avg
+
+
+def accuracy(output: torch.Tensor, target: torch.tensor, topk: Tuple[int, ...] = (1,)):
+ with torch.no_grad():
+ maxk = max(topk)
+ batch_size = target.size(0)
+
+ _, pred = output.topk(maxk, 1, True, True)
+ pred = pred.t()
+ correct = pred.eq(target.view(1, -1).expand_as(pred))
+
+ res = []
+ for k in topk:
+ correct_k = correct[:k].reshape(-1).float().sum(0, keepdim=True)
+ res.append(correct_k.mul_(100.0 / batch_size))
+ return res
+
+
+def count_q_dq(model: torch.fx.GraphModule):
+ q, dq = 0, 0
+ for node in model.graph.nodes:
+ if node.op == "call_function" and hasattr(node.target, "overloadpacket"):
+ node_type = str(node.target.overloadpacket).split(".")[1]
+ if node_type in ["quantize_per_tensor", "quantize_per_channel"]:
+ q += 1
+ elif node_type in ["dequantize_per_tensor", "dequantize_per_channel"]:
+ dq += 1
+ return q, dq
+
+
+@pytest.mark.parametrize("test_case", MODELS)
+def test_sanity(test_case: SanitySampleCase, tiny_imagenet_dataset):
+ with disable_patching():
+ torch.manual_seed(42)
+ device = torch.device("cpu")
+ model = get_model(test_case.model_id, test_case.checkpoint_url, device)
+ _, val_dataloader, calibration_dataset = tiny_imagenet_dataset
+
+ def transform_fn(data_item):
+ return data_item[0].to(device)
+
+ calibration_dataset = nncf.Dataset(calibration_dataset, transform_fn)
+
+ with torch.no_grad():
+ ex_input = next(iter(calibration_dataset.get_inference_data()))
+ model.eval()
+ exported_model = capture_pre_autograd_graph(model, args=(ex_input,))
+ quantized_model = nncf.quantize(exported_model, calibration_dataset)
+ quantized_model = torch.compile(quantized_model, backend="openvino")
+
+ top1_int8 = validate(val_dataloader, quantized_model, device)
+ assert np.isclose(top1_int8, test_case.top1_int8_ref, atol=0.1)
+
+ num_q, num_dq = count_q_dq(quantized_model)
+ assert num_q == test_case.ref_num_q
+ assert num_dq == test_case.ref_num_dq
diff --git a/tests/torch/fx/test_smooth_quant.py b/tests/torch/fx/test_smooth_quant.py
new file mode 100644
index 00000000000..a6b468fc58e
--- /dev/null
+++ b/tests/torch/fx/test_smooth_quant.py
@@ -0,0 +1,153 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Any, Callable, Dict, Type
+
+import numpy as np
+import openvino.runtime as ov
+import pytest
+import torch
+from torch._export import capture_pre_autograd_graph
+
+from nncf import IgnoredScope
+from nncf.experimental.torch.fx.transformations import apply_quantization_transformations
+from nncf.parameters import ModelType
+from nncf.quantization.advanced_parameters import AdvancedQuantizationParameters
+from nncf.quantization.advanced_parameters import AdvancedSmoothQuantParameters
+from nncf.quantization.advanced_parameters import OverflowFix
+from nncf.quantization.algorithms.post_training.algorithm import PostTrainingQuantization
+from nncf.quantization.algorithms.smooth_quant.torch_fx_backend import FXSmoothQuantAlgoBackend
+from nncf.quantization.algorithms.smooth_quant.torch_fx_backend import FXSQMultiply
+from nncf.torch import disable_patching
+from nncf.torch.graph.operator_metatypes import PTConv2dMetatype
+from nncf.torch.graph.operator_metatypes import PTLinearMetatype
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import LinearMultiShapeModel
+from tests.cross_fw.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
+from tests.cross_fw.test_templates.test_smooth_quant import TemplateTestSQAlgorithm
+
+PT_LINEAR_MODEL_MM_MAP = {"Linear1": "linear_3", "Linear2": "linear_2", "Linear3": "linear", "Linear4": "linear_1"}
+
+PT_CONV_MODEL_MM_MAP = {"Conv1": "conv2d"}
+
+
+class TestTorchSQAlgorithm(TemplateTestSQAlgorithm):
+ @staticmethod
+ def backend_supports_shared_layers() -> bool:
+ return False
+
+ @staticmethod
+ def fn_to_type(tensor) -> torch.Tensor:
+ return torch.tensor(tensor)
+
+ @pytest.fixture(params=[False], ids=["out_of_palce"])
+ def inplace_statistics(self, request) -> bool:
+ return request.param
+
+ def get_node_name_map(self, model_cls) -> Dict[str, str]:
+ if model_cls is LinearMultiShapeModel:
+ return PT_LINEAR_MODEL_MM_MAP
+ if model_cls is ConvTestModel:
+ return PT_CONV_MODEL_MM_MAP
+ if model_cls is ShareWeghtsConvAndShareLinearModel:
+ return {}
+ raise NotImplementedError
+
+ @staticmethod
+ def get_ignored_scope(model_cls: Any) -> IgnoredScope:
+ if model_cls is LinearMultiShapeModel:
+ # Ignore matmul nodes before the min/max nodes as
+ # min/max operatons could not be quantized
+ # due to nncf propagation algo restrictions.
+ return IgnoredScope(names=["matmul_5", "matmul_6"])
+ return IgnoredScope()
+
+ @staticmethod
+ def get_quantization_algorithm(ignored_scope: IgnoredScope):
+ return PostTrainingQuantization(
+ subset_size=1,
+ model_type=ModelType.TRANSFORMER,
+ ignored_scope=ignored_scope,
+ advanced_parameters=AdvancedQuantizationParameters(
+ overflow_fix=OverflowFix.DISABLE,
+ smooth_quant_alphas=AdvancedSmoothQuantParameters(matmul=0.95, convolution=0.95),
+ inplace_statistics=False,
+ disable_bias_correction=True,
+ ),
+ )
+
+ @staticmethod
+ def get_transform_fn() -> Callable:
+ def transform_fn(data_item):
+ return data_item[0]
+
+ return transform_fn
+
+ @staticmethod
+ def get_backend() -> Type[FXSmoothQuantAlgoBackend]:
+ return FXSmoothQuantAlgoBackend()
+
+ @staticmethod
+ def backend_specific_model(model: torch.nn.Module, tmp_dir: str) -> ov.Model:
+ with disable_patching():
+ captured_model = capture_pre_autograd_graph(model.eval(), (torch.rand(model.INPUT_SIZE),))
+ apply_quantization_transformations(captured_model)
+ return captured_model
+
+ @staticmethod
+ def check_scales(model: torch.nn.Module, reference_values: Dict[str, np.ndarray], model_cls) -> None:
+ names_map = PT_LINEAR_MODEL_MM_MAP if model_cls is LinearMultiShapeModel else PT_CONV_MODEL_MM_MAP
+ ops_list = {node.name: node for node in model.graph.nodes}
+ for ref_names, ref_value in reference_values.items():
+ if not all(name.startswith("Linear") or name.startswith("Conv") for name in ref_names):
+ # Pytorch SQ algorithm supports only linear and conv modules by far,
+ # so other multiplies are skipped
+ continue
+ sq_modules = []
+ for ref_name in ref_names:
+ node = ops_list[names_map[ref_name]]
+ while node.op != "call_module":
+ node = node.all_input_nodes[0]
+
+ sq_modules.append(getattr(model, node.target))
+ # Check unified group acutally shares one constant
+ assert all(node is sq_modules[0] for node in sq_modules[1:])
+ sq_node = sq_modules[0]
+ assert isinstance(sq_node, FXSQMultiply)
+
+ value = sq_node._scale_value
+ ref_value = torch.tensor(ref_value)
+ assert value.shape == ref_value.shape
+ assert torch.all(torch.isclose(value, ref_value, rtol=1e-4))
+
+ @pytest.mark.parametrize(
+ "node_metatype, layer_attributes, port_id, reference_value",
+ (
+ (PTLinearMetatype, None, 0, -1),
+ (PTConv2dMetatype, None, 0, 1),
+ ),
+ )
+ def test_get_activation_channel_axis(self, node_metatype, layer_attributes, port_id, reference_value):
+ return super().test_get_activation_channel_axis(node_metatype, layer_attributes, port_id, reference_value)
+
+ @pytest.mark.parametrize(
+ "node_metatype, layer_attributes, reference_value",
+ (
+ (PTLinearMetatype, None, 1),
+ (PTConv2dMetatype, None, 1),
+ ),
+ )
+ def test_get_weight_channel_axis(self, node_metatype, layer_attributes, reference_value):
+ return super().test_get_weight_channel_axis(node_metatype, layer_attributes, reference_value)
+
+ @staticmethod
+ def get_matmul_metatype():
+ return PTLinearMetatype
diff --git a/tests/torch/fx/test_statistics_aggregator.py b/tests/torch/fx/test_statistics_aggregator.py
new file mode 100644
index 00000000000..d9e16b509e3
--- /dev/null
+++ b/tests/torch/fx/test_statistics_aggregator.py
@@ -0,0 +1,119 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import List, Type
+
+import numpy as np
+import pytest
+import torch
+from torch import nn
+from torch._export import capture_pre_autograd_graph
+
+from nncf import Dataset
+from nncf.common.graph.transformations.commands import TargetType
+from nncf.experimental.common.tensor_statistics.collectors import TensorReducerBase
+from nncf.experimental.torch.fx.statistics.aggregator import FXStatisticsAggregator
+from nncf.quantization.algorithms.fast_bias_correction.torch_fx_backend import FXFastBiasCorrectionAlgoBackend
+from nncf.quantization.algorithms.min_max.torch_fx_backend import FXMinMaxAlgoBackend
+from nncf.torch.dynamic_graph.patch_pytorch import disable_patching
+from nncf.torch.graph.graph import PTTargetPoint
+from tests.common.test_statistics_aggregator import TemplateTestStatisticsAggregator
+
+IDENTITY_NODE_NAME = "add"
+CONV_NODE_NAME = "conv2d"
+INPUT_SHAPE = [1, 3, 3, 3]
+
+
+class IdentityConv(nn.Module):
+ def __init__(self, kernel) -> None:
+ super().__init__()
+ self.conv = nn.Conv2d(
+ in_channels=3,
+ out_channels=3,
+ kernel_size=3,
+ )
+ self.conv.weight.data = torch.tensor(kernel, dtype=torch.float32)
+
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
+ return self.conv(x + 0.0)
+
+
+class TestStatisticsAggregator(TemplateTestStatisticsAggregator):
+ @staticmethod
+ def get_min_max_algo_backend_cls() -> Type[FXMinMaxAlgoBackend]:
+ return FXMinMaxAlgoBackend
+
+ def get_bias_correction_algo_backend_cls(self) -> None:
+ pytest.skip("FXBiasCorrectionAlgoBackend is not implemented")
+
+ def get_fast_bias_correction_algo_backend_cls(self) -> Type[FXFastBiasCorrectionAlgoBackend]:
+ return FXFastBiasCorrectionAlgoBackend
+
+ def get_backend_model(self, dataset_samples):
+ sample = dataset_samples[0].reshape(INPUT_SHAPE[1:])
+ conv_w = self.dataset_samples_to_conv_w(np.array(sample))
+ with disable_patching():
+ model = capture_pre_autograd_graph(IdentityConv(conv_w), args=(torch.ones(INPUT_SHAPE),))
+ return model
+
+ def get_statistics_aggregator(self, dataset):
+ return FXStatisticsAggregator(dataset)
+
+ def get_dataset(self, samples):
+ def transform_fn(data_item):
+ return data_item
+
+ return Dataset(samples, transform_fn)
+
+ @staticmethod
+ def get_target_point(target_type: TargetType):
+ target_node_name = IDENTITY_NODE_NAME
+ port_id = 0
+ if target_type == TargetType.OPERATION_WITH_WEIGHTS:
+ target_node_name = CONV_NODE_NAME
+ port_id = 1
+ return FXMinMaxAlgoBackend.target_point(target_type, target_node_name, port_id)
+
+ def get_target_point_cls(self):
+ return PTTargetPoint
+
+ @pytest.fixture(scope="session")
+ def test_params(self):
+ return
+
+ @pytest.fixture
+ def dataset_samples(self, dataset_values):
+ dataset_samples = [np.zeros(INPUT_SHAPE), np.ones(INPUT_SHAPE)]
+
+ for i, value in enumerate(dataset_values):
+ dataset_samples[0][0, i, 0, 0] = value["max"]
+ dataset_samples[0][0, i, 0, 1] = value["min"]
+
+ return torch.tensor(dataset_samples, dtype=torch.float32)
+
+ @pytest.fixture(params=[False], ids=["out_of_palce"])
+ def inplace_statistics(self, request) -> bool:
+ return request.param
+
+ @pytest.fixture
+ def is_backend_support_custom_estimators(self) -> bool:
+ return True
+
+ def reducers_map(self) -> List[TensorReducerBase]:
+ return None
+
+ @pytest.mark.skip("Merging is not implemented yet")
+ def test_statistic_merging(self, dataset_samples, inplace_statistics):
+ pass
+
+ @pytest.mark.skip("Merging is not implemented yet")
+ def test_same_collectors_different_attrs_dont_merge(self, statistics_type, test_params, dataset_samples):
+ pass
diff --git a/tests/torch/nas/test_state.py b/tests/torch/nas/test_state.py
index 3c2cc24d9fb..d78f11f72df 100644
--- a/tests/torch/nas/test_state.py
+++ b/tests/torch/nas/test_state.py
@@ -37,7 +37,7 @@
from tests.torch.nas.test_elastic_width import TwoSequentialConvBNTestModel
-@pytest.yield_fixture()
+@pytest.fixture
def _nncf_caplog(caplog):
nncf_logger.propagate = True
yield caplog
diff --git a/tests/torch/nncf_network/test_hook_handlers.py b/tests/torch/nncf_network/test_hook_handlers.py
index 06c22d24a84..9f38c637c25 100644
--- a/tests/torch/nncf_network/test_hook_handlers.py
+++ b/tests/torch/nncf_network/test_hook_handlers.py
@@ -33,7 +33,7 @@
],
)
class TestHookHandles:
- class TestHook(torch.nn.Module):
+ class HookTest(torch.nn.Module):
def __init__(self):
super().__init__()
self._p = torch.nn.Parameter(torch.zeros((1,)))
@@ -66,7 +66,7 @@ def test_temporary_insert_at_point_by_hook_group_name(
self, target_type: TargetType, target_node_name: str, input_port_id: int
):
nncf_model, ip, _check = self._prepare_hook_handles_test(target_type, target_node_name, input_port_id)
- permanent_hook = self.TestHook()
+ permanent_hook = self.HookTest()
TEMPORARY_HOOK_GROUP_NAME = "tmp"
# Make temporary hook a ref to the permanent hook
# to check tmp hooks are not removed by their id()
@@ -76,7 +76,7 @@ def test_temporary_insert_at_point_by_hook_group_name(
_check(ref_hooks)
for _ in range(2):
- temporary_hook = self.TestHook()
+ temporary_hook = self.HookTest()
nncf_model.nncf.insert_at_point(ip, temporary_hook, TEMPORARY_HOOK_GROUP_NAME)
ref_hooks.append(temporary_hook)
_check(ref_hooks)
@@ -92,7 +92,7 @@ def test_temporary_insert_at_point_by_hook_group_name(
def test_insert_at_point_hook_handles(self, target_type: TargetType, target_node_name: str, input_port_id: int):
nncf_model, ip, _check = self._prepare_hook_handles_test(target_type, target_node_name, input_port_id)
- permanent_hook = self.TestHook()
+ permanent_hook = self.HookTest()
# Make temporary hook a ref to the permanent hook
# to check tmp hooks are not removed by their id()
temporary_hook = permanent_hook
@@ -103,7 +103,7 @@ def test_insert_at_point_hook_handles(self, target_type: TargetType, target_node
_check(ref_hooks)
for _ in range(2):
- temporary_hook = self.TestHook()
+ temporary_hook = self.HookTest()
tmp_hh.append(nncf_model.nncf.insert_at_point(ip, temporary_hook))
ref_hooks.append(temporary_hook)
_check(ref_hooks)
diff --git a/tests/torch/nncf_network/test_nncf_network.py b/tests/torch/nncf_network/test_nncf_network.py
index 02b1d4adf0b..cbe125cbd3b 100644
--- a/tests/torch/nncf_network/test_nncf_network.py
+++ b/tests/torch/nncf_network/test_nncf_network.py
@@ -883,7 +883,7 @@ def fn_to_check_input_type(input_):
assert visited_times == 1
-class TestWhisperDecoderModel(torch.nn.Module):
+class WhisperDecoderTestModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.embedding = torch.nn.Embedding(10, 3)
@@ -905,7 +905,7 @@ def forward(self, x):
def test_insert_hook_after_parameter():
- model = TestWhisperDecoderModel()
+ model = WhisperDecoderTestModel()
example_input = torch.randint(0, 9, (2,))
nncf_model = wrap_model(model, example_input, trace_parameters=True)
result = nncf_model(example_input)
diff --git a/tests/torch/pruning/experimental/test_nodes_grouping.py b/tests/torch/pruning/experimental/test_nodes_grouping.py
index 931bc3e42a8..d906e1e8eda 100644
--- a/tests/torch/pruning/experimental/test_nodes_grouping.py
+++ b/tests/torch/pruning/experimental/test_nodes_grouping.py
@@ -488,14 +488,14 @@ def test_groups(desc: GroupTestDesc, mocker, tmp_path):
BIG_MODEL_DESCS = [
GroupTestDesc(
model_desc=GeneralModelDesc(
- model_name="MobileBERT big",
+ model_name="MobileBERT_big",
input_info=[dict(sample_size=[1, 128], type="long")] * 4,
model_builder=get_mobile_bert_big_model,
),
),
GroupTestDesc(
model_desc=GeneralModelDesc(
- model_name="Swin big",
+ model_name="Swin_big",
input_info=dict(sample_size=[1, 3, 224, 224]),
model_builder=get_swin_tiny_model,
)
diff --git a/tests/torch/ptq/helpers.py b/tests/torch/ptq/helpers.py
index 55658ff3c35..0eb186857ae 100644
--- a/tests/torch/ptq/helpers.py
+++ b/tests/torch/ptq/helpers.py
@@ -22,9 +22,9 @@
from nncf.torch.graph.operator_metatypes import PTModuleDepthwiseConv2dSubtype
from nncf.torch.graph.operator_metatypes import PTModuleLinearMetatype
from nncf.torch.graph.operator_metatypes import PTSumMetatype
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.models import NNCFGraphToTestDepthwiseConv
-from tests.post_training.test_templates.models import NNCFGraphToTestSumAggregation
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.models import NNCFGraphToTestDepthwiseConv
+from tests.cross_fw.test_templates.models import NNCFGraphToTestSumAggregation
def get_single_conv_nncf_graph() -> NNCFGraphToTest:
diff --git a/tests/torch/ptq/test_calculation_quantizer_params.py b/tests/torch/ptq/test_calculation_quantizer_params.py
index 06c0ad1b64c..556b5f9e387 100644
--- a/tests/torch/ptq/test_calculation_quantizer_params.py
+++ b/tests/torch/ptq/test_calculation_quantizer_params.py
@@ -34,7 +34,7 @@
from nncf.tensor import functions as fns
from nncf.torch.model_creation import wrap_model
from nncf.torch.statistics.aggregator import PTStatisticsAggregator
-from tests.post_training.test_templates.test_calculate_quantizer_parameters import TemplateTestFQParams
+from tests.cross_fw.test_templates.test_calculate_quantizer_parameters import TemplateTestFQParams
from tests.torch.helpers import get_all_inputs_for_graph_node
from tests.torch.helpers import get_nodes_by_type
diff --git a/tests/torch/ptq/test_fast_bias_correction.py b/tests/torch/ptq/test_fast_bias_correction.py
index 5ad49040499..5b3c6c0ce3c 100644
--- a/tests/torch/ptq/test_fast_bias_correction.py
+++ b/tests/torch/ptq/test_fast_bias_correction.py
@@ -19,7 +19,7 @@
from nncf.torch.model_graph_manager import get_fused_bias_value
from nncf.torch.model_graph_manager import is_node_with_fused_bias
from nncf.torch.nncf_network import NNCFNetwork
-from tests.post_training.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
+from tests.cross_fw.test_templates.test_fast_bias_correction import TemplateTestFBCAlgorithm
from tests.torch.ptq.helpers import get_nncf_network
diff --git a/tests/torch/ptq/test_graphs.py b/tests/torch/ptq/test_graphs.py
index aa427735b53..2dd649712f7 100644
--- a/tests/torch/ptq/test_graphs.py
+++ b/tests/torch/ptq/test_graphs.py
@@ -22,8 +22,8 @@
from nncf.torch import wrap_model
from nncf.torch.layers import NNCF_RNN
from nncf.torch.layers import LSTMCellNNCF
-from tests.post_training.test_templates.helpers import EmbeddingModel
-from tests.post_training.test_templates.helpers import ScaledDotProductAttentionModel
+from tests.cross_fw.test_templates.helpers import EmbeddingModel
+from tests.cross_fw.test_templates.helpers import ScaledDotProductAttentionModel
from tests.torch import test_models
from tests.torch.quantization.test_algo_quantization import SharedLayersModel
from tests.torch.test_compressed_graph import ModelDesc
diff --git a/tests/torch/ptq/test_min_max.py b/tests/torch/ptq/test_min_max.py
index 73003157865..5c005592d4e 100644
--- a/tests/torch/ptq/test_min_max.py
+++ b/tests/torch/ptq/test_min_max.py
@@ -25,10 +25,10 @@
from nncf.torch.graph.operator_metatypes import PTDepthwiseConv2dSubtype
from nncf.torch.graph.operator_metatypes import PTLinearMetatype
from nncf.torch.graph.transformations.commands import PTTargetPoint
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.test_min_max import TemplateTestGetChannelAxes
-from tests.post_training.test_templates.test_min_max import TemplateTestGetTargetPointShape
-from tests.post_training.test_templates.test_min_max import TemplateTestMinMaxAlgorithm
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.test_min_max import TemplateTestGetChannelAxes
+from tests.cross_fw.test_templates.test_min_max import TemplateTestGetTargetPointShape
+from tests.cross_fw.test_templates.test_min_max import TemplateTestMinMaxAlgorithm
class TestTorchMinMaxAlgorithm(TemplateTestMinMaxAlgorithm):
diff --git a/tests/torch/ptq/test_ptq_params.py b/tests/torch/ptq/test_ptq_params.py
index 7404c211002..026d1da3086 100644
--- a/tests/torch/ptq/test_ptq_params.py
+++ b/tests/torch/ptq/test_ptq_params.py
@@ -33,7 +33,7 @@
from tests.common.quantization.metatypes import Conv2dTestMetatype
from tests.common.quantization.metatypes import LinearTestMetatype
from tests.common.quantization.metatypes import SoftmaxTestMetatype
-from tests.post_training.test_templates.test_ptq_params import TemplateTestPTQParams
+from tests.cross_fw.test_templates.test_ptq_params import TemplateTestPTQParams
from tests.torch.helpers import create_bn
from tests.torch.helpers import create_conv
from tests.torch.helpers import create_depthwise_conv
diff --git a/tests/torch/ptq/test_quantizer_config.py b/tests/torch/ptq/test_quantizer_config.py
index 2ce6fc4d177..acc8cb4002d 100644
--- a/tests/torch/ptq/test_quantizer_config.py
+++ b/tests/torch/ptq/test_quantizer_config.py
@@ -12,10 +12,10 @@
import pytest
from nncf.quantization.algorithms.min_max.torch_backend import PTMinMaxAlgoBackend
-from tests.post_training.test_templates.models import NNCFGraphToTest
-from tests.post_training.test_templates.models import NNCFGraphToTestDepthwiseConv
-from tests.post_training.test_templates.models import NNCFGraphToTestSumAggregation
-from tests.post_training.test_templates.test_quantizer_config import TemplateTestQuantizerConfig
+from tests.cross_fw.test_templates.models import NNCFGraphToTest
+from tests.cross_fw.test_templates.models import NNCFGraphToTestDepthwiseConv
+from tests.cross_fw.test_templates.models import NNCFGraphToTestSumAggregation
+from tests.cross_fw.test_templates.test_quantizer_config import TemplateTestQuantizerConfig
from tests.torch.ptq.helpers import get_depthwise_conv_nncf_graph
from tests.torch.ptq.helpers import get_single_conv_nncf_graph
from tests.torch.ptq.helpers import get_sum_aggregation_nncf_graph
diff --git a/tests/torch/ptq/test_smooth_quant.py b/tests/torch/ptq/test_smooth_quant.py
index f434df7a2ab..3d4f83df3a0 100644
--- a/tests/torch/ptq/test_smooth_quant.py
+++ b/tests/torch/ptq/test_smooth_quant.py
@@ -16,18 +16,16 @@
import pytest
import torch
-from nncf.common.graph.transformations.commands import TransformationCommand
from nncf.quantization.algorithms.smooth_quant.torch_backend import PTSmoothQuantAlgoBackend
from nncf.quantization.algorithms.smooth_quant.torch_backend import SQMultiply
from nncf.torch.graph.operator_metatypes import PTConv2dMetatype
from nncf.torch.graph.operator_metatypes import PTLinearMetatype
from nncf.torch.graph.transformations.commands import ExtraCompressionModuleType
-from nncf.torch.graph.transformations.commands import PTSharedFnInsertionCommand
from nncf.torch.model_creation import wrap_model
-from tests.post_training.test_templates.helpers import ConvTestModel
-from tests.post_training.test_templates.helpers import LinearMultiShapeModel
-from tests.post_training.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
-from tests.post_training.test_templates.test_smooth_quant import TemplateTestSQAlgorithm
+from tests.cross_fw.test_templates.helpers import ConvTestModel
+from tests.cross_fw.test_templates.helpers import LinearMultiShapeModel
+from tests.cross_fw.test_templates.helpers import ShareWeghtsConvAndShareLinearModel
+from tests.cross_fw.test_templates.test_smooth_quant import TemplateTestSQAlgorithm
PT_LINEAR_MODEL_SQ_MAP = {
("Linear1",): "LinearMultiShapeModel/split_0_1_0/nncf_smooth_quant",
@@ -48,6 +46,10 @@
class TestTorchSQAlgorithm(TemplateTestSQAlgorithm):
+ @staticmethod
+ def backend_supports_shared_layers() -> bool:
+ return True
+
@staticmethod
def fn_to_type(tensor) -> torch.Tensor:
return torch.tensor(tensor)
@@ -65,12 +67,6 @@ def get_node_name_map(self, model_cls) -> Dict[str, str]:
return {}
raise NotImplementedError
- @staticmethod
- def get_target_node_name(command: TransformationCommand):
- if isinstance(command, PTSharedFnInsertionCommand):
- return command.target_points[0].target_node_name
- return command.target_point.target_node_name
-
@staticmethod
def get_transform_fn() -> Callable:
def transform_fn(data_item):
diff --git a/tests/torch/ptq/test_weights_compression.py b/tests/torch/ptq/test_weights_compression.py
index 30c704e5435..5e4ca75e128 100644
--- a/tests/torch/ptq/test_weights_compression.py
+++ b/tests/torch/ptq/test_weights_compression.py
@@ -213,6 +213,7 @@ def forward(self, input):
{"gptq": True},
{"awq": True},
{"scale_estimation": True},
+ {"lora_correction": True},
),
)
def test_raise_error_with_unsupported_params_for_int8(mode, params):
diff --git a/tests/torch/quantization/test_tracing.py b/tests/torch/quantization/test_tracing.py
index 578664f75a1..74521338fea 100644
--- a/tests/torch/quantization/test_tracing.py
+++ b/tests/torch/quantization/test_tracing.py
@@ -17,7 +17,7 @@
from nncf.torch.quantization.layers import SymmetricQuantizer
-class TestModel(nn.Module):
+class SimpleModel(nn.Module):
def __init__(self, fq) -> None:
super().__init__()
self.fq = fq
@@ -64,7 +64,7 @@ def test_trace_asymmetric_quantizer(is_per_channel):
quantizer.input_low.data = input_low
quantizer.input_range.data = input_range
- model = TestModel(quantizer)
+ model = SimpleModel(quantizer)
traced = torch.jit.trace(model, torch.ones(1, 2, 1, 1))
check_fq_op(traced, is_per_channel)
@@ -89,6 +89,6 @@ def test_trace_symmetric_quantizer(is_per_channel, is_signed):
quantizer.scale.data = scale
quantizer.signed = is_signed
- model = TestModel(quantizer)
+ model = SimpleModel(quantizer)
traced = torch.jit.trace(model, torch.ones(1, 2, 1, 1))
check_fq_op(traced, is_per_channel)
diff --git a/tests/torch/requirements.txt b/tests/torch/requirements.txt
index bbd3a45c57e..be82652d65f 100644
--- a/tests/torch/requirements.txt
+++ b/tests/torch/requirements.txt
@@ -19,3 +19,8 @@ datasets==2.14.7
evaluate==0.3.0
openvino
timm==0.9.2
+
+
+# Required for torch/fx tests
+torchvision
+fastdownload==0.0.7
diff --git a/tests/torch/test_algo_common.py b/tests/torch/test_algo_common.py
index 60c38faa448..b41446052ad 100644
--- a/tests/torch/test_algo_common.py
+++ b/tests/torch/test_algo_common.py
@@ -452,15 +452,20 @@ def test_compressed_model_has_controller_references(algos: List[str]):
ALGOS_SUPPORTING_SINGLE_LINE_CONFIGS = [
x
for x in sorted(PT_COMPRESSION_ALGORITHMS.registry_dict.keys())
- if x not in ["knowledge_distillation", "movement_sparsity", "elasticity", "progressive_shrinking"]
+ if x
+ not in [
+ "knowledge_distillation",
+ "movement_sparsity",
+ "elasticity",
+ "progressive_shrinking",
+ "NoCompressionAlgorithm",
+ ]
]
@pytest.mark.parametrize("algo_name", ALGOS_SUPPORTING_SINGLE_LINE_CONFIGS)
def test_can_apply_algo_with_single_line(algo_name, nncf_caplog):
model = BasicLinearTestModel()
- if algo_name == "NoCompressionAlgorithm":
- pytest.skip()
config = ConfigCreator().add_algo(algo_name).create()
with nncf_caplog.at_level(logging.INFO):
create_compressed_model_and_algo_for_test(model, config)
diff --git a/tests/torch/test_compressed_graph.py b/tests/torch/test_compressed_graph.py
index 1bce431f64e..e49dbfcb6d0 100644
--- a/tests/torch/test_compressed_graph.py
+++ b/tests/torch/test_compressed_graph.py
@@ -70,6 +70,7 @@
from tests.torch.test_models.synthetic import OrdinaryModelWithRecurrentInName
from tests.torch.test_models.synthetic import PoolUnPool
from tests.torch.test_models.synthetic import ReshapeModel
+from tests.torch.test_models.synthetic import ScaledDotProductModel
from tests.torch.test_models.synthetic import ShiftScaleParametrized
from tests.torch.test_models.synthetic import TransposeModel
@@ -798,6 +799,7 @@ def forward(self, x):
wrap_inputs_fn=partial(n_inputs_fn, nargs=3),
),
GeneralModelDesc(model_builder=MHA_single_input, input_sample_sizes=(MHA_single_input.INPUT_SIZES,)),
+ GeneralModelDesc(model_builder=ScaledDotProductModel, input_sample_sizes=(ScaledDotProductModel.INPUT_SIZES,)),
GeneralModelDesc(
model_name="OrdinaryModelWithRecurrentInName",
model_builder=OrdinaryModelWithRecurrentInName,
diff --git a/tests/torch/test_extractor.py b/tests/torch/test_extractor.py
index e592e6491d8..7d7219ce3fc 100644
--- a/tests/torch/test_extractor.py
+++ b/tests/torch/test_extractor.py
@@ -13,7 +13,7 @@
import torch
from torch import nn
-import tests.post_training.test_templates.helpers as helpers
+import tests.cross_fw.test_templates.helpers as helpers
from nncf.common.graph.transformations.commands import TargetType
from nncf.torch import wrap_model
from nncf.torch.extractor import extract_model
diff --git a/tests/torch/test_model_graph_manager.py b/tests/torch/test_model_graph_manager.py
index 457ae7c0af1..ef1501a9fc5 100644
--- a/tests/torch/test_model_graph_manager.py
+++ b/tests/torch/test_model_graph_manager.py
@@ -17,7 +17,7 @@
from torch import nn
import nncf.torch.graph.operator_metatypes as om
-import tests.post_training.test_templates.helpers as helpers
+import tests.cross_fw.test_templates.helpers as helpers
from nncf.common.graph.graph import NNCFGraph
from nncf.common.graph.graph import NNCFNode
from nncf.common.graph.transformations.commands import TargetType
diff --git a/tests/torch/test_model_transformer.py b/tests/torch/test_model_transformer.py
index d4fe6ca2f72..3eabe1f7e99 100644
--- a/tests/torch/test_model_transformer.py
+++ b/tests/torch/test_model_transformer.py
@@ -12,6 +12,7 @@
from collections import Counter
from copy import deepcopy
from dataclasses import dataclass
+from functools import partial
from pathlib import Path
from typing import List
@@ -21,6 +22,7 @@
import torch.nn.functional as F
from torch import nn
+import nncf.torch.graph.operator_metatypes as om
from nncf.common.graph.definitions import MODEL_INPUT_OP_NAME
from nncf.common.graph.definitions import MODEL_OUTPUT_OP_NAME
from nncf.common.graph.patterns.manager import PatternsManager
@@ -367,9 +369,33 @@ def test_priority(self, target_type, trace_parameters, priority_type):
MERGE_PATTERN_TEST_CASES = (
- [get_mock_model_graph_with_mergeable_pattern, "basic_pattern"],
- [get_mock_model_graph_with_no_mergeable_pattern, "no_pattern"],
- [get_mock_model_graph_with_broken_output_edge_pattern, "broken_output_edges_pattern"],
+ [
+ partial(
+ get_mock_model_graph_with_mergeable_pattern,
+ conv2d_metatype=om.PTConv2dMetatype,
+ batchnorm_metatype=om.PTBatchNormMetatype,
+ relu_metatype=om.PTRELUMetatype,
+ ),
+ "basic_pattern",
+ ],
+ [
+ partial(
+ get_mock_model_graph_with_no_mergeable_pattern,
+ conv2d_metatype=om.PTConv2dMetatype,
+ batchnorm_metatype=om.PTBatchNormMetatype,
+ relu_metatype=om.PTRELUMetatype,
+ ),
+ "no_pattern",
+ ],
+ [
+ partial(
+ get_mock_model_graph_with_broken_output_edge_pattern,
+ conv2d_metatype=om.PTConv2dMetatype,
+ batchnorm_metatype=om.PTBatchNormMetatype,
+ relu_metatype=om.PTRELUMetatype,
+ ),
+ "broken_output_edges_pattern",
+ ],
)
diff --git a/tests/torch/test_models/synthetic.py b/tests/torch/test_models/synthetic.py
index 42fc1f6e2e0..06a54579e49 100644
--- a/tests/torch/test_models/synthetic.py
+++ b/tests/torch/test_models/synthetic.py
@@ -325,6 +325,16 @@ def forward(self, x, y, z):
return torch.baddbmm(x, y, z)
+class ScaledDotProductModel(nn.Module):
+ EMBED_DIM = 4
+ INPUT_SIZES = [2, 1, EMBED_DIM]
+
+ def forward(self, x):
+ shape = x.shape
+ x = x.view(-1).view(shape)
+ return nn.functional.scaled_dot_product_attention(x, x, x)
+
+
class MHA_single_input(torch.nn.Module):
EMBED_DIM = 4
INPUT_SIZES = [2, 1, EMBED_DIM]
@@ -491,3 +501,24 @@ def forward(self, x):
unbinded_processed[0] = self.conv4(y_unbinded[0])
y = torch.cat(unbinded_processed, axis=0)
return y
+
+
+class ConvolutionWithNotTensorBiasModel(torch.nn.Module):
+ def __init__(self):
+ super().__init__()
+ self._conv_w = nn.Parameter(torch.ones((1, 1, 1, 1)))
+
+ def forward(self, x):
+ w = self._conv_w + 10
+ return nn.functional.conv2d(x, w)
+
+
+class ConvolutionWithAllConstantInputsModel(torch.nn.Module):
+ def __init__(self):
+ super().__init__()
+ self._conv_w = nn.Parameter(torch.ones((1, 1, 1, 1)))
+ self._conv_i = nn.Parameter(torch.ones((1, 1, 1, 1)))
+
+ def forward(self, x):
+ w = self._conv_w + 10
+ return x + nn.functional.conv2d(self._conv_i, w)
diff --git a/tests/torch/test_nncf_graph.py b/tests/torch/test_nncf_graph.py
index 67cb0d63b48..72f92e68bc0 100644
--- a/tests/torch/test_nncf_graph.py
+++ b/tests/torch/test_nncf_graph.py
@@ -15,7 +15,7 @@
from nncf.common.graph.operator_metatypes import OperatorMetatype
from nncf.torch.graph.graph import PTNNCFGraph
from nncf.torch.graph.operator_metatypes import PTModuleConv2dMetatype
-from tests.post_training.test_templates.models import NNCFGraphToTestConstantFiltering
+from tests.cross_fw.test_templates.models import NNCFGraphToTestConstantFiltering
class DummyConstantMetatype(OperatorMetatype):
diff --git a/tests/torch/test_no_nncf_trace_patching.py b/tests/torch/test_no_nncf_trace_patching.py
index c39687ca51e..3c1b3c88053 100644
--- a/tests/torch/test_no_nncf_trace_patching.py
+++ b/tests/torch/test_no_nncf_trace_patching.py
@@ -20,7 +20,7 @@
from tests.torch.helpers import get_empty_config
-class TestModel(nn.Module):
+class SimpleModel(nn.Module):
"""
A test model with an operation resulting in an ambiguous graph.
Ambiguous operation output is put into the model output for testing convenience.
@@ -50,10 +50,10 @@ def test_no_trace_model_patching():
config["input_info"] = {"sample_size": [1, 1, 4, 4], "filler": "random"}
# Not patching anything: all output nodes are traced
- _, compressed_model = create_compressed_model(TestModel(True), config)
+ _, compressed_model = create_compressed_model(SimpleModel(True), config)
assert len(compressed_model.nncf.get_original_graph().get_output_nodes()) == 2
# Patching a function results with no_nncf_trace in method not producing an output node
- disable_tracing(TestModel.ambiguous_op)
- _, compressed_model = create_compressed_model(TestModel(False), get_empty_config())
+ disable_tracing(SimpleModel.ambiguous_op)
+ _, compressed_model = create_compressed_model(SimpleModel(False), get_empty_config())
assert len(compressed_model.nncf.get_original_graph().get_output_nodes()) == 1
diff --git a/tests/torch/test_pattern_manager.py b/tests/torch/test_pattern_manager.py
index b0f318cebcb..4ec5996823a 100644
--- a/tests/torch/test_pattern_manager.py
+++ b/tests/torch/test_pattern_manager.py
@@ -66,6 +66,9 @@
HWFusedPatternNames.LINEAR_ACTIVATIONS_UNSQUEEZE_BN_SQUEEZE: "Not relevant for Torch.",
HWFusedPatternNames.MVN: "Not relevant for Torch.",
HWFusedPatternNames.GELU: "Not relevant for Torch.",
+ HWFusedPatternNames.ARITHMETIC_ACTIVATIONS_ARITHMETIC: "Not relevant for Torch.",
+ HWFusedPatternNames.LINEAR_BATCH_TO_SPACE_ARITHMETIC_ACTIVATIONS: "Not relevant for Torch.",
+ HWFusedPatternNames.LINEAR_BATCH_TO_SPACE_SCALE_SHIFT_ACTIVATIONS: "Not relevant for Torch.",
}
IGNORING_IGNORED_PATTERN_REASONS = {
diff --git a/tools/README.md b/tools/README.md
new file mode 100644
index 00000000000..440d6f21ebd
--- /dev/null
+++ b/tools/README.md
@@ -0,0 +1,110 @@
+# NNCF Tools
+
+## Memory Monitor
+
+Memory Monitor is a tool that can be used to measure python program RAM footprint in time. It supports multiple memory types:
+
+- `MemoryType.RSS`: Resident Set Size is the portion of memory occupied by a process that is held in RAM.
+
+- `MemoryType.SYSTEM`: This metric is defined as the difference between total system virtual memory and system available memory. Be aware, that this way it is affected by other processes that can change RAM availability. It is advised to call `get_data(memory_from_zero=True)` for this type of memory logging, if one is interested in memory footprint for a certain process. This subtracts the starting memory from all values.
+
+RSS and SYSTEM behave differently when mmap is used, e.g. during OV model loading. RSS will report data which was read with mmap enabled as allocated, however this is not necessarily the case. SYSTEM does not report memory loaded with mmap. So it can be used to analyze "pure" memory usage without contribution of mmap pages which most probably will actually be free, but are reported as allocated by RSS.
+
+It is advised to use `MemoryType.SYSTEM` when analyzing memory of python scripts involving OpenVINO model reading. Also, memory monitor itself allocates some memory itself, especially during figure saving. It is advised to use it for measuring large memory processes.
+
+### Example 1. Monitor for an executable
+
+The tool allows to monitor memory for some executable including other python scripts. For example:
+
+```shell
+python memory_monitor.py --log-dir ./allocation_logs python allocate.py
+```
+
+```shell
+python memory_monitor.py optimum-cli export openvino ...
+```
+
+### Example 2. As a python Module
+
+```python
+import gc
+import time
+import numpy as np
+
+from functools import partial
+from pathlib import Path
+from tqdm import tqdm
+
+from memory_monitor import MemoryMonitor, MemoryType
+
+save_dir = Path("memory_logs")
+
+
+def allocate_memory():
+ a = []
+ for _ in tqdm(range(10)):
+ a.append(np.random.random((1 << 25,)))
+ time.sleep(1)
+ return a
+
+# Define a helper logging function
+def log(mm, fz):
+ mm.save_memory_logs(
+ *mm.get_data(memory_from_zero=fz),
+ save_dir=save_dir,
+ filename_suffix="_from-zero" if fz else ""
+ )
+
+# Create three memory monitors with different memory types and logging parameters
+memory_monitor_configurations = [
+ (MemoryType.RSS, False),
+ (MemoryType.SYSTEM, False),
+ (MemoryType.SYSTEM, True)
+]
+for memory_type, mem_from_zero in memory_monitor_configurations:
+ memory_monitor = MemoryMonitor(memory_type=memory_type)
+ # Start logging and register a logging function that will save logs at exit
+ memory_monitor.start(at_exit_fn=partial(log, memory_monitor, mem_from_zero))
+
+# Example logic allocating some memory
+a = allocate_memory()
+del a
+gc.collect()
+time.sleep(1)
+```
+
+### Example 3. Memory Monitor Context
+
+Alternatively, you may use `memory_monitor_context` that envelops logic for creating MemoryMonitors and saving logs. It can also return only the maximal memory value if needed. Memory data will be available at `context.memory_data`.
+
+```python
+import gc
+import time
+import numpy as np
+
+from pathlib import Path
+from tqdm import tqdm
+
+from memory_monitor import MemoryType, memory_monitor_context
+
+save_dir = Path("memory_logs")
+
+
+def allocate_memory():
+ a = []
+ for _ in tqdm(range(10)):
+ a.append(np.random.random((1 << 25,)))
+ time.sleep(1)
+ return a
+
+ with memory_monitor_context(
+ return_max_value=True,
+ save_dir="memory_logs",
+ ) as mmc:
+ a = allocate_memory()
+ del a
+ gc.collect()
+ time.sleep(1)
+
+max_memory_usage: float = mmc.memory_data[MemoryType.SYSTEM]
+```
diff --git a/tools/memory_monitor.py b/tools/memory_monitor.py
new file mode 100644
index 00000000000..68e8a6aea0e
--- /dev/null
+++ b/tools/memory_monitor.py
@@ -0,0 +1,382 @@
+# Copyright (c) 2024 Intel Corporation
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import argparse
+import atexit
+import logging
+import queue
+import subprocess
+import threading
+import time
+from enum import Enum
+from functools import lru_cache
+from functools import partial
+from pathlib import Path
+from typing import Callable, List, Optional, Tuple
+
+import matplotlib.pyplot as plt
+import psutil
+from tabulate import tabulate
+
+logger = logging.getLogger("memory_monitor")
+
+
+class MemoryType(Enum):
+ RSS = "rss"
+ SYSTEM = "system"
+
+
+class MemoryUnit(Enum):
+ B = "B" # byte
+ KiB = "KiB" # Kibibyte
+ MiB = "MiB" # Mibibyte
+ GiB = "GiB" # Gibibyte
+ KB = "KB" # Kilobyte
+ MB = "MB" # Megabyte
+ GB = "GB" # Gigabyte
+
+
+@lru_cache
+def system_memory_warning():
+ # Log once
+ logger.warning(
+ "Please note that MemoryType.SYSTEM in general is affected by other processes that change RAM availability."
+ )
+
+
+class MemoryMonitor:
+ def __init__(
+ self,
+ interval: Optional[float] = 0.1,
+ memory_type: Optional[MemoryType] = MemoryType.RSS,
+ memory_unit: Optional[MemoryUnit] = MemoryUnit.MiB,
+ include_child_processes: Optional[bool] = None,
+ ):
+ """
+ Memory monitoring utility to measure python process memory footprint. After start() is called, it
+ creates a thread which runs in parallel and takes memory measurements every *interval* seconds using the
+ specified *memory_type* approach. When stop() is called, the memory measuring thread is stopped. The results
+ can be obtained by calling get_data(). Memory logs can be saved by calling save_memory_logs(). There are two
+ log files: one with data values in a .txt format and another one in a form of a 2D time-memory plot.
+
+ Memory monitor itself allocates some memory itself, especially during figure saving. It is advised to use it
+ for measuring large memory processes.
+
+ :param interval: How frequently to take memory measurements (in seconds).
+ :param memory_type: Type of memory to log. Accepts four possible values:
+ - MemoryType.RSS: Resident Set Size is the portion of memory occupied by a process that is held in RAM.
+ Values are obtained through psutil library. If some data is read using mmap, RSS will report this data
+ as allocated, however this is not necessarily the case.
+ - MemoryType.SYSTEM: This metric is defined as the difference between total system virtual memory
+ and system available memory. Be aware, that this way it is affected by other processes that can change
+ RAM availability. It is advised to call get_data(memory_from_zero=True) for this type of memory logging,
+ if one is interested in memory footprint for a certain process. This subtracts the starting memory from
+ all values.
+
+ RSS and SYSTEM behave differently when mmap is used, e.g. during OV model loading. RSS will report data
+ which was read with mmap enabled as allocated, however this is not necessarily the case. SYSTEM does not
+ report memory loaded with mmap. So it can be used to analyze "pure" memory usage without contribution of
+ mmap pages which are actually free, but are reported as allocated by RSS.
+ :param memory_unit: Unit to report memory in.
+ :param include_child_processes: For MemoryType.RSS only: whether to include memory of child processes. If not
+ provided, child processes are counted.
+ """
+ self.interval = interval
+ self.memory_type = memory_type
+ if memory_type == MemoryType.SYSTEM:
+ system_memory_warning()
+ elif memory_type == MemoryType.RSS:
+ if include_child_processes is None:
+ include_child_processes = True
+ else:
+ raise ValueError("Unknown memory type to log")
+ self.memory_unit = memory_unit
+ self.include_child_processes = include_child_processes
+
+ self._monitoring_thread_should_stop = False
+ self._monitoring_in_progress = False
+
+ self._memory_monitor_thread = None
+ self._memory_values_queue = None
+ self._stop_logging_atexit_fn = None
+
+ def start(self, at_exit_fn: Optional[Callable] = None) -> "MemoryMonitor":
+ """
+ Start memory monitoring.
+
+ :param at_exit_fn: A callable to execute at program exit. Useful fot providing logs saving routine, e.g.
+ ```
+ at_exit_fn = lambda: memory_monitor.save_memory_logs(*memory_monitor.get_data(), save_dir)
+ memory_monitor.start(at_exit_fn=at_exit_fn)
+ ```
+ """
+ if self._monitoring_in_progress:
+ raise Exception("Monitoring already in progress")
+
+ self._memory_values_queue = queue.Queue()
+ self._monitoring_thread_should_stop = False
+
+ self._memory_monitor_thread = threading.Thread(target=self._monitor_memory)
+ self._memory_monitor_thread.daemon = True
+ self._memory_monitor_thread.start()
+ if at_exit_fn:
+ self._stop_logging_atexit_fn = at_exit_fn
+ atexit.register(self._stop_logging_atexit_fn)
+
+ self._monitoring_in_progress = True
+
+ return self
+
+ def stop(self):
+ """
+ Stop memory monitoring.
+ """
+ if not self._monitoring_in_progress:
+ return
+ self._monitoring_thread_should_stop = True
+ self._monitoring_in_progress = False
+ self._memory_monitor_thread.join()
+ if self._stop_logging_atexit_fn is not None:
+ atexit.unregister(self._stop_logging_atexit_fn)
+ self._stop_logging_atexit_fn = None
+
+ def get_data(self, memory_from_zero: Optional[bool] = False) -> Tuple[List, List]:
+ """
+ :param memory_from_zero: Whether to normalize memory measurements by subtracting the first value. This way
+ the measurements will start with 0. Hence, is not very reliable and may actually result in negative values.
+ :returns: A tuple of list where the first element corresponds to measurements timestamps and the second one --
+ to memory values.
+ """
+ memory_usage_data = list(self._memory_values_queue.queue)
+ if len(memory_usage_data) == 0:
+ return [], []
+ time_values, memory_values = tuple(zip(*memory_usage_data))
+ time_values = _subtract_first_element(list(time_values))
+ if memory_from_zero:
+ memory_values = _subtract_first_element(list(memory_values))
+
+ # Convert to target memory unit
+ memory_values = list(map(partial(_cast_bytes_to, memory_unit=self.memory_unit), memory_values))
+
+ return time_values, memory_values
+
+ def save_memory_logs(
+ self,
+ time_values: List[float],
+ memory_values: List[float],
+ save_dir: Path,
+ plot_title: Optional[str] = "",
+ filename_suffix: Optional[str] = "",
+ ):
+ """
+ Save memory logs as a text file and a 2D plot.
+
+ :param time_values: Timestamps of the memory measurements.
+ :param memory_values: Memory measurements.
+ :param save_dir: Directory to save logs into.
+ :param plot_title: A title for a plot.
+ :param filename_suffix: A string suffix to give to the saved files.
+ """
+ if not save_dir.exists():
+ save_dir.mkdir(parents=True)
+
+ filename_label = f"{self.memory_type.value}_memory_usage{filename_suffix}"
+ # Save measurements to text file
+ log_filepath = save_dir / f"{filename_label}.txt"
+ with open(log_filepath, "w") as log_file:
+ if len(time_values) == 0:
+ log_file.write("No measurements recorded.\nPlease make sure logging duration or interval were enough.")
+ return
+ for timestamp, memory_usage in zip(time_values, memory_values):
+ log_file.write(f"{timestamp} {memory_usage:.3f}\n")
+
+ log_file.writelines(
+ [
+ f"Total time: {time_values[-1] - time_values[0]}\n",
+ f"Max memory: {max(memory_values):.3f} ({self.memory_unit.value})",
+ ]
+ )
+
+ # Save measurements plot
+ self.save_memory_plot(log_filepath, plot_title)
+
+ def save_memory_plot(self, log_filepath: Path, plot_title: Optional[str] = "", filename_suffix: Optional[str] = ""):
+ """
+ Parse pre-saved txt file logs and plot a new figure based on this data. May be useful for re-plotting with
+ different title.
+
+ :param log_filepath: A path to a .txt log file.
+ :param plot_title: A title to give to a plot.
+ :param filename_suffix: A string suffix to give to the saved figure.
+ """
+ with open(log_filepath, "r") as f:
+ lines = f.readlines()
+ time_values, memory_values = [], []
+ for line in lines[:-2]:
+ time_value, memory_value = tuple(map(float, line.split(" ")))
+ time_values.append(time_value)
+ memory_values.append(memory_value)
+
+ fig = plt.figure(figsize=(10, 6))
+ plt.plot(time_values, memory_values)
+ plt.xlabel("Time (seconds)")
+ plt.ylabel(f"Memory Usage ({self.memory_type.value}, {self.memory_unit.value})")
+ plt.title(f"{plot_title} Max_{self.memory_type.value}: {max(memory_values):.2f} {self.memory_unit.value}")
+ plt.grid(True)
+ plt.tight_layout()
+ plt.savefig(str(log_filepath).replace(".txt", f"{filename_suffix}.png"))
+ plt.close(fig)
+
+ def __enter__(self) -> "MemoryMonitor":
+ return self.start()
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ self.stop()
+
+ def _monitor_memory(self):
+ while not self._monitoring_thread_should_stop:
+ _last_measurement_time = time.perf_counter()
+ if self.memory_type == MemoryType.RSS:
+ bytes_used = psutil.Process().memory_info().rss
+ if self.include_child_processes:
+ for child_process in psutil.Process().children(recursive=True):
+ bytes_used += psutil.Process(child_process.pid).memory_info().rss
+ elif self.memory_type == MemoryType.SYSTEM:
+ bytes_used = psutil.virtual_memory().total - psutil.virtual_memory().available
+ else:
+ raise Exception("Unknown memory type to log")
+ if self._monitoring_thread_should_stop:
+ break
+ self._memory_values_queue.put((time.perf_counter(), bytes_used))
+ time.sleep(max(0.0, self.interval - (time.perf_counter() - _last_measurement_time)))
+
+
+class memory_monitor_context:
+ def __init__(
+ self,
+ interval: Optional[float] = 0.1,
+ memory_unit: Optional[MemoryUnit] = MemoryUnit.MiB,
+ return_max_value: Optional[bool] = True,
+ save_dir: Optional[Path] = None,
+ ):
+ """
+ A memory monitor context manager which monitors both RSS and SYSTEM memory types. After, it stores the
+ result for the maximum memory recorded if `return_max_value=True or the whole time-memory sequences. Works
+ by subtracting the first memory measurement from all the other ones so that the resulting sequence starts
+ from 0. Hence, it can actually return negative memory values.
+
+ After exiting, the result is stored at .memory_data field -- a dict with memory types (RSS or SYSTEM)
+ as keys. The values are either a single float number if return_max_value is provided, or a tuple with time
+ and memory value lists.
+
+ Additionally, memory logs may be saved by providing save_dir argument.
+
+ :param interval: Interval in seconds to take measurements.
+ :param memory_unit: Memory unit.
+ :param return_max_value: Whether to return max value for each memory type or full memory sequences.
+ :param save_dir: If provided, will save memory logs at this location.
+ """
+
+ self.memory_monitors = {}
+ for memory_type in [MemoryType.RSS, MemoryType.SYSTEM]:
+ self.memory_monitors[memory_type] = MemoryMonitor(
+ interval=interval, memory_type=memory_type, memory_unit=memory_unit
+ )
+ self.return_max_value = return_max_value
+ self.save_dir = save_dir
+
+ self.memory_data = {}
+
+ def __enter__(self):
+ for mm in self.memory_monitors.values():
+ mm.start()
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ # Stop addition of new values as soon as possible
+ for mm in self.memory_monitors.values():
+ mm._monitoring_thread_should_stop = True
+
+ for mt, mm in self.memory_monitors.items():
+ mm.stop()
+ for fz in [False, True]:
+ time_values, memory_values = mm.get_data(memory_from_zero=fz)
+ if fz:
+ self.memory_data[mt] = max(memory_values) if self.return_max_value else (time_values, memory_values)
+
+ if self.save_dir:
+ mm.save_memory_logs(
+ time_values,
+ memory_values,
+ save_dir=self.save_dir,
+ filename_suffix="_from-zero" if fz else "",
+ )
+
+
+def _cast_bytes_to(bytes, memory_unit, round_to_int=False):
+ memory_unit_divisors = {
+ MemoryUnit.B: 1,
+ MemoryUnit.KiB: 2**10,
+ MemoryUnit.MiB: 2**20,
+ MemoryUnit.GiB: 2**30,
+ MemoryUnit.KB: 10**3,
+ MemoryUnit.MB: 10**6,
+ MemoryUnit.GB: 10**9,
+ }
+ result = bytes / memory_unit_divisors[memory_unit]
+ return int(result) if round_to_int else result
+
+
+def _subtract_first_element(data):
+ for i in range(1, len(data)):
+ data[i] = data[i] - data[0]
+ data[0] = 0
+ return data
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ description="Memory Monitor Tool. Monitors memory for an executable and saves logs at specified location.",
+ epilog="Examples:\n"
+ " python memory_monitor.py --log-dir ./allocation_logs python allocate.py\n"
+ " python memory_monitor.py optimum-cli export openvino ...",
+ formatter_class=argparse.RawTextHelpFormatter,
+ )
+ parser.add_argument(
+ "--log-dir", type=str, default="memory_logs", help="A directory to save logs at. './memory_logs' by default."
+ )
+ parser.add_argument("executable", type=str, nargs="+", help="Target executable to monitor memory for.")
+ args = parser.parse_args()
+
+ memory_monitors = [
+ MemoryMonitor(memory_type=mt, include_child_processes=True).start()
+ for mt in (MemoryType.RSS, MemoryType.SYSTEM)
+ ]
+
+ with subprocess.Popen(" ".join(args.executable), shell=True) as p:
+ p.wait()
+
+ # Stop addition of new values as soon as possible
+ for mm in memory_monitors:
+ mm._monitoring_thread_should_stop = True
+
+ summary_data = []
+ for mm in memory_monitors:
+ mm.stop()
+ for fz in (True, False):
+ time_values, memory_values = mm.get_data(memory_from_zero=fz)
+ # Most probably the last value is recorded once the child process has already died
+ time_values, memory_values = time_values[:-1], memory_values[:-1]
+ mm.save_memory_logs(
+ time_values, memory_values, save_dir=Path(args.log_dir), filename_suffix="_from-zero" if fz else ""
+ )
+ summary_data.append([mm.memory_type.value, fz, f"{int(max(memory_values))} {mm.memory_unit.value}"])
+ print("\nMemory summary:")
+ print(tabulate(summary_data, headers=["Memory type", "From zero", "Peak value"]))
diff --git a/tools/requirements.txt b/tools/requirements.txt
index 8f57ab34ca9..77d22021464 100644
--- a/tools/requirements.txt
+++ b/tools/requirements.txt
@@ -1 +1,2 @@
mdutils
+matplotlib<3.6