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:

Verifique os seguintes requisitos mínimos:
- Confira se você tem o papel de proprietário no projeto.
- Verifique se o faturamento está ativado no projeto.
- Se você estiver usando o nível sem custo financeiro do GCP ou o período de teste de 12 meses com crédito de US $300, observe que não será possível executar a instalação padrão do MiniKF no GCP, porque o nível sem custo financeiro não oferece recursos suficientes. Você precisa fazer upgrade para uma conta paga.
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.

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

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

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:

Clique no botão INICIAR e selecione seu projeto:

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:

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

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.

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 ver esta tela:

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

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.


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.

Clique em Novo servidor.

Especifique um nome para o servidor de notebook.

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.

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. Crie um novo terminal no JupyterLab.

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.

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:

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:

Reinicie o kernel do notebook clicando no ícone Reiniciar:

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:

Ative o Kale clicando no controle deslizante no Painel de implantação do Kale:

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.

Clique no botão Compilar e executar:

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.

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.

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


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.

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.

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.

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:

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

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

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

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

Acompanhe o progresso do experimento do Katib:

Clique em Visualizar para conferir o experimento do Katib:

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

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

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

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:

E mais execuções na interface do KFP:

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

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

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

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

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:
- github.com/kubeflow
- Slack do Kubeflow (link em inglês)
- kubeflow-discuss@googlegroups.com
- Chamada semanal da comunidade, Slack e outros detalhes da comunidade
