Automatizando a criação de modelos de ML com SageMaker Pipelines

Aprenda a criar fluxos de trabalho de Machine Learning com uma das ferramentas mais promissoras da nuvem pra DS: o Amazon SageMaker Pipelines

Ricardo Junior
Data Hackers
8 min readJan 11, 2022

--

Fonte: https://unsplash.com/photos/4CNNH2KEjhc

1. Introdução

A infraestrutura tradicional para o desenvolvimento de software não é a solução mais adequada quando queremos desenvolver e implantar modelos de machine learning em grande escala, conforme ml-ops.org . Esse tipo de atividade tem a característica de ser muito experimental e iterativa, e demanda uma alta variabilidade de necessidades computacionais, assim, dificulta a construção de pipelines de aprendizado de máquina , uma das etapas do processo de MLOps.

Dito isso, no final de 2020, a AWS anunciou o seu novo serviço, Amazon SageMaker Pipelines, que é integrado diretamente com o Amazon SageMaker. O Amazon SageMaker é a principal ferramenta de ciências de dados da AWS. Esse serviço possibilita que cientistas de dados e desenvolvedores criem, treinem e implantem modelos de aprendizagem de máquina de forma rápida e fácil em qualquer escala. O Amazon SageMaker inclui módulos que podem ser usados juntos ou separadamente para criar, treinar e implantar seus modelos de aprendizagem de máquina.

O Amazon SageMaker Pipelines é um serviço de integração contínua e entrega contínua (CI/CD, criado com o intuito de ajudar os cientistas de dados e os engenheiros a construir fluxos de trabalho de machine learning , que pode ser usado para automatizar diferentes fases na criação de um modelo, como: carregamento de dados, transformação de dados, treinamento e registro de modelos.

Além disso, Amazon SageMaker Pipelines dá suporte aos cientista de dados e aos engenheiros a capacidade de implantar modelos para inferência em real time, em batch e o rastreamento da linhagem dos artefatos.

Por fim, o SageMaker Pipelines oferece suporte a uma linguagem específica de domínio(DSL), muito parecido com um JSON. Esta DSL define um gráfico acíclico direcionado (DAG) que são os parâmetros e as etapas do pipeline.

2. SageMaker Pipelines

DAG de uma Pipeline

Um pipeline é uma sequência de etapas conectadas. Dito isso, um pipeline vai definir um gráfico acíclico dirigido (DAG), que é uma coleção de todas as tarefas que vão ser executadas e como são os relacionamentos e dependências. A imagem acima nos dá um exemplo de DAG, que é a que vai ser construída nesse post.

As próximas seções vão ser como podemos um construir um pipeline e explorar seus recursos, usando o conjunto de dados de classificação de vinhos. Nesse post, vamos usar o SageMaker Studio para construir tudo o que vai ser comentado a seguir. E, todos os códigos executados estão no meu GitHub.

Então, esse post vai ser mais focado em explicar como funciona a ferramenta e em explora-la, sem se preocupar muito em algumas etapas que envolvem códigos.

2.1 Definindo os parâmetros paro o Pipeline

Definindo os parâmetros paro o Pipeline

O primeiro passo que vamos dar é definir alguns parâmetros básicos do nosso pipeline. Vamos determinar a quantidade de instâncias que vamos usar, cada etapa pode ter sua quantidade específica. Depois, definimos quais são os tipos de instâncias que vamos usar para processar e treinar nosso modelo, isso nos ajuda na variabilidade de necessidades computacionais. Além disso, temos definir como vai ser o tipo de aprovação do modelo, coloquei manual por motivos didáticos, mas ele pode ser aprovado e registrado automaticamente, se passar pela condição de registro (etapa mais na frente). Por fim, definimos o local onde tá os nossos dados bruto, coloquei em um bucket do s3.

2.2 Etapa de Processamento

Configurando o processador do pré-processamento
Criando etapa de processamento dos dados

Agora, depois que fizemos as nossas definições iniciais, vamos ter que processar os nossos dados brutos, para depois criar o nosso modelo.

Dessa forma, para fazer o processamento desses dados, criamos um script bem simples, que consiste em apenas em dividir os dados entre treino, test e validação, e normaliza-los, esse script vai tá no GitHub.

Assim, criamos uma instância com a imagem do sklearn com a versão 0.23–1, para fazer essa atividade, que você pode ver na primeira célula da imagem acima. Para terminar , criamos o passo de pré-processamento dos dados, onde indicamos o nome dessa etapa na DAG, qual vai ser a imagem que vai processar (que foi criando acima), o input , que são os dados os brutos, quais são os outputs que essa etapa vai ter e qual o caminho do nosso script de processamento.

2.3 Etapa de treinamento do modelo

Nessa etapa, podemos dividir em dois passos, primeiro seria a criação da imagem do modelo e segundo seria o passo de treinamento do modelo.

Criando o modelo

A primeira passo que fazemos é parecido com o de processamento, definir a imagem que vamos usar no nosso modelo, como vamos usar o XGBoost, vamos usar a imagem desse modelo, a versão e o tipo de instância que vamos usar. E, para treinar o modelo usamos um Estimator, que é uma interface de treinamento do SageMaker e, por fim, indicamos o quais são os hyperparameters do nosso modelo.

Criando etapa de treinamento

Depois do modelo criado, criamos essa etapa no nosso pipeline. A etapa de treinamento consiste em passar alguns parâmetros básicos: o modelo que vamos usar e os inputs, que são os dados de treinamento e teste que foram acontecidos na etapa de processamento.

2.4 Etapa de avaliação do modelo

Processador do script de avaliação
Criando etapa de avaliação do modelo

Depois do modelo criado, é hora de avaliarmos se foi um bom modelo ou não. Para isso, fiz um script chamado evaluation.py, que também tá no GitHub. Ele carrega o modelo criado, faz uma previsão usando os dados de validação, calcula a acurácia e salva em um json chamado evaluation.json.

Dessa forma, na primeira célula da imagem acima, nós apenas configuramos como vai ser o ambiente do script de evolução, como: imagem utilizada, tipo de instância etc. Na célula seguinte, criamos a etapa de evolução do modelos. Precisamos passar alguns parâmetros básicos, como: os inputs, que é o caminho do modelo e dos dados, o output vai ser o json com as métricas e o caminho do nosso script. Assim, criamos a etapa de avaliação do nosso modelo, que vai executada dentro do pipeline.

2.5 Etapa condicional

Criação da etapa condicional

Depois do modelo treinado e avaliado, ter que criar uma etapa que se satisfazer alguma condição, vai registrar o modelo.

Dessa forma, nessa etapa, criamos uma condição que vai usar o json criado no passo anterior e vai analisar a acurácia do modelo. Se a acurácia for maior que 0.7, ele vai registrar o modelo. Senão, vai parar a execução do pipeline (linha 6–13). E, criamos a etapa dentro do nosso pipeline.

Essa etapa é muito interessante , pois vai nos trazer só os modelos que satisfaz uma condição de nosso interesse.

2.6 Etapa de registro do modelo

Etapa de registro do modelo

Por fim, antes de executar o pipeline, criamos a etapa de registro do modelo, pois ele vai ser registrado se satisfazer a condição imposta na etapa anterior.

Então, primeiro vamos recuperar as métricas do nosso modelo (linha 5–12) obtidas em etapas anteriores, para começar a criar a etapa de registro do modelo (linha 13–24). Os parâmetros mais importantes dessa etapas são: qual a interface a gente vai usar (que foi declarada no treinamento), vamos recuperar o artefato do modelo, os tipos de dados que vão entrar e sair do modelo, instâncias para inferência e processamento em batch, as métricas e como vai ser a aprovação desse modelo. Assim, temos a etapa de registro do modelo.

2.7 Criando, executando e explorando o pipeline

Criando e executando o pipeline

Por fim, depois de todas as etapas criadas: processamento, treinamento, avaliação, condição e registro do modelo. Criamos o nosso pipeline com todos esses passos e fornecemos todos os parâmetros que declaramos no começo desse artigo.

Depois de executar nossa pipeline, ele vai aparecer na aba de pipeline e vamos poder ver todas as nossas execuções. Como eu tinha executado mais de uma vez, tem vários logs de execução. Se clicarmos na nossa execução vamos ter nossa DAG:

DAG do pipeline

Quando exploramos a nossa execução, podemos ver os detalhes de todas as etapas. Como na imagem acima, temos, na direita, todos os detalhes da etapa de processamento, como: quais são inputs, os outputs, o caminho do script no s3 e outros parâmetros e logs bem interessantes. Isso se aplica a todas as etapas do nosso pipeline. Assim, podemos documentar e guardar toda a linhagem da criação do modelo, e garantir a reprodutibilidade do nosso modelo.

Agora, depois que o nosso modelo passou pela etapa de condição, vamos poder aprovar ou não. Então, se formos em modelos registrados, vai existir um modelo pendente de aprovação, se tiver colocado a aprovação manual:

Análise de modelo registrado

Como eu já tinha outros modelos registrado, a versão que está pendente para mim é a versão 3. Então se clicarmos nele, vamos poder atualizar status , visualizar métricas etc.

Mudando status do modelo

Então, como um modelo registrado, podemos colocar ele em produção para fazer inferência em um endpoint ou em batch. Isso garantindo um dos processos do MLOps, que é a implantação e o versionamento de modelos.

3. Conclusão

O objetivo por trás de um pipeline de MLOps é consolidar e acelerar o processo de construção de um modelo de machine learning, mas que ainda garanta o processo de experimentação, reprodutibilidade, avaliação de modelo etc. Nesse artigo, vimos como podemos solucionar esses problemas usando o SageMaker Pipelines da AWS e as suas principais funcionalidades. Essa ferramenta pode ajudar muito um time de dados, pois possibilita garantir boas práticas na implantação e monitoramento de fluxos de trabalho de produção, implantação de modelos, segurança e o rastreamento dos objetos, tudo isso por meio de código e uma interface simples.

No meu GitHub há todos os códigos executados nesse post. Espero que tenha sido útil para você! Caso desejem enviar sugestões , queiram outros temas de post, mais features que podemos usar no SageMaker Studio, feedbacks ou apenas trocar um papo legal podem falar comigo no meu Linkedin :) . Se gostou , curte e compartilha para chegar em mais pessoas :).

--

--

Ricardo Junior
Data Hackers

Data Engineer - Sênior | Ml Engineer | Python | AWS | Azure | LinkedIn: shorturl.at/GPY35