Cómo usar CUDA con NVIDIA Prime

10

He encontrado media docena de publicaciones sobre esto en toda la web, pero ninguna de ellas responde realmente a la pregunta.

Quiero configurar mi GPU nvidia para hacer solo cálculos, no para manejar la pantalla. Pero cuando cambio a usar la GPU Intel en la configuración nvidia-prime, ya no puedo cargar el módulo nvidia.

modprobe: ERROR: could not insert 'nvidia_352': No such device

Sin el módulo, CUDA no funciona, obviamente.

Entonces, ¿qué está haciendo exactamente nvidia-prime que hace que sea imposible cargar el módulo? No está en la lista negra. No hay un archivo xorg.conf, entonces, ¿cómo sabe el sistema usar la GPU Intel en lugar de la discreta?

Estoy en una Dell 5510 Precision con Ubuntu 14.04 instalado de fábrica, y mi GPU es Quadro M1000M.

Algunos sugieren usar abejorros, pero eso no debería ser necesario para cargas de cómputo puro.

Además, aparentemente el abejorro puede cargar el módulo. Entonces, ¿qué está haciendo exactamente?

Actualización: Entonces, ¿por qué siempre parece que encuentro la respuesta cuando finalmente publico una pregunta, después de horas de tratar de resolverla? Esto es solo una respuesta parcial, pero estoy en algo.

Hasta ahora he determinado que Prime hace al menos dos cosas:

  • Apague la GPU con bbswitch.
  • Cambia las alternativas para /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf.

Al usar bbswitch para volver a encender la GPU, ahora puedo cargar el módulo NVIDIA.

Pero la pregunta sigue siendo: ¿Cuál es la mejor manera de configurar el sistema para usar la tarjeta NVIDIA solo para cálculos?

¿Debo configurar nvidia-prime para usar la GPU Intel e intentar desentrañar manualmente lo que eso hizo para que CUDA funcione?

¿Cómo me aseguro de que el sistema todavía use la GPU Intel para la pantalla?

¿Cómo podría simplemente deshabilitar NVIDIA prime y configurarlo todo manualmente?

¿O debería ceder y usar Bumblebee y optirun? ¿Cuáles son las desventajas de esto, si las hay?

¿Alguna recomendación?

orodbhen
fuente
¿Puede deshabilitar la pantalla en la GPU en la aplicación de configuración del servidor NVIDIA X?
Roger Dahl el
La utilidad NVIDIA solo le permite elegir entre Intel y NVIDIA GPU. No proporciona configuraciones precisas, como qué tarjeta usar para la pantalla.
orodbhen

Respuestas:

5

En mi caso, descubrí que la tarjeta NVidia no estaba apagada, y lo único que realmente necesitaba hacer para ejecutar el código CUDA era:

export LD_LIBRARY_PATH=/usr/lib/nvidia-352

en el shell donde quiero ejecutarlo (estoy asumiendo que cambiar globalmente la configuración de alternativas rompería compiz, etc., etc.)

Para llegar a este punto (en una Dell Optiplex 7010, con Ubuntu 14.04, CUDA 7.5 y una GTX 980) creo que los pasos fueron:

  1. Use la pestaña Perfiles PRIME para seleccionar Intel
  2. Reinicie y seleccione Intel como predeterminado en el BIOS
  3. Apagar el equipo
  4. Conecte los monitores al video integrado :)

Todo parece estar funcionando bien hasta ahora (nvidia-smi ve la tarjeta, se ejecutan muestras de cuda, theano usa la tarjeta, etc.)

David Huggins Daines
fuente
1
Sí, desafortunadamente no parece haber una solución consistente, por eso realmente quería entender lo que estaba sucediendo debajo del capó.
orodbhen
2

Creo que he encontrado al menos una solución superficial a esto, como se describe en la actualización de mi publicación original. Realmente encontré dos soluciones, aunque estoy seguro de que hay otras.

1 - Con Prime en modo Intel, vuelva a habilitar la tarjeta NVIDIA a través de bbswitch , luego ejecute modprobe nvidiapara cargar el módulo y crear los nodos del dispositivo.

2 - Utilice Bumblebee optirun para iniciar una sesión de bash desde donde puede hacer todas sus cosas de CUDA.

Ambas soluciones le permiten usar los gráficos integrados para su pantalla, mientras usa la tarjeta NVIDIA para cargas de cómputo. La solución optirun parece más versátil, pero prefiero la primera por su minimalismo.

Espero que alguien con más comprensión mejore esta respuesta.

orodbhen
fuente
¿Puedes explicar la primera opción más claramente? ¿Cómo se enciende y apaga la tarjeta usando bbswitch?
Abonec
De hecho, descubrí cómo hacer que el abejorro funcione bien y actualizaré mi respuesta cuando tenga tiempo. Básicamente seguí esto . Es frustrante que estas cosas estén tan mal documentadas, porque en realidad es bastante simple.
orodbhen
2

Uso la tarjeta NVIDIA solo para ejecuciones de CUDA y descubro este enfoque:

Todo el tiempo uso la tarjeta Intel y se confirma por comando lspci | grep -E "VGA|3D":

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)

En la fila correspondiente a la tarjeta NVIDIA, debería ver (rev ff)que está desactivada.

Para encender la tarjeta y usarla para los cálculos de CUDA, uso dos comandos siguientes:

sudo prime-select nvidia
sudo prime-switch

Después de ese lspci | grep -E "VGA|3D"informe de comando :

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

Observe sobre (rev a2), no (rev ff)en la fila correspondiente. Ahora tarjeta lista para el cálculo.

Después de los cálculos, uso acciones hacia atrás:

sudo prime-select intel
sudo prime-switch

E lspci | grep -E "VGA|3D"informes:

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)
Abonec
fuente
Entonces, básicamente, solo necesita volver a iniciar sesión después de cambiar con prime, si desea cambiar qué GPU está ejecutando la pantalla. No había pensado en eso, pero tiene sentido. Por supuesto, debe asegurarse de volver antes de cerrar sesión o reiniciar.
orodbhen
Yo uso este enfoque. Me conecto con el perfil de Intel activo para que Xorg y Firefox no usen la GPU. ¡Luego cambio al perfil de nvidia y todo mi trabajo de CUDA pasa a la GPU y no tiene que competir con Firefox y Xorg por la memoria :)!
John
0

En caso de que alguien aún encuentre problemas después de seguir los pasos de la respuesta aceptada, intente esto:

echo "install bbswitch /bin/true" > /etc/modprobe.d/blacklist-bbswitch.conf
update-initramfs -u

Deshabilitará bbswitch por completo. El inconveniente es que no podrá apagar la tarjeta NVIDIA para ahorrar energía (Xorg todavía usa gráficos integrados, siempre y cuando prime-select intel).

Huazuo Gao
fuente
0

Estoy usando un 1070 ti con un thinkpad T420 en un egpu configurado para extraer criptomonedas mientras trabajo. La GPU teóricamente se pagará a sí misma después de un par de meses de esta manera.

Descubrí que con nvidia 387 exportar LD_LIBRARY_PATH = / usr / lib / nvidia-387 funcionaba con ethminer usando cuda.

Sin embargo, la única forma en que podía hacer que el sistema siguiera funcionando después de una "información de selección principal" era si tenía un segundo monitor conectado a la tarjeta cuando hice la selección y cerré la sesión. De lo contrario, obtendría un error "El sistema se está ejecutando en modo de gráficos bajos" o una pantalla en blanco continua. Por supuesto, cuando inicio sesión con Intel Graphics, el monitor conectado a la GPU no muestra nada, así que tengo que desconectarlo de la GPU y volver a conectarlo al sistema (salida de la base DVI) para ejecutar la configuración de mi monitor de duelo .

Creo que esto se debe a que gpu-manager detecta que bbswitch no funciona y luego elimina la configuración de xorg.

Estoy publicando esto para mostrar una solución para los pocos que podrían estar en una situación similar, pero también para ver si alguien tiene una idea para evitar que esto suceda, ya que tener que mover ese cable para cada reinicio es un poco inconveniencia.

archivo_registro: /var/log/gpu-manager.log

last_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot new_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot no puede acceder / ejecutar / udc-fglrx-was-load file Buscando módulos fglrx en / lib /modules/4.4.0-104-generic/updates/dkms Buscando módulos de nvidia en /lib/modules/4.4.0-104-generic/updates/dkms Módulo de nvidia encontrado: nvidia_387_drm.ko ¿Se carga nvidia? sí ¿Se descargó nvidia? no ¿Nvidia está en la lista negra? sí ¿Está cargado fglrx? no ¿Se descargó fglrx? no ¿Fglrx está en la lista negra? no ¿Se ha cargado Intel? sí ¿Radeon está cargado? no ¿Radeon está en la lista negra? no ¿Está cargado amdgpu? no ¿Está amdgpu en la lista negra? no ¿Se carga nouveau? no ¿Nououau está en la lista negra? sí ¿Está disponible el módulo de kernel fglrx? no ¿Está disponible el módulo kernel de nvidia? sí Id. del proveedor / dispositivo: 8086: 126 BusID "PCI: 0 @ 0: 2: 0" ¿Es boot vga? sí Id. del proveedor / dispositivo: 10de: 1b82 BusID "PCI: conf Alternativa actual de núcleo: (nulo) Alternativa actual de egl: /usr/lib/nvidia-387-prime/ld.so.conf ¿Está habilitado nvidia? no ¿nvidia egl está habilitado? no ¿Está habilitado fglrx? no ¿Mesa está habilitada? no ¿Mesa egl está habilitado? no ¿Está habilitado pxpress? no ¿Prime está habilitado? sí ¿Prime egl está habilitado? sí ¿Está disponible nvidia? sí ¿Está disponible nvidia egl? no ¿Está disponible fglrx? no ¿Está disponible fglrx-core? no ¿Mesa está disponible? sí ¿Mesa egl está disponible? sí ¿Está disponible pxpress? no ¿Está disponible Prime? sí ¿Prime egl está disponible? no se detectó Intel IGP Sistema híbrido Intel Controlador Nvidia versión 387.34 detectado / sys / class / dmi / id / product_version = "ThinkPad T420" / sys / class / dmi / id / product_name = "4236L23" 1er intento: bbswitch sin peculiaridades Cargando bbswitch con Parámetros "load_state = -1 unload_state = 1" Error: can ' t abrir / proc / acpi / bbswitch Eliminando xorg.conf. Ruta: /etc/X11/xorg.conf no puede acceder a /usr/share/gpu-manager.d/hybrid-power-saving No es necesario cambiar el estado actual de bbswitch

Si yo nano xorg.conf después de esto está vacío. Estoy publicando esto después de hacer el truco del interruptor del monitor, con la minería en segundo plano, y mi xorg.conf todavía está vacío. Entonces, supongo que, por alguna razón, cuando mantengo el monitor conectado a la GPU al reiniciar lightdm, no importa que mi xorg.conf se elimine. ¿Algunas ideas?

Norning
fuente
Además ... tengo bbswitch en la lista negra como se sugirió anteriormente, porque obtendría un error continuo con él en el arranque. Pude iniciar en modo Intel usando nvidia-384 una o dos veces, pero tuve problemas para hacer la minería con eso, y pensé que podría ser porque se agregó soporte 1070 ti con nvidia-387.
nhorning