1. Introdução
| O Kubeflow é um kit de ferramentas de machine learning para Kubernetes. O objetivo do projeto é fazer com que as implantações de fluxos de trabalho de machine learning (ML) no Kubernetes sejam simples, portáteis e escalonáveis. A meta é oferecer uma maneira simples de implantar os melhores sistemas de código aberto para ML em infraestruturas diversas. |
Como é uma implantação do Kubeflow?
As implantações do Kubeflow são:
- Portátil: funciona em qualquer cluster do Kubernetes, seja no Google Cloud Platform (GCP), no local ou em provedores diferentes.
- Escalonáveis: podem usar recursos flutuantes e só são limitadas pelo número de recursos alocados para o cluster do Kubernetes.
- Combináveis: contam com service workers para funcionar off-line ou em redes de baixa qualidade.
É uma maneira de organizar microsserviços vagamente acoplados como uma única unidade e implantá-los em vários locais, seja em um laptop ou na nuvem.
Neste codelab, você vai aprender a criar sua própria implantação do Kubeflow usando o MiniKF e executar um fluxo de trabalho do Kubeflow Pipelines em um notebook Jupyter.
O que você vai criar
Neste codelab, você vai criar um pipeline de ciência de dados complexo com o Kubeflow Pipelines, sem usar comandos da CLI nem SDKs. Não é necessário ter conhecimento sobre Kubernetes ou Docker. Ao final do processo, a infraestrutura terá:
- Uma VM do MiniKF (Mini Kubeflow) que instala automaticamente:
- Kubernetes (usando o Minikube)
- Kubeflow
- Kale, uma ferramenta para converter notebooks Jupyter de uso geral em fluxos de trabalho do Kubeflow Pipelines ( GitHub)
- Arrikto Rok para controle de versões e reprodutibilidade de dados.
O que você vai aprender
- Como instalar o Kubeflow com o MiniKF
- Como converter notebooks Jupyter em pipelines do Kubeflow sem usar comandos da CLI ou SDKs
- Como executar o Kubeflow Pipelines em um notebook com um clique de botão
- Como versionar automaticamente seus dados em um notebook e em cada etapa do pipeline
O que é necessário
- Um projeto do GCP ativo em que você tem permissões de proprietário
Este é um codelab avançado focado no Kubeflow. Para mais informações e uma introdução à plataforma, consulte a documentação Introdução ao Kubeflow. Conceitos não relevantes e blocos de código são citados rapidamente e fornecidos para que você simplesmente os copie e cole.
2. Configure o ambiente
Definir o ID do projeto do GCP e o nome do cluster
Para encontrar o ID do projeto, acesse o painel "Página inicial" do console do GCP, que fica no menu de três traços no canto superior esquerdo. Se a tela estiver vazia, clique em "Sim" na solicitação para criar um painel.

Se o projeto ainda não estiver selecionado, clique em Selecionar um projeto:

e selecione o projeto. Você só pode ter um:

3. Instalar o MiniKF
Criar uma instância de computação
No GCP Marketplace, pesquise "MiniKF".
Selecione a máquina virtual MiniKF da Arrikto.

Clique no botão Iniciar no Compute Engine e selecione seu projeto.

Na janela Configurar e implantar, escolha um nome para sua instância do MiniKF e deixe as opções padrão. Em seguida, clique no botão Implantar.

Aguarde a inicialização da instância de computação do MiniKF.

Faça login no MiniKF
Quando a VM do MiniKF estiver ativa, clique no botão "SSH" para se conectar e fazer login. Siga as instruções na tela para executar o comando minikf, que vai iniciar a implantação do Minikube, do Kubeflow e do Rok. Esse processo leva alguns minutos.

Fazer login no Kubeflow
Quando a instalação for concluída e todos os pods estiverem prontos, acesse o painel do MiniKF. Faça login no Kubeflow usando o nome de usuário e a senha do MiniKF.


Os usuários do Chrome vão ver esta tela:

Os usuários do Firefox vão ver esta tela:

Os usuários do Safari vão ver esta tela:

Fazer login no Rok
Depois de fazer login no Kubeflow, abra o menu à esquerda clicando no ícone de hambúrguer. Acesse a Snapshot Store e faça login no Rok usando o nome de usuário e a senha do MiniKF.


Parabéns! Você implantou o MiniKF no GCP. Agora é possível criar notebooks, escrever seu código de ML e executar o Kubeflow Pipelines. Use o Rok para controle de versões e reprodutibilidade de dados.
4. Executar um pipeline no notebook
Nesta seção, você vai executar o exemplo do Titanic, uma competição do Kaggle que prevê quais passageiros sobreviveram ao naufrágio do Titanic.
Criar um servidor de notebook
Navegue até o link Servidores de notebook no painel central do Kubeflow.

Clique em Novo servidor.

Especifique um nome para o servidor de notebook.

Verifique se você selecionou esta imagem:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
Adicione um novo volume de dados vazio de 5 GB e nomeie-o como data.

Clique em Iniciar para criar o servidor de notebook.

Quando o servidor de notebook estiver disponível, clique em Conectar para se conectar a ele.

Fazer o download dos dados e do notebook
Uma nova guia será aberta com a página de destino do JupyterLab. Crie um novo terminal no JupyterLab.

Na janela do terminal, execute estes comandos para navegar até a pasta data e fazer o download do notebook e dos dados que você vai usar no restante do laboratório.
cd data/ git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples
Este repositório contém uma série de exemplos selecionados com dados e notebooks anotados. Navegue até a pasta data/examples/titanic-ml-dataset/ na barra lateral e abra o notebook titanic_dataset_ml.ipynb.

Conhecer o código de ML do desafio do Titanic
Execute o notebook etapa por etapa. O código falha porque uma biblioteca está faltando.

Volte ao terminal e instale a biblioteca ausente.
pip3 install --user seaborn

Reinicie o kernel do notebook clicando no ícone Atualizar.

Execute a célula novamente com as bibliotecas corretas instaladas e veja se ela funciona.
Converter seu notebook em um pipeline do Kubeflow
Clique no ícone do Kubeflow no painel esquerdo para ativar o Kale.

Analisar as dependências de cada célula. Veja como várias células podem fazer parte de uma única etapa do pipeline e como uma etapa pode depender das anteriores.

Clique no botão Compilar e executar.

Acompanhe o progresso do snapshot.

Acompanhe o progresso da execução do pipeline.

Clique no link para acessar a interface do Kubeflow Pipelines e conferir a execução.

Aguarde a conclusão.


Parabéns! Você acabou de executar um pipeline completo do Kubeflow no seu notebook.
5. Reprodução com snapshots de volume
Veja os resultados
Confira os registros da penúltima etapa do pipeline, Resultados. Observe que todos os preditores mostram uma pontuação de 100%. Um cientista de dados experiente acharia isso suspeito imediatamente. Isso é um bom indício de que nossos modelos não estão generalizando e, em vez disso, estão com overfitting no conjunto de dados de treinamento. Isso provavelmente é causado por um problema com os dados usados pelos modelos.

Reproduzir o estado anterior
Felizmente, o Rok cuida do controle de versões de dados e da reprodução de todo o ambiente como estava no momento em que você clicou no botão Compilar e executar. Assim, você tem uma máquina do tempo para seus dados e códigos. Vamos retomar o estado do pipeline antes de treinar um dos modelos e ver o que está acontecendo. Confira a etapa randomforest e clique em Artefatos.

Siga as etapas em Markdown, ou seja, clique no link correspondente para ver o snapshot na interface do Rok.

Copie o URL do Rok.

Navegue até o link Servidores de notebook.

Clique em Novo servidor.

Cole o URL do Rok que você copiou antes e clique no botão Preenchimento automático.

Especifique um nome para o notebook.

Verifique se você selecionou esta imagem:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
Clique em Iniciar para criar o servidor de notebook.

Quando o servidor de notebook estiver disponível, clique em Conectar para se conectar a ele.

O notebook é aberto na célula exata da etapa do pipeline que você gerou.

Em segundo plano, o Kale retomou o estado do notebook importando todas as bibliotecas e carregando as variáveis das etapas anteriores.
Depurar estado anterior
Adicione um comando de impressão a esta célula:
print(acc_random_forest)
Execute a célula ativa pressionando Shift + Return para treinar novamente a floresta aleatória e imprimir a pontuação. É 100.

Agora é hora de verificar se há algo estranho nos dados de treinamento. Para analisar e corrigir esse problema, adicione uma célula acima do markdown da floresta aleatória. Para isso, selecione a célula anterior e clique no ícone de adição (+).

Adicione o texto a seguir e execute a célula para imprimir o conjunto de treinamento.
train_df

Ops! A coluna com rótulos de treinamento ("Survived") foi incluída por engano como atributos de entrada. O modelo aprendeu a se concentrar no recurso "Survived" e ignorar o restante, poluindo a entrada. Essa coluna corresponde exatamente à meta do modelo e não está presente durante a previsão. Portanto, ela precisa ser removida do conjunto de dados de treinamento para que o modelo aprenda com os outros recursos.
Adicionar uma correção de bug
Para remover essa coluna, edite a célula e adicione este comando:
train_df.drop('Survived', axis=1, inplace=True)
train_df

Ative o Kale e confira se a célula que remove os rótulos Survived faz parte da etapa do pipeline featureengineering (ela precisa ter a mesma cor de contorno).
Clique no botão Compilar e executar para executar o pipeline novamente.
Clique no link para acessar a interface do Kubeflow Pipelines e conferir a execução.
Aguarde a conclusão da etapa de resultados e confira os registros para ver os resultados finais. Agora você tem pontuações de previsão realistas.

6. Limpar
Destrua a VM do MiniKF
Navegue até o Deployment Manager no Console do GCP e exclua a implantação minikf-1.
7. Parabéns
Parabéns! Você executou um fluxo de trabalho de ciência de dados completo usando Kubeflow (MiniKF), Kale e Rok.
Qual é a próxima etapa?
Participe da comunidade do Kubeflow:
- github.com/kubeflow
- Slack do Kubeflow (link em inglês)
- kubeflow-discuss@googlegroups.com
- Chamada da comunidade às terças-feiras
