¿Cómo puedo hacer que nVidia CUDA u OpenCL trabajen en una computadora portátil con tarjeta discreta nVidia / Intel Integrated Graphics?

28

Antecedentes: soy un artista 3D (como hobby) y recientemente comencé a usar Ubuntu 12.04 LTS como arranque dual con Windows 7. Se ejecuta en mi computadora portátil Toshiba bastante nueva de 64 bits con una GPU nVidia GeForce GT 540M ( tarjeta grafica). Sin embargo, también tiene Intel Integrated Graphics (que sospecho que Ubuntu ha estado usando).

Entonces, cuando renderizo mis escenas 3D en imágenes en Windows, puedo elegir entre usar mi CPU o mi GPU nVidia (más rápido). Desde la aplicación 3D, puedo configurar la GPU para usar CUDA u OpenCL. En Ubuntu, no hay opción de GPU.

Después de investigar (¿demasiado?) Sobre los problemas con Linux y la tecnología nVidia Optimus, estoy un poco más iluminado, pero mucho más confundido.

No me importa nada la tecnología Optimus, ya que la duración de la batería no es un problema para mí.

Aquí está mi pregunta: ¿Qué puedo hacer para poder usar programas que utilicen CUDA (como Blender) en mi GPU nVidia en Ubuntu? ¿Necesitaré controladores nVidia? (He oído que no funcionan bien con las configuraciones de Optimus en Linux). ¿Hay al menos una forma de usar OpenCL en mi GPU en Ubuntu?

Peter Cassetta
fuente

Respuestas:

27

Acabo de hacer un poco de experimentación y puedo confirmar las declaraciones de Eric Appleman de que Bumblebee no es necesario para CUDA. (más sobre Bumblebee : ¿es una NVIDIA GeForce con tecnología Optimus compatible con Ubuntu? )

Sin embargo, cuando se necesita para mostrar ejemplos gráficos usando OpenGL, se hace necesario algo así como abejorro para los sistemas de Optimus, de lo contrario o bien no aparece nada en la pantalla o aparece el error:

ERROR: Support for necessary OpenGL extensions missing.

Al ejecutar un programa CUDA, debe instalar el kit de herramientas CUDA y un controlador nvidia. Si tiene la intención de compilar programas, también necesita el SDK. Los instaladores se pueden encontrar en http://developer.nvidia.com/cuda-downloads , lea las instrucciones a continuación antes de descorchar su computadora portátil Optimus.

Instalando CUDA

Conductor

Recomiendo instalar el controlador nvidia desde el administrador de paquetes de Ubuntu. Si instala Bumblebee, no necesita preocuparse por el controlador. De lo contrario, después de la instalación, deshabilite las bibliotecas de nvidia como se describe en https://askubuntu.com/a/107746/6969 . Si no lo hace, perderá la aceleración 3D y posiblemente se atasque en una resolución baja.

Kit de herramientas

Básicamente tienes que descargar el instalador, hacerlo ejecutable y ejecutarlo. - Descargue el instalador. Al escribir estas líneas, 4.2.9 es el controlador más reciente. Como tengo un sistema operativo de 64 bits, uso el paquete de Ubuntu 11.04 de 64 bits (aunque estoy ejecutando 12.04). Hágalo ejecutable y permita la instalación para /usr/local/cuda:

chmod +x cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
sudo ./cudatoolkit_4.2.9_linux_64_ubuntu11.04.run

Cuando aparece el mensaje de instalación que le pregunta dónde instalar CUDA, simplemente presione Entrar para aceptar el valor predeterminado /usr/local/cuda:

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

Después de la instalación, imprimirá algunos mensajes que sugieren colocar el directorio de la biblioteca cuda en la ruta de búsqueda de la biblioteca:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete

Puede omitir este paso si lo desea, pero luego debe configurarlo LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHmás tarde cuando ejecute un programa.

SDK

Si desea poder compilar aplicaciones CUDA, puede instalar el SDK de una manera similar a la descrita anteriormente. Descargue, hágalo ejecutable y ejecútelo (no como root, por ejemplo, sudo¡ sin !). Sin embargo, al compilar partes de él, tuve que hacer algunos cambios NVIDIA_GPU_Computing_SDK/C/common/common.mk:

  • después de aproximadamente la línea 189 OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu, agregue:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • después de aproximadamente la línea 271, cambie ${RENDERCHECKGLLIB}de ${OPENGLLIB}modo que se vea así

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • Unas pocas (5) líneas más, haga lo mismo, pero elimine -lcudatambién.
  • unas pocas (7) líneas más, haga lo mismo que hizo en la línea 271.

Usando CUDA

CUDA no necesita un servidor X controlado por nvidia para funcionar. En ese caso, puede ejecutar su programa de prueba aleatorio como:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

Si no ha agregado CUDA a la ruta de su biblioteca, necesitará:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

(puede quitar las rutas de 32 bits si su programa es de 64 bits).

Si el programa CUDA tiene algo que mostrar usando OpenGL, debe usar optirun:

 optirun blender

O, si no tenía CUDA agregado a su ruta predeterminada:

LD_LIBRARY_PATH = / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH optirun blender

Lekensteyn
fuente
Gracias, te otorgaré la recompensa (pero aceptaré mi respuesta de Wiki de la comunidad).
Peter Cassetta
Además, 100 representantes y un voto a favor no expresan con precisión cuánto aprecio tu trabajo en el Proyecto Bumblebee. Usted y sus colegas lo han convertido en el gran software que es. Así que gracias. :)
Peter Cassetta
2
De nada, ahora espero que el tiempo nos otorgue una solución final en forma de PRIME con una pila actualizada de xorg + mesa (o Wayland?) :)
Lekensteyn
1
PRIME , Xorg es el servidor de visualización responsable de mostrarle los gráficos, Mesa es para OpenGL, Wayland es un posible sucesor de Xorg.
Lekensteyn
1
Hay que tener en cuenta que CUDA requiere un controlador NVIDIA mínimo. Por ejemplo, CUDA 6.5 necesita al menos NVIDIA 340.21.
Yamaneko
15

Aquí está la respuesta completa (basada en las respuestas de Alex Falappa y Lekensteyn ):

De hecho, es posible obtener GPU nVidia Optimus para ejecutar CUDA en Ubuntu.

Abejorro no es necesario para CUDA. (más sobre Bumblebee : ¿es una NVIDIA GeForce con tecnología Optimus compatible con Ubuntu? )

Sin embargo, cuando se necesita para mostrar ejemplos gráficos usando OpenGL, se hace necesario algo así como abejorro para los sistemas de Optimus, de lo contrario o bien no aparece nada en la pantalla o aparece el error:

ERROR: Support for necessary OpenGL extensions missing. 

Si necesita utilizar un programa intensivo en gráficos como Blender, Bumblebee es una buena opción.

Vaya a Instalación de CUDA si no desea instalar Bumblebee (es decir, si no necesita OpenGL).
De lo contrario, sigue leyendo.

Instalación de abejorro

Siga las instrucciones en ¿Qué tan bien funcionan las computadoras portátiles con Nvidia Optimus?

Actualmente, un desarrollador de Bumblebee los mantiene actualizados.

Una vez que haya instalado Bumblebee y reiniciado, podrá elegir la tarjeta gráfica que usará al iniciar programas mediante el uso del optirunprograma.
Por ejemplo:

optirun blender

Para probar rápidamente si todo funciona correctamente, use:

optirun glxspheres

Verá un programa con esferas giratorias coloridas si todo funciona correctamente.

Verifique que la cadena del proveedor GL en el terminal contiene la palabra nvidia .
Si solo ejecuta glxspheres, verá que la cadena del proveedor contiene la tarjeta Intel.

Al ejecutar un programa CUDA, debe instalar el kit de herramientas CUDA y un controlador nvidia. Si tiene la intención de compilar programas, también necesita el SDK. Los instaladores se pueden encontrar en http://developer.nvidia.com/cuda-downloads , lea las instrucciones a continuación antes de descorchar su computadora portátil Optimus.

Instalando CUDA

Conductor

Recomiendo instalar el controlador nvidia desde el administrador de paquetes de Ubuntu. Si instala Bumblebee, no necesita preocuparse por el controlador. De lo contrario, después de la instalación, deshabilite las bibliotecas de nvidia como se describe en https://askubuntu.com/a/107746/6969 . Si no lo hace, perderá la aceleración 3D y posiblemente se atasque en una resolución baja.

Kit de herramientas

Básicamente tienes que descargar el instalador, hacerlo ejecutable y ejecutarlo. - Descargue el instalador. A partir del 9 de enero de 2013, 5.0.35 es el controlador más reciente. Como tengo un sistema operativo de 64 bits, uso el paquete de Ubuntu 11.10 de 64 bits (aunque estoy ejecutando 12.10) - Hazlo ejecutable y permite la instalación para /usr/local/cuda:

chmod +x cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run
sudo ./cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run

Cuando aparece el mensaje de instalación que le pregunta dónde instalar CUDA, simplemente presione Entrar para aceptar el valor predeterminado /usr/local/cuda:

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

Después de la instalación, imprimirá algunos mensajes que sugieren colocar el directorio de la biblioteca cuda en la ruta de búsqueda de la biblioteca:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete

Puede omitir este paso si lo desea, pero luego debe configurarlo LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHmás tarde cuando ejecute un programa.

SDK

Si desea poder compilar aplicaciones CUDA, puede instalar el SDK de una manera similar a la descrita anteriormente. Descargue, hágalo ejecutable y ejecútelo (no como root, por ejemplo, sudo¡ sin !).

Usando CUDA

CUDA no necesita un servidor X controlado por nvidia para funcionar. En ese caso, puede ejecutar su programa de prueba aleatorio como:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

Si no ha agregado CUDA a la ruta de su biblioteca, necesitará:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

(puede quitar las rutas de 32 bits si su programa es de 64 bits).

Si el programa CUDA tiene algo que mostrar usando OpenGL, debe usar optirun:

 optirun blender

O, si no tenía CUDA agregado a su ruta predeterminada:

LD_LIBRARY_PATH = / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH optirun blender

Instalar una compilación de Blender

(Con núcleos CUDA precompilados)

Cuando ejecuta optirun blender, puede recibir un mensaje de Blender que dice que la compilación del núcleo CUDA falló, y un mensaje en el terminal similar al siguiente:

Compiling CUDA kernel ...
nvcc warning : Option '--opencc-options (-Xopencc)' is obsolete and ignored, when
targeting compute_20, sm_20, or higher
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
CUDA kernel compilation failed, see console for details.

Si desea utilizar la función de representación de GPU de Blender, es posible que necesite una compilación de Blender con núcleos CUDA precompilados. Todas las compilaciones de Blender.org tienen núcleos CUDA precompilados; las compilaciones ppa: cheleb / blender-svn ( más información en esta pregunta ) no lo hacen.

Para instalar una compilación oficial de Blender, simplemente siga las instrucciones establecidas en esta respuesta .

Si ha instalado Blender en /usr/lib/blender, entonces debería poder ejecutar Blender desde el terminal y usar el procesamiento de GPU con:

 optirun '/usr/lib/blender/blender'
Peter Cassetta
fuente
Las versiones recientes de Bumblebee (instaladas desde el abejorro / PPA estable) no necesitan el usermodcomando. Mantendré las instrucciones de instalación en askubuntu.com/a/36936/6969 actualizadas, así que enlaza esa publicación en lugar de copiar esas instrucciones de instalación.
Lekensteyn
@Lekensteyn Ok, ¡listo!
Peter Cassetta
2

La compatibilidad con gráficos híbridos (generalmente gráficos integrados Intel y gráficos discretos Nvidia) en Linux es actualmente un poco problemático. Algo se mueve lentamente en el campo del servidor X pero no contenga la respiración.

Como habrás adivinado, Bumblebee es actualmente un buen camino a seguir.

Recientemente compré una computadora portátil Asus N55 con gráficos Intel / Nvidia. Pude obtener el procesador de Blender Cycles para usar CUDA.

Cuando instalé Ubuntu 12.04, usó los gráficos integrados de forma predeterminada a través del controlador de gráficos Intel. El controlador de gráficos noveau no debe instalarse.

Luego abrí una terminal e hice:

sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia

Después de eso lo hice (según lo recomendado por las instrucciones de instalación):

sudo usermod -a -G bumblebee $USER

Luego reinicié.

Para elegir el controlador que se usará al iniciar programas, use el programa optirun, por ejemplo:

optirun blender

Para probar si todo funciona correctamente, use:

optirun glxspheres

Y verifique que la cadena del proveedor GL contenga la palabra Nvidia. Si corres en su lugar:

glxspheres

La cadena del proveedor debe contener la palabra Intel

Alex Falappa
fuente
¿Tendré que instalar los controladores nVidia antes de instalar Bumblebee? Supongo que no, en función de cómo redactó su respuesta. Además, ¡es bueno ver que alguien ha podido usar CUDA en Ubuntu con una tarjeta Optimus! Voy a votar esto tan pronto como tenga 15 rep. :)
Peter Cassetta
Bien, instalé Bumblebee. Utilicé optiruny puedo verificar que Blender estaba usando mi GPU nVidia para representar la ventana 3D. Sin embargo, no hay una opción "GPU" en el menú desplegable de las Preferencias de usuario de Blender. Solo enumera "CPU". Ver esta captura de pantalla . ¿Tendré que instalar controladores adicionales para usar CUDA?
Peter Cassetta
1

Me parece que para ejecutar todos los ejemplos de CUDA, usando Bumblebee, debe instalar los controladores 295.40 desde aquí y durante la instalación, elija no anular el config x11.

Luego debe usar el mismo controlador para compilar los ejemplos y ejecutar el programa.

olmer
fuente