Do notebook para o Kubeflow Pipelines com MiniKF e Kale

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. O objetivo é oferecer uma maneira simples de implantar os melhores sistemas de código aberto para ML em diversas infraestruturas.

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 vários provedores.
  • Escalonável: pode usar recursos flutuantes e só é limitado 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.

Ele consiste em uma maneira de organizar microsserviços com acoplamento flexível como uma única unidade e implantá-los em vários locais, como um laptop ou a nuvem.

Este codelab mostra como criar sua própria implantação do Kubeflow usando o MiniKF e executar um fluxo de trabalho do Kubeflow Pipelines em um Notebook do 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 ou SDKs. Não é necessário ter nenhum conhecimento sobre o Kubernetes ou o Docker. Ao final do processo, a infraestrutura terá:

  • Uma VM MiniKF (Mini Kubeflow) que instala automaticamente:
  • Kubernetes (usando o Minikube)
  • Kubeflow
  • Kale, uma ferramenta para converter notebooks do 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 MiniKF
  • Como converter seus Notebooks do Jupyter em pipelines do Kubeflow sem usar comandos da CLI ou SDKs
  • Como executar o Kubeflow Pipelines dentro de um notebook com apenas um clique
  • Como fazer a versão automática dos 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 com foco 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

Defina o ID do projeto do GCP e o nome do cluster

Para encontrar o ID do projeto, acesse o painel inicial do Console do GCP, no menu de navegação no canto superior esquerdo. Se a tela estiver vazia, clique em Sim no prompt para criar um painel.

Abra o Console do GCP.

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. Instalar MiniKF

Crie uma instância do Compute

No GCP Marketplace, pesquise "MiniKF".

Selecione a máquina virtual MiniKF do Arrikto.

d6b423c1911ea85a.png

Clique no botão Launch on Compute Engine e selecione o projeto.

b5eeba43053db4bd.png

No menu suspenso Configurar e Implantação, escolha um nome para a instância do MiniKF e mantenha as opções padrão. Em seguida, clique no botão Implantar.

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

Fazer login no MiniKF

Quando a VM do MiniKF estiver ativa, conecte-se e faça login clicando no botão SSH. Siga as instruções na tela para executar o comando minikf, que iniciará a implantação do Minikube, Kubeflow e Rok. Esse processo leva alguns minutos.

774e83c3e96cf7b3.png

Fazer login no Kubeflow

Quando a instalação estiver 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.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

Fazer login no Rok

Depois de fazer login no Kubeflow, clique no ícone de hambúrguer para abrir o menu à esquerda. Navegue até a Snapshot Store e faça login no Rok usando o nome de usuário e a senha do MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

Parabéns! Você implantou o MiniKF no GCP. Agora é possível criar notebooks, escrever código de ML e executar pipelines do Kubeflow. Use o Rok para controle de versões e reprodutibilidade de dados.

4. Executar um pipeline dentro do notebook

Durante esta seção, você 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.

4115cac8d8474d73.png

Clique em New Server.

f9303c0a182e47f5.png

Especifique um nome para seu servidor de notebook.

a2343f30bc9522ab.png

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 dê a ele o nome data.

8544d9b05826b316.png

Clique em Iniciar para criar o servidor de notebook.

28c024bcc55cc70a.png

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

2f06041475f45d3.png

Fazer o download dos dados e do notebook

Uma nova guia será aberta com a página de destino do JupyterLab. Criar um novo terminal no JupyterLab.

2482011174f7bc75.png

Na janela "Terminal", execute estes comandos para acessar 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

Esse 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.

c85baf68b36c63b2.png

Conheça o código de ML do desafio do Titanic

Execute o notebook passo a passo. O código falhará porque falta uma biblioteca.

bf2451fd7407e334.png

Volte para o terminal e instale a biblioteca que está faltando.

pip3 install --user seaborn

d90593b21425dd12.png

Reinicie o kernel do notebook clicando no ícone Atualizar.

a21f5f563b36ce4d.png

Execute a célula novamente com as bibliotecas corretas instaladas e confira se ela funcionou.

Converter seu notebook em um pipeline do Kubeflow

Para ativar o Kale, clique no ícone do Kubeflow no painel esquerdo.

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

Clique no botão Compile and Run.

bde5cef34f00e258.png

Acompanhe o progresso do snapshot.

9408f46abb2493f5.png

Acompanhe o progresso da execução do pipeline.

9edbde68032f5e4b.png

Clique no link para acessar a IU do Kubeflow Pipelines e visualizar a execução.

a81646a22584e1b9.png

Aguarde a conclusão.

44bee7dc0d24ec21.png

d377b6d574a4970.png

Parabéns! Você acabou de executar um pipeline completo do Kubeflow pelo seu notebook.

5. Reprodutibilidade 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 consideraria isso imediatamente suspeito. Essa é uma boa indicação de que os 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 consumidos pelos modelos.

2a594032c2dd6ff6.png

Reproduzir o estado anterior

Felizmente, o Rok cuida do controle de versões de dados e da reprodução de todo o ambiente, já que era o momento em que você clicou no botão Compile and Run. Dessa forma, você tem uma máquina do tempo para dados e códigos. Então, 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 Artifacts.

4f25ca4560711b23.png

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

e533bc781da9355a.png

Copie o URL do Rok.

d155d19731b5cedd.png

Navegue até o link Servidores de notebook.

aafeab01f3ef0863.png

Clique em New Server.

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

Especifique um nome para o notebook.

7685c3bf35fc74b2.png

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.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

Em segundo plano, Kale retomou o estado do Notebook importando todas as bibliotecas e carregando as variáveis das etapas anteriores.

Depurar o 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 exibir a pontuação. É 100.

e2a8a3b5465fcb5d.png

Agora é hora de ver se há algo estranho nos dados de treinamento. Para analisar e corrigir esse problema, adicione uma célula acima da marcação "Floresta aleatória" selecionando a célula anterior e clicando no ícone de adição (+).

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

Ops! A coluna com rótulos de treinamento ("Sobreviva") foi incluída por engano como atributos de entrada. O modelo aprendeu a se concentrar no “Sobreviveu” e ignorar o restante, poluindo a entrada. Essa coluna corresponde exatamente ao objetivo do modelo e não está presente durante a previsão. Por isso, ela precisa ser removida do conjunto de dados de treinamento para que o modelo aprenda com os outros atributos.

Adicionar uma correção de bug

Para remover esta coluna, edite a célula para adicionar este comando:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Ative o Kale e verifique se a célula que remove os rótulos Survived faz parte da etapa featureengineering do pipeline (precisa ter a mesma cor de contorno).

Execute o pipeline novamente clicando no botão Compile and Run.

Clique no link para acessar a IU do Kubeflow Pipelines e visualizar a execução.

Aguarde a conclusão da etapa results e confira os registros para conferir os resultados finais. Agora você tem pontuações de previsão realistas!

8c6a9676b49e5be8.png

6. Limpar

Destruir a VM do MiniKF

Navegue até o Deployment Manager no Console do GCP e exclua a implantação de minikf-1.

7. Parabéns

Parabéns! Você executou um fluxo de trabalho completo de ciência de dados usando o Kubeflow (MiniKF), Kale e Rok.

Qual é a próxima etapa?

Participe da Comunidade do Kubeflow:

Leia mais