MLOps em Google Cloud Platform - Introdução

Abelardo Fukasawa
Turing Talks
Published in
5 min readSep 8, 2020

Intro

Bem vindo a mais um Turing Talks! Durante os anos de 2018 e 2019, tive a oportunidade de dar aulas de ciência de dados em uma escola de tecnologia. Dentre as centenas de alunos entrando no mundo de dados, observei diversos perfis: executivos que queriam entender melhor o mundo de dados para incorporar novas estratégias às suas empresas, graduandos que viam o mercado de dados como futura carreira, profissionais de TI que queriam expandir seu leque de habilidades e até profissionais de outras áreas querendo fazer uma transição de carreira.

Independente do perfil do aluno, a dúvida mais comum que recebi como professor foi: “mas como eu pego esse modelo do meu notebook e coloco em produção?”. De fato, vejo pouquíssimos cursos e materiais na internet que consigam responder essa pergunta de maneira satisfatória, ainda menos em português. É claro que você vai encontrar como fazer uma aplicação em Flask ou FastAPI, como fazer um container de um modelo para servi-lo etc, mas essas respostas não são suficientes. Um sistema baseado em Machine Learning (ML) é, antes de tudo, um sistema de software, e deve ser tratado como tal. Se no mundo de engenharia de software é comum aprender conceitos e cultura de DevOps e deployment, por que não fazê-lo no contexto de ML?

Tentarei responder a pergunta dos meus alunos e de várias outras pessoas que estão entrando no mundo de dados com uma série de artigos sobre MLOps e desenvolvimento de aplicações de ML. A ideia é utilizar o ambiente do Google Cloud Platform (GCP) para construirmos um pipeline de um aplicação de ML, um passo por vez. Cobriremos deploy, monitoramento, orquestração de re-treino, gestão de features etc. Exceto essa parte introdutória, todo tutorial dessa série acompanhará um Google Colab com código aberto e conectado à nuvem, de modo de você pode replicar o desenvolvimento em sua conta GCP. Também tentarei deixar todo o código comentado e explicado, pois lidaremos com diversas ferramentas diferentes.

PS: algumas partes dessa série usarão produtos fora do free-tier da GCP. Avisarei sempre que isso acontecer.

O que é MLOps e por que eu deveria me importar?

Vamos dizer que você, como cientista de dados de uma empresa de marketing, foi incubido de desenvolver um produto de dados capaz de otimizar suas campanhas e canais de marketing. Você, então, pegou os dados da empresa, os limpou, fez E.D.A., feature engineering & selection, criou um modelo fantástico e ele mostrou ótima performance! Quantidade de valor gerado até o momento: zero. Não me leve a mal, mas um modelo de ML passa a gerar valor de fato quando ele está em produção, tomando decisões (com exceção de modelos puramente analíticos, claro). Ao adentrar no mundo de dados, colocamos muito energia em aprender diversos algoritmos de ML e como fazer uma modelagem de qualidade, e isso é ótimo. Porém, finalizada a modelagem, o trabalho ainda não acabou. Voltamos então à pergunta desse artigo: como colocar modelos de ML em produção?

Diferentes partes de uma aplicação de ML — a modelagem é somente uma das partes do sistema. Fonte https://cloud.google.com/solutions/machine-learning/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning

Bom, a partir do momento que saímos do Jupyter Notebook e pensamos em colocar o modelo em produção, precisamos nos preocupar em construir software capaz de responder as seguintes perguntas:

  • Como o usuário consumirá o modelo?
  • Como tornar o sistema escalável?
  • Como o modelo consumirá as features necessárias (isso se elas já estiverem prontas para serem consumidas)?
  • Será que o modelo desenvolvido realmente está pronto para produção?
  • Como serão guardadas as predições do modelo?
  • Como saber se o modelo continua saudável? Ao longo do tempo é possível que aconteça o fenômeno de Concept Drift.
  • Os outputs do modelo estão apresentando um comportamento esperado?
  • Quais recursos computacionais estão sendo consumidos pela aplicação (isso custa $)?

Ao tentar responder essas perguntas, notamos a interseção do mundo de ML com engenharia de software. Percebemos, também, que o código da modelagem em si é, portanto, somente uma das partes de uma aplicação de ML. Eis que surge o MLOps (ML + DevOPS), uma forma de gerir o desenvolvimento e operação de um sistema baseado em ML. Essa prática passou a ganhar força a partir do paper Hidden Technical Debt in Machine Learning Systems (Sculley et al, 2015). Nessa publicação, os autores trazem questões de débito técnico específicas para o cenário de ML, como Data Dependencies e Model Entanglements, recomendo fortemente a leitura.

Dessa forma, MLOps é vital para que possamos entregar sistemas baseados em ML de forma prática, segura e escalável. De uma forma resumida, temos o ciclo de um projeto de ML descrito pela imagem abaixo:

Ciclo de desenvolvimento de um projeto de ML. Fonte: https://martinfowler.com/articles/cd4ml.html

A prática de desenvolvimento a partir de MLOps engloba todas as fases e áreas desse ciclo, para que tenhamos controle contínuo do desenvovimento de nosso projeto.

Dissecando MLOps

Ok, então o que eu devo ir atrás para incluir essa prática no desenvolvimento dos meus projetos? De forma resumida, precisamos:

  • Garantir a reproducibilidade de experimentos na etapa de desenvolvimento (Model Building). Ciência de dados requer método científico, e reproducibilidade é uma das bases do mesmo.
  • Servir o nosso modelo de forma escalável, para que ele possa ser utilizado pelos seus usuários.
  • Garantir que o contexto de produção do modelo seja o mais próximo possível ao seu contexto de desenvolvimento. Caso contrário, o modelo não se comportará como desejado , necessitando de re-treino ou até uma nova modelagem do problema.
  • Replicar todo nosso ambiente e contexto de desenvolvimento da etapa de desenvolvimento no ambiente de produção. Isso inclui tanto código como pipelines de dados.
  • Monitorar os dados, comportamento do modelo e recursos utilizados continuamente. Se possível, receber alertas caso algo saia do esperado.

Nos próximos posts, iremos construir nosso pipeline de MLOps, partindo de um modelo desenvolvido em jupyter notebooks. Começaremos pela etapa que gera mais valor imediato: o deploy! Veremos alguns cenários e ferramentas para fazermos nosso primeiro deploy na nuvem. Até a próxima!

Para mais informações sobre data science, inteligência artificial e afins, acompanhe o Grupo Turing no Facebook, Linkedin, Instagram e nossos posts do Medium :).

--

--