24 jul 2013

Optimus Technology: Instalando CUDA Toolkit con Bumblebee Project en GNU-Linux (Ubuntu/Debian/Mint)


Hace unos meses me hice de una Laptop nueva, una Lenovo ideapad y480 cuyas especificaciones son:

  • Video: Intel® HD Graphics / Nvidia Geforce GT 640M LE
  • RAM: 6GB (1333MHz) 
  • Pantalla: 14" (1366x768) LED WXGA 
  • Disco Duro: 1TB 5400rpm
  • Procesador: Intel® Core™ i7-3630QM (6M Cache, 2.40 GHz)
La idea era tener una maquina potente y con una tarjeta de vídeo CUDA capable en caso de tener que usar programación en paralelo en mi proyecto de tesis. Al principio todo era alegría  la maquina era todo lo que esperaba, con Windows... Hice respaldos, copie drivers, hice los discos de recuperación y formatie, cree particiones e instale Ubuntu 12.04 LTS, de maravilla la maquina jalaba perfectamente, no hubo problemas con dispositivos así que me puse a instalar paquetes, uno tras otro sin error, pero al querer instalar CUDA Toolkit todo cambio...
Optimus Technology

Después de un rato de buscar en Google encontré que no era el único con ese problema, resulto ser que mi nueva laptop (al igual que muchos modelos nuevos) tenia no 1, sino 2 tarjetas de vídeo!!
Una tarjeta (Principal) Intel HD Graphics la cual es usada la mayor parte del tiempo y otra tarjeta (Secundaria) Nvidia Geforce GT 640M LE que se avienta la talacha pesada, cuando se le solicita, esto con el fin de optimizar el uso de energía y maximizar la duración de la batería, excelente!! Pero... 
El problema de esta tecnología llamada Optimus Technology es que no tiene el mismo soporte para GNU Linux que para Windows (Cosa que incluso provoco que Linus Torvalds le mandara un "afectuoso" saludo a Nvidia. Vídeo). En pocas palabras el driver de windows gestiona el uso de ambas tarjetas mientras que en Linux.. No.
Ante la posibilidad de haber comprado un equipo que no me iba a servir me sentí un tanto frustrado, pero no me di por vencido y después de un rato de estar buscando en foros me tope con un proyecto llamado Bumblebee.
Bumblebee Project

En pocas palabras Bumblebee permite hacer que la tarjeta secundaria (La Nvidia) funcione cuando se lo solicitemos, no es automático como en Windows pero funciona y eso es lo que me importa. Así que después de horas e incluso días perfeccione el modo en el cual (al menos para mi equipo) funciona.
Instalando Bumblebee y CUDA Toolkit.
Requisitos: 
  • Ubuntu / Mint / Debian instalado
  • CUDA Toolkit (Para la distro instalada) Descargar

Como primer paso abrimos la terminal y desde ahí añadimos los repositorios:
sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
Y actualizamos la lista de paquetes: 

sudo apt-get update && sudo apt-get upgrade
Instalamos Bumblebee:

sudo apt-get install bumblebee bumblebee-nvidia linux-headers-generic
Removemos cualquier driver que hayamos o se haya preinstalado:
sudo apt-get remove --purge nvidia* 
sudo apt-get remove --purge xserver-xorg-video-nouveau 
Modificamos el archivo /etc/modprobe.d/blacklist.conf añadiendo al final:

blacklist vga16fb
blacklist nouveau 
blacklist rivafb 
blacklist nvidiafb 
blacklist rivatv
Actualizamos los linux-headers e instalamos GCC, G++ y freeglut:
sudo apt-get install build-essential gcc-4.4 g++-4.4 freeglut3-dev linux-headers-$(uname -r) 
sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so
OJO: En caso de estar siguiendo los pasos desde este post les recomiendo tomar nota de los siguientes pasos ya que a continuación tenemos que detener el gestor de sesiones de linux, saliendo del modo gráfico. Listos?? Continuemos.

Para detener el modo gráfico en Ubuntu y Debian tenemos que detener lightdm:

sudo service lightdm stop 

Para detener el modo gráfico en Mint tenemos que detener MDM:

sudo service lightdm stop 
Una vez hecho el monitor se quedara en negro, presionamos Crtl + Alt + F1 y nos logueamos con nuestro user y pass, nos movemos al directorio donde descargamos el archivo de CUDA Toolkit (Algo como cuda_5.0.35_linux_64_ubuntu11.10-1.run, apartir de ahora lo llamare CUDA.run), le cambiamos los permisos
sudo chmod 777 CUDA.run
Y lo instalamos teniendo cuidado de solo instalar el Toolkit y los ejemplos (Samples). 
sudo sh CUDA.run -override compiler
Solo nos resta reiniciar el equipo y comprobar que este funcionado la tarjeta.
sudo reboot
Para comprobar que se haya instalado correctamente bumblebee abrimos una terminal y escribimos:
optirun glxspheres

Cada que queramos forzar al sistema a usar la tarjeta de vídeo Nvidia debemos escribir optirun antes del programa, en caso contrario nos dirá que el dispositivo no es compatible (En caso de correr programas con CUDA) o simplemente correrán con la tarjeta "Primaria" con el rendimiento que eso conlleva. Si no da ningún error veremos un ejemplo del uso de la memoria donde nos dará un poco de información sobre el sistema. 
Ahora ya para terminar compilamos y corremos los ejemplos de CUDA para verificar que funciona esto lo podemos hace como lo dice la CUDA Toolkit Documentation.

Fuentes:
Ubuntu Wiki
CUDA Toolkit Documentation
AMMARKOV `S PERSONAL WEBSITE

No hay comentarios:

Publicar un comentario