Como faço para que o nVidia CUDA ou OpenCL funcione em um laptop com placa discreta nVidia / Intel Integrated Graphics?

28

Antecedentes: Sou um artista 3D (como hobby) e recentemente comecei a usar o Ubuntu 12.04 LTS como uma inicialização dupla com o Windows 7. Ele está sendo executado no meu laptop Toshiba de 64 bits bastante novo com uma GPU nVidia GeForce GT 540M ( placa de vídeo). No entanto, ele também possui Intel Integrated Graphics (que eu suspeito que o Ubuntu esteja usando).

Portanto, quando renderizo minhas cenas 3D em imagens no Windows, posso escolher entre usar minha CPU ou minha GPU nVidia (mais rápido). No aplicativo 3D, posso definir a GPU para usar CUDA ou OpenCL. No Ubuntu, não há opção de GPU.

Depois de fazer (demais?) Pesquisas sobre os problemas do Linux e da tecnologia nVidia Optimus, sou um pouco mais esclarecido, mas muito mais confuso.

Não me importo nem um pouco com a tecnologia Optimus, pois a duração da bateria não é de forma alguma um problema para mim.

Aqui está minha pergunta: O que posso fazer para poder usar programas que utilizam CUDA (como o Blender) na minha GPU nVidia no Ubuntu? Vou precisar de drivers da nVidia? (Ouvi dizer que eles não funcionam bem com as configurações da Optimus no Linux.) Existe pelo menos uma maneira de usar o OpenCL na minha GPU no Ubuntu?

Peter Cassetta
fonte

Respostas:

27

Acabei de fazer algumas experiências e posso confirmar as afirmações de Eric Appleman de que o Bumblebee não é necessário para a CUDA. (mais sobre o Bumblebee : Uma NVIDIA GeForce com Optimus Technology é suportada pelo Ubuntu? )

No entanto, quando você precisa mostrar exemplos gráficos usando OpenGL, você fazer necessidade algo como Bumblebee para sistemas Optimus, caso contrário, você não quer ver nada no visor ou obter o erro:

ERROR: Support for necessary OpenGL extensions missing.

Ao executar um programa CUDA, você precisa instalar o kit de ferramentas CUDA e um driver da nvidia. Se você pretende compilar programas, também precisa do SDK. Os instaladores podem ser encontrados em http://developer.nvidia.com/cuda-downloads , leia as instruções abaixo antes de iniciar o seu laptop Optimus.

Instalando CUDA

Motorista

Eu recomendo instalar o driver nvidia do gerenciador de pacotes do Ubuntu. Se você instalar o Bumblebee, não precisará se preocupar com o driver. Caso contrário, após a instalação, desative as bibliotecas da nvidia, conforme descrito em https://askubuntu.com/a/107746/6969 . Se você não fizer isso, perderá a aceleração 3D e, possivelmente, ficará preso em baixa resolução.

Conjunto de ferramentas

Basicamente, você precisa baixar o instalador, torná-lo executável e executá-lo. - Baixe o instalador. No momento da redação deste documento, o 4.2.9 é o driver mais recente. Como tenho um sistema operacional de 64 bits, uso o pacote Ubuntu de 64 bits 11.04 (embora esteja executando o 12.04) - Torne-o executável e permita a instalação /usr/local/cuda:

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

Quando ocorrer a mensagem de instalação que pergunta onde instalar o CUDA, basta pressionar Enter para aceitar o padrão /usr/local/cuda:

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

Após a instalação, ele imprimirá algumas mensagens que sugerem colocar o diretório da biblioteca cuda no caminho de pesquisa da 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

Você pode pular esta etapa, se quiser, mas precisará definir LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHmais tarde ao executar um programa.

SDK

Se você quiser compilar aplicativos CUDA, poderá instalar o SDK de maneira semelhante à descrita acima. Faça o download, torne-o executável e execute-o (não como root, por exemplo, sem sudo!). Ao compilar partes dele, tive que fazer algumas alterações NVIDIA_GPU_Computing_SDK/C/common/common.mk:

  • depois da linha 189 OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu, adicione:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • depois da linha 271, troque ${RENDERCHECKGLLIB}com ${OPENGLLIB}a aparência de:

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • algumas (5) linhas adiante, faça o mesmo, mas remova -lcudatambém.
  • algumas (7) linhas adiante, faça o mesmo que você fez na linha 271.

Usando CUDA

O CUDA não precisa de um servidor X baseado em nvidia para funcionar. Nesse caso, você pode executar seu programa de teste aleatório como:

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

Se você não adicionou CUDA ao caminho da sua biblioteca, será necessário:

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

(você pode remover os caminhos de 32 bits se o programa for de 64 bits).

Se o programa CUDA tiver algo a ser exibido usando o OpenGL, você precisará usar o optirun:

 optirun blender

Ou, se você não tiver CUDA adicionado ao seu caminho padrão:

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

Lekensteyn
fonte
Obrigado, concederei a recompensa a você (mas aceitarei minha resposta do Wiki da comunidade).
12268 Peter Cassetta
Além disso, 100 representantes e um voto positivo não expressam com precisão o quanto eu aprecio seu trabalho no Projeto Bumblebee. Você e seus colegas fizeram dele o melhor software que ele é. Então obrigado. :)
Peter Cassetta
2
Você é bem-vindo, agora espero que prêmio o tempo vai-nos uma solução final em forma de PRIME com um + mesa pilha atualizados xorg (ou Wayland?) :)
Lekensteyn
1
PRIME , Xorg é o servidor de exibição responsável por mostrar gráficos, Mesa é para OpenGL, Wayland é um possível sucessor do Xorg.
Lekensteyn
1
Deve-se notar que o CUDA requer um driver NVIDIA mínimo. Por exemplo, o CUDA 6.5 precisa de pelo menos NVIDIA 340.21.
Yamaneko
15

Aqui está a resposta completa (com base nas respostas de Alex Falappa e Lekensteyn ):

Na verdade, é possível fazer com que as GPUs nVidia Optimus executem CUDA no Ubuntu.

Bumblebee não é necessário para CUDA. (mais sobre o Bumblebee : Uma NVIDIA GeForce com Optimus Technology é suportada pelo Ubuntu? )

No entanto, quando você precisa mostrar exemplos gráficos usando OpenGL, você fazer necessidade algo como Bumblebee para sistemas Optimus, caso contrário, você não quer ver nada no visor ou obter o erro:

ERROR: Support for necessary OpenGL extensions missing. 

Se você precisar usar um programa com muitos gráficos, como o Blender, o Bumblebee é atualmente um bom caminho.

Vá para Instalando CUDA se você não quiser instalar o Bumblebee (por exemplo, se você não precisar do OpenGL).
Caso contrário, continue a ler.

Instalando o Bumblebee

Siga as instruções em Como funcionam os laptops com Nvidia Optimus?

Atualmente, eles são mantidos atualizados por um desenvolvedor do Bumblebee.

Depois de instalar o Bumblebee e reiniciar, você poderá escolher a placa gráfica a ser usada ao iniciar programas usando o optirunprograma.
Por exemplo:

optirun blender

Para testar rapidamente se tudo funciona corretamente, use:

optirun glxspheres

Você verá um programa com esferas giratórias coloridas, se tudo estiver funcionando corretamente.

Verifique se a cadeia de fornecedores GL no terminal contém a palavra nvidia .
Se você executar apenas glxspheres, verá que a cadeia de fornecedores contém a placa Intel.

Ao executar um programa CUDA, você precisa instalar o kit de ferramentas CUDA e um driver da nvidia. Se você pretende compilar programas, também precisa do SDK. Os instaladores podem ser encontrados em http://developer.nvidia.com/cuda-downloads , leia as instruções abaixo antes de iniciar o seu laptop Optimus.

Instalando CUDA

Motorista

Eu recomendo instalar o driver nvidia do gerenciador de pacotes do Ubuntu. Se você instalar o Bumblebee, não precisará se preocupar com o driver. Caso contrário, após a instalação, desative as bibliotecas da nvidia, conforme descrito em https://askubuntu.com/a/107746/6969 . Caso contrário, você perderá a aceleração 3D e, possivelmente, ficará preso em baixa resolução.

Conjunto de ferramentas

Basicamente, você precisa baixar o instalador, torná-lo executável e executá-lo. - Baixe o instalador. Em 9 de janeiro de 2013, 5.0.35 é o driver mais recente. Como tenho um sistema operacional de 64 bits, uso o pacote Ubuntu 11.10 de 64 bits (embora esteja executando o 12.10) - torne-o executável e permita a instalação /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

Quando ocorrer a mensagem de instalação que pergunta onde instalar o CUDA, basta pressionar Enter para aceitar o padrão /usr/local/cuda:

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

Após a instalação, ele imprimirá algumas mensagens que sugerem colocar o diretório da biblioteca cuda no caminho de pesquisa da 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

Você pode pular esta etapa se quiser, mas precisará definir LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHmais tarde ao executar um programa.

SDK

Se você quiser compilar aplicativos CUDA, poderá instalar o SDK de maneira semelhante à descrita acima. Faça o download, torne-o executável e execute-o (não como root, por exemplo, sem sudo!).

Usando CUDA

O CUDA não precisa de um servidor X baseado em nvidia para funcionar. Nesse caso, você pode executar seu programa de teste aleatório como:

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

Se você não adicionou CUDA ao caminho da sua biblioteca, será necessário:

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

(você pode remover os caminhos de 32 bits se o programa for de 64 bits).

Se o programa CUDA tiver algo a ser exibido usando o OpenGL, você precisará usar o optirun:

 optirun blender

Ou, se você não tiver CUDA adicionado ao seu caminho padrão:

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

Instalando um Blender Build

(Com núcleos CUDA pré-compilados)

Quando você executa optirun blender, você pode receber uma mensagem do Blender informando que a compilação do kernel CUDA falhou e uma mensagem no terminal semelhante à seguinte:

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.

Se você quiser usar o recurso de renderização de GPU do Blender, poderá precisar de uma compilação do Blender com kernels CUDA pré-compilados. Todas as versões do Blender.org têm kernels CUDA pré-compilados; as compilações ppa: cheleb / blender-svn ( mais informações nesta pergunta ) não.

Para instalar uma compilação oficial do Blender, basta seguir as instruções descritas nesta resposta .

Se você instalou o Blender /usr/lib/blender, poderá executar o Blender a partir do terminal e usar a renderização da GPU com:

 optirun '/usr/lib/blender/blender'
Peter Cassetta
fonte
Versões recentes do Bumblebee (instaladas no PPA do bumblebee / stable) não precisam do usermodcomando. Manterei as instruções de instalação em askubuntu.com/a/36936/6969 atualizadas, portanto, faça o link para essa postagem em vez de copiar essas instruções de instalação.
Lekensteyn
@Lekensteyn Okay, done!
Peter Cassetta
2

O suporte a gráficos híbridos (normalmente gráficos integrados Intel e gráficos discretos Nvidia) no Linux é atualmente um pouco problemático. Algo está se movendo lentamente no campo do servidor X, mas não prenda a respiração.

Como você adivinhou, o Bumblebee é atualmente um bom caminho a percorrer.

Recentemente, comprei um laptop Asus N55 com gráficos Intel / Nvidia. Consegui que o renderizador Blender Cycles usasse CUDA.

Quando instalei o Ubuntu 12.04, ele usava os gráficos integrados por padrão no driver gráfico da intel. O driver gráfico noveau não deve ser instalado.

Então eu abri um terminal e fiz:

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

Depois disso (como recomendado pelas instruções de instalação):

sudo usermod -a -G bumblebee $USER

Então eu reiniciei.

Para escolher o driver a ser usado ao iniciar programas, use o programa optirun, por exemplo:

optirun blender

Para testar se tudo funciona corretamente, use:

optirun glxspheres

E verifique se a cadeia de fornecedores GL contém a palavra Nvidia. Se você executar:

glxspheres

A cadeia de fornecedores deve conter a palavra Intel

Alex Falappa
fonte
Preciso instalar os drivers da nVidia antes de instalar o Bumblebee? Acho que não, com base em como você formulou sua resposta. Além disso, é bom ver que alguém conseguiu usar o CUDA no Ubuntu com um cartão Optimus! Vou votar assim que receber 15 representantes. :)
Peter Cassetta
Ok, eu instalei o Bumblebee. Eu usei optirune posso verificar se o Blender estava usando minha GPU nVidia para renderizar a viewport 3D. No entanto, não há opção "GPU" no menu suspenso nas Preferências do Usuário do Blender. Ele lista apenas "CPU". Veja esta captura de tela . Preciso instalar drivers adicionais para usar o CUDA?
Peter Cassetta
1

Acho que, para executar todos os exemplos de CUDA, usando o Bumblebee, é necessário instalar os drivers 295.40 a partir daqui e durante a instalação, optar por não substituir o config x11.

Então você precisa usar o mesmo driver para compilar os exemplos e executar o programa.

olmer
fonte