| @@ -12,6 +12,7 @@ from typing import Union | |||||
| import numpy as np | import numpy as np | ||||
| from .. import _config | |||||
| from .._imperative_rt.common import CompNode | from .._imperative_rt.common import CompNode | ||||
| from .._imperative_rt.core2 import SymbolVar, Tensor, apply, dtype_promotion | from .._imperative_rt.core2 import SymbolVar, Tensor, apply, dtype_promotion | ||||
| from ..ops import builtin | from ..ops import builtin | ||||
| @@ -87,6 +88,7 @@ def _matmul(inp1, inp2): | |||||
| inp1 = inp1.astype(dtype) | inp1 = inp1.astype(dtype) | ||||
| if inp2.dtype != dtype: | if inp2.dtype != dtype: | ||||
| inp2 = inp2.astype(dtype) | inp2 = inp2.astype(dtype) | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| op = builtin.MatrixMul( | op = builtin.MatrixMul( | ||||
| transposeA=False, transposeB=False, compute_mode=compute_mode, format="default" | transposeA=False, transposeB=False, compute_mode=compute_mode, format="default" | ||||
| ) | ) | ||||
| @@ -11,6 +11,7 @@ import math | |||||
| from functools import lru_cache | from functools import lru_cache | ||||
| from typing import Optional, Sequence, Tuple, Union | from typing import Optional, Sequence, Tuple, Union | ||||
| from ..core import _config | |||||
| from ..core._imperative_rt.core2 import apply, dtype_promotion | from ..core._imperative_rt.core2 import apply, dtype_promotion | ||||
| from ..core._imperative_rt.ops import SubgraphBuilder as _SubgraphBuilder | from ..core._imperative_rt.ops import SubgraphBuilder as _SubgraphBuilder | ||||
| from ..core._trace_option import use_symbolic_shape | from ..core._trace_option import use_symbolic_shape | ||||
| @@ -1077,6 +1078,7 @@ def matmul( | |||||
| dim1, dim2 = inp1.ndim, inp2.ndim | dim1, dim2 = inp1.ndim, inp2.ndim | ||||
| assert dim1 > 0 and dim2 > 0 | assert dim1 > 0 and dim2 > 0 | ||||
| maxdim = dim1 if dim1 > dim2 else dim2 | maxdim = dim1 if dim1 > dim2 else dim2 | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| if dim1 == 1 and dim2 == 1: # dispatch to Dot | if dim1 == 1 and dim2 == 1: # dispatch to Dot | ||||
| return dot(inp1, inp2) | return dot(inp1, inp2) | ||||
| elif maxdim <= 2 or dim2 <= 2: # dispath to MatrixMul | elif maxdim <= 2 or dim2 <= 2: # dispath to MatrixMul | ||||
| @@ -10,6 +10,7 @@ | |||||
| from functools import lru_cache | from functools import lru_cache | ||||
| from typing import NamedTuple, Optional, Sequence, Tuple, Union | from typing import NamedTuple, Optional, Sequence, Tuple, Union | ||||
| from ..core import _config | |||||
| from ..core._imperative_rt.core2 import apply, dtype_promotion | from ..core._imperative_rt.core2 import apply, dtype_promotion | ||||
| from ..core._imperative_rt.ops import SubgraphBuilder as _SubgraphBuilder | from ..core._imperative_rt.ops import SubgraphBuilder as _SubgraphBuilder | ||||
| from ..core.ops import builtin | from ..core.ops import builtin | ||||
| @@ -115,6 +116,7 @@ def linear( | |||||
| weight: weight with shape `(out_features, in_features)`. | weight: weight with shape `(out_features, in_features)`. | ||||
| bias: bias with shape `(out_features,)`. Default: None | bias: bias with shape `(out_features,)`. Default: None | ||||
| """ | """ | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| ret = matmul(inp, weight, transpose_b=True, compute_mode=compute_mode) | ret = matmul(inp, weight, transpose_b=True, compute_mode=compute_mode) | ||||
| if bias is not None: | if bias is not None: | ||||
| if amp._enabled: | if amp._enabled: | ||||
| @@ -185,6 +187,8 @@ def conv1d( | |||||
| pad_h = padding | pad_h = padding | ||||
| dilate_h = dilation | dilate_h = dilation | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| sparse_type = "dense" if groups == 1 else "group" | sparse_type = "dense" if groups == 1 else "group" | ||||
| op = builtin.Convolution( | op = builtin.Convolution( | ||||
| stride_h=stride_h, | stride_h=stride_h, | ||||
| @@ -197,6 +201,7 @@ def conv1d( | |||||
| mode=conv_mode, | mode=conv_mode, | ||||
| compute_mode=compute_mode, | compute_mode=compute_mode, | ||||
| sparse=sparse_type, | sparse=sparse_type, | ||||
| format=conv_format, | |||||
| ) | ) | ||||
| (output,) = apply(op, inp, weight) | (output,) = apply(op, inp, weight) | ||||
| if bias is not None: | if bias is not None: | ||||
| @@ -261,6 +266,8 @@ def conv2d( | |||||
| dilate_h, dilate_w = expand_hw(dilation) | dilate_h, dilate_w = expand_hw(dilation) | ||||
| sparse_type = "dense" if groups == 1 else "group" | sparse_type = "dense" if groups == 1 else "group" | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.Convolution( | op = builtin.Convolution( | ||||
| stride_h=stride_h, | stride_h=stride_h, | ||||
| stride_w=stride_w, | stride_w=stride_w, | ||||
| @@ -272,6 +279,7 @@ def conv2d( | |||||
| mode=conv_mode, | mode=conv_mode, | ||||
| compute_mode=compute_mode, | compute_mode=compute_mode, | ||||
| sparse=sparse_type, | sparse=sparse_type, | ||||
| format=conv_format, | |||||
| ) | ) | ||||
| (output,) = apply(op, inp, weight) | (output,) = apply(op, inp, weight) | ||||
| if bias is not None: | if bias is not None: | ||||
| @@ -403,6 +411,7 @@ def conv_transpose2d( | |||||
| stride_h, stride_w = expand_hw(stride) | stride_h, stride_w = expand_hw(stride) | ||||
| pad_h, pad_w = expand_hw(padding) | pad_h, pad_w = expand_hw(padding) | ||||
| dilate_h, dilate_w = expand_hw(dilation) | dilate_h, dilate_w = expand_hw(dilation) | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| op = builtin.ConvolutionBackwardData( | op = builtin.ConvolutionBackwardData( | ||||
| stride_h=stride_h, | stride_h=stride_h, | ||||
| @@ -474,6 +483,7 @@ def deformable_conv2d( | |||||
| pad_h, pad_w = expand_hw(padding) | pad_h, pad_w = expand_hw(padding) | ||||
| dilate_h, dilate_w = expand_hw(dilation) | dilate_h, dilate_w = expand_hw(dilation) | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| sparse_type = "dense" if groups == 1 else "group" | sparse_type = "dense" if groups == 1 else "group" | ||||
| op = builtin.DeformableConv( | op = builtin.DeformableConv( | ||||
| stride_h=stride_h, | stride_h=stride_h, | ||||
| @@ -614,6 +624,7 @@ def max_pool2d( | |||||
| window_h, window_w = _pair_nonzero(kernel_size) | window_h, window_w = _pair_nonzero(kernel_size) | ||||
| stride_h, stride_w = _pair_nonzero(stride) | stride_h, stride_w = _pair_nonzero(stride) | ||||
| padding_h, padding_w = _pair(padding) | padding_h, padding_w = _pair(padding) | ||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.Pooling( | op = builtin.Pooling( | ||||
| window_h=window_h, | window_h=window_h, | ||||
| @@ -623,6 +634,7 @@ def max_pool2d( | |||||
| pad_h=padding_h, | pad_h=padding_h, | ||||
| pad_w=padding_w, | pad_w=padding_w, | ||||
| mode="max", | mode="max", | ||||
| format=conv_format, | |||||
| ) | ) | ||||
| (output,) = apply(op, inp) | (output,) = apply(op, inp) | ||||
| return output | return output | ||||
| @@ -656,6 +668,7 @@ def avg_pool2d( | |||||
| window_h, window_w = _pair_nonzero(kernel_size) | window_h, window_w = _pair_nonzero(kernel_size) | ||||
| stride_h, stride_w = _pair_nonzero(stride) | stride_h, stride_w = _pair_nonzero(stride) | ||||
| padding_h, padding_w = _pair(padding) | padding_h, padding_w = _pair(padding) | ||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.Pooling( | op = builtin.Pooling( | ||||
| window_h=window_h, | window_h=window_h, | ||||
| @@ -665,6 +678,7 @@ def avg_pool2d( | |||||
| pad_h=padding_h, | pad_h=padding_h, | ||||
| pad_w=padding_w, | pad_w=padding_w, | ||||
| mode=mode, | mode=mode, | ||||
| format=conv_format, | |||||
| ) | ) | ||||
| (output,) = apply(op, inp) | (output,) = apply(op, inp) | ||||
| return output | return output | ||||
| @@ -686,8 +700,9 @@ def adaptive_max_pool2d( | |||||
| """ | """ | ||||
| if isinstance(oshp, int): | if isinstance(oshp, int): | ||||
| oshp = (oshp, oshp) | oshp = (oshp, oshp) | ||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.AdaptivePooling(mode="max", format="NCHW",) | |||||
| op = builtin.AdaptivePooling(mode="max", format=conv_format,) | |||||
| oshp = astensor1d(oshp, inp, dtype="int32", device=inp.device) | oshp = astensor1d(oshp, inp, dtype="int32", device=inp.device) | ||||
| (output,) = apply(op, inp, oshp) | (output,) = apply(op, inp, oshp) | ||||
| return output | return output | ||||
| @@ -8,6 +8,7 @@ | |||||
| # pylint: disable=too-many-lines | # pylint: disable=too-many-lines | ||||
| from typing import Tuple, Union | from typing import Tuple, Union | ||||
| from ..core import _config | |||||
| from ..core._imperative_rt.core2 import apply | from ..core._imperative_rt.core2 import apply | ||||
| from ..core.ops import builtin | from ..core.ops import builtin | ||||
| from ..tensor import Tensor | from ..tensor import Tensor | ||||
| @@ -55,6 +56,8 @@ def conv_bias_activation( | |||||
| sh, sw = _pair_nonzero(stride) | sh, sw = _pair_nonzero(stride) | ||||
| dh, dw = _pair_nonzero(dilation) | dh, dw = _pair_nonzero(dilation) | ||||
| sparse_type = "dense" if groups == 1 else "group" | sparse_type = "dense" if groups == 1 else "group" | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.ConvBias( | op = builtin.ConvBias( | ||||
| stride_h=sh, | stride_h=sh, | ||||
| stride_w=sw, | stride_w=sw, | ||||
| @@ -63,7 +66,7 @@ def conv_bias_activation( | |||||
| dilate_h=dh, | dilate_h=dh, | ||||
| dilate_w=dw, | dilate_w=dw, | ||||
| dtype=dtype, | dtype=dtype, | ||||
| format="NCHW", | |||||
| format=conv_format, | |||||
| strategy=get_execution_strategy(), | strategy=get_execution_strategy(), | ||||
| nonlineMode=nonlinear_mode, | nonlineMode=nonlinear_mode, | ||||
| mode=conv_mode, | mode=conv_mode, | ||||
| @@ -114,6 +117,8 @@ def batch_conv_bias_activation( | |||||
| sh, sw = _pair_nonzero(stride) | sh, sw = _pair_nonzero(stride) | ||||
| dh, dw = _pair_nonzero(dilation) | dh, dw = _pair_nonzero(dilation) | ||||
| sparse_type = "dense" if groups == 1 else "group" | sparse_type = "dense" if groups == 1 else "group" | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.BatchConvBias( | op = builtin.BatchConvBias( | ||||
| stride_h=sh, | stride_h=sh, | ||||
| stride_w=sw, | stride_w=sw, | ||||
| @@ -122,7 +127,7 @@ def batch_conv_bias_activation( | |||||
| dilate_h=dh, | dilate_h=dh, | ||||
| dilate_w=dw, | dilate_w=dw, | ||||
| dtype=dtype, | dtype=dtype, | ||||
| format="NCHW", | |||||
| format=conv_format, | |||||
| strategy=get_execution_strategy(), | strategy=get_execution_strategy(), | ||||
| nonlineMode=nonlinear_mode, | nonlineMode=nonlinear_mode, | ||||
| mode=conv_mode, | mode=conv_mode, | ||||
| @@ -164,6 +169,7 @@ def conv_transpose2d( | |||||
| pad_h, pad_w = _pair(padding) | pad_h, pad_w = _pair(padding) | ||||
| stride_h, stride_w = _pair_nonzero(stride) | stride_h, stride_w = _pair_nonzero(stride) | ||||
| dilate_h, dilate_w = _pair_nonzero(dilation) | dilate_h, dilate_w = _pair_nonzero(dilation) | ||||
| compute_mode = _config._get_actual_op_param(compute_mode, _config.__compute_mode) | |||||
| # should be replaced by Op with bias such as ConvolutionBackwardDataBias | # should be replaced by Op with bias such as ConvolutionBackwardDataBias | ||||
| op = builtin.ConvolutionBackwardData( | op = builtin.ConvolutionBackwardData( | ||||
| @@ -10,6 +10,7 @@ from typing import Iterable, Optional, Tuple, Union | |||||
| import numpy as np | import numpy as np | ||||
| from ..core import _config | |||||
| from ..core._imperative_rt.core2 import apply | from ..core._imperative_rt.core2 import apply | ||||
| from ..core.ops import builtin | from ..core.ops import builtin | ||||
| from ..core.tensor import megbrain_graph, utils | from ..core.tensor import megbrain_graph, utils | ||||
| @@ -143,9 +144,11 @@ def correlation( | |||||
| pad_size: int (non-negative), optional, default=0) – pad for Correlation | pad_size: int (non-negative), optional, default=0) – pad for Correlation | ||||
| is_multiply: boolean, optional, default=True) – operation type is either multiplication or absolute difference | is_multiply: boolean, optional, default=True) – operation type is either multiplication or absolute difference | ||||
| """ | """ | ||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| assert conv_format == "NCHW", "Currently correlation only support NCHW mode" | |||||
| op = builtin.Correlation( | op = builtin.Correlation( | ||||
| format="NCHW", | |||||
| format=conv_format, | |||||
| kernel_size=kernel_size, | kernel_size=kernel_size, | ||||
| max_displacement=max_displacement, | max_displacement=max_displacement, | ||||
| stride1=stride1, | stride1=stride1, | ||||
| @@ -215,10 +218,12 @@ def roi_align( | |||||
| sample_points = (sample_points, sample_points) | sample_points = (sample_points, sample_points) | ||||
| sample_height, sample_width = sample_points | sample_height, sample_width = sample_points | ||||
| offset = 0.5 if aligned else 0.0 | offset = 0.5 if aligned else 0.0 | ||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| assert conv_format == "NCHW", "Currently roi_align only support NCHW mode" | |||||
| op = builtin.ROIAlign( | op = builtin.ROIAlign( | ||||
| mode=mode, | mode=mode, | ||||
| format="NCHW", | |||||
| format=conv_format, | |||||
| spatial_scale=spatial_scale, | spatial_scale=spatial_scale, | ||||
| offset=offset, | offset=offset, | ||||
| pooled_height=pooled_height, | pooled_height=pooled_height, | ||||
| @@ -343,9 +348,10 @@ def remap( | |||||
| [[[[1. 4.] | [[[[1. 4.] | ||||
| [4. 4.]]]] | [4. 4.]]]] | ||||
| """ | """ | ||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| op = builtin.Remap( | op = builtin.Remap( | ||||
| imode=interp_mode, border_type=border_mode, format="NCHW", scalar=scalar | |||||
| imode=interp_mode, border_type=border_mode, format=conv_format, scalar=scalar | |||||
| ) | ) | ||||
| assert isinstance(inp, (Tensor, megbrain_graph.VarNode)), "inp must be Tensor type" | assert isinstance(inp, (Tensor, megbrain_graph.VarNode)), "inp must be Tensor type" | ||||
| (result,) = apply(op, inp, map_xy) | (result,) = apply(op, inp, map_xy) | ||||
| @@ -384,10 +390,12 @@ def warp_affine( | |||||
| however it does not mean that you can use all the combinations. | however it does not mean that you can use all the combinations. | ||||
| On different platforms, different combinations are supported. | On different platforms, different combinations are supported. | ||||
| """ | """ | ||||
| conv_format = _config._get_actual_op_param(format, _config.__conv_format) | |||||
| op = builtin.WarpAffine( | op = builtin.WarpAffine( | ||||
| border_mode=border_mode, | border_mode=border_mode, | ||||
| border_val=border_val, | border_val=border_val, | ||||
| format=format, | |||||
| format=conv_format, | |||||
| imode=interp_mode, | imode=interp_mode, | ||||
| ) | ) | ||||
| out_shape = utils.astensor1d(out_shape, inp, dtype="int32", device=inp.device) | out_shape = utils.astensor1d(out_shape, inp, dtype="int32", device=inp.device) | ||||
| @@ -466,8 +474,9 @@ def warp_perspective( | |||||
| mat = mat.astype("float32") | mat = mat.astype("float32") | ||||
| if inp.dtype == np.float16: | if inp.dtype == np.float16: | ||||
| inp = inp.astype("float32") | inp = inp.astype("float32") | ||||
| conv_format = _config._get_actual_op_param(format, _config.__conv_format) | |||||
| op = builtin.WarpPerspective( | op = builtin.WarpPerspective( | ||||
| imode=interp_mode, bmode=border_mode, format=format, border_val=border_val | |||||
| imode=interp_mode, bmode=border_mode, format=conv_format, border_val=border_val | |||||
| ) | ) | ||||
| out_shape = astensor1d(out_shape, inp, dtype="int32", device=inp.device) | out_shape = astensor1d(out_shape, inp, dtype="int32", device=inp.device) | ||||
| if mat_idx is not None: | if mat_idx is not None: | ||||
| @@ -602,7 +611,9 @@ def interpolate( | |||||
| } | } | ||||
| if inp.dtype == np.float16: | if inp.dtype == np.float16: | ||||
| inp = inp.astype("float32") | inp = inp.astype("float32") | ||||
| op = builtin.Resize(imode=mode_map[mode], format="NCHW") | |||||
| conv_format = _config._get_actual_op_param("NCHW", _config.__conv_format) | |||||
| assert conv_format == "NCHW", "Currently resize only support NCHW mode" | |||||
| op = builtin.Resize(imode=mode_map[mode], format=conv_format) | |||||
| shape = astensor1d(dsize, inp, dtype="int32", device=inp.device) | shape = astensor1d(dsize, inp, dtype="int32", device=inp.device) | ||||
| (ret,) = apply(op, inp, shape) | (ret,) = apply(op, inp, shape) | ||||
| else: | else: | ||||