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