Integração CUDA com Theano

Integração CUDA com Theano

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-smimostra 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/cudamas 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.come 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/cudafosse 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.cudamódulo, quando __init__.pytenta compilar cuda_ndarray.cunas 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 ldconfigo comando para vincular o objeto compartilhado do CUDA 7.5:

sudo ldconfig /usr/local/cuda-7.5/lib64

informação relacionada