
Introdução
Estou tentando fazer o CUDA funcionar em meu laptop gráfico híbrido. Estou usando o (l)ubuntu 15.04.
Atualmente tenho seguido alguns passos de um guia online, que explicarei a seguir, e consigo rodar optirun glxspheres64
sem problemas. Porém quando executo optirun ./deviceQuery
recebo o seguinte erro:
/usr/bin/vglrun: 246: exec: ./deviceQuery: Permission denied
Não parece haver nenhuma informação sobre isso online.
Detalhe
O guia que segui éaqui. Não segui todos os passos exatamente porque isso já é bastante antigo e a Nvidia mudou o formato em que envia seus .run
arquivos.
Eu fiz o seguinte: (Isso sai direto do meu history
comando.)
15 sudo apt-add-repository ppa:bumblebee/stable
16 sudo apt-add-repository ppa:ubuntu-x-swat/x-updates
17 sudo apt-get update
18 sudo apt-get install bumblebee
19 sudo apt-get install bumblebee bumblebee-nvidia
20 sudo reboot
Em seguida, faça login em tty1, pare o servidor x e inicie 3.
21 cd Downloads/
22 chmod +x cuda_7.5.18_linux.run
23 sudo ./cuda_7.5.18_linux.run
Instale o pacote de execução com todas as opções padrão, instale também o driver gráfico versão 352.
Em seguida, configure a variável PATH.
25 export PATH=/usr/local/bin:$PATH
26 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
27 sudo ldconfig
Pulei as próximas etapas de vinculação estática. Não recebi nenhum erro de vinculador (ou pelo menos acho que não) ao compilar os códigos de amostra, então presumo que isso não foi necessário. Também não vi essa etapa em nenhum outro guia online. Talvez seja aqui que eu errei?
Então, algumas coisas obviamente requerem OpenGL, então:
28 sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
Compile as amostras:
30 cd NVIDIA_CUDA-7.5_Samples/
31 make
Então tentei executar o ./deviceQuery
, que está dentro do diretório Utilities. Recebi um erro que já vi antes sobre bumblebeed
não executar.
Então:
34 sudo vim /etc/bumblebee/bumblebee.conf
Altere a linha com Driver=
(que estava em branco) para Driver=nvidia
e também a linha KernelDriver=nvidia-current
para KernelDriver=nvidia
.
Esta informação está disponívelaqui, veja a (atualmente) segunda resposta à pergunta.
Ainda não estava funcionando, então tentei seguir as informações fornecidas na primeira resposta acima da pergunta vinculada e instalei os cabeçalhos do kernel:
48 sudo apt-get install linux-headers-generic
49 sudo reboot
Se eu fizer:
54 sudo service bumblebeed status
Agora eu entendo:
● bumblebeed.service - Bumblebee C Daemon
Loaded: loaded (/lib/systemd/system/bumblebeed.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2015-10-11 13:15:07 BST; 20min ago
Main PID: 1502 (bumblebeed)
CGroup: /system.slice/bumblebeed.service
└─1502 /usr/sbin/bumblebeed
Oct 11 13:16:20 P151EMx bumblebeed[1502]: [ 163.019954] [WARN][XORG]....
Oct 11 13:16:20 P151EMx bumblebeed[1502]: [ 163.019987] [WARN][XORG]....
Oct 11 13:16:20 P151EMx bumblebeed[1502]: [ 163.020055] [WARN][XORG]....
Oct 11 13:17:11 P151EMx bumblebeed[1502]: rmmod: ERROR: Module nvidia...d
Oct 11 13:17:11 P151EMx bumblebeed[1502]: modprobe: FATAL: Error runn...a
Oct 11 13:17:22 P151EMx bumblebeed[1502]: [ 225.439546] [WARN][XORG]....
Oct 11 13:17:22 P151EMx bumblebeed[1502]: [ 225.439578] [WARN][XORG]....
Oct 11 13:17:22 P151EMx bumblebeed[1502]: [ 225.439606] [WARN][XORG]....
Oct 11 13:17:23 P151EMx bumblebeed[1502]: rmmod: ERROR: Module nvidia...d
Oct 11 13:17:23 P151EMx bumblebeed[1502]: modprobe: FATAL: Error runn...a
Hint: Some lines were ellipsized, use -l to show in full.
Mas parece que ainda tenho alguns problemas aqui... Está "ativo" agora, embora não iniciasse antes, mas ainda nem tudo está funcionando corretamente. Por algum motivo, não consigo -l
trabalhar para fornecer mais informações aqui.
Quando executo optirun ./deviceQuery
recebo o erro:
/usr/bin/vglrun: 246: exec: ./deviceQuery: Permission denied
O que eu deveria fazer agora?
Atualizações:
Editar: para quem segue isso, pode ser uma ideia não executar esta etapa. Talvez tente instalar o driver após CUDA para evitar esta etapa? Parece um pouco desnecessário instalar a versão 352 do driver e depois reverter para 304 fazendo o seguinte:
Percebi que na pergunta vinculada, o comando sudo apt-get install -reinstall nvidia-current
foi anexado após a instalação dos cabeçalhos do kernel.
Executei este comando, acho que meu driver voltou para a versão 304. Reinicializado, agora
sudo service bumblebeed status
fornece a seguinte saída:
● bumblebeed.service - Bumblebee C Daemon
Loaded: loaded (/lib/systemd/system/bumblebeed.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2015-10-11 13:46:53 BST; 38s ago
Main PID: 659 (bumblebeed)
CGroup: /system.slice/bumblebeed.service
└─659 /usr/sbin/bumblebeed
Oct 11 13:46:53 edward-P151EMx systemd[1]: Started Bumblebee C Daemon.
Oct 11 13:46:53 edward-P151EMx systemd[1]: Starting Bumblebee C Daemon...
Oct 11 13:46:53 edward-P151EMx bumblebeed[659]: [ 17.073332] [INFO]/usr/sb...d
Hint: Some lines were ellipsized, use -l to show in full.
Então isso parece estar consertado. Ainda não é possível executar ./deviceQuery
, mesmo erro:
sudo optirun ./deviceQuery
/usr/bin/vglrun: 246: exec: ./deviceQuery: Permission denied
Por favor, ajude. Eu @ eu
A propósito, glxspheres ainda funciona:
optirun glxspheres64
Obtendo ~270 FPS?
Responder1
Reiniciei meu computador novamente e viva, está funcionando.
optirun ./deviceQuery
retorna
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GTX 670MX"
CUDA Driver Version / Runtime Version 7.5 / 7.5
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 3072 MBytes (3221028864 bytes)
( 5) Multiprocessors, (192) CUDA Cores/MP: 960 CUDA Cores
GPU Max Clock rate: 601 MHz (0.60 GHz)
Memory Clock rate: 1400 Mhz
Memory Bus Width: 192-bit
L2 Cache Size: 393216 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.5, CUDA Runtime Version = 7.5, NumDevs = 1, Device0 = GeForce GTX 670MX
Result = PASS
A propósito, suspeito que as últimas etapas que tentei não sejam realmente necessárias. Se seguir as informações da pergunta acima, tentenãofazendo os últimos passos:
- Reinstalação do driver. Não acho que isso deva ser necessário. Também é irritante porque reverte para uma versão muito mais antiga do driver. Eu estaria interessado em saber se alguém seguindo as informações da pergunta conseguiu fazer o CUDA funcionar sem executar esta etapa.
Acho que as informações da pergunta podem ser muito úteis para qualquer pessoa (e para mim) que esteja tentando instalar:
- CUDA 7.5 (ou CUDA 7)
em um Linux, especificamente uma distribuição relacionada ao Ubuntu;
- ubuntu, xubuntu, lubuntu, ubuntu companheiro, kubuntu,
- e talvez também linux mint 17, linux mint 17.1 e linux mint 17.2 [no entanto, já tive problemas com linux mint 17 e linux mint 17.2 tentando instalar CUDA]
- talvez uma das distribuições debian (acho que estamos no debian 8 agora, mas possivelmente também no debian 7 ou debain 6)
Minha intenção é testar esta resposta com todas essas distribuições, já que muitos guias disponíveis na web para configurar CUDA para Linux são para versões desatualizadas do Linux ou para versões desatualizadas do CUDA.
Levarei algum tempo para fazer isso, mas tentarei fazer isso em breve.
Além disso, posso mudar esta resposta para um wiki da comunidade se alguém desejar contribuir com ela.
Continue verificando se há atualizações. Qualquer comentário me avise comentando abaixo.