Do notebook ao Kubeflow Pipelines com o ajuste de HP: uma jornada da ciência de dados

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.
  • Elemento combinável: permite configurar etapas independentes em um fluxo de trabalho de ML completo, escolhendo entre um conjunto selecionado de frameworks e bibliotecas de ML.

Com o Kubeflow, é possível organizar microsserviços com acoplamento flexível como uma única unidade e implantá-los em vários locais, incluindo em um laptop, no local ou na nuvem.

Este codelab mostra como criar sua própria implantação do Kubeflow usando o MiniKF e, em seguida, executar um fluxo de trabalho do Kubeflow Pipelines com ajuste de hiperparâmetros para treinar e exibir um modelo. Tudo isso é feito em um Notebook do Jupyter.

O que você vai criar

Neste codelab, você criará um pipeline de ciência de dados complexo com ajuste de hiperparâmetros no 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 com ajuste de hiperparâmetros de um notebook clicando em um botão
  • Como controlar 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

Configurar o projeto do GCP

Siga as etapas abaixo para criar ou configurar um projeto do GCP. Se você planeja usar um projeto atual do GCP, verifique se ele atende aos requisitos mínimos descritos abaixo. A primeira etapa é abrir o Resource Manager no Console do GCP.

Crie um novo projeto ou selecione um existente:

99b103929d928576.png

Verifique os seguintes requisitos mínimos:

Se precisar de mais ajuda para configurar um projeto do GCP, consulte a documentação do GCP.

Após configurar o projeto do GCP, acesse diretamente as instruções de instalação do MiniKF.

Abrir o projeto do GCP pré-alocado

Para abrir o projeto do GCP pré-alocado, clique no botão abaixo para acessar o Console do GCP e abrir o painel inicial, encontrado no menu de navegação no canto superior esquerdo. Se a tela estiver vazia, clique em Sim no prompt para criar um painel.

3fdc4329995406a0.png

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

e8952c0b96067dea.png

Selecione o projeto. Você só deve ter um:

fe25c1925487142.png

3. Instalar MiniKF

Crie uma instância do Compute incluindo MiniKF

No GCP Marketplace, pesquise "MiniKF".

Selecione a máquina virtual MiniKF da Arrikto:

d6b423c1911ea85a.png

Clique no botão INICIAR e selecione seu projeto:

7d07439db939b61c.png

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

7d5f7d17a80a1930.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. Clique em Snapshots e faça login no Rok usando o nome de usuário e a senha do MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

4. Executar um pipeline de dentro do seu notebook

Nesta seção, você vai executar o exemplo de identificação de raça de cães, um projeto no Nanodegree da IA da Udacity. Dada a imagem de um cachorro, o modelo final fornecerá uma estimativa da raça dele.

Criar um servidor de notebook no cluster do Kubeflow

Navegue até o link Notebooks no painel central do Kubeflow.

60825e935fd0f39b.png

Clique em New Server.

f9303c0a182e47f5.png

Especifique um nome para o servidor de notebook.

a2343f30bc9522ab.png

Verifique se você selecionou a seguinte imagem Docker (a tag da imagem pode ser diferente):

gcr.io/arrikto/jupyter-kale:f20978e

Adicione um novo volume de dados vazio de 5 GB e nomeie-o como dados.

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.

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

ab9ac96f1a1f0d09.png

Na janela do 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 https://github.com/kubeflow-kale/kale

O repositório clonado contém uma série de exemplos selecionados com dados e cadernos anotados.

Na barra lateral, navegue até a pasta data/kale/examples/dog-breed-classification/ e abra o notebook dog-breed.ipynb.

2bc436465522f65b.png

Analisar o código de ML do exemplo de identificação de raças de cães

Por enquanto, não execute as células que fazem o download dos conjuntos de dados, porque você vai usar alguns conjuntos de dados menores incluídos no repositório que acabou de clonar. Se você estiver executando este exemplo no seu próprio ritmo em casa, sinta-se à vontade para fazer o download dos conjuntos de dados.

Execute a célula imports para importar todas as bibliotecas necessárias. Observe que o código falhará porque falta uma biblioteca:

5e2b97ab2512f139.png

Normalmente, você precisa criar uma nova imagem do Docker para executar esse notebook como um pipeline do Kubeflow e incluir as bibliotecas recém-instaladas. Felizmente, a Rok e a Kale garantem que todas as bibliotecas que você instalar durante o desenvolvimento encontrarão o caminho para seu pipeline, graças à tecnologia de snapshots da Rok e à Kale que montou esses volumes com snapshots nas etapas do pipeline.

Execute a próxima célula para instalar a biblioteca que falta:

c483da77943a6f01.png

Reinicie o kernel do notebook clicando no ícone Reiniciar:

376b5203209c2c91.png

Execute a célula imports novamente com as bibliotecas corretas instaladas e aguarde o processo ser concluído.

Converter seu notebook em um pipeline no Kubeflow Pipelines

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

7b96241f2ab6c389.png

Ative o Kale clicando no controle deslizante no Kale Deployment Panel:

804cfbf9d76b7e23.png

Analise as dependências por célula no notebook. Veja como várias células do notebook podem fazer parte de uma única etapa do pipeline, conforme indicado pelas barras de cores à esquerda das células, e como uma etapa do pipeline pode depender das etapas anteriores, conforme indicado pelos rótulos depende de acima das células. Por exemplo, a imagem abaixo mostra várias células que fazem parte da mesma etapa do pipeline. Eles têm a mesma cor vermelha e dependem de uma etapa anterior do pipeline.

fcd0fb351cdfb359.png

Clique no botão Compile and Run:

18f2f6f0e12393d5.png

Agora o Kale assume e cria seu notebook, convertendo-o em um pipeline do Kubeflow Pipelines. Além disso, como o Kale se integra ao Rok para tirar snapshots do volume de dados do notebook atual, é possível acompanhar o progresso dos snapshots. O Rok cuida do controle de versões de dados e da reprodução de todo o ambiente do jeito que ele estava quando você clicou no botão Compilar e executar. Dessa forma, você tem uma máquina do tempo para os dados e o código, e o pipeline será executado no mesmo ambiente em que você desenvolveu o código, sem precisar criar novas imagens do Docker.

de1b88af76df1a9a.png

O pipeline foi compilado e enviado para o Kubeflow Pipelines. Agora clique no link para acessar a IU do Kubeflow Pipelines e visualizar a execução.

e0b467e2e7034b5d.png

A interface do Kubeflow Pipelines é aberta em uma nova guia. Aguarde a execução terminar.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

Parabéns! Você acabou de executar um pipeline completo no Kubeflow Pipelines começando pelo seu notebook.

5. Aprendizado por transferência com ajuste de hiperparâmetros

Veja os resultados

Dê uma olhada nos registros da etapa cnn-from-scratch. Clique na etapa no gráfico na IU do Kubeflow Pipelines e na guia Registros. Nesta etapa, você treinou uma rede neural convolucional (CNN, na sigla em inglês) do zero. O modelo treinado tem uma acurácia muito baixa e, além disso, essa etapa demorou muito para ser concluída.

62bf0835e9896c67.png

Dê uma olhada nos registros da etapa cnn-vgg16. Nesta etapa, você usou o aprendizado por transferência no modelo VGG-16 pré-treinado, uma rede neural treinada pelo Visual Geometry Group (VGG). A acurácia é muito maior do que o modelo anterior, mas ainda podemos melhorar.

2b45072da65e20ae.png

Agora, dê uma olhada nos registros da etapa cnn-resnet50. Nesta etapa, você usou o aprendizado por transferência no modelo ResNet-50 pré-treinado. A precisão é muito maior. Portanto, esse é o modelo que você vai usar no restante deste codelab.

a1dc84ea48a87820.png

Ajuste de hiperparâmetros

Volte ao servidor do notebook na interface do Kubeflow e abra o notebook chamado dog-breed-katib.ipynb (no caminho data/kale/examples/dog-breed-classification/). Neste notebook, você vai executar alguns experimentos de ajuste de hiperparâmetros no modelo ResNet-50 usando o Katib. Observe que há uma célula no início do notebook para declarar os parâmetros:

87b9f6c98dc1823e.png

No painel esquerdo do notebook, ative a opção Ajuste de HP com o Katib para executar o ajuste de hiperparâmetros:

a518eba74d341139.png

Em seguida, clique em Set up Katib Job para configurar o Katib:

f4e34fff6a93aa60.png

Defina o espaço de pesquisa para cada parâmetro e defina uma meta:

cfc6b7bcdc685a02.png

Clique no botão Compile and Run Katib Job:

f9c1ab0a6a3c5e8d.png

Acompanhe o progresso da experiência do Katib:

f3514011876564db.png

Clique em Visualizar para conferir o experimento do Katib:

ab2f5a5edd48e8dc.png

Clique em Concluído para ver as execuções no Kubeflow Pipelines (KFP):

410a843b6f044a4b.png

Na página de experimentos do Katib, você vai encontrar os novos testes:

a511dca519580133.png

Na interface do KFP, você verá as novas execuções:

43dd34ee2b75018d.png

Vamos entender o que acabou de acontecer. Antes, Kale produzia uma execução de pipeline em um notebook e agora está criando várias execuções de pipeline, em que cada uma é alimentada com uma combinação diferente de argumentos.

O Katib é o componente do Kubeflow para executar jobs de ajuste de hiperparâmetros de uso geral. Ele não sabe nada sobre os jobs que está de fato executando (no jargão do Katib, o nome "testes"). Tudo com que Kale se preocupa é o espaço de pesquisa, o algoritmo de otimização e o objetivo. O Katib dá suporte à execução de jobs simples (ou seja, pods) como testes, mas o Kale implementa um paliativo para que os testes realmente executem pipelines no Kubeflow Pipelines e, em seguida, coletem as métricas das execuções do pipeline.

À medida que o experimento do Katib estiver produzindo testes, você vai ver mais testes na interface:

3e854d3d4bb766c.png

E mais execuções na interface do KFP:

ffd30dcefa739962.png

Quando o experimento do Katib for concluído, todos os testes vão aparecer na interface:

9096ae9caa77e42a.png

E todas as execuções na interface do KFP:

7acc64dfee4f35a3.png.

Ao voltar para o Notebook, você verá um botão de informações ao lado da experiência do Katib, dentro do painel Kale:

95b092180d71dc80.png

Clique nele para ver o melhor resultado e os parâmetros que o produziram:

3b0ce47e548e5afb.png.

6. Limpar

Destruir a VM do MiniKF

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

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