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. 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ável: pode usar recursos flutuantes e só é limitado pelo número de recursos alocados para o cluster do Kubernetes.
  • Componível: permite configurar etapas independentes em um fluxo de trabalho completo de ML, escolhendo entre um conjunto selecionado de frameworks e bibliotecas de ML.

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

Neste codelab, você vai aprender a 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 veicular um modelo. Tudo isso é feito em um notebook do Jupyter.

O que você vai criar

Neste codelab, você vai criar um pipeline de ciência de dados complexo com ajuste de hiperparâmetros no 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 com ajuste de hiperparâmetros 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

Configurar o projeto do GCP

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

Crie um projeto ou selecione um atual:

99b103929d928576.png

Verifique os seguintes requisitos mínimos:

Para mais ajuda com a configuração de um projeto do GCP, consulte a documentação do GCP.

Depois de configurar seu projeto do GCP, siga diretamente as instruções para instalar o MiniKF.

Abra seu projeto pré-alocado do GCP

Para abrir seu projeto pré-alocado do GCP, clique no botão abaixo para acessar o Console do GCP e abra o painel "Início", que fica no menu de navegação no canto superior esquerdo. Se a tela estiver vazia, clique em "Sim" na solicitação 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ó pode ter um:

fe25c1925487142.png

3. Instalar o MiniKF

Criar uma instância de computação, incluindo o 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

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

7d5f7d17a80a1930.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 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 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. 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 seu código de ML, executar o Kubeflow Pipelines e usar 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 de identificação de raças de cachorros, um projeto do Nanodegree de IA da Udacity. Com uma imagem de um cachorro, o modelo final vai fornecer uma estimativa da raça dele.

Criar um servidor de notebook no cluster do Kubeflow

Acesse o link Notebooks no painel central do Kubeflow.

60825e935fd0f39b.png

Clique em Novo servidor.

f9303c0a182e47f5.png

Especifique um nome para o servidor de notebook.

a2343f30bc9522ab.png

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

gcr.io/arrikto/jupyter-kale:f20978e

Adicione um novo volume de dados vazio de 5 GB e o nomeie 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.

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

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

2bc436465522f65b.png

Conheça o código de ML do exemplo de identificação de raças de cachorros

Por enquanto, não execute as células que baixam os conjuntos de dados, porque você vai usar alguns conjuntos menores incluídos no repositório que acabou de clonar. Se você estiver executando este exemplo no seu próprio ritmo em casa, faça o download dos conjuntos de dados.

Execute a célula imports para importar todas as bibliotecas necessárias. O código falha porque uma biblioteca está faltando:

5e2b97ab2512f139.png

Normalmente, você precisa criar uma nova imagem Docker para executar este notebook como um pipeline do Kubeflow e incluir as bibliotecas recém-instaladas. Felizmente, Rok e Kale garantem que todas as bibliotecas instaladas durante o desenvolvimento cheguem ao pipeline, graças à tecnologia de criação de snapshots do Rok e à montagem desses volumes de snapshots nas etapas do pipeline.

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

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

Converter o 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 Painel de implantação do Kale:

804cfbf9d76b7e23.png

Analise as dependências por célula no notebook. Veja como várias células de 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 de 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. Elas têm a mesma cor vermelha e dependem de uma etapa anterior do pipeline.

fcd0fb351cdfb359.png

Clique no botão Compilar e executar:

18f2f6f0e12393d5.png

Agora o Kale assume o controle e cria seu notebook, convertendo-o em um pipeline do Kubeflow Pipelines. Além disso, como o Kale se integra ao Rok para fazer snapshots do volume de dados do notebook atual, é possível acompanhar o progresso do snapshot. O Rok cuida do controle de versões de dados e da reprodução de todo o ambiente como estava quando você clicou no botão Compilar e executar. Assim, você tem uma máquina do tempo para seus dados e código, e o pipeline é 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 interface do Kubeflow Pipelines e conferir a execução.

e0b467e2e7034b5d.png

A interface do usuário do Kubeflow Pipelines é aberta em uma nova guia. Aguarde a conclusão da execução.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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

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

Veja os resultados

Confira os registros da etapa cnn-from-scratch. Clique na etapa no gráfico da interface do Kubeflow Pipelines e na guia Registros. Esta é a etapa em que você treinou uma rede neural convolucional (CNN) do zero. O modelo treinado tem uma acurácia muito baixa e, além disso, essa etapa levou muito tempo para ser concluída.

62bf0835e9896c67.png

Confira os 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 a do modelo anterior, mas ainda podemos melhorar.

2b45072da65e20ae.png

Agora, confira os 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 de notebook na interface do Kubeflow e abra o notebook chamado dog-breed-katib.ipynb (no caminho data/kale/examples/dog-breed-classification/). Nele, você vai executar alguns experimentos de ajuste de hiperparâmetros no modelo ResNet-50 usando o Katib. Há uma célula no início do notebook para declarar parâmetros:

87b9f6c98dc1823e.png

No painel à esquerda do notebook, ative Ajuste de HP com Katib para executar o ajuste de hiperparâmetros:

a518eba74d341139.png

Em seguida, clique em Configurar job do Katib para configurar o Katib:

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

Clique no botão Compilar e executar job do Katib:

f9c1ab0a6a3c5e8d.png

Acompanhe o progresso do experimento 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 do experimento do Katib, você vai encontrar os novos testes:

a511dca519580133.png

Na interface do KFP, você vai encontrar as novas execuções:

43dd34ee2b75018d.png

Vamos entender o que acabou de acontecer. Antes, o Kale produzia uma execução de pipeline de um notebook. Agora, ele cria várias execuções de pipeline, 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. O Katib não sabe nada sobre os jobs que estão sendo executados (chamados de testes no jargão do Katib). Tudo o que o Kale se importa é com o espaço de pesquisa, o algoritmo de otimização e a meta. O Katib oferece suporte à execução de jobs simples (ou seja, pods) como testes, mas o Kale implementa um shim para que os testes executem pipelines no Kubeflow Pipelines e, em seguida, colete as métricas das execuções de pipeline.

À medida que o experimento do Katib produz testes, mais testes aparecem na interface do Katib:

3e854d3d4bb766c.png

E mais execuções na interface do KFP:

ffd30dcefa739962.png

Quando o experimento do Katib for concluído, você poderá conferir todos os testes na interface do Katib:

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

Se você voltar ao notebook, vai encontrar um botão de informações ao lado do experimento do Katib no painel do Kale:

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

6. Limpar

Destrua a VM do MiniKF

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

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