No mundo do Big Data e do Machine Learning (ML), algumas ferramentas podem ser aplicadas para qualquer caso de uso. Quando se trata de big data, as mais populares são Hadoop, MapReduce e Spark, embora todas elas também sejam adequadas para o aprendizado de máquina, como é conhecido o Machine Learning em português. Há alguns anos, Hadoop era a tecnologia principal de código aberto para big data. No entanto, o interesse tem diminuído, especialmente à medida que os provedores de nuvem de dados, como Snowflake, facilitam o trabalho com dados de forma rentável.
Hadoop é muito importante para algumas organizações porque é altamente escalável e redundante. Assim, o processamento de grandes volumes de dados pode ser distribuído entre grupos de servidores de tamanhos variados.
Hadoop é um framework composto por várias funcionalidades, mas em sua essência é um sistema de arquivos distribuído. MapReduce fica no topo do Hadoop e fornece recursos de processamento, trabalhando com dados estruturados e não estruturados. Porém, MapReduce tem muitas limitações, razão pela qual Spark surgiu.
Em 2015, o cientista da computação Matel Zaharia criou Spark enquanto estava na UC Berkeley. Em geral, Spark é um produto melhor do que MapReduce pelas seguintes razões: 1) ele é executado na memória (in-memory), por isso é mais rápido do que o MapReduce, que depende do disco; 2) Spark é executado em muitas plataformas diferentes, incluindo Kubernetes; 3) Spark funciona com processamento de dados em lote (batch) e em tempo real (stream), enquanto MapReduce funciona apenas com processamento em lote e 4) o ecossistema Spark está crescendo e bibliotecas como MLib foram desenvolvidas especificamente para ele. Spark MLib é uma biblioteca de Machine Learning popular que suporta cálculos do tipo NumPy e vem com algoritmos diferentes. Mais importante ainda, Spark tem a capacidade de distribuir cargas de trabalho de ML em diferentes recursos.
![This image has an empty alt attribute; its file name is Hadoop-Spark-1024x495.png](https://pynomial.com/wp-content/uploads/2022/05/Hadoop-Spark-1024x495.png)
Apache Spark e TensorFlow
As três principais fases do Machine Learning são a preparação dos dados, o treinamento e a inferência. O treinamento requer mais recursos de computação do que a inferência porque os dados fluem entre as camadas inúmeras vezes até que a precisão do modelo atinja um objetivo definido. O tempo de treinamento pode levar de horas a semanas, dependendo do tamanho do conjunto de dados e da complexidade do modelo (número de camadas e neurônios). Portanto, reduzir o tempo de treinamento é fundamental para levar os modelos para a produção mais rapidamente. No gráfico abaixo, há quatro camadas e dez neurônios neste modelo de aprendizagem profunda (deep learning). Em termos de complexidade do modelo, ele fica em algum lugar entre simples e complexo.
Um exemplo do Google
O engenheiro de Machine Learning do Google Gonzalo Gasca Meza descreve um método para reduzir o tempo de treinamento usando o aprendizado de máquina distribuído. Quando se trata de experimentação de modelos, uma prática recomendada é executar tarefas em paralelo, como busca de hiperparâmetros (ajustes) em diferentes nós. Isso é especialmente certo quando se trabalha com grandes conjuntos de dados e o volume de dados sendo trabalhado é maior do que a capacidade de um único nó. TensorFlow permite que as tarefas sejam divididas e distribuídas em diferentes máquinas para processamento, a fim de acelerar o tempo de treinamento.
Quando a experimentação avança para a produção, os pipelines de ML entram em jogo. Gonzalo divide o processo de ML em três fases: preparação dos dados, treinamento e serviço.
- Preparação dos dados: envolve engenharia de recursos e ETL. O principal trabalho aqui é coletar dados e criar recursos que representem os dados em uma tabela. Um GPU não é necessário para esta fase, portanto, um cluster de CPU deve funcionar. Apache Spark entra em jogo nesta fase.
- Treinamento: após a preparação dos dados, ocorre o treinamento. Os clusters de GPU devem ser usados nesta fase. Além disso, é necessário um gerenciador de recursos para atribuir as cargas de trabalho aos GPUs.
- Serviço: concluído o treinamento, o modelo se ajusta para produção. As cargas de trabalho podem ser distribuídas entre CPUs e GPUs. Além disso, as cargas de trabalho podem ser executadas em Kubernetes ou Docker. Mais GPUs podem ser adicionados para melhorar o desempenho.
Outras ferramentas
Existem outras ferramentas que desempenham um papel importante no aprendizado de máquina, como o gerenciador de recursos e o agendador de tarefas. YARN, criado para Hadoop, é um gerenciador de recursos e agendador de tarefas que aloca recursos em um cluster.
Nas versões mais recentes do Hadoop (3.1x) e YARN, há suporte de primeira classe para GPUs. Assim, YARN é capaz de programar recursos para serem executados em GPUs, independentemente do volume. Outra ferramenta é Kubeflow, que simplifica a implantação de fluxos de trabalho de Machine Learning em Kubernetes. No entanto, não suporta Hadoop. É aqui que TFS entra em jogo. TensorFlowOnSpark (TFS) suporta modelos de aprendizagem profunda executados em Apache Spark e Hadoop. Yahoo desenvolveu este produto para dimensionar modelos de aprendizagem profunda para que eles funcionem de forma eficiente em clusters de GPU e CPU.
Fonte: Machine learning com TensorFlow e Pytorch
TonY
TonY é um framework de deep learning desenvolvido pelo LinkedIn. Ele “executa nativamente trabalhos de aprendizagem profunda em Apache Hadoop.” Conforme ilustrado no gráfico acima, TonY é o único produto que é executado em Hadoop, suporta GPUs e tem suporte nativo de YARN. Além disso, suporta os seguintes frameworks: PyTorch, TensorFlow, MXNet e Horovod. Com as versões mais recentes do Hadoop e do YARN, as cargas de trabalho podem ser distribuídas entre GPUs e servidores.
Em resumo, Hadoop, Spark e YARN podem ser usados em modelos de aprendizado de máquina ou Machine Learning.