|
|
|
@ -33,7 +33,7 @@ class TraceIndice(object):
|
|
|
|
|
Update the count and return it. To record the idx number. |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
idx_count: int |
|
|
|
|
indice_count: int |
|
|
|
|
""" |
|
|
|
|
self.indice_count += 1 |
|
|
|
|
return self.indice_count |
|
|
|
@ -113,11 +113,11 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _mark_indice_equal(self, node1, dim1, node2, dim2): |
|
|
|
|
""" |
|
|
|
|
Mark 2 index to be equal. |
|
|
|
|
Mark 2 indice to be equal. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
idx1 (int): index count. |
|
|
|
|
idx2 (int): index count. |
|
|
|
|
idx1 (int): indice count. |
|
|
|
|
idx2 (int): indice count. |
|
|
|
|
""" |
|
|
|
|
# node1_idx = _find_idx_by_name(node1.name, self.nodes_list) |
|
|
|
|
# node2_idx = _find_idx_by_name(node2.name, self.nodes_list) |
|
|
|
@ -215,7 +215,7 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_all_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Add new index for all node's dims. |
|
|
|
|
Add new indice for all node's dims. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
node (node) |
|
|
|
@ -229,7 +229,7 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_transpose_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for transpose op. |
|
|
|
|
Assign indice for transpose op. |
|
|
|
|
1. swap input's dim according to transpose args |
|
|
|
|
2. inherit input's computation |
|
|
|
|
|
|
|
|
@ -246,7 +246,7 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_permute_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for permute op. |
|
|
|
|
Assign indice for permute op. |
|
|
|
|
1. swap input's dim according to permute args |
|
|
|
|
2. inherit input's computation |
|
|
|
|
|
|
|
|
@ -263,9 +263,9 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_linear_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for linear op. |
|
|
|
|
1. copy trace from input node and change last index accroding to weight |
|
|
|
|
2. mark equal for input node last index, weight first dim and bias dim. |
|
|
|
|
Assign indice for linear op. |
|
|
|
|
1. copy trace from input node and change last indice accroding to weight |
|
|
|
|
2. mark equal for input node last indice, weight first dim and bias dim. |
|
|
|
|
3. inherit input's computation, mark computation for last dim. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
@ -289,9 +289,9 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_matmul_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for matmul op. |
|
|
|
|
1. copy trace from matmul_left and change last index accroding to matmul_right. (assert they have same length) |
|
|
|
|
2. mark equal for input matmul_left -1 index and matmul_right -2 dim. |
|
|
|
|
Assign indice for matmul op. |
|
|
|
|
1. copy trace from matmul_left and change last indice accroding to matmul_right. (assert they have same length) |
|
|
|
|
2. mark equal for input matmul_left -1 indice and matmul_right -2 dim. |
|
|
|
|
3. inherit matmul_left and matmul_right computation, mark computation for last dim. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
@ -310,8 +310,8 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_layernorm_indice(self, node, idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for layernorm op. |
|
|
|
|
1. assign index as input node |
|
|
|
|
Assign indice for layernorm op. |
|
|
|
|
1. assign indice as input node |
|
|
|
|
2. inherit computation and mark last 2 dims as computed. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
@ -323,8 +323,8 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_elementwise_indice(self, node, idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for element-wise op (eg. relu sigmoid add mul). |
|
|
|
|
1. assign index as input node |
|
|
|
|
Assign indice for element-wise op (eg. relu sigmoid add mul). |
|
|
|
|
1. assign indice as input node |
|
|
|
|
2. inherit computation from all input nodes. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
@ -353,7 +353,7 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_einsum_indice(self, node, idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for einsum op. |
|
|
|
|
Assign indice for einsum op. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
node (node) |
|
|
|
@ -371,8 +371,6 @@ class TraceIndice(object):
|
|
|
|
|
for c in i: |
|
|
|
|
all_index.append(c) |
|
|
|
|
all_index = set(all_index) |
|
|
|
|
free_index = set([i for i in right]) |
|
|
|
|
sum_index = all_index - free_index |
|
|
|
|
|
|
|
|
|
for right_idx, right_indice in enumerate(right): |
|
|
|
|
for left_idx, left_str in enumerate(left): |
|
|
|
@ -382,16 +380,10 @@ class TraceIndice(object):
|
|
|
|
|
input_nodes[left_idx], source_idx, node, right_idx |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# for i in sum_index: |
|
|
|
|
# for left_idx, left_str in enumerate(left): |
|
|
|
|
# if i in left_str: |
|
|
|
|
# self._mark_computation(node, idx, left_str.index(i)) |
|
|
|
|
# break |
|
|
|
|
|
|
|
|
|
def _assign_softmax_indice(self, node, idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for softmax op. |
|
|
|
|
1. assign index as input node |
|
|
|
|
Assign indice for softmax op. |
|
|
|
|
1. assign indice as input node |
|
|
|
|
2. inherit computation and mark softmax dim as computed. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
@ -403,8 +395,8 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_unsqueeze_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for unsqueeze op. |
|
|
|
|
1. assign new index for unsqueeze dim |
|
|
|
|
Assign indice for unsqueeze op. |
|
|
|
|
1. assign new indice for unsqueeze dim |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
node (node) |
|
|
|
@ -416,8 +408,8 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_dropout_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for unsqueeze op. |
|
|
|
|
1. assign new index for unsqueeze dim |
|
|
|
|
Assign indice for unsqueeze op. |
|
|
|
|
1. assign new indice for unsqueeze dim |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
node (node) |
|
|
|
@ -427,8 +419,8 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_ones_like_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for oneslike op. |
|
|
|
|
1. assign new index for all dim |
|
|
|
|
Assign indice for oneslike op. |
|
|
|
|
1. assign new indice for all dim |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
node (node) |
|
|
|
@ -438,10 +430,10 @@ class TraceIndice(object):
|
|
|
|
|
|
|
|
|
|
def _assign_view_reshape_indice(self, node, node_idx): |
|
|
|
|
""" |
|
|
|
|
Assign index for view and reshape op. |
|
|
|
|
Assign indice for view and reshape op. |
|
|
|
|
1. get origin shape and target shape by meta info. |
|
|
|
|
2. compute the real value of -1 in target shape. |
|
|
|
|
3. determine changed dim, and assgin index for generated dim. |
|
|
|
|
3. determine changed dim, and assgin indice for generated dim. |
|
|
|
|
4. log changed dim and generated dim for restore |
|
|
|
|
5. inherit computation. |
|
|
|
|
6. TODO: look into view list to see whether the view is associated with other, |
|
|
|
@ -495,7 +487,7 @@ class TraceIndice(object):
|
|
|
|
|
+ "view not implemented" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# get new index |
|
|
|
|
# get new indice |
|
|
|
|
origin_trace = self._find_indice_trace_from_node(origin_node) |
|
|
|
|
self._assign_indice_as_input(node, node_idx, origin_node) |
|
|
|
|
dim_from.reverse() |
|
|
|
|