Instalando Drivers de Nvidia y CUDA 9.1 en Debian Stretch

English version of this post.
Éste post explica cómo instalar CUDA 9.1 Production Release en un sistema Debian Stretch. Lo primero que se debe hacer es descargar el driver de la página oficial de Nvidia y seleccionar el modelo de la tarjeta de video que se tiene. En mi caso, tengo un servidor con 2 tarjetas de video, la primera es una GeForce GTX660 y la segunda es una GeForce GTX650. Si no se está seguro de cuál versión del driver se debería instalar, ésta información se puede verificar en el siguiente enlace.

http://www.nvidia.com.mx/Download/index.aspx?lang=en-us

La última versión del driver disponible en el caso de mis tarjetas de video es 390.25 y está disponible en el siguiente enlace http://us.download.nvidia.com/XFree86/Linux-x86_64/390.25/NVIDIA-Linux-x86_64-390.25.run, lo mas deseable es asegurarse de descargar la última versión del driver disponible para tu tarjeta de video.

También, es necesario descargar el CUDA Toolkit 9.1 de la página de Nvidia localizado en el siguiente enlace https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1704&target_type=runfilelocal. El archivo de instalación del toolkit que se necesita es la versión RUN para Ubuntu, el nombre del archivo es: cuda_9.1.85_387.26_linux.run.

Ahora se procede a verificar los requerimientos para instalar CUDA. Primero que nada se confirma que se tiene un dispositivo que soporte GPUs.

cuda_9_1_install.sh

# verify we have a cuda capable gpu
lspci | grep -i nvidia

La instrucción anterior debería arrojar resultados, en caso contrario, se debe verificar el estado de la tarjeta de video. Después, se procede a checar nuestra versión de Linux

cuda_9_1_install.sh

# Linux version
uname -m && cat /etc/*release

Lo que nos indica que tenemos Debian Stretch y es la versión que se está utilizando y la soportada para este post

x86_64
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Ahora se necesita comprobar que se tiene un compilador válido GCC

cuda_9_1_install.sh

# verify gcc version 
gcc --version

Si no se cuenta con un compilador GCC válido se puede instalar con el siguiente comando

cuda_9_1_install.sh

# gcc install
sudo apt-get install build-essential

Ahora vamos a proceder a instalar los headers de linux desde nuestro repositorio para poder compilar el driver de Nvidia, hacemos ésto mediante el siguiente comando

cuda_9_1_install.sh

# header dependencies
sudo apt-get install linux-headers-$(uname -r)

Antes de proceder con el proceso de instalación se necesita desinstalar cualquier versión de CUDA que que se haya instalado previamente, si ésta es la primera vez que se instala CUDA se puede omitir este paso. Para desinstalar versiones anteriores de CUDA se utiliza el siguiente comando

cuda_9_1_install.sh

# cuda uninstall
sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl

Donde X y Y es la versión de CUDA. Si se está actualizando el driver de Nvidia no se necesita hacer nada ya que el instalador remueve los drivers anteriores automáticamente. Si se quiere desinstalar el driver de CUDA se puede hacer con el siguiente comando.

cuda_9_1_install.sh

# cuda driver uninstall
sudo /usr/bin/nvidia-uninstall

Es probable que se requiera desinstalar los paquetes nvidia en caso de que se hayan instalado mediante el repositorio. Para esto podría ser suficiente ejecutar el siguiente comando

sudo apt-get remove 'nvidia*'

Una vez completados los pasos anteriores y ya que se cuenta con los archivos necesarios para la instalación se procede a deshabilitar el driver nouveau el cual es el driver default que viene con las versiones de Debian. Para ésto se crea un nuevo archivo

cuda_9_1_install.sh

# edit debian driver configuration file
sudo vim /etc/modprobe.d/disable-nouveau.conf 

Y se le agrega el siguiente contenido

cuda_9_1_install.sh

# blacklist defualt driver
blacklist nouveau
options nouveau modeset=0

Nota: para verificar el driver nouveau está o no corriendo, se ejecuta el siguiente comando y en caso de arrojar algún resultado eso significa que se tiene el driver nouveau corriendo en el sistema

cuda_9_1_install.sh

# verify driver
lsmod | grep nouveau

Después de haber creado el archivo para bloquear el driver default, procedemos a reiniciar el sistema en modo default. Una vez reiniciado vamos a notar que la resolución ha bajado de calidad, ésto significa que el driver default nouveau no fue cargado por lo que se procede a remover el driver nouveau completamente de nuestro sistema con el siguiente comando

cuda_9_1_install.sh

# remove
sudo apt-get remove --purge xserver-xorg-video-nouveau

Una vez removido el driver se procede a reiniciar el sistema en modo recovery. Una vez reiniciado y estando en la consola en modo root vamos a proceder con el proceso de instalación del driver. Primero, se necesita saber con qué versión del compilador fué compilado el kernel, ésto debido a que el sistema necesita compilar el driver de Nvidia. Si no se sabe la versión del compilador ni del kernel, se puede saber esa información mediante el siguiente comando

cuda_9_1_install.sh

# find curr gcc version
cat /proc/version

Una vez que se sabe la versión correcta del compilador, se necesita setearlo por medio de un export de la siguiente forma (si se tiene una version mayor de 4.8 no es necesario el seteo)

cuda_9_1_install.sh

# set gcc version
export CC=gcc-4.8

Ahora se puede proceder con la instalación del driver, se navega al directorio de descarga del driver y se ejecuta

cuda_9_1_install.sh

# execute driver install
sh NVIDIA-Linux-x86_64-390.25.run

Una vez que la instalación sea finalizada, se procede a reiniciar nuestro sistema. Nótese que la resolución subió de calidad lo que significa que nuestros drivers Nvidia se instalaron correctamente. Ahora, se procede con la instalación del Cuda toolkit de la siguiente forma

cuda_9_1_install.sh

# execute toolkit install
sudo sh cuda_9.1.85_387.26_linux.run

Cuando se nos pregunte se necesita seleccionar la opción de no instalar el driver de Nvidia ya que ya se ha instalado previamente, y, se selecciona el directorio default de instalación para los ejemplos. Lo último que se tiene que hacer es compilar dichos ejemplos y ejecutarlos, se hace ésto navegando al directorio de instalación de los ejemplos mediante el comando make. Usualmente el directorio default de los ejemplos radica en nuestro home por lo que el siguiente comando debería hacer el truco

cd ~/NVIDIA_CUDA-9.1_Samples
make

¡Y eso es todo!

Aquí dejo algunos links de referencia

El manual de instalación para cuda
https://developer.download.nvidia.com/compute/cuda/9.1/Prod/docs/sidebar/CUDA_Installation_Guide_Linux.pdf
CUDA Quick Start Guide
http://developer.download.nvidia.com/compute/cuda/9.1/Prod/docs/sidebar/CUDA_Quick_Start_Guide.pdf
Documentación oficial del CUDA Toolkit
http://docs.nvidia.com/cuda/index.html
Página de descargas de CUDA
https://developer.nvidia.com/cuda-downloads
Página de descargas de drivers de Nvidia
http://www.nvidia.com.mx/Download/index.aspx?lang=en-us
Presentación sobre el performance de CUDA 9.1
http://on-demand.gputechconf.com/gtc/2017/video/s7495-jain-optimizing-application-performance-cuda-profiling.mp4
Release notes del CUDA Toolkit
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

¡Saludos! 🙂
-Yohan

Leave a Reply

Your email address will not be published. Required fields are marked *