@@ -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: | ||||