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.
Se o projeto ainda não estiver selecionado, clique em Selecionar um projeto:
e selecione o projeto. Você só deve ter um:
3. Instalar MiniKF
Crie uma instância do Compute
No GCP Marketplace, pesquise "MiniKF".
Selecione a máquina virtual MiniKF do Arrikto.
Clique no botão Launch on Compute Engine e selecione o projeto.
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.
Aguarde a inicialização da instância do MiniKF Compute.
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.
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.
Os usuários do Chrome vão ver esta tela:
Os usuários do Firefox vão encontrar esta tela:
Os usuários do Safari vão encontrar esta tela:
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.
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.
Clique em New Server.
Especifique um nome para seu 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 dê a ele o nome 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. Criar um novo terminal no JupyterLab.
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
.
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.
Volte para o terminal e instale a biblioteca que está faltando.
pip3 install --user seaborn
Reinicie o kernel do notebook clicando no ícone Atualizar.
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.
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.
Clique no botão Compile and Run.
Acompanhe o progresso do snapshot.
Acompanhe o progresso da execução do pipeline.
Clique no link para acessar a IU do Kubeflow Pipelines e visualizar a execução.
Aguarde a conclusão.
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.
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.
Siga as etapas do 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 New Server.
Cole o URL do Rok que você copiou anteriormente 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.
Observe que o notebook é aberto na célula exata da etapa do pipeline que você gerou.
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.
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 (+).
Adicione o texto a seguir e execute a célula para exibir o conjunto de treinamento.
train_df
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
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!
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:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Chamada da comunidade às terças-feiras
Leia mais
- Documentação do Kubeflow
- Introdução do Kale no Medium (em inglês)
- Organização do GitHub da Kale (em inglês)
- MiniKF no GCP
- MiniKF no laptop