Running Theano on GPU with CUDA Toolkit
May 02, 2016
Setting up CUDA toolkit and Nvidia drivers on my HP Pavilion 15 Notebook kept messing up with my display manager. After numerous X-Server breakdowns, here is how I got Theano to run on GPU safely. I setup CUDA-7.5 on Ubuntu 14.04.
-
Check system compatibility
-
First of all, verify that your GPU is CUDA-compatible. Run
lspci | grep NVIDIA
and note the GPU model. Make sure your GPU is listed here.
-
Check for existing Nvidia Drivers by running
nvidia-smi
If you already have Nvidia Drivers, then this should show you the Driver Version. Note it.
-
-
Install dependencies
sudo apt-get install build-essential gcc g++
-
Install Nvidia drivers and CUDA toolkit
- Download CUDA .run package from Nvidia website. This package contains 3 components:
- Nvidia GPU Driver
- CUDA Toolkit
- CUDA Samples
It is a good idea to extract these 3 components as individual installers via
sudo sh cuda_*.run -extract=~/cuda_installers
-
Check the Nvidia driver version from its filename. For eg. in my case it was version 352 ( Filename:
NVIDIA-Linux-x86_64-352.39.run
). You can skip installation of the driver if you already have this (or higher) version installed. -
Nvidia driver installation
-
Remove any programs or configuration starting with
nvidia-*
.sudo apt-get --purge remove nvidia-*
-
Hit
Ctrl
+Alt
+F1
to login to physical terminal. -
Stop X-Server:
sudo lightdm stop
-
Install Nvidia Driver
cd cuda_installers
sudo sh NVIDIA-Linux-x86_64-352.39.run
Accept the EULA and follow prompts. If the installers complaints for missing dependencies, you may need to install some extra packages.
sudo apt-get install dkms fakeroot linux-headers-generic
-
-
CUDA toolkit installation
sudo sh cuda-linux64-rel-7.5.18-19867135.run
Install the samples for testing:
sudo sh cuda-samples-linux-7.5.18-19867135.run
- Download CUDA .run package from Nvidia website. This package contains 3 components:
-
Test CUDA installation by running a sample
cd ~/NVIDIA_CUDA-7.5_Samples/1_Utilities/deviceQuery
./deviceQuery
If all went fine, you should see result PASS. Now, start X-Server and log out of physical terminal
sudo lightdm start
-
Set up the required environment variables
Append following lines in ~/.bashrc or ~/.zshrc
PATH=/usr/local/CUDA-7.5/bin:$PATH
LD_LIBRARY_PATH=/usr/local/CUDA-7.5/lib64:$LD_LIBRARY_PATH
-
Install Python SciPy Stack
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
-
Install the released version of Theano from PyPI
sudo pip install Theano
-
Configure Theano to run on GPU
Save a file ~/.theanorc with following text.
1
2
3
4
5
6
7
8
9
[global]
floatX = float32
device = gpu
[nvcc]
fastmath = True
[cuda]
root=/usr/local/cuda-7.5/
-
Test to see if GPU is being used
Copy following program in a file and run it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen = 10 * 30 * 768 # 10 x #cores x # threads per core
iters = 1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, tensor.Elemwise) and
('Gpu' not in type(x.op).__name__)
for x in f.maker.fgraph.toposort()]):
print('Used the cpu')
else:
print('Used the gpu')
Hopefully this will show ‘Used the gpu’.
Now you are all set to play with your GPU. Enjoy!
Share