Horizontal tiling of convolutions with Aidge#
This tutorial demonstrates how horizontal tiling can be used to split the computation of a Convolution operator (Conv2D) across multiple devices, enabling parallel execution and improved hardware utilization.
Install requirements#
[1]:
%pip install aidge-core \
aidge-backend-cpu \
aidge-onnx \
aidge-model-explorer
Requirement already satisfied: aidge-core in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (0.7.0)
Requirement already satisfied: aidge-backend-cpu in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (0.7.0)
Requirement already satisfied: aidge-onnx in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (0.6.0)
Requirement already satisfied: aidge-model-explorer in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (0.1.0)
Requirement already satisfied: numpy>=1.21.6 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-core) (2.2.6)
Requirement already satisfied: Jinja2>=3.1.2 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-core) (3.1.4)
Requirement already satisfied: matplotlib in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-core) (3.9.2)
Requirement already satisfied: tqdm in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-core) (4.67.1)
Requirement already satisfied: requests in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-core) (2.32.3)
Requirement already satisfied: rich in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-core) (13.9.4)
Requirement already satisfied: onnx>=1.16.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-onnx) (1.17.0)
Requirement already satisfied: colorama in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-onnx) (0.4.6)
Requirement already satisfied: typing_extensions in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-onnx) (4.12.2)
Requirement already satisfied: ai-edge-model-explorer in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from aidge-model-explorer) (0.1.26)
Requirement already satisfied: MarkupSafe>=2.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from Jinja2>=3.1.2->aidge-core) (2.1.5)
Requirement already satisfied: protobuf>=3.20.2 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from onnx>=1.16.0->aidge-onnx) (3.20.3)
Requirement already satisfied: flask in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ai-edge-model-explorer->aidge-model-explorer) (3.1.1)
Requirement already satisfied: ipython in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ai-edge-model-explorer->aidge-model-explorer) (8.28.0)
Requirement already satisfied: ai-edge-model-explorer-adapter==0.1.12 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ai-edge-model-explorer->aidge-model-explorer) (0.1.12)
Requirement already satisfied: packaging in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ai-edge-model-explorer->aidge-model-explorer) (24.1)
Requirement already satisfied: portpicker in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ai-edge-model-explorer->aidge-model-explorer) (1.6.0)
Requirement already satisfied: termcolor in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ai-edge-model-explorer->aidge-model-explorer) (2.5.0)
Requirement already satisfied: blinker>=1.9.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from flask->ai-edge-model-explorer->aidge-model-explorer) (1.9.0)
Requirement already satisfied: click>=8.1.3 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from flask->ai-edge-model-explorer->aidge-model-explorer) (8.1.8)
Requirement already satisfied: itsdangerous>=2.2.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from flask->ai-edge-model-explorer->aidge-model-explorer) (2.2.0)
Requirement already satisfied: werkzeug>=3.1.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from flask->ai-edge-model-explorer->aidge-model-explorer) (3.1.3)
Requirement already satisfied: decorator in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (5.1.1)
Requirement already satisfied: jedi>=0.16 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (0.19.1)
Requirement already satisfied: matplotlib-inline in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (0.1.7)
Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (3.0.48)
Requirement already satisfied: pygments>=2.4.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (2.18.0)
Requirement already satisfied: stack-data in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (0.6.3)
Requirement already satisfied: traitlets>=5.13.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (5.14.3)
Requirement already satisfied: pexpect>4.3 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from ipython->ai-edge-model-explorer->aidge-model-explorer) (4.9.0)
Requirement already satisfied: wcwidth in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from prompt-toolkit<3.1.0,>=3.0.41->ipython->ai-edge-model-explorer->aidge-model-explorer) (0.2.13)
Requirement already satisfied: parso<0.9.0,>=0.8.3 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from jedi>=0.16->ipython->ai-edge-model-explorer->aidge-model-explorer) (0.8.4)
Requirement already satisfied: ptyprocess>=0.5 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from pexpect>4.3->ipython->ai-edge-model-explorer->aidge-model-explorer) (0.7.0)
Requirement already satisfied: contourpy>=1.0.1 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (1.3.0)
Requirement already satisfied: cycler>=0.10 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (4.54.1)
Requirement already satisfied: kiwisolver>=1.3.1 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (1.4.7)
Requirement already satisfied: pillow>=8 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (11.3.0)
Requirement already satisfied: pyparsing>=2.3.1 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (3.1.4)
Requirement already satisfied: python-dateutil>=2.7 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from matplotlib->aidge-core) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->aidge-core) (1.16.0)
Requirement already satisfied: psutil in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from portpicker->ai-edge-model-explorer->aidge-model-explorer) (6.0.0)
Requirement already satisfied: charset-normalizer<4,>=2 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from requests->aidge-core) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from requests->aidge-core) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from requests->aidge-core) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from requests->aidge-core) (2024.8.30)
Requirement already satisfied: markdown-it-py>=2.2.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from rich->aidge-core) (3.0.0)
Requirement already satisfied: mdurl~=0.1 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from markdown-it-py>=2.2.0->rich->aidge-core) (0.1.2)
Requirement already satisfied: executing>=1.2.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from stack-data->ipython->ai-edge-model-explorer->aidge-model-explorer) (2.1.0)
Requirement already satisfied: asttokens>=2.1.0 in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from stack-data->ipython->ai-edge-model-explorer->aidge-model-explorer) (2.4.1)
Requirement already satisfied: pure-eval in /data1/is156025/cm264821/miniforge3/envs/aidge/lib/python3.12/site-packages (from stack-data->ipython->ai-edge-model-explorer->aidge-model-explorer) (0.2.3)
Note: you may need to restart the kernel to use updated packages.
Import the required modules#
[2]:
import aidge_core
import aidge_backend_cpu
import aidge_onnx
import aidge_model_explorer
import numpy as np
Getting started#
Build a small neural network with four layers.
The sequential function is used to generate the GraphView. It is recommended to assign names to the most relevant layers to facilitate access later, if needed.
[3]:
model = aidge_core.sequential([
aidge_core.LeakyReLU(1, name="leakyrelu0"),
aidge_core.Conv2D(3, 32, [3, 3], name="conv0"),
aidge_core.BatchNorm2D(32, name="bn0"),
aidge_core.ReLU(name="relu0")
])
[DEBUG] - Inserted node "leakyrelu0" into registry.
[DEBUG] - Inserted node "conv0" into registry.
[DEBUG] - Inserted node "bn0" into registry.
[DEBUG] - Inserted node "relu0" into registry.
[4]:
# Visualize the model with Aidge model explorer
# aidge_model_explorer.visualize(model, "original_model", embed=True)
Create an input to link to the model.
[5]:
# Create an input
input_tensor = aidge_core.Tensor(np.random.rand(4, 3, 66, 66).astype(np.float32))
Generate random values for each parameter.
[6]:
convW = aidge_core.Tensor(np.random.rand(32, 3, 3, 3).astype(np.float32))
convB = aidge_core.Tensor(np.random.rand(32).astype(np.float32))
BNscale = aidge_core.Tensor(np.random.rand(32).astype(np.float32))
BNshift = aidge_core.Tensor(np.random.rand(32).astype(np.float32))
BNmean = aidge_core.Tensor(np.random.rand(32).astype(np.float32))
BNvar = aidge_core.Tensor(np.random.rand(32).astype(np.float32))
[7]:
model.get_node("conv0").get_operator().set_input(1, convW)
model.get_node("conv0").get_operator().set_input(2, convB)
model.get_node("bn0").get_operator().set_input(1, BNscale)
model.get_node("bn0").get_operator().set_input(2, BNshift)
model.get_node("bn0").get_operator().set_input(3, BNmean)
model.get_node("bn0").get_operator().set_input(4, BNvar)
Select an implementation and compute input/output dimensions.
[8]:
model.set_backend("cpu")
model.set_datatype(aidge_core.dtype.float32)
model.forward_dims([[4,3,66,66]], True)
[DEBUG] - Starting dimension forward propagation for GraphView
[INFO] - Manually setting GraphView input dims with provided parameters:
[INFO] * input#0 [4, 3, 66, 66]
[DEBUG] - Validating input dimensions against existing graph inputs
[DEBUG] - Creating new tensor for input#0 with dims [4, 3, 66, 66]
[DEBUG] - Verifying graph connections and tensor validity
[DEBUG] - Initializing dimension propagation
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node leakyrelu0 (of type LeakyReLU)
[DEBUG] - - Node conv0 (of type Conv2D)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0 (of type Conv2D)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node leakyrelu0 (of type LeakyReLU)
[DEBUG] - Dimensions forwarded for node leakyrelu0 (of type LeakyReLU): [4, 3, 66, 66] Default ->
[DEBUG] [4, 3, 66, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0 (of type Conv2D): [4, 3, 66, 66] Default -> [4, 32,
[DEBUG] 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node conv0 (of type Conv2D)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions forwarded for node bn0 (of type BatchNorm2D): [4, 32, 64, 64] Default -> [4,
[DEBUG] 32, 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0 (of t
[8]:
True
ype Conv2D)
[DEBUG] - Dimensions forwarded for node conv0 (of type Conv2D): [4, 3, 66, 66] Default -> [4, 32,
[DEBUG] 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node relu0 (of type ReLU)
[DEBUG] - Trying to forward dims of node relu0 (of type ReLU)
[DEBUG] - Dimensions forwarded for node relu0 (of type ReLU): [4, 32, 64, 64] Default -> [4, 32, 64,
[DEBUG] 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
Run the model.
[9]:
# Create Scheduler
scheduler = aidge_core.SequentialScheduler(model)
# Run inference!
scheduler.forward(data=[input_tensor])
# Keep result in memory
res1 = np.array(model.get_node("relu0").get_operator().get_output(0))
[DEBUG] - Starting dimension forward propagation for GraphView
[DEBUG] - Verifying graph connections and tensor validity
[DEBUG] - Initializing dimension propagation
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node leakyrelu0 (of type LeakyReLU)
[DEBUG] - - Node conv0 (of type Conv2D)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0 (of type Conv2D)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node leakyrelu0 (of type LeakyReLU)
[DEBUG] - Dimensions forwarded for node leakyrelu0 (of type LeakyReLU): [4, 3, 66, 66] Default ->
[DEBUG] [4, 3, 66, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0 (of type Conv2D): [4, 3, 66, 66] Default -> [4, 32,
[DEBUG] 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node conv0 (of type Conv2D)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions forwarded for node bn0 (of type BatchNorm2D): [4, 32, 64, 64] Default -> [4,
[DEBUG] 32, 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0 (of type Conv2D): [4, 3, 66, 66] Default -> [4, 32,
[DEBUG] 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node relu0 (of type ReLU)
[DEBUG] - Trying to forward dims of node relu0 (of type ReLU)
[DEBUG] - Dimensions forwarded for node relu0 (of type ReLU): [4, 32, 64, 64] Default -> [4, 32, 64,
[DEBUG] 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)], Float32, Default, [(32, 32)], Float32, Default, [(32, 32)], Float32, Default, [(32,
[DEBUG] 32)], Float32, Default, [(32, 32)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]]
[DEBUG] - MATCH:0 - [Float32, NCHW, []], [Float32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int8, Any, []], [Int8, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (64, 64), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]],
[DEBUG] [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[DEBUG] - required producers: ["conv0_w (Producer#0)", "conv0_b (Producer#1)", "bn0_shift
[DEBUG] (Producer#3)", "bn0_scale (Producer#2)", "bn0_batch_mean (Producer#4)",
[DEBUG] "bn0_batch_variance (Producer#5)"]
[DEBUG] - prior consumers: ["bn0 (BatchNorm2D#0)", "leakyrelu0 (LeakyReLU#0)", "conv0 (Conv2D#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - C/R: 0:0/524288:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node bn0 (BatchNorm2D#0) input #0
[DEBUG] - not runnable: C0:0 + R524288:1 > P0:0 for input #0
[DEBUG] - - consumer: leakyrelu0 (LeakyReLU#0)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] - P: 0:0
Context: Consumer node leakyrelu0 (LeakyReLU#0) input #0
[INFO] - No producer node attached to input#0 for node leakyrelu0 (LeakyReLU)
[DEBUG] - - consumer: conv0 (Conv2D#0)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node conv0 (Conv2D#0) input #0
[DEBUG] - not runnable: C0:0 + R52272:1 > P0:0 for input #0
[DEBUG] - Runnable: leakyrelu0 (LeakyReLU#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: leakyrelu0 (LeakyReLU#0)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] - P: 52272:1
Context: Consumer node leakyrelu0 (LeakyReLU#0) input #0
[INFO] - No producer node attached to input#0 for node leakyrelu0 (LeakyReLU)
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0 (Conv2D#0)"]
[DEBUG] - - consumer: conv0 (Conv2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0 (Conv2D#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: conv0 (Conv2D#0)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: conv0 (Conv2D#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: conv0 (Conv2D#0)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] 864:1/864:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 524288:1
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["bn0 (BatchNorm2D#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - C/R: 0:0/524288:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: bn0 (BatchNorm2D#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - C/R: 524288:1/524288:1
[DEBUG] 32:1/32:1
[DEBUG] 32:1/32:1
[DEBUG] 32:1/32:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 524288:1
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["relu0 (ReLU#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - C/R: 0:0/524288:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: relu0 (ReLU#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - C/R: 524288:1/524288:1
[DEBUG] - P: 524288:1
[DEBUG] - ********************
[DEBUG] - run: conv0_w (Producer#0)
[DEBUG] - run: conv0_b (Producer#1)
[DEBUG] - run: bn0_shift (Producer#3)
[DEBUG] - run: bn0_scale (Producer#2)
[DEBUG] - run: bn0_batch_mean (Producer#4)
[DEBUG] - run: bn0_batch_variance (Producer#5)
[DEBUG] - run: leakyrelu0 (LeakyReLU#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]],
[DEBUG] [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[DEBUG] - run: conv0 (Conv2D#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (64, 64), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - run: bn0 (BatchNorm2D#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)], Float32, Default, [(32, 32)], Float32, Default, [(32, 32)], Float32, Default, [(32,
[DEBUG] 32)], Float32, Default, [(32, 32)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]]
[DEBUG] - MATCH:0 - [Float32, NCHW, []], [Float32, NCHW, []]
[DEBUG] - run: relu0 (ReLU#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int8, Any, []], [Int8, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
Tiling allows the Convolution computation to be divided into the desired number of horizontal stripes.
Here, we choose four stripes on the second axis (the horizontal axis).
[10]:
tiled_conv = aidge_core.get_conv_horizontal_tiling(model.get_node("conv0"), 2, 4)
node_to_replace = {model.get_node("conv0"),
model.get_node("conv0").get_parent(1),
model.get_node("conv0").get_parent(2)}
aidge_core.GraphView.replace(node_to_replace, tiled_conv)
[DEBUG] - Inserted node "conv0_w" into registry.
[DEBUG] - Inserted node "conv0" into registry.
[DEBUG] - Inserted node "conv0_b" into registry.
[DEBUG] - Node "conv0_w" is already registered and is the same instance. Skipping insertion.
[DEBUG] - Inserted node "conv0_w" into registry.
[DEBUG] - Inserted node "conv0_0" into registry.
[DEBUG] - Inserted node "conv0_16" into registry.
[DEBUG] - Inserted node "conv0_32" into registry.
[DEBUG] - Inserted node "conv0_48" into registry.
[DEBUG] - Inserted node "Concat" into registry.
[DEBUG] - Inserted node "conv0_Slice_0" into registry.
[DEBUG] - Inserted node "conv0_b" into registry.
[DEBUG] - Inserted node "conv0_Slice_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_4" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_4" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_4" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_4" into registry.
[DEBUG] - Node "conv0_w" is already registered and is the same instance. Skipping insertion.
[NOTICE] - the 0-th Parent of the child node bn0 (of type BatchNorm2D) already existed
[DEBUG] - Inserted node "conv0_w" into registry.
[DEBUG] - Inserted node "conv0_b" into registry.
[DEBUG] - Inserted node "conv0_0" into registry.
[DEBUG] - Inserted node "conv0_Slice_0" into registry.
[DEBUG] - Inserted node "Concat" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_0_4" into registry.
[DEBUG] - Inserted node "conv0_16" into registry.
[DEBUG] - Inserted node "conv0_Slice_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_1_4" into registry.
[DEBUG] - Inserted node "conv0_32" into registry.
[DEBUG] - Inserted node "conv0_Slice_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_2_4" into registry.
[DEBUG] - Inserted node "conv0_48" into registry.
[DEBUG] - Inserted node "conv0_Slice_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_1" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_2" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_3" into registry.
[DEBUG] - Inserted node "conv0_Slice_3_4" into registry.
[10]:
True
The replace function returned True, which means that the replacement was successful. We can now visualize the tiled model.
The Convolution operator has been divided in four smaller convolutions preceeded by a Slice operator to extract the right sub-tensor. All four results are concatenated back to a single tensor that serves as an input for the following layer.
[11]:
# Visualize the tiled model with Aidge model explorer again
# aidge_model_explorer.visualize(model, "tiled_model", embed=True)
Now we run an inference with the tiled model and compare its output to that of the original model.
[12]:
model.set_backend("cpu")
model.set_datatype(aidge_core.dtype.float32)
model.forward_dims([[4,3,66,66]], True)
scheduler.reset_scheduling()
scheduler.forward(data=[input_tensor])
res2 = np.array(model.get_node("relu0").get_operator().get_output(0))
[DEBUG] - Starting dimension forward propagation for GraphView
[INFO] - Manually setting GraphView input dims with provided parameters:
[INFO] * input#0 [4, 3, 66, 66]
[DEBUG] - Validating input dimensions against existing graph inputs
[DEBUG] - Input#0 dimensions match existing tensor
[DEBUG] - Verifying graph connections and tensor validity
[DEBUG] - Initializing dimension propagation
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node leakyrelu0 (of type LeakyReLU)
[DEBUG] - - Node conv0_0 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_0 (of type Slice)
[DEBUG] - - Node conv0_16 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_1 (of type Slice)
[DEBUG] - - Node conv0_32 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_2 (of type Slice)
[DEBUG] - - Node conv0_48 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_3 (of type Slice)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node Concat (of type Concat)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node leakyrelu0 (of type LeakyReLU)
[DEBUG] - Dimensions forwarded for node leakyrelu0 (of type LeakyReLU): [4, 3, 66, 66] Default ->
[DEBUG] [4, 3, 66, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_0 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_0 (of type Slice)) of node conv0_0
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_0 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_0 (of type Slice)
[DEBUG] - Dimensions forwarded for node conv0_Slice_0 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_16 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_1 (of type Slice)) of node conv0_16
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_16 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_1 (of type Slice)
[DEBUG] - Dimensions forwarded for node conv0_Slice_1 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_32 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_2 (of type Slice)) of node conv0_32
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_32 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_2 (of type Slice)
[DEBUG] - Dimensions forwarded for node conv0_Slice_2 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_48 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_3 (of type Slice)) of node conv0_48
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_48 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_3 (of type Slice)
[DEBUG] - Dimensions forwarded for node conv0_Slice_3 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node conv0_0 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_0 (of type Slice)
[DEBUG] - - Node conv0_16 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_1 (of type Slice)
[DEBUG] - - Node conv0_32 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_2 (of type Slice)
[DEBUG] - - Node conv0_48 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_3 (of type Slice)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node Concat (of type Concat)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_0 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0_0 (of type Conv2D): [4, 3, 18, 66] Default -> [4, 32,
[DEBUG] 16, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_0 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - Dimensions forwarded for node conv0_Slice_0 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_16 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0_16 (of type Conv2D): [4, 3, 18, 66] Default -> [4, 32,
[DEBUG] 16, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_1 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - Dimensions forwarded for node conv0_Slice_1 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_32 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0_32 (of type Conv2D): [4, 3, 18, 66] Default -> [4, 32,
[DEBUG] 16, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_2 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - Dimensions forwarded for node conv0_Slice_2 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_48 (of type Conv2D)
[DEBUG] - Dimensions forwarded for node conv0_48 (of type Conv2D): [4, 3, 18, 66] Default -> [4, 32,
[DEBUG] 16, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_3 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - Dimensions forwarded for node conv0_Slice_3 (of type Slice): [4, 3, 66, 66] Default -> [4,
[DEBUG] 3, 18, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node Concat (of type Concat)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node Concat (of type Concat)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node Concat (of type Concat)
[DEBUG] - Dimensions forwarded for node Concat (of type Concat): [4, 32, 16, 64] Default -> [4, 32,
[DEBUG] 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions forwarded for node bn0 (of type BatchNorm2D): [4, 32, 64, 64] Default -> [4,
[DEBUG] 32, 64, 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node relu0 (of type ReLU)
[DEBUG] - Trying to forward dims of node relu0 (of type ReLU)
[DEBUG] - Dimensions forwarded for node relu0 (of type ReLU): [4, 32, 64, 64] Default -> [4, 32, 64,
[DEBUG] 64] Default
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - Starting dimension forward propagation for GraphView
[DEBUG] - Verifying graph connections and tensor validity
[DEBUG] - Initializing dimension propagation
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node leakyrelu0 (of type LeakyReLU)
[DEBUG] - - Node conv0_0 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_0 (of type Slice)
[DEBUG] - - Node conv0_16 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_1 (of type Slice)
[DEBUG] - - Node conv0_32 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_2 (of type Slice)
[DEBUG] - - Node conv0_48 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_3 (of type Slice)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node Concat (of type Concat)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node leakyrelu0 (of type LeakyReLU)
[DEBUG] - Dimensions forwarded for node leakyrelu0 (of type LeakyReLU): [4, 3, 66, 66] Default ->
[DEBUG] [4, 3, 66, 66] Default
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_0 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_0 (of type Slice)) of node conv0_0
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_0 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_0 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_0 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_0 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_16 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_1 (of type Slice)) of node conv0_16
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_16 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_1 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_1 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_1 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_32 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_2 (of type Slice)) of node conv0_32
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_32 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_2 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_2 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_2 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_48 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_3 (of type Slice)) of node conv0_48
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_48 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_3 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_3 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_3 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[DEBUG] - List of node to forward dimensions:
[DEBUG] - - Node bn0 (of type BatchNorm2D)
[DEBUG] - - Node conv0_0 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_0 (of type Slice)
[DEBUG] - - Node conv0_16 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_1 (of type Slice)
[DEBUG] - - Node conv0_32 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_2 (of type Slice)
[DEBUG] - - Node conv0_48 (of type Conv2D)
[DEBUG] - - Node conv0_Slice_3 (of type Slice)
[DEBUG] - Trying to forward dims of node bn0 (of type BatchNorm2D)
[DEBUG] - Dimensions not forwarded for parent (node Concat (of type Concat)) of node bn0 (of type
[DEBUG] BatchNorm2D)
[DEBUG] - Adding back node bn0 (of type BatchNorm2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_0 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_0 (of type Slice)) of node conv0_0
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_0 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_0 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_0 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_0 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_16 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_1 (of type Slice)) of node conv0_16
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_16 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_1 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_1 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_1 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_32 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_2 (of type Slice)) of node conv0_32
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_32 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_2 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_2 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_2 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_48 (of type Conv2D)
[DEBUG] - Dimensions not forwarded for parent (node conv0_Slice_3 (of type Slice)) of node conv0_48
[DEBUG] (of type Conv2D)
[DEBUG] - Adding back node conv0_48 (of type Conv2D) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Trying to forward dims of node conv0_Slice_3 (of type Slice)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[WARNING] - Slice_Op: unable to forwardDims() because output dims are data dependent on input#1
[DEBUG] - Unable to forward dimensions for node conv0_Slice_3 (of type Slice)
[DEBUG] - Adding back node conv0_Slice_3 (of type Slice) to the list of nodes to forward dimensions
[DEBUG] - - - - - -
[DEBUG] - Finished treating current list of nodes ...
[WARNING] - Unable to forward dimensions (circular dependency and/or wrong dimensions and/or data
[WARNING] dependent dimension?). Unable to compute output dims for nodes ["bn0 (BatchNorm2D)",
[WARNING] "conv0_0 (Conv2D)", "conv0_Slice_0 (Slice)", "conv0_16 (Conv2D)", "conv0_Slice_1
[WARNING] (Slice)", "conv0_32 (Conv2D)", "conv0_Slice_2 (Slice)", "conv0_48 (Conv2D)",
[WARNING] "conv0_Slice_3 (Slice)"].
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)], Float32, Default, [(32, 32)], Float32, Default, [(32, 32)], Float32, Default, [(32,
[DEBUG] 32)], Float32, Default, [(32, 32)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]]
[DEBUG] - MATCH:0 - [Float32, NCHW, []], [Float32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int8, Any, []], [Int8, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]],
[DEBUG] [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - required producers: ["bn0_shift (Producer#19)", "bn0_scale (Producer#18)",
[DEBUG] "bn0_batch_mean (Producer#20)", "bn0_batch_variance (Producer#21)", "conv0_w
[DEBUG] (Producer#16)", "conv0_b (Producer#17)", "conv0_Slice_0_1 (Producer#0)", "conv0_Slice_0_2
[DEBUG] (Producer#1)", "conv0_Slice_0_3 (Producer#2)", "conv0_Slice_0_4 (Producer#3)",
[DEBUG] "conv0_Slice_1_1 (Producer#4)", "conv0_Slice_1_2 (Producer#5)", "conv0_Slice_1_3
[DEBUG] (Producer#6)", "conv0_Slice_1_4 (Producer#7)", "conv0_Slice_2_1 (Producer#8)",
[DEBUG] "conv0_Slice_2_2 (Producer#9)", "conv0_Slice_2_3 (Producer#10)", "conv0_Slice_2_4
[DEBUG] (Producer#11)", "conv0_Slice_3_1 (Producer#12)", "conv0_Slice_3_2 (Producer#13)",
[DEBUG] "conv0_Slice_3_3 (Producer#14)", "conv0_Slice_3_4 (Producer#15)"]
[DEBUG] - prior consumers: ["bn0 (BatchNorm2D#0)", "leakyrelu0 (LeakyReLU#0)", "conv0_0
[DEBUG] (Conv2D#0)", "conv0_Slice_0 (Slice#0)", "conv0_16 (Conv2D#1)", "conv0_Slice_1 (Slice#1)",
[DEBUG] "conv0_32 (Conv2D#2)", "conv0_Slice_2 (Slice#2)", "conv0_48 (Conv2D#3)", "conv0_Slice_3
[DEBUG] (Slice#3)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - C/R: 0:0/524288:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node bn0 (BatchNorm2D#0) input #0
[DEBUG] - not runnable: C0:0 + R524288:1 > P0:0 for input #0
[DEBUG] - - consumer: leakyrelu0 (LeakyReLU#0)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] - P: 0:0
Context: Consumer node leakyrelu0 (LeakyReLU#0) input #0
[INFO] - No producer node attached to input#0 for node leakyrelu0 (LeakyReLU)
[DEBUG] - - consumer: conv0_0 (Conv2D#0)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_0 (Conv2D#0) input #0
[DEBUG] - not runnable: C0:0 + R14256:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_Slice_0 (Slice#0)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_Slice_0 (Slice#0) input #0
[DEBUG] - not runnable: C0:0 + R52272:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_16 (Conv2D#1)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_16 (Conv2D#1) input #0
[DEBUG] - not runnable: C0:0 + R14256:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_Slice_1 (Slice#1)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_Slice_1 (Slice#1) input #0
[DEBUG] - not runnable: C0:0 + R52272:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_32 (Conv2D#2)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_32 (Conv2D#2) input #0
[DEBUG] - not runnable: C0:0 + R14256:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_Slice_2 (Slice#2)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_Slice_2 (Slice#2) input #0
[DEBUG] - not runnable: C0:0 + R52272:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_48 (Conv2D#3)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_48 (Conv2D#3) input #0
[DEBUG] - not runnable: C0:0 + R14256:1 > P0:0 for input #0
[DEBUG] - - consumer: conv0_Slice_3 (Slice#3)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
Context: Consumer node conv0_Slice_3 (Slice#3) input #0
[DEBUG] - not runnable: C0:0 + R52272:1 > P0:0 for input #0
[DEBUG] - Runnable: leakyrelu0 (LeakyReLU#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: leakyrelu0 (LeakyReLU#0)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] - P: 52272:1
Context: Consumer node leakyrelu0 (LeakyReLU#0) input #0
[INFO] - No producer node attached to input#0 for node leakyrelu0 (LeakyReLU)
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_0 (Slice#0)", "conv0_Slice_1 (Slice#1)", "conv0_Slice_2
[DEBUG] (Slice#2)", "conv0_Slice_3 (Slice#3)"]
[DEBUG] - - consumer: conv0_0 (Conv2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_0 (Slice#0)"]
[DEBUG] - - consumer: conv0_Slice_0 (Slice#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_0 (Slice#0)"]
[DEBUG] - - consumer: conv0_16 (Conv2D#1)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_1 (Slice#1)"]
[DEBUG] - - consumer: conv0_Slice_1 (Slice#1)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_1 (Slice#1)"]
[DEBUG] - - consumer: conv0_32 (Conv2D#2)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_2 (Slice#2)"]
[DEBUG] - - consumer: conv0_Slice_2 (Slice#2)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_2 (Slice#2)"]
[DEBUG] - - consumer: conv0_48 (Conv2D#3)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_3 (Slice#3)"]
[DEBUG] - - consumer: conv0_Slice_3 (Slice#3)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_Slice_3 (Slice#3)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: conv0_Slice_0 (Slice#0)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
[DEBUG] - - consumer: conv0_Slice_1 (Slice#1)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
[DEBUG] - - consumer: conv0_Slice_2 (Slice#2)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
[DEBUG] - - consumer: conv0_Slice_3 (Slice#3)
[DEBUG] - C/R: 0:0/52272:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] 0:0/4:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: conv0_Slice_0 (Slice#0)
[DEBUG] - Runnable: conv0_Slice_1 (Slice#1)
[DEBUG] - Runnable: conv0_Slice_2 (Slice#2)
[DEBUG] - Runnable: conv0_Slice_3 (Slice#3)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: conv0_Slice_0 (Slice#0)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] - P: 14256:1
[DEBUG] - also producer
[DEBUG] - - consumer: conv0_Slice_1 (Slice#1)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] - P: 14256:1
[DEBUG] - also producer
[DEBUG] - - consumer: conv0_Slice_2 (Slice#2)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] - P: 14256:1
[DEBUG] - also producer
[DEBUG] - - consumer: conv0_Slice_3 (Slice#3)
[DEBUG] - C/R: 52272:1/52272:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] 4:1/4:1
[DEBUG] - P: 14256:1
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: conv0_0 (Conv2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_0 (Conv2D#0)"]
[DEBUG] - - consumer: conv0_16 (Conv2D#1)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_16 (Conv2D#1)"]
[DEBUG] - - consumer: conv0_32 (Conv2D#2)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_32 (Conv2D#2)"]
[DEBUG] - - consumer: conv0_48 (Conv2D#3)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["conv0_48 (Conv2D#3)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: conv0_0 (Conv2D#0)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - - consumer: conv0_16 (Conv2D#1)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - - consumer: conv0_32 (Conv2D#2)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - - consumer: conv0_48 (Conv2D#3)
[DEBUG] - C/R: 0:0/14256:1
[DEBUG] 0:0/864:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: conv0_0 (Conv2D#0)
[DEBUG] - Runnable: conv0_16 (Conv2D#1)
[DEBUG] - Runnable: conv0_32 (Conv2D#2)
[DEBUG] - Runnable: conv0_48 (Conv2D#3)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: conv0_0 (Conv2D#0)
[DEBUG] - C/R: 14256:1/14256:1
[DEBUG] 864:1/864:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 131072:1
[DEBUG] - also producer
[DEBUG] - - consumer: conv0_16 (Conv2D#1)
[DEBUG] - C/R: 14256:1/14256:1
[DEBUG] 864:1/864:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 131072:1
[DEBUG] - also producer
[DEBUG] - - consumer: conv0_32 (Conv2D#2)
[DEBUG] - C/R: 14256:1/14256:1
[DEBUG] 864:1/864:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 131072:1
[DEBUG] - also producer
[DEBUG] - - consumer: conv0_48 (Conv2D#3)
[DEBUG] - C/R: 14256:1/14256:1
[DEBUG] 864:1/864:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 131072:1
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: Concat (Concat#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["Concat (Concat#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: Concat (Concat#0)
[DEBUG] - C/R: 0:0/131072:1
[DEBUG] 0:0/131072:1
[DEBUG] 0:0/131072:1
[DEBUG] 0:0/131072:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: Concat (Concat#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: Concat (Concat#0)
[DEBUG] - C/R: 131072:1/131072:1
[DEBUG] 131072:1/131072:1
[DEBUG] 131072:1/131072:1
[DEBUG] 131072:1/131072:1
[DEBUG] - P: 524288:1
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["bn0 (BatchNorm2D#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - C/R: 0:0/524288:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] 0:0/32:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: bn0 (BatchNorm2D#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: bn0 (BatchNorm2D#0)
[DEBUG] - C/R: 524288:1/524288:1
[DEBUG] 32:1/32:1
[DEBUG] 32:1/32:1
[DEBUG] 32:1/32:1
[DEBUG] 32:1/32:1
[DEBUG] - P: 524288:1
[DEBUG] - also producer
[DEBUG] - ********************
[DEBUG] - List of consumers with their priors:
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - required producers: []
[DEBUG] - prior consumers: ["relu0 (ReLU#0)"]
[DEBUG] - Updated list of consumers:
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - C/R: 0:0/524288:1
[DEBUG] - P: 0:0
[DEBUG] - Runnable: relu0 (ReLU#0)
[DEBUG] - Updating producer and consumer lists...
[DEBUG] - - consumer: relu0 (ReLU#0)
[DEBUG] - C/R: 524288:1/524288:1
[DEBUG] - P: 524288:1
[DEBUG] - ********************
[DEBUG] - run: bn0_shift (Producer#19)
[DEBUG] - run: bn0_scale (Producer#18)
[DEBUG] - run: bn0_batch_mean (Producer#20)
[DEBUG] - run: bn0_batch_variance (Producer#21)
[DEBUG] - run: conv0_w (Producer#16)
[DEBUG] - run: conv0_b (Producer#17)
[DEBUG] - run: conv0_Slice_0_1 (Producer#0)
[DEBUG] - run: conv0_Slice_0_2 (Producer#1)
[DEBUG] - run: conv0_Slice_0_3 (Producer#2)
[DEBUG] - run: conv0_Slice_0_4 (Producer#3)
[DEBUG] - run: conv0_Slice_1_1 (Producer#4)
[DEBUG] - run: conv0_Slice_1_2 (Producer#5)
[DEBUG] - run: conv0_Slice_1_3 (Producer#6)
[DEBUG] - run: conv0_Slice_1_4 (Producer#7)
[DEBUG] - run: conv0_Slice_2_1 (Producer#8)
[DEBUG] - run: conv0_Slice_2_2 (Producer#9)
[DEBUG] - run: conv0_Slice_2_3 (Producer#10)
[DEBUG] - run: conv0_Slice_2_4 (Producer#11)
[DEBUG] - run: conv0_Slice_3_1 (Producer#12)
[DEBUG] - run: conv0_Slice_3_2 (Producer#13)
[DEBUG] - run: conv0_Slice_3_3 (Producer#14)
[DEBUG] - run: conv0_Slice_3_4 (Producer#15)
[DEBUG] - run: leakyrelu0 (LeakyReLU#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]],
[DEBUG] [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[DEBUG] - run: conv0_Slice_0 (Slice#0)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - run: conv0_Slice_1 (Slice#1)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - run: conv0_Slice_2 (Slice#2)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - run: conv0_Slice_3 (Slice#3)
[NOTICE] - Slice_Op: ignoring non-empty Starts attribute because input#1 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Ends attribute because input#2 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Axes attribute because input#3 takes precedence
[NOTICE] - Slice_Op: ignoring non-empty Steps attribute because input#4 takes precedence
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (66, 66), (66, 66)],
[DEBUG] Float32, Default, [(4, 4)], Float32, Default, [(4, 4)], Float32, Default, [(4, 4)],
[DEBUG] Float32, Default, [(4, 4)]], [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, [], Any, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, [], Any, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, [], Any, Any, []], [Int32, Any, []]
[DEBUG] - run: conv0_0 (Conv2D#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - run: conv0_16 (Conv2D#1)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - run: conv0_32 (Conv2D#2)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - run: conv0_48 (Conv2D#3)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (3, 3), (18, 18), (66, 66)],
[DEBUG] Float32, Default, [(32, 32), (3, 3), (3, 3), (3, 3)], Float32, Default, [(32, 32)]],
[DEBUG] [Float32, Default, [(4, 4), (32, 32), (16, 16), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float64, NCHW, []]
[DEBUG] - MATCH:0 - [Any, NCHW, []], [Float32, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Float16, NCHW, []]
[DEBUG] - MISMATCH:0 - [Any, NCHW, []], [Int32, NCHW, []]
[DEBUG] - run: Concat (Concat#0)
[DEBUG] - run: bn0 (BatchNorm2D#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)], Float32, Default, [(32, 32)], Float32, Default, [(32, 32)], Float32, Default, [(32,
[DEBUG] 32)], Float32, Default, [(32, 32)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]]
[DEBUG] - MATCH:0 - [Float32, NCHW, []], [Float32, NCHW, []]
[DEBUG] - run: relu0 (ReLU#0)
[DEBUG] - getBestMatch() for requirements: [Float32, Default, [(4, 4), (32, 32), (64, 64), (64,
[DEBUG] 64)]], [Float32, Default, [(4, 4), (32, 32), (64, 64), (64, 64)]]
[DEBUG] - MISMATCH:0 - [Float64, Any, []], [Float64, Any, []]
[DEBUG] - MATCH:0 - [Float32, Any, []], [Float32, Any, []]
[DEBUG] - MISMATCH:0 - [Int8, Any, []], [Int8, Any, []]
[DEBUG] - MISMATCH:0 - [Int32, Any, []], [Int32, Any, []]
[13]:
(res1 == res2).all()
[13]:
np.True_
Both outputs are the same!