CUdaPYthonDeepLEarning Machine Learning
cupydle es una libreria simple y sencilla, que provee todas las funcionalidades necesarias para la ejecucion de Redes de Creencia Profunda (DBN) sobre placas de procesamiento grafico para proposito general (GP-GPU).
cupydle posse una inteface 'pythonica', y además, el codigo puede ser ejecutado de forma transparente tanto en GPU como en CPU gracias a Theano (http://deeplearning.net/software/theano/).
Documentacion: DOCS
✅ finished
❎ not done
-
Generales
- Optimizacion inteligente en la carga de memoria con los datos, chunk_size automatico
- Persistencia de los datos optimizada, unico archivo comprimido de dimension variable
-
Maquinas de Boltzmann Restringidas (RBM)
-
Entrenamiento
- MacroBatch, copia por chunks hacia la GPU.
- Algoritmo de Divergencia Constrastiva de n pasos de Gibbs (CD_n)
- Algoritmo de Divergencia Constrastiva Persistente de n pasos de Gibbs (PCD_n)
- Momento, batch-learning
- Unidades Ocultas Binarias.
- Unidades Ocultas Gausianas.
- Función de costo, error cuadratico medio (MSE).
- Función de costo, entropia cruzada.
- Función de costo, Energia Libre.
-
Evaluación
- Muestreo desde el modelo.
- Visialización de Filtros.
- Almacenamiento y recuperación de las representaciones ocultas.
-
-
Redes de Creencia Profunda (DBN)
- Entrenamiento (no supervisado)
- Apilado de RBMs en capas.
- Almacenamiento.
- Entrenamiento (supervisado)
- Recuperacion de las capas, pesos ya entrenados.
- Ajuste de los pesos por medio de un Perceptron Multi-Capa (MLP).
- Inicialización de los pesos.
- Entrenamiento (no supervisado)
-
Redes Neuronales Generales (MLP)
- Entrenamiento
- Numero variable de capas, capas logisticas, softmax.
- Funciones de activacion varias, Sigmoidea.
- Algoritmo del Gradiente Descendiente Estocastico (SGD)
- Calculo de gradientes, retropropagacion del error.
- Tecnicas
- [] patience
- rapid evaluation
- momento, batch-learning.
- Función de costo, entropia cruzada.
- Función de costo, error cuadratico medio (MSE).
- Entrenamiento
-
Validacion y testing
- Validacion Cruzada
- K_fold
- LabelKFold
- LeaveOneOut
- StratifiedKFold
- [] Parameters Searching
- [] Grid Search
- [] Random Grid Search
- Validacion Cruzada
-
Pruebas
- MNIST
- Preparación de los datos, descarga y manipulación.
- Visualización de los datos.
- Visualización de los filtros.
⁉️ (realizar la funcion en rbm que genere los filtro a partir de patches cuadrados...) - Muestreo de varios ejemplos a traves de sucesivas cadenas de Markov.
- RML
- Pre-procesamiento de datos crudos
- videos
- audio
- Reduccion de dimension de los datos crudos
- PCA a los videos
- f0_enegy, coeficientes ceptrales, windowing, etc a los audios
- Normalizacion de los datos
- z_score
- whitening
- min_max
- Pre-procesamiento de datos crudos
- MNIST
En la maquina Host debe estar instalado el driver correspondiente Nvidia al modelo de la placa, en el caso de pruebas es Nvidia
~$: /proc/driver/nvidia/gpus/0000\:01\:00.0/information
Model: Tesla C1060
IRQ: 46
GPU UUID: GPU-ffb9af25-05ad-7d83-5e0b-a397677ec9fe
Video BIOS: 62.00.7a.00.05
Bus Type: PCIe
DMA Size: 40 bits
DMA Mask: 0xffffffffff
Bus Location: 0000:01:00.0
~$: cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 340.29 Thu Jul 31 20:23:19 PDT 2014
GCC version: gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-6ubuntu2)
Pasos, en ubuntu, fue requerido por cuestiones de compatibilidad por la placa la version de CUDA 6.0, aunque versiones mas recientes (7.5) funcionan con normalidad:
:$ wget http://developer.download.nvidia.com/compute/cuda/6_0/rel/installers/cuda_6.0.37_linux_64.run
# o bien la 6.5
:$ wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run
Cuda Toolkit requiere como a lo mas la version de compilador GCC 4.6
:$ chmod a+x cuda_6.0.37_linux_64.run
:$ ./cuda_6.0.37_linux_64.run
# controlar las variables de entorno
:$ export PATH=/usr/local/cuda/bin:${PATH}
:$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
:$ export PYTHONPATH=/root/cupydle/:${PYTHONPATH}
# probar el correcto funcionamiento
:$ cd [ruta de los ejemplos]/NVIDIA_CUDA-6.0_Samples/deviceQuery ; make ; ./deviceQuery
:$ cat /proc/driver/nvidia/version
:$ nvidia-smi
:$ nvcc --version
La libreria fue probada sobre un entorno 'virtualizado' del estilo Docker.
A continuacion se detallan algunos pasos para su correcta intalación, los pasos se encuentran en el 'Dockerfile'.
-
Se debe ejecutar siempre antes del inicio del Docker Container el ejecutable deviceQuery para que la unidad GPU sea visible.
-
Crear la imagen a partir del Dockerfile, en el caso de que sea necesario ejecutar si o si el paso anterior este no funcionara, se debera realizar la instalacion manual (debido a que las unidades no son cargadas al inicio con el build). Alguno de los siguientes pasos:
-
docker build -t "ubuntu/cuda/theano/python3" .
-
sudo docker run -it --privileged=true --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/nvidia0:/dev/nvidia ubuntu:14.04 /bin/bash
correr en modo previligiado y cargar los devices (probar con docker-nvidia o docker solo)
sudo nvidia-docker run -it --privileged=true --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/nvidia0:/dev/nvidia ubuntu/cuda/theano/python3 /bin/bash
-
Cheat Sheet
-
contenedores (-q solo ids)
docker ps -a
-
imagenes
docker images -a
-
borrar contenedor [ docker rm $(docker ps -aq) ]
docker rm
-
borrar imagen
docker rmi
-
crear imagen
docker build -t "nombre/de/mi/imagen/:tag" /path:dockerfile
-
correr contenedor (iterativo -i, borrar contenedor al salir --rm)
sudo docker run -it --privileged=true --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/nvidia0:/dev/nvidia <imagen_id> /bin/bash
-
salir sin exit del contenedor
ctrl+p y luego ctrl+q
-
commitear los cambios
docker commit
-
volver al container
docker attach
-
copiar un archivo del container en ejecucion
docker cp :absolut/path/to/file destination/path/in/host
Ponzoni Cuadra, Nelson E. (@lerker)
Algun problema? Mandame un mail a npcuadra@gmail.com