Simple Science

La science de pointe expliquée simplement

# Informatique# Informatique distribuée, parallèle et en grappes

Améliorer l'entraînement des GNN avec un protocole unifié CPU-GPU

Un nouveau protocole améliore l'efficacité de l'entraînement des réseaux de neurones graphes en utilisant le CPU et le GPU.

― 10 min lire


Rendre les GNN plusRendre les GNN plusefficaces avec lasynergie CPU-GPUl'efficacité de l'entraînement des GNN.Une nouvelle approche améliore
Table des matières

Les Graph Neural Networks (GNNs) sont des modèles d'apprentissage machine qui gèrent des données structurées sous forme de graphes. Les graphes sont composés de nœuds (ou points) et d'arêtes (ou connexions entre ces points). Les GNNs sont utiles dans plein de domaines, comme les réseaux sociaux, la biologie, et les systèmes de recommandation, où les données peuvent être représentées sous forme de graphes.

Former un GNN demande pas mal de gestion de données et de puissance de calcul, car les graphes du monde réel ont souvent des millions, voire des milliards d'arêtes. Malgré des processeurs avancés, les méthodes existantes pour entraîner les GNNs n'exploitent pas au mieux les ressources disponibles, ce qui peut ralentir le processus d'entraînement de façon significative.

Pourquoi utiliser un protocole unifié CPU-GPU ?

Dans la plupart des systèmes actuels, l'entraînement des GNN dépend beaucoup des GPU (unités de traitement graphique), tandis que les CPU (unités de traitement central) sont souvent sous-utilisés. Les CPU et les GPU sont super puissants, mais ils fonctionnent différemment. Les GPU sont excellents pour traiter plein de tâches en même temps, alors que les CPU sont meilleurs pour des tâches qui nécessitent beaucoup de petits calculs rapides.

Quand on entraîne un GNN, le but principal est d'utiliser au maximum les CPU et les GPU pour accélérer le processus. Ça veut dire qu'il faut trouver un meilleur moyen de répartir les tâches entre eux pour que les deux puissent bosser ensemble efficacement.

Le protocole unifié CPU-GPU expliqué

Le protocole unifié CPU-GPU proposé vise à améliorer la manière dont on entraîne les GNNs sur des systèmes qui ont à la fois des CPU et des GPU. Ce protocole permet de faire tourner plusieurs tâches d'entraînement en même temps sur les CPU et les GPU.

  1. Processus parallèles : Au lieu d'utiliser juste le GPU, le protocole permet aux processus CPU de faire des parties de l'entraînement en même temps que le GPU. Ça veut dire que les deux peuvent bosser ensemble, en partageant la charge de travail.

  2. Équilibreur de charge dynamique : Un élément clé du protocole est un équilibreur de charge qui ajuste le travail attribué aux CPU et aux GPU pendant l'entraînement. Comme la performance des CPU et des GPU peut différer, ça garantit que ni l'un ni l'autre ne soit submergé ou reste inactif.

  3. Transfert de données réduit : En laissant les CPU gérer une partie de la charge de travail, il y a moins besoin d'envoyer des données de l'un à l'autre, ce qui peut être lent et coûteux en termes de performance.

  4. Efficacité mémoire : Utiliser le CPU pour l'entraînement réduit la quantité de mémoire nécessaire sur le GPU. Ça veut dire qu'il y a plus d'espace dispo pour le cache, ce qui peut aider à accélérer l'accès aux données.

Aperçus sur l'entraînement des Graph Neural Networks

Former un GNN implique de transformer des données brutes de graphes en une forme que le modèle peut apprendre. Ça comprend généralement deux étapes principales :

  1. Agrégation : C'est là que le modèle collecte des informations sur les caractéristiques des nœuds et leurs connexions.

  2. Transformation : Après avoir rassemblé les infos, le modèle les change en un autre format qui peut être utilisé pour faire des prédictions.

Le processus d'entraînement devient plus compliqué avec des graphes de grande taille, c'est pourquoi les méthodes traditionnelles ont du mal à suivre.

Descente de gradient stochastique par mini-lots

L'entraînement des GNN commence généralement par une descente de gradient complète, qui regarde l'ensemble du graphe d'un coup. Cependant, ça peut être très gourmand en mémoire pour de grands graphes. À la place, on utilise une méthode appelée descente de gradient stochastique par mini-lots (SGD).

Avec la mini-batch SGD, le graphe complet est découpé en petites parties appelées mini-lots. De cette façon, le modèle ne regarde qu'une partie du graphe à la fois, ce qui est plus efficace et demande moins de mémoire.

Quand un mini-lot est utilisé, le CPU transfère des infos sur les nœuds de ce lot vers le GPU, où l'entraînement du modèle se fait.

Le rôle des algorithmes d'échantillonnage

Pour choisir quelles parties du graphe entraîner, différentes méthodes d'échantillonnage sont utilisées. Deux méthodes courantes sont l'échantillonnage des voisins et l'échantillonnage ShaDow K-Hop.

  • Échantillonnage des voisins : Cette méthode choisit aléatoirement des voisins pour chaque nœud et construit un graphe plus petit basé sur ces connexions.

  • Échantillonnage ShaDow K-Hop : C'est une méthode plus complexe, où un sous-graphe local est créé autour de chaque nœud en fonction de ses voisins. Ça conduit souvent à des infos plus riches, mais ça peut être plus exigeant en termes de calcul.

Plateformes cibles CPU-GPU

Le protocole est conçu pour fonctionner sur des systèmes qui ont à la fois plusieurs CPU et plusieurs GPU. Dans un tel setup, les CPU et les GPU communiquent via une connexion appelée PCIe, qui peut devenir un goulet d'étranglement si trop de données doivent être envoyées de l'un à l'autre.

En laissant les CPU faire une partie du travail, le protocole non seulement accélère l'entraînement mais garde aussi le transfert de données efficace.

Vue d'ensemble du système du protocole unifié CPU-GPU

Le protocole unifié CPU-GPU se compose de plusieurs parties conçues pour travailler ensemble de manière fluide.

Gestionnaire de processus GNN

C'est le cœur de notre système. Il attribue des tâches aux CPU et aux GPU, en s'assurant que le travail soit équilibré pour que les deux puissent terminer leurs tâches efficacement sans que l'un ne prenne le dessus sur l'autre.

Équilibreur de charge dynamique

Cette partie garantit que la quantité de travail donnée aux CPU et aux GPU est toujours équilibrée. Elle vérifie régulièrement combien de temps prennent les tâches sur chaque appareil et ajuste la charge de travail en temps réel. En prédisant combien de travail chaque mini-lot nécessite, elle peut éviter les situations où un appareil est surchargé pendant que l'autre reste inactif.

Mise en cache de mémoire

Un des défis quand on travaille avec de grands ensembles de données, c'est le temps qu'il faut pour charger les données en mémoire. Le protocole unifié CPU-GPU permet une méthode appelée mise en cache des caractéristiques GPU. Ça garde les caractéristiques souvent utilisées dans la mémoire du GPU, réduisant le besoin de transferts de données constants depuis le CPU.

En utilisant une stratégie de mise en cache basée sur les données les plus récemment utilisées, on peut rendre l'accès aux données plus rapide, gardant le GPU occupé et accélérant l'ensemble du processus d'entraînement.

Configuration expérimentale

Pour évaluer l'efficacité du protocole, des tests ont été réalisés sur deux types de plateformes. Les deux setups comportaient un puissant CPU Intel Xeon et différents GPU.

Mesures de performance

Pendant les tests, on a mesuré combien de temps prenaient différentes tâches en utilisant le protocole unifié CPU-GPU par rapport aux méthodes standard. Les résultats ont montré des temps d'entraînement améliorés sur divers modèles et ensembles de données.

Par exemple, sur une plateforme, le protocole unifié a entraîné des temps d'entraînement plus rapides par rapport aux méthodes traditionnelles. Cette série de tests a démontré que le protocole unifié CPU-GPU améliorait efficacement les temps d'entraînement dans des scénarios à forte communication et à forte computation.

Analyse de performance

Les tests ont mis en avant que notre protocole avait des avantages substantiels par rapport aux méthodes standard. Sur des plateformes où le GPU était très efficace, le protocole a utilisé le CPU de manière efficace pour accélérer le processus d'entraînement, résultant en gains de temps clairs.

Utilisation des ressources

En passant au protocole unifié CPU-GPU, l'utilisation globale des ressources s'est significativement améliorée. Les CPU qui étaient auparavant inactifs pouvaient maintenant contribuer, partageant la charge de travail et accélérant l'entraînement global. De plus, la mémoire sur le GPU était aussi utilisée plus intelligemment, réduisant les temps de transfert de données.

L'impact des optimisations

Dans le cadre de notre processus de test, nous avons commencé avec une configuration basique et ajouté progressivement des optimisations pour mesurer leurs effets.

  1. Utiliser le protocole unifié : Nous avons d'abord appliqué le protocole unifié CPU-GPU, vérifiant son impact sur la performance. Bien que cela ait déjà amélioré les vitesses, ça avait encore des limitations à cause d'une répartition inégale des tâches.

  2. Équilibrage de charge : Ajouter l'équilibreur de charge dynamique a amélioré l'équilibre et la performance de manière significative. En ajustant les charges de travail en fonction des données en temps réel sur la performance des tâches, on a pu obtenir de meilleurs résultats.

  3. Mise en cache des caractéristiques : Enfin, introduire la mise en cache des caractéristiques GPU a encore réduit le temps, particulièrement pour les ensembles de données qui nécessitaient un accès fréquent aux données.

Travaux connexes

Il y a eu beaucoup de recherches sur l'utilisation des CPU et des GPU pour diverses tâches computationnelles. Cependant, de nombreux systèmes existants ont du mal avec un équilibrage efficace de la charge entre les deux plateformes, ce que notre protocole adresse efficacement.

D'autres travaux se sont concentrés sur des problèmes connexes, mais peu se sont penchés sur la manière d'optimiser spécifiquement l'entraînement des GNNs. Notre approche d'un protocole unifié CPU-GPU qui équilibre les charges de travail et améliore l'utilisation des ressources est relativement unique.

Conclusion

Le protocole unifié CPU-GPU pour entraîner des GNNs est une solution prometteuse pour améliorer l'efficacité des tâches d'apprentissage machine. En garantissant une meilleure communication entre les CPU et les GPU, en équilibrant dynamiquement les charges de travail et en optimisant l'utilisation de la mémoire, ce protocole peut considérablement accélérer le processus d'entraînement.

Alors que les GNNs continuent de trouver de nouvelles applications dans divers domaines, des méthodes d'entraînement efficaces comme celle-ci deviendront de plus en plus importantes. Grâce à une amélioration continue et à l'adaptation, ce protocole peut jouer un rôle crucial dans l'avancement de l'utilisation des Réseaux de neurones graphiques dans des applications réelles.

Source originale

Titre: A Unified CPU-GPU Protocol for GNN Training

Résumé: Training a Graph Neural Network (GNN) model on large-scale graphs involves a high volume of data communication and computations. While state-of-the-art CPUs and GPUs feature high computing power, the Standard GNN training protocol adopted in existing GNN frameworks cannot efficiently utilize the platform resources. To this end, we propose a novel Unified CPU-GPU protocol that can improve the resource utilization of GNN training on a CPU-GPU platform. The Unified CPU-GPU protocol instantiates multiple GNN training processes in parallel on both the CPU and the GPU. By allocating training processes on the CPU to perform GNN training collaboratively with the GPU, the proposed protocol improves the platform resource utilization and reduces the CPU-GPU data transfer overhead. Since the performance of a CPU and a GPU varies, we develop a novel load balancer that balances the workload dynamically between CPUs and GPUs during runtime. We evaluate our protocol using two representative GNN sampling algorithms, with two widely-used GNN models, on three datasets. Compared with the standard training protocol adopted in the state-of-the-art GNN frameworks, our protocol effectively improves resource utilization and overall training time. On a platform where the GPU moderately outperforms the CPU, our protocol speeds up GNN training by up to 1.41x. On a platform where the GPU significantly outperforms the CPU, our protocol speeds up GNN training by up to 1.26x. Our protocol is open-sourced and can be seamlessly integrated into state-of-the-art GNN frameworks and accelerate GNN training. Our protocol particularly benefits those with limited GPU access due to its high demand.

Auteurs: Yi-Chien Lin, Gangda Deng, Viktor Prasanna

Dernière mise à jour: 2024-03-25 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2403.17092

Source PDF: https://arxiv.org/pdf/2403.17092

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires