Instalação do Cuda 9 em distribuições Linux baseadas no Ubuntu

Instalação do Cuda 9 em distribuições Linux baseadas no Ubuntu

Se você deseja trabalhar com algoritmos de Machine Learning, provavelmente precisará usar processamento paralelo para acelerar os resultados dos seus algoritmos. Muitos frameworks como por exemplo, o TensorFlow, já possuem versões de certos algoritmos para execução em GPU. O primeiro passo para acelerar seus algoritmos com CUDA, é preparar a infraestrutura do seu sistema operacional.

Atualmente o Linux, constitui o sistema operacional mais usado para programar . As distribuições baseadas no Ubuntu, têm se destacado quando o assunto é facilidade e suporte para preparar o ambiente de programação. Este tutorial poderá ser aplicado em qualquer distribuição baseada no Ubuntu, até mesmo derivadas do Red Hat como, CentOS ou Fedora, desde que sejam feitas algumas adaptações.

Estas instruções foram testadas nas distribuições Ubuntu 16.04 e Linux Mint 18.2 Mate 64-bit.

Antes de qualquer etapa, para instalar o driver NVIDIA é necessário desabilitar o driver nouveau, instalado por padrão.

O primeiro passo é bloquear os módulos do driver nouveau:

$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

Agora vamos desabilitar o módulo no kernel:

$ sudo echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

Reconstruímos o kernel sem o módulo nouveau:

$ sudo update-initramfs -u

Reinicie o sistema operacional.

Agora sim! Podemos instalar o driver NVIDIA. Para isto, são necessários utilitários: compiladores para linguagem de programação C (GCC), utilitários para compilação como o comando make. Em distribuições baseadas no Debian ou Ubuntu, o pacote a ser instalado é o build-essential.

$ sudo apt install build-essential

Faça o download CUDA Toolkit no site oficial da NVIDIA.

Baixe a versão para LinuxUbuntu 16.04runfile (local)

É necessário parar a execução da interface gráfica para instalação do toolkit:

$ sudo systemctl stop lightdm

Agora execute o arquivo de instalação do CUDA Toolkit.

Importante: para evitar conflitos durante a programação em CUDA, recomenda-se usar o driver NVIDIA, apenas para programar, afastando a utilização para a interface gráfica. Para isso, veja o parâmetro:

$ chmod +x cuda_9.0.176_384_linux.run
$ sudo ./cuda_9.0.176_384_linux.run --no-opengl-libs

Responda as perguntas do instalador da seguinte maneira:

  1. y para a instalação num ambiente de configuração não suportado.
  2. y para instalação do driver NVIDIA.
  3. n para não executar o nvidia-xconfig
  4. y para instalar o Cuda 9.0 Toolkit.
  5. Pressione ENTER para deixar como localização padrão do Toolkit o diretório /usr/local/cuda-9.0
  6. y para instalar um link simbólico para /usr/local/cuda
  7. y para instalar os exemplos de código (samples) para o CUDA 9.0.
  8. Escolha um diretório para armazenar os exemplos de código do CUDA e pressione ENTER.

Neste momento, devemos configurar as variáveis de ambiente para usar o CUDA mais eficientemente:

$ export PATH=/usr/local/cuda-9.0/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH

Guarde no sistema, no arquivo .profile, as variáveis do usuário que programará em CUDA,  desta forma, ao reiniciar o SO, não será necessário exportar as variáveis novamente.

$ vim ~/.profile

export PATH=/usr/local/cuda-9.0/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH

As duas linhas “export” devem vir no final do arquivo. Execute o comando source para executar os comandos “export” definidos no arquivo .profile:

$ source ~/.profile

Nas próximas inicializações do SO, não será necessário executar o comando source.

Pronto!

Execute o comando nvidia-smi para ver as GPUs disponíveis no seu computador:

$ nvidia-smi

Verifique a versão do compilador NVCC:

$ nvcc --version

Até os próximos posts!

Anterior 4Linux no FISL Porto Alegre!
Próxima Palestra 4Linux no TDC São Paulo

About author

Leonardo Afonso Amorim
Leonardo Afonso Amorim 3 posts

Bacharel em Engenharia de Computação pela PUC-GO. Mestre em Ciência da Computação pela UFG com foco em Inteligência Computacional. No mestrado criou os agentes de mineração de dados e suporte à decisão para o projeto ADGEPA (Assistente Digital de Gestão Pública Participativa). Doutorando em Ciência da Computação pela UFG com pesquisa sobre algoritmos eficientes e escaláveis e suas implementações paralelas em arquiteturas multicore e manycore a fim de acelerar tarefas de busca de documentos por similaridade usando técnicas de Machine Learning. Também na UFG faz pesquisa sobre aplicação de Machine Learning para Reparo Automatizado de Software. Lecionou sobre Inteligência Artificial/Computacional para Engenharia de Computação na Universidade Federal de Goiás. É Analista de Infraestrutura Sênior e Engenheiro de Dados. Possui sólidos conhecimentos em infraestrutura Linux, programação Java/Python, Hadoop e ensino. Experiência adquirida no mestrado e doutorado com os seguintes algoritmos: kNN, kMeans, Regras de Associação, Redes Neurais Artificiais, Processamento Natural de Linguagem com Word2Vec, Sistemas Multiagentes, Algoritmos Genéticos e Programação Genética. Além disso possui experiência em ensino técnico (Redes Linux com ênfase em Segurança) e programação Java. Ministrou mais de 100 cursos. Possui as seguintes certificações em TI: LPIC-1, LPIC-2 e LPIC-3 Security (Linux Professional Institute), Novell Certified Linux Administrator (Suse Linux Enterprise).

View all posts by this author →

Você pode gostar também

Infraestrutura

Faça relay com Postfix e adicione HA em seus projetos

Aprenda nesse artigo  adicionar alta disponibilidade em seus projetos com Postfix com a inclusão de relay para encaminhar mensagens para mais de um servidor e garantir a operação

DevOps

Vagrant: Crie ambientes de Desenvolvimento Ágil

Conheça como criar máquinas virtuais com o Vagrant e crie ambientes padronizados iniciando pelo de Desenvolvimento. DevOps tem como objetivo diminuir o Time To Market de um serviço, ou seja,

Infraestrutura

Gerenciamento de filas assíncronas com Celery e Redis

O Celery é uma fila de tarefas assíncrona de trabalho, implementada em python, com base na passagem de mensagens distribuídas. Está focado na operação em tempo real, mas também oferece