10 receitas de linha de comando para aprendizado profundo na Amazon Web Services

10 receitas de linha de comando para aprendizado profundo na Amazon Web Services

Executar grandes processos de aprendizado profundo no Amazon Web Services EC2 é uma maneira barata e eficaz de aprender e desenvolver modelos.

Por apenas alguns dólares você pode obter acesso a dezenas de gigabytes de RAM, dezenas de núcleos de CPU e várias GPUs. Eu recomendo.

Se você é novo no EC2 ou na linha de comando do Linux, há um conjunto de comandos que você achará inestimável ao executar seus scripts de aprendizado profundo na nuvem.

Neste tutorial, você descobrirá minha lista privada dos 10 comandos que uso toda vez que uso o EC2 para ajustar grandes modelos de aprendizado profundo.

Depois de ler esta postagem, você saberá:

  • Como copiar seus dados de e para suas instâncias EC2.
  • Como configurar seus scripts para serem executados por dias, semanas ou meses com segurança.
  • Como monitorar processos, o sistema e o desempenho da GPU.

Dê início ao seu projeto com meu novo livro Deep Learning With Python, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

Observação: Todos os comandos executados em sua estação de trabalho presumem que você está executando um ambiente do tipo Linux (por exemplo, Linux, OS X ou cygwin).

Você tem alguma outra dica, truque ou comando favorito para rodar modelos no EC2?
Deixe-me saber nos comentários abaixo.

10 receitas de linha de comando para aprendizado profundo na Amazon Web Services

10 receitas de linha de comando para aprendizado profundo na Amazon Web Services
Foto de chascar, alguns direitos reservados.

Visão geral

Os comandos apresentados nesta postagem pressupõem que sua instância do AWS EC2 já está em execução.

Para consistência, algumas outras suposições são feitas:

  • O endereço IP do seu servidor é 54.218.86.47; mude isso para o endereço IP da instância do seu servidor.
  • Seu nome de usuário é ec2-user; mude isso para o seu nome de usuário em sua instância.
  • Sua chave SSH está localizada em ~ / .ssh / e tem o nome do arquivo aws-keypair.pem; mude para a localização da chave SSH e o nome do arquivo.
  • Você está trabalhando com scripts Python.

Se precisar de ajuda para configurar e executar uma instância AWS EC2 baseada em GPU para aprendizado profundo, consulte o tutorial:

1. Faça login a partir de sua estação de trabalho no servidor

Você deve fazer login no servidor antes de fazer qualquer coisa útil.

Você pode fazer login facilmente usando o shell seguro SSH.

Eu recomendo armazenar sua chave SSH em seu ~ / .ssh / diretório com um nome útil. Eu uso o nome aws-keypair.pem. Lembre-se: o arquivo deve ter as permissões 600.

O comando a seguir irá conectá-lo à instância do servidor. Lembre-se de alterar o nome de usuário e o endereço IP para o nome de usuário relevante e o endereço IP da instância do servidor.

2. Copie os arquivos de sua estação de trabalho para o servidor

Você copia arquivos de sua estação de trabalho para a instância do servidor usando cópia segura (scp).

O exemplo abaixo, executado em sua estação de trabalho, irá copiar o script.py Script Python no diretório local da estação de trabalho para a instância do servidor.

3. Execute o script como processo em segundo plano no servidor

Você pode executar seu script Python como um processo em segundo plano.

Além disso, você pode executá-lo de forma que ignore os sinais de outros processos, ignore qualquer entrada padrão (stdin) e encaminhe todas as saídas e erros para um arquivo de log.

Em minha experiência, tudo isso é necessário para scripts de longa execução para ajustar grandes modelos de aprendizado profundo.

Isso pressupõe que você está executando o script.py Script Python localizado no / home / ec2-user / diretório e que você deseja que a saída deste script seja encaminhada para o arquivo script.py.log localizado no mesmo diretório.

Ajuste para suas necessidades.

Se esta é sua primeira experiência com nohup, você pode aprender mais aqui:

Se esta é sua primeira experiência com o redirecionamento de entrada padrão (stdin), saída padrão (stout) e erro padrão (sterr), você pode aprender mais aqui:

4. Execute o script em uma GPU específica no servidor

Eu recomendo executar vários scripts ao mesmo tempo, se sua instância do AWS EC2 puder lidar com isso para o seu problema.

Por exemplo, sua instância EC2 escolhida pode ter 4 GPUs e você pode optar por executar um script em cada uma.

Com CUDA, você pode especificar qual dispositivo GPU usar com a variável de ambiente CUDA_VISIBLE_DEVICES.

Podemos usar o mesmo comando acima para executar o script e especificar o dispositivo GPU específico a ser usado da seguinte maneira:

Se você tiver 4 dispositivos GPU em sua instância, você pode especificar CUDA_VISIBLE_DEVICES = 0 para CUDA_VISIBLE_DEVICES = 3.

Espero que isso funcione com o back-end Theano, mas só testei com o back-end TensorFlow para Keras.

Você pode aprender mais sobre CUDA_VISIBLE_DEVICES na postagem:

5. Monitore a saída do script no servidor

Você pode monitorar a saída do seu script enquanto ele está sendo executado.

Isso pode ser útil se você gerar uma pontuação a cada época ou após a execução de cada algoritmo.

Este exemplo listará as últimas linhas do arquivo de log do script e atualizará a saída conforme novas linhas são adicionadas ao script.

A Amazon pode fechar seu terminal agressivamente se a tela não obtiver uma nova saída em um tempo.

Uma alternativa é usar o comando watch. Descobri que a Amazon manterá este terminal aberto:

Eu descobri que a saída padrão (robusta) de scripts Python não parece ser atualizada com frequência.

Não sei se isso é uma coisa do EC2 ou do Python. Isso significa que você pode não ver a saída no log atualizado com freqüência. Parece ser armazenado em buffer e gerado quando o buffer atinge tamanhos fixos ou no final de uma execução.

Você sabe mais sobre isso?
Deixe-me saber nos comentários abaixo.

6. Monitore o desempenho do sistema e do processo no servidor

É uma boa ideia monitorar o desempenho do sistema EC2. Principalmente a quantidade de RAM que você está usando e que ainda resta.

Você pode fazer isso usando o comando top que será atualizado a cada poucos segundos.

Você também pode monitorar o sistema e apenas o seu processo, se souber seu identificador de processo (PID).

7. Monitore o desempenho da GPU no servidor

É uma boa ideia ficar de olho no desempenho da GPU.

Mais uma vez, preste atenção na utilização da GPU, nas quais as GPUs estão em execução, se você planeja executar vários scripts em paralelo e no uso da GPU RAM.

Você pode usar o nvidia-smi comando para ficar de olho no uso da GPU. Eu gosto de usar o Assistir comando que mantém o terminal aberto e limpa a tela para cada novo resultado.

8. Verifique quais scripts ainda estão em execução no servidor

Também é importante observar quais scripts ainda estão em execução.

Você pode fazer isso com o ps comando.

Novamente, gosto de usar o comando watch para manter o terminal aberto.

9. Edite um arquivo no servidor

Eu recomendo não editar arquivos no servidor, a menos que seja realmente necessário.

No entanto, você pode editar um arquivo no local usando o vi editor.

O exemplo abaixo abrirá seu script no vi.

Claro, você pode usar seu editor de linha de comando favorito, como o emacs; esta nota é realmente para você se você for novo na linha de comando do Unix.

Se esta é sua primeira exposição ao vi, você pode aprender mais aqui:

10. De sua estação de trabalho, baixe arquivos do servidor

Eu recomendo salvar seu modelo e quaisquer resultados e gráficos explicitamente em arquivos novos e separados como parte de seu script.

Você pode baixar esses arquivos da instância do servidor para a estação de trabalho usando cópia segura (scp).

O exemplo abaixo é executado em sua estação de trabalho e copiará todos os arquivos PNG de seu diretório inicial para sua estação de trabalho.

Dicas e truques adicionais

Esta seção lista algumas dicas adicionais ao trabalhar intensamente no AWS EC2.

  • Execute vários scripts de uma vez. Eu recomendo selecionar hardware que tenha várias GPUs e executar vários scripts ao mesmo tempo para fazer uso total da plataforma.
  • Escreva e edite scripts apenas na sua estação de trabalho. Trate o EC2 como um ambiente de pseudo-produção e apenas copie scripts e dados lá para serem executados. Faça todo o desenvolvimento em sua estação de trabalho e escreva pequenos testes de seu código para garantir que funcionará conforme o esperado.
  • Salvar saídas de script explicitamente em um arquivo. Salve resultados, gráficos e modelos em arquivos que podem ser baixados posteriormente para sua estação de trabalho para análise e aplicação.
  • Use o comando watch. A Amazon mata agressivamente as sessões de terminal que não têm atividade. Você pode ficar de olho nas coisas usando o comando watch, que envia dados com freqüência suficiente para manter o terminal aberto.
  • Execute comandos de sua estação de trabalho. Qualquer um dos comandos listados acima destinados a serem executados no servidor também podem ser executados a partir de sua estação de trabalho, prefixando o comando com “ssh -eu ~ / .ssh /aws-keypair.pem [email protected]”E citando o comando que você deseja executar. Isso pode ser útil para verificar os processos ao longo do dia.

Resumo

Neste tutorial, você descobriu os 10 comandos que utilizo sempre que estou treinando grandes modelos de aprendizado profundo em instâncias AWS EC2 com GPUs.

Especificamente, você aprendeu:

  • Como copiar seus dados de e para suas instâncias EC2.
  • Como configurar seus scripts para serem executados por dias, semanas ou meses com segurança.
  • Como monitorar processos, o sistema e o desempenho da GPU.

Você tem alguma pergunta?
Tire suas dúvidas nos comentários abaixo e farei o possível para responder.

Desenvolva Projetos de Aprendizado Profundo com Python!

Aprendizado profundo com Python

E se você pudesse desenvolver uma rede em minutos

... com apenas algumas linhas de Python

Descubra como em meu novo Ebook:
Aprendizado profundo com Python

Cobre projetos ponta a ponta em tópicos como:
Perceptrons Multicamadas, Redes convolucionais e Redes Neurais Recorrentes, e mais...

Finalmente, leve o aprendizado profundo para
Seus Próprios Projetos

Ignore os acadêmicos. Apenas resultados.

Veja o que há dentro

Você também pode estar interessado em