[ASPLOS 2023] Graph neural network unifica a abstração do operador gráfico uGrapher, melhorando consideravelmente o desempenho da computação

Autor: Zhou Yangjie, Shen Wenting

abertura

Recentemente, o artigo "Graph Neural Network Unified Graph Operator Abstraction uGrapher", de coautoria da equipe da plataforma de aprendizado de máquina Alibaba Cloud PAI e do professor da Shanghai Jiao Tong University, Jing Jingwen, foi aceito pela ASPLOS 2023.

A fim de resolver o problema de desempenho do kernel estático de diferentes operadores de grafos na estrutura da rede neural de grafos atual em diferentes dados de grafos, o uGrapher separa o cálculo e o agendamento de operadores de grafos, abstraindo todos os operadores de grafos em uma forma de expressão intermediária unificada. define o espaço de design para otimizar operadores de gráfico na GPU e fornece suporte de computação de alto desempenho para operadores de gráfico em redes neurais de gráfico, visando operadores de gráfico que mudam dinamicamente e gerando de forma adaptativa estratégias de execução paralela para dados de gráfico. Comparado com DGL [1], PyG [2] e GNNAdvisor [3], o uGrapher pode atingir uma melhoria média de desempenho de 3,5 vezes.

fundo

Nos últimos anos, Graph Neural Networks (GNNs) têm atraído grande atenção da academia e da indústria devido à sua poderosa capacidade de aprender e inferir estruturas de grafos em espaços não euclidianos. Os GNNs combinam a transformação de recursos baseada em DNN com operações baseadas em grafos para propagar e agregar informações ao longo da estrutura do grafo. Os frameworks GNN existentes, como DGL e PyTorch-Geometric (PyG), estendem os frameworks DNN (como TensorFlow e PyTorch) e introduzem o conceito de "mensagens", que são valores intermediários de vetores de recursos associados a cada aresta. Para qualquer operação no gráfico \(G=(V,E)\) , ela pode ser dividida em três estágios de acordo com os atributos dos dados e a direção do movimento dos dados, ou seja, criação de mensagem, agregação de mensagem e atualização de recursos, e a fórmula é a seguinte:

imagem.png

Entre eles, \(u\) e \(v\) são índices de vértice, \(e\) são índices de aresta entre \(u\) e \(v\) ; \(h_v\) são índices de vértice \(v \ ) é o autovetor, \(m_e\) é a mensagem na borda \(e\) .

uGrapher define os operadores que precisam percorrer a estrutura do gráfico de entrada como operadores de gráfico. Os operadores de gráfico incluem três categorias: "criação de mensagem", "agregação de mensagem" e "agregação de fusão". Entre eles, "agregação de fusão" significa que quando "criação de mensagem" é uma operação de cópia simples, ela pode ser fundida com "agregação de mensagem" para evitar acesso redundante. DGL e PyG adotam essa otimização de fusão.

Tomando o modelo GAT como exemplo, ele contém diversos operadores de grafos com diferentes modos de computação. A primeira operação de "criação de mensagem" é muito leve, ela adiciona os recursos dos vértices de origem e destino de cada aresta como uma mensagem para calcular o peso de atenção; a segunda operação de "agregação de fusão" primeiro copia os recursos do vértice de origem e depois multiplique os pesos de atenção aresta por aresta e, finalmente, agregue as mensagens nas arestas transformadas em novos recursos de vértices. A segunda operação é mais computacionalmente intensiva do que a primeira.

Devido ao comportamento irregular da memória causado pela estrutura do grafo, juntamente com os cálculos aritméticos complexos nesses operadores de grafos, a computação de alto desempenho de operadores de grafos em redes neurais de grafos torna-se um importante desafio.

As estruturas existentes de redes neurais de grafos dependem de kernels estáticos manuscritos para realizar a computação de operadores de grafos. No entanto, com a evolução dos algoritmos de redes neurais de grafos, a variabilidade e a complexidade dos operadores de grafos continuam aumentando, e seus cálculos tornam-se mais complexos, o que torna difícil para os operadores estáticos manter um bom desempenho. Portanto, este artigo explora como realizar a otimização computacional de operadores de grafos na mudança de dados e modelos de grafos.

desafio

(1) A rede neural do grafo apresenta as duas principais características da complexidade do operador do grafo e a variabilidade dos dados do grafo, o que leva à dificuldade no cálculo e otimização do operador do grafo.

A tabela abaixo categoriza os 160 operadores gráficos suportados pelo DGL de acordo com os tipos de dados de entrada e saída. Mesmo com os mesmos tipos de dados de entrada ou saída, os operadores gráficos podem realizar diferentes modos de computação. A complexidade dos operadores gráficos torna difícil encontrar uma maneira estática de fornecer suporte de alto desempenho para todas as operações de computação dos operadores gráficos.

imagem.png

Os conjuntos de dados gráficos no mundo real variam muito. A escala do grafo, ou seja, o número de vértices e arestas, o grau de equilíbrio do grafo, ou seja, o desvio padrão dos valores diferentes de zero das linhas da matriz de adjacência, e os tamanhos dos atributos e classes, são propriedades que variam significativamente entre diferentes gráficos. Essas diferenças afetam o uso de memória e a complexidade computacional dos operadores gráficos.

(2) Devido à falta de métodos de otimização do sistema, o kernel CUDA subjacente usado pela estrutura GNN existente apresenta problemas de ineficiência e falta de flexibilidade.

O DGL chama kernels CUDA estáticos ao oferecer suporte à interface de programação de passagem de mensagem acima, e esses kernels estáticos não podem se adaptar a cenários de computação em constante mudança. Por exemplo, ao executar um grafo desbalanceado, a baixa utilização da GPU leva a um desperdício de recursos de hardware. O desempenho da GPU geralmente é limitado pelo paralelismo ao executar gráficos pequenos, enquanto a largura de banda de acesso torna-se um gargalo ao executar gráficos grandes devido à baixa localidade. Ao mesmo tempo, esses indicadores também variam entre diferentes operadores gráficos.

imagem.png

Quebra

O uGrapher usa loops aninhados como expressão de agendamento de operadores gráficos e permite que os usuários personalizem tensores de entrada e operações de funções em diferentes estágios para representar diferentes operações de operadores gráficos.

A figura abaixo mostra os detalhes abstratos da unificação dos operadores de grafos na rede neural de grafos.

imagem.png

edge_op realiza a representação da função de acesso à memória e cálculo na aresta, e collect_op realiza a representação da função de mesclagem da aresta para o vértice. Há também três tensores de entrada, que podem ser o tensor de incorporação de vértice de origem (Src_V), o tensor de incorporação de vértice de destino (Dst_V), o tensor de incorporação de aresta (Edge) e qualquer um de NULL. O tipo de dados do tensor também determina os diferentes modos de endereçamento na computação do loop (linhas 10 a 12).

A fórmula a seguir define formalmente a abstração unificada do uGrapher, onde \(\psi\) é a função edge_op e \(\rho\) é a função collect_op. Essa abstração captura toda a semântica dos operadores de gráficos, incluindo seus padrões de computação e movimento de memória.

imagem.png

De acordo com a abstração unificada dos operadores gráficos, o uGrapher constrói um espaço de design otimizado para o operador para alcançar a execução do operador gráfico de alto desempenho.

O uGrapher usa localidade, paralelismo e eficiência de trabalho para descrever os indicadores de desempenho dos operadores gráficos na GPU. A aplicação de técnicas de ladrilhos ou bloqueios a loops aninhados pode melhorar a localização dos operadores do grafo; iniciando mais threads, warps ou blocos de threads, o paralelismo dos operadores do grafo pode ser melhorado; a eficiência do trabalho é representada pelo recíproco da sobrecarga, o mesmo operador Execução diferente as estratégias podem introduzir cálculos adicionais, como cálculos de endereço, e cálculos paralelos de arestas de vértices compartilhados podem exigir instruções atômicas.

Existem duas estratégias clássicas de paralelização em sistemas de processamento de grafos existentes: thread-vertex e thread-edge paralelismo. O primeiro reduz o paralelismo, mas melhora a localidade e a reutilização dos dados de saída. O último reduz a produtividade porque as operações de atualização atômica podem ser necessárias.

Como o recurso vértice/aresta em GNN é um vetor, GNN aumenta a estratégia de paralelização da dimensão do recurso, que é warp-vertex e warp-edge. Comparado com a estratégia thread-vertex/edge, mais warps podem ser iniciados, aumentando assim paralelismo. No entanto, essa estratégia também prejudica a localidade devido à capacidade reduzida do cache por warp.

Portanto, não existe uma estratégia única que possa melhorar esses três indicadores ao mesmo tempo. Por meio da expressão IR unificada mencionada acima, o uGrapher projeta uma interface de computação unificada de alto desempenho para explorar o espaço de otimização e realizar compensações de desempenho. A arquitetura geral é mostrada na figura abaixo.

imagem.png

O design da interface de computação unificada de alto desempenho do operador gráfico fornecido pelo uGrapher é mostrado na figura abaixo.

imagem.png

A interface uGrapher contém três parâmetros: graph_tensor, que representa os dados do gráfico; op_info, que é usado para passar edge_op, collect_op e as informações de cálculo do tensor de entrada; parallel_info, que é usado para especificar a estratégia de paralelização.

O design da interface do uGrapher separa a computação do operador, dados gráficos e estratégias de paralelização, para que os usuários possam escolher estratégias de execução manualmente ou propondo seus próprios algoritmos heurísticos para diferentes operadores e estruturas gráficas. Ao mesmo tempo, quando o usuário não especifica nenhuma estratégia de paralelização, o uGrapher usará o LightGBM [4] para treinar o modelo de decisão, selecionar a estratégia ideal no espaço de paralelização para ajustar automaticamente a melhor estratégia de paralelização e usá-la em diferentes Arquiteturas e gráficos de GPU. Forneça programação de computação otimizada e dedicada para todos os operadores de gráfico em redes neurais de gráfico no conjunto de dados. O uGrapher implementa modelos de kernel CUDA para cada estratégia de paralelização, reserva interfaces de função de dispositivo para cada operador gráfico e implementa geração de código de ponta a ponta, incluindo fusão de operador e geração de função de dispositivo, para oferecer suporte flexível e eficiente. Leia nosso documento ASPLOS 2023 para obter mais detalhes.

Atualmente, o Alibaba Cloud está integrando o design principal do uGrapher à estrutura de rede neural de gráficos em grande escala autodesenvolvida da PAI, GraphLearn, trazendo assim aceleração de desempenho para aplicativos de rede neural de gráficos de nível industrial.

A PAI recruta estagiários há muito tempo. Se você estiver interessado em estrutura de treinamento de aprendizagem profunda distribuída, estrutura de treinamento de rede neural de gráfico distribuído, otimização de computação e comunicação, envie seu currículo para [email protected] ou baole. [email protected]

Quinta placa:

  • Título do trabalho:

uGrapher: computação de operadores gráficos de alto desempenho via abstração unificada para redes neurais gráficas

  • Autor do artigo:

Zhou Yangjie, Calm Wen, Song Yaoxu, Lu Shuwen, Wang Mian, Li Chao, Min Yi, Shen Wenting, Li Yong, Lin Wei, etc.

  • Link do pdf do papel:

https://dl.acm.org/doi/10.1145/3575693.3575723

  • referências:

[1] M. Wang, D. Zheng, Z. Ye, Q. Gan, M. Li, X. Song, J. Zhou, C. Ma, L. Yu, Y. Gai et al., “Deep graph library : Um pacote centrado em grafos e de alto desempenho para redes neurais de grafos,” arXiv preprint arXiv:1909.01315, 2019.

[2] M. Fey e JE Lenssen, “Aprendizado rápido de representação gráfica com geometria pytorch”, preprint arXiv arXiv:1903.02428, 2019.

[3] Y. Wang, B. Feng, G. Li, S. Li, L. Deng, Y. Xie e Y. Ding, “GNNAdvisor: An adaptive and eficiente runtime system for GNN aceleration on GPUs,” in 15th Simpósio USENIX sobre Projeto e Implementação de Sistemas Operacionais (OSDI 21), 2021, pp. 515–531.

[4] Guolin Ke, Qi Meng, Thomas Finley, Taifeng Wang, Wei Chen, Weidong Ma, Qiwei Ye e Tie-Yan Liu. 2017. Lightgbm: Uma árvore de decisão de aumento de gradiente altamente eficiente. Avanços em sistemas de processamento de informações neurais 30 ( 2017).

{{o.name}}
{{m.name}}

Acho que você gosta

Origin my.oschina.net/u/5583868/blog/8591015
Recomendado
Clasificación