Como usar o CUDA com o NVIDIA Prime

10

Encontrei meia dúzia de posts sobre isso em toda a web, mas nenhum deles realmente responde à pergunta.

Eu quero configurar minha GPU da nvidia para fazer apenas cálculos, não direcionar a tela. Mas quando mudo para usar a GPU Intel na configuração nvidia-prime, não consigo mais carregar o módulo nvidia.

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

Sem o módulo, CUDA não funciona, obviamente.

Então, o que exatamente o nvidia-prime faz que impossibilita o carregamento do módulo? Não está na lista negra. Não existe um arquivo xorg.conf, então como o sistema sabe usar a Intel GPU em vez da discreta?

Estou em um Dell 5510 Precision com o Ubuntu 14.04 instalado de fábrica e meu GPU é o Quadro M1000M.

Alguns sugerem usar o bumblebee, mas isso não deve ser necessário para cargas de computação puras.

Além disso, aparentemente bumblebee é capaz de carregar o módulo. Então, o que exatamente está fazendo?

Atualização: Então, por que sempre parece que eu encontro a resposta quando finalmente faço uma pergunta, depois de horas tentando descobrir. Esta resposta real apenas parcial, mas eu estou em algo.

Até agora eu determinei que o prime faz pelo menos duas coisas:

  • Desligue a GPU usando o bbswitch.
  • Altera as alternativas para / etc / ld. so.conf.d / x86_64-linux-gnu_GL.conf.

Ao usar bbswitch para ativar a GPU novamente, agora posso carregar o módulo NVIDIA.

Mas a questão ainda permanece: Qual é a melhor maneira de configurar o sistema para usar a placa NVIDIA apenas para cálculos?

Devo configurar o nvidia-prime para usar a GPU Intel e tentar desvendar manualmente o que foi feito para que o CUDA funcionasse?

Como posso garantir que o sistema ainda use a GPU Intel para a exibição?

Como eu iria simplesmente desabilitar o NVIDIA prime e configurá-lo manualmente?

Ou eu deveria ceder e usar Bumblebee e optirun? Quais são as desvantagens disso, se houver?

Alguma recomendação?

    
por orodbhen 02.03.2016 / 05:07

5 respostas

2

Acredito ter encontrado pelo menos uma solução superficial para isso, conforme descrito na atualização da postagem original. Realmente há duas soluções que encontrei, embora tenha certeza de que há outras.

1 - Com o Prime no modo Intel, reative a placa NVIDIA através do bbswitch , e execute modprobe nvidia para carregar o módulo e criar os nós do dispositivo.

2 - Use o Bumblebee optirun para iniciar uma sessão bash de onde você pode fazer todas as suas coisas no CUDA.

Ambas as soluções permitem que você use os gráficos onboard para o seu monitor, enquanto usa a placa NVIDIA para cargas de computação. A solução optirun parece mais versátil, mas prefiro a primeira pelo seu minimalismo.

Espero que alguém com mais compreensão melhore esta resposta.

    
por orodbhen 10.03.2016 / 13:48
5

No meu caso, descobri que a placa NVidia não estava realmente desligada, e a única coisa que eu realmente precisava fazer para executar o código CUDA era:

export LD_LIBRARY_PATH=/usr/lib/nvidia-352

no shell onde eu quero executá-lo (estou assumindo que mudar globalmente a configuração de alternativas seria quebrar compiz, etc, etc ...)

Para chegar a este ponto (em um Dell Optiplex 7010, com Ubuntu 14.04, CUDA 7.5 e GTX 980), acredito que as etapas foram:

  1. Use a guia Perfis PRIME para selecionar Intel
  2. Reinicie e selecione Intel como padrão no BIOS
  3. Encerre o computador
  4. Conecte os monitores ao vídeo onboard:)

Tudo parece estar funcionando bem até agora (o nvidia-smi vê o cartão, as amostras do cuda são executadas, o theano usa o cartão, etc ...)

    
por David Huggins Daines 02.05.2016 / 17:16
1

Eu uso o cartão NVIDIA apenas para execuções CUDA e descubro essa abordagem:

O tempo todo eu uso o cartão intel e é confirmado pelo 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)

Na linha correspondente da placa NVIDIA, você verá (rev ff) desativado.

Para ativar a placa e usá-la para cálculos CUDA, eu uso os dois seguintes comandos:

sudo prime-select nvidia
sudo prime-switch

Após esse comando lspci | grep -E "VGA|3D" report:

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)

Aviso sobre (rev a2) , não (rev ff) na linha correspondente. Agora cartão pronto para computação.

Após cálculos, uso ações reversas:

sudo prime-select intel
sudo prime-switch

E lspci | grep -E "VGA|3D" relatórios:

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)
    
por Abonec 21.02.2017 / 11:59
0

Caso alguém ainda encontre problemas após seguir as etapas da resposta aceita, tente o seguinte:

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

Ele desabilitará o bbswitch completamente. A desvantagem é que você não poderá desligar a placa NVIDIA para economia de energia (o Xorg ainda usa gráficos integrados, desde prime-select intel ).

    
por Huazuo Gao 21.10.2016 / 07:35
0

Estou usando um 1070 ti com um thinkpad T420 em um egpu configurado para minha moeda criptografada enquanto trabalho. A GPU teoricamente se pagará depois de alguns meses assim.

Descobri que, com a exportação nvidia 387, o LD_LIBRARY_PATH = / usr / lib / nvidia-387 trabalhou com o ethminer usando o cuda.

No entanto, a única maneira de fazer com que o sistema continue funcionando depois de um "prime-select intel" é se eu tivesse um segundo monitor conectado ao cartão quando fiz a seleção e fiz logoff. Caso contrário, eu teria um erro "O sistema está executando no modo de baixo gráfico" ou uma tela em branco contínua. É claro, quando eu faço log-in executando Intel Graphics, o monitor plugado na GPU não exibe nada, então eu tenho que desconectá-lo da GPU e conectá-lo novamente no sistema (DVI dock output) para executar a configuração do meu monitor duelo. .

Eu acredito que isso é porque o gpu-manager detecta que o bbswitch não funciona e, em seguida, exclui a configuração do xorg.

Estou postando isso para mostrar uma solução para os poucos que podem estar em uma situação semelhante, mas também para ver se alguém tem uma ideia para impedir que isso aconteça, já que ter que mover o cabo para cada reinicialização é uma pouco de um inconveniente.

log_file: /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 não pode acessar / run / u-d-c-fglrx-foi-carregado Procurando por módulos fglrx em /lib/modules/4.4.0-104-generic/updates/dkms Procurando por módulos nvidia em /lib/modules/4.4.0-104-generic/updates/dkms Módulo nvidia encontrado: nvidia_387_drm.ko É nvidia carregado? sim A nvidia foi descarregada? não A nvidia está na lista negra? sim O fglrx está carregado? não A fglrx foi descarregada? não O fglrx está na lista negra? não A intel é carregada? sim O radeon está carregado? não O radeon está na lista negra? não O amdgpu está carregado? não O amdgpu está na lista negra? não O nouveau é carregado? não O nouveau está na lista negra? sim O módulo do kernel fglrx está disponível? não O módulo do kernel nvidia está disponível? sim Fornecedor / ID do Dispositivo: 8086: 126 BusID "PCI: 0 @ 0: 2: 0" É vga de inicialização? sim Fornecedor / ID do Dispositivo: 10de: 1b82 BusID "PCI: 5 @ 0: 0: 0" É vga de inicialização? não Ignorando "/ dev / dri / card1", impulsionado por "i915" Ignorando "/ dev / dri / card0", orientado por "nvidia-drm" Ignorando "/ dev / dri / card1", impulsionado por "i915" Ignorando "/ dev / dri / card0", orientado por "nvidia-drm" Ignorando "/ dev / dri / card1", impulsionado por "i915" Ignorando "/ dev / dri / card0", orientado por "nvidia-drm" Encontrado "/ dev / dri / card1", conduzido por "i915" saída 0:     card1-LVDS-1 saída 1:     card1-HDMI-A-2 Número de saídas conectadas para / dev / dri / card1: 2 Requer descarga? sim último número de cartões = 2 Tem amd? não Tem intel? sim Tem nvidia? sim Quantos cartões? 2 O sistema mudou? Não main_arch_path x86_64-linux-gnu, other_arch_path i386-linux-gnu Alternativa atual: /usr/lib/nvidia-387-prime/ld.so.conf Alternativa principal atual: (null) Alternativa atual do egl: /usr/lib/nvidia-387-prime/ld.so.conf A nvidia está ativada? não O nvidia egl está ativado? não O fglrx está ativado? não A mesa está habilitada? não A mesa egl está habilitada? não O pxpress está ativado? não O prime está habilitado? sim O egl principal está ativado? sim A nvidia está disponível? sim A nvidia egl está disponível? não O fglrx está disponível? não O fglrx-core está disponível? não Está a mesa disponível? sim A mesa egl está disponível? sim O pxpress está disponível? não É primo disponível? sim O egl principal está disponível? não Intel IGP detectado Sistema híbrido Intel Versão do driver da Nvidia 387.34 detectada / sys / class / dmi / id / product_version="ThinkPad T420" / sys / class / dmi / id / product_name="4236L23" Primeira tentativa: bbswitch sem peculiaridades Carregando o bbswitch com os parâmetros "load_state = -1 unload_state = 1" Erro: não é possível abrir / proc / acpi / bbswitch Removendo o xorg.conf. Caminho: /etc/X11/xorg.conf não pode acessar /usr/share/gpu-manager.d/hybrid-power-saving Não há necessidade de alterar o estado atual do bbswitch

Se eu nano xorg.conf depois disso, está vazio. Estou postando isso depois de fazer o truque de troca de monitor, com a mineração acontecendo em segundo plano, e meu xorg.conf ainda está vazio. Então, meu palpite é que, por algum motivo, quando mantenho o monitor conectado à GPU no reinício do lightdm, não importa que o meu xorg.conf seja excluído. Alguma idéia?

    
por nhorning 30.12.2017 / 21:05