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-smi
muestra 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_ROOT
y se refieren a, /usr/local/cuda
pero 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.com
y 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/cuda
se 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.cuda
módulo, cuando __init__.py
intenta compilar cuda_ndarray.cu
en 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 ldconfig
el comando para vincular el objeto compartido de CUDA 7.5:
sudo ldconfig /usr/local/cuda-7.5/lib64