Aqui estão algumas instruções que consideram um computador para processamento de Deep Learning, que eu vou chamar de servidor remoto.
Esta é uma instrução para separação básica de ambientes, pois todos ainda vão depender da mesma versão do CUDA.
1- Conta de usuário
Crie uma conta para cada usuário o servidor e adicione ao grupo sudo, instruções completas aqui.
sudo adduser <nome do usuário>
sudo usermod -aG sudo <nome do usuário>
Efetue pelo menos um login na tela de entrada do Ubuntu com esta conta para criar o Home Directory
2- Instale o Miniconda e seu ambiente
Cada usuário, usando sua própria conta, deve instalar no servidor o Miniconda e seu ambiente de desenvolvimento, mais instruções aqui.
Faça o download do Miniconda
Para fazer o download por linha de comando no shell, primeiro obtenha o caminho completo do arquivo de instalação do Miniconda que você deseja, depois execute ao comando;
considerando que o shell esta em sua home e existe um diretório Downloads
curl <caminho completo> -o Downloads/<nome do arquivo>
exemplo
curl https://repo.anaconda.com/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh -o Downloads/Miniconda3-py39_4.9.2-Linux-x86_64.sh
cd Downloads
Permida a execução do arquivo que você fez o download
chmod 700 <nome do arquivo>
execute:
./<nome do arquivo>
Se você sá sabe como quer criar um ambiente, crie este ambiente e instale o que achar necessário
conda create -n <nome do ambiente>
Obs1.: Para listar ambientes existentes use: conda env list
Obs2.: Para remover um ambiente use: conda env remove --name <nome>
3- Dica: Mapeando um diretório com o SSHSF
Para conectar a partir de um desktop local com Linux:
crie um diretório para montar:
sudo mkdir /mnt/droplet
conecte como sshsf no diretório corresondente:
sudo sshfs -o allow_other,default_permissions <usuário>@<IP servidor remoto>:/ /mnt/droplet
Depois de usar, para desmontar execute:
sudo umount /mnt/droplet
sudo rmdir /mnt/droplet
Para conectar a partir de um desktop local com Windows 10:
No File Explorer (Explorador de Arquivos)
botão direito em Rede
Mapear unidade de rede
Para o root:
\\sshfs\<usuário>@<IP servidor remoto>/../..
usando porta diferente:
\\sshfs\<usuário>@<IP servidor remoto>!<porta>/../..
Ou
Para o home:
\\sshfs\<usuário>@<IP servidor remoto>
usando porta diferente:
\\sshfs\<usuário>@<IP servidor remoto>!<porta>
4- Dica: Acessando Jupyter Notebook remotamente
Informações mais detalhadas
aqui.
Depois que seu ambiente de desenvolvimento estiver pronto no servidor remoto e você deseja acessar o Jupyter Notebook no navegador seu desktop local.
No desktop local em um sheel à parte execute um redirecionamento de portas:
ssh -N -f -L localhost:8889:localhost:8888 <usuário>@<IP servidor remoto>
Obs: Este redirecionamento precisa ser feito novamente ser você reinicialr o desktop local.
No servidor remoto, (via ssh) :
Vá para o root se quiser acessar diretórios como /mnt (onde são montados outros discos):
cd /
Entre no ambiente correspondente:
conda activate <nome>
e inicie o jupyter notebook:
jupyter notebook --no-browser
No navegador do desktop local chame o link que foi gerado, modificando a porta para 8889, o formato é pareceido com este, o token será outro.
http://localhost:8889/?token=<aqui vem uma sequência alfa numércia>
Obs.1: Configurei dessa forma para que fique a porta padrão 8888/tcp para os Jupyter Notebooks que estão executando no seu desktop local e a porta 8889/tcp para os Jupyter Notebooks que estão executando no servidor remoto.
Obs.2: Estando no raíz você pode acessar via Jupyter Notebook tanto HDs que estejam montados no /mnt ou acessar sua home em /home/<nome do usuário>
5- Dica: Para seções que vão demorar muito
Depois de conectar com o SSH execute, screen -S <palavra> e depois use screen -dr <palavra> para retomar a seção, exemplo:
screen -S hello
Execute os camandos que precisa, para testar feche a janela que está usando o SSH, conecte novamente e execute
screen -dr hello
Assim você retoma o terminal que estava aberto. Em caso de execuções muito demoradas poder retomar a seção é fundamental.
Obs1.: Para sair do screen use: exit
Obs2.: Para visualizar as screens existentes use: screen -ls
Obs3.: Para terminar uma screen detached use: screen -X -S <numero.nome> quit
6- Dica: Monitorar GPUs
Simplesmente execute em um sheel remoto adicional :
nvidia-smi
Ou, crie um Jupyter Notebook e inclua a linha:
!nvidia-smi
Para ambos os casos o resultado será uma tela como esta:
Thu Mar 18 12:53:55 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce RTX 3090 Off | 00000000:04:00.0 Off | N/A |
| 30% 33C P8 11W / 350W | 5MiB / 24268MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 3090 Off | 00000000:09:00.0 Off | N/A |
| 30% 33C P8 12W / 350W | 72MiB / 24259MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1260 G /usr/lib/xorg/Xorg 4MiB |
| 1 N/A N/A 1260 G /usr/lib/xorg/Xorg 56MiB |
| 1 N/A N/A 1445 G /usr/bin/gnome-shell 13MiB |
+-----------------------------------------------------------------------------+
Se quiser acompanhar passo-a-passo, abra um sheel remoto adicional e execute:
nvidia-smi --query-gpu=timestamp,name,pci.bus_id,pstate,temperature.gpu,utilization.gpu,utilization.memory --format=csv -l 20
Será apresentado:
Data
Nome da GPU
Id do PCI Bus (serve para você identificar mais de uma GPU)
Temperatura
% de utilização da GPU
% de utilização da memória da
GPU
Mais informações e opções
aqui.
Obs.: O último número do comando representa os segundos de atulização, dos jeito que está indica 20 segundos. Para execuções longas basta você pode usar 60 segundos (1 minuto) ou 3600 (1 hora).
outra alternativa:
pip install GPUtil
e
python -c "from GPUtil import showUtilization as gpu_usage; gpu_usage()"
7- Dica: Checando versões
No shell execute:
Python
python --version
Pytorch
python -c "import torch; print(torch.__version__)"
ou
pip freeze | grep torch
Cuda e Driver
nvidia-smi
Transformers
python -c "import transformers; print(transformers.__version__)"
ou
pip freeze | grep transformers
Dica sobre transformers:
Pode ocorrer conflito entre versões e o tipo de instalação, por exemplo nas duas formas acima aparencem versões diferentes, nete caso recomendo, desinstalar e instalar novamente:
conda uninstall -c huggingface transformers
pip uninstall transformers
pip install
transformers
Jsonnet
pip freeze | grep _jsonnet
8-Dica: Limpeza do disco
Limpando a lixeira:
rm -rf ~/.local/share/Trash/*
Limpando cache do Huggingface:
rm -rf ~/.cache/huggingface/transformers/*
rm -rf ~/.cache/huggingface/hub/*
9-Dica: Jupyter Notebook 500 : Internal Server Error
conda uninstall nbconvert
pip uninstall nbconvert
conda install nbconvert==5.6.1
Caso dê erro para abrir o Jupyter notebook reinstale usando conda:
conda install jupyter notebook
Para ver os caminhos do Jupyter:
jupyter --paths
Para ver a versão:
jupyter --version
pip freeze | grep nbconvert
Nenhum comentário:
Postar um comentário