terça-feira, 16 de fevereiro de 2021

Preparando um computador para processamento de Deep Learning

 Este post visa a descrever alguns passos básicos para disponibilizar um computador para processamento de modelos de aprendizado profundo (deep learning) que pode ser acessado remotamente por uma equipe que trabalha com Inteligência Artificial.

Este post é inspirado em: How to build a deep learning server based on Docker

Não vou tratar aspectos de hardware.

Vamos ao passo-a-passso.

1- Sistema operacional Linux

Irei usar o Ubuntu 20.04LTS desktop. Recomendo fortemente a versão que for LTS (Long-Term Support), pois isso irá garantir suporte por mais tempo. 

Obs.: Usar a versão server exige mais esforço administrativo, eu recomendo que seja usada quando você já sabe antecipadamente os usos do equipamento caso envolva pesquisa ou uso exploratório de deep learning a versão desktop facilita um pouco a vida.


2- Ativar Firewall

É altamente recomendavel ativar o Firewall UFW 

Primeiro vamos deixar permitr o acesso remoto via SSH:

sudo ufw allow ssh

Agora vamos deixar permitr o acesso remoto via NoMachine (mais informações abaixo):

sudo ufw allow 4000/tcp

sudo ufw allow 4443/tcp

Para ativar use:

sudo ufw enable

Dica:

Caso precise desabilitar o Firewall durante algum debug use: sudo ufw disable

Para saber o estatus  do Firewall use: sudo ufw status verbose

Para negar acesso use deny no lugar de allow.

3- Acesso Remoto SSH

Um equipamento com esta finalidade que vai ser acessado por uma equipe precisa ser acessado remotamente e a forma mais básica é com o shell e com segurança, para isso instale o Secure Shell (SSH):

sudo apt update

sudo apt install openssh-server

Instale também o sshfs, que permite a transferência de arquivos. Mais instruções aqui.

sudo apt-get install sshfs

Teste: em um outro computador Linux (funciona também a partir do Windows 10 command prompt ou PowerShell) use:

ssh username@ip_address


4- Instale o Screen

O Screen é uma aplicação de console que permite retomar uma seção que foi perdida, entre outras funções. Mais informações aqui.

sudo apt-get update

sudo apt-get install screen

5- Acesso Remoto Gráfico

Pela interface gráfica:

Download o NoMachine para Linux eu usei o NoMachine para Linux DEB amd64

Instale o NoMachine, com duplo clique sobre o arquivo, no meu caso o arquivo que baixei foi:

nomachine_7.1.3_1_amd64.deb

E clique em install.

Também instale no computador que você vai usar para acessar o equipamento de deep learning.


OU

Por linha de comando

https://www.nomachine.com/pt-pt/download/download&id=1

Download o NoMachine para Linux eu usei o NoMachine para Linux DEB amd64

e copiei na máquina (usando o sshfs), no meu caso eu baixei: 

nomachine_7.8.2_1_i686.tar.gz


sudo cp -p nomachine_7.8.2_1_i686.tar.gz /usr

cd /usr

sudo tar zxf nomachine_7.8.2_1_i686.tar.gz

sudo /usr/NX/nxserver --install


Mais informaçoes .: Install, update e uninstall via linha de comando no Ubuntu: 2.6. DEB Packages  


5- Duck DNS

Acesse DuckDNS efetue o login e crie um nome para o domínio.

Para instalar siga as intruções:

ps -ef | grep cr[o]n

crie um diretório duckdns:

cd /etc

sudo mkdir duckdns

sudo chmod 777 duckdns

Entre no diretório:

cd duckdns

Instale o curl:

sudo apt install curl

Crie um arquivo duck.sh no diretório duckdns incluindo o seguinte conteúdo, trocando o domain e o token pelos que você criou:

echo url="https://www.duckdns.org/update?domains=exampledomain&token=a7c4d0ad-114e-40ef-ba1d-d217904a50f2&ip=" | curl -k -o /etc/duckdns/duck.log -K -



Mude a permissão do arquivo para que ele possa ser executado

sudo chmod 777 duck.sh

Programe o cron para que o arquivo duck.sh seja executado a cada 5 min

crontab -e

Selecione o editor nano

copie o seguinte texto no final do arquivo:

*/5 * * * * /etc/duckdns/duck.sh >/dev/null 2>&1

pressione:

CRTL + o  para salvar

CRTL + x para sair


Para testar use o comando:

./duck.sh

Veja se o conteúdo do log é OK (quer dizer que funcionou) se for KO reveja o token e o dominio se estão corretos no arquivo duck.sh

cat duck.log

Estando OK, delete o arquivo duck.log e veja se ele é gerado novamente depois de 5 minutos, examine o conteúdo se é OK.

Neste ponto pode ser necessário fazer um redirecionamento de porta para que seja possível acessar um computador da rede interna com uma conexão da internet.


6- Instalando NVIDIA driver

Instruções aqui: guia de instalação.

Driver:

Faça o download do driver na própria máquina, pois ele detecta automaticamente.

O arquivo tem a exetensão NVIDIA-Linux-<alguma coisa>.run

chmod 700 NVIDIA-Linux-<alguma coisa>.run

sudo ./NVIDIA-Linux-<alguma coisa>.run


Para instalação do CUDA siga as instruções daqui.


7- Adicione Hard Disks

É comum em equipamentos como este ter HDs adicionais, aqui segue uma intrução básica para adiciona-los:

No Ubunto use o Disks que está em Aplications
Selecione o HD novo e format como Ext4
anote o caminho /dev/sd?

Crie o diretório:
sudo mkdir /mnt/<nome>

Para montar o HD de maneira permante é preciso adicionar linhas no  fstab, mas antes precisamos decobri o UUID correspondente ao HD  que se refere ao /dev/sd?, o blkid vai mostrar
uma linha equivalente a esta:
/dev/sd?: LABEL="files" UUID="<valor alfa numérico>" TYPE="ext4"

o valor alfa númerico tem este formato: 3dc00cf1-4663-45d2-a9c7-672e15335431

sudo blkid


sudo nano /etc/fstab
adicione no final uma linha como esta abaixo. Cuidado! Use o conteúdo do UUID que você obteve pelo blkid sem as "aspas" e indique o diretório que você criou em /mnt/<nome>, use CRTL+O para savar e CRTL+X para sair.

UUID=3dc00cf1-4663-45d2-a9c7-672e15335431 /mnt/<nome>      ext4    defaults        0       0


Permita o acesso, aqui é dado acesso total:
sudo chmod 777 /mnt/<nome>

8- Mudando nome do computador

É comum que o equipamento tenha um nome padronizado, para mudar o nome edite /etc/hostname e /etc/hosts

sudo nano /etc/hostname

use CRTL+O para savar e CRTL+X para sair.


sudo nano /etc/hosts

use CRTL+O para savar e CRTL+X para sair.

Para o novo nome valer é necessário reiniciar o computador:

sudo reboot


9- Mudando nome do usuário root

É comum que o usuário root tenha um nome e senha padronizados.

Com o usuário root mude a senha:

sudo passwd <nome atual>

Para mudar o nome do usuário root crie um outra conta que pretença o grupo sudo (veja o item 11- Crei as contas para cada usuário). Efetue o login com esta outra conta e execute, substituindo os campos marcados pelo nome novo e o nome atual


sudo usermod -l <nome novo> -d /home/<nome novo> -m <nome atual>

sudo reboot

O nome novo já está funcionando para uma conexão ssh, mas na tela inicial gráfica do Ubunto ainda não mudou.

Efetue o login com a conta nova (o nome atual ainda aparece) através da tela inicial gráfica do Ubuntu 

Em Settings / Users  troque o nome atual pelo novo.


10- Configure máquina para ligar automaticamente quando tiver queda de energia


A configuração na BIOS varia de fabricante para fabricante, mais informações aqui.

No meu caso a configuração foi a seguinte:
  1. Ligue a máquina e pressione Delete ou F2 - Entra configuração da BIOS
  2. F7 para entrar em Advanded Mode
  3. APM Configuration
  4. Restore AC Power Loss -> Last State  
Você pode escolher Power On, neste caso sempre que volta a energia a máquina liga sozinha, mesmo se ela estiver intensionamente desligada. O Last State é mais completo, a se a máquina estava ligada quando a energia volta ela liga sozinha e se estava desligada continua desligada.

Nota1: Isso tem a função de evitar um deslocamento para simplesmente ligar a máquina no caso de queda de energia.
Nota2: Para que a máquina continue operando em caso de queda de energia, você deve tem um NoBreak, mas lembre-se que ele suporta a máquina por pouco tempo. Em soluções profissionais usa-se NoBreaks e também Geradores. O NoBreak serve de segurança enquanto o Gerador entra em operação e estabiliza. Soluções completas assim exigem manutenção, testes periódios e garantir que o Gerador tenha seu combustível.

11- Crie as contas para cada usuário



Nenhum comentário:

Postar um comentário