Fluxo de trabalho de aprendizado de máquina em contêiner com o Docker

Conteúdo

Anos, máquinas virtuais (VM) foram a principal ferramenta para hospedar um aplicativo, pois encapsula o código e os arquivos de configuração junto com as dependências necessárias para executar um aplicativo. Oferece a mesma funcionalidade de um sistema físico.

Para executar vários aplicativos, temos que iniciar várias máquinas virtuais e gerenciar um conjunto de máquinas virtuais, precisamos de um hipervisor.

container-vm-whatcontainer_2-7503589

Fonte: Infraestrutura de compartilhamento de aplicativos

Mover de máquinas virtuais para contêineres

A limitação deste mecanismo (Máquinas virtuais) é que não é eficiente, já que executar vários aplicativos irá replicar seus próprios sistemas operacionais, que consome uma grande quantidade de recursos e, conforme os aplicativos em execução aumentam, precisamos de mais espaço para alocar recursos.

Outra desvantagem disso é, suponha que tenhamos que compartilhar nosso aplicativo com outras pessoas, e quando eles tentam executar o aplicativo na maioria das vezes ele não funciona devido a problemas de dependência e por isso, só temos que dizer que "Funciona no meu laptop / sistema“. Então, para que outros executem os aplicativos, deve configurar o mesmo ambiente em que foi executado no lado do host, o que significa muita configuração manual e instalação de componentes.

A solução para essas limitações é uma tecnologia chamada Containers.

Construir modelos de aprendizado de máquina em Notebooks Jupyter não é a solução final para qualquer POC / esboço, projeto, precisamos colocá-lo em produção para resolver problemas da vida real em tempo real.

Então, o primeiro passo é embalar / empacotar nosso aplicativo para que possamos executá-lo em qualquer plataforma de nuvem para aproveitar as vantagens de serviços gerenciados e escalonamento automático e confiabilidade, e muitos mais.

Para empacotar nosso aplicativo, precisamos de ferramentas como o Docker. Então, vamos trabalhar em ferramentas incríveis e ver a mágica..

Containers

Um contêiner é uma unidade padrão de software que empacota o código e todas as suas dependências para que o aplicativo seja executado de forma rápida e confiável de um ambiente de computação para outro..

Agora, várias máquinas virtuais são substituídas por vários contêineres em execução em um único sistema operacional host. Os aplicativos executados em contêineres são completamente isolados e têm acesso ao sistema de arquivos, recursos e pacotes do sistema operacional. Para criar e executar contêineres, precisamos de ferramentas de gerenciamento de contêineres, O que Arrumação.

docker-containerized-application-blue-border_2-6319065

Fonte: Aplicativos que compartilham o sistema operacional

Arrumação

Docker é uma ferramenta de gerenciamento de contêineres que empacota o código do aplicativo, configuração e dependências em uma imagem portátil que pode ser compartilhada e executada em qualquer plataforma ou sistema. Con Docker, podemos conter vários aplicativos e executá-los na mesma máquina / sistema, uma vez que todos irão compartilhar os mesmos serviços de kernel do sistema operacional, usam menos recursos do que as máquinas virtuais (VM).

Uma imagem de contêiner Docker é um pacote de software leve, autônomo e executável que inclui tudo que você precisa para executar um aplicativo: código, tempo de execução, ferramentas do sistema, bibliotecas e configurações do sistema.

Imagens de contêiner são convertidas em contêineres em tempo de execução e, para contêineres Docker, as imagens se tornam contêineres quando executadas no Docker Engine.

Projete o Docker

Docker Engine é o tempo de execução do contêiner que é executado em vários sistemas operacionais Linux (CentOS, Debian, Fedora, Oracle Linux, RHEL, SUSE e Ubuntu) y Windows Server.

O Docker Engine permite que aplicativos em contêineres sejam executados em qualquer lugar de forma consistente em qualquer infraestrutura, resolvendo o “inferno de dependência” para desenvolvedores e equipes de operações, e eliminando o “Funciona no meu laptop!!” problema.

Os contêineres Docker executados no Docker Engine são:

  • Padrão: Docker criou o padrão da indústria para contêineres, para que eles pudessem ser transportados em qualquer lugar.
  • Luz: Os contêineres compartilham o kernel do sistema operacional da máquina e, portanto, não requer um sistema operacional por aplicativo, resultando em maior eficiência do servidor e menores custos de servidor e licenciamento.
  • Certo: Os aplicativos são mais seguros em contêineres e o Docker fornece os recursos de isolamento padrão mais fortes do setor.

Instalação do Docker

Docker é uma plataforma aberta para o desenvolvimento, enviar e executar aplicativos. Docker nos permite separar nossos aplicativos de nossa infraestrutura para que possamos entregar software rapidamente.

Podemos baixar e instalar o Docker em várias plataformas. Confira o Docker oficial página para instalar o Docker de acordo com o sistema operacional do seu sistema local.

Depois de instalar o Docker, Você pode verificar se a instalação foi bem-sucedida executando o estivador comando no terminal / simbolo do sistema.

O resultado será semelhante ao seguinte, se você receber um erro de permissão, tente executá-lo no modo de usuário root (no Linux é usado Sudo Docker).

48710docker_check-5095638

Fonte: Autor

Dockerfile

Um arquivo simples que consiste em instruções para criar uma imagem Docker. Cada declaração em um arquivo docker é um comando / Operação, por exemplo, qual sistema operacional usar, quais dependências instalar ou como compilar o código, e muitas dessas instruções que agem como uma camada.

A melhor parte é que todas as camadas são armazenadas em cache e se modificarmos algumas instruções no Dockerfile, durante o processo de construção, a camada modificada será simplesmente reconstruída.

Um exemplo de Dockerfile será semelhante a abaixo

FROM ubuntu:18.04
WORKDIR /app 
COPY . /app 
RUN pip install -r requirements.txt EXPOR 5000 CMD python app.py 

Cada instrução cria uma camada:

  • A PARTIR DE crie uma camada a partir da imagem de base, aqui nós usamos ubuntu: 18.04 Imagem Docker
  • WORKDIR especificar diretório de trabalho
  • CÓPIA DE adicione arquivos do diretório atual do seu cliente Docker ou sistema host, aqui estamos adicionando os arquivos do diretório atual ao diretório do aplicativo de contêiner
  • PARA CORRER especifique quais comandos executar dentro do contêiner, aqui executando o comando pip para instalar as dependências do arquivo requirements.txt
  • EXPOR especificar qual porta expor nosso aplicativo, Aqui é 5000
  • CMD especifica qual comando executar na inicialização do contêiner

Imagem Docker

Depois que um arquivo docker é criado, podemos criar uma imagem docker a partir dele. Docker Image fornece o ambiente de execução para um aplicativo, que inclui todo o código, os arquivos de configuração e dependências necessários.

Uma imagem Docker consiste em camadas somente leitura, cada um dos quais representa uma instrução Dockerfile. As camadas são empilhadas e cada uma é um delta das alterações da camada anterior.

Podemos construir uma imagem docker com um arquivo docker usando o construção docker comando.

Assim que a imagem docker for criada, podemos testá-lo usando o Docker run comando, que criará um contêiner usando a imagem do docker e executará o aplicativo.

Registro Docker

Assim que a imagem docker for construída e testada, podemos compartilhá-lo com outras pessoas para que possam usar nosso aplicativo. Para isso, precisamos enviar a imagem do docker para o registro público de imagens do docker, como DockerHub, Google Container Registry (GCR) ou qualquer outra plataforma de registro.

Também podemos enviar nossas imagens do docker para registros privados para restringir o acesso à imagem do docker.

Aplicativo de aprendizado de máquina

O aplicativo de aprendizado de máquina consistirá em um fluxo de trabalho completo do processamento de entrada, a engenharia de funções para a geração de resultados. Veremos um aplicativo simples de análise de sentimento, que iremos colocar em contêiner usando Docker e enviar esse aplicativo para o DockerHub para torná-lo disponível para outros.

Análise de sentimentos

Não entraremos em detalhes sobre aplicativos de aprendizado de máquina, apenas uma visão geral, vamos colocar em contêiner um aplicativo de análise de sentimento do Twitter. O código e os arquivos de dados podem ser encontrados em Github.

Você pode clonar este aplicativo ou ele pode conter seu próprio aplicativo, o processo será o mesmo.

O repositório git terá os seguintes arquivos

  • app.py: Aplicação principal
  • train.py: Script para treinar e salvar o modelo treinado
  • sentiment.tsv: arquivo de dados
  • requisitos.txt: contém os pacotes / dependências necessárias
  • Dockerfile: para criar a imagem docker
  • Pasta de modelos: contém nosso site para o aplicativo
  • pasta modelo: contém nosso modelo treinado

Veja como requisitos.txt será visto, também podemos especificar a versão para cada biblioteca que precisamos instalar

numpy
pandas
scikit-learn
flask
nltk
regex

Em nosso app.py, vamos carregar nosso modelo treinado e fazer o mesmo pré-processamento que fizemos no treinamento.

O aplicativo Flask atenderá a dois endpoints, Casa, e prever

@ app.route('/')
def casa():
    return render_template('home.html')
@ app.route('/prever',métodos =['PUBLICAR'])
def prever():
    if request.method == 'POST':
        message = request.form['mensagem']
        clean_test = remove_pattern(teste,"@[C]*")
        tokenized_clean_test = clean_test.split()
        stem_tokenized_clean_test = [voices.stem(eu) para i em tokenized_clean_test]
        mensagem =" ".Junte(stem_tokenized_clean_test)
        dados = [mensagem]
        data = cv.transform(dados)
        my_prediction = clf.predict(dados)
    return render_template('result.html',predição = minha_predição)

Temos que carregar o modelo treinado, o vetorizador e o lematizador (usado no treinamento) e também configuramos para receber solicitações na porta 5000 em localhost (0.0.0.0)

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.