Instalación de CUDA 7.5 en Debian 8 con Nvidia Optimus

Instalación de CUDA 7.5 en Debian 8 con Nvidia Optimus

CUDA es una plataforma de computación paralela y un modelo de programación desarrollado por NVIDIA. Permite grandes aumentos en el rendimiento de cómputo al aprovechar la potencia de la unidad de procesamiento gráfico (GPU).

En esta guía veremos cómo instalar CUDA en Debian 8 (Jessie) en equipos que cuentan con la tecnología Nvidia Optimus, presente principalmente en notebooks.


Instalación de drivers

Esta guía se basa en una primera parte que desarrollé hace un tiempo sobre la instalación de drivers Nvidia Optimus. Sin embargo, existen algunas diferencias importantes, ya que la versión requerida por CUDA 7.5 es muy superior a la que ofrece Debian a través de los repositorios convencionales. Por ello, debemos realizar los siguientes pasos:

Reiniciamos el sistema y, al iniciar, presionamos:

Ctrl + Alt + F2

Ampliar repositorios

Editamos la lista de repositorios:

sudo nano /etc/apt/sources.list

Agregamos al final del archivo:

# jessie-backports
deb http://ftp.debian.org/debian jessie-backports main contrib non-free

Los backports de Debian son repositorios que contienen paquetes provenientes de la rama testing, recompilados y adaptados para poder instalarse y utilizarse en la rama stable.

Actualizamos el sistema (no se preocupen, los paquetes no se actualizarán automáticamente desde backports):

apt-get update && apt-get upgrade && apt-get dist-upgrade

Eliminación de drivers existentes

Eliminamos los drivers por defecto de Nvidia y otros controladores de video:

sudo apt-get remove --purge nvidia-* xserver-xorg-video-nouveau xserver-xorg-video-intel

Instalación de dependencias necesarias

Instalamos los paquetes requeridos:

sudo apt-get -t jessie-backports install \
bumblebee-nvidia primus xserver-xorg-video-intel \
libtxc-dxtn-s2tc0 libtxc-dxtn-s2tc-bin nvidia-cg-toolkit \
mesa-utils mesa-utils-extra libegl1-mesa libegl1-mesa-drivers \
libgl1-mesa-dri libglapi-mesa libgles1-mesa libgles2-mesa \
libglu1-mesa libopenvg1-mesa mesa-vdpau-drivers \
uuid-runtime

Configuración de Bumblebee

Editamos el archivo de configuración de Bumblebee para indicar que utilizaremos el controlador de NVIDIA. Cambiamos:

  • Driver= por Driver=nvidia
  • KernelDriver= por KernelDriver=nvidia-current
sudo nano /etc/bumblebee/bumblebee.conf

Editamos el archivo de configuración de Xorg para Nvidia y registramos la dirección PCI de la tarjeta de video (por ejemplo, 01:00.0):

nano /etc/bumblebee/xorg.conf.nvidia

La sección Device debe quedar así:

Section "Device"
    Identifier  "DiscreteNvidia"
    Driver      "nvidia"
    VendorName  "NVIDIA Corporation"
    BusID       "PCI:01:00:0"
EndSection

Configuración de usuario y sensores

Agregamos nuestro usuario al grupo bumblebee:

usermod -a -G bumblebee USERNAME

Donde USERNAME es el nombre de usuario del sistema.

Configuramos los sensores de temperatura (responder yes a todas las preguntas):

sudo sensors-detect

Reiniciamos el sistema:

sudo reboot

Instalación de CUDA 7.5

Descargamos e instalamos VirtualGL (procura descargar el paquete .deb correspondiente a la versión latest, no beta):

http://sourceforge.net/projects/virtualgl/files/

Instalamos el paquete:

dpkg -i virtualgl*.deb

Instalamos las dependencias necesarias:

sudo apt-get install freeglut3-dev

Descarga e instalación de CUDA

Descargamos CUDA 7.5:

wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
chmod +x cuda*.run
sudo ./cuda*.run

Actualmente, la versión más reciente es la 7.5.18. Puedes descargar la que más te acomode desde el sitio oficial seleccionando la versión de Ubuntu 15.04, que es compatible con Debian.

Durante la instalación, respondemos lo siguiente:

  • Aceptar el EULA
  • Yes a unsupported configuration
  • No a graphics driver
  • Yes a CUDA toolkit
  • Aceptar la ubicación por defecto
  • Yes al enlace simbólico
  • Yes a los ejemplos
  • Yes a la ubicación por defecto de los ejemplos

Variables de entorno

Exportamos las rutas necesarias:

export PATH=$PATH:/opt/VirtualGL/bin:/usr/local/cuda-7.5/bin

Agregamos lo mismo al final de ~/.bashrc:

nano ~/.bashrc

Configuración del linker dinámico

Editamos el archivo:

nano /etc/ld.so.conf

Debe quedar así:

include /etc/ld.so.conf.d/*.conf
/usr/local/cuda-7.5/lib64

Aplicamos los cambios:

sudo ldconfig

Instalamos libcuda1 (si no se hace, se producirá un error de versión del controlador):

sudo apt-get -t jessie-backports install libcuda1

Comprobación de la instalación de CUDA 7.5

Accedemos a la carpeta de ejemplos y compilamos deviceQuery:

cd /usr/local/cuda-7.5/samples/NVIDIA_CUDA-7.5_Samples/1_Utilities/deviceQuery/
make

Ejecutamos la prueba:

optirun ./deviceQuery

Si el resultado final es Result = PASS, la instalación se realizó correctamente. Si no, se recomienda repetir el proceso desde el inicio asegurándose de seguir todos los pasos.


Ejemplo de salida

deviceQuery, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.5
Device 0 = GeForce GTX 860M
Result = PASS