[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-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   |<GpuArrayType(float32, (False, False))> [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   |<GpuArrayType(float32, (False, False))> [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] Implementing a GPU op

2017-07-11 Thread Christopher Bourez
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.