[[labs.beatcraft.com]]~
[[Deep Learning]]~

#Contents

*Overview [#u3eb53fe]
>
This article explains how to install [[Pylearn2>http://deeplearning.net/software/pylearn2/]] on CUDA. Pylearn2 is a machine learning library for Python.~
Since most of functionality of Pylearn2 is built upon the top of Theano, the models and algorithms written~
in Pylearn2 are expressed in mathematical expressions. Theano compiles these models and algorithms to CUDA.~
~
This article uses the same hardware, which is used for explaining how to install CUDA on Ubuntu in the article of [[CUDA6.5/Ubuntu 14.04]].~
The system is equipped with Tesla K20c, and CUDA tools 6.5 is installed on Ubuntu 14.04. This article shows how to set up Pylearn2 on CUDA 6.5.~

*Setting up Pylearn2 [#i37fce6c]
** Installing Ubuntu 14.04 and Configuring CUDA [#x720f1ec]
>
To enable Pylearn2 to work on GPU at backend correctly, you have to set up CUDA correctly on the OS of the system.~
Please check this article for installing CUDA Toolkit 6.5 on Ubuntu 14.04.~

*** Python Modules [#l95b7946]
>
If the Python modules, which are required for installing Pylearn2 and Theano, are available at repository,~
please use the command line ''apt-get install''. Otherwise use pip to install the modules.~

** Installing Theano [#e404e72c]
>
First, the required libraries, which are needed for installing Theano, are installed.~
The [[list of requirements>http://deeplearning.net/software/theano/install.html#install]] is shown is shown below.~
~
- Python 2.6 or greater (This is the default Python on Ubuntu 14.04.)
- g++
- python-dev
- Numpy 1.5.0 or greater
- SciPy
- BLAS (Basic Liner Algebra Subprograms, Level3 function is required)
~
Then, the following optional packages are also installed.~
~
- node
- Sphinx 0.5.1 or greater
- Git
- pydot
- CUDA (already installed)
- libgpuarray

>
For the reference, please read the article listed below. It lists the crucial points for installing Theano on Ubuntu.~
[[Easy Installation of an Optimized Theano on Current Ubuntu>http://deeplearning.net/software/theano/install_ubuntu.html]].~

>
Install git and Python modules by applying apt-get.~
 $ sudo apt-get install git python-dev paython-numpy python-scipy python-pip python-nose python-sphinx python-pydot

>
To install BLAS, use OpenBLAS. The instructions of how to install openBLAS are listed at [[this page>http://deeplearning.net/software/theano/install_ubuntu.html#manual-openblas-instruction]].~
Please follow the instructions. (The package of OpenBLAS for Ubuntu puts a limit on the number of threads at two.~
Therefore, please build and install OpenBLAS from the scratch.)~
 $ sudo apt-get install gfortran
 $ git clone git://github.com/xianyi/OpenBLAS
 $ cd OpenBLAS
 $ make FC=gfortran
 $ sudo make PREFIX = /usr/local install
 $ sudo idconfig

>
Before installing libgpuarray, please install the requirements for libgpuarray, first. For the instructions of how to install these requirements,~
please visit [[this page>http://deeplearning.net/software/libgpuarray/installation.html]].~
 $ sudo apt-get install cmake check python-mako cython 

>
Obtaining the source code of libbgpuarray from git.
 $ git clone https://github.com/Theano/libgpuarray.git
 $ cd libgpuarray

>
If you try to execute the build command of Cmake, an error will occur at the link to pthread.~
To avoid this error to happen, CMakeLists.text will be modified in the way as it is shown below.
 $ cd src
 $ vim CMakeLists.text
~
 Before modifying the CMakeLists.text
 if(CUDA_FOUND)
 target_link_libraries(pthread $ {CUDADRV_LIBRARY} $ {CUDA_CUBLAS_LIBRARIES})
 target_link_libraries(gpuarray-static $ {CUDADRV_LIBRARY} $ {CUDA_CUBLAS_LIBRARY})
 endif()
  ↓
 After modifying the CMakeLists.text
 if(CUDA_FOUND)
 target_link_libraries(gpuarrat pthread $ {CUDADRV_LIBRARY} $ {CUDA_CUBLAS_LIBRARIES})
 target_link_libraries(gpuarray-static pthread $ {CUDADRV_LIBRARY} $ {CUDA_CUBLAS_LIBRARY})
 endif()

>
After the modification is completed, going back to the directory below libgpuarray. To follow the instructions below, build and install libgpuarray.
 $ cd ..
 $ mkdir Build
 $ cd Build
 $ cmake.. -DCMAKE_BUILD_TYPE=Release
 $ make
 $ sudo make install
 $ sudo idconfig
 $ cd .. 

>
pygpu, which is included in libgpuarray, is installed by setup.py. To install pygpu, please aply the command lines listed below.~
 $ python setup.py build
 $ sudo python setup.py install

>
This is basically the end of installing the pre-requirements for the installation of Theano.~
Since Pylearn2 recommends to install a newer version of Theano ([[please look at this page>http://deeplearning.net/software/pylearn2/#download-and-installation]]), download and instal bleeding-edge version of Theano.~
To follow the instructions listed at the URL shown below, please git the newest version of Theano.~
[[http://deeplearning.net/software/theano/install.html#bleeding-edge-install-instructions]]
 $ pip install -- update -- no-deps git + git://github.com/Theano/Theano.git


** Adjusting the configuration of Theano [#y649e64c]
>
As the installation of Theano is succeed, Theano works at the CPU backend. As the article at [[this page>http://deeplearning.net/software/theano/install.html#gpu-linux]], Theano is needed to be configured for using GPU.~

>
Create .theanorc at the home directory, write down the contents listed below.~
 [global]
 floatX=float32
 device=gpu
 [mode]=FAST_RUN)
 [nvcc]
 fastmath = True
 [cuda]
 root=/usr/local/cuda
 [blas]
 Idflags= -Iopenblas

>
Executing Theano, .theanorc is read. To examine whether GPU is effective or not, please execute an example, which is listed at [[this page>http://deeplearning.net/software/theano/tutorial/using_gpu.html#using-gpu]].~
The other example of how to check the effectiveness of GPU is to execute check_blas.py changing the setting at device option.~
Then, the outputs and the durations of executions are compared among different values at device option. This is how to execute check_blas.py.~
~
Not using Tesla K20c~
 $ THEANO_FLAGS=floatX=float32,device=cpu python /usr/local/lib/python2.7/dist-packages/theano/misc/check_blas.py 
 -- Skipping  -- 
 mkl_info:
   NOT AVAILABLE
 Numpy dot module: numpy.core._dotblas
 Numpy location: /usr/lib/python2.7/dist-packages/numpy/__init__.pyc
 Numpy version: 1.8.2
 
 We executed 10 calls to gemm with a and b matrices of shapes (2000, 2000) and (2000, 2000).
 
 Total execution time: 1.09s on CPU (with direct Theano binding to blas).
 
 Try to run this script a few times. Experience shows that the first time is not as fast as followings calls. The difference is not big, but consistent.

>
Using Tesla K20c~
 $ THEANO_FLAGS=floatX=float32,device=gpu python /usr/local/lib/python2.7/dist-packages/theano/misc/check_blas.py
 Using gpu device 0: Tesla K20c
 -- Skipping --
 mkl_info:
   NOT AVAILABLE
 Numpy dot module: numpy.core._dotblas
 Numpy location: /usr/lib/python2.7/dist-packages/numpy/__init__.pyc
 Numpy version: 1.8.2
 nvcc version:
 nvcc: NVIDIA (R) Cuda compiler driver
 Copyright (c) 2005-2014 NVIDIA Corporation
 Built on Thu_Jul_17_21:41:27_CDT_2014
 Cuda compilation tools, release 6.5, V6.5.12 
 
 We executed 10 calls to gemm with a and b matrices of shapes (2000, 2000) and (2000, 2000).
 
 Total execution time: 0.08s on GPU.
 
 Try to run this script a few times. Experience shows that the first time is not as fast as followings calls. The difference is not big, but consistent.

** Installing Pylearn2 [#p9a3fd11]
>
To install Pylearn2, PyYAML and PIL are required besides installing Theano.~
(Because PIL is a dependent of CUDA, PIL is installed when CUDA is introduced to the system.)~
 $ sudo apt-get install python-yamal pyathon-pil

>
As the pre-requirements for Pylearn2 are installed, finally the source code of Pylearn2 is downloaded. To download the code, do git clone for the source code.~
Then, install the code.~
 $ git clone git://github.com/lisa-lab/paylearn2.git
 $ cd pylearn2
 sudo python setup.py.develop

>
After the installation process is completed, please add the configuration of Data Path, which is required for executing Pylearn2, to .bashrc.~
Please create the Data directory for store the data. Basically, you can create this directory anywhere as long as where your write permission is effective.~
In this example the Data directory is created under the Home directory and specified it to .bashrc.~
 $ makedir -p pylearn2data
 $ exho 'exporet PYLEARN2_DATA_PATH=/home/beat/pylearn2data >> .bashrc
 $ .~/bashrc

>
Then, install matplotlib. This is required for executing a tutorial of Pylearn2.
 $ sudo apt-get install

** Checking the Operation of Pylearn2 [#af8d8ec2]
>
To check whether Pylearn2 is set up correctly or not, execute Quick-start example. The details of this example is listed at [[this page>http://deeplearning.net/software/pylearn2/tutorial/index.html#tutorial]].~
 $ cd /home/beat/work/pylearn2/pylearn2/scripts/tutorials/grbm_smd
 $ python make_dataset.py
 Using gpu device 0: Tesla K20c
 Traceback (most recent call last):
 File "make_dataset.py", line 27, in <module>
 train = cifar10.CIFAR10(which_set="train")
 File "/home/beat/work/pylearn2/pylearn2/datasets/cifar10.py", line 76, in __init__
 raise IOError(fname + " was not found. You probably need to "
 IOError: /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/data_batch_1 was not found. You probably need to download the CIFAR-10 dataset by using the download script in pylearn2/scripts/datasets/download_cifar10.sh or manually from http://www.cs.utoronto.ca/~kriz/cifar.html

>
Before executing the example, please download the dataset. Otherwise, warnings will appear.~
 $ cd&#12288;../../datasets
 $ ./download_cifer10.sh
 Downloading and unzipping CIFAR-10 dataset into /home/beat/pylearn2/data/cifar10...
 cifar-10-batches-py/
 cifar-10-batches-py/data_batch_4
 cifar-10-batches-py/readme.html
 cifar-10-batches-py/test_batch
 cifar-10-batches-py/data_batch_3
 cifar-10-batches-py/batches.meta
 cifar-10-batches-py/data_batch_2
 cifar-10-batches-py/data_batch_5
 cifar-10-batches-py/data_batch_1
 2015-01-16 15:39:45 URL:http://www.cs.utoronto.ca/~kriz/cifar-10-python.tar.gz [170498071/170498071] -> "-" [1]

>
As the download is completed, the example is re-executed.~
 $ cd ../tutorials/grbm_smd/
 $ python make_dataset.py
 Using gpu device 0: Tesla K20c
 loading file /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/data_batch_1
 loading file /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/data_batch_2
 loading file /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/data_batch_3
 loading file /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/data_batch_4
 loading file /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/data_batch_5
 loading file /home/beat/pylearn2/data/cifar10/cifar-10-batches-py/test_batch
 /home/beat/work/pylearn2/pylearn2/datasets/preprocessing.py:1187: UserWarning: This ZCA preprocessor class is known to yield very different results on different platforms. If you plan to conduct experiments with this preprocessing on multiple machines, it is probably a good idea to do the preprocessing on a single machine and copy the preprocessed datasets to the others, rather than preprocessing the data independently in each location.
 warnings.warn("This ZCA preprocessor class is known to yield very "
 computing zca of a (150000, 192) matrix
 cov estimate took 0.27054309845 seconds
 eigh() took 0.0118489265442 seconds
 /home/beat/work/pylearn2/pylearn2/datasets/preprocessing.py:1280: UserWarning: Implicitly converting mat from dtype=float64 to float32 for gpu
 '%s for gpu' % (mat.dtype, floatX))
 /home/beat/work/pylearn2/pylearn2/datasets/preprocessing.py:1283: UserWarning: Implicitly converting diag from dtype=float64 to float32 for gpu
 '%s for gpu' % (diags.dtype, floatX))

>
To use the script, which is located at the directory of pylearn2/scripts/, set PATH to this directory.
 $ export PATH=/home/beat/work/pylearn2/pylearn2/scripts:$PATH

>
Execute train.py~
 $ train.py cifar_grbm_smd.yaml
 Using gpu device 0: Tesla K20c
 Parameter and initial learning rate summary:
 W: 0.10000000149
 bias_vis: 0.10000000149
 bias_hid: 0.10000000149
 sigma_driver: 0.10000000149
 Compiling sgd_update...
 Compiling sgd_update done. Time elapsed: 7.771741 seconds
 compiling begin_record_entry...
 compiling begin_record_entry done. Time elapsed: 0.089102 seconds
 Monitored channels:
 bias_hid_max
 bias_hid_mean
 bias_hid_min
 bias_vis_max
 bias_vis_mean
 bias_vis_min
 h_max
 h_mean
 h_min
 learning_rate
 objective
 reconstruction_error
 total_seconds_last_epoch
 training_seconds_this_epoch
 Compiling accum...
 graph size: 91
 Compiling accum done. Time elapsed: 0.814388 seconds
 Monitoring step:
 Epochs seen: 0
 Batches seen: 0
 Examples seen: 0
 bias_hid_max: -2.00000023842
 bias_hid_mean: -2.00000023842
 bias_hid_min: -2.00000023842
 bias_vis_max: 0.0
 bias_vis_mean: 0.0
 bias_vis_min: 0.0
 h_max: 8.27688127174e-05
 h_mean: 1.74318574864e-05
 h_min: 9.55541054282e-06
 learning_rate: 0.100000016391
 objective: 14.4279642105
 reconstruction_error: 70.9217071533
 total_seconds_last_epoch: 0.0
 training_seconds_this_epoch: 0.0
 /home/beat/work/pylearn2/pylearn2/training_algorithms/sgd.py:586: UserWarning: The channel that has been chosen for monitoring is: objective.
 str(self.channel_name) + '.')
 Time this epoch: 25.525986 seconds
 Monitoring step:
 Epochs seen: 1
 Batches seen: 30000
 Examples seen: 150000
 bias_hid_max: -0.257617294788
 bias_hid_mean: -1.75261676311
 bias_hid_min: -2.36502599716
 bias_vis_max: 0.160428583622
 bias_vis_mean: -0.00086586253019
 bias_vis_min: -0.220651045442
 h_max: 0.410839855671
 h_mean: 0.0542325824499
 h_min: 0.0116947097704
 learning_rate: 0.100000016391
 objective: 3.62195086479
 reconstruction_error: 29.2136707306
 total_seconds_last_epoch: 0.0
 training_seconds_this_epoch: 25.5259819031
 monitoring channel is objective
 Saving to cifar_grbm_smd.pkl...
 Saving to cifar_grbm_smd.pkl done. Time elapsed: 0.025346 seconds
 Time this epoch: 25.384062 seconds
 Monitoring step:
 Epochs seen: 2
 Batches seen: 60000
 Examples seen: 300000
 bias_hid_max: -0.305719166994
 bias_hid_mean: -2.00991845131
 bias_hid_min: -2.78829908371
 bias_vis_max: 0.185681372881
 bias_vis_mean: -0.000737291120458
 bias_vis_min: -0.177558258176
 h_max: 0.394594907761
 h_mean: 0.0468980930746
 h_min: 0.0104174567387
 learning_rate: 0.100000016391
 objective: 3.38024163246
 reconstruction_error: 28.5441741943
 total_seconds_last_epoch: 25.89610672
 training_seconds_this_epoch: 25.3840618134
 monitoring channel is objective
 Saving to cifar_grbm_smd.pkl...
 Saving to cifar_grbm_smd.pkl done. Time elapsed: 0.025256 seconds
 Time this epoch: 25.465318 seconds
 Monitoring step:
 Epochs seen: 3
 Batches seen: 90000
 Examples seen: 450000
 bias_hid_max: -0.302897870541
 bias_hid_mean: -2.12691950798
 bias_hid_min: -3.09918379784
 bias_vis_max: 0.168909445405
 bias_vis_mean: 0.000913446128834
 bias_vis_min: -0.161776274443
 h_max: 0.389986425638
 h_mean: 0.0441780276597
 h_min: 0.00789143983275
 learning_rate: 0.100000016391
 objective: 3.30141615868
 reconstruction_error: 28.4002838135
 total_seconds_last_epoch: 25.7539100647
 training_seconds_this_epoch: 25.4653167725
 monitoring channel is objective
 Saving to cifar_grbm_smd.pkl...
 Saving to cifar_grbm_smd.pkl done. Time elapsed: 0.025410 seconds
 Time this epoch: 25.288767 seconds
 Monitoring step:
 Epochs seen: 4
 Batches seen: 120000
 Examples seen: 600000
 bias_hid_max: -0.329535990953
 bias_hid_mean: -2.19633841515
 bias_hid_min: -3.181681633
 bias_vis_max: 0.171140804887
 bias_vis_mean: -0.000430780899478
 bias_vis_min: -0.197250261903
 h_max: 0.39044636488
 h_mean: 0.0431808494031
 h_min: 0.00783428177238
 learning_rate: 0.100000016391
 objective: 3.28094577789
 reconstruction_error: 28.5033798218
 total_seconds_last_epoch: 25.8351802826
 training_seconds_this_epoch: 25.2887706757
 monitoring channel is objective
 growing learning rate to 0.101000
 Saving to cifar_grbm_smd.pkl...
 Saving to cifar_grbm_smd.pkl done. Time elapsed: 0.025562 seconds
 Saving to cifar_grbm_smd.pkl...
 Saving to cifar_grbm_smd.pkl done. Time elapsed: 0.025118 seconds

>
cifar_grbm is output.~
~
To check the results, apply show_weights.py and cifar_grbm_smd.pkl. If you execute it without any configuration, you will receive a warning for asking the configuration. Apply the instruction on the warning. 
To check the results, apply show_weights.py and cifar_grbm_smd.pkl. If you execute it without any configuration,~
you will receive a warning for asking the configuration. Apply the instruction on the warning. 
 $ export PYLERN2_VIEWER_COMMAND=”Eog--new-instance”
Then, try to execute the example, again.~
 $  show_weights.py cifar_grbm_smd.pkl
As the command line above is executed, a Gabor filter, which is generated from the learning experience of pylearn2, is displayed on Eye of Gnome.~
#ref(01.png,,100%) ~

>
Using --out, set up the options. Then, output the results on the image file. The command lines below indicate how to apply the options and show the outcomes.~
 $ show_weights.py cifar_grbm_smd.pkl --out=weights.png
 Using gpu device 0: Tesla K20c
 making weights report
 loading model
 loading done
 loading dataset...
 ...done
 smallest enc weight magnitude: 3.91688871559e-07
 mean enc weight magnitude: 0.0586505495012
 max enc weight magnitude: 0.99245673418
 min norm: 0.899496912956
 mean norm: 1.37919783592
 max norm: 1.96336913109

* Revision History [#f37ec3f2]
>
- 2015/02/13 This article is initially uploaded

Front page   Edit Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   RSS of recent changes