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

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ó pode ter um:

fe25c1925487142.png

3. Instalar o MiniKF

Criar uma instância de computação

No GCP Marketplace, pesquise "MiniKF".

.

Selecione a máquina virtual MiniKF da Arrikto.

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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.

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

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.

774e83c3e96cf7b3.png

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.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

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.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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.

4115cac8d8474d73.png

Clique em Novo servidor.

f9303c0a182e47f5.png

Especifique um nome para o 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 nomeie-o como 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. Crie um novo terminal no JupyterLab.

2482011174f7bc75.png

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.

c85baf68b36c63b2.png

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.

bf2451fd7407e334.png

Volte ao terminal e instale a biblioteca ausente.

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 veja se ela funciona.

Converter seu notebook em um pipeline do Kubeflow

Clique no ícone do Kubeflow no painel esquerdo para ativar o Kale.

3f4f9c93b187b105.png

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.

15cca32444c1f12e.png

Clique no botão Compilar e executar.

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 interface do Kubeflow Pipelines e conferir a execução.

a81646a22584e1b9.png

Aguarde a conclusão.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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.

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

4f25ca4560711b23.png

Siga as etapas em 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 Novo servidor.

f2265a64e8f9d094.png

Cole o URL do Rok que você copiou antes 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

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

a1f7c81f349e0364.png

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.

e2a8a3b5465fcb5d.png

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 (+).

d1077f32dff9620f.png

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

train_df

2854798ff01aed4e.png

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

9e76c16a862b566.png

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.

8c6a9676b49e5be8.png

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:

Leia mais