Simple Science

Ciência de ponta explicada de forma simples

# Informática# Computação distribuída, paralela e em cluster

Apresentando o ARGO: Um Impulso para o Treinamento de Redes Neurais Gráficas

ARGO melhora a velocidade e a eficiência do treinamento de GNN em sistemas multi-core.

― 9 min ler


ARGO Melhora o DesempenhoARGO Melhora o Desempenhodo Treinamento de GNNARGO.Treinamento GNN rápido e eficiente com
Índice

Redes Neurais de Grafos (GNNs) são um tipo de inteligência artificial que se dá muito bem com dados organizados em forma de grafos. Grafos são compostos por nós (pontos) e arestas (conexões entre os pontos). As GNNs ajudam em várias áreas, tipo prever propriedades de moléculas, fazer recomendações em redes sociais e prever desempenho em diferentes sistemas.

Com o aumento da popularidade das GNNs, várias bibliotecas foram criadas pra facilitar os desenvolvedores a criar modelos de GNN. Duas das bibliotecas mais conhecidas são a Deep Graph Library (DGL) e PyTorch-Geometric (PyG). Essas bibliotecas oferecem ferramentas que tornam mais simples a tarefa de programar diferentes modelos de GNN e incluem backends otimizados pra fazer cálculos.

Apesar de serem eficazes, essas bibliotecas têm dificuldades pra performar bem quando usam múltiplos processadores. Essa limitação resulta em um subutilização dos recursos disponíveis e pode prejudicar o desempenho geral. Treinar GNNs requer muitos recursos e muitas vezes envolve acessar dados de forma irregular, o que as bibliotecas existentes não lidam bem em termos de uso de memória.

A Necessidade de Melhor Desempenho

O treinamento de GNNs pode ser bem intenso em termos de recursos. Por exemplo, quando você usa um modelo GraphSAGE de três camadas pra treinar com um grande conjunto de dados, escalar o programa pra mais de 16 núcleos não mostra muita melhora na velocidade. Esse problema surge principalmente pela forma como a memória é gerenciada e agendada pelas bibliotecas atuais, que não aproveitam totalmente as capacidades do hardware moderno.

Modelos de GNN precisam tanto de memória quanto de poder de processamento. Mas, as bibliotecas existentes muitas vezes agendam tarefas de um jeito que leva a um uso ineficiente dos recursos. Por exemplo, ao rodar uma única tarefa de treinamento, as operações que precisam de memória e as que precisam de computação não são balanceadas bem.

Pra usar os recursos de forma efetiva, uma abordagem é rodar várias tarefas de treinamento de GNN ao mesmo tempo. Ao permitir que essas tarefas rodem em paralelo, o uso da memória pode ser escalonado, permitindo um desempenho geral melhor. No entanto, decidir o número certo de processos pra rodar em paralelo pode ser complicado. Rodar muitos processos pode aumentar a carga de trabalho desnecessariamente, enquanto poucos processos podem não utilizar os recursos de forma eficaz.

Apresentando o ARGO

Pra enfrentar esses desafios, um novo sistema de runtime chamado ARGO foi criado pra treinar GNNs. O ARGO tem como objetivo melhorar a escalabilidade das GNNs fazendo um uso melhor dos processadores multi-core. Ele consegue isso rodando múltiplos processos de treinamento ao mesmo tempo, sobrepondo de forma eficaz as tarefas de computação e comunicação.

O ARGO tem um auto-tuner que pode encontrar automaticamente as melhores configurações pra rodar esses processos. Esse auto-tuner não requer intervenção do usuário, tornando fácil de usar. Ele funciona em segundo plano e se adapta a diferentes hardwares, modelos de GNN e conjuntos de dados, permitindo oferecer um bom desempenho em várias situações.

Testes preliminares do ARGO mostraram que ele pode acelerar significativamente o treinamento de GNN em comparação com as bibliotecas existentes. Em alguns casos, mostrou ser até cinco vezes mais rápido em sistemas multi-core. Essa melhoria não só torna o treinamento de GNN mais eficiente, mas também facilita pra os desenvolvedores integrarem o ARGO em suas bibliotecas de GNN existentes com poucas linhas de código.

Como Funcionam as GNNs

Antes de discutir o ARGO em detalhes, é útil entender como as GNNs funcionam. As GNNs aprendem a criar representações de baixa dimensão para nós em um grafo. Essas representações são conhecidas como embeddings de nós. O processo envolve duas etapas chave: Agregação de Recursos e Atualização de Recursos.

Durante a etapa de Agregação de Recursos, os recursos dos nós vizinhos são combinados pra criar um novo vetor de recursos pra um nó alvo. Isso pode ser feito usando operações como somar, tirar média ou pegar o máximo dos recursos vizinhos.

Depois da agregação, a etapa de Atualização de Recursos aplica uma função, geralmente uma perceptron de múltiplas camadas (MLP), aos recursos agregados. Essa etapa transforma os recursos de entrada em um novo espaço latente, preparando o caminho pra previsões e outras aplicações posteriores.

Treinando GNNs em Lotes

As GNNs podem ser treinadas tanto no grafo completo quanto em lotes menores. O treinamento no grafo completo pode levar a altos custos de memória e pode exigir mais ciclos de treinamento pra alcançar a convergência. Por outro lado, o treinamento em mini-lotes pode amostrar uma parte menor do grafo toda vez, tornando-se uma opção melhor pra grafos em grande escala.

O treinamento em mini-lotes é geralmente mais rápido e usa menos memória. Ele amostra subconjuntos do grafo, aplica o modelo de GNN e calcula os gradientes dessa parte menor. Existem vários algoritmos de amostragem para selecionar quais partes do grafo usar durante o treinamento, como Amostragem de Vizinhos e Amostragem ShaDow.

Com a Amostragem de Vizinhos, vizinhos são selecionados aleatoriamente pra criar um subgrafo pra cada nó alvo, enquanto a Amostragem ShaDow constrói primeiro um subgrafo localizado antes de amostrar dele. Essa abordagem ajuda a evitar o problema da Explosão de Vizinhos, onde o número de vizinhos cresce muito a cada camada do modelo de GNN.

Visão Geral dos Componentes do ARGO

O ARGO atua como uma ponte entre o modelo de GNN do desenvolvedor e o hardware. Ele é composto por vários componentes chave:

  1. Auto-Tuner: O auto-tuner determina automaticamente as melhores configurações pra rodar o treinamento de GNN. Ele explora uma pequena parte de todas as configurações possíveis, permitindo encontrar setups eficazes sem precisar de muitos testes.

  2. Engine de Múltiplos Processos: Esse componente gerencia a execução paralela de vários processos de treinamento de GNN. Ele divide os dados de entrada de forma equilibrada entre os processos e garante que eles compartilhem recursos de forma eficaz.

  3. Core-Binder: Essa função atribui núcleos de CPU aos processos de treinamento de acordo com as configurações encontradas pelo auto-tuner. Gerenciando cuidadosamente as atribuições de núcleos, o ARGO melhora o desempenho através de uma melhor alocação de recursos.

Esses componentes trabalham juntos pra garantir que o treinamento de GNN possa ser realizado de forma eficiente, maximizando o uso do hardware disponível.

Realizando Experimentos com o ARGO

Pesquisas foram feitas pra avaliar o desempenho do ARGO testando suas capacidades em diferentes plataformas de hardware. Os experimentos se concentraram no uso de dois tipos de processadores multi-core: um sistema com quatro soquetes e 112 núcleos, e uma máquina com dois soquetes e 64 núcleos.

Nesses experimentos, o ARGO foi testado com dois modelos de GNN diferentes e uma variedade de conjuntos de dados. Os resultados mostraram que o ARGO pode acelerar efetivamente o treinamento de GNN, muitas vezes mais de quatro vezes em comparação com as bibliotecas existentes.

Por exemplo, ao usar o ARGO, o tempo de treinamento foi reduzido significativamente, especialmente em conjuntos de dados maiores. Tanto o Amostrador de Vizinhos quanto o Amostrador ShaDow foram examinados, e melhorias foram notadas em todos os cenários testados.

Avaliação de Desempenho

O desempenho do ARGO foi avaliado não só em termos de velocidade, mas também em relação à precisão dos modelos treinados com ele. O auto-tuner conseguiu encontrar configurações que igualaram ou superaram o desempenho de setups manuais.

Em testes onde a GNN foi treinada usando tanto o ARGO quanto bibliotecas existentes, os resultados mostraram que o treinamento alcançou níveis de precisão semelhantes. Isso indica que, enquanto o ARGO melhora a velocidade e a utilização de recursos, ele não sacrifica a qualidade do modelo.

Além disso, os testes demonstraram que o auto-tuner tem um overhead mínimo durante o treinamento, fazendo dele uma solução leve que não prejudica o desempenho geral.

Integrando o ARGO em Frameworks Existentes

Uma das maiores vantagens do ARGO é como ele pode ser facilmente adicionado a bibliotecas de GNN existentes como DGL e PyG. Os desenvolvedores podem simplesmente incluir algumas linhas de código pra aproveitar as capacidades do ARGO sem precisar reestruturar muito seu código.

O processo de integração foi feito pra ser simples. Um usuário pode especificar o algoritmo de amostragem, conjuntos de dados e configurações usando as APIs existentes fornecidas pelas bibliotecas. Isso permite que os usuários mantenham a estrutura pretendida de seus modelos de GNN enquanto obtêm os benefícios de melhor escalabilidade e desempenho através do ARGO.

Melhorias Futuras

Embora o ARGO tenha demonstrado melhorias notáveis no desempenho, sempre há áreas pra trabalhar. Desenvolvimentos futuros podem se concentrar em aprimorar ainda mais a eficiência de como os dados são acessados e alocados durante o treinamento.

Uma área chave de exploração é o impacto dos padrões de acesso à memória no desempenho. Por exemplo, acessar dados através de diferentes soquetes pode ser mais lento do que acessar dados no mesmo soquete. No futuro, refinar o ARGO pra gerenciar melhor esses padrões de acesso pode resultar em resultados ainda melhores.

Além disso, com o avanço rápido em modelos e bibliotecas de GNN, adaptações contínuas ao ARGO garantirão que ele continue relevante e eficaz em lidar com os desafios futuros no treinamento de GNN.

Conclusão

Em resumo, o ARGO representa um avanço significativo na área de treinamento de GNN. Ao abordar os desafios das bibliotecas existentes e introduzir um mecanismo de auto-tuning eficaz, o ARGO melhora tanto a velocidade quanto a eficiência do treinamento de GNN em processadores multi-core.

Sua integração em bibliotecas populares de GNN torna acessível pra desenvolvedores, permitindo que aproveitem suas capacidades com o mínimo de esforço. À medida que a pesquisa em inteligência artificial e GNNs continua a se desenvolver, o ARGO se destaca como uma ferramenta promissora pra apoiar o progresso futuro na área.

Fonte original

Título: ARGO: An Auto-Tuning Runtime System for Scalable GNN Training on Multi-Core Processor

Resumo: As Graph Neural Networks (GNNs) become popular, libraries like PyTorch-Geometric (PyG) and Deep Graph Library (DGL) are proposed; these libraries have emerged as the de facto standard for implementing GNNs because they provide graph-oriented APIs and are purposefully designed to manage the inherent sparsity and irregularity in graph structures. However, these libraries show poor scalability on multi-core processors, which under-utilizes the available platform resources and limits the performance. This is because GNN training is a resource-intensive workload with high volume of irregular data accessing, and existing libraries fail to utilize the memory bandwidth efficiently. To address this challenge, we propose ARGO, a novel runtime system for GNN training that offers scalable performance. ARGO exploits multi-processing and core-binding techniques to improve platform resource utilization. We further develop an auto-tuner that searches for the optimal configuration for multi-processing and core-binding. The auto-tuner works automatically, making it completely transparent from the user. Furthermore, the auto-tuner allows ARGO to adapt to various platforms, GNN models, datasets, etc. We evaluate ARGO on two representative GNN models and four widely-used datasets on two platforms. With the proposed autotuner, ARGO is able to select a near-optimal configuration by exploring only 5% of the design space. ARGO speeds up state-of-the-art GNN libraries by up to 5.06x and 4.54x on a four-socket Ice Lake machine with 112 cores and a two-socket Sapphire Rapids machine with 64 cores, respectively. Finally, ARGO can seamlessly integrate into widely-used GNN libraries (e.g., DGL, PyG) with few lines of code and speed up GNN training.

Autores: Yi-Chien Lin, Yuyang Chen, Sameh Gobriel, Nilesh Jain, Gopi Krishna Jha, Viktor Prasanna

Última atualização: 2024-02-27 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2402.03671

Fonte PDF: https://arxiv.org/pdf/2402.03671

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes