mais lidos
Life at Nu
Conheça a sede do Nubank em Pinheiros, São Paulo/Brasil jan 11
Design
A nova aparência do Nubank: conheça nossa nova logo maio 17
Culture & Values
Como os valores e a cultura da Nu moldam os produtos que criamos ago 7
Carreiras
Reunimos grandes mentes de diversas origens que permitem a discussão e o debate e melhoram a resolução de problemas.
Saiba mais sobre nossas carreiras



Há pouco tempo, as aplicações com aprendizado de máquina começaram a surgir em vários setores. As empresas adaptaram rapidamente suas infraestruturas existentes para que pudessem entregar modelos de aprendizado de máquina que gerassem previsões em lotes.
Isso funciona bem o suficiente. Agora, parece que todos estão falando sobre como o aprendizado de máquina em tempo real é o futuro. Mas isso é verdade? Devemos realmente empreender o esforço adicional para colocar (e manter) modelos em tempo real na produção?
Você tem interesse em um minimapa que pode ajudar na decisão sobre quando e como criar modelos de aprendizado de máquina em tempo real? Continue lendo esse artigo!
O que são modelos em tempo real?
Não existe uma única definição do que é um modelo em tempo real.
Quando falamos sobre modelos em tempo real, podemos pensar em dois processos distintos, que podem acontecer em tempo real: a inferência e o aprendizado.
A primeira coisa que vem à mente é que em tempo real significa aprendizado em tempo real, em que um modelo recebe continuamente novos dados de treinamento e atualiza seus parâmetros. Isso certamente é empolgante, mas ainda é raro de se encontrar na vida real. Porém, “em tempo real” também significa inferência em tempo real, em que um modelo treinado é capaz de receber solicitações a qualquer momento e retornar previsões de forma síncrona. Isso é encontrado na vida real com mais frequência.
Nesse artigo, apresentamos estratégias para criar modelos que fazem previsões em tempo real.
Conheça nossas oportunidades
Por que usar modelos em tempo real?
Às vezes você precisa usar um modelo em tempo real simplesmente porque o problema que está tentando resolver exige a tomada instantânea de decisões.
Supondo que você deva criar uma solução baseada em AM que ajude a escalar e aprimorar o serviço ao usuário. Toda vez que um usuário abre o bate-papo em nosso app e escreve uma mensagem, devemos automaticamente identificar sobre o que ele está falando e agir de acordo (por exemplo, redirecionando-o a um bate-papo com um especialista humano).
Podemos encarar essa situação como um problema de classificação com múltiplas classes, que podem ser diferentes produtos (como cartão de crédito, conta-poupança, investimentos e assim por diante), e criar um classificador que recebe o texto escrito pelo usuário e retorna o produto sobre o qual ele provavelmente está falando.
Esse caso de uso requer um modelo em tempo real porque o modelo consome dados recém-gerados e também porque o usuário espera uma resposta rápida. A partir desse caso de uso específico, podemos tentar definir algumas regras básicas que nos ajudem a decidir quando o uso de um modelo em tempo real é ideal (ou necessário):
Certo. Há muitos bons motivos para criar modelos em tempo real. Agora é só uma questão de implantá-los. Deve ser rápido e fácil, certo? Poderíamos fazer isso com menos de 10 linhas de código:
Primeira tentativa de servir um modelo em tempo real
Não tão rápido.
Como criar modelos em tempo real?
Como as limitações de infraestrutura podem afetar as decisões de modelagem, criar um modelo em tempo real requer uma colaboração estreita entre o cientista de dados e o engenheiro de aprendizado de máquina.
Falaremos sobre dois requisitos que devem ser observados desde o início do desenvolvimento de um modelo em tempo real: pipeline em tempo real e inferência rápida.
Pipeline em tempo real
Um pipeline em tempo real deve coletar e preparar todas as entradas requeridas pelo modelo. Os dados podem ser coletados de diferentes fontes:
Após a coleta dos dados, ainda precisamos reprocessá-los. Dados históricos vindos do histórico de recursos já são pré-processados, enquanto dados novos vindos do conteúdo da solicitação ou de eventos de streaming estão em formato bruto. Agora, podemos ver claramente que temos dois pipelines separados: um pipeline em lote e um pipeline em tempo real.
Queremos garantir que a função de reprocessamento, que foi aplicada aos dados no pipeline em lote durante o treinamento, seja exatamente a mesma função aplicada ao pipeline em tempo real durante a inferência. Não fazer isso é conhecido como distorção entre treinamento e exibição.
Inferência rápida
Você se lembra daquela rede neural de ponta que criou, com 99% de precisão para todas as classes? Se você tentar medir o tempo de previsão, pode se surpreender ao constatar que ela pode levar vários segundos. Embora isso pareça rápido, especialmente para uma grande rede neural, na verdade não é.
Uma resposta considerada rápida geralmente leva milissegundos. Pense em quanto tempo o usuário está disposto a esperar antes de repetir uma ação ou simplesmente sair do app.
Os modelos em tempo real precisam ser rápidos. Basicamente, há duas formas de torná-los mais rápidos: usar hardware mais poderoso ou criar modelos mais leves.
Usar um hardware mais poderoso (como GPUs) parece uma correção rápida e razoável, mas pode ser difícil de manter em longo prazo, pois provavelmente seria uma solução não padronizada e exigiria um monitoramento mais próximo. Além disso, o tempo geral de resposta pode não ser rápido o bastante. Se tivéssemos um modelo pesado que precisasse executar inferências na GPU, haveria uma sobrecarga considerável de comunicação entre a CPU e a GPU.
Por outro lado, criar modelos mais leves é mais eficiente e fácil de manter. Se estivéssemos usando modelos leves, poderíamos escalar horizontalmente os serviços de aprendizado de máquina assim como os microsserviços regulares, possivelmente usando ferramentas internas já existentes na empresa.
Modelos pesados podem ser compactados com o uso de várias técnicas, como:
É importante ressaltar que o corte e a quantização estão disponíveis no TensorFlow e no PyTorch, então deve ser rápido e fácil executar experimentos combinando técnicas diferentes.
Além dos modelos de compactação, também podemos avaliar a eficácia de usar caching para armazenar algumas previsões. Em nosso caso de uso, após pré-processar a entrada de texto, podemos acabar com uma entrada que se repete com frequência. Nesse caso, poderíamos invocar o modelo somente na primeira vez que essa entrada fosse vista e nas chamadas seguintes, buscaríamos a previsão diretamente a partir do cache.
Mas… isso é a vida real?
Sim, com certeza! A maioria das empresas inicia sua jornada de aprendizado de máquina fazendo experimentos com modelos em lote, pois são percebidos como uma abordagem mais fácil e segura. Porém, conforme os especialistas em aprendizado de máquina e as partes interessadas da empresa trabalham juntos para descobrir novas áreas, em que o aprendizado de máquina poderia ser aplicado para maximizar valor, os problemas que exigem modelos em tempo real (como o modelo do bate-papo que mencionamos) inevitavelmente surgem.
Muitas empresas já estão entregando modelos de aprendizado de máquina em tempo real de forma segura e escalável, incluindo o Nubank. Se você gostaria de saber o que é possível fazer com sistemas de aprendizado de máquina em tempo real, junte-se a nós.
Written by Ana Martinazzo
Reviewed by Felipe Almeida
Conheça nossas oportunidades