Como os sistemas de produção de aprendizado de máquina do mundo real são executados?

7

Caro Comunidade de Machine Learning / AI,

Sou apenas um aprendiz de máquina iniciante e aspirante que trabalhou em conjuntos de dados on-line abertos e em alguns POCs construídos localmente para o meu projeto. Eu construí alguns modelos e converti-os em objetos pickle para evitar o treinamento.

E essa pergunta sempre me intriga. Como um sistema de produção real funciona com algoritmos de ML?

Digamos, eu treinei meu algoritmo de ML com alguns milhões de dados e quero movê-lo para o sistema de produção ou hospedá-lo em um servidor. No mundo real, eles se convertem em objetos de picles? Se assim for, seria enorme arquivo em conserva, não é. Os que eu treinei localmente e converti para os próprios dados de 50000 linhas ocuparam espaço de 300 Mb no disco para esse objeto em conserva. Eu não acho que essa seja a abordagem correta.

Então, como ele funciona para evitar que meu algoritmo de ML seja treinado novamente e comece a prever os dados recebidos? E como realmente criamos o algoritmo ML como um aprendiz on-line contínuo. Por exemplo, construí um classificador de imagens e começo a prever as imagens recebidas. Mas quero treinar novamente o algoritmo adicionando as imagens online recebidas aos meus conjuntos de dados treinados anteriormente. Pode não ser para todos os dados, mas diariamente, uma vez que eu quero combinar todos os dados recebidos para esse dia e treinar novamente com 100 imagens que meu classificador previamente treinado previu com valor real. E essa abordagem não deve afetar meu algoritmo treinado anteriormente para parar de prever os dados recebidos, pois esse treinamento pode levar tempo com base em recursos e dados computacionais.

Eu pesquisei no Google e li muitos artigos, mas não consegui encontrar ou entender a minha pergunta acima. E isso está me intrigando todos os dias. A intervenção manual também é necessária para os sistemas de produção? ou alguma abordagem automatizada existe para isso?

Qualquer sugestão ou resposta às perguntas acima seria muito útil e apreciada. Informe-me se minhas perguntas não fizerem sentido ou não forem compreensíveis.

Este não é um projeto centrado que estou procurando. Apenas um caso genérico de exemplo de sistemas ML de produção no mundo real.

Agradeço antecipadamente!

Manikant Kella
fonte

Respostas:

2

Há muitas coisas a considerar para se ter um modelo em produção. Os principais sobre os quais você está perguntando são:

  • Funcionalidade
  • Arquitetura

Funcionalidade

Para que seu modelo seja usado na produção de um servidor da Web, você pode hospedar uma API que expõe seu modelo.

Por exemplo, você tem um servidor Flask Python em execução, onde mapeia um terminal (por exemplo GET http://<your_host>/prediction/image.jpg) para a predict()função do seu modelo.

Então você mencionou torná-lo um aprendiz on-line contínuo . A maioria dos classificadores melhorará com mais dados se esses dados forem anotados (ou seja, rotulados), mas, para isso, é necessário anotá-los manualmente e realimentá-los novamente no sistema e treinar novamente o modelo. Se você pudesse rotular automaticamente novos dados com confiança, não precisaria melhorar seu sistema. Então, eu diria que seria necessário algum trabalho manual (rotulagem), mas o restante pode ser automatizado. Você pode adicionar mais pontos finais ao servidor da Web, onde pode fazer upload de mais dados de treinamento, e o sistema treina novamente o seu modelo, cuida da versão e recarrega o modelo treinado mais recente.

Arquitetura

Armazenamento

Você menciona picklearquivos e tem medo de que sejam muito grandes no disco. No entanto, hoje em dia, com soluções em nuvem, isso geralmente não é um problema.

Você pode usar soluções de armazenamento em blob e os preços geralmente são muito baixos (por exemplo, https://azure.microsoft.com/en-us/services/storage/blobs/ custará0,002euros / GB / mês).

Obviamente, é possível manter muitos pickles lá, para controle de versão (recomendado). No entanto, se você quiser minimizar os custos, poderá armazenar apenas o modelo mais recente.

Além disso, se sua API é usada com frequência, você não deseja continuar recarregando seu modelo sempre. Seria melhor tê-lo sempre disponível na RAM. Novamente, não é caro hospedar um servidor com muita RAM na nuvem.

Layout

Um layout de arquitetura que você pode ter é:

+----------------+          +--------------+
|                |          |              |
|  ADMIN SERVER  | -------> | BLOB STORAGE |
|                |          |              |
+----------------+          +--------------+
        |                           ^
        |                           |
        |               +-----------+-----------+
        |               |                       |
        |      +------------------+  +----------------+
        |      |                  |  |                |
        |      |  PREDICT SERVER  |  | PREDICT SERVER |
        |      |                  |  |                |
        |      +------------------+  +----------------+
        |                    ^          ^
        |                    |          |
        |                +------------------+
        |                | |              | |
        +--------------> | |     QUEUE    | |
                         | |              | |
                         +------------------+

Aqui, ele ADMIN SERVERcuida de todas as funcionalidades de refazer o treinamento do modelo e fazer upload de novos modelos para os trabalhos de armazenamento e publicação na fila para PREDICT SERVERSbuscar os modelos mais recentes BLOB STORAGE.

O BLOB STORAGEdetém os modelos.

Eles PREDICT SERVERexpõem sua predict()função, para que seu modelo seja acessível a outros sistemas. Aqui, os modelos são armazenados na RAM para previsões mais rápidas. Dependendo do uso do seu modelo, você pode querer ter1 1servidor para previsões. Como o modelo é mantido no BLOB STORAGEdisco rígido local e não no disco rígido local, isso é possível, todos eles podem buscar o modelo mais recente.

A QUEUEé como o ADMIN SERVERpode se comunicar com todos os PREDICT SERVERs.

Bruno Lubascher
fonte
Muito obrigado Bruno! Essa é uma das melhores e mais simples narrações que recebi sobre a questão.
Manikant Kella
@ManikantKella meu prazer. A qualquer momento.
Bruno Lubascher
2

Sim, é típico ter alguma representação persistente do modelo carregado e, sim, geralmente é muito grande como um arquivo / arquivos. Usar pickleé uma maneira de fazer isso, comumente usado com scikit-learn, por exemplo. As estruturas de aprendizado profundo geralmente têm seus próprios formatos, mas nada impede você de usá pickle-las também, exceto que é mais complicado e menos eficiente como abordagem.

Não sei se entendi a segunda parte da pergunta, mas se você deseja modificar seu modelo on-line, nada o impede de criar um novo pickle. É recomendável executar um novo treinamento como um processo em lote separado em segundo plano, para evitar o bloqueio do site ou serviço da web, especialmente se o servidor de aplicativos da web for de thread único. Além disso, você precisa ter cuidado com a utilização dos recursos do servidor, portanto, é melhor executar atualizações em lote como essa em períodos de baixo tráfego. Isso pode ocorrer no fim de semana ou se sua base de usuários for predominantemente regional, à noite ou em feriados.

mapa para
fonte
Sim, arquivos em conserva podem ser usados. Mas imagine milhões de dados e converter esse modelo treinado em arquivo pickle nesses dados pode ocupar em gigabytes. E, se apresentarmos dados de engenheiro, eles também precisarão ser convertidos em pickle para aumentar o espaço no servidor. Como evitamos essa situação no mundo real? Por outro lado, pretendia treinar e armazenar novamente como novo arquivo de pickle, é necessária a intervenção manual, que qualquer automatizada pode fazer, como fazer previsões on-line e novos dados para dados antigos e treinar automaticamente.
Manikant Kella
Você pretende usar o scikit-learn ou qualquer outra estrutura? Como eu disse, diferentes estruturas fornecem outras possibilidades para a persistência do modelo. Essencialmente, a grande maioria deles escreve em um arquivo. De fato, vários gigabytes não são tanto. Você pode até armazená-lo em uma unidade SSD no servidor para obter melhor desempenho.
Map
Você não acha que deve ser possível automatizar com scripts a intervenção manual que você está considerando atualmente?
Map
Sim, estou falando principalmente sobre o uso do scikit learn.
Manikant Kella
Hummm, isso pode ser possível, mas como automatizamos se meu modelo ou sistema está funcionando bem ou não em novos dados treinados. existe uma maneira nesse caso?
Manikant Kella