Como usar o CUDA com o NVIDIA Prime

10

Encontrei meia dúzia de postagens sobre isso em toda a web, mas nenhuma delas realmente responde à pergunta.

Quero configurar minha GPU nvidia para fazer apenas cálculos, não para conduzir a tela. Mas quando mudo para o uso da 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 a nvidia-prime está fazendo que impossibilita o carregamento do módulo? Não está na lista negra. Não há arquivo xorg.conf, então como o sistema sabe usar a GPU Intel em vez da discreta?

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

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

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

Atualização: Então, por que sempre parece que encontro a resposta quando finalmente posto uma pergunta, depois de horas tentando descobrir. Isso é apenas uma resposta parcial, mas estou tentando algo.

Até agora, 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.

Usando o bbswitch para ligar novamente a GPU, agora consigo 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 definir a nvidia-prime para usar a GPU Intel e tentar desvendar manualmente o que isso fez para o CUDA funcionar?

Como garantir que o sistema ainda use a GPU Intel para a tela?

Como eu simplesmente desabilitava o NVIDIA prime e configurava tudo manualmente?

Ou devo apenas ceder e usar o Bumblebee e optar por executar? Quais são as desvantagens disso, se houver?

Alguma recomendação?

orodbhen
fonte
Você pode desativar a exibição na GPU no aplicativo NVIDIA X Server Settings?
Roger Dahl
O utilitário NVIDIA permite apenas escolher entre a GPU Intel e NVIDIA. Ele não fornece configurações refinadas, como qual cartão usar para a exibição.
Orodbhen

Respostas:

5

No meu caso, descobri que a placa NVidia não estava realmente desligada e a única coisa que 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 alterar globalmente a configuração de alternativas quebraria o compiz, etc, etc ...)

Para chegar a esse 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. Reinicialize e selecione Intel como padrão no BIOS.
  3. Desligar o computador
  4. Conecte os monitores ao vídeo integrado :)

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

David Huggins Daines
fonte
1
Sim, infelizmente não parece haver uma solução consistente, e é por isso que eu realmente queria entender o que estava acontecendo sob o capô.
orodbhen
2

Acredito que encontrei pelo menos uma solução superficial para isso, conforme descrito na atualização do meu post original. Realmente, encontrei duas soluções, embora tenha certeza de que existem outras.

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

2 - Use o Bumblebee optirun para iniciar uma sessão do bash, de onde você pode fazer todo o seu material CUDA.

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

Espero que alguém com mais entendimento melhore esta resposta.

orodbhen
fonte
você pode explicar a primeira opção mais claramente? Como você liga e desliga o cartão usando o bbswitch?
Abonec 19/02
Na verdade, eu descobri como fazer com que o zangão funcionasse bem e atualizarei minha resposta quando tiver tempo. Eu basicamente segui isso . É frustrante que esse material seja tão mal documentado, porque é realmente bastante simples.
orodbhen 22/02
2

Eu uso a placa NVIDIA apenas para execuções CUDA e descubra esta abordagem:

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

Na linha correspondente da placa NVIDIA, você deve ver que (rev ff)ela está desligada.

Para ligar o cartão e usá-lo para cálculos CUDA, use dois comandos a seguir:

sudo prime-select nvidia
sudo prime-switch

Após esse lspci | grep -E "VGA|3D"relatório 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), não (rev ff)na linha correspondente. Agora cartão pronto para computação.

Após os cálculos, eu 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)
Abonec
fonte
Então, basicamente, você só precisa fazer login novamente depois de alternar com o prime, se quiser alternar qual GPU está executando o monitor? Eu não tinha pensado nisso, mas faz sentido. Obviamente, você precisa voltar antes de sair ou reiniciar.
orodbhen
Eu uso essa abordagem. Efetuo login com o perfil intel ativo para que o Xorg e o firefox não usem a GPU. Então eu mudo para o perfil da nvidia e todo o meu trabalho CUDA passa para a GPU e não precisa competir com o firefox e o Xorg pela memória :)!
John John
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 desativará completamente o bbswitch. A desvantagem é que você não poderá desligar a placa NVIDIA para economizar energia (o Xorg ainda usa gráficos integrados, desde que prime-select intel).

Huazuo Gao
fonte
0

Estou usando um 1070 ti com um thinkpad T420 em um egpu configurado para minerar criptografia enquanto trabalho. A GPU teoricamente se pagará após alguns meses dessa maneira.

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

No entanto, a única maneira de conseguir que o sistema continuasse funcionando após uma "informação de seleção principal" era se eu tivesse um segundo monitor conectado à placa quando fiz a seleção e efetuei o logoff. Caso contrário, eu receberia um erro "O sistema está executando no modo de gráficos baixos" ou uma tela em branco contínua. É claro que, quando eu faço logon executando gráficos intel, o monitor conectado à GPU não exibe nada, então eu tenho que desconectá-lo da GPU e conectá-lo novamente ao sistema (saída DVI dock) para executar a configuração do meu monitor de duelo .

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

Estou postando isso para mostrar uma solução alternativa para os poucos que podem estar em uma situação semelhante, mas também para ver se alguém tem uma idéia para impedir que isso aconteça, pois ter que mover esse cabo para cada reinicialização é um pouco complicado. inconveniência.

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

last_boot_file: / var / lib / drivers-ubuntu-common / last_gfx_boot new_boot_file: / var / lib / drivers-ubuntu-common / last_gfx_boot não pode acessar / executar / arquivo udc-fglrx-was-loading Procurando 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 Encontrado módulo nvidia: nvidia_387_drm.ko A nvidia está carregada? sim A nvidia foi descarregada? não A nvidia está na lista negra? sim O fglrx está carregado? Não O fglrx foi descarregado? não O fglrx está na lista negra? não A intel está carregada? sim O radeon está carregado? não Radeon está na lista negra? não O amdgpu está carregado? não O amdgpu está na lista negra? não O nouveau está carregado? não O nouveau está na lista negra? sim O módulo do kernel do fglrx está disponível? Não O módulo nvidia kernel está disponível? ID do fornecedor / dispositivo: 8086: 126 BusID "PCI: 0 @ 0: 2: 0" O boot é vga? ID do fornecedor / dispositivo: 10de: 1b82 BusID "PCI: conf Alternativa principal atual: (nula) Alternativa atual egl: /usr/lib/nvidia-387-prime/ld.so.conf A nvidia está ativada? não A nvidia egl está ativada? não O fglrx está ativado? não O mesa está ativado? não O mesa egl está ativado? no O pxpress está ativado? não O prime está ativado? 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 O mesa está disponível? sim O mesa egl está disponível? sim O pxpress está disponível? Não O prime está disponível? sim O egl principal está disponível? nenhum Intel IGP detectado Sistema híbrido Intel driver Nvidia versão 387.34 detectada / sys / class / dmi / id / product_version = "ThinkPad T420" / sys / class / dmi / id / product_name = "4236L23" 1ª tentativa: bbswitch sem peculiaridades Carregando bbswitch com Parâmetros "load_state = -1 unload_state = 1" Parâmetros Error: can ' t abra / 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 status atual do bbswitch

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

manhã
fonte
Além disso ... Eu tenho o bbswitch na lista negra, como sugerido acima, porque eu receberia um erro contínuo com ele na inicialização. Eu era capaz de inicializar no modo intel usando a nvidia-384 uma ou duas vezes, mas tive problemas para fazer a mineração com isso, e pensei que poderia ser porque o suporte ao 1070 ti foi adicionado à nvidia-387.
Nhorning 30/12/19