FYI, I created an issue to improve the error messages
https://github.com/Theano/Theano/issues/6167
On Tuesday, July 18, 2017 at 12:18:53 PM UTC-7, Jesse Livezey wrote:
>
> The conv2d operation doesn't support int64 (th_sampled) and it looks like
> it doesn't fail gracefully with a sensible error message when the GpuCorrMM
> op is used.
>
> If you cast th_sampled to float32 it should work fine. You'll also need to
> cast kernel.
>
> On Tuesday, July 18, 2017 at 2:07:36 AM UTC-7, David Anderson wrote:
>>
>> Hi there!
>>
>> I'm implementing a convolutional operation and I'm getting an unexpected
>> error when I try perform a convolution on a Binomial sampled tensor.
>>
>> The error is:
>> RuntimeError: GpuCorrMM forward encountered an error running gemm: 5
>>
>> The error can be re-created with the following code (At least on my
>> machine it can):
>>
>> import numpy as np
>> import theano as th
>> from theano import tensor as T
>> from theano.tensor.shared_randomstreams import RandomStreams
>>
>> rng = np.random.RandomState()
>> theano_rng = RandomStreams(rng.randint(2 ** 30))
>>
>> th_input = T.tensor4()
>> th_filter = T.tensor4()
>>
>> th_sampled = theano_rng.binomial(size=th_input.shape, n=1, p=th_input)
>> th_output = T.nnet.conv2d(th_sampled, th_filter)
>>
>> op = th.function(
>> inputs=[th_input, th_filter],
>> outputs=th_output
>> )
>>
>> input_sample = np.random.rand(1, 1, 28, 28)
>> kernel = np.random.rand(1, 1, 6, 6)
>>
>> op(input_sample, kernel)
>>
>>
>> Interestingly, the error is NOT shown for other distribution samples,
>> like theano_rng.normal(), which has type RandomFunction{normal}.1
>> instead of RandomFunction{binomial}.1
>>
>> For what its worth, my THEANO_FLAGS are as follows:
>> floatX=float64,device=cuda,nvcc.flags=-D_FORCE_INLINES,
>> exception_verbosity=high
>>
>> The rest of the stack trace is as follows:
>> Traceback (most recent call last):
>> File "tmp2.py", line 23, in <module>
>> op(input_sample, kernel)
>> File
>> "/home/dave/miniconda2/lib/python2.7/site-packages/theano/compile/function_module.py",
>>
>> line 898, in __call__
>> storage_map=getattr(self.fn, 'storage_map', None))
>> File
>> "/home/dave/miniconda2/lib/python2.7/site-packages/theano/gof/link.py",
>> line 325, in raise_with_op
>> reraise(exc_type, exc_value, exc_trace)
>> File
>> "/home/dave/miniconda2/lib/python2.7/site-packages/theano/compile/function_module.py",
>>
>> line 884, in __call__
>> self.fn() if output_subset is None else\
>> RuntimeError: GpuCorrMM forward encountered an error running gemm: 5
>> Apply node that caused the error: GpuCorrMM{valid, (1, 1), (1,
>> 1)}(GpuContiguous.0, GpuContiguous.0)
>> Toposort index: 11
>> Inputs types: [GpuArrayType<None>(int64, (False, False, False, False)),
>> GpuArrayType<None>(float64, (False, False, False, False))]
>> Inputs shapes: [(1, 1, 28, 28), (1, 1, 6, 6)]
>> Inputs strides: [(6272, 6272, 224, 8), (288, 288, 48, 8)]
>> Inputs values: ['not shown', 'not shown']
>> Inputs type_num: [7, 12]
>> Outputs clients: [[HostFromGpu(gpuarray)(GpuCorrMM{valid, (1, 1), (1,
>> 1)}.0)]]
>>
>> Debugprint of the apply node:
>> GpuCorrMM{valid, (1, 1), (1, 1)} [id A] <GpuArrayType<None>(int64,
>> (False, False, False, False))> ''
>> |GpuContiguous [id B] <GpuArrayType<None>(int64, (False, False, False,
>> False))> ''
>> | |GpuFromHost<None> [id C] <GpuArrayType<None>(int64, (False, False,
>> False, False))> ''
>> | |RandomFunction{binomial}.1 [id D] <TensorType(int64, 4D)> ''
>> | |<RandomStateType> [id E] <RandomStateType>
>> | |MakeVector{dtype='int64'} [id F] <TensorType(int64, vector)> ''
>> | | |Shape_i{0} [id G] <TensorType(int64, scalar)> ''
>> | | | |<TensorType(float64, 4D)> [id H] <TensorType(float64, 4D)>
>> | | |Shape_i{1} [id I] <TensorType(int64, scalar)> ''
>> | | | |<TensorType(float64, 4D)> [id H] <TensorType(float64, 4D)>
>> | | |Shape_i{2} [id J] <TensorType(int64, scalar)> ''
>> | | | |<TensorType(float64, 4D)> [id H] <TensorType(float64, 4D)>
>> | | |Shape_i{3} [id K] <TensorType(int64, scalar)> ''
>> | | |<TensorType(float64, 4D)> [id H] <TensorType(float64, 4D)>
>> | |TensorConstant{1} [id L] <TensorType(int8, scalar)>
>> | |<TensorType(float64, 4D)> [id H] <TensorType(float64, 4D)>
>> |GpuContiguous [id M] <GpuArrayType<None>(float64, (False, False, False,
>> False))> ''
>> |GpuFromHost<None> [id N] <GpuArrayType<None>(float64, (False, False,
>> False, False))> ''
>> |Subtensor{::, ::, ::int64, ::int64} [id O] <TensorType(float64,
>> 4D)> ''
>> |<TensorType(float64, 4D)> [id P] <TensorType(float64, 4D)>
>> |Constant{-1} [id Q] <int64>
>> |Constant{-1} [id Q] <int64>
>>
>> Storage map footprint:
>> - GpuContiguous.0, Shape: (1, 1, 28, 28), ElemSize: 8 Byte(s),
>> TotalSize: 6272 Byte(s)
>> - <TensorType(float64, 4D)>, Input, Shape: (1, 1, 28, 28), ElemSize: 8
>> Byte(s), TotalSize: 6272 Byte(s)
>> - GpuContiguous.0, Shape: (1, 1, 6, 6), ElemSize: 8 Byte(s), TotalSize:
>> 288 Byte(s)
>> - <TensorType(float64, 4D)>, Input, Shape: (1, 1, 6, 6), ElemSize: 8
>> Byte(s), TotalSize: 288 Byte(s)
>> - Constant{-1}, Shape: (), ElemSize: 8 Byte(s), TotalSize: 8.0 Byte(s)
>> - TensorConstant{1}, Shape: (), ElemSize: 1 Byte(s), TotalSize: 1.0
>> Byte(s)
>> TotalSize: 13129.0 Byte(s) 0.000 GB
>> TotalSize inputs: 6569.0 Byte(s) 0.000 GB
>>
>> Am I doing something wrong here? Any idea how I might get around this? It
>> works if i split up the code into two functions, one that does the sampling
>> and returns out the tensor, and then one that takes in this result and does
>> the convolution. But it'd be really stupid to pass the value back out to
>> the CPU RAM from the GPU RAM just to get around this...
>>
>> Any advice would be hugely appreciated!
>>
>> Cheers,
>> Dave
>>
>
--
---
You received this message because you are subscribed to the Google Groups
"theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.