Motivação

Quem nunca salvou um modelo do scikit-learn em formato pickle que atire a primeira pedra. Piadas a parte, sei de muitos utilizam pickle como formato padrão para persistência de modelos de machine learning (ML).

Porém eu estava assistindo a seguinte talk do Nubank

quando engenheiros da área de MLOps de lá solta a seguinte frase:

Utilizamos pickle e, infelizmente, ainda não conseguimos nos desvencilhar

Luam Catão Totti

Essa foi uma afirmação que me deu um certo choque e fez com que eu me perguntasse: se não for em pickle, como que se faz então? Esse é o pivô que motivou esse artigo, porém, ainda existiram duas outras situações.

Um dia normal no trabalho

Um belo dia uma colega de trabalho me chamou perguntando se eu tinha algum material legal para aprender um pouco mais sobre backend e construção de APIs, mas que também abordasse aspectos do nosso trabalho que também envolvia infraestrutura. Sugeri ela de fazer a rinha de backend. Foi nesse momento que também comentei que eu estudava Go e que tinha submetido uma solução pra rinha usando Go — muito motivado pela economia de recursos, dada as restrições da rinha.

Passam alguns dias, uma semana talvez, e a empresa começa uma grande frente de corte de custos com computação em nuvem visando atingir a meta de lucro proposta para o final daquele ano. Foi aí que essa colega me pergunta: porque a gente não faz o deploy de todos os modelos que temos aqui em Go? Uma vez que Go utiliza muito menos recurso que Python, a gente consegue fazer uma grande economia.

Na ocasião disse que não seria possível, porque os modelos são escritos em Python, salvos em pickle e o pickle é um formato binário Python, ou seja, sem possibilidade de ser aberto em código Go. Não só por esse impeditivo, mas, também pelo esforço para migrarmos todo o CI/CD já construído, dentre muitos outros detalhes que deveriam ser alterados para viabilizar. Por outro lado, confesso que fiquei curioso para saber se isso seria possível ou não.

IA integrada no celular

A pouco tempo comecei a ver algumas propagandas de IA diretamente integrada em celulares e fiquei me perguntando como que fazem o deploy localmente no celular, visto que geralmente os modelos são treinados em Python e muitas vezes precisam de mais recursos que um celular consegue oferecer. Em um primeiro momento achei que por debaixo eles chamavam o runtime do Python pra poder rodar os modelos, mas isso iria criar um overhead grande, principalmente em dispositivos mobile, que possuem restrição de recursos.

Foi aí que eu topei com o formato ONNX....

O que é ONNX?

ONNX significa Open Neural Network Exchange. Diferente do pickle, o ONNX é um formato aberto para representação de modelos de ML e IA na forma de um grafo. Isso é possível dado que no formato são definidos operadores comuns para modelos de ML e IA. O ONNX tem ganhado destaque por sua capacidade de promover a interoperabilidade entre diferentes frameworks. Por exemplo, codar uma rede neural em PyTorch e abrir utilizando Tensorflow. Para se aprofundar nos conceitos do ONNX, recomendo visitar a documentação oficial.

Além disso, ainda existe o ONNX runtime que é mantido pela Microsoft nesse repositório. Através desse runtime, é possível rodar um modelo ONNX em qualquer ambiente no qual seja possível instalar o runtime. Dessa forma, tornando possível fazer o treinamento de um modelo em ambiente nuvem utilizando o PyTorch e para o deploy desse modelo em um ambiente mobile bastaria utilizar o runtime do ONNX para dispositivos mobile. Isso já me responde como devem fazer o deploy de IAs diretamente em dispositivos mobile.

Mas, ainda faltou a resposta para a primeira pergunta....

É possível abrir modelos Python em Golang?

Inscreva-se para continuar lendo

Este conteúdo é gratuito, mas você deve estar inscrito em Victor Macedo para continuar lendo.

Already a subscriber?Sign in.Not now

Reply

or to participate

Keep Reading

No posts found