[theano-users] Re: Implementing a GPU op

2017-07-26 Thread Pascal Lamblin
Indeed, there was an issue when using a later version of libgpuarray with 
the released version 0.9 of Theano.
This should be fixed when libgpuarray 0.6.9 is available.
See https://github.com/Theano/Theano/issues/6141

On Sunday, July 16, 2017 at 7:15:51 AM UTC-4, Christopher Bourez wrote:
>
> Moreover if you install Theano from scratch :
>
> conda install theano pygpu
>
> Fetching package metadata .
> Solving package specifications: .
>
> Package plan for installation in environment /root/miniconda2:
>
> The following NEW packages will be INSTALLED:
>
> libgpuarray: 0.6.8-0 
> pygpu:   0.6.8-py27_0
> theano:  0.9.0-py27_0
>
>
> you need to run the following correction after :
>
> conda install libgpuarray=0.6.4-0 pygpu=0.6.4
>
>
> And now that works on the server I was initially working on. 
>
>

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-19 Thread John Coolidge
Oh man, so glad I randomly clicked on your your message! I just wrote a 
post about the same problem, except I was getting the segmentation fault 
while simply trying to run some old code on the GPU with the new GPU 
backend.  I also use anaconda and using the init_gpu_device flag instead of 
the ordinary device flag as well as downgrading pygpu and libgpuarray also 
solved my problem. Not sure if the problem lies with Theano, but seems like 
this could affect a fair number of people.


On Sunday, July 16, 2017 at 4:15:51 AM UTC-7, Christopher Bourez wrote:
>
> Moreover if you install Theano from scratch :
>
> conda install theano pygpu
>
> Fetching package metadata .
> Solving package specifications: .
>
> Package plan for installation in environment /root/miniconda2:
>
> The following NEW packages will be INSTALLED:
>
> libgpuarray: 0.6.8-0 
> pygpu:   0.6.8-py27_0
> theano:  0.9.0-py27_0
>
>
> you need to run the following correction after :
>
> conda install libgpuarray=0.6.4-0 pygpu=0.6.4
>
>
> And now that works on the server I was initially working on. 
>
>

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-16 Thread Christopher Bourez
Moreover if you install Theano from scratch :

conda install theano pygpu

Fetching package metadata .
Solving package specifications: .

Package plan for installation in environment /root/miniconda2:

The following NEW packages will be INSTALLED:

libgpuarray: 0.6.8-0 
pygpu:   0.6.8-py27_0
theano:  0.9.0-py27_0


you need to run the following correction after :

conda install libgpuarray=0.6.4-0 pygpu=0.6.4


And now that works on the server I was initially working on. 

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-16 Thread Christopher Bourez
I found another server on which the code works as on your computer :

Using cuDNN version 5110 on context None
Preallocating 9151/11439 Mb (0.80) on cuda0
Mapped name None to device cuda0: Tesla K80 (:83:00.0)
GpuEye{dtype='float32', context_name=None} [id A] ''   
 |x [id B]
 |y [id C]
Compiling
GpuEye{dtype='float32', context_name=None} [id A] ''   0
 |x [id B]
 |y [id C]
Results
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]



To reproduce the segmentation fault :

*conda install pygpu* 

Fetching package metadata .
Solving package specifications: .

Package plan for installation in environment /root/miniconda2:

The following packages will be UPDATED:

libgpuarray: 0.6.4-0  --> 0.6.8-0 
pygpu:   0.6.4-py27_1 --> 0.6.8-py27_0

Proceed ([y]/n)? y 


And then you can run again :

import theano
from theano.gpuarray.basic_ops import GpuEye
x = theano.tensor.iscalar('x')
y = theano.tensor.iscalar('y')
z = GpuEye(dtype='float32', context_name=None)(x,y, 
theano.tensor.constant(0))
theano.printing.debugprint(z)
print("Compiling")
f = theano.function( [x,y], z)
theano.printing.debugprint(f)
print("Results")
print(f(3, 3))

Using cuDNN version 5110 on context None
Preallocating 9151/11439 Mb (0.80) on cuda0
Mapped name None to device cuda0: Tesla K80 (:83:00.0)
GpuEye{dtype='float32', context_name=None} [id A] ''   
 |x [id B]
 |y [id C]
Compiling
Segmentation fault (core dumped)

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-16 Thread Christopher Bourez


On Sunday, July 16, 2017 at 1:43:41 AM UTC+2, Pascal Lamblin wrote:
>
> Your original example seems to work for me, though, so it may have to do 
> with your setup:
>

I got it work when I removed device and contexts flags from my theanorc 
config file and used the command 

THEANO_FLAGS="init_gpu_device=cuda" python t.py

If I add the device flag set to cuda or cuda0, it gives me a seg fault.
I found this information when running the test below: "If you want 
GPU-related tests to run on a specific GPU device, and not the default one, 
you should use the init_gpu_device theano flag."

What does that mean for my configuration ? What shall I change ? 

Yes, it gets tested in our daily buildbot and on several pull requests per 
> week, by our continuous integration systems. I also just launched it 
> manually:
> $ theano-nose theano/gpuarray/tests/test_basic_ops.py:test_gpueye
> Can not use cuDNN on context None: Disabled by dnn.enabled flag
> Mapped name None to device cuda: GeForce GTX 580 (:02:00.0)
> .
> --
> Ran 45 tests in 21.645s
>
> OK
>

I get :

ImportError: No module named test_basic_ops


When I run 

THEANO_FLAGS="init_gpu_device=cuda" theano-nose 
/usr/local/lib/python2.7/dist-packages/theano/gpuarray/tests/test_basic_ops.py:test_gpueye


I get

 
if hasattr(theano.tests, "TheanoNoseTester"):
AttributeError: 'module' object has no attribute 'tests'

 

> You do not specify C and GPU implementations for the same Op, what we have 
> in general is two different Ops, one that has CPU inputs and outputs, and 
> computes on CPU, and another one with GPU inputs and outputs, that computes 
> on GPU.
> This is necessary because the Variables in Theano are strongly typed, and 
> the device is part of the type.
> There are optimizations that replace CPU Ops by GPU ones, inserting 
> transfer Ops (GpuFromHost, HostFromGpu) if necessary.
> GPU Ops, like CPU ones, can have C (using CUDA) or Python implementations 
> (or both). 
>

Are the rules name-based ? If there is the string Gpu in the name? Or is 
there any registration as other framework ? 
Thanks a lot for clarification on the optimization rules.
 

> What surprises me is to get seg faults in the theano function, while I 
>> would have expected them to occur during evaluation on values...
>>
>
> It is strange indeed. It may be possible that some GPU operations are 
> executed on GPU during the compilation phase, for constant folding 
> (constant propagation) for instance.
> Does it happen as well with the latest master from GitHub?
>

Installing the latest dev version from github did not improve results.
 

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-15 Thread Pascal Lamblin

On Wednesday, July 12, 2017 at 4:13:43 AM UTC-4, Christopher Bourez wrote: 
>
>  I don't know what you mean by "not modifying" the source for GpuEye:
> - In this example, I'm importing a not modifyed GpuEye  op from Theano 
> basic ops
> - If I'm using theano.tensor.eye, then it does not use the GpuEye
>

OK, I assumed that you had started from the implementation of GpuEye to 
implement a new GPU Op.
Your original example seems to work for me, though, so it may have to do 
with your setup:

In [3]: import theano
   ...: from theano.gpuarray.basic_ops import GpuEye
   ...: 
   ...: x = theano.tensor.iscalar('x')
   ...: y = theano.tensor.iscalar('y')
   ...: z = GpuEye(dtype='float32', context_name=None)(x,y, theano.tensor.
constant(0))
   ...: 
   ...: theano.printing.debugprint(z)
   ...: print("Compiling")
   ...: f = theano.function( [x,y], z)
   ...: theano.printing.debugprint(f)
   ...: print("Results")
   ...: print(f(3, 3))
   ...: 
GpuEye{dtype='float32', context_name=None} [id A] ''   
 |x [id B]
 |y [id C]
 |TensorConstant{0} [id D]
Compiling
GpuEye{dtype='float32', context_name=None} [id A] ''   0
 |x [id B]
 |y [id C]
 |TensorConstant{0} [id D]
Results
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

Also, are you sure this test
>
> https://github.com/Theano/Theano/blob/2625464534147fd70da60a3a3ddcb63ed8e5a416/theano/gpuarray/tests/test_basic_ops.py#L401
> works well ? 
>

Yes, it gets tested in our daily buildbot and on several pull requests per 
week, by our continuous integration systems. I also just launched it 
manually:
$ theano-nose theano/gpuarray/tests/test_basic_ops.py:test_gpueye
Can not use cuDNN on context None: Disabled by dnn.enabled flag
Mapped name None to device cuda: GeForce GTX 580 (:02:00.0)
.
--
Ran 45 tests in 21.645s

OK


I've also tried to create an example with theano.gpuarray.nnet.GpuSoftmax but 
> after compilation it got replaced another implementation*GpuDnnSoftmax : *


Yes, there is an optimization that does that if cuDNN is available. You 
should be able to disable it with `optimizer_excluding=local_softmax_dnn`.

A second thing that is not clear to me in the documentation of Theano is 
> how you specify a C implementation and GPU implementation of the same own 
> op. Thank you
>

You do not specify C and GPU implementations for the same Op, what we have 
in general is two different Ops, one that has CPU inputs and outputs, and 
computes on CPU, and another one with GPU inputs and outputs, that computes 
on GPU.
This is necessary because the Variables in Theano are strongly typed, and 
the device is part of the type.
There are optimizations that replace CPU Ops by GPU ones, inserting 
transfer Ops (GpuFromHost, HostFromGpu) if necessary.
GPU Ops, like CPU ones, can have C (using CUDA) or Python implementations 
(or both). 

What surprises me is to get seg faults in the theano function, while I 
> would have expected them to occur during evaluation on values...
>

It is strange indeed. It may be possible that some GPU operations are 
executed on GPU during the compilation phase, for constant folding 
(constant propagation) for instance.
Does it happen as well with the latest master from GitHub?
 

>  
>
On Wednesday, July 12, 2017 at 10:05:30 AM UTC+2, Christopher Bourez wrote:
>>
>>
>>
>> On Wednesday, July 12, 2017 at 9:58:34 AM UTC+2, Christopher Bourez wrote:
>>>
>>>
>>>
>>> *Elemwise{mul,no_inplace} [id A] ''|HostFromGpu(gpuarray) [id B] '' 
>>>| |GpuSoftmax [id C] ''|   |GpuFromHost [id D] ''| |x 
>>> [id E] |InplaceDimShuffle{x,x} [id F] ''  |TensorConstant{2} [id 
>>> G]CompilingHostFromGpu(gpuarray) [id A] ''   5 |GpuElemwise{Mul}[(0, 
>>> 1)] [id B] ''   4   |GpuArrayConstant{[[ 2.]]} [id C]  
>>>  |InplaceGpuDimShuffle{0,1} [id D] ''   3
>>>  |GpuDnnSoftmax{mode='channel', algo='accurate'} [id E] ''   2  
>>>  |GpuContiguous [id F] ''   1 |InplaceGpuDimShuffle{0,1,x,x} [id G] 
>>> ''   0   | [id H]*I'm 
>>> looking of a good example with a GPU Kernel.
>>>
>>> On Wednesday, July 12, 2017 at 9:56:08 AM UTC+2, Christopher Bourez 
>>> wrote:





 On Wednesday, July 12, 2017 at 2:48:44 AM UTC+2, Pascal Lamblin wrote:
>
> Does it work if you do not modify the source for GpuEye at all?
> If it does, then maybe sharing your new source would get you more help.
>
> On Tuesday, July 11, 2017 at 12:12:03 PM UTC-4, Christopher Bourez 
> wrote:
>>
>> Hi, 
>>
>> I'm trying to implement a simple GPU op but it always gives me a 
>> Segmentation fault during compilation, without other message.
>>
>> For example :
>> import theano
>> from theano.gpuarray.basic_ops import GpuEye
>>
>> x = theano.tensor.iscalar('x')
>> y = theano.tensor.iscalar('y')
>> z = 

[theano-users] Re: Implementing a GPU op

2017-07-12 Thread Christopher Bourez
What surprises me is to get seg faults in the theano function, while I 
would have expected them to occur during evaluation on values...

On Wednesday, July 12, 2017 at 10:05:30 AM UTC+2, Christopher Bourez wrote:
>
> A second thing that is not clear to me in the documentation of Theano is 
> how you specify a C implementation and GPU implementation of the same own 
> op. Thank you
>
> On Wednesday, July 12, 2017 at 9:58:34 AM UTC+2, Christopher Bourez wrote:
>>
>> I've also tried to create an example with theano.gpuarray.nnet.GpuSoftmax
>>  but after compilation it got replaced another implementation*GpuDnnSoftmax 
>> : *
>>
>>
>> *Elemwise{mul,no_inplace} [id A] ''|HostFromGpu(gpuarray) [id B] '' 
>>| |GpuSoftmax [id C] ''|   |GpuFromHost [id D] ''| |x 
>> [id E] |InplaceDimShuffle{x,x} [id F] ''  |TensorConstant{2} [id 
>> G]CompilingHostFromGpu(gpuarray) [id A] ''   5 |GpuElemwise{Mul}[(0, 
>> 1)] [id B] ''   4   |GpuArrayConstant{[[ 2.]]} [id C]  
>>  |InplaceGpuDimShuffle{0,1} [id D] ''   3
>>  |GpuDnnSoftmax{mode='channel', algo='accurate'} [id E] ''   2  
>>  |GpuContiguous [id F] ''   1 |InplaceGpuDimShuffle{0,1,x,x} [id G] 
>> ''   0   | [id H]*I'm 
>> looking of a good example with a GPU Kernel.
>>
>> On Wednesday, July 12, 2017 at 9:56:08 AM UTC+2, Christopher Bourez wrote:
>>>
>>> I don't know what you mean by "not modifying" the source for GpuEye:
>>> - In this example, I'm importing a not modifyed GpuEye  op from Theano 
>>> basic ops
>>> - If I'm using theano.tensor.eye, then it does not use the GpuEye
>>>
>>> Also, are you sure this test
>>>
>>> https://github.com/Theano/Theano/blob/2625464534147fd70da60a3a3ddcb63ed8e5a416/theano/gpuarray/tests/test_basic_ops.py#L401
>>> works well ? 
>>>
>>> On Wednesday, July 12, 2017 at 2:48:44 AM UTC+2, Pascal Lamblin wrote:

 Does it work if you do not modify the source for GpuEye at all?
 If it does, then maybe sharing your new source would get you more help.

 On Tuesday, July 11, 2017 at 12:12:03 PM UTC-4, Christopher Bourez 
 wrote:
>
> Hi, 
>
> I'm trying to implement a simple GPU op but it always gives me a 
> Segmentation fault during compilation, without other message.
>
> For example :
> import theano
> from theano.gpuarray.basic_ops import GpuEye
>
> x = theano.tensor.iscalar('x')
> y = theano.tensor.iscalar('y')
> z = GpuEye(dtype='float32', context_name=None)(x,y, 
> theano.tensor.constant(0))
>
> theano.printing.debugprint(z)
> print("Compiling")
> f = theano.function( [x,y], z)
> theano.printing.debugprint(f)
> print("Results")
> print(f(3, 3))
>
> I've also tried with the softmax gpu function. Is there something I'm 
> missing ?
>
> I copied the file, created a complete new op, and the segmentation 
> fault appears when I'm defining a Kernel in gpu_kernels() method of the 
> op.
>
> Thank you a lot for your help
>


-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-12 Thread Christopher Bourez
A second thing that is not clear to me in the documentation of Theano is 
how you specify a C implementation and GPU implementation of the same own 
op. Thank you

On Wednesday, July 12, 2017 at 9:58:34 AM UTC+2, Christopher Bourez wrote:
>
> I've also tried to create an example with theano.gpuarray.nnet.GpuSoftmax but 
> after compilation it got replaced another implementation*GpuDnnSoftmax : *
>
>
> *Elemwise{mul,no_inplace} [id A] ''|HostFromGpu(gpuarray) [id B] '' 
>| |GpuSoftmax [id C] ''|   |GpuFromHost [id D] ''| |x 
> [id E] |InplaceDimShuffle{x,x} [id F] ''  |TensorConstant{2} [id 
> G]CompilingHostFromGpu(gpuarray) [id A] ''   5 |GpuElemwise{Mul}[(0, 
> 1)] [id B] ''   4   |GpuArrayConstant{[[ 2.]]} [id C]  
>  |InplaceGpuDimShuffle{0,1} [id D] ''   3
>  |GpuDnnSoftmax{mode='channel', algo='accurate'} [id E] ''   2  
>  |GpuContiguous [id F] ''   1 |InplaceGpuDimShuffle{0,1,x,x} [id G] 
> ''   0   | [id H]*I'm 
> looking of a good example with a GPU Kernel.
>
> On Wednesday, July 12, 2017 at 9:56:08 AM UTC+2, Christopher Bourez wrote:
>>
>> I don't know what you mean by "not modifying" the source for GpuEye:
>> - In this example, I'm importing a not modifyed GpuEye  op from Theano 
>> basic ops
>> - If I'm using theano.tensor.eye, then it does not use the GpuEye
>>
>> Also, are you sure this test
>>
>> https://github.com/Theano/Theano/blob/2625464534147fd70da60a3a3ddcb63ed8e5a416/theano/gpuarray/tests/test_basic_ops.py#L401
>> works well ? 
>>
>> On Wednesday, July 12, 2017 at 2:48:44 AM UTC+2, Pascal Lamblin wrote:
>>>
>>> Does it work if you do not modify the source for GpuEye at all?
>>> If it does, then maybe sharing your new source would get you more help.
>>>
>>> On Tuesday, July 11, 2017 at 12:12:03 PM UTC-4, Christopher Bourez wrote:

 Hi, 

 I'm trying to implement a simple GPU op but it always gives me a 
 Segmentation fault during compilation, without other message.

 For example :
 import theano
 from theano.gpuarray.basic_ops import GpuEye

 x = theano.tensor.iscalar('x')
 y = theano.tensor.iscalar('y')
 z = GpuEye(dtype='float32', context_name=None)(x,y, 
 theano.tensor.constant(0))

 theano.printing.debugprint(z)
 print("Compiling")
 f = theano.function( [x,y], z)
 theano.printing.debugprint(f)
 print("Results")
 print(f(3, 3))

 I've also tried with the softmax gpu function. Is there something I'm 
 missing ?

 I copied the file, created a complete new op, and the segmentation 
 fault appears when I'm defining a Kernel in gpu_kernels() method of the op.

 Thank you a lot for your help

>>>

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-12 Thread Christopher Bourez
I don't know what you mean by "not modifying" the source for GpuEye:
- In this example, I'm importing a not modifyed GpuEye  op from Theano 
basic ops
- If I'm using theano.tensor.eye, then it does not use the GpuEye

Also, are you sure this test
https://github.com/Theano/Theano/blob/2625464534147fd70da60a3a3ddcb63ed8e5a416/theano/gpuarray/tests/test_basic_ops.py#L401
works well ? 

On Wednesday, July 12, 2017 at 2:48:44 AM UTC+2, Pascal Lamblin wrote:
>
> Does it work if you do not modify the source for GpuEye at all?
> If it does, then maybe sharing your new source would get you more help.
>
> On Tuesday, July 11, 2017 at 12:12:03 PM UTC-4, Christopher Bourez wrote:
>>
>> Hi, 
>>
>> I'm trying to implement a simple GPU op but it always gives me a 
>> Segmentation fault during compilation, without other message.
>>
>> For example :
>> import theano
>> from theano.gpuarray.basic_ops import GpuEye
>>
>> x = theano.tensor.iscalar('x')
>> y = theano.tensor.iscalar('y')
>> z = GpuEye(dtype='float32', context_name=None)(x,y, 
>> theano.tensor.constant(0))
>>
>> theano.printing.debugprint(z)
>> print("Compiling")
>> f = theano.function( [x,y], z)
>> theano.printing.debugprint(f)
>> print("Results")
>> print(f(3, 3))
>>
>> I've also tried with the softmax gpu function. Is there something I'm 
>> missing ?
>>
>> I copied the file, created a complete new op, and the segmentation fault 
>> appears when I'm defining a Kernel in gpu_kernels() method of the op.
>>
>> Thank you a lot for your help
>>
>

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[theano-users] Re: Implementing a GPU op

2017-07-11 Thread Pascal Lamblin
Does it work if you do not modify the source for GpuEye at all?
If it does, then maybe sharing your new source would get you more help.

On Tuesday, July 11, 2017 at 12:12:03 PM UTC-4, Christopher Bourez wrote:
>
> Hi, 
>
> I'm trying to implement a simple GPU op but it always gives me a 
> Segmentation fault during compilation, without other message.
>
> For example :
> import theano
> from theano.gpuarray.basic_ops import GpuEye
>
> x = theano.tensor.iscalar('x')
> y = theano.tensor.iscalar('y')
> z = GpuEye(dtype='float32', context_name=None)(x,y, 
> theano.tensor.constant(0))
>
> theano.printing.debugprint(z)
> print("Compiling")
> f = theano.function( [x,y], z)
> theano.printing.debugprint(f)
> print("Results")
> print(f(3, 3))
>
> I've also tried with the softmax gpu function. Is there something I'm 
> missing ?
>
> I copied the file, created a complete new op, and the segmentation fault 
> appears when I'm defining a Kernel in gpu_kernels() method of the op.
>
> Thank you a lot for your help
>

-- 

--- 
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 theano-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.