Implantando um modelo de aprendizado de máquina com Docker - parte 1

A tradução do artigo foi preparada às vésperas do início dos cursos básico e avançado de aprendizado de máquina.







. OTUS Machine Learning: . , -, — (Senior Data Scientist Oura) , .



Como cientistas de dados, nosso foco principal é processar dados e desenvolver e aprimorar modelos de aprendizado de máquina. Há uma opinião de que o processamento de dados é a etapa mais demorada em todo o projeto, e a precisão do modelo determina o sucesso do produto de informação. No entanto, a indústria está agora em um estágio de transição "da era da descoberta para a era da implementação" (Superpotências no campo da inteligência artificial: China, Vale do Silício e a nova ordem mundial nesta área é ditada por Li Kaifu) O cenário está se ampliando agora, e o foco está mudando da construção do modelo para fornecer o modelo aos usuários como um serviço e do desempenho do modelo para seu valor comercial. O exemplo mais famoso aqui é o Netflix, que nunca usou os modelos vencedores de seu Algoritmo de US $ 1 milhão devido aos custos de engenharia - WIRED , apesar dos ganhos de desempenho significativos prometidos desses motores .





Da compreensão à realidade (slides da conferência Strata Data - Kubeflow explicou: aprendizado de máquina portátil no Kubernetes ) A



implementação do modelo é extremamente importante, e produtos de informação agora podem ser considerados produtos de software, porque têm estrutura de projeto, gerenciamento e ciclo de vida semelhantes. Portanto, temos o direito de usar todas as técnicas conhecidas no campo de desenvolvimento de software para implantar modelos de aprendizado de máquina na produção.



A conteinerização é um método amplamente usado para implantar produtos de software em uma plataforma de nuvem e em um servidor local. Basicamente, estamos falando sobre empacotar código e dependências em uma caixa chamada contêiner. A seguir está a definição de um contêiner no contexto de desenvolvimento de software:



No site do Docker , um



Container é um pedaço de software padrão que empacota código e todas as suas dependências para que um aplicativo possa ser executado de forma rápida e confiável em diferentes ambientes de computação.



Docker é uma plataforma que pode ajudá-lo a acelerar o desenvolvimento, a conteinerização e a implantação de nosso modelo de aprendizado de máquina em outros ambientes. Nesta série de artigos, mostrarei como armazenar um modelo, usá-lo como um endpoint de API, armazenar seu aplicativo de ML e executá-lo no mecanismo Docker.



Pergunta um "Por que Docker?"



Antes de começarmos, você precisará se registrar com um Docker ID, se não tiver um, e então usar esse ID para baixar e instalar o Docker em sua máquina.



Quando comecei meu trabalho no banco, fui designado para um projeto que envolvia processamento de dados, e o primeiro MVP (produto mínimo viável) tinha que ser entregue em um mês. Parece estressante, mas nós, na equipe, usamos a metodologia Agile no desenvolvimento de todos os principais produtos, e o objetivo principal deste MVP foi testar a hipótese sobre a praticidade e eficácia do produto (para obter mais informações sobre a metodologia Agile, consulte o livro de Eric Ries "Lean Startup" ). Meu gerente queria que eu implantasse meu modelo em seu laptop, ou seja, executá-lo e usá-lo para fazer previsões.



Se você imaginou todas as etapas que precisei realizar para preparar o laptop do gerente para executar meu projeto, você pode ter muitas perguntas, como:



  • Em qual sistema operacional o modelo precisará para rodar, já que ele usa um Macbook e ThinkPad? Eu poderia, é claro, perguntar a ele sobre isso, mas suponha que naquele momento da minha vida meu chefe fosse muito desagradável e não quisesse que eu soubesse dessa informação. (Este pensamento está aqui para alertá-lo sobre o problema de dependência do sistema operacional, e meu chefe é uma pessoa muito boa.)
  • Segunda pergunta: "Ele tem o Python instalado?" Se sim, qual versão, 2 ou 3? Qual deles: 2.6, 2.7 ou 3.7?
  • E quanto aos pacotes necessários, como scikit-learn, pandas e numpy? Ele tem as mesmas versões que eu tenho na minha máquina?


Com todas essas perguntas em mente, aqui está o que tive que fazer com seu computador para colocar meu modelo em execução.



  1. Instale o Python.
  2. Instale todos os pacotes.
  3. Configure as variáveis ​​de ambiente.
  4. Transfira o código para o carro.
  5. Execute o código com os parâmetros necessários.


Todas essas etapas exigem muito esforço e existe o risco de incompatibilidade ao executar o código em ambientes diferentes.



Portanto, se você já tem o Docker instalado e em execução, pode abrir um terminal e executar o seguinte comando:



docker run --rm -p 5000:5000 datascienceexplorer/classifier


Depois de alguns minutos, você verá algo semelhante em seu terminal:



* Serving Flask app "main" (lazy loading)
* Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)


Agora abra seu navegador favorito e vá para este endereço:



http://localhost:5000/apidocs/


Clique na prever linha da API e, em seguida, sobre o try-out botão do lado direito, a interface será parecido com este:





Swagger página para a API no backend



Lembre-íris padrão Flores conjunto de dados que você jogou com? Este pequeno aplicativo o ajudará a prever o tipo de flor com base em algumas informações de medição com base em um modelo de classificação. Na verdade, você já está usando meu modelo de aprendizado de máquina como um serviço e tudo o que você instalou é apenas Docker, e não precisei instalar Python ou qualquer pacote em sua máquina.



Essa é a força do Docker. Isso me ajuda a resolver problemas de dependência para que eu possa implantar meu código rapidamente em diferentes ambientes ou, neste caso, em sua máquina.



DevOps Data Science



Agora, espero ter motivado você o suficiente para continuar lendo, e se você quiser apenas pular essas partes e ir direto para o código, então está tudo bem, pois isso significa que você deseja contentorizar seu modelo de aprendizado de máquina com Docker e expô-lo como serviço. No entanto, por enquanto, teremos que parar um pouco e colocar todos os materiais sobre aprendizado de máquina e Docker de lado para pensar sobre DevOps em Data Science e por que ele é necessário ali.



O que é DevOps?



Da Wikipedia,

DevOps é uma coleção de práticas que combinam desenvolvimento de software e serviços de tecnologia da informação, cujo objetivo é encurtar o ciclo de vida de desenvolvimento do sistema e garantir uma entrega contínua de software de alta qualidade.
O objetivo dos desenvolvedores de software é a entrega oportuna de código com todas as funcionalidades necessárias, além de facilidade de uso, confiabilidade, escalabilidade, rede, firewall, infraestrutura, etc. frequentemente permanecem problemas operacionais. Devido a diferentes objetivos finais e prováveis ​​KPIs, essas equipes geralmente não se dão sob o mesmo teto. Portanto, o especialista em DevOps poderia atuar como um elo de ligação e ajudar essas equipes a trabalharem juntas, ou até mesmo assumir a responsabilidade de ambas as partes, para que no final você tenha uma equipe, liderando o desenvolvimento do início ao fim. Afinal, você não pode simplesmente dar o seu computador ao cliente porque o código funciona como deveria.

Mas com o notebook Jupyter estou feliz !!!
Os cientistas de dados têm uma história semelhante, porque, novamente, você não pode simplesmente pegar e dar seu laptop com o Jupyter Notebook para que o cliente simplesmente o use. Precisamos de uma maneira de usar o modelo para que ele possa servir a um grande número de usuários a qualquer hora, em qualquer lugar e aumentar com o mínimo de tempo de inatividade (usabilidade, confiabilidade, escalabilidade).



Por esse motivo, as empresas estão procurando analistas de dados com habilidades em DevOps que possam implantar e implantar seus modelos de aprendizado de máquina na produção e entregar valor de negócios para a empresa, em vez de apenas provar conceitos e se concentrar em melhorar a precisão do modelo. Essas pessoas são chamadas de unicórnios.



Existem muitas maneiras de implantar um modelo de aprendizado de máquina, mas o Docker é uma ferramenta poderosa que oferece a flexibilidade de que você precisa, enquanto mantém a robustez e o encapsulamento do seu código. Claro, não pediremos aos nossos clientes para instalar o Docker e abrir um terminal para executá-lo. Mas essa fase de conteinerização acabará se tornando a base quando você começa a trabalhar com projetos reais em que precisa implantar seus modelos em plataformas de nuvem ou servidores locais.



Armazenando o modelo treinado



De volta à universidade, ficamos sabendo que o projeto Data Science consiste em seis etapas, conforme mostra a figura abaixo. Se automatizar e implantar o modelo para produção é nosso objetivo final, como podemos “colocar” o modelo na fase de implantação?





Seis etapas de um projeto de Data Science



A maneira mais fácil que você pode imaginar é copiar tudo de nosso bloco de notas, colá-lo em um arquivo .py e executá-lo. No entanto, sempre que precisarmos fazer uma previsão, executaremos esse arquivo e treinaremos o modelo novamente com os mesmos dados. Se essa abordagem for de alguma forma aplicável para modelos simples com um pequeno conjunto de dados de treinamento, ela não será eficaz para modelos complexos com muitos dados de treinamento (pense em quanto tempo você levará para treinar um modelo ANN ou CNN). Isso significa que quando um usuário envia uma solicitação de modelo para predição, ele terá que esperar de vários minutos a várias horas para obter o resultado, já que levará muito tempo para concluir o estágio de treinamento do modelo.



Como armazenar o modelo imediatamente após o treinamento?



Na maioria dos casos, um modelo de aprendizado de máquina em Python será armazenado na memória como um objeto Python durante a execução do código e, em seguida, excluído após a conclusão do programa. Se pudéssemos salvar este objeto no disco rígido imediatamente após o modelo ser treinado, da próxima vez que precisarmos fazer uma previsão, podemos simplesmente carregar o modelo concluído na memória e não passar pelos estágios de inicialização e treinamento. Na ciência da computação, o processo de conversão de um objeto em um fluxo de bytes para armazenamento é chamado de serialização . Em Python, isso pode ser feito facilmente com um pacote chamado pickle , que tem suporte nativo a Python pronto para uso. Os desenvolvedores de Python também chamam de "pickling" o processo de serializar um objeto usando pickle....



No bloco de notas Jupyter, você pode salvar facilmente o objeto de modelo (no meu caso, "knn") em um arquivo pkl , que está localizado no mesmo diretório que o código:



import pickle

with open('./model.pkl', 'wb') as model_pkl:
  pickle.dump(knn, model_pkl)


Salvando o modelo no diretório atual



Meu notebook, recomendo tirar daqui , para que tenhamos resultados semelhantes no futuro. Como alternativa, você pode usar seu próprio modelo, mas certifique-se de ter todos os pacotes necessários, bem como as entradas de modelo corretas.



Concluída a primeira etapa, você salvou o modelo treinado. Além disso, iremos reutilizar o modelo para previsão, mas mais sobre isso na segunda parte do artigo.






Aprender mais sobre:








Consulte Mais informação






All Articles