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:
Verifique os seguintes requisitos mínimos:
- Verifique 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 US $300 de crédito, não será possível executar a instalação padrão do GCP no MiniKF, porque o nível sem custo financeiro não oferece recursos suficientes. Você precisa fazer upgrade para uma conta paga.
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.
Se o projeto ainda não estiver selecionado, clique em Selecionar um projeto:
Selecione o projeto. Você só deve ter um:
3. Instalar MiniKF
Crie uma instância do Compute incluindo MiniKF
No GCP Marketplace, pesquise "MiniKF".
Selecione a máquina virtual MiniKF da Arrikto:
Clique no botão INICIAR e selecione seu projeto:
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:
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. 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 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.
Clique em New Server.
Especifique um nome para o servidor de notebook.
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.
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 cadernos anotados.
Na barra lateral, navegue até a pasta data/kale/examples/dog-breed-classification/
e abra o notebook dog-breed.ipynb
.
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:
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:
Reinicie o kernel do notebook clicando no ícone Reiniciar:
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:
Ative o Kale clicando no controle deslizante no Kale Deployment Panel:
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.
Clique no botão Compile and Run:
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.
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.
A interface do Kubeflow Pipelines é aberta em uma nova guia. Aguarde a execução terminar.
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.
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.
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.
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:
No painel esquerdo do notebook, ative a opção Ajuste de HP com o Katib para executar o ajuste de hiperparâmetros:
Em seguida, clique em Set up Katib Job para configurar o Katib:
Defina o espaço de pesquisa para cada parâmetro e defina uma meta:
Clique no botão Compile and Run Katib Job:
Acompanhe o progresso da experiência 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 de experimentos do Katib, você vai encontrar os novos testes:
Na interface do KFP, você verá as novas execuções:
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:
E mais execuções na interface do KFP:
Quando o experimento do Katib for concluído, todos os testes vão aparecer na interface:
E todas as execuções na interface do KFP:
Ao voltar para o Notebook, você verá um botão de informações ao lado da experiência do Katib, dentro do painel Kale:
Clique nele para ver o melhor resultado e os parâmetros que o produziram:
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:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Chamada semanal da comunidade, Slack e outros detalhes da comunidade