O que é aprendizado de máquina distribuído?

Autores

Ivan Belcic

Staff writer

Cole Stryker

Staff Editor, AI Models

IBM Think

O que é aprendizado de máquina distribuído?

O aprendizado de máquina (ML) distribuído é uma abordagem para tarefas de ML em grande escala, em que as cargas de trabalho estão distribuídas em vários dispositivos ou processadores, em vez de serem executadas em um único computador. O ML distribuído é mais frequentemente usado para treinar modelos grandes e complexos, como redes neurais, onde as demandas computacionais são especialmente altas. 

À medida que os modelos de inteligência artificial (IA) escalam em tamanho e complexidade, os recursos necessários para treinamento podem exceder a capacidade de um único dispositivo. Da mesma forma, tarefas complexas em grande escala podem ser muito exigentes ou requerer mais memória do que um dispositivo pode fornecer. Os sistemas distribuídos particionam o conjunto de dados ou o modelo de IA em vários dispositivos, ou nós, para melhorar o desempenho, a precisão e a eficiência. 

O ML distribuído é um subconjunto da computação distribuída que engloba esforços mais amplos para espalhar a computação por vários sistemas de processamento.

As mais recentes tendências em IA, trazidas a você por especialistas

Receba insights selecionados sobre as notícias mais importantes (e intrigantes) sobre IA. Inscreva-se no nosso boletim informativo semanal Think. Consulte a Declaração de privacidade da IBM.

Agradecemos a você! Você se inscreveu.

Sua assinatura será entregue em inglês. Você encontrará um link para cancelar a assinatura em cada boletim informativo. Você pode gerenciar suas assinaturas ou cancelar a assinatura aqui. Consulte nossa Declaração de privacidade da IBM para obter mais informações.

Tipos de aprendizado de máquina distribuído

As abordagens ao aprendizado de máquina distribuído incluem: 

  • Paralelismo de dados: divisão do conjunto de dados em vários dispositivos 

  • Paralelismo de modelos: particionamento de um modelo em vários dispositivos 

  • Paralelismo híbrido: combinação de aspectos de paralelismo de dados e de modelos

O framework do servidor de parâmetros para ML distribuído usa um ou mais nós para manter as atualizações dos parâmetros do modelo, enquanto os nós lidam com os dados e a computação.

Paralelismo de dados

O paralelismo de dados divide um grande conjunto de dados sendo usado como dados de treinamento em um número de grupos igual ao número de nós no sistema. Cada nó hospeda uma cópia do modelo de IA e a alimenta com um subconjunto dos dados distribuídos. As operações de paralelismo de dados podem ser executadas de forma síncrona ou assíncrona. O treinamento síncrono é mais comum com modelos de deep learning porque garante a consistência, mas ao custo da velocidade. 

Como cada nó executa uma cópia completa do modelo, o hardware deve ter memória suficiente para hospedá-la. Entretanto, a carga de trabalho de IA por nó é reduzida, pois cada um processa apenas parte do conjunto de dados.

Aprendizado federado

O aprendizado federado se assemelha ao paralelismo de dados, pois vários nós treinam cópias de um modelo em subconjuntos de dados. No entanto, as partições de dados não são criadas a partir de um conjunto de dados centralizado, mas consistem em dados locais para cada nó. As atualizações do modelo são agregadas entre os nós, enquanto os dados nunca saem de sua fonte original. 

Como cada conjunto de dados é localizado, cientistas de dados frequentemente usam aprendizado federado para aplicações de deep learning distribuídas, que envolvem alta segurança de dados ou regulamentações legais. Conjuntos de dados centralizados podem expor acidentalmente informação de identificação pessoal (PII) durante a transmissão. O aprendizado federado mitiga esse risco ao isolar cada conjunto de dados em seu próprio nó.

AI Academy

Torne-se um especialista em IA

Adquira conhecimento para priorizar os investimentos em IA que estimulam o crescimento dos negócios. Comece a usar hoje mesmo a nossa AI Academy sem custo e lidere o futuro da IA na sua organização.

Paralelismo de modelos

No paralelismo de modelos, um modelo é dividido em partes componentes, como camadas de uma rede neural profunda, que podem ser executados de forma independente e simultânea em nós separados. Cada parte do modelo usa os mesmos dados. O paralelismo de modelos também é conhecido como paralelismo de rede

Quando um único modelo de ML é muito grande para ser manipulado por uma única máquina, o paralelismo de modelos permite que o modelo seja executado em vários nós. Cada nó lida com uma parte do modelo, de modo que seus requisitos de computação e memória são menores do que se uma única máquina tivesse que executar o modelo completo. 

O paralelismo de modelos costuma ser mais difícil de implementar do que o paralelismo de dados. O algoritmo de aprendizado de máquina distribuído selecionado afeta diretamente a escalabilidade do método, com alguns se prestando à técnica mais do que outros. O sistema deve ser construído de forma a minimizar a quantidade de compartilhamento de dados entre os nós. Sistemas de paralelismo de modelos de alto desempenho exigem projeto e otimização de nível de especialista. 

O paralelismo de modelos é frequentemente combinado com o paralelismo de dados de modo que cada segmento do modelo processe uma parte diferente dos dados de entrada. Os resultados são agregados em toda a rede.

Paralelismo de pipelines 

Paralelismo de pipelines é um tipo de paralelismo de modelos que divide um modelo sequencialmente. Cada estágio do modelo é hospedado em seu próprio nó. Os lotes de dados são processados em ordem ao longo dos estágios, da mesma forma que uma antiga equipe de baldes passaria um balde de água de uma pessoa para outra, da fonte de água ao incêndio. 

O paralelismo de pipelines pode melhorar o rendimento (o volume de dados que um modelo pode processar de uma só vez). No entanto, esse impulso vem com o custo de maior latência, que é o tempo necessário para gerar um resultado após o recebimento de uma entrada. 

O aumento na latência se deve à fase de aceleração durante a qual os microlotes iniciais de dados são passados pela sequência. Os estágios posteriores no pipeline de aprendizado de máquina não podem ser inicializados até que os primeiros microlotes de dados passem pelos estágios anteriores.

Paralelismo de tensores

O paralelismo de tensores entra em jogo quando até mesmo uma única camada de uma rede neural profunda requer muito poder computacional ou ocupa muito espaço para um único dispositivo. As camadas de autoatenção e embedding (dois pilares da arquitetura de transformação) podem crescer muito, o que significa que praticamente todo o desenvolvimento de grandes modelos de linguagem (LLM) envolve o paralelismo de tensores. Sem o paralelismo de tensores, seria praticamente impossível treinar modelos LLMs, pois as camadas são grandes demais para qualquer dispositivo. 

No paralelismo de tensores, os parâmetros de uma única camada são alojados em várias GPUs (unidades de processamento gráfico) ou TPUs (unidades de processamento tensor). Cada dispositivo calcula parte das operações de uma única camada, e os resultados parciais são agregados para produzir a saída da camada. 

Em comparação com o paralelismo de dados e muitos outros tipos de paralelismo de modelos, os fluxos de trabalho do paralelismo de tensores exigem muito mais comunicação entre os nós. Redes de alta largura de banda podem ajudar a reduzir gargalos de comunicação.

Paralelismo híbrido

Técnicas de paralelismo de dados e de modelos não são usadas isoladamente com frequência. Elas são frequentemente combinadas em várias configurações de paralelismo híbrido. Os frameworks de deep learning de código aberto PyTorch e TensorFlow, ambos os quais são compatíveis com Python, são comumente usados para construir sistemas distribuídos de aprendizado de máquina. 

A maioria dos modelos de linguagem de grande escala, incluindo a família GPT, depende do paralelismo híbrido para treinar em escala de forma eficiente.

Como funciona o aprendizado de máquina distribuído

O ML distribuído pode expandir cada estágio do pipeline de ML: o processo de construção, treinamento e implementação de modelos de aprendizado de máquina. Pré-processamento, treinamento, ajuste fino, validação, inferência e implementação 

  • Pré-processamento de dados distribuído 

  • Treinamento distribuído

  • Ajuste fino distribuído 

  • Validação distribuída 

  • Inferência distribuída 

  • Implementação distribuída 

Pré-processamento de dados distribuído

O pré-processamento de dados distribuído usa redes vinculadas de nós (os vários processadores ou dispositivos, não os neurônios individuais da rede neural, que também são chamados às vezes de “nós”) para preparar grandes conjuntos de dados para análise e uso adicional. 

Um nó central gerencia o fluxo de trabalho, dividindo os dados e atribuindo-os a nós de trabalho. A descentralização do trabalho por meio do processamento paralelo aumenta a escalabilidade e a eficiência em comparação com os modelos tradicionais, que utilizam um único dispositivo.

Treinamento distribuído

O treinamento distribuído aproveita técnicas de ML distribuído para espalhar o treinamento de modelos entre dispositivos. Por exemplo, essa técnica é frequentemente usada com grandes redes neurais. Quando a rede, o conjunto de dados de treinamento ou ambos são muito grandes para um processador, o treinamento distribuído distribui a carga de trabalho entre vários servidores, GPUs ou máquinas. 

O gradiente descendente estocástico (SGD) é um algoritmo de aprendizado que divide o conjunto de dados em minilotes e calcula o gradiente da função de perda após cada lote. Usar minilotes em vez do conjunto de dados completo torna o treinamento mais eficiente. 

A função de perda mede o erro nas previsões do modelo, e o objetivo do SGD é diminuir o gradiente para minimizar o valor da função. Assim como no treinamento de modelo padrão, o processo de treinamento é considerado concluído quando o modelo atinge a convergência: quando o algoritmo SGD minimiza com sucesso o valor da função. 

Nós processam minilotes em paralelo, o que é possível porque cada lote é processado independentemente dos outros dentro de cada iteração. Cada nó calcula seu gradiente e, em seguida, envia o valor do gradiente atualizado para os outros nós da rede. Os outros nós de trabalho implementam as atualizações que recebem em seus próprios modelos, ajudando a garantir que todas as cópias do modelo permaneçam idênticas durante todo o processo de treinamento. 

A função AllReduce é uma operação de comunicação coletiva que permite que cada nó compartilhe seus resultados e propague os resultados agregados pela rede. O AllReduce permite que todos os nós sincronizem as atualizações de parâmetros do modelo e mantenham a consistência. O AllReduce, há muito usado em computação de alto desempenho, foi popularizado em frameworks de ML, como o Horovod. 

O SGD pode ser executado de forma síncrona ou assíncrona. O SGD síncrono atualiza todos os nós ao mesmo tempo, o que mantém a consistência ao custo de possíveis atrasos se alguns nós ficarem para trás. O SGD assíncrono atualiza os parâmetros assim que uma atualização está pronta, mas alguns nós podem receber atualizações que não incluem os valores mais atualizados. 

Ao reduzir os recursos computacionais necessários por dispositivo, o treinamento distribuído pode acelerar os tempos de treinamento. Por ter um uso tão intenso de computação, o treinamento é um dos principais casos de uso para o ML distribuído.

Ajuste fino distribuído 

Os mesmos princípios e benefícios do treinamento distribuído se aplicam ao ajuste fino distribuído. O ajuste fino treina um modelo pré-treinado para se especializar em tarefas mais específicas. A aplicação de técnicas de ML distribuído torna o processo mais rápido, eficiente e escalável.

Validação distribuída 

Validação é o processo de avaliação do desempenho de um modelo treinado. Distribuir o conjunto de dados ou um modelo grande em nós oferece os mesmos benefícios que o restante do processo de treinamento distribuído. 

Inferência distribuída

Inferência é o processo pelo qual um modelo de IA treinado processa novos dados para reconhecer padrões e gerar saídas ou previsões. A distribuição da carga de trabalho entre vários dispositivos possibilita operar modelos de IA que são muito grandes para uma única máquina. A inferência distribuída também pode facilitar maior rendimento e menor latência.

Implementação distribuída 

A implementação distribuída gerencia as operações de uma aplicação de software em uma rede de nós. O balanceamento de carga entre os nós ajuda a mitigar gargalos e otimizar a eficiência dos recursos, aumentando o rendimento e reduzindo a latência.

Benefícios do ML distribuído

Os benefícios do aprendizado de máquina distribuído incluem: 

  • Eficiência 

  • Escalabilidade

  • Redundância

Eficiência

Automatizar e dividir a carga de trabalho entre vários dispositivos reduz a carga em qualquer um dos dispositivos. Os nós podem trabalhar em paralelo para concluir tarefas de longo prazo mais rapidamente e, em seguida, agregar suas saídas ao resultado final. 

Treinar um modelo de reconhecimento de imagens no ImageNet (um conjunto de dados com mais de 14 milhões de imagens rotuladas) levaria semanas em uma única GPU. Com o ML distribuído, até mesmo uma pequena startup poderia realizar essa tarefa em horas.

Escalabilidade

As empresas não precisam investir em computadores ultrapoderosos para executar LLMs e outros sistemas que consomem muitos recursos. A computação distribuída permite que os provedores de serviços de nuvem coordenem uma vasta infraestrutura em muitos servidores e data centers, disponibilizando-a para os clientes corporativos sob demanda.

Tarefas com uso intenso de ciência de dados, como processamento de dados com big data, podem ser concluídas sem investimento significativo em infraestrutura. O processamento de dados em grande escala permite que até startups menores ofereçam a seus usuários serviços como sistemas de recomendação ou chatbots

Enquanto isso, os data centers em hiperescala estão no outro extremo do espectro de escalabilidade. Onde os recursos permitem, as organizações estão construindo clusters de servidores maciços para executar as redes neurais profundas mais avançadas. Não seria possível operar modelos tão grandes em milhares de GPUs sem o ML distribuído.

Redundância

Muitos sistemas do mundo real dependem da tolerância a falhas (a capacidade de continuar operando mesmo que os nós individuais falhem). Os provedores de modelos precisam garantir que os usuários individuais, bem como aplicações conectadas com APIs, possam desfrutar de acesso ininterrupto. No ML distribuído, a redundância preserva o tempo de atividade ao replicar processos entre nós para que as falhas não interrompam o serviço.

Desafios do ML distribuído

Os desafios da implementação eficaz do ML distribuído incluem: 

  • Gargalos de rede

  • Sobrecarga de sincronização 

  • Consumo de energia

Gargalos de rede

Uma largura de banda insuficiente entre os nós é uma causa frequente de gargalos em redes de ML distribuído. Métodos como o paralelismo de tensores, que exigem mais comunicação, são os que mais necessitam de largura de banda. Se a rede não conseguir fornecer a largura de banda necessária, os projetos de ML distribuído enfrentarão tempos de treinamento maiores e escalabilidade reduzida.

Sobrecarga de sincronização

A sobrecarga de sincronização é um atraso que ocorre quando uma tarefa não pode ser iniciada até que outra tarefa seja concluída. Em um sistema síncrono, todos os nós de trabalho devem fazer upload de dados compartilhados antes de passar para o próximo estágio de treinamento. Este momento é conhecido como uma barreira de sincronização, porque a próxima fase não começa até que todos os nós estejam sincronizados. 

Nós retardatários (trabalhadores que demoram mais do que outros para concluir sua tarefa) retardam, assim, todo o processo. Os sistemas assíncronos removem a barreira sob o risco de ter alguns nós operando com configurações de parâmetros obsoletas.

Consumo de energia

Redes distribuídas podem ser grandes consumidores de energia, não apenas devido aos nós, mas também à comunicação entre eles. O consumo de energia pode variar dependendo da implementação e arquitetura do sistema de ML distribuído. 

  • Requisitos computacionais: as GPUs de alto desempenho necessárias para muitas tarefas desafiadoras de ML consomem muita energia. 

  • Comunicação: os nós precisam de redes de alta velocidade para se comunicar efetivamente e minimizar a sobrecarga de sincronização. 

  • Computação em nuvem ou edge computing: os data center centralizados em hiperescala que alimentam os modelos de IA consomem enormes quantidades de energia. A edge computing pode ajudar a reduzir os custos de rede. 

  • Algoritmo e processamento de dados: escolher o algoritmo certo e seguir boas práticas de processamento de dados, como engenharia de funcionalidades, pode tornar os modelos mais eficientes.

Frameworks de aprendizado de máquina distribuídos

Os frameworks de ML distribuído implementam o aprendizado de máquina e, ao mesmo tempo, otimizam o uso da memória e dos recursos de computação. Eles também podem ajudar a escalar as implementações de ML, reduzir os tempos de treinamento e controlar os custos.

Os frameworks de ML distribuído notáveis incluem:

  • PyTorch Distributed
     

  • Apache Spark
     

  • TensorFlow Distributed
     

  • Ray Train
     

  • InstructLab

PyTorch Distributed

Disponível no popular framework de ML PyTorch, o PyTorch Distributed é um conjunto de ferramentas para construir e escalar modelos de deep learning em vários dispositivos. O pacote torch.distributed cobre comunicação intra-nó, como com o AllReduce. A compatibilidade integrada com o paralelismo de dados e o paralelismo de modelos possibilita uma série de abordagens de treinamento distribuído.

Apache Spark

O Apache Spark é um framework de ML de longa data com compatibilidade com o treinamento distribuído. Os usuários podem criar pipelines de ML de ponta a ponta que se integram ao ecossistema Spark, incluindo o Spark SQL para manipulação de bancos de dados. O Spark oferece duas bibliotecas: a MLlib original e a SparkML mais recente.

TensorFlow Distributed

A API tf.distribute.Strategy no TensorFlow abre as portas para o ML distribuído e é compatível com uma variedade de esquemas: várias GPUs em uma máquina, várias GPUs em várias máquinas e muito mais. Por exemplo, a ParameterServerStrategy armazena parâmetros em servidores dedicados, a partir dos quais os nós de trabalho os acessam.

Ray Train

O Ray Train é a biblioteca distribuída escalável de treinamento e ajuste fino dentro da framework Ray ML para computação distribuída. O Ray Train é compatível com o PyTorch e TensorFlow. A biblioteca Ray Tune é compatível com o ajuste de hiperparâmetros distribuídos em vários dispositivos.

InstructLab

A abordagem inovadora do InstructLab para ML distribuído evita o cluster de GPUs tradicional em favor de uma abordagem baseada na comunidade, quase como uma arrecadação de fundos de crowdsourcing. Os membros da comunidade contribuem com atualizações de parâmetros para um repositório centralizado e podem fazer ajuste fino de modelos em seus dispositivos pessoais.

Soluções relacionadas
IBM watsonx.ai

Treine, valide, ajuste e implemente recursos de IA generativa, modelos de base e recursos de aprendizado de máquina com o IBM watsonx.ai, um estúdio empresarial de última geração para construtores de IA. Crie aplicações de IA em uma fração do tempo com uma fração dos dados.

Conheça o watsonx.ai
Soluções de inteligência artificial

Use a IA a serviço de sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.

Explore as soluções de IA
Consultoria e serviços em IA

Reinvente os fluxos de trabalho e operações críticos adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor de negócios.

Explore os serviços de IA
Dê o próximo passo

Obtenha acesso completo aos recursos que abrangem o ciclo de vida do desenvolvimento da IA. Produza soluções poderosas de IA com interfaces fáceis de usar, fluxos de trabalhos e acesso a APIs e SDKs padrão do setor.

Explore o watsonx.ai Agende uma demonstração em tempo real