提交 dc13bfca authored 作者: Frédéric Bastien's avatar Frédéric Bastien

Merge pull request #3339 from nouiz/davikrehalt-master

[CRASH] fix crash on Raspberry Pi 1
...@@ -541,22 +541,35 @@ import theano and print the config variable, as in: ...@@ -541,22 +541,35 @@ import theano and print the config variable, as in:
.. attribute:: config.dnn.conv.workmem .. attribute:: config.dnn.conv.workmem
String value: 'none', 'small', 'large' Deprecated, use dnn.conv.algo_fwd.
Default: 'small'
The default value for the amount of working memory that is .. attribute:: config.dnn.conv.workmem_bwd
tolerated in the convolution implementation in cudnn.
'none' Deprecated, use dnn.conv.algo_bwd.
Don't allow any extra memory.
'small' .. attribute:: config.dnn.conv.algo_fwd
Allow extra memory that is much smaller than the input sizes.
'large' String value: ``small``, ``none``, ``large``, ``fft``, ``guess_once``,
Allow extra memory that is on the order of the input sizes. ``guess_on_shape_change``, ``time_once``,
``time_on_shape_change``.
Default: ``small``
3d convolution only support ``none``, ``guess_once``,
``guess_on_shape_change``, ``time_once``, ``time_on_shape_change``.
.. attribute:: config.dnn.conv.algo_bwd
String value: ``none``, ``deterministic``, ``fft``, ``guess_once``,
``guess_on_shape_change``, ``time_once``,
``time_on_shape_change``.
Default: ``none``
3d convolution only support ``none``, ``guess_once``,
``guess_on_shape_change``, ``time_once``, ``time_on_shape_change``.
.. attribute:: config.gcc.cxxflags .. attribute:: config.gcc.cxxflags
......
...@@ -2003,7 +2003,8 @@ class GCC_compiler(Compiler): ...@@ -2003,7 +2003,8 @@ class GCC_compiler(Compiler):
# or 64 bit and compile accordingly. This step is ignored for ARM # or 64 bit and compile accordingly. This step is ignored for ARM
# architectures in order to make Theano compatible with the Raspberry # architectures in order to make Theano compatible with the Raspberry
# Pi, and Raspberry Pi 2. # Pi, and Raspberry Pi 2.
if not any(['arm' in flag for flag in cxxflags]) and platform.machine() != 'armv7l': if (not any(['arm' in flag for flag in cxxflags]) and
'arm' not in platform.machine()):
n_bits = local_bitwidth() n_bits = local_bitwidth()
cxxflags.append('-m%d' % n_bits) cxxflags.append('-m%d' % n_bits)
_logger.debug("Compiling for %s bit architecture", n_bits) _logger.debug("Compiling for %s bit architecture", n_bits)
...@@ -2116,8 +2117,9 @@ class GCC_compiler(Compiler): ...@@ -2116,8 +2117,9 @@ class GCC_compiler(Compiler):
cppfile.write('\n') cppfile.write('\n')
cppfile.close() cppfile.close()
lib_filename = os.path.join(location, '%s.%s' % lib_filename = os.path.join(
(module_name, get_lib_extension())) location,
'%s.%s' % (module_name, get_lib_extension()))
_logger.debug('Generating shared lib %s', lib_filename) _logger.debug('Generating shared lib %s', lib_filename)
cmd = [theano.config.cxx, get_gcc_shared_library_arg(), '-g'] cmd = [theano.config.cxx, get_gcc_shared_library_arg(), '-g']
......
...@@ -767,11 +767,9 @@ def pydotprint(fct, outfile=None, ...@@ -767,11 +767,9 @@ def pydotprint(fct, outfile=None,
varstr = '%s %s' % (dstr, str(var.type)) varstr = '%s %s' % (dstr, str(var.type))
elif (var in input_update and elif (var in input_update and
input_update[var].name is not None): input_update[var].name is not None):
if var_with_name_simple: varstr = input_update[var].name
varstr = input_update[var].variable.name if not var_with_name_simple:
else: varstr += str(var.type)
varstr = (input_update[var].variable.name +
str(var.type))
else: else:
# a var id is needed as otherwise var with the same type will be # a var id is needed as otherwise var with the same type will be
# merged in the graph. # merged in the graph.
......
...@@ -423,8 +423,12 @@ class GpuDnnConv(DnnBase, COp): ...@@ -423,8 +423,12 @@ class GpuDnnConv(DnnBase, COp):
descr descr
The convolution descriptor. The convolution descriptor.
workmem workmem
*deprecated*, use parameter algo instead. *deprecated*, use parameter algo instead.
algo : {'small', 'none', 'large', 'fft', 'guess_once', 'guess_on_shape_change', 'time_once', 'time_on_shape_change'} algo
['none', 'small', 'large', 'fft', 'guess_once',
'guess_on_shape_change', 'time_once',
'time_on_shape_change']
Default is the value of :attr:`config.dnn.conv.algo_fwd`. Default is the value of :attr:`config.dnn.conv.algo_fwd`.
""" """
...@@ -607,18 +611,17 @@ class GpuDnnConv3d(GpuDnnConv): ...@@ -607,18 +611,17 @@ class GpuDnnConv3d(GpuDnnConv):
:param image: :param image:
:param kernel: :param kernel:
:param descr: the convolution descriptor :param descr: the convolution descriptor
:param workmem:
*deprecated*, use parameter algo instead.
:param algo: ['none', 'guess_once', 'guess_on_shape_change',
'time_once', 'time_on_shape_change']
Default is the value of :attr:`config.dnn.conv.algo_fwd.
""" """
__props__ = ('algo', 'inplace') __props__ = ('algo', 'inplace')
__input_name__ = ('image', 'kernel', 'output', __input_name__ = ('image', 'kernel', 'output',
'descriptor', 'alpha', 'beta') 'descriptor', 'alpha', 'beta')
def __init__(self, workmem=None, inplace=False, algo=None): def __init__(self, workmem=None, inplace=False, algo=None):
"""
:param workmem: *deprecated*, use param algo instead
:param algo: either 'none', 'guess_once', 'guess_on_shape_change',
'time_once' or 'time_on_shape_change'.
Default is the value of :attr:`config.dnn.conv.algo_fwd.
"""
if workmem is not None: if workmem is not None:
warnings.warn(("GpuDnnConv3d: parameter 'workmem' is deprecated. " warnings.warn(("GpuDnnConv3d: parameter 'workmem' is deprecated. "
"Use 'algo' instead."), stacklevel=3) "Use 'algo' instead."), stacklevel=3)
...@@ -712,6 +715,14 @@ class GpuDnnConvGradW(DnnBase, COp): ...@@ -712,6 +715,14 @@ class GpuDnnConvGradW(DnnBase, COp):
kernel kernel
descr descr
The convolution descriptor. The convolution descriptor.
workmem
*deprecated*, use parameter algo instead.
algo
['none', 'deterministic', 'fft', 'guess_once',
'guess_on_shape_change', 'time_once',
'time_on_shape_change']
Default is the value of :attr:`config.dnn.conv.algo_bwd`.
""" """
...@@ -719,12 +730,6 @@ class GpuDnnConvGradW(DnnBase, COp): ...@@ -719,12 +730,6 @@ class GpuDnnConvGradW(DnnBase, COp):
__input_name__ = ('image', 'grad', 'output', 'descriptor', 'alpha', 'beta') __input_name__ = ('image', 'grad', 'output', 'descriptor', 'alpha', 'beta')
def __init__(self, inplace=False, workmem=None, algo=None): def __init__(self, inplace=False, workmem=None, algo=None):
"""
:param workmem: *deprecated*, use param algo instead
:param algo: either 'none', 'deterministic', 'fft', 'guess_once',
'guess_on_shape_change', 'time_once' or 'time_on_shape_change'.
Default is the value of :attr:`config.dnn.conv.algo_bwd`.
"""
COp.__init__(self, ["dnn_base.c", "dnn_conv_base.c", "dnn_gw.c"], COp.__init__(self, ["dnn_base.c", "dnn_conv_base.c", "dnn_gw.c"],
"APPLY_SPECIFIC(conv_gw)") "APPLY_SPECIFIC(conv_gw)")
...@@ -849,18 +854,17 @@ class GpuDnnConv3dGradW(GpuDnnConvGradW): ...@@ -849,18 +854,17 @@ class GpuDnnConv3dGradW(GpuDnnConvGradW):
:param image: :param image:
:param kernel: :param kernel:
:param descr: the convolution descriptor :param descr: the convolution descriptor
:param workmem:
*deprecated*, use parameter algo instead.
:param algo: ['none', 'guess_once', 'guess_on_shape_change',
'time_once', 'time_on_shape_change']
Default is the value of :attr:`config.dnn.conv.algo_bwd`.
""" """
__props__ = ('algo', 'inplace',) __props__ = ('algo', 'inplace',)
__input_name__ = ('image', 'grad', 'output', 'descriptor', 'alpha', 'beta') __input_name__ = ('image', 'grad', 'output', 'descriptor', 'alpha', 'beta')
def __init__(self, inplace=False, workmem=None, algo=None): def __init__(self, inplace=False, workmem=None, algo=None):
"""
:param workmem: *deprecated*, use param algo instead
:param algo: either 'none', 'guess_once', 'guess_on_shape_change',
'time_once' or 'time_on_shape_change'.
Default is the value of :attr:`config.dnn.conv.algo_bwd.
"""
if workmem is not None: if workmem is not None:
warnings.warn(("GpuDnnConv3dGradW: parameter 'workmem' is " warnings.warn(("GpuDnnConv3dGradW: parameter 'workmem' is "
"deprecated. Use 'algo' instead."), stacklevel=3) "deprecated. Use 'algo' instead."), stacklevel=3)
...@@ -920,8 +924,12 @@ class GpuDnnConvGradI(DnnBase, COp): ...@@ -920,8 +924,12 @@ class GpuDnnConvGradI(DnnBase, COp):
descr descr
The convolution descriptor. The convolution descriptor.
workmem workmem
*deprecated*, use parameter algo instead. *deprecated*, use parameter algo instead.
algo : {'none', 'deterministic', 'fft', 'guess_once', 'guess_on_shape_change', 'time_once', 'time_on_shape_change'} algo
['none', 'deterministic', 'fft', 'guess_once',
'guess_on_shape_change', 'time_once',
'time_on_shape_change']
Default is the value of :attr:`config.dnn.conv.algo_bwd`. Default is the value of :attr:`config.dnn.conv.algo_bwd`.
""" """
...@@ -1055,6 +1063,12 @@ class GpuDnnConv3dGradI(GpuDnnConvGradI): ...@@ -1055,6 +1063,12 @@ class GpuDnnConv3dGradI(GpuDnnConvGradI):
:param image: :param image:
:param kernel: :param kernel:
:param descr: the convolution descriptor :param descr: the convolution descriptor
:param workmem:
*deprecated*, use parameter algo instead.
:param algo: ['none', 'guess_once', 'guess_on_shape_change',
'time_once', 'time_on_shape_change']
Default is the value of :attr:`config.dnn.conv.algo_bwd`.
""" """
__props__ = ('algo', 'inplace',) __props__ = ('algo', 'inplace',)
...@@ -1062,12 +1076,6 @@ class GpuDnnConv3dGradI(GpuDnnConvGradI): ...@@ -1062,12 +1076,6 @@ class GpuDnnConv3dGradI(GpuDnnConvGradI):
'beta') 'beta')
def __init__(self, inplace=False, workmem=None, algo=None): def __init__(self, inplace=False, workmem=None, algo=None):
"""
:param workmem: *deprecated*, use param algo instead
:param algo: either 'none', 'guess_once', 'guess_on_shape_change',
'time_once' or 'time_on_shape_change'.
Default is the value of :attr:`config.dnn.conv.algo_bwd.
"""
if workmem is not None: if workmem is not None:
warnings.warn(("GpuDnnConv3dGradI: parameter 'workmem' is " warnings.warn(("GpuDnnConv3dGradI: parameter 'workmem' is "
"deprecated. Use 'algo' instead."), stacklevel=3) "deprecated. Use 'algo' instead."), stacklevel=3)
......
...@@ -5300,7 +5300,7 @@ def _tensordot_as_dot(a, b, axes, dot, batched): ...@@ -5300,7 +5300,7 @@ def _tensordot_as_dot(a, b, axes, dot, batched):
if not numpy.isscalar(axes) and len(axes) != 2: if not numpy.isscalar(axes) and len(axes) != 2:
raise ValueError('Axes should be an integer or a ' raise ValueError('Axes should be an integer or a '
'list/tuple of len 2 (%s was provided)' 'list/tuple of len 2 (%s was provided)'
% repr(axes)) % str(axes))
# if 'axes' is a number of axes to multiply and sum over (trailing axes # if 'axes' is a number of axes to multiply and sum over (trailing axes
# of a, leading axes of b), we can just reshape and use dot. # of a, leading axes of b), we can just reshape and use dot.
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论