sexta-feira, 25 de janeiro de 2013

Instalando o CUDA5.0 no Kubuntu 11.10!

A instalação do novo pacote da NVIDIA para o CUDA5.0 no Kubuntu (ou Ubuntu) 11.10 é fácil, basta atentar às seguintes observações:

  • Versão do Kubuntu: segundo a documentação da NVIDIA, CUDA5.0 somente é compatível com as versões 11.10 e 10.4 do Ubuntu (kernels versões 3.0.0-19 e 2.6.35-23, respectivamente). Tentei instalar na versão mais atualizada no momento (12.04) e simplesmente não funcionou. Portanto, esqueça qualquer versão que não as indicadas na documentação se você quiser utilizar todos os recursos do driver de vídeo original instalado pelo pacote da NVIDIA. Para se utilizar dos recursos mais atualizados do CUDA5.0 (como por exemplo o Dynamic Parallelism), não adiantará se utilizar de um driver mais antigo, como os normalmente instalados como "nvidia-current" pelos pacotes do Ubuntu.
  • Novo pacote de instalação: se você já havia instalado uma versão anterior do CUDA, reparará que CUDA5.0 traz um novo modelo de instalação, onde o driver de vídeo, toolkit e SDK são contidos no mesmo pacote .run. De fato, isto veio facilitar o processo de instalação.
  • Mudanças drásticas em algumas bibliotecas: pode parecer incrível, mas no CUDA 5.0 a NVIDIA simplesmente descontinuou a biblioteca cutil.h, fazendo com que as chamadas CUDA_SAFE_CALL não tenham mais suporte nesta versão. Pois é, o uso destes wrappers, que era encorajado pela NVIDIA até agora, foi mandado para o espaço! Desta forma, para que seus códigos legados passem a funcionar no CUDA5.0, você será obrigado a retirar a referência (o include) a biblioteca cutil.h e remover todas as chamadas CUDA_SAFE_CALL, mantendo, é claro, as chamadas as funções antes "empacotadas" por este wrapper. É por estas e outras que...
  • Kubuntu ou Ubuntu: por uma questão de preferência pessoal, eu utilizo Kubuntu ao invés do Ubuntu. Mas repare que ambos os sistemas são 100% compatíveis e equivalentes entre sí. A única coisa que muda é o gerenciador de janelas, que no caso do Kubuntu é o KDE (ao invés do Gnome ou do - args... - Unity no Ubuntu). Para o CUDA, não haverá qualquer diferença. No meu caso, estas instruções foram executadas na versão 64 bits do Kubuntu 11.10 em uma máquina com processador i7, 4GB de RAM e duas placas Quadro FX 1800 instaladas. Note que não há diferenças no processo de instalação caso você tenha de uma até 4 GPUs instaladas no seu equipamento.

Preparando a instalação

1. Instalando o driver de vídeo genérico:
Partindo do princípio que você já tem uma placa de vídeo GPU da NVIDIA instalada em seu equipamento, ao completar a instalação do Kubuntu, você provavelmente terá o driver da NVIDIA (em uma versão bem antiga, algo como a 175.x.x) ou ainda o Nouveau (eca!) instalado. Para que seja possível instalar o pacote do CUDA5.0, primeiramente temos que desinstalar o driver atualmente em uso e instalar o driver genérico. Para tal, abra um terminal e execute o seguinte comando:

 sudo apt-get --purge remove nvidia*

Este comando deve remover o driver da NVIDIA, se houver algum. Em seguida, devemos colocar o Nouveau na blacklist, a fim de que esse verdadeiro vírus não entre em conflito com o novo driver da NVIDIA que iremos instalar em seguida. Para tal, devemos criar um arquivo na pasta /etc/modprobe.d/, da seguinte forma:

 sudo vi /etc/modprobe.d/backlist-nouveau.conf

Aqui eu sugiro o editor VI, mas você pode usar qualquer outra coisa (nano, vim, etc), confirme sua preferência. Lembrando que VI é muito melhor!

Uma vez com o arquivo criado, insira as seguintes linhas nele e saia salvando:


blacklist nvidiafb 
blacklist nouveau 
blacklist rivafb 
blacklist rivatv 
blacklist vga16fb 
options nouveau modeset=0 


Certifique-se que o arquivo foi criado corretamente e atualize a imagem do kernel com o seguinte comando:

 sudo update-initramfs -

Feito isso, reinicie sua máquina. Você pode fazer isso manualmente ou então utilizar o comando reboot:


 sudo reboot 



2. Instalando os pré-requisitos:
Se tudo ocorreu bem até aqui, sua máquina deve ter reiniciado tranquilamente, entrando em modo gráfico normalmente. Neste caso, talvez você repare que a qualidade das imagens tenha deteriorado, por agora estamos utilizando o driver de vídeo "chinelo". :P

Primeiramente, temos que instalar as ferramentas de desenvolvimento. Sem elas, o pacote de instalação não executará corretamente. Para tal, devemos primeiro garantir que os repositórios estão atualizados:

 sudo apt-get update 


E em seguida, instalar as ferramentas de desenvolvimento:

 sudo apt-get install build-essential 

Agora, basta instalar o suporte a OpenGL e também ao OpenMPI (que agora passa a ser suportado por CUDA5.0):

 sudo apt-get install freeglut3-dev libxi-dev libxmu-dev mpi-default-dev 


3. Instalando CUDA5.0, finalmente!
Importante! Para que a instalação do pacote proceda de forma adequada, o ambiente gráfico não pode estar ativo. Para tal, não basta apenas alternar para uma TTY. Antes de qualquer coisa, você deve garantir que não há nenhuma sessão logada em ambiente gráfico. Efetue seu logoff do ambiente gráfico e após, utilize Alt+Ctrl+F1 ou Alt+Ctrl+F2 para ir para uma sessão TTY (puro texto). Uma vez lá, você deve informar seu usuário e senha para se logar novamente, mas desta vez, em ambiente TTY.

Agora, devemos para o serviço do KDE:

 sudo service kdm stop 

Lembrando que este comando é válido apenas no Kubuntu. Caso você esteja usando Ubuntu, altere "kdm" para "lightdm" ou ainda para "gdm", dependendo do seu gerenciador de janelas.

Se você quiser garantir que o serviço realmente parou, simplesmente repita o comando e verifique que ele não deve retornar um erro por não encontrar o serviço no ar.

Agora chegou a hora de finalmente disparar a instalação do pacote do CUDA5.0. Para tal, mande executar o pacote da seguinte forma:

 sudo sh ./cuda_5.0.35_linux_64_ubuntu11.10.run 

Lembrando que o pacote deve ter sido configurado como executável. Caso você tenha esquecido de fazer isso, simplesmente rode um "chmod +x nome_do_pacote" e repita o comando anterior.

Se tudo estiver OK, o pacote deve mostrar uma série de mensagens ao estilo man. Basta ir pressionando barra de espaço para ir avançando no texto. Cuidado pois após atingir 100% do texto lido, o instalador perguntará se você realmente quer instalar o pacote. Digite "accept" e pressione ENTER. Feito isso, ele fará algumas perguntas, que deverão ser respondidas com "y" ou simplesmente como ENTER (na hora de informar os caminhos de instalação). Eu realmente recomendo que você instale tudo nos caminhos sugeridos, para evitar stress com as bibliotecas e PATH mais tarde. Não obstante, isso ocorrerá de qualquer forma mais tarde... Não esqueça de reiniciar sua máquina logo após a instalação ser concluída. Quando for se logar, pode fazer isso na interface gráfica normalmente. Neste caso, verifique se o aplicativo de gerenciamento da NVIDIA reconheceu sua GPU e seu monitor adequadamente.


4. Atualizando as variáveis de ambiente.
Uma vez que a instalação tenha ocorrido satisfatoriamente, devemos agora proceder a atualização das variáveis de ambiente. Isso é fácil: basta incluir no final do seu arquivo .bashrc (que está oculto no seu diretório home) as seguintes linhas:

 export CUDA_HOME=/usr/local/cuda-5.0 
 export LD_LIBRARY_PATH=${CUDA_HOME}/lib64 
 PATH=${CUDA_HOME}/bin:${PATH} 
 export PATH 



Feito isso, encerre sua sessão e logue-se novamente, a fim de que as alterações tenham efeito. Se tudo funcionou corretamente, tente executar o comando "nvcc" do seu diretório home para conferir.



5. Instalando o SDK.
Instalar o SDK é uma boa idéia, pois desta forma você terá uma série de exemplos bacanas para rodar em seu ambiente. Para tal, basta ir para o diretório do SDK e disparar a compilação:

 cd ~/NVIDIA_CUDA-5.0_Samples 
 make 


Esta operação pode demorar alguns bons minutos, não se assuste! Outro detalhe: se você estiver usando uma GPU antiga (com compute capability menor do que 1.2), provavelmente você receberá uma série de warnings avisando que o tipo de dados double foi "rebaixado" para float. Isto ocorre pois gerações antigas ainda não tinha suporte a precisão dupla.

Se tudo deu certo, rode o aplicativo exemplo QueryDevice para verificar o funcionamento do CUDA:

 cd ~/NVIDIA_CUDA-5.0_Samples/bin/linux/release 
 ./QueryDevice 

Boa sorte!!!