未验证 提交 d4571470 编写于 作者: W wanghuancoder 提交者: GitHub

Del old dygraph varbase (#52236)

* delete old dygraph op test
上级 b8850521
...@@ -56,11 +56,7 @@ from .framework.dtype import bool # noqa: F401 ...@@ -56,11 +56,7 @@ from .framework.dtype import bool # noqa: F401
from .framework.dtype import complex64 # noqa: F401 from .framework.dtype import complex64 # noqa: F401
from .framework.dtype import complex128 # noqa: F401 from .framework.dtype import complex128 # noqa: F401
if fluid.framework.global_var._in_eager_mode_: Tensor = framework.core.eager.Tensor # noqa: F401
Tensor = framework.core.eager.Tensor
else:
from .framework import VarBase as Tensor # noqa: F401
Tensor.__qualname__ = 'Tensor' # noqa: F401 Tensor.__qualname__ = 'Tensor' # noqa: F401
import paddle.distributed # noqa: F401 import paddle.distributed # noqa: F401
import paddle.sysconfig # noqa: F401 import paddle.sysconfig # noqa: F401
......
...@@ -179,7 +179,7 @@ class AmpScaler: ...@@ -179,7 +179,7 @@ class AmpScaler:
scaled.backward() scaled.backward()
scaler.minimize(optimizer, scaled) scaler.minimize(optimizer, scaled)
""" """
check_type(var, "var", core.VarBase, 'AmpScaler.scale()') check_type(var, "var", core.eager.Tensor, 'AmpScaler.scale()')
if not self._enable: if not self._enable:
return var return var
......
...@@ -266,7 +266,7 @@ class Engine: ...@@ -266,7 +266,7 @@ class Engine:
specs.append(spec) specs.append(spec)
else: else:
specs.append(spec.batch(batch_size)) specs.append(spec.batch(batch_size))
elif isinstance(item, (Variable, core.VarBase, core.eager.Tensor)): elif isinstance(item, (Variable, core.eager.Tensor)):
spec = InputSpec.from_tensor(item, name) spec = InputSpec.from_tensor(item, name)
_adjust_item_spec(num_shards, spec) _adjust_item_spec(num_shards, spec)
if batch_size is None: if batch_size is None:
......
...@@ -31,7 +31,7 @@ __all__ = [] ...@@ -31,7 +31,7 @@ __all__ = []
def detach_variable(inputs): def detach_variable(inputs):
out = [] out = []
for inp in inputs: for inp in inputs:
if not isinstance(inp, (core.eager.Tensor, core.VarBase)): if not isinstance(inp, core.eager.Tensor):
out.append(inp) out.append(inp)
continue continue
...@@ -172,7 +172,7 @@ class RecomputeFunction(PyLayer): ...@@ -172,7 +172,7 @@ class RecomputeFunction(PyLayer):
detached_inputs = detach_variable(tuple(inputs)) detached_inputs = detach_variable(tuple(inputs))
outputs = ctx.run_function(*detached_inputs, **ctx.kwargs) outputs = ctx.run_function(*detached_inputs, **ctx.kwargs)
if isinstance(outputs, (core.VarBase, core.eager.Tensor)): if isinstance(outputs, core.eager.Tensor):
outputs = (outputs,) outputs = (outputs,)
assert len(outputs) == len(args) assert len(outputs) == len(args)
...@@ -185,7 +185,7 @@ class RecomputeFunction(PyLayer): ...@@ -185,7 +185,7 @@ class RecomputeFunction(PyLayer):
backward_inputs_with_grad = [] backward_inputs_with_grad = []
for i in range(len(outputs)): for i in range(len(outputs)):
if ( if (
isinstance(outputs[i], (core.VarBase, core.eager.Tensor)) isinstance(outputs[i], core.eager.Tensor)
and not outputs[i].stop_gradient and not outputs[i].stop_gradient
): ):
forward_outputs_with_grad.append(outputs[i]) forward_outputs_with_grad.append(outputs[i])
...@@ -206,13 +206,13 @@ class RecomputeFunction(PyLayer): ...@@ -206,13 +206,13 @@ class RecomputeFunction(PyLayer):
grads = tuple( grads = tuple(
inp._grad_ivar() inp._grad_ivar()
for inp in detached_inputs for inp in detached_inputs
if isinstance(inp, (core.VarBase, core.eager.Tensor)) if isinstance(inp, core.eager.Tensor)
) )
else: else:
grads = [ grads = [
inp._grad_ivar() inp._grad_ivar()
for inp in detached_inputs for inp in detached_inputs
if isinstance(inp, (core.VarBase, core.eager.Tensor)) if isinstance(inp, core.eager.Tensor)
] ]
return grads return grads
......
...@@ -220,7 +220,7 @@ class _HPRecomputeFunction(PyLayer): ...@@ -220,7 +220,7 @@ class _HPRecomputeFunction(PyLayer):
detached_inputs = detach_variable(tuple(inputs)) detached_inputs = detach_variable(tuple(inputs))
outputs = ctx.run_function(*detached_inputs, **ctx.kwargs) outputs = ctx.run_function(*detached_inputs, **ctx.kwargs)
if isinstance(outputs, (core.VarBase, core.eager.Tensor)): if isinstance(outputs, core.eager.Tensor):
outputs = (outputs,) outputs = (outputs,)
assert len(outputs) == len(args) assert len(outputs) == len(args)
...@@ -229,7 +229,7 @@ class _HPRecomputeFunction(PyLayer): ...@@ -229,7 +229,7 @@ class _HPRecomputeFunction(PyLayer):
for i in range(len(outputs)): for i in range(len(outputs)):
if ( if (
isinstance(outputs[i], (core.VarBase, core.eager.Tensor)) isinstance(outputs[i], core.eager.Tensor)
and not outputs[i].stop_gradient and not outputs[i].stop_gradient
): ):
forward_outputs_with_grad.append(outputs[i]) forward_outputs_with_grad.append(outputs[i])
...@@ -245,7 +245,7 @@ class _HPRecomputeFunction(PyLayer): ...@@ -245,7 +245,7 @@ class _HPRecomputeFunction(PyLayer):
grads = tuple( grads = tuple(
inp._grad_ivar() inp._grad_ivar()
for inp in detached_inputs for inp in detached_inputs
if isinstance(inp, (core.VarBase, core.eager.Tensor)) if isinstance(inp, core.eager.Tensor)
) )
return grads return grads
......
...@@ -156,7 +156,7 @@ def broadcast_input_data(hcg, *inputs, **kwargs): ...@@ -156,7 +156,7 @@ def broadcast_input_data(hcg, *inputs, **kwargs):
place = eval(f"paddle.{dev.upper()}Place")(dev_idx) place = eval(f"paddle.{dev.upper()}Place")(dev_idx)
for v in inputs: for v in inputs:
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
with framework.no_grad(): with framework.no_grad():
if in_dygraph_mode() and not eval(f"v.place.is_{dev}_place")(): if in_dygraph_mode() and not eval(f"v.place.is_{dev}_place")():
v_gpu = v._copy_to(place, True) v_gpu = v._copy_to(place, True)
...@@ -167,7 +167,7 @@ def broadcast_input_data(hcg, *inputs, **kwargs): ...@@ -167,7 +167,7 @@ def broadcast_input_data(hcg, *inputs, **kwargs):
logger.warning("it doesn't support data type {}".format(type(v))) logger.warning("it doesn't support data type {}".format(type(v)))
for k, v in kwargs.items(): for k, v in kwargs.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
with framework.no_grad(): with framework.no_grad():
if in_dygraph_mode() and not eval(f"v.place.is_{dev}_place")(): if in_dygraph_mode() and not eval(f"v.place.is_{dev}_place")():
v_gpu = v._copy_to(place, True) v_gpu = v._copy_to(place, True)
......
...@@ -44,7 +44,7 @@ from paddle.distributed.fleet.base.private_helper_function import ( # noqa: F40 ...@@ -44,7 +44,7 @@ from paddle.distributed.fleet.base.private_helper_function import ( # noqa: F40
from paddle.distributed.fleet.launch_utils import check_backend from paddle.distributed.fleet.launch_utils import check_backend
# (TODO: GhostScreaming) It will be removed later. # (TODO: GhostScreaming) It will be removed later.
from paddle.framework import ParamBase, _set_expected_place from paddle.framework import _set_expected_place
from paddle.framework import base as imperative_base from paddle.framework import base as imperative_base
from paddle.framework import core, in_dygraph_mode, to_variable from paddle.framework import core, in_dygraph_mode, to_variable
from paddle.nn.layer import layers from paddle.nn.layer import layers
...@@ -158,14 +158,14 @@ def sync_params_buffers( ...@@ -158,14 +158,14 @@ def sync_params_buffers(
): ):
model_vars = [] model_vars = []
for _, param in model._obtain_parameters_buffers().items(): for _, param in model._obtain_parameters_buffers().items():
if not isinstance(param, (core.VarBase, core.eager.Tensor)): if not isinstance(param, core.eager.Tensor):
raise TypeError( raise TypeError(
"The data type of '%s' must be Varbase or eager.Tensor" "The data type of '%s' must be Varbase or eager.Tensor"
% param.name % param.name
) )
# is_distributed param not need to sync when in mp mode # is_distributed param not need to sync when in mp mode
if isinstance(param, (ParamBase, core.eager.Tensor)): if isinstance(param, core.eager.Tensor):
if is_model_parallel: if is_model_parallel:
if hasattr(param, "is_distributed") and param.is_distributed: if hasattr(param, "is_distributed") and param.is_distributed:
continue continue
...@@ -379,9 +379,7 @@ class DataParallel(layers.Layer): ...@@ -379,9 +379,7 @@ class DataParallel(layers.Layer):
self.find_unused_parameters = find_unused_parameters self.find_unused_parameters = find_unused_parameters
self.grad_need_sync = True self.grad_need_sync = True
self.group = group self.group = group
self.var_dtype = ( self.var_dtype = core.eager.Tensor
core.eager.Tensor if in_dygraph_mode() else core.VarBase
)
# NOTE(chenweihang): The ParallelStrategy here is not strictly a strategy. # NOTE(chenweihang): The ParallelStrategy here is not strictly a strategy.
# It just stores some environment variables, which can be constructed by # It just stores some environment variables, which can be constructed by
...@@ -491,7 +489,7 @@ class DataParallel(layers.Layer): ...@@ -491,7 +489,7 @@ class DataParallel(layers.Layer):
) )
def _find_varbase(self, obj): def _find_varbase(self, obj):
var_type = core.eager.Tensor if in_dygraph_mode() else core.VarBase var_type = core.eager.Tensor
if isinstance(obj, var_type): if isinstance(obj, var_type):
return [obj] return [obj]
if isinstance(obj, (list, tuple)): if isinstance(obj, (list, tuple)):
......
...@@ -116,32 +116,22 @@ def check_type(input, input_name, expected_type, op_name, extra_message=''): ...@@ -116,32 +116,22 @@ def check_type(input, input_name, expected_type, op_name, extra_message=''):
return return
# NOTE: `in_declarative_mode` is used to determined whether this op is called under # NOTE: `in_declarative_mode` is used to determined whether this op is called under
# @to_static in transformation from dygrah to static layer. We add VarBase in # @to_static in transformation from dygrah to static layer. We add Tensor in
# expected_type to skip checking because varBase may be created and used in unusual way. # expected_type to skip checking because Tensor may be created and used in unusual way.
from .dygraph.base import in_declarative_mode from .dygraph.base import in_declarative_mode
# Need a better design to be fix this. # Need a better design to be fix this.
if in_declarative_mode(): if in_declarative_mode():
if not isinstance(expected_type, tuple): if not isinstance(expected_type, tuple):
expected_type = (expected_type,) expected_type = (expected_type,)
expected_type += (core.VarBase,) expected_type += (core.eager.Tensor,)
if _in_eager_without_dygraph_check(): elif isinstance(input, core.eager.Tensor):
expected_type += (core.eager.Tensor,)
elif isinstance(input, core.VarBase):
raise TypeError( raise TypeError(
"Please use `with fluid.dygraph.guard()` as context or `fluid.enable_dygraph()` to switch to imperative mode firstly. " "Please use `with fluid.dygraph.guard()` as context or `fluid.enable_dygraph()` to switch to imperative mode firstly. "
"Because received '{}' in {} is a imperative Variable.".format( "Because received '{}' in {} is a imperative Variable.".format(
input_name, op_name input_name, op_name
) )
) )
elif hasattr(core, "eager"):
if isinstance(input, core.eager.Tensor):
raise TypeError(
"Please use `with fluid.dygraph.guard()` as context or `fluid.enable_dygraph()` to switch to imperative mode firstly. "
"Because received '{}' in {} is a imperative Variable.".format(
input_name, op_name
)
)
if not isinstance(input, expected_type): if not isinstance(input, expected_type):
raise TypeError( raise TypeError(
"The type of '%s' in %s must be %s, but received %s. %s" "The type of '%s' in %s must be %s, but received %s. %s"
......
...@@ -127,20 +127,18 @@ def _convert_into_variable(tensor): ...@@ -127,20 +127,18 @@ def _convert_into_variable(tensor):
""" """
Convert Varbase into Variable. Convert Varbase into Variable.
""" """
if isinstance(tensor, (core.eager.Tensor, core.VarBase)): if isinstance(tensor, core.eager.Tensor):
# Check whether has been created before. # Check whether has been created before.
new_var = tensor.block._find_var_recursive(tensor.name) new_var = tensor.block._find_var_recursive(tensor.name)
if new_var is not None: if new_var is not None:
assert isinstance(new_var, framework.Variable) assert isinstance(new_var, framework.Variable)
# Convert ParamBase into Parameter with same attributes in dy2stat. # Convert EagerParamBase into Parameter with same attributes in dy2stat.
elif isinstance( elif isinstance(tensor, framework.EagerParamBase):
tensor, (framework.EagerParamBase, framework.ParamBase)
):
new_var = tensor._to_static_var(to_parameter=True) new_var = tensor._to_static_var(to_parameter=True)
else: else:
# Note(Aurelius84): Convert VarBase in self._buffers into Variable with # Note(Aurelius84): Convert Tensor in self._buffers into Variable with
# same attributes and set persistable=True to allow saving this var. # same attributes and set persistable=True to allow saving this var.
# Because users can create a VarBase in `__init__` like a # Because users can create a Tensor in `__init__` like a
# `mask` Tensor or `hidden_0` in RNN layers, which is equivalent to a Parameter # `mask` Tensor or `hidden_0` in RNN layers, which is equivalent to a Parameter
# and necessary for inferring. It will be pruned if it's not necessary for inferring. # and necessary for inferring. It will be pruned if it's not necessary for inferring.
...@@ -587,7 +585,6 @@ def guard(place=None): ...@@ -587,7 +585,6 @@ def guard(place=None):
train = framework.Program() train = framework.Program()
startup = framework.Program() startup = framework.Program()
tracer = Tracer() tracer = Tracer()
VarBase = core.VarBase
if place is not None: if place is not None:
expected_place = _get_paddle_place(place) expected_place = _get_paddle_place(place)
...@@ -757,24 +754,14 @@ def grad( ...@@ -757,24 +754,14 @@ def grad(
if isinstance(in_out_list, (list, tuple)): if isinstance(in_out_list, (list, tuple)):
assert len(in_out_list) > 0, "{} cannot be empty".format(name) assert len(in_out_list) > 0, "{} cannot be empty".format(name)
for each_var in in_out_list: for each_var in in_out_list:
if _in_eager_without_dygraph_check(): assert isinstance(
assert isinstance( each_var, core.eager.Tensor
each_var, core.eager.Tensor ), "Elements of {} must be Tensor".format(name)
), "Elements of {} must be Tensor".format(name)
else:
assert isinstance(
each_var, core.VarBase
), "Elements of {} must be Variable".format(name)
return in_out_list return in_out_list
else: else:
if _in_eager_without_dygraph_check(): assert isinstance(
assert isinstance( in_out_list, core.eager.Tensor
in_out_list, core.eager.Tensor ), "{} must be Tensor or list of Tensor".format(name)
), "{} must be Tensor or list of Tensor".format(name)
else:
assert isinstance(
in_out_list, core.VarBase
), "{} must be Variable or list of Variable".format(name)
return [in_out_list] return [in_out_list]
outputs = check_in_out(outputs, 'outputs') outputs = check_in_out(outputs, 'outputs')
...@@ -786,14 +773,9 @@ def grad( ...@@ -786,14 +773,9 @@ def grad(
for each_var in grad_outputs: for each_var in grad_outputs:
if each_var is not None: if each_var is not None:
if _in_eager_without_dygraph_check(): assert isinstance(
assert isinstance( each_var, core.eager.Tensor
each_var, core.eager.Tensor ), "grad_outputs must be None, a Variable or a list containing None or Variables"
), "grad_outputs must be None, a Variable or a list containing None or Variables"
else:
assert isinstance(
each_var, core.VarBase
), "grad_outputs must be None, a Variable or a list containing None or Variables"
else: else:
grad_outputs = [] grad_outputs = []
...@@ -804,21 +786,16 @@ def grad( ...@@ -804,21 +786,16 @@ def grad(
if no_grad_vars is None: if no_grad_vars is None:
no_grad_vars = [] no_grad_vars = []
elif isinstance(no_grad_vars, (core.VarBase, core.eager.Tensor)): elif isinstance(no_grad_vars, core.eager.Tensor):
no_grad_vars = [no_grad_vars] no_grad_vars = [no_grad_vars]
elif isinstance(no_grad_vars, core.eager.Tensor): elif isinstance(no_grad_vars, core.eager.Tensor):
no_grad_vars = [no_grad_vars] no_grad_vars = [no_grad_vars]
elif isinstance(no_grad_vars, (list, tuple, set)): elif isinstance(no_grad_vars, (list, tuple, set)):
no_grad_vars = list(no_grad_vars) no_grad_vars = list(no_grad_vars)
for var in no_grad_vars: for var in no_grad_vars:
if _in_eager_without_dygraph_check(): assert isinstance(
assert isinstance( var, core.eager.Tensor
var, core.eager.Tensor ), "no_grad_vars can only contains Tensor"
), "no_grad_vars can only contains Tensor"
else:
assert isinstance(
var, core.VarBase
), "no_grad_vars can only contains Variable"
else: else:
if _in_eager_without_dygraph_check(): if _in_eager_without_dygraph_check():
raise AssertionError( raise AssertionError(
...@@ -932,7 +909,6 @@ def to_variable(value, name=None, zero_copy=None, dtype=None): ...@@ -932,7 +909,6 @@ def to_variable(value, name=None, zero_copy=None, dtype=None):
tuple, tuple,
np.ndarray, np.ndarray,
core.eager.Tensor, core.eager.Tensor,
core.VarBase,
framework.Variable, framework.Variable,
core.Tensor, core.Tensor,
core.LoDTensor, core.LoDTensor,
...@@ -942,10 +918,10 @@ def to_variable(value, name=None, zero_copy=None, dtype=None): ...@@ -942,10 +918,10 @@ def to_variable(value, name=None, zero_copy=None, dtype=None):
"The type of 'value' in fluid.dygraph.to_variable must be %s, but received %s." "The type of 'value' in fluid.dygraph.to_variable must be %s, but received %s."
% (support_type, type(value)) % (support_type, type(value))
) )
if isinstance(value, (core.eager.Tensor, core.VarBase, framework.Variable)): if isinstance(value, (core.eager.Tensor, framework.Variable)):
return value return value
elif isinstance(value, (core.Tensor, core.LoDTensor)): elif isinstance(value, (core.Tensor, core.LoDTensor)):
return core.VarBase(value) return core.eager.Tensor(value)
else: else:
if isinstance( if isinstance(
framework._current_expected_place(), framework.core.CPUPlace framework._current_expected_place(), framework.core.CPUPlace
...@@ -974,21 +950,11 @@ def to_variable(value, name=None, zero_copy=None, dtype=None): ...@@ -974,21 +950,11 @@ def to_variable(value, name=None, zero_copy=None, dtype=None):
if value.dtype != dtype: if value.dtype != dtype:
value = value.astype(dtype) value = value.astype(dtype)
if _in_eager_without_dygraph_check(): return core.eager.Tensor(
return core.eager.Tensor( value,
value, framework._current_expected_place(),
framework._current_expected_place(), False,
False, zero_copy,
zero_copy, name if name else None,
name if name else None, True,
True, )
)
else:
py_var = core.VarBase(
value=value,
place=framework._current_expected_place(),
persistable=False,
zero_copy=zero_copy,
name=name if name else '',
)
return py_var
...@@ -62,7 +62,6 @@ _complex_dtypes = [ ...@@ -62,7 +62,6 @@ _complex_dtypes = [
core.VarDesc.VarType.COMPLEX128, core.VarDesc.VarType.COMPLEX128,
] ]
_already_patch_varbase = False
_already_patch_eager_tensor = False _already_patch_eager_tensor = False
...@@ -251,10 +250,7 @@ def monkey_patch_math_varbase(): ...@@ -251,10 +250,7 @@ def monkey_patch_math_varbase():
# 2. create varbase for scalar # 2. create varbase for scalar
lhs_dtype = self.dtype lhs_dtype = self.dtype
if framework.global_var._in_eager_mode_: other_var_should_be = core.eager.Tensor
other_var_should_be = core.eager.Tensor
else:
other_var_should_be = core.VarBase
if not isinstance(other_var, other_var_should_be): if not isinstance(other_var, other_var_should_be):
if isinstance(other_var, complex): if isinstance(other_var, complex):
import paddle import paddle
...@@ -483,17 +479,11 @@ def monkey_patch_math_varbase(): ...@@ -483,17 +479,11 @@ def monkey_patch_math_varbase():
'__ne__', '__ne__',
] ]
global _already_patch_varbase
global _already_patch_eager_tensor global _already_patch_eager_tensor
if framework.global_var._in_eager_mode_: local_already_patch = _already_patch_eager_tensor
local_already_patch = _already_patch_eager_tensor _already_patch_eager_tensor = True
_already_patch_eager_tensor = True local_tensor = core.eager.Tensor
local_tensor = core.eager.Tensor
else:
local_already_patch = _already_patch_varbase
_already_patch_varbase = True
local_tensor = core.VarBase
if not local_already_patch: if not local_already_patch:
if framework.global_var._in_eager_mode_: if framework.global_var._in_eager_mode_:
......
...@@ -26,7 +26,6 @@ from .. import unique_name ...@@ -26,7 +26,6 @@ from .. import unique_name
from ..framework import ( from ..framework import (
Variable, Variable,
Parameter, Parameter,
ParamBase,
_getitem_impl_, _getitem_impl_,
_setitem_impl_, _setitem_impl_,
EagerParamBase, EagerParamBase,
...@@ -94,12 +93,12 @@ def monkey_patch_varbase(): ...@@ -94,12 +93,12 @@ def monkey_patch_varbase():
**Notes**: **Notes**:
**This API is ONLY available in Dygraph mode** **This API is ONLY available in Dygraph mode**
Transform a VarBase into static Variable with same attributes. It's a low level interface used Transform a Tensor into static Variable with same attributes. It's a low level interface used
in dy2static and shall not be called directly. in dy2static and shall not be called directly.
Args: Args:
to_parameter (bool): It takes effect only if the input a VarBase. If set True, to_parameter (bool): It takes effect only if the input a Tensor. If set True,
the VarBase will be converted into framework.Parameters. Otherwise, it will the Tensor will be converted into framework.Parameters. Otherwise, it will
be converted into framework.Variable. Default False. be converted into framework.Variable. Default False.
Examples: Examples:
...@@ -120,7 +119,7 @@ def monkey_patch_varbase(): ...@@ -120,7 +119,7 @@ def monkey_patch_varbase():
# It will fail. So, for propery that different between dynamic and static graph, should not getattr(self, attr, None). # It will fail. So, for propery that different between dynamic and static graph, should not getattr(self, attr, None).
attr_not_need_keys = ['grad', 'T', 'place', '_place_str'] attr_not_need_keys = ['grad', 'T', 'place', '_place_str']
param_keys = ['stop_gradient', 'trainable'] param_keys = ['stop_gradient', 'trainable']
if isinstance(self, (ParamBase, EagerParamBase)): if isinstance(self, EagerParamBase):
attr_kwargs = self.__dict__.copy() attr_kwargs = self.__dict__.copy()
for key in param_keys: for key in param_keys:
attr_kwargs[key] = getattr(self, key) attr_kwargs[key] = getattr(self, key)
...@@ -144,7 +143,7 @@ def monkey_patch_varbase(): ...@@ -144,7 +143,7 @@ def monkey_patch_varbase():
attr_kwargs.update(kwargs) attr_kwargs.update(kwargs)
if to_parameter or isinstance(self, (ParamBase, EagerParamBase)): if to_parameter or isinstance(self, EagerParamBase):
del attr_kwargs['persistable'] del attr_kwargs['persistable']
# NOTE(Aurelius84): All parameters should be placed into global block. # NOTE(Aurelius84): All parameters should be placed into global block.
attr_kwargs['block'] = attr_kwargs['block'].program.global_block() attr_kwargs['block'] = attr_kwargs['block'].program.global_block()
...@@ -183,13 +182,10 @@ def monkey_patch_varbase(): ...@@ -183,13 +182,10 @@ def monkey_patch_varbase():
out = linear(t) # call with different weight out = linear(t) # call with different weight
""" """
if framework.global_var._in_eager_mode_: base_tensor = core.eager.Tensor
base_tensor = core.eager.Tensor
else:
base_tensor = core.VarBase
assert isinstance( assert isinstance(
value, (np.ndarray, base_tensor, dict, str) value, (np.ndarray, base_tensor, dict, str)
), "Variable set_value function, arguments type only support Variable, numpy, VarBase, dict, string." ), "Variable set_value function, arguments type only support Variable, numpy, Tensor, dict, string."
if isinstance(value, (dict, str)): if isinstance(value, (dict, str)):
assert len(self) == len( assert len(self) == len(
...@@ -219,8 +215,7 @@ def monkey_patch_varbase(): ...@@ -219,8 +215,7 @@ def monkey_patch_varbase():
self.name, self.dtype, dtype self.name, self.dtype, dtype
) )
# NOTE(wuweilong): self could be VarBase or Tensor, the subsequent behavior are defined in different files # NOTE(wuweilong): self could be Tensor, the subsequent behavior are defined in different files
# if self is VarBase, method value() return Variable that bindded in imperative.cc, get_tensor() bindded in pybind.cc
# if self is Tensor, method value() return self that defined in this file, get_tensor() defined in eager_method.cc # if self is Tensor, method value() return self that defined in this file, get_tensor() defined in eager_method.cc
# this Interface behavior will be unifed in the future. # this Interface behavior will be unifed in the future.
self.value().get_tensor().set( self.value().get_tensor().set(
...@@ -665,7 +660,7 @@ def monkey_patch_varbase(): ...@@ -665,7 +660,7 @@ def monkey_patch_varbase():
def __str__(self): def __str__(self):
""" """
Convert a VarBase object to a readable string. Convert a Tensor object to a readable string.
Returns(str): A readable string. Returns(str): A readable string.
...@@ -680,14 +675,9 @@ def monkey_patch_varbase(): ...@@ -680,14 +675,9 @@ def monkey_patch_varbase():
# [[0.30574632, 0.55739117, 0.30902600, 0.39413780, 0.44830436], # [[0.30574632, 0.55739117, 0.30902600, 0.39413780, 0.44830436],
# [0.79010487, 0.53972793, 0.09495186, 0.44267157, 0.72112119]]) # [0.79010487, 0.53972793, 0.09495186, 0.44267157, 0.72112119]])
""" """
if framework.global_var._in_eager_mode_: from paddle.tensor.to_string import tensor_to_string
from paddle.tensor.to_string import tensor_to_string
return tensor_to_string(self)
else:
from paddle.tensor.to_string import to_string
return to_string(self) return tensor_to_string(self)
def __deepcopy__(self, memo): def __deepcopy__(self, memo):
""" """
...@@ -714,10 +704,7 @@ def monkey_patch_varbase(): ...@@ -714,10 +704,7 @@ def monkey_patch_varbase():
raise RuntimeError( raise RuntimeError(
"Only Leaf Tensor support the deepcopy at the moment, non-Leaf Tensors contains graph information that does't support deepcopy" "Only Leaf Tensor support the deepcopy at the moment, non-Leaf Tensors contains graph information that does't support deepcopy"
) )
if framework.global_var._in_eager_mode_: new_varbase = core.eager.Tensor()
new_varbase = core.eager.Tensor()
else:
new_varbase = core.VarBase()
new_varbase.name = self.name + unique_name.generate("_deepcopy") new_varbase.name = self.name + unique_name.generate("_deepcopy")
memo[id(self)] = new_varbase memo[id(self)] = new_varbase
new_varbase.copy_(self, True) new_varbase.copy_(self, True)
...@@ -1055,26 +1042,19 @@ def monkey_patch_varbase(): ...@@ -1055,26 +1042,19 @@ def monkey_patch_varbase():
("to_dense", to_dense), ("to_dense", to_dense),
("to_sparse_coo", to_sparse_coo), ("to_sparse_coo", to_sparse_coo),
): ):
if framework.global_var._in_eager_mode_: setattr(core.eager.Tensor, method_name, method)
setattr(core.eager.Tensor, method_name, method)
else: setattr(core.eager.Tensor, "_set_grad_ivar", _set_grad_ivar)
setattr(core.VarBase, method_name, method) setattr(core.eager.Tensor, "value", value)
setattr(core.eager.Tensor, "cpu", cpu)
if framework.global_var._in_eager_mode_: setattr(core.eager.Tensor, "cuda", cuda)
setattr(core.eager.Tensor, "_set_grad_ivar", _set_grad_ivar) setattr(core.eager.Tensor, "pin_memory", pin_memory)
setattr(core.eager.Tensor, "value", value) setattr(core.eager.Tensor, "_slice", _slice)
setattr(core.eager.Tensor, "cpu", cpu) setattr(core.eager.Tensor, "_numel", _numel)
setattr(core.eager.Tensor, "cuda", cuda) setattr(core.eager.Tensor, "_uva", _uva)
setattr(core.eager.Tensor, "pin_memory", pin_memory) setattr(core.eager.Tensor, "_clear_data", _clear_data)
setattr(core.eager.Tensor, "_slice", _slice) setattr(core.eager.Tensor, "__hash__", __hash__)
setattr(core.eager.Tensor, "_numel", _numel) setattr(core.eager.Tensor, "_use_gpudnn", _use_gpudnn)
setattr(core.eager.Tensor, "_uva", _uva)
setattr(core.eager.Tensor, "_clear_data", _clear_data)
setattr(core.eager.Tensor, "__hash__", __hash__)
setattr(core.eager.Tensor, "_use_gpudnn", _use_gpudnn)
else:
setattr(core.VarBase, "__name__", "Tensor")
setattr(core.VarBase, "grad", grad)
global _already_patch_repr global _already_patch_repr
if not _already_patch_repr: if not _already_patch_repr:
......
...@@ -192,9 +192,9 @@ extra_op_attrs = { ...@@ -192,9 +192,9 @@ extra_op_attrs = {
# to make sure in most case, we find new dygraph mode first with only one if statement. # to make sure in most case, we find new dygraph mode first with only one if statement.
def _update_monkey_methods(is_eager): def _update_monkey_methods():
""" """
Update monkey methods of VarBase or eager.Tensor while Update monkey methods of Tensor or eager.Tensor while
switching eager mode and legacy mode. switching eager mode and legacy mode.
""" """
from paddle import _C_ops, _legacy_C_ops from paddle import _C_ops, _legacy_C_ops
...@@ -204,46 +204,23 @@ def _update_monkey_methods(is_eager): ...@@ -204,46 +204,23 @@ def _update_monkey_methods(is_eager):
global _already_patch_eager_tensor global _already_patch_eager_tensor
global _already_patch_varbase global _already_patch_varbase
assert isinstance(is_eager, bool) if not _already_patch_eager_tensor:
# switch into eager mode monkey_patch_varbase()
if is_eager: monkey_patch_math_varbase()
if not _already_patch_eager_tensor:
monkey_patch_varbase()
monkey_patch_math_varbase()
_already_patch_eager_tensor = True _already_patch_eager_tensor = True
# switch back into legacy mode
else:
if not _already_patch_varbase:
monkey_patch_varbase()
monkey_patch_math_varbase()
_already_patch_varbase = True
# switch Paddle.Tensor bind type # switch Paddle.Tensor bind type
_switch_tensor_bind_type(is_eager) _switch_tensor_bind_type()
def _switch_tensor_bind_type(is_eager): def _switch_tensor_bind_type():
import paddle import paddle
if is_eager: paddle.Tensor = core.eager.Tensor
paddle.Tensor = core.eager.Tensor
else:
paddle.Tensor = core.VarBase
paddle.Tensor.__qualname__ = 'Tensor' paddle.Tensor.__qualname__ = 'Tensor'
def _enable_legacy_dygraph():
global_var._in_eager_mode_ = False
_update_monkey_methods(is_eager=False)
def _disable_legacy_dygraph():
global_var._in_eager_mode_ = True
_update_monkey_methods(is_eager=True)
def _in_eager_without_dygraph_check(): def _in_eager_without_dygraph_check():
return global_var._in_eager_mode_ return global_var._in_eager_mode_
...@@ -253,36 +230,6 @@ def _in_eager_without_dygraph_check(): ...@@ -253,36 +230,6 @@ def _in_eager_without_dygraph_check():
_is_first_import_ = True _is_first_import_ = True
def _fallback_legacy_dygraph():
global _is_first_import_
need_fallback = False
# Only enable eager on CPU/GPU/XPU
is_not_support = (
core.is_compiled_with_npu()
or core.is_compiled_with_ipu()
or core.is_compiled_with_mlu()
)
if global_var._in_eager_mode_ and is_not_support:
# switch into legacy dygraph mode
warnings.warn(
"We will fallback into legacy dygraph on NPU/XPU/MLU/IPU/ROCM devices. Because we only support new eager dygraph mode on CPU/GPU currently. "
)
global_var._in_eager_mode_ = False
if not _is_first_import_:
_enable_legacy_dygraph()
need_fallback = True
need_fallback = False
_is_first_import_ = False
return need_fallback
# switch into legacy mode if need while import paddle
_fallback_legacy_dygraph()
def in_dygraph_mode(): def in_dygraph_mode():
""" """
...@@ -319,19 +266,6 @@ def _non_static_mode(): ...@@ -319,19 +266,6 @@ def _non_static_mode():
return global_var._dygraph_tracer_ is not None return global_var._dygraph_tracer_ is not None
@signature_safe_contextmanager
def _test_eager_guard(place=None):
# FIXME(dev): We haven't fully verified eager mode on NPU et.al but
# only GPU/CPU/XPU. Remove this after we improve this feature.
already_fallback = _fallback_legacy_dygraph()
if not already_fallback:
_disable_legacy_dygraph()
try:
yield
finally:
pass
global_ipu_index = -1 global_ipu_index = -1
global_ipu_stage = -1 global_ipu_stage = -1
ipu_index_attr_name = 'ipu_index' ipu_index_attr_name = 'ipu_index'
...@@ -634,11 +568,11 @@ def _set_pipeline_stage(stage): ...@@ -634,11 +568,11 @@ def _set_pipeline_stage(stage):
# NOTE(zhiqiu): This decorator is used for the APIs of Variable which is only # NOTE(zhiqiu): This decorator is used for the APIs of Variable which is only
# used to make Variable and VarBase has same interfaces, like numpy. Since VarBase is not exposed in our # used to make Variable and Tensor has same interfaces, like numpy. Since Tensor is not exposed in our
# official docments, logically, we want to keep VarBase and logically consistent. While, actually, # official docments, logically, we want to keep Tensor and logically consistent. While, actually,
# in our implementation, there some APIs not supported, like numpy, because Variable contains the desc. # in our implementation, there some APIs not supported, like numpy, because Variable contains the desc.
# So, those APIs are listed under class Variable to generate docs only. # So, those APIs are listed under class Variable to generate docs only.
# TODO(zhiqiu): We should make VarBase consistent with Variable in future, for example, by inheritting # TODO(zhiqiu): We should make Tensor consistent with Variable in future, for example, by inheritting
# same base class. # same base class.
def _fake_interface_only_(func): def _fake_interface_only_(func):
def __impl__(*args, **kwargs): def __impl__(*args, **kwargs):
...@@ -759,23 +693,6 @@ def _set_expected_place(place): ...@@ -759,23 +693,6 @@ def _set_expected_place(place):
_set_dygraph_tracer_expected_place(place) _set_dygraph_tracer_expected_place(place)
# TODO(zhiqiu): remove this function.
def _var_base_to_np(var_base):
"""
convert VarBase tp numpy
Args:
var_base(VarBase) : the VarBase to convert
Returns (np.ndarray): the np.ndarray contain the value of VarBase
"""
warnings.warn(
"paddle.fluid.framework._var_base_to_np is deprecated, please use var_base.numpy() instead of _var_base_to_np(var_base)."
)
return var_base.numpy(False)
def _cpu_num(): def _cpu_num():
if "CPU_NUM" not in os.environ.keys(): if "CPU_NUM" not in os.environ.keys():
if multiprocessing.cpu_count() > 1: if multiprocessing.cpu_count() > 1:
...@@ -1392,24 +1309,15 @@ def _varbase_creator( ...@@ -1392,24 +1309,15 @@ def _varbase_creator(
if not isinstance(dtype, core.VarDesc.VarType): if not isinstance(dtype, core.VarDesc.VarType):
dtype = convert_np_dtype_to_dtype_(dtype) dtype = convert_np_dtype_to_dtype_(dtype)
if global_var._in_eager_mode_: eager_tensor = core.eager.Tensor(
eager_tensor = core.eager.Tensor( dtype if dtype else core.VarDesc.VarType.FP32,
dtype if dtype else core.VarDesc.VarType.FP32, list(shape) if shape else [],
list(shape) if shape else [], name,
name, type if type else core.VarDesc.VarType.LOD_TENSOR,
type if type else core.VarDesc.VarType.LOD_TENSOR, True if persistable else False,
True if persistable else False, )
) eager_tensor.retain_grads()
eager_tensor.retain_grads() return eager_tensor
return eager_tensor
else:
return core.VarBase(
dtype if dtype else core.VarDesc.VarType.FP32,
list(shape) if shape else [],
name,
type if type else core.VarDesc.VarType.LOD_TENSOR,
True if persistable else False,
)
def _all_is_type(vals, expected_type): def _all_is_type(vals, expected_type):
...@@ -3141,7 +3049,7 @@ class Operator: ...@@ -3141,7 +3049,7 @@ class Operator:
in_arg_names.append(arg) in_arg_names.append(arg)
elif isinstance(arg, bytes): elif isinstance(arg, bytes):
in_arg_names.append(arg.decode()) in_arg_names.append(arg.decode())
elif isinstance(arg, (Variable, core.VarBase)): elif isinstance(arg, (Variable, core.eager.Tensor)):
in_arg_names.append(arg.name) in_arg_names.append(arg.name)
else: else:
raise TypeError( raise TypeError(
...@@ -4274,7 +4182,7 @@ class Block: ...@@ -4274,7 +4182,7 @@ class Block:
op_desc = self.desc.append_op() op_desc = self.desc.append_op()
inputs = kwargs.get("inputs", None) inputs = kwargs.get("inputs", None)
outputs = kwargs.get("outputs", None) outputs = kwargs.get("outputs", None)
# NOTE(Aurelius84): In case of @to_static, all VarBase(s) should # NOTE(Aurelius84): In case of @to_static, all Tensor(s) should
# be converted into Variable(s) with same name and block location. # be converted into Variable(s) with same name and block location.
# This is ONE and ONLY logic of type transformation of dy2static. # This is ONE and ONLY logic of type transformation of dy2static.
ignore_ops = { ignore_ops = {
...@@ -7205,155 +7113,7 @@ class Parameter(Variable, metaclass=ParameterMetaClass): ...@@ -7205,155 +7113,7 @@ class Parameter(Variable, metaclass=ParameterMetaClass):
__repr__ = __str__ __repr__ = __str__
class ParamBase(core.VarBase): class EagerParamBase(core.eager.Tensor):
"""
ParamBase is derived from Tensor( Which is the concept in Dygraph Mode).
A ParamBase is a persistable Tensor, and will be updated by optimizers
after each iteration.
The training of a neural network is essentially the updating of
its ParamBase.
Relative to a general Tensor, a ParamBase has several its own
member variables:
Args:
trainable(bool): True if the ParamBase need to be updated after
iterations.
optimize_attr(map): ParamBase attributes related with optimizing.
Currently, it only contains 'learning_rate'.
Default: {'learning_rate': 1.0}
regularizer(WeightDecayRegularizer): The Regularizer which will
be applied on the ParamBase. Default: None
do_model_average(bool): True if the model average strategy will
be applied on this ParamBase.
need_clip (bool): Whether the parameter gradient need to be cliped
in optimizer. Default is True.
"""
@dygraph_only
def __init__(self, shape, dtype, **kwargs):
if shape is None:
raise ValueError("The shape of Parameter should not be None")
if dtype is None:
raise ValueError("The dtype of Parameter should not be None")
for each in shape:
if each < 0:
raise ValueError(
"Each dimension of shape for Parameter must be greater than 0, but received %s"
% list(shape)
)
if dtype is not None:
if not isinstance(dtype, core.VarDesc.VarType):
dtype = convert_np_dtype_to_dtype_(dtype)
name = kwargs.get('name', unique_name.generate('_param_base'))
super().__init__(
dtype if dtype else core.VarDesc.VarType.FP32,
list(shape) if shape else [],
name,
core.VarDesc.VarType.LOD_TENSOR,
True,
)
trainable = kwargs.get('trainable', True)
self.stop_gradient = not trainable
self.optimize_attr = kwargs.get('optimize_attr', {'learning_rate': 1.0})
self.regularizer = kwargs.get('regularizer', None)
self.do_model_average = kwargs.get('do_model_average', None)
self.need_clip = kwargs.get('need_clip', True)
self.is_distributed = kwargs.get('is_distributed', False)
# self.block = default_main_program().global_block()
@property
def trainable(self):
return not self.stop_gradient
@trainable.setter
def trainable(self, trainable):
if isinstance(trainable, bool):
self.stop_gradient = not trainable
else:
raise ValueError(
"The type of trainable MUST be bool, but the type is ",
type(trainable),
)
def __str__(self):
"""
Convert a ParamBase object to a readable string.
Returns(str): A readable string.
Examples:
.. code-block:: python
import paddle
linear = paddle.nn.Linear(3, 3)
print(linear.weight)
# Parameter containing:
# Tensor(shape=[3, 3], dtype=float32, place=CUDAPlace(0), stop_gradient=False,
# [[ 0.48948765, 0.05829060, -0.25524026],
# [-0.70368278, 0.52986908, -0.68742192],
# [-0.54217887, 0.48439729, 0.34082305]])
"""
return "Parameter containing:\n{tensor}".format(
tensor=super().__str__()
)
def __deepcopy__(self, memo):
"""
Deep copy parameter, it will always performs Tensor copy.
Examples:
.. code-block:: python
import paddle
import copy
linear = paddle.nn.Linear(1, 3)
linear_copy = copy.deepcopy(linear)
print(linear.weight)
# Parameter containing:
# Tensor(shape=[1, 3], dtype=float32, place=CPUPlace, stop_gradient=False,
# [[-0.30929261, -0.90929240, -1.07851017]])
print(linear_copy.weight)
# Parameter containing:
# Tensor(shape=[1, 3], dtype=float32, place=CPUPlace, stop_gradient=False,
# [[-0.30929261, -0.90929240, -1.07851017]])
"""
state = copy.deepcopy(self.__dict__, memo)
state["name"] = self.name + unique_name.generate("_deepcopy")
new_param = ParamBase(self.shape, self.dtype, **state)
memo[id(self)] = new_param
new_param.copy_(self, True)
return new_param
def _copy_to(self, device, blocking):
state = copy.deepcopy(self.__dict__)
new_param = ParamBase(self.shape, self.dtype, **state)
core.varbase_copy(self, new_param, device, blocking)
return new_param
__repr__ = __str__
if hasattr(core, "eager"):
_core_eager_eagertensor = core.eager.Tensor
else:
_core_eager_eagertensor = object
class EagerParamBase(_core_eager_eagertensor):
""" """
EagerParamBase is derived from Tensor( Which is the concept in Eager-Dygraph Mode). EagerParamBase is derived from Tensor( Which is the concept in Eager-Dygraph Mode).
A EagerParamBase is a persistable Tensor, and will be updated by optimizers A EagerParamBase is a persistable Tensor, and will be updated by optimizers
......
...@@ -88,25 +88,15 @@ class LayerHelperBase: ...@@ -88,25 +88,15 @@ class LayerHelperBase:
""" """
if isinstance(value, np.ndarray): if isinstance(value, np.ndarray):
if _in_eager_without_dygraph_check(): return core.eager.Tensor(
return core.eager.Tensor( value,
value, _current_expected_place(),
_current_expected_place(), False,
False, False,
False, name if name else None,
name if name else None, True,
True, )
) elif isinstance(value, (Variable, core.eager.Tensor)):
else:
py_var = core.VarBase(
value=value,
name=name if name else '',
persistable=False,
place=_current_expected_place(),
zero_copy=False,
)
return py_var
elif isinstance(value, (core.VarBase, Variable, core.eager.Tensor)):
return value return value
else: else:
raise TypeError( raise TypeError(
......
...@@ -1053,7 +1053,7 @@ def assign_skip_lod_tensor_array(input, output): ...@@ -1053,7 +1053,7 @@ def assign_skip_lod_tensor_array(input, output):
return True return True
return False return False
if not isinstance(input, (Variable, core.VarBase)): if not isinstance(input, (Variable, core.eager.Tensor)):
if isinstance(output, Variable) and isinstance( if isinstance(output, Variable) and isinstance(
input, support_ret_buildin_type input, support_ret_buildin_type
): ):
......
...@@ -309,7 +309,7 @@ class Optimizer: ...@@ -309,7 +309,7 @@ class Optimizer:
self._learning_rate.step_num = global_step[0] self._learning_rate.step_num = global_step[0]
else: else:
raise RuntimeError( raise RuntimeError(
"Type not supprt, value in state dict must be [VarBase, Variable, numpy], the type is ", "Type not supprt, value in state dict must be [Tensor, Variable, numpy], the type is ",
type(global_step), type(global_step),
) )
...@@ -320,7 +320,7 @@ class Optimizer: ...@@ -320,7 +320,7 @@ class Optimizer:
load_para = state_dict[param.name] load_para = state_dict[param.name]
if isinstance(load_para, Variable): if isinstance(load_para, Variable):
load_para_np = load_para.numpy() load_para_np = load_para.numpy()
elif isinstance(load_para, core.VarBase): elif isinstance(load_para, core.eager.Tensor):
load_para_np = load_para.numpy() load_para_np = load_para.numpy()
elif isinstance(load_para, np.ndarray): elif isinstance(load_para, np.ndarray):
load_para_np = load_para load_para_np = load_para
......
...@@ -62,7 +62,7 @@ class TestLen(unittest.TestCase): ...@@ -62,7 +62,7 @@ class TestLen(unittest.TestCase):
else: else:
out = self.func(self.x_data) out = self.func(self.x_data)
if isinstance(out, fluid.core.VarBase): if isinstance(out, fluid.core.eager.Tensor):
out = out.numpy() out = out.numpy()
return out return out
......
...@@ -320,7 +320,7 @@ class TestTransformWhileLoop(unittest.TestCase): ...@@ -320,7 +320,7 @@ class TestTransformWhileLoop(unittest.TestCase):
def _run(self, to_static): def _run(self, to_static):
with fluid.dygraph.guard(self.place): with fluid.dygraph.guard(self.place):
# Set the input of dyfunc to VarBase # Set the input of dyfunc to Tensor
tensor_x = fluid.dygraph.to_variable(self.x, zero_copy=False) tensor_x = fluid.dygraph.to_variable(self.x, zero_copy=False)
if to_static: if to_static:
ret = paddle.jit.to_static(self.dyfunc)(tensor_x) ret = paddle.jit.to_static(self.dyfunc)(tensor_x)
......
...@@ -116,9 +116,7 @@ class TestWithNestedOutput(unittest.TestCase): ...@@ -116,9 +116,7 @@ class TestWithNestedOutput(unittest.TestCase):
self.assertTrue(len(dygraph_res) == len(static_res)) self.assertTrue(len(dygraph_res) == len(static_res))
for dy_var, st_var in zip(dygraph_res, static_res): for dy_var, st_var in zip(dygraph_res, static_res):
if isinstance( if isinstance(dy_var, fluid.core.eager.Tensor):
dy_var, (fluid.core.VarBase, fluid.core.eager.Tensor)
):
np.testing.assert_allclose( np.testing.assert_allclose(
dy_var.numpy(), st_var.numpy(), rtol=1e-05 dy_var.numpy(), st_var.numpy(), rtol=1e-05
) )
......
...@@ -282,7 +282,7 @@ class TestReturnBase(unittest.TestCase): ...@@ -282,7 +282,7 @@ class TestReturnBase(unittest.TestCase):
res = self.dygraph_func(self.input) res = self.dygraph_func(self.input)
if isinstance(res, (tuple, list)): if isinstance(res, (tuple, list)):
return tuple(r.numpy() for r in res) return tuple(r.numpy() for r in res)
elif isinstance(res, (core.VarBase, core.eager.Tensor)): elif isinstance(res, core.eager.Tensor):
return res.numpy() return res.numpy()
return res return res
......
...@@ -161,13 +161,13 @@ class TestPartialProgramRaiseError(unittest.TestCase): ...@@ -161,13 +161,13 @@ class TestPartialProgramRaiseError(unittest.TestCase):
concrete_program.parameters = params[0] concrete_program.parameters = params[0]
# TypeError: Type of self._params should be list or tuple, # TypeError: Type of self._params should be list or tuple,
# but received <class 'paddle.fluid.framework.ParamBase'>. # but received <class 'paddle.fluid.framework.EagerParamBase'>.
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
partial_program_from(concrete_program) partial_program_from(concrete_program)
params[0] = "linear.w.0" params[0] = "linear.w.0"
concrete_program.parameters = params concrete_program.parameters = params
# TypeError: Type of self._params[0] should be framework.ParamBase, # TypeError: Type of self._params[0] should be framework.EagerParamBase,
# but received <type 'str'>. # but received <type 'str'>.
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
partial_program_from(concrete_program) partial_program_from(concrete_program)
......
...@@ -53,7 +53,7 @@ class TestTransformWhileLoop(unittest.TestCase): ...@@ -53,7 +53,7 @@ class TestTransformWhileLoop(unittest.TestCase):
def _run(self, to_static): def _run(self, to_static):
with fluid.dygraph.guard(self.place): with fluid.dygraph.guard(self.place):
# Set the input of dyfunc to VarBase # Set the input of dyfunc to Tensor
tensor_x = fluid.dygraph.to_variable(self.x, zero_copy=False) tensor_x = fluid.dygraph.to_variable(self.x, zero_copy=False)
if to_static: if to_static:
ret = paddle.jit.to_static(self.dyfunc)(tensor_x) ret = paddle.jit.to_static(self.dyfunc)(tensor_x)
......
...@@ -21,7 +21,7 @@ from paddle import enable_static ...@@ -21,7 +21,7 @@ from paddle import enable_static
from paddle.fluid import core from paddle.fluid import core
sys.path.append("..") sys.path.append("..")
from op_test import OpTest, OpTestTool, convert_float_to_uint16 from eager_op_test import OpTest, OpTestTool, convert_float_to_uint16
from test_pool2d_op import ( from test_pool2d_op import (
TestPool2D_Op_Mixin, TestPool2D_Op_Mixin,
adaptive_end_index, adaptive_end_index,
......
...@@ -19,7 +19,7 @@ import numpy as np ...@@ -19,7 +19,7 @@ import numpy as np
import paddle import paddle
from paddle import fluid from paddle import fluid
from paddle.fluid.dygraph import to_variable from paddle.fluid.dygraph import to_variable
from paddle.fluid.framework import EagerParamBase, ParamBase, in_dygraph_mode from paddle.fluid.framework import EagerParamBase
class L1(paddle.nn.Layer): class L1(paddle.nn.Layer):
...@@ -184,14 +184,9 @@ class TestBuffer(unittest.TestCase): ...@@ -184,14 +184,9 @@ class TestBuffer(unittest.TestCase):
with self.assertRaisesRegex( with self.assertRaisesRegex(
TypeError, "buffer should be a Paddle.Tensor" TypeError, "buffer should be a Paddle.Tensor"
): ):
if in_dygraph_mode(): net.register_buffer(
net.register_buffer( "buffer_name", EagerParamBase([2, 2], 'float32')
"buffer_name", EagerParamBase([2, 2], 'float32') )
)
else:
net.register_buffer(
"buffer_name", ParamBase([2, 2], 'float32')
)
with self.assertRaisesRegex( with self.assertRaisesRegex(
KeyError, "name of buffer can not contain" KeyError, "name of buffer can not contain"
...@@ -208,10 +203,7 @@ class TestBuffer(unittest.TestCase): ...@@ -208,10 +203,7 @@ class TestBuffer(unittest.TestCase):
net.register_buffer("attr_name", var) net.register_buffer("attr_name", var)
del net.attr_name del net.attr_name
if in_dygraph_mode(): net.attr_name = EagerParamBase([2, 2], 'float32')
net.attr_name = EagerParamBase([2, 2], 'float32')
else:
net.attr_name = ParamBase([2, 2], 'float32')
with self.assertRaisesRegex(KeyError, "already exists"): with self.assertRaisesRegex(KeyError, "already exists"):
net.register_buffer("attr_name", var) net.register_buffer("attr_name", var)
...@@ -278,11 +270,8 @@ class TestBuffer(unittest.TestCase): ...@@ -278,11 +270,8 @@ class TestBuffer(unittest.TestCase):
self.assertEqual(len(net.buffers()), 1) self.assertEqual(len(net.buffers()), 1)
self.assertEqual(len(net.state_dict()), 0) self.assertEqual(len(net.state_dict()), 0)
# Re-assign a ParamBase will remove the buffer. # Re-assign a EagerParamBase will remove the buffer.
if in_dygraph_mode(): net.buffer_name = EagerParamBase([2, 2], 'float32')
net.buffer_name = EagerParamBase([2, 2], 'float32')
else:
net.buffer_name = ParamBase([2, 2], 'float32')
self.assertEqual(len(net.buffers()), 0) self.assertEqual(len(net.buffers()), 0)
self.assertEqual(len(net.state_dict()), 1) self.assertEqual(len(net.state_dict()), 1)
...@@ -403,12 +392,9 @@ class TestLayerTo(unittest.TestCase): ...@@ -403,12 +392,9 @@ class TestLayerTo(unittest.TestCase):
paddle.fluid.core.VarDesc.VarType.FP64, paddle.fluid.core.VarDesc.VarType.FP64,
) )
for p in self.linear.parameters(): for p in self.linear.parameters():
if in_dygraph_mode(): self.assertTrue(
self.assertTrue( isinstance(p, paddle.fluid.framework.EagerParamBase)
isinstance(p, paddle.fluid.framework.EagerParamBase) )
)
else:
self.assertTrue(isinstance(p, paddle.fluid.framework.ParamBase))
if paddle.fluid.is_compiled_with_cuda(): if paddle.fluid.is_compiled_with_cuda():
self.linear.to(device=paddle.CUDAPlace(0)) self.linear.to(device=paddle.CUDAPlace(0))
...@@ -435,14 +421,9 @@ class TestLayerTo(unittest.TestCase): ...@@ -435,14 +421,9 @@ class TestLayerTo(unittest.TestCase):
self.linear.weight._grad_ivar().place.gpu_device_id(), 0 self.linear.weight._grad_ivar().place.gpu_device_id(), 0
) )
for p in self.linear.parameters(): for p in self.linear.parameters():
if in_dygraph_mode(): self.assertTrue(
self.assertTrue( isinstance(p, paddle.fluid.framework.EagerParamBase)
isinstance(p, paddle.fluid.framework.EagerParamBase) )
)
else:
self.assertTrue(
isinstance(p, paddle.fluid.framework.ParamBase)
)
self.linear.to(device=paddle.CPUPlace()) self.linear.to(device=paddle.CPUPlace())
self.assertTrue(self.linear.weight.place.is_cpu_place()) self.assertTrue(self.linear.weight.place.is_cpu_place())
...@@ -489,12 +470,9 @@ class TestLayerTo(unittest.TestCase): ...@@ -489,12 +470,9 @@ class TestLayerTo(unittest.TestCase):
paddle.fluid.core.VarDesc.VarType.FP64, paddle.fluid.core.VarDesc.VarType.FP64,
) )
for p in self.linear.parameters(): for p in self.linear.parameters():
if in_dygraph_mode(): self.assertTrue(
self.assertTrue( isinstance(p, paddle.fluid.framework.EagerParamBase)
isinstance(p, paddle.fluid.framework.EagerParamBase) )
)
else:
self.assertTrue(isinstance(p, paddle.fluid.framework.ParamBase))
def func_test_to_api_numpy_dtype(self): def func_test_to_api_numpy_dtype(self):
self.linear.to(dtype=np.float64) self.linear.to(dtype=np.float64)
...@@ -527,12 +505,9 @@ class TestLayerTo(unittest.TestCase): ...@@ -527,12 +505,9 @@ class TestLayerTo(unittest.TestCase):
paddle.fluid.core.VarDesc.VarType.FP64, paddle.fluid.core.VarDesc.VarType.FP64,
) )
for p in self.linear.parameters(): for p in self.linear.parameters():
if in_dygraph_mode(): self.assertTrue(
self.assertTrue( isinstance(p, paddle.fluid.framework.EagerParamBase)
isinstance(p, paddle.fluid.framework.EagerParamBase) )
)
else:
self.assertTrue(isinstance(p, paddle.fluid.framework.ParamBase))
def func_test_to_api_none_buffer(self): def func_test_to_api_none_buffer(self):
model = paddle.nn.Linear(2, 4) model = paddle.nn.Linear(2, 4)
......
...@@ -30,7 +30,7 @@ from test_conv2d_op import ( ...@@ -30,7 +30,7 @@ from test_conv2d_op import (
) )
from paddle.fluid import core from paddle.fluid import core
from paddle.fluid.tests.unittests.op_test import get_numeric_gradient from paddle.fluid.tests.unittests.eager_op_test import get_numeric_gradient
from paddle.fluid.tests.unittests.testsuite import create_op from paddle.fluid.tests.unittests.testsuite import create_op
# ----------------TestDepthwiseConv ----- # ----------------TestDepthwiseConv -----
...@@ -416,14 +416,14 @@ def create_test_fp16_class(parent, grad_check=True): ...@@ -416,14 +416,14 @@ def create_test_fp16_class(parent, grad_check=True):
place = core.CUDAPlace(0) place = core.CUDAPlace(0)
if core.is_float16_supported(place) and grad_check: if core.is_float16_supported(place) and grad_check:
self.check_grad_with_place( self.check_grad_with_place(
place, ['Input'], 'Output', no_grad_set=set(['Filter']) place, ['Input'], 'Output', no_grad_set={'Filter'}
) )
def test_check_grad_no_input(self): def test_check_grad_no_input(self):
place = core.CUDAPlace(0) place = core.CUDAPlace(0)
if core.is_float16_supported(place) and grad_check: if core.is_float16_supported(place) and grad_check:
self.check_grad_with_place( self.check_grad_with_place(
place, ['Filter'], 'Output', no_grad_set=set(['Input']) place, ['Filter'], 'Output', no_grad_set={'Input'}
) )
cls_name = "{0}_{1}".format(parent.__name__, "FP16OP") cls_name = "{0}_{1}".format(parent.__name__, "FP16OP")
...@@ -464,7 +464,7 @@ def create_test_bf16_class(parent, atol=1e-2): ...@@ -464,7 +464,7 @@ def create_test_bf16_class(parent, atol=1e-2):
place, place,
['Input'], ['Input'],
'Output', 'Output',
no_grad_set=set(['Filter']), no_grad_set={'Filter'},
user_defined_grads=[numeric_grads], user_defined_grads=[numeric_grads],
) )
...@@ -475,7 +475,7 @@ def create_test_bf16_class(parent, atol=1e-2): ...@@ -475,7 +475,7 @@ def create_test_bf16_class(parent, atol=1e-2):
place, place,
['Filter'], ['Filter'],
'Output', 'Output',
no_grad_set=set(['Input']), no_grad_set={'Input'},
user_defined_grads=[numeric_grads], user_defined_grads=[numeric_grads],
) )
...@@ -503,14 +503,14 @@ def create_test_channel_last_fp16_class(parent, grad_check=True): ...@@ -503,14 +503,14 @@ def create_test_channel_last_fp16_class(parent, grad_check=True):
place = core.CUDAPlace(0) place = core.CUDAPlace(0)
if core.is_float16_supported(place) and grad_check: if core.is_float16_supported(place) and grad_check:
self.check_grad_with_place( self.check_grad_with_place(
place, ['Input'], 'Output', no_grad_set=set(['Filter']) place, ['Input'], 'Output', no_grad_set={'Filter'}
) )
def test_check_grad_no_input(self): def test_check_grad_no_input(self):
place = core.CUDAPlace(0) place = core.CUDAPlace(0)
if core.is_float16_supported(place) and grad_check: if core.is_float16_supported(place) and grad_check:
self.check_grad_with_place( self.check_grad_with_place(
place, ['Filter'], 'Output', no_grad_set=set(['Input']) place, ['Filter'], 'Output', no_grad_set={'Input'}
) )
def init_data_format(self): def init_data_format(self):
......
...@@ -44,7 +44,7 @@ def _append_backward_desc(main_program, outs): ...@@ -44,7 +44,7 @@ def _append_backward_desc(main_program, outs):
# def _set_grad_type(params, train_program): # def _set_grad_type(params, train_program):
# # NOTE: if user set sparse gradient mode, the param's gradient # # NOTE: if user set sparse gradient mode, the param's gradient
# # will be SelectedRows, not LoDTensor. But tracer will just # # will be SelectedRows, not LoDTensor. But tracer will just
# # set param grad VarBase by forward VarBase(LoDTensor) # # set param grad Tensor by forward Tensor(LoDTensor)
# # If we don't change grad_var type here, RunProgramOp need # # If we don't change grad_var type here, RunProgramOp need
# # transform SelectedRows to LoDTensor forcibly, it may not # # transform SelectedRows to LoDTensor forcibly, it may not
# # be user wanted result. # # be user wanted result.
......
...@@ -600,7 +600,7 @@ class TestSimpleUndiagonal2(unittest.TestCase): ...@@ -600,7 +600,7 @@ class TestSimpleUndiagonal2(unittest.TestCase):
class TestSimpleComplexGrad(unittest.TestCase): class TestSimpleComplexGrad(unittest.TestCase):
""" """
EinsumOp support complex grad. but op_test don't support numeric grad for complex dtype. EinsumOp support complex grad. but eager_op_test don't support numeric grad for complex dtype.
""" """
def test_shape(self): def test_shape(self):
......
...@@ -321,7 +321,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -321,7 +321,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
self.opti_dict = adam.state_dict() self.opti_dict = adam.state_dict()
self.base_opti = {} self.base_opti = {}
for k, v in self.opti_dict.items(): for k, v in self.opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
self.base_opti[v.name] = v.numpy() self.base_opti[v.name] = v.numpy()
self.assertTrue(np.sum(np.abs(v.numpy())) != 0) self.assertTrue(np.sum(np.abs(v.numpy())) != 0)
else: else:
...@@ -423,7 +423,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -423,7 +423,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
opti_dict = adam.state_dict() opti_dict = adam.state_dict()
# set to zero # set to zero
for k, v in opti_dict.items(): for k, v in opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np_t = v.numpy() np_t = v.numpy()
var = v.value().get_tensor() var = v.value().get_tensor()
var.set(np.zeros_like(np_t), place) var.set(np.zeros_like(np_t), place)
...@@ -440,7 +440,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -440,7 +440,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
opti_dict = adam.state_dict() opti_dict = adam.state_dict()
for k, v in opti_dict.items(): for k, v in opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np.testing.assert_array_equal( np.testing.assert_array_equal(
v.numpy(), self.base_opti[v.name] v.numpy(), self.base_opti[v.name]
) )
...@@ -545,7 +545,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -545,7 +545,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
opti_dict = adam.state_dict() opti_dict = adam.state_dict()
# set to zero # set to zero
for k, v in opti_dict.items(): for k, v in opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np_t = v.numpy() np_t = v.numpy()
var = v.value().get_tensor() var = v.value().get_tensor()
var.set(np.zeros_like(np_t), place) var.set(np.zeros_like(np_t), place)
...@@ -558,7 +558,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -558,7 +558,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
adam.set_state_dict(self.opti_dict) adam.set_state_dict(self.opti_dict)
opti_dict = adam.state_dict() opti_dict = adam.state_dict()
for k, v in opti_dict.items(): for k, v in opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np.testing.assert_array_equal( np.testing.assert_array_equal(
v.numpy(), self.base_opti[v.name] v.numpy(), self.base_opti[v.name]
) )
...@@ -664,7 +664,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -664,7 +664,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
np_opti_dict = {} np_opti_dict = {}
# set to zero # set to zero
for k, v in opti_dict.items(): for k, v in opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np_t = v.numpy() np_t = v.numpy()
np_opti_dict[v.name] = np_t np_opti_dict[v.name] = np_t
var = v.value().get_tensor() var = v.value().get_tensor()
...@@ -680,7 +680,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -680,7 +680,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
opti_dict = adam.state_dict() opti_dict = adam.state_dict()
for k, v in opti_dict.items(): for k, v in opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np.testing.assert_array_equal( np.testing.assert_array_equal(
v.numpy(), self.base_opti[v.name] v.numpy(), self.base_opti[v.name]
) )
...@@ -953,7 +953,7 @@ class TestDygraphPtbRnn(unittest.TestCase): ...@@ -953,7 +953,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
np_state_dict = {} np_state_dict = {}
for k, v in self.opti_dict.items(): for k, v in self.opti_dict.items():
if isinstance(v, (core.VarBase, core.eager.Tensor)): if isinstance(v, core.eager.Tensor):
np_opti_dict[v.name] = v.numpy() np_opti_dict[v.name] = v.numpy()
else: else:
np_opti_dict[k] = v np_opti_dict[k] = v
......
...@@ -82,12 +82,8 @@ class TestTensorDataset(unittest.TestCase): ...@@ -82,12 +82,8 @@ class TestTensorDataset(unittest.TestCase):
assert len(label) == 1 assert len(label) == 1
assert input.shape == [1, 3, 4] assert input.shape == [1, 3, 4]
assert label.shape == [1, 1] assert label.shape == [1, 1]
assert isinstance( assert isinstance(input, fluid.core.eager.Tensor)
input, (fluid.core.VarBase, fluid.core.eager.Tensor) assert isinstance(label, fluid.core.eager.Tensor)
)
assert isinstance(
label, (fluid.core.VarBase, fluid.core.eager.Tensor)
)
assert np.allclose(input.numpy(), input_np[i]) assert np.allclose(input.numpy(), input_np[i])
assert np.allclose(label.numpy(), label_np[i]) assert np.allclose(label.numpy(), label_np[i])
...@@ -184,12 +180,8 @@ class TestSubsetDataset(unittest.TestCase): ...@@ -184,12 +180,8 @@ class TestSubsetDataset(unittest.TestCase):
assert len(label) == 1 assert len(label) == 1
assert input.shape == [1, 3, 4] assert input.shape == [1, 3, 4]
assert label.shape == [1, 1] assert label.shape == [1, 1]
assert isinstance( assert isinstance(input, fluid.core.eager.Tensor)
input, (fluid.core.VarBase, fluid.core.eager.Tensor) assert isinstance(label, fluid.core.eager.Tensor)
)
assert isinstance(
label, (fluid.core.VarBase, fluid.core.eager.Tensor)
)
elements_list = [] elements_list = []
for _, (input, label) in enumerate(dataloader()): for _, (input, label) in enumerate(dataloader()):
...@@ -285,12 +277,8 @@ class TestNumpyMixTensorDataset(TestTensorDataset): ...@@ -285,12 +277,8 @@ class TestNumpyMixTensorDataset(TestTensorDataset):
assert len(label) == 1 assert len(label) == 1
assert input.shape == [1, IMAGE_SIZE] assert input.shape == [1, IMAGE_SIZE]
assert label.shape == [1, 1] assert label.shape == [1, 1]
assert isinstance( assert isinstance(input, fluid.core.eager.Tensor)
input, (fluid.core.VarBase, fluid.core.eager.Tensor) assert isinstance(label, fluid.core.eager.Tensor)
)
assert isinstance(
label, (fluid.core.VarBase, fluid.core.eager.Tensor)
)
class ComplextDataset(Dataset): class ComplextDataset(Dataset):
...@@ -385,9 +373,7 @@ class TestSingleFieldDataset(unittest.TestCase): ...@@ -385,9 +373,7 @@ class TestSingleFieldDataset(unittest.TestCase):
) )
for i, data in enumerate(dataloader()): for i, data in enumerate(dataloader()):
assert isinstance( assert isinstance(data, fluid.core.eager.Tensor)
data, (fluid.core.VarBase, fluid.core.eager.Tensor)
)
assert data.shape == [2, 2, 3] assert data.shape == [2, 2, 3]
def test_main(self): def test_main(self):
......
...@@ -20,7 +20,7 @@ from eager_op_test import OpTest ...@@ -20,7 +20,7 @@ from eager_op_test import OpTest
import paddle import paddle
from paddle import fluid from paddle import fluid
from paddle.fluid import Program, program_guard from paddle.fluid import Program, program_guard
from paddle.fluid.tests.unittests.op_test import convert_float_to_uint16 from paddle.fluid.tests.unittests.eager_op_test import convert_float_to_uint16
def call_nonzero(x): def call_nonzero(x):
......
...@@ -360,7 +360,7 @@ class TestSaveLoadAny(unittest.TestCase): ...@@ -360,7 +360,7 @@ class TestSaveLoadAny(unittest.TestCase):
self.assertTrue( self.assertTrue(
isinstance( isinstance(
t_dygraph, t_dygraph,
(paddle.fluid.core.VarBase, paddle.fluid.core.eager.Tensor), paddle.fluid.core.eager.Tensor,
) )
) )
np.testing.assert_array_equal(tensor.numpy(), np_dygraph) np.testing.assert_array_equal(tensor.numpy(), np_dygraph)
...@@ -788,14 +788,14 @@ class TestSaveLoadAny(unittest.TestCase): ...@@ -788,14 +788,14 @@ class TestSaveLoadAny(unittest.TestCase):
self.assertTrue( self.assertTrue(
isinstance( isinstance(
load_tensor3[0], load_tensor3[0],
(fluid.core.VarBase, fluid.core.eager.Tensor), fluid.core.eager.Tensor,
) )
) )
np.testing.assert_array_equal(load_tensor3[0].numpy(), obj3[0]) np.testing.assert_array_equal(load_tensor3[0].numpy(), obj3[0])
self.assertTrue( self.assertTrue(
isinstance( isinstance(
load_tensor3[1], load_tensor3[1],
(fluid.core.VarBase, fluid.core.eager.Tensor), fluid.core.eager.Tensor,
) )
) )
np.testing.assert_array_equal(load_tensor3[1].numpy(), obj3[1]) np.testing.assert_array_equal(load_tensor3[1].numpy(), obj3[1])
...@@ -804,7 +804,7 @@ class TestSaveLoadAny(unittest.TestCase): ...@@ -804,7 +804,7 @@ class TestSaveLoadAny(unittest.TestCase):
self.assertTrue( self.assertTrue(
isinstance( isinstance(
load_tensor3[2]["state_dict"][k], load_tensor3[2]["state_dict"][k],
(fluid.core.VarBase, fluid.core.eager.Tensor), fluid.core.eager.Tensor,
) )
) )
np.testing.assert_array_equal( np.testing.assert_array_equal(
...@@ -815,7 +815,7 @@ class TestSaveLoadAny(unittest.TestCase): ...@@ -815,7 +815,7 @@ class TestSaveLoadAny(unittest.TestCase):
self.assertTrue( self.assertTrue(
isinstance( isinstance(
load_tensor3[2]["opt"][k], load_tensor3[2]["opt"][k],
(fluid.core.VarBase, fluid.core.eager.Tensor), fluid.core.eager.Tensor,
) )
) )
np.testing.assert_array_equal( np.testing.assert_array_equal(
...@@ -825,7 +825,7 @@ class TestSaveLoadAny(unittest.TestCase): ...@@ -825,7 +825,7 @@ class TestSaveLoadAny(unittest.TestCase):
self.assertTrue( self.assertTrue(
isinstance( isinstance(
load_tensor4[0], load_tensor4[0],
(fluid.core.VarBase, fluid.core.eager.Tensor), fluid.core.eager.Tensor,
) )
) )
np.testing.assert_array_equal(load_tensor4[0].numpy(), obj4[0]) np.testing.assert_array_equal(load_tensor4[0].numpy(), obj4[0])
......
...@@ -21,7 +21,7 @@ import paddle ...@@ -21,7 +21,7 @@ import paddle
from paddle.fluid import core from paddle.fluid import core
from paddle.fluid.dygraph import guard from paddle.fluid.dygraph import guard
from paddle.fluid.executor import Executor from paddle.fluid.executor import Executor
from paddle.fluid.framework import ParamBase, Variable, default_main_program from paddle.fluid.framework import Variable, default_main_program
paddle.enable_static() paddle.enable_static()
main_program = default_main_program() main_program = default_main_program()
...@@ -73,9 +73,6 @@ class ParameterChecks(unittest.TestCase): ...@@ -73,9 +73,6 @@ class ParameterChecks(unittest.TestCase):
pram_copy2 = copy.deepcopy(param, memo) pram_copy2 = copy.deepcopy(param, memo)
self.assertEqual(id(param_copy), id(pram_copy2)) self.assertEqual(id(param_copy), id(pram_copy2))
zero_dim_param = ParamBase(shape=[], dtype='float32')
self.assertEqual(zero_dim_param.shape, [])
def func_exception(self): def func_exception(self):
b = main_program.global_block() b = main_program.global_block()
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
......
...@@ -20,11 +20,6 @@ import paddle ...@@ -20,11 +20,6 @@ import paddle
from paddle.autograd.py_layer import PyLayer from paddle.autograd.py_layer import PyLayer
class FakeTensor(paddle.fluid.core.VarBase):
def __init__(self):
pass
class TestPyLayer(unittest.TestCase): class TestPyLayer(unittest.TestCase):
def test_simple_pylayer_multiple_output(self): def test_simple_pylayer_multiple_output(self):
class tanh(PyLayer): class tanh(PyLayer):
......
...@@ -175,14 +175,9 @@ class RunProgramOpTest(unittest.TestCase): ...@@ -175,14 +175,9 @@ class RunProgramOpTest(unittest.TestCase):
def prepare_dygraph_input(self, place, return_param_list=False): def prepare_dygraph_input(self, place, return_param_list=False):
def create_var_base(is_input, name, np_value, stop_gradient): def create_var_base(is_input, name, np_value, stop_gradient):
if global_var._in_eager_mode_: var = core.eager.Tensor(
var = core.eager.Tensor( value=np_value, name=name, place=place, zero_copy=True
value=np_value, name=name, place=place, zero_copy=True )
)
else:
var = core.VarBase(
value=np_value, name=name, place=place, zero_copy=True
)
var.stop_gradient = stop_gradient var.stop_gradient = stop_gradient
return var return var
......
...@@ -17,7 +17,6 @@ import unittest ...@@ -17,7 +17,6 @@ import unittest
import numpy as np import numpy as np
import paddle import paddle
from paddle.fluid.framework import _test_eager_guard
class TestTrapezoidAPI(unittest.TestCase): class TestTrapezoidAPI(unittest.TestCase):
...@@ -61,9 +60,6 @@ class TestTrapezoidAPI(unittest.TestCase): ...@@ -61,9 +60,6 @@ class TestTrapezoidAPI(unittest.TestCase):
np.testing.assert_allclose(out, self.output, rtol=1e-05) np.testing.assert_allclose(out, self.output, rtol=1e-05)
def test_dygraph(self): def test_dygraph(self):
with _test_eager_guard():
self.setUp()
self.func_dygraph()
self.setUp() self.setUp()
self.func_dygraph() self.func_dygraph()
...@@ -267,8 +263,6 @@ class Testfp16Trapezoid(TestTrapezoidAPI): ...@@ -267,8 +263,6 @@ class Testfp16Trapezoid(TestTrapezoidAPI):
out = self.paddle_api(y=y, x=x) out = self.paddle_api(y=y, x=x)
def test_fp16_dygraph(self): def test_fp16_dygraph(self):
with _test_eager_guard():
self.func_dygraph()
self.func_dygraph() self.func_dygraph()
......
...@@ -1018,9 +1018,7 @@ class TestVarBase(unittest.TestCase): ...@@ -1018,9 +1018,7 @@ class TestVarBase(unittest.TestCase):
def test_var_base_to_np(self): def test_var_base_to_np(self):
with fluid.dygraph.guard(): with fluid.dygraph.guard():
var = fluid.dygraph.to_variable(self.array) var = fluid.dygraph.to_variable(self.array)
np.testing.assert_array_equal( np.testing.assert_array_equal(var.numpy(), var.numpy(False))
var.numpy(), fluid.framework._var_base_to_np(var)
)
def test_var_base_as_np(self): def test_var_base_as_np(self):
with fluid.dygraph.guard(): with fluid.dygraph.guard():
...@@ -1051,7 +1049,7 @@ class TestVarBase(unittest.TestCase): ...@@ -1051,7 +1049,7 @@ class TestVarBase(unittest.TestCase):
def test_to_static_var(self): def test_to_static_var(self):
with fluid.dygraph.guard(): with fluid.dygraph.guard():
# Convert VarBase into Variable or Parameter # Convert Tensor into Variable or Parameter
var_base = fluid.dygraph.to_variable(self.array, name="var_base_1") var_base = fluid.dygraph.to_variable(self.array, name="var_base_1")
static_var = var_base._to_static_var() static_var = var_base._to_static_var()
self._assert_to_static(var_base, static_var) self._assert_to_static(var_base, static_var)
...@@ -1060,7 +1058,7 @@ class TestVarBase(unittest.TestCase): ...@@ -1060,7 +1058,7 @@ class TestVarBase(unittest.TestCase):
static_param = var_base._to_static_var(to_parameter=True) static_param = var_base._to_static_var(to_parameter=True)
self._assert_to_static(var_base, static_param, True) self._assert_to_static(var_base, static_param, True)
# Convert ParamBase into Parameter # Convert EagerParamBase into Parameter
fc = paddle.nn.Linear( fc = paddle.nn.Linear(
10, 10,
20, 20,
...@@ -1078,7 +1076,7 @@ class TestVarBase(unittest.TestCase): ...@@ -1078,7 +1076,7 @@ class TestVarBase(unittest.TestCase):
if is_param: if is_param:
self.assertTrue(isinstance(static_var, fluid.framework.Parameter)) self.assertTrue(isinstance(static_var, fluid.framework.Parameter))
self.assertTrue(static_var.persistable, True) self.assertTrue(static_var.persistable, True)
if isinstance(var_base, fluid.framework.ParamBase): if isinstance(var_base, fluid.framework.EagerParamBase):
for attr in ['trainable', 'is_distributed', 'do_model_average']: for attr in ['trainable', 'is_distributed', 'do_model_average']:
self.assertEqual( self.assertEqual(
getattr(var_base, attr), getattr(static_var, attr) getattr(var_base, attr), getattr(static_var, attr)
......
...@@ -27,7 +27,6 @@ from xpu.get_test_cover_info import ( ...@@ -27,7 +27,6 @@ from xpu.get_test_cover_info import (
import paddle import paddle
from paddle import fluid, tensor from paddle import fluid, tensor
from paddle.fluid import Program, program_guard from paddle.fluid import Program, program_guard
from paddle.fluid.framework import _test_eager_guard
paddle.enable_static() paddle.enable_static()
...@@ -74,8 +73,7 @@ class XPUTestUnbindOP(XPUOpTestWrapper): ...@@ -74,8 +73,7 @@ class XPUTestUnbindOP(XPUOpTestWrapper):
np.testing.assert_array_equal(x.grad.numpy(), np_grad) np.testing.assert_array_equal(x.grad.numpy(), np_grad)
def test_unbind_dygraph_final_state(self): def test_unbind_dygraph_final_state(self):
with _test_eager_guard(): self.test_unbind_dygraph()
self.test_unbind_dygraph()
class TestLayersUnbind(unittest.TestCase): class TestLayersUnbind(unittest.TestCase):
def test_layers_unbind(self): def test_layers_unbind(self):
......
...@@ -27,7 +27,6 @@ from ..fluid.core import CUDAPinnedPlace # noqa: F401 ...@@ -27,7 +27,6 @@ from ..fluid.core import CUDAPinnedPlace # noqa: F401
from ..fluid.core import NPUPlace # noqa: F401 from ..fluid.core import NPUPlace # noqa: F401
from ..fluid.core import MLUPlace # noqa: F401 from ..fluid.core import MLUPlace # noqa: F401
from ..fluid.core import CustomPlace # noqa: F401 from ..fluid.core import CustomPlace # noqa: F401
from ..fluid.core import VarBase # noqa: F401
from ..fluid import core # noqa: F401 from ..fluid import core # noqa: F401
from ..fluid.dygraph import base, to_variable from ..fluid.dygraph import base, to_variable
...@@ -51,7 +50,7 @@ from ..fluid.dygraph import monkey_patch_math_varbase ...@@ -51,7 +50,7 @@ from ..fluid.dygraph import monkey_patch_math_varbase
from ..fluid.framework import disable_signal_handler # noqa: F401 from ..fluid.framework import disable_signal_handler # noqa: F401
from ..fluid.framework import get_flags # noqa: F401 from ..fluid.framework import get_flags # noqa: F401
from ..fluid.framework import set_flags # noqa: F401 from ..fluid.framework import set_flags # noqa: F401
from ..fluid.framework import Parameter, ParamBase from ..fluid.framework import Parameter
from ..fluid.dygraph.base import enable_dygraph as disable_static # noqa: F401 from ..fluid.dygraph.base import enable_dygraph as disable_static # noqa: F401
from ..fluid.dygraph.base import disable_dygraph as enable_static # noqa: F401 from ..fluid.dygraph.base import disable_dygraph as enable_static # noqa: F401
from ..fluid.framework import _non_static_mode as in_dynamic_mode # noqa: F401 from ..fluid.framework import _non_static_mode as in_dynamic_mode # noqa: F401
......
...@@ -29,7 +29,6 @@ from paddle import fluid ...@@ -29,7 +29,6 @@ from paddle import fluid
from paddle.fluid import core from paddle.fluid import core
from paddle.fluid.framework import ( from paddle.fluid.framework import (
EagerParamBase, EagerParamBase,
ParamBase,
Program, Program,
Variable, Variable,
_current_expected_place, _current_expected_place,
...@@ -55,7 +54,7 @@ def _build_saved_state_dict(state_dict): ...@@ -55,7 +54,7 @@ def _build_saved_state_dict(state_dict):
save_dict = {} save_dict = {}
name_table = {} name_table = {}
for key, value in state_dict.items(): for key, value in state_dict.items():
if isinstance(value, (Variable, core.VarBase, core.eager.Tensor)): if isinstance(value, (Variable, core.eager.Tensor)):
if value.type == core.VarDesc.VarType.VOCAB: if value.type == core.VarDesc.VarType.VOCAB:
save_dict[key] = value.value().get_map_tensor() save_dict[key] = value.value().get_map_tensor()
else: else:
...@@ -118,8 +117,8 @@ def _load_state_dict_from_save_inference_model(model_path, config): ...@@ -118,8 +117,8 @@ def _load_state_dict_from_save_inference_model(model_path, config):
def _load_state_dict_from_save_params(model_path): def _load_state_dict_from_save_params(model_path):
# Try to load all the files in the directory in VarBase format, # Try to load all the files in the directory in Tensor format,
# the file name is used as the name of VarBase # the file name is used as the name of Tensor
load_var_list = [] load_var_list = []
# 1. load file names # 1. load file names
...@@ -131,7 +130,7 @@ def _load_state_dict_from_save_params(model_path): ...@@ -131,7 +130,7 @@ def _load_state_dict_from_save_params(model_path):
var_name = tmp_var_name.replace("\\", "/") var_name = tmp_var_name.replace("\\", "/")
var_name_list.append(var_name) var_name_list.append(var_name)
# 2. create and load VarBase # 2. create and load Tensor
with fluid.dygraph.guard(): with fluid.dygraph.guard():
for name in var_name_list: for name in var_name_list:
new_var = _varbase_creator(name=name, persistable=True) new_var = _varbase_creator(name=name, persistable=True)
...@@ -320,17 +319,13 @@ def _pickle_save(obj, f, protocol): ...@@ -320,17 +319,13 @@ def _pickle_save(obj, f, protocol):
def add_dispatch_table(): def add_dispatch_table():
# This is not a good method, because the pickle module has been modified. # This is not a good method, because the pickle module has been modified.
pickle.dispatch_table[core.VarBase] = reduce_varbase
pickle.dispatch_table[ParamBase] = reduce_varbase
pickle.dispatch_table[core.eager.Tensor] = reduce_varbase pickle.dispatch_table[core.eager.Tensor] = reduce_varbase
pickle.dispatch_table[EagerParamBase] = reduce_varbase pickle.dispatch_table[EagerParamBase] = reduce_varbase
pickle.dispatch_table[core.LoDTensor] = reduce_LoDTensor pickle.dispatch_table[core.LoDTensor] = reduce_LoDTensor
pickle.dispatch_table.update(dispatch_table_layer) pickle.dispatch_table.update(dispatch_table_layer)
def pop_dispatch_table(): def pop_dispatch_table():
pickle.dispatch_table.pop(core.VarBase)
pickle.dispatch_table.pop(core.LoDTensor) pickle.dispatch_table.pop(core.LoDTensor)
pickle.dispatch_table.pop(ParamBase)
pickle.dispatch_table.pop(core.eager.Tensor) pickle.dispatch_table.pop(core.eager.Tensor)
pickle.dispatch_table.pop(EagerParamBase) pickle.dispatch_table.pop(EagerParamBase)
for k in dispatch_table_layer: for k in dispatch_table_layer:
...@@ -349,9 +344,7 @@ def _pickle_save(obj, f, protocol): ...@@ -349,9 +344,7 @@ def _pickle_save(obj, f, protocol):
pickler = pickle.Pickler(f, protocol) pickler = pickle.Pickler(f, protocol)
pickler.dispatch_table = copyreg.dispatch_table.copy() pickler.dispatch_table = copyreg.dispatch_table.copy()
pickler.dispatch_table[core.VarBase] = reduce_varbase
pickler.dispatch_table[core.LoDTensor] = reduce_LoDTensor pickler.dispatch_table[core.LoDTensor] = reduce_LoDTensor
pickler.dispatch_table[ParamBase] = reduce_varbase
pickler.dispatch_table[core.eager.Tensor] = reduce_varbase pickler.dispatch_table[core.eager.Tensor] = reduce_varbase
pickler.dispatch_table[EagerParamBase] = reduce_varbase pickler.dispatch_table[EagerParamBase] = reduce_varbase
pickler.dispatch_table.update(dispatch_table_layer) pickler.dispatch_table.update(dispatch_table_layer)
...@@ -390,24 +383,21 @@ def _is_state_dict(obj): ...@@ -390,24 +383,21 @@ def _is_state_dict(obj):
( (
paddle.nn.Layer, paddle.nn.Layer,
Program, Program,
core.VarBase,
core.eager.Tensor, core.eager.Tensor,
core.LoDTensor, core.LoDTensor,
core.SelectedRows, core.SelectedRows,
), ),
) )
# If the value of a dict is a core.VarBase/LoDTensor or a dict # If the value of a dict is a core.Tensor/LoDTensor or a dict
# that does not contain a paddle type(Layer, Program, VarBase, LoDTensor, SelectedRows), # that does not contain a paddle type(Layer, Program, Tensor, LoDTensor, SelectedRows),
# the dict is considered to be a state_ dict. # the dict is considered to be a state_ dict.
for key, value in obj.items(): for key, value in obj.items():
if isinstance(value, dict): if isinstance(value, dict):
for k, v in value.items(): for k, v in value.items():
if _contain_x(v, condition): if _contain_x(v, condition):
return False return False
elif not isinstance( elif not isinstance(value, (core.eager.Tensor, core.LoDTensor)):
value, (core.VarBase, core.eager.Tensor, core.LoDTensor)
):
return False return False
return True return True
...@@ -415,8 +405,8 @@ def _is_state_dict(obj): ...@@ -415,8 +405,8 @@ def _is_state_dict(obj):
def _transformed_from_varbase(obj): def _transformed_from_varbase(obj):
# In paddle2.1 version, VarBase is saved as tuple(tensor.name, tensor.numpy()). # In paddle2.1 version, Tensor is saved as tuple(tensor.name, tensor.numpy()).
# When executing paddle.load, use this function to determine whether to restore to VarBase/LoDTensor. # When executing paddle.load, use this function to determine whether to restore to Tensor/LoDTensor.
if isinstance(obj, tuple) and len(obj) == 2: if isinstance(obj, tuple) and len(obj) == 2:
name_types = str name_types = str
if isinstance(obj[0], name_types) and isinstance(obj[1], np.ndarray): if isinstance(obj[0], name_types) and isinstance(obj[1], np.ndarray):
...@@ -426,7 +416,7 @@ def _transformed_from_varbase(obj): ...@@ -426,7 +416,7 @@ def _transformed_from_varbase(obj):
def _transformed_from_lodtensor(obj): def _transformed_from_lodtensor(obj):
# In paddle2.1 version, LoDTensor is saved as np.array(tensor). # In paddle2.1 version, LoDTensor is saved as np.array(tensor).
# When executing paddle.load, use this function to determine whether to restore to VarBase/LoDTensor. # When executing paddle.load, use this function to determine whether to restore to Tensor/LoDTensor.
if isinstance(obj, np.ndarray): if isinstance(obj, np.ndarray):
return True return True
return False return False
...@@ -498,7 +488,7 @@ def _parse_every_object(obj, condition_func, convert_func): ...@@ -498,7 +488,7 @@ def _parse_every_object(obj, condition_func, convert_func):
else: else:
if isinstance(obj, Iterable) and not isinstance( if isinstance(obj, Iterable) and not isinstance(
obj, obj,
(str, np.ndarray, core.VarBase, core.eager.Tensor, core.LoDTensor), (str, np.ndarray, core.eager.Tensor, core.LoDTensor),
): ):
raise NotImplementedError( raise NotImplementedError(
"The iteratable objects supported are tuple, list, dict, OrderedDict, string. But received {}.".format( "The iteratable objects supported are tuple, list, dict, OrderedDict, string. But received {}.".format(
...@@ -642,7 +632,7 @@ def _save_binary_var(obj, path): ...@@ -642,7 +632,7 @@ def _save_binary_var(obj, path):
_save_lod_tensor(obj, path) _save_lod_tensor(obj, path)
elif isinstance(obj, core.SelectedRows): elif isinstance(obj, core.SelectedRows):
_save_selected_rows(obj, path) _save_selected_rows(obj, path)
elif isinstance(obj, (core.VarBase, core.eager.Tensor)): elif isinstance(obj, core.eager.Tensor):
_save_lod_tensor(obj.value().get_tensor(), path) _save_lod_tensor(obj.value().get_tensor(), path)
else: else:
# Since the concept of 'Tensor' is only exposed to users, the error message can only contain tensor instead of 'LoDTensor' or 'SelectedRows' # Since the concept of 'Tensor' is only exposed to users, the error message can only contain tensor instead of 'LoDTensor' or 'SelectedRows'
......
...@@ -180,7 +180,9 @@ def _load_program_scope(main=None, startup=None, scope=None): ...@@ -180,7 +180,9 @@ def _load_program_scope(main=None, startup=None, scope=None):
@static_only @static_only
def _legacy_static_save(param_dict, model_path, protocol=2): def _legacy_static_save(param_dict, model_path, protocol=2):
def get_tensor(var): def get_tensor(var):
if isinstance(var, (core.VarBase, core.eager.Tensor, core.LoDTensor)): if isinstance(var, core.eager.Tensor):
return np.array(var)
elif isinstance(var, core.LoDTensor):
return np.array(var) return np.array(var)
return var return var
......
...@@ -58,9 +58,9 @@ def to_list(value): ...@@ -58,9 +58,9 @@ def to_list(value):
def to_numpy(var): def to_numpy(var):
assert isinstance( assert isinstance(
var, (Variable, fluid.core.VarBase, fluid.core.eager.Tensor) var, (Variable, fluid.core.eager.Tensor)
), "not a variable" ), "not a variable"
if isinstance(var, (fluid.core.VarBase, fluid.core.eager.Tensor)): if isinstance(var, fluid.core.eager.Tensor):
return np.array(var) return np.array(var)
t = global_scope().find_var(var.name).get_tensor() t = global_scope().find_var(var.name).get_tensor()
return np.array(t) return np.array(t)
......
...@@ -261,7 +261,9 @@ def summary_string(model, input_size=None, dtypes=None, input=None): ...@@ -261,7 +261,9 @@ def summary_string(model, input_size=None, dtypes=None, input=None):
depth = len(list(model.sublayers())) depth = len(list(model.sublayers()))
def _get_shape_from_tensor(x): def _get_shape_from_tensor(x):
if isinstance(x, (paddle.fluid.Variable, paddle.fluid.core.VarBase)): if isinstance(
x, (paddle.fluid.Variable, paddle.fluid.core.eager.Tensor)
):
return list(x.shape) return list(x.shape)
elif isinstance(x, (list, tuple)): elif isinstance(x, (list, tuple)):
return [_get_shape_from_tensor(xx) for xx in x] return [_get_shape_from_tensor(xx) for xx in x]
......
...@@ -59,7 +59,6 @@ from paddle.nn import Layer ...@@ -59,7 +59,6 @@ from paddle.nn import Layer
from paddle.fluid.executor import Executor, scope_guard from paddle.fluid.executor import Executor, scope_guard
from paddle.fluid.framework import ( from paddle.fluid.framework import (
Block, Block,
ParamBase,
Program, Program,
Variable, Variable,
Parameter, Parameter,
...@@ -390,7 +389,7 @@ class _SaveLoadConfig: ...@@ -390,7 +389,7 @@ class _SaveLoadConfig:
% type(input) % type(input)
) )
for var in spec: for var in spec:
if not isinstance(var, core.VarBase): if not isinstance(var, core.eager.Tensor):
raise TypeError( raise TypeError(
"The element in config `output_spec` list should be 'Variable', but received element's type is %s." "The element in config `output_spec` list should be 'Variable', but received element's type is %s."
% type(var) % type(var)
...@@ -543,7 +542,7 @@ def _get_input_var_names(inputs, input_spec): ...@@ -543,7 +542,7 @@ def _get_input_var_names(inputs, input_spec):
# name is None, the input_spec only can be InputSpec # name is None, the input_spec only can be InputSpec
raise ValueError(name_none_error % spec) raise ValueError(name_none_error % spec)
elif spec.name not in input_var_names: elif spec.name not in input_var_names:
# the input_spec can be `InputSpec` or `VarBase` # the input_spec can be `InputSpec` or `Tensor`
raise ValueError(name_no_exists_error % spec.name) raise ValueError(name_no_exists_error % spec.name)
else: else:
result_list.append(spec.name) result_list.append(spec.name)
...@@ -973,7 +972,7 @@ def save(layer, path, input_spec=None, **configs): ...@@ -973,7 +972,7 @@ def save(layer, path, input_spec=None, **configs):
for var in paddle.utils.flatten(input_spec): for var in paddle.utils.flatten(input_spec):
if isinstance(var, paddle.static.InputSpec): if isinstance(var, paddle.static.InputSpec):
inner_input_spec.append(var) inner_input_spec.append(var)
elif isinstance(var, (core.VarBase, core.eager.Tensor, Variable)): elif isinstance(var, (core.eager.Tensor, Variable)):
inner_input_spec.append( inner_input_spec.append(
paddle.static.InputSpec.from_tensor(var) paddle.static.InputSpec.from_tensor(var)
) )
...@@ -1132,7 +1131,7 @@ def save(layer, path, input_spec=None, **configs): ...@@ -1132,7 +1131,7 @@ def save(layer, path, input_spec=None, **configs):
extra_info_dict[ extra_info_dict[
'stop_gradient' 'stop_gradient'
] = param_or_buffer.stop_gradient ] = param_or_buffer.stop_gradient
if isinstance(param_or_buffer, (ParamBase, EagerParamBase)): if isinstance(param_or_buffer, EagerParamBase):
extra_info_dict['trainable'] = param_or_buffer.trainable extra_info_dict['trainable'] = param_or_buffer.trainable
extra_var_info[param_or_buffer.name] = extra_info_dict extra_var_info[param_or_buffer.name] = extra_info_dict
...@@ -1151,7 +1150,7 @@ def save(layer, path, input_spec=None, **configs): ...@@ -1151,7 +1150,7 @@ def save(layer, path, input_spec=None, **configs):
# NOTE(chenweihang): [ Get output variables ] # NOTE(chenweihang): [ Get output variables ]
# the rule is like [ Get input variables name ]. For output var, # the rule is like [ Get input variables name ]. For output var,
# we only support VarBase spec, and actually, we only need the # we only support Tensor spec, and actually, we only need the
# var name of output, and we don't recommended to use output_spec # var name of output, and we don't recommended to use output_spec
# print(concrete_program.main_program) # print(concrete_program.main_program)
# print(concrete_program.outputs, configs.output_spec) # print(concrete_program.outputs, configs.output_spec)
......
...@@ -205,7 +205,7 @@ class ForNodeVisitor: ...@@ -205,7 +205,7 @@ class ForNodeVisitor:
In this process, the semantics of for does not change. In this process, the semantics of for does not change.
Now only can parse 3 type statements (Here var is VarBase(Tensor) or python variable): Now only can parse 3 type statements (Here var is Tensor(Tensor) or python variable):
1). for x in range(var[*]|var.numpy()[*]) 1). for x in range(var[*]|var.numpy()[*])
2). for x in var|var.numpy() 2). for x in var|var.numpy()
3). for i, x enumerate(var|var.numpy()) 3). for i, x enumerate(var|var.numpy())
......
...@@ -286,7 +286,7 @@ def _replace_value_with_input_spec(args): ...@@ -286,7 +286,7 @@ def _replace_value_with_input_spec(args):
if isinstance(input_var, np.ndarray): if isinstance(input_var, np.ndarray):
input_var = paddle.static.InputSpec.from_numpy(input_var) input_var = paddle.static.InputSpec.from_numpy(input_var)
input_var.stop_gradient = True input_var.stop_gradient = True
elif isinstance(input_var, (core.VarBase, core.eager.Tensor)): elif isinstance(input_var, core.eager.Tensor):
stop_gradient = input_var.stop_gradient stop_gradient = input_var.stop_gradient
input_var = paddle.static.InputSpec.from_tensor(input_var) input_var = paddle.static.InputSpec.from_tensor(input_var)
input_var.stop_gradient = stop_gradient input_var.stop_gradient = stop_gradient
...@@ -341,7 +341,7 @@ def convert_to_input_spec(inputs, input_spec): ...@@ -341,7 +341,7 @@ def convert_to_input_spec(inputs, input_spec):
# without specific InputSpec, raise warning. # without specific InputSpec, raise warning.
if len(inputs) > len(input_spec): if len(inputs) > len(input_spec):
for rest_input in inputs[len(input_spec) :]: for rest_input in inputs[len(input_spec) :]:
if isinstance(rest_input, (core.VarBase, np.ndarray)): if isinstance(rest_input, (core.eager.Tensor, np.ndarray)):
logging_utils.warn( logging_utils.warn(
"The inputs constain `{}` without specificing InputSpec, its shape and dtype will be treated immutable. " "The inputs constain `{}` without specificing InputSpec, its shape and dtype will be treated immutable. "
"Please specific InputSpec information in `@to_static` if you expect them as mutable inputs.".format( "Please specific InputSpec information in `@to_static` if you expect them as mutable inputs.".format(
......
...@@ -59,9 +59,7 @@ class NestSequence: ...@@ -59,9 +59,7 @@ class NestSequence:
def _get_var_ids(self): def _get_var_ids(self):
var_ids = [] var_ids = []
for idx, var in enumerate(self.__input_list): for idx, var in enumerate(self.__input_list):
if isinstance( if isinstance(var, (framework.Variable, core.eager.Tensor)):
var, (framework.Variable, core.VarBase, core.eager.Tensor)
):
var_ids.append(idx) var_ids.append(idx)
return var_ids return var_ids
...@@ -73,9 +71,7 @@ class NestSequence: ...@@ -73,9 +71,7 @@ class NestSequence:
if need_check: if need_check:
warning_types = set() warning_types = set()
for var in self.__input_list: for var in self.__input_list:
if not isinstance( if not isinstance(var, (framework.Variable, core.eager.Tensor)):
var, (framework.Variable, core.VarBase, core.eager.Tensor)
):
warning_types.add(type(var)) warning_types.add(type(var))
if warning_types: if warning_types:
logging_utils.warn( logging_utils.warn(
...@@ -161,7 +157,7 @@ class PartialProgramLayer: ...@@ -161,7 +157,7 @@ class PartialProgramLayer:
main_program(Program): The main program that contains ops need to be executed. main_program(Program): The main program that contains ops need to be executed.
inputs(list[Variable]): The input list of the decorated function by `@to_static`. inputs(list[Variable]): The input list of the decorated function by `@to_static`.
outputs(list[Variable]): The output list of the decorated function by `@to_static`. outputs(list[Variable]): The output list of the decorated function by `@to_static`.
parameters(list[VarBase]|None): All trainable parameters included in the program. Default None. parameters(list[Tensor]|None): All trainable parameters included in the program. Default None.
Returns: Returns:
Layer: A Layer object that run all ops internally in static graph mode. Layer: A Layer object that run all ops internally in static graph mode.
...@@ -669,22 +665,13 @@ class PartialProgramLayer: ...@@ -669,22 +665,13 @@ class PartialProgramLayer:
if "@GRAD" in name: if "@GRAD" in name:
var_desc = block.vars[name].desc var_desc = block.vars[name].desc
var_base = None var_base = None
if not framework.global_var._in_eager_mode_: var_base = core.eager.Tensor(
var_base = core.VarBase( var_desc.dtype(),
var_desc.dtype(), var_desc.shape(),
var_desc.shape(), var_desc.name(),
var_desc.name(), var_desc.type(),
var_desc.type(), False,
False, )
)
else:
var_base = core.eager.Tensor(
var_desc.dtype(),
var_desc.shape(),
var_desc.name(),
var_desc.type(),
False,
)
double_grads.append(var_base) double_grads.append(var_base)
return self._valid_vars(double_grads) return self._valid_vars(double_grads)
...@@ -866,29 +853,20 @@ class PartialProgramLayer: ...@@ -866,29 +853,20 @@ class PartialProgramLayer:
assert isinstance(inputs, (tuple, list)) assert isinstance(inputs, (tuple, list))
# Flatten inputs with nested structure into single list. # Flatten inputs with nested structure into single list.
flatten_inputs = paddle.utils.flatten(inputs) flatten_inputs = paddle.utils.flatten(inputs)
# Convert variable into VarBase and feed in training data. # Convert variable into Tensor and feed in training data.
input_vars = [] input_vars = []
expected_place = framework._current_expected_place() expected_place = framework._current_expected_place()
for i, value in enumerate(flatten_inputs): for i, value in enumerate(flatten_inputs):
if isinstance(value, np.ndarray): if isinstance(value, np.ndarray):
var = None var = None
if not framework.global_var._in_eager_mode_: var = core.eager.Tensor(
var = core.VarBase( value=value,
value=value, name=self._inputs[i].desc.name(),
name=self._inputs[i].desc.name(), persistable=False,
persistable=False, place=expected_place,
place=expected_place, zero_copy=True,
zero_copy=True, )
) elif isinstance(value, core.eager.Tensor):
else:
var = core.eager.Tensor(
value=value,
name=self._inputs[i].desc.name(),
persistable=False,
place=expected_place,
zero_copy=True,
)
elif isinstance(value, (core.VarBase, core.eager.Tensor)):
# NOTE(Aurelius84): If var is on CPUPlace, it will be transformed multi times # NOTE(Aurelius84): If var is on CPUPlace, it will be transformed multi times
# into CUDAPlace when it's as input of multi Ops. so we move it in advance # into CUDAPlace when it's as input of multi Ops. so we move it in advance
# to avoid this problem. # to avoid this problem.
...@@ -904,7 +882,7 @@ class PartialProgramLayer: ...@@ -904,7 +882,7 @@ class PartialProgramLayer:
continue continue
input_vars.append(var) input_vars.append(var)
# mapping from name(string) -> VarBase # mapping from name(string) -> Tensor
out_varbase_map = {} out_varbase_map = {}
def create_out(var_id): def create_out(var_id):
...@@ -916,27 +894,18 @@ class PartialProgramLayer: ...@@ -916,27 +894,18 @@ class PartialProgramLayer:
if var_desc.name() in out_varbase_map: if var_desc.name() in out_varbase_map:
return out_varbase_map[var_desc.name()] return out_varbase_map[var_desc.name()]
if not framework.global_var._in_eager_mode_: var_base = core.eager.Tensor(
var_base = core.VarBase( var_desc.dtype(),
var_desc.dtype(), var_desc.shape(),
var_desc.shape(), var_desc.name(),
var_desc.name(), var_desc.type(),
var_desc.type(), False,
False, )
)
else:
var_base = core.eager.Tensor(
var_desc.dtype(),
var_desc.shape(),
var_desc.name(),
var_desc.type(),
False,
)
var_base.stop_gradient = var.stop_gradient var_base.stop_gradient = var.stop_gradient
out_varbase_map[var_desc.name()] = var_base out_varbase_map[var_desc.name()] = var_base
return var_base return var_base
# Create VarBase to receive output data. # Create Tensor to receive output data.
out_vars = list(map(create_out, self._outputs.var_ids)) out_vars = list(map(create_out, self._outputs.var_ids))
return input_vars, out_vars return input_vars, out_vars
...@@ -947,21 +916,11 @@ class PartialProgramLayer: ...@@ -947,21 +916,11 @@ class PartialProgramLayer:
inner_scope = self._get_scope( inner_scope = self._get_scope(
program_id=program_id, use_scope_cache=use_scope_cache program_id=program_id, use_scope_cache=use_scope_cache
) )
if not framework.global_var._in_eager_mode_: tmp_scope_vec = [inner_scope]
tmp_scope_vec = core.VarBase(
core.VarDesc.VarType.FP32,
[],
"program_out_scope",
core.VarDesc.VarType.STEP_SCOPES,
True,
)
tmp_scope_vec.value().set_scope(inner_scope)
else:
tmp_scope_vec = [inner_scope]
return tmp_scope_vec return tmp_scope_vec
def _create_cuda_graph_vec(self): def _create_cuda_graph_vec(self):
var = core.VarBase( var = core.eager.Tensor(
core.VarDesc.VarType.FP32, core.VarDesc.VarType.FP32,
[], [],
"cuda_graph", "cuda_graph",
...@@ -973,7 +932,7 @@ class PartialProgramLayer: ...@@ -973,7 +932,7 @@ class PartialProgramLayer:
def _restore_out(self, out_vars): def _restore_out(self, out_vars):
""" """
Restores same nested outputs by only replacing the Variable with VarBase. Restores same nested outputs by only replacing the Variable with Tensor.
""" """
flatten_outputs = self._outputs.tolist() flatten_outputs = self._outputs.tolist()
...@@ -990,9 +949,7 @@ class PartialProgramLayer: ...@@ -990,9 +949,7 @@ class PartialProgramLayer:
return main_program.clone(for_test=True) return main_program.clone(for_test=True)
def _is_no_value(self, var): def _is_no_value(self, var):
if isinstance(var, (core.VarBase, core.eager.Tensor)) and var.shape == [ if isinstance(var, core.eager.Tensor) and var.shape == [1]:
1
]:
# NOTE: .numpy() will insert MemcpySync operation, it hits performance. # NOTE: .numpy() will insert MemcpySync operation, it hits performance.
if var.numpy()[0] == RETURN_NO_VALUE_MAGIC_NUM: if var.numpy()[0] == RETURN_NO_VALUE_MAGIC_NUM:
return True return True
...@@ -1002,7 +959,7 @@ class PartialProgramLayer: ...@@ -1002,7 +959,7 @@ class PartialProgramLayer:
""" """
Removes invalid value for various-length return statement Removes invalid value for various-length return statement
""" """
if isinstance(out_vars, (core.VarBase, core.eager.Tensor)): if isinstance(out_vars, core.eager.Tensor):
if self._is_no_value(out_vars): if self._is_no_value(out_vars):
return None return None
return out_vars return out_vars
...@@ -1029,7 +986,7 @@ class PartialProgramLayer: ...@@ -1029,7 +986,7 @@ class PartialProgramLayer:
def _set_grad_type(self, params, train_program): def _set_grad_type(self, params, train_program):
# NOTE: if user set sparse gradient mode, the param's gradient # NOTE: if user set sparse gradient mode, the param's gradient
# will be SelectedRows, not LoDTensor. But tracer will just # will be SelectedRows, not LoDTensor. But tracer will just
# set param grad VarBase by forward VarBase(LoDTensor) # set param grad Tensor by forward Tensor(LoDTensor)
# If we don't change grad_var type here, RunProgramOp need # If we don't change grad_var type here, RunProgramOp need
# transform SelectedRows to LoDTensor forcibly, it may not # transform SelectedRows to LoDTensor forcibly, it may not
# be user wanted result. # be user wanted result.
...@@ -1057,9 +1014,9 @@ class PartialProgramLayer: ...@@ -1057,9 +1014,9 @@ class PartialProgramLayer:
def _check_params_all_inited(self, main_program): def _check_params_all_inited(self, main_program):
""" """
Check all params from main program are already initialized, see details as follows: Check all params from main program are already initialized, see details as follows:
1. all parameters in self._params should be type `framework.ParamBase` which are created in dygraph. 1. all parameters in self._params should be type `framework.EagerParamBase` which are created in dygraph.
2. all parameters from transformed program can be found in self._params. 2. all parameters from transformed program can be found in self._params.
Because they share same data with ParamBase of original dygraph. Because they share same data with EagerParamBase of original dygraph.
""" """
if not isinstance(self._params, (list, tuple)): if not isinstance(self._params, (list, tuple)):
raise TypeError( raise TypeError(
...@@ -1070,7 +1027,7 @@ class PartialProgramLayer: ...@@ -1070,7 +1027,7 @@ class PartialProgramLayer:
param_and_buffer_names_set = set() param_and_buffer_names_set = set()
for i, var in enumerate(self._params): for i, var in enumerate(self._params):
# self._params constains parameters and buffers with persistable=True. # self._params constains parameters and buffers with persistable=True.
if not isinstance(var, (core.VarBase, core.eager.Tensor)): if not isinstance(var, core.eager.Tensor):
raise TypeError( raise TypeError(
'Type of self._params[{}] in PartialProgramLayer should be Parameter or Variable, but received {}.'.format( 'Type of self._params[{}] in PartialProgramLayer should be Parameter or Variable, but received {}.'.format(
i, type(var) i, type(var)
......
...@@ -648,22 +648,13 @@ def _load_persistable_vars_by_program( ...@@ -648,22 +648,13 @@ def _load_persistable_vars_by_program(
orig_each_name = program_holder._suffix_varname_dict[each_var.name()] orig_each_name = program_holder._suffix_varname_dict[each_var.name()]
if _is_parameter(each_var, program_holder.infer_program): if _is_parameter(each_var, program_holder.infer_program):
# create output varbase # create output varbase
if framework._in_eager_without_dygraph_check(): new_var = framework.EagerParamBase(
new_var = framework.EagerParamBase( shape=each_var.shape(),
shape=each_var.shape(), dtype=each_var.dtype(),
dtype=each_var.dtype(), name=each_var.name(),
name=each_var.name(), type=each_var.type(),
type=each_var.type(), persistable=True,
persistable=True, )
)
else:
new_var = framework.ParamBase(
shape=each_var.shape(),
dtype=each_var.dtype(),
name=each_var.name(),
type=each_var.type(),
persistable=True,
)
else: else:
new_var = framework._varbase_creator( new_var = framework._varbase_creator(
type=each_var.type(), type=each_var.type(),
...@@ -746,24 +737,12 @@ def _load_persistable_vars( ...@@ -746,24 +737,12 @@ def _load_persistable_vars(
# create output varbase # create output varbase
if extra_var_info[name].get('trainable', None) is not None: if extra_var_info[name].get('trainable', None) is not None:
# use default shape and dtype # use default shape and dtype
if framework._in_eager_without_dygraph_check(): new_var = framework.EagerParamBase(
new_var = framework.EagerParamBase( shape=[1], # only to pass check, this shape is not meaningful
shape=[ dtype=core.VarDesc.VarType.FP32,
1 name=new_name,
], # only to pass check, this shape is not meaningful persistable=True,
dtype=core.VarDesc.VarType.FP32, )
name=new_name,
persistable=True,
)
else:
new_var = framework.ParamBase(
shape=[
1
], # only to pass check, this shape is not meaningful
dtype=core.VarDesc.VarType.FP32,
name=new_name,
persistable=True,
)
else: else:
new_var = framework._varbase_creator( new_var = framework._varbase_creator(
name=new_name, persistable=True name=new_name, persistable=True
...@@ -901,29 +880,20 @@ def _run_dygraph(instance, input, program_holder): ...@@ -901,29 +880,20 @@ def _run_dygraph(instance, input, program_holder):
# 1. prepare inputs, outputs, attrs # 1. prepare inputs, outputs, attrs
input_vars = [] input_vars = []
for i, value in enumerate(input): for i, value in enumerate(input):
if not isinstance(value, (np.ndarray, core.VarBase, core.eager.Tensor)): if not isinstance(value, (np.ndarray, core.eager.Tensor)):
raise TypeError( raise TypeError(
"The type of input in TranslatedLayer must be numpy array or Variable(VarBase), but received %s." "The type of input in TranslatedLayer must be numpy array or Variable(Tensor), but received %s."
% type(value) % type(value)
) )
# NOTE: In order to unify the API, firstly convert the input to VarBase # NOTE: In order to unify the API, firstly convert the input to Tensor
if isinstance(value, np.ndarray): if isinstance(value, np.ndarray):
if framework._in_eager_without_dygraph_check(): var = core.eager.Tensor(
var = core.eager.Tensor( value=value,
value=value, name=program_holder.input_descs[i].name(),
name=program_holder.input_descs[i].name(), persistable=False,
persistable=False, place=framework._current_expected_place(),
place=framework._current_expected_place(), zero_copy=True,
zero_copy=True, )
)
else:
var = core.VarBase(
value=value,
name=program_holder.input_descs[i].name(),
persistable=False,
place=framework._current_expected_place(),
zero_copy=True,
)
else: else:
var = value var = value
# NOTE: we changed var name here, # NOTE: we changed var name here,
...@@ -950,55 +920,27 @@ def _run_dygraph(instance, input, program_holder): ...@@ -950,55 +920,27 @@ def _run_dygraph(instance, input, program_holder):
output_vars = [] output_vars = []
for var_desc in program_holder.output_descs: for var_desc in program_holder.output_descs:
if framework._in_eager_without_dygraph_check(): var = core.eager.Tensor(
var = core.eager.Tensor( dtype=var_desc.dtype(),
dtype=var_desc.dtype(), dims=var_desc.shape(),
dims=var_desc.shape(), name=var_desc.name(),
name=var_desc.name(), type=var_desc.type(),
type=var_desc.type(), persistable=False,
persistable=False, )
)
else:
var = core.VarBase(
var_desc.dtype(),
var_desc.shape(),
var_desc.name(),
var_desc.type(),
False,
)
output_vars.append(var) output_vars.append(var)
# hold forward variables # hold forward variables
if framework._in_eager_without_dygraph_check(): tmp_scope_vec = [program_holder.scope]
tmp_scope_vec = [program_holder.scope]
else:
tmp_scope_vec = core.VarBase(
core.VarDesc.VarType.FP32,
[],
"program_out_scope",
core.VarDesc.VarType.STEP_SCOPES,
True,
)
tmp_scope_vec.value().set_scope(program_holder.scope)
double_grad_vars = [] double_grad_vars = []
for var_desc in program_holder.double_grad_descs: for var_desc in program_holder.double_grad_descs:
if framework._in_eager_without_dygraph_check(): var = core.eager.Tensor(
var = core.eager.Tensor( dtype=var_desc.dtype(),
dtype=var_desc.dtype(), dims=var_desc.shape(),
dims=var_desc.shape(), name=var_desc.name(),
name=var_desc.name(), type=var_desc.type(),
type=var_desc.type(), persistable=False,
persistable=False, )
)
else:
var = core.VarBase(
var_desc.dtype(),
var_desc.shape(),
var_desc.name(),
var_desc.type(),
False,
)
double_grad_vars.append(var) double_grad_vars.append(var)
# 2. run program by op # 2. run program by op
...@@ -1064,7 +1006,7 @@ def _run_dygraph(instance, input, program_holder): ...@@ -1064,7 +1006,7 @@ def _run_dygraph(instance, input, program_holder):
# NOTE: [ why need set param's gradient type here ] # NOTE: [ why need set param's gradient type here ]
# if user set sparse gradient mode, the param's gradient # if user set sparse gradient mode, the param's gradient
# will be SelectedRows, not LoDTensor. But tracer will just # will be SelectedRows, not LoDTensor. But tracer will just
# set param grad VarBase by forward VarBase(LoDTensor) # set param grad Tensor by forward Tensor(LoDTensor)
# If we don't change grad_var type here, RunProgramOp need # If we don't change grad_var type here, RunProgramOp need
# transform SelectedRows to LoDTensor forcibly, it may not # transform SelectedRows to LoDTensor forcibly, it may not
# be user wanted result. # be user wanted result.
...@@ -1454,20 +1396,18 @@ class TranslatedLayer(layers.Layer): ...@@ -1454,20 +1396,18 @@ class TranslatedLayer(layers.Layer):
# When add parameter or buffer to Layer by follow apis, # When add parameter or buffer to Layer by follow apis,
# the variable name can't contain `.`, beccause which may cause # the variable name can't contain `.`, beccause which may cause
# AttributeError when access the newly added parameter or buffer # AttributeError when access the newly added parameter or buffer
# in the form of `self.**.**``, but the ParamBase or BarBase # in the form of `self.**.**``, but the EagerParamBase or BarBase
# name contains `.` originally, such as `linear_0.w_0`, so here # name contains `.` originally, such as `linear_0.w_0`, so here
# need to generate new var name for each var # need to generate new var name for each var
self._persistable_var_name_dict = {} self._persistable_var_name_dict = {}
# the TranslatedLayer object holded var names count started from 0 # the TranslatedLayer object holded var names count started from 0
with unique_name.guard(): with unique_name.guard():
for name, var in persistable_vars.items(): for name, var in persistable_vars.items():
if isinstance( if isinstance(var, framework.EagerParamBase):
var, (framework.ParamBase, framework.EagerParamBase)
):
dy_name = _generate_unique_var_name(PARAMETER_NAME_PREFIX) dy_name = _generate_unique_var_name(PARAMETER_NAME_PREFIX)
self._persistable_var_name_dict[name] = dy_name self._persistable_var_name_dict[name] = dy_name
self.add_parameter(dy_name, var) self.add_parameter(dy_name, var)
elif isinstance(var, (core.VarBase, core.eager.Tensor)): elif isinstance(var, core.eager.Tensor):
dy_name = _generate_unique_var_name(BUFFER_NAME_PREFIX) dy_name = _generate_unique_var_name(BUFFER_NAME_PREFIX)
self._persistable_var_name_dict[name] = dy_name self._persistable_var_name_dict[name] = dy_name
self.register_buffer(dy_name, var) self.register_buffer(dy_name, var)
......
此差异已折叠。
...@@ -383,7 +383,7 @@ class Optimizer: ...@@ -383,7 +383,7 @@ class Optimizer:
if isinstance(load_para, Variable): if isinstance(load_para, Variable):
load_para_np = np.array(load_para) load_para_np = np.array(load_para)
elif isinstance(load_para, core.VarBase): elif isinstance(load_para, core.eager.Tensor):
load_para_np = np.array(load_para) load_para_np = np.array(load_para)
elif isinstance(load_para, np.ndarray): elif isinstance(load_para, np.ndarray):
load_para_np = load_para load_para_np = load_para
......
...@@ -195,7 +195,7 @@ class InputSpec: ...@@ -195,7 +195,7 @@ class InputSpec:
print(x_spec) # InputSpec(shape=(2, 2), dtype=paddle.float32, name=x) print(x_spec) # InputSpec(shape=(2, 2), dtype=paddle.float32, name=x)
""" """
if isinstance(tensor, (Variable, core.VarBase, core.eager.Tensor)): if isinstance(tensor, (Variable, core.eager.Tensor)):
return cls(tensor.shape, tensor.dtype, name or tensor.name) return cls(tensor.shape, tensor.dtype, name or tensor.name)
else: else:
raise ValueError( raise ValueError(
......
...@@ -368,7 +368,7 @@ def assign_skip_lod_tensor_array(input, output): ...@@ -368,7 +368,7 @@ def assign_skip_lod_tensor_array(input, output):
return True return True
return False return False
if not isinstance(input, (Variable, core.VarBase)): if not isinstance(input, (Variable, core.eager.Tensor)):
if isinstance(output, Variable) and isinstance( if isinstance(output, Variable) and isinstance(
input, support_ret_buildin_type input, support_ret_buildin_type
): ):
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册