Machine Learning com Docker

Jonys Arcanjo
Data Hackers
Published in
5 min readMay 5, 2022

Este artigo tem o objetivo de apresentar algumas vantagens do uso de contêineres Docker com aplicações de machine learning e alguns conceitos básico da ferramenta.

Fonte: Ian Taylor

O que é o Docker?

O Docker é uma plataforma de código aberto que permite criar e implantar aplicativos rapidamente. Ele empacota seu aplicativo em um contêiner que consiste em tudo o que seu aplicativo precisa para ser executado, como todo o seu código, bibliotecas e ferramentas. O uso do Docker permite que a sua aplicação seja executada facilmente em qualquer ambiente.

O Docker que se apoia em recursos existentes no kernel, inicialmente Linux, para isolar a execução de processos. As ferramentas que o Docker traz são basicamente uma camada de administração de contêiner, baseado originalmente no LXC.

Alguns isolamentos possíveis:

• Limites de uso de memória

• Limites de uso de CPU

• Limites de uso de I/O

• Limites de uso de rede

• Isolamento da rede (que redes e portas são acessíveis)

• Isolamento do file system

• Permissões e Políticas

  • Capacidades do kernel

Estes recursos já existiam no Kernel a um bom tempo, o que o Docker trouxe foi uma maneira mais simples de utiliza-los.

Arquitetura de microsserviços

Uma coisa muito importante ao se falar de contêiner é o conceito de microsserviços. Ao dividir um aplicativo em serviços menores, cada um desses serviços(pequenos processos) são denominados microsserviços e eles se comunicam entre si por uma rede.

A abordagem de microserviços é o oposto da abordagem monolítica, onde se um dos recursos tiver algum problema ou falha todos os demais recursos também terão, comprometendo assim toda a aplicação. Outro ponto importante é quando a demanda por um determinado serviço está aumentando, somos forçado a aumentar os recursos, como hardware para toda a aplicação, este custo por ser evitado utilizando a abordagem de microsserviços, assim cada recurso do aplicativo é isolado de forma que podemos dimensionar ou atualizar sem afetar os outras partes do aplicativo.

Como exemplo no caso de um modelo de machine learning em produção poderíamos ter nossa aplicação dividida em serviços menores como por exemplo ingestão, preparação, pre-processamento, treinamento, inferência e monitoramento.

Na minha maquina funciona

Criar um modelo de machine learning que funcione em nosso computador não é dificil, mas quanto temos que escalar esta aplicação, para um modelo que funcione em qualquer tipo de servidor, é algo mais desafiador, Muitos problemas podem acontecer, como por exemplo problemas de desempenho, o aplicativo travar, A outra situação é que nosso modelo de aprendizado de máquina certamente pode ser escrito com uma única linguagem de programação, como python, mas o aplicativo certamente precisará interagir com outros aplicativos escritos em outras linguagens de programação para ingestão de dados, preparação de dados, front-end, etc.

Docker permite o gerenciamento de todas as interações, pois cada microsserviço pode ser escrito em uma linguagem diferente, permitindo assim escalabilidade e fácil manutenção em qualquer um dos recursos.

O Docker traz reprodutibilidade, portabilidade, fácil implantação, atualizações granulares, leveza e simplicidade.

2. Contêiner

Contêiner é o nome dado para a segregação de processos no mesmo kernel, de forma que o processo seja isolado o máximo possível de todo o resto do ambiente. Isto garante que o software sempre irá executar da mesma forma, independente do seu ambiente.

Em termos práticos são File Systems, criados a partir de uma “imagem” e que podem possuir também algumas características próprias.

https://www.docker.com/blog/

Imagem

As imagens do Docker contêm o código -fonte do aplicativo executável, assim como todas as ferramentas, bibliotecas e dependências que o código do aplicativo precisa para ser executado com um contêiner.

Quando você executa uma imagem do Docker, ela se torna uma instância(ou várias instâncias) do contêiner.

Volume

Os volumes são a parte “dados” de um contêiner, inicializada quando um contêiner é criado. Os volumes permitem que você persista e compartilhe os dados de um contêiner. Os volumes de dados são separados do Union File System padrão e existem como diretórios e arquivos normais no sistema de arquivos do host.

Portanto, mesmo que você destrua, atualize ou reconstrua seu contêiner, os volumes de dados permanecerão intocados. Quando você deseja atualizar um volume, você faz alterações nele diretamente. (Como um bônus adicional, os volumes de dados podem ser compartilhados e reutilizados entre vários contêineres, o que é bem legal.)

Docker Registry

O Docker registry é um sistema de armazenamento e distribuição para imagens nomeadas do Docker . A mesma imagem pode ter várias versões diferentes, identificadas por suas tags.

Um registro do Docker é organizado em repositórios do Docker , onde um repositório contém todas as versões de uma imagem específica. O registry permite que os usuários do Docker extraiam imagens localmente, bem como enviem novas imagens para o registry (com permissões de acesso adequadas, quando aplicável).

Docker Hub

Os usuários do Docker também se beneficiam do ecossistema cada vez mais rico do Docker Hub, que você pode considerar como uma “loja de aplicativos para imagens do Docker”. O Docker Hub tem dezenas de milhares de imagens públicas criadas pela comunidade que estão prontamente disponíveis para uso. É incrivelmente fácil pesquisar imagens que atendam às suas necessidades, prontas para serem retiradas e usadas com pouca ou nenhuma modificação.

Bem, é isso. Se você gostou deste post, um pouco de motivação extra será útil, dando-lhe algumas palmas 👏. Estou sempre aberto a suas perguntas e sugestões. Você pode compartilhar isso no Facebook, Twitter, Linkedin, para que este post possa vir a ser útil para outras pessoas.

Você pode me contatar em:

Linkedin

Github

Referências

--

--