Integración de CUDA con Theano

Integración de CUDA con Theano

estoy trabajando contéano, un punto de referencia de aprendizaje profundo, en una máquina Ubuntu Mate 16.04 recién instalada. Theano puede utilizar la aceleración de GPU para acelerar los cálculos. Tengo una tarjeta de video NVIDIA K2200M compatible con CUDA y está correctamente instalada, como nvidia-smimuestra el comando:

+------------------------------------------------------+                       
| NVIDIA-SMI 361.42     Driver Version: 361.42         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2200M       Off  | 0000:01:00.0     Off |                  N/A |
| N/A   31C    P8    N/A /  N/A |    212MiB /  2047MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1090    G   /usr/lib/xorg/Xorg                             200MiB |
|    0      7931    G   /usr/lib/firefox/firefox                         1MiB |
+-----------------------------------------------------------------------------+

Un poco de historia: Theano debe configurarse para que se definan algunas variables ambientales, como $CUDA_ROOTy se refieren a, /usr/local/cudapero la instalación nvidia-cuda-*desde el repositorio oficial de Ubuntu Mate no crea esas carpetas. Sin embargo, Theano ofrece un código Python que puede ayudar a determinar si los cálculos se realizan con la CPU o la GPU y, sorprendentemente, Theano encuentra la instalación de CUDA.

Aquí viene el problema: el sistema reconoce CUDA, pero parece que CUDA no puede encontrar mi GPU y aparece el error WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable).

Le escribo a askubuntu.comy no a los desarrolladores de Theano porque, al encontrar este problema, desinstalé nvidia-cuda-*e instalé CUDA desde el paquete oficial proporcionado por NVIDIA a continuación.esteguía, por lo que /usr/local/cudase creó lo antes mencionado y, nuevamente, el código de Theano reconoció la instalación de CUDA pero aún no encontraba mi GPU. Esa es la razón por la que creo que podría ser un problema de Ubuntu en lugar de ser una implementación defectuosa por parte de Theano.

Respuesta1

Me di cuenta de que no era un problema de Ubuntu sino de Theano, ya que instalé CUDA nuevamente desde la fuente que mencioné en el OP y logré ejecutar correctamente datos de muestra del paquete CUDA proporcionado por NVIDIA, descartando (en mi opinión inexperta) un problema de integración entre NVIDIA-cuda-toolkit y los controladores NVIDIA.

Para aquellos (en el futuro) que tengan el mismo problema que yo, el problema parece estar en el theano.sandbox.cudamódulo, cuando __init__.pyintenta compilar cuda_ndarray.cuen las líneas 168-175 (creo, ya que modifiqué el archivo ligeramente), cuando ese archivo llama al function compiler.compile_str(...), que es un archivo que creo fue creado por el equipo de desarrollo de Theano. NVCC se ejecuta correctamente pero hay problemas al compilar cuda_ndarray.

Así que marcaré esta pregunta como respondida tan pronto como Askubuntu me lo permita.

Respuesta2

Si está utilizando CUDA 7.5, asegúrese de seguir las instrucciones oficiales:

CUDA 7.5 no es compatible con la versión predeterminada de g++. Instale una versión compatible y conviértala en la predeterminada.

sudo apt-get install g++-4.9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Si el código de prueba de Theano GPU tiene un error:

ERROR (theano.sandbox.cuda): No se pudo compilar cuda_ndarray.cu: libcublas.so.7.5: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio ADVERTENCIA (theano.sandbox.cuda): CUDA está instalado, pero la gpu del dispositivo está no disponible (error: cuda no disponible)

Simplemente usando ldconfigel comando para vincular el objeto compartido de CUDA 7.5:

sudo ldconfig /usr/local/cuda-7.5/lib64

información relacionada