Integração CUDA com Theano

1

Estou trabalhando com o Theano , um benchmark de aprendizado profundo, em uma máquina Ubuntu Mate 16.04 recém-instalada. Theano pode usar a aceleração de GPU para acelerar os cálculos. Eu tenho uma placa de vídeo NVIDIA K2200M que é compatível com CUDA e está instalada corretamente, como mostra o comando nvidia-smi :

+------------------------------------------------------+                       
| 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 pano de fundo: Theano precisa ser configurado para que algumas variáveis ambientais tenham que ser definidas, como $CUDA_ROOT , e estas se referem a /usr/local/cuda , mas instalar nvidia-cuda-* do repositório oficial do Ubuntu não crie essas pastas. No entanto, a Theano oferece um código python que pode ajudar a determinar se os cálculos estão sendo feitos com a CPU ou a GPU e surpreendentemente Theano encontra a instalação CUDA.

Aí vem o problema: CUDA é reconhecido pelo sistema, mas o CUDA parece não encontrar minha GPU, e eu recebo o erro WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: cuda unavailable) .

Estou escrevendo em askubuntu.com e não para os desenvolvedores do Theano porque, ao encontrar esse problema, eu desinstalei o nvidia-cuda-* e instalei o CUDA do pacote oficial fornecido pela NVIDIA após este guia, portanto que o/usr/local/cuda acima mencionado foi criado e, novamente, o código Theano reconheceu a instalação do CUDA, mas ainda não conseguiu encontrar minha GPU. Essa é a razão pela qual eu acho que pode ser um problema do Ubuntu, em vez de ser uma implementação defeituosa do lado de Theano.

    
por Guillermo Jiménez 24.04.2016 / 21:02

2 respostas

1

Eu meio que descobri que não era uma questão do Ubuntu, mas sim da Theano, já que instalei CUDA novamente a partir da fonte que mencionei no OP e consegui executar corretamente os dados de amostra do pacote CUDA fornecido pela NVIDIA, (na minha opinião inexperiente) um problema de integração entre o NVIDIA-cuda-toolkit e os drivers da NVIDIA.

Para aqueles (no futuro) tendo o mesmo problema que eu, o problema parece estar no módulo theano.sandbox.cuda , quando __init__.py tenta compilar cuda_ndarray.cu nas linhas 168-175 (eu acredito, já que eu modificou o arquivo apenas um pouco), quando esse arquivo chama a função compiler.compile_str(...) , que é um arquivo que acredito ter sido criado pela equipe de desenvolvimento da Theano. O NVCC é executado corretamente, mas há problemas ao compilar cuda_ndarray .

Então eu vou marcar essa questão como respondida assim que o askubuntu me permitir.

    
por Guillermo Jiménez 25.04.2016 / 11:49
1

Se você estiver usando o CUDA 7.5, certifique-se de seguir as instruções oficiais:

O CUDA 7.5 não suporta a versão padrão g ++. Instale uma versão suportada e torne-a o 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 tiver erro:

ERROR (theano.sandbox.cuda): Falha ao compilar cuda_ndarray.cu: libcublas.so.7.5: não é possível abrir o arquivo de objeto compartilhado: Nenhum arquivo ou diretório ATENÇÃO (theano.sandbox.cuda): CUDA está instalado, mas o gpu do dispositivo não está disponível (erro: cuda não pode ser usado)

Apenas usando o comando ldconfig para vincular o objeto compartilhado do CUDA 7.5:

sudo ldconfig /usr/local/cuda-7.5/lib64
    
por evan912 05.08.2016 / 06:13