Cloud Computing

3 nov, 2017

Jupyter Notebook na nuvem para análises com muitos dados

100 visualizações
Publicidade

Olá pessoal, tudo bem?

Hoje vou mostrar como configurar o ambiente Jupyter Notebook em um servidor remoto, de forma fácil e que nos permita aproveitar a flexibilidade da nuvem para fazer nossas analises de dados.

Mas o que é Jupyter Notebook e por que instala-lo em um servidor?

O Jupyter é, segundo o site do projeto, uma aplicação web de código aberto que permite criar e compartilhar documentos que contenham código vivo, equações, visualizações e texto explicativo. Ele é um dos principais ambientes para a análise de dados, onde você pode usar não apenas Python, mas várias outras linguagens como você pode ver aqui.

Normalmente, o Jupyter é instalado localmente e fica disponível na porta 8888 em localhost quando iniciado. Instala-lo em um servidor se torna útil quando o volume de dados a ser analisado é maior que a memória RAM disponível. Existem outras opções nestes casos, como processar os dados em lotes, usar processamento distribuído e etc, mas nenhuma delas é tão simples quanto ter todos os dados em memória. Pretendo abordar algumas dessas opções aqui no portal, mas farei isso quando surgir a necessidade!

Vamos à configuração!

Supondo que você já iniciou seu servidor em sua cloud de preferencia – AWS, Azure, Google, etc – o primeiro passo é atualizar o sistema e instalar algumas dependências. Eu estou usando Ubuntu 16.04 na AWS.

Acesse o servidor por SSH e execute os seguintes comandos:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python3-dev python3-pip
$ sudo pip3 install -U pip

Ao final, o SO estará atualizado e o pip instalado e atualizado. Vamos agora a instalação do Jupyter.

$ sudo pip install jupyter

Veja se ao final do procedimento existe o texto “Successfully installed”, seguido de uma grande lista de bibliotecas.

Vamos iniciar o Jupyter e acessar o ambiente!

$ jupyter notebook --no-browser --port=8888

Você verá, ao final, uma saída como esta:

Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=1234

Mas o ambiente não será acessível substituindo o localhost pelo IP do seu servidor, esta é uma configuração de segurança do Jupyter. Para acessa-lo, faremos um “túnel” ssh.

No seu computador (em outro terminal que não seja aquele que você acessou seu servidor) rode este comando:

$ ssh -i /caminho/para/chave.pem -NL 9999:localhost:8888 ubuntu@ip.do.seu.servidor

Este comando “conecta” sua porta 9999 local com a porta 8888 do servidor e torna seu Jupyter remoto acessível localmente em http://localhost:9999/tree

No primeiro acesso é possível que ele peça um token, este token é mostrado no terminal quando iniciamos o Jupyter e aqui no texto esta representado pelo numero “1234” em negrito ali em cima.

E está feito! Agora você pode rodar suas analises com o poder e flexibilidade da nuvem.

Observações e Considerações

Vamos a algumas pontos importantes:

1 – Por mais que você acesse o Jupyter localmente (em localhost), ele esta rodando no servidor, não esqueça! Isso quer dizer que as demais dependências para sua análise precisam ser instaladas lá no servidor, e todos os arquivos serão salvos no disco deste servidor.

2 – O Jupyter oferece muitas opções de configuração, você pode configura-lo para aumentar a segurança do ambiente, habilitando HTTPS e/ou senhas, ou até torna-lo acessível diretamente pelo IP do servidor. Tenha em mente que a segurança aqui é mantida pelo “túnel” SSH, que permite deixar apenas a porta 22 do servidor aberta para conexão.

3 – Este é apenas o setup inicial. A partir daqui você tem muitas opções. Eu, por exemplo, configurei o Jupyter para iniciar automaticamente com supervisor e criei uma imagem deste servidor para poder recria-lo sempre que necessário (mais memória, mais CPU, mais GPU e etc).

Este é um conteúdo bem básico, mas não encontrei nenhum material similar no nosso idioma e por isso, aqui está!

Comentem aqui o que acharam, dúvidas, sugestões e sobre o que gostariam de ler aqui no portal! Espero ter ajudado.

Um abraço!