estou trabalhando comTheano, um benchmark de aprendizado profundo, em uma máquina Ubuntu Mate 16.04 recém-instalada. Theano pode usar aceleração de GPU para acelerar os cálculos. Eu tenho uma placa de vídeo NVIDIA K2200M compatível com CUDA e instalada corretamente, como nvidia-smi
mostra o comando:
+------------------------------------------------------+
| NVIDIA-SMI 361.42 Driver Version: 361.42 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro K2200M Off | 0000:01:00.0 Off | N/A |
| N/A 31C P8 N/A / N/A | 212MiB / 2047MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1090 G /usr/lib/xorg/Xorg 200MiB |
| 0 7931 G /usr/lib/firefox/firefox 1MiB |
+-----------------------------------------------------------------------------+
Um pouco de contexto: Theano precisa ser configurado para que algumas variáveis ambientais tenham que ser definidas, como $CUDA_ROOT
, e estas se referem, /usr/local/cuda
mas a instalação nvidia-cuda-*
a partir do repositório oficial do Ubuntu Mate não cria essas pastas. Porém, Theano oferece um código python que pode ajudar a determinar se os cálculos estão sendo feitos com a CPU ou GPU e surpreendentemente Theano encontra a instalação do CUDA.
Aí vem o problema: CUDA é reconhecido pelo sistema, mas CUDA não consegue encontrar minha GPU e recebo o erro WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable)
.
Estou escrevendo askubuntu.com
e não para os desenvolvedores do Theano porque, encontrando esse problema, desinstalei nvidia-cuda-*
e instalei o CUDA do pacote oficial fornecido pela NVIDIA seguindoesseguia, para que o mencionado acima /usr/local/cuda
fosse criado e, novamente, o código Theano reconhecesse a instalação do CUDA mas ainda não consegui encontrar minha GPU. Essa é a razão pela qual acho que pode ser um problema do Ubuntu, em vez de ser uma implementação defeituosa do lado de Theano.
Responder1
Eu meio que descobri que não era um problema do Ubuntu, mas do Theano, pois instalei o CUDA novamente da fonte que mencionei no OP e consegui executar corretamente os dados de amostra do pacote CUDA fornecido pela NVIDIA, descartando (em minha opinião inexperiente) um problema de integração entre o kit de ferramentas NVIDIA-cuda e os drivers NVIDIA.
Para quem (no futuro) tiver o mesmo problema que eu, o problema parece estar no theano.sandbox.cuda
módulo, quando __init__.py
tenta compilar cuda_ndarray.cu
nas linhas 168-175 (acredito, já que modifiquei um pouco o arquivo), quando esse arquivo chama o function compiler.compile_str(...)
, que acredito ser um arquivo criado pela equipe de desenvolvimento do Theano. O NVCC funciona corretamente, mas há problemas na compilação cuda_ndarray
.
Então, marcarei esta pergunta como respondida assim que o askubuntu permitir.
Responder2
Se você estiver usando CUDA 7.5, siga as instruções oficiais:
CUDA 7.5 não oferece suporte à versão padrão do g++. Instale uma versão suportada e torne-a padrão.
sudo apt-get install g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
Se o código de teste da GPU theano apresentar erro:
ERRO (theano.sandbox.cuda): Falha ao compilar cuda_ndarray.cu: libcublas.so.7.5: não é possível abrir o arquivo de objeto compartilhado: Esse arquivo ou diretório não existe AVISO (theano.sandbox.cuda): CUDA está instalado, mas o dispositivo gpu está não disponível (erro: cuda inacessível)
Apenas usando ldconfig
o comando para vincular o objeto compartilhado do CUDA 7.5:
sudo ldconfig /usr/local/cuda-7.5/lib64