Curso
Embora o curso Introduction to Deep Learning in Python da DataCamp traga tudo o que você precisa para fazer deep learning no seu notebook ou computador pessoal, chega uma hora em que você vai querer rodar modelos de deep learning em uma GPU (Graphics Processing Unit).
Este post vai ajudar você a dar os próximos passos!
A maioria dos usuários não tem GPU no próprio computador, então este artigo mostra como rodar uma a partir da nuvem da Amazon Web Services (AWS).
Rodar seus modelos em uma GPU como descrevemos aqui custa cerca de US$ 0,90 por hora. Então, se o seu notebook ou computador pessoal tem uma GPU, vale configurar para usá-la e economizar essa grana.
Existem várias etapas para preparar seu ambiente de computação em nuvem pela primeira vez. Mas, depois de configurar tudo, fica fácil reutilizar no futuro.
Criando uma conta na Amazon Web Services
Acesse https://aws.amazon.com/ para criar uma conta na AWS. Siga o link Create an AWS Account.
Selecione o botão I am a new user e informe seu e-mail. Você será guiado por alguns formulários com dados como nome, e-mail e uma senha.

Configurando seu servidor na nuvem
O processo de configuração do servidor tem várias etapas. A boa notícia é que vamos mostrar como parar sua instância para você não pagar quando não estiver usando e também como reiniciá-la rapidamente depois de configurada.
Agora que você tem uma conta, pode usá-la a qualquer momento voltando a https://aws.amazon.com/ e clicando em Sign In To Console.

A Amazon oferece uma infinidade de serviços de computação em nuvem, o que pode ser intimidador para quem está começando. O nosso foco será o serviço EC2 (Elastic Cloud Compute). No canto superior esquerdo da janela do navegador, há um menu de serviços.

Abra esse menu e selecione EC2, que deve ser a primeira opção. Você será levado a uma página com informações sobre o status de todas as instâncias EC2 em execução. Clique no botão no meio da página para Launch Instance.

Cada instância vem com softwares pré-instalados (em "imagens de máquina"), e precisamos escolher o que queremos pronto de fábrica. No nosso caso, queremos usar uma imagem do AWS Marketplace otimizada para deep learning.
Selecione AWS Marketplace na barra lateral à esquerda.
Depois digite deep learning ubuntu no campo de busca:

Isso exibirá algumas opções, incluindo a Deep Learning AMI Ubuntu Version oficial da Amazon. Selecione essa.

Agora você verá um menu de tipos de instância. Cada tipo tem um preço e uma capacidade computacional diferentes.
As instâncias com GPU são as que começam com g2 ou p2. Recomendamos a p2.xlarge, que custa um pouco menos de um dólar por hora. Se quiser algo mais barato, a g2.2xlarge sai por cerca de US$ 0,65/h, embora não seja tão rápida ou potente.
Depois de escolher o tipo de instância, selecione Configure Instance Details no fim da página. Em seguida, no menu próximo ao topo, clique em 6. Configure Security Group.
Aqui vamos preparar sua instância para facilitar o acesso a partir do seu computador.
Cada linha descreve regras de como acessar sua instância.
Vamos usar Jupyter notebooks, que são servidos na porta 8888. Se isso ainda não fizer sentido, você verá em breve como funciona.
Por enquanto, clique no botão Add Rule. Na nova linha, selecione TCP como protocolo, 8888 como porta e 0.0.0.0/0 na última coluna, que é a origem.

Por fim, clique em Review and Launch no rodapé da tela. Depois pressione Launch novamente.
Agora vem a última parte de segurança… selecionar um par de chaves. A chave é um arquivo no seu computador que deve corresponder a um arquivo armazenado no servidor. É assim que você impede que outras pessoas usem o servidor que acabou de configurar. Então, não compartilhe suas chaves nem coloque o arquivo em locais públicos.
Selecione Create a new key pair e digite um nome para a sua chave. Em seguida, clique em Download Key Pair para obter uma cópia da chave, que você vai precisar para acessar o servidor.

Em seguida, você verá uma tela como esta:

A sequência longa de caracteres em azul é o nome da sua instância. Clique nela para ver o painel do EC2, que mostra esse servidor em execução.
Parabéns! Agora você tem um servidor de deep learning rodando na nuvem.
Conectando ao seu servidor
Agora vamos nos conectar ao servidor usando um protocolo chamado ssh. A partir daí, vamos iniciar um servidor Jupyter notebook, que poderemos usar no navegador.
Em um computador Mac ou Linux, você pode usar o comando ssh. No Windows, muita gente usa o aplicativo PuTTY para conexões ssh.
Você pode precisar alterar as permissões de acesso do arquivo da sua chave. No macOS e no Linux, isso pode ser feito com o comando
chmod 400 my_private_key.pemDepois, ainda no terminal, especifique que quer disponibilizar essa chave para autenticação ao entrar no servidor com
ssh-add my_private_key.pemPara fazer login no servidor, vamos precisar do endereço IP. Você o encontra no painel do EC2 no navegador.

Faça login pelo terminal com o comando
ssh ubuntu@34.208.222.118Substitua 34.208.222.118 pelo IP do seu servidor.
Depois de conectado ao servidor, use o comando ipython para iniciar um shell IPython. Dentro do IPython, tente importar o keras para garantir que tudo está funcionando. Você verá mensagens indicando que o CUDA está sendo usado… o que significa que o keras está acessando a GPU.

Se você tem familiaridade com Linux, IPython e um editor de texto no Linux, pode trabalhar direto daqui. Algumas pessoas preferem usar duas janelas: uma para fazer ssh no servidor e usar o IPython, e outra para fazer ssh no servidor e usar o editor de texto.
Configurando seu Jupyter Notebook
No entanto, para a maioria das pessoas é mais fácil configurar Jupyter notebooks e programar pelo navegador. Para isso, vamos definir uma nova senha.
O primeiro passo é obter o hash da senha que você quer usar. Faça isso no IPython com o seguinte:

Copie o hash gerado após definir sua senha. Você vai precisar dele já já.
Digite exit para sair do IPython.
Agora precisamos dizer ao Jupyter para usar a senha escolhida. Para isso, execute a seguinte sequência de comandos
jupyter notebook --generate-configmkdir certscd certssudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pemDepois, use um editor de texto para editar ~/.jupyter/jupyter_notebook_config.py. Eu gosto do vim e usaria o comando:
vim ~/.jupyter/jupyter_notebook_config.pyNo topo desse arquivo, cole o seguinte:
c = get_config()c.IPKernelApp.pylab = 'inline' c.NotebookApp.certfile = u'/home/ubuntu/certs/mycert.pem' c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False # Your password below will be whatever you copied earlier c.NotebookApp.password = u'sha1:941c93244463:0a28b4a9a472da0dc28e79351660964ab81605ae' c.NotebookApp.port = 8888Você pode copiar exatamente isso e só substituir a senha. Lembre-se: não use a sua senha em texto puro. Cole o hash da senha que você criou antes.
Conectando ao Jupyter no navegador
No navegador de sua preferência, digite o endereço da sua instância (visível no painel do EC2) seguido de :8888.

Nesse momento, você pode ver um aviso de segurança. Não há com o que se preocupar. No Chrome, clique em "advanced" na janela principal do navegador para ignorar esse aviso.

Agora será solicitado que você digite sua senha.

Digite a sua senha. Não é o hash da senha, e sim a senha em texto puro que você digitou no IPython para obter o hash.
Pronto, você está logado!
Usando o Notebook
No navegador, use o menu para criar um novo notebook Python.

Ufa… não foi simples. Mas daqui pra frente vai ser
Para chegar até aqui com os notebooks, foi bastante configuração. Felizmente, é um esforço majoritariamente único. Agora você pode parar seu servidor no painel do EC2 sempre que não estiver usando — e parar de pagar por ele.

Parar uma instância mantém todo o seu trabalho de configuração, mas a instância ficará inativa até você reiniciá-la. É como apertar um botão de pausa. Se você escolher terminate, perderá todas as informações daquela instância e terá que refazer a configuração da próxima vez.
Como você escolheu stop, pode voltar ao painel do EC2 em outro dia e clicar em start.

Depois de clicar em start, fica bem simples voltar a rodar. Sua instância receberá um novo endereço IP. Você precisará fazer ssh para esse novo IP
ssh ubuntu@34.208.26.73Na janela em que você acessou o servidor por ssh, digite
jupyter notebookEm seguida, volte ao navegador e volte a trabalhar imediatamente.
Deu trabalho configurar, mas a ideia é que você aproveite bastante enquanto pratica e toca projetos de deep learning mais empolgantes.
Se quiser se aprofundar, confira estes cursos da DataCamp:

