the host_to_gpu does not like it:
AttributeError: 'GpuArrayType' object has no attribute 'type'
>
On Wednesday, 10 May 2017 16:43:55 UTC+1, Adam Becker wrote:
>
> Correct typo: T.fmatrix -> gpu_fmatrix on line 5. I'm in need of more
> coffee ...
>
> On Wednesday, May 10, 2017 at 11:13:48 PM UTC+8, Alexander Botev wrote:
>>
>> Again with Theano "0.9.0.dev-ca213aa43e78ab3fb074a7c679907ea4d5412ed1" I
>> get:
>>
>> Traceback (most recent call last):
>>> File "tt.py", line 9, in <module>
>>> a = theano.gpuarray.host_from_gpu(a_gpu)
>>> File
>>> "/share/apps/barber/system/lib/python3.6/site-packages/theano/gof/op.py",
>>> line 615, in __call__
>>> node = self.make_node(*inputs, **kwargs)
>>> File
>>> "/share/apps/barber/system/lib/python3.6/site-packages/theano/gpuarray/basic_ops.py",
>>>
>>> line 549, in make_node
>>> raise TypeError(x)
>>> TypeError: <TensorType(float32, matrix)>
>>>
>>
>>
>> On Wednesday, 10 May 2017 04:11:46 UTC+1, Adam Becker wrote:
>>>
>>> Hmm ... my bad. I thought givens would work.
>>>
>>> Anyway, this trick would work:
>>>
>>> import theano
>>> from theano.gpuarray.basic_ops import infer_context_name
>>>
>>> gpu_fmatrix = theano.gpuarray.GpuArrayType(dtype='float32',
>>> broadcastable=(False,False))
>>> a_gpu = T.fmatrix()
>>>
>>> # insert transfer
>>> a = theano.gpuarray.host_from_gpu(a_gpu)
>>> # define graph as usual
>>> b = a + 2.
>>>
>>> # compiles function, but takes GpuArray as input
>>> fn = theano.function([a_gpu], b)
>>> theano.printing.debugprint(fn)
>>>
>>> # compiles function that takes GpuArray as input/output
>>> ctx_name = infer_context_name(a_gpu)
>>> b_gpu = theano.gpuarray.as_gpuarray_variable(b, ctx_name)
>>> fn2 = theano.function([a_gpu], b_gpu)
>>> theano.printing.debugprint(fn2)
>>>
>>>
>>> Console output:
>>>
>>> HostFromGpu(gpuarray) [id A] '' 1
>>> |GpuElemwise{add,no_inplace} [id B] '' 0
>>> |GpuArrayConstant{[[ 2.]]} [id C]
>>> |<GpuArrayType<None>(float32, matrix)> [id D]
>>>
>>> GpuElemwise{add,no_inplace} [id A] '' 0
>>> |GpuArrayConstant{[[ 2.]]} [id B]
>>> |<GpuArrayType<None>(float32, matrix)> [id C]
>>>
>>> The above works because the optimizer can remove redundant GPU -> CPU ->
>>> GPU transfers. The downside is the above approach doesn't work with config
>>> optimizer=None
>>>
>>> On Wednesday, May 10, 2017 at 5:02:20 AM UTC+8, Alexander Botev wrote:
>>>>
>>>> That does not seem to work. So I have this:
>>>>
>>>> a = T.fmatrix()
>>>> ctx = pygpu.init(theano.config.device)
>>>> theano.gpuarray.reg_context("mine", ctx)
>>>> a_gpu = theano.gpuarray.GpuArrayType(a.dtype, a.broadcastable, "mine")
>>>> f2 = theano.function([a_gpu], a + T.constant(2), givens={a: a_gpu})
>>>> return f1, f2
>>>>
>>>>
>>>> However, Theano complains about:
>>>>
>>>> TypeError: Unknown parameter type: <class
>>>> 'theano.gpuarray.type.GpuArrayType'>
>>>>
>>>> If instead of the [a_gpu] I have [a] it complains that the givens is
>>>> overwriting an input:
>>>>
>>>> RuntimeError: You are trying to replace variable '<TensorType(float32,
>>>> matrix)>' through the `givens` parameter, but this variable is an input to
>>>> your function. Replacing inputs is currently forbidden because it has no
>>>> effect. One way to modify an input `x` to a function evaluating f(x) is to
>>>> define a new input `y` and use `theano.function([y], f(x), givens={x:
>>>> g(y)})`. Another solution consists in using `theano.clone`, e.g. like
>>>> this:
>>>> `theano.function([x], theano.clone(f(x), replace={x: g(x)}))`.
>>>>
>>>>
>>>> On Tuesday, 9 May 2017 15:19:10 UTC+1, Adam Becker wrote:
>>>>>
>>>>> In the main graph, replace the input variables with type:
>>>>> theano.gpuarray.GpuArrayType (Can be done using givens parameter of
>>>>> theano.function). Then, feed pygpu.gpuarray.GpuArray object directly
>>>>> to the compiled function. pygpu.gpuarray.asarray can be used to move
>>>>> numpy array to GPU.
>>>>>
>>>>> On Tuesday, May 9, 2017 at 5:01:42 PM UTC+8, Alexander Botev wrote:
>>>>>>
>>>>>> Actually one thing I've just realized is that to do this consistently
>>>>>> I need to have access to the underlying Theano pygpu Context. Is there
>>>>>> anyway to get that?
>>>>>>
>>>>>> On Tuesday, 9 May 2017 09:53:02 UTC+1, Alexander Botev wrote:
>>>>>>>
>>>>>>> So recently I was wondering if there is any way that after compiling
>>>>>>> a theano function, rather than taking numpy arrays / native lists /
>>>>>>> native
>>>>>>> numbers it can accept as an input something like a libgpuarray or
>>>>>>> anything
>>>>>>> else that lives on the GPU. However, I know that in the computation
>>>>>>> graph
>>>>>>> usually when you compile it there is a Transfer Op if it is on the GPU.
>>>>>>> Is
>>>>>>> there a way to avoid that transfer?
>>>>>>>
>>>>>>>
>>>>>>>
--
---
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.