[ASPLOS 2023] Das neuronale Graph-Netzwerk vereinheitlicht die Graph-Operator-Abstraktion uGrapher, wodurch die Rechenleistung erheblich verbessert wird

Autor: Zhou Yangjie, Shen Wenting

Öffnung

Kürzlich wurde das Papier „Graph Neural Network Unified Graph Operator Abstraction uGrapher“, das vom Team der maschinellen Lernplattform Alibaba Cloud PAI und der Lehrerin der Shanghai Jiao Tong University, Jing Jingwen, gemeinsam verfasst wurde, von ASPLOS 2023 angenommen.

Um das statische Kernel-Performance-Problem verschiedener Graphoperatoren im Rahmen des aktuellen neuronalen Graphennetzwerks auf verschiedenen Graphdaten zu lösen, entkoppelt uGrapher die Berechnung und Planung von Graphoperatoren, indem alle Graphoperatoren in eine einheitliche Zwischenausdrucksform abstrahiert werden definiert den Entwurfsraum für die Optimierung von Graphoperatoren auf der GPU und bietet High-Performance-Computing-Unterstützung für Graphoperatoren in neuronalen Netzwerken von Graphen, indem auf sich dynamisch ändernde Graphoperatoren abzielt und Strategien für die parallele Ausführung von Graphdaten adaptiv generiert werden. Im Vergleich zu DGL [1], PyG [2] und GNNAdvisor [3] kann uGrapher eine durchschnittliche Leistungssteigerung von 3,5-fach erreichen.

Hintergrund

In den letzten Jahren haben Graph Neural Networks (GNNs) aufgrund ihrer starken Fähigkeit, Graphstrukturen in nicht-euklidischen Räumen zu lernen und abzuleiten, große Aufmerksamkeit von Wissenschaft und Industrie auf sich gezogen. GNNs kombinieren die DNN-basierte Merkmalstransformation mit graphbasierten Operationen, um Informationen entlang der Diagrammstruktur zu verbreiten und zu aggregieren. Bestehende GNN-Frameworks wie DGL und PyTorch-Geometric (PyG) erweitern DNN-Frameworks (wie TensorFlow und PyTorch) und führen das Konzept der „Nachrichten“ ein, bei denen es sich um Zwischenwerte von Merkmalsvektoren handelt, die jeder Kante zugeordnet sind. Jede Operation auf dem Graphen \(G=(V,E)\) kann gemäß den Attributen der Daten und der Richtung der Datenbewegung in drei Phasen unterteilt werden, nämlich Nachrichtenerstellung, Nachrichtenaggregation und Funktionsaktualisierung, und die Formel lautet wie folgt:

Bild.png

Darunter sind \(u\) und \(v\) Knotenindizes, \(e\) sind Kantenindizes zwischen \(u\) und \(v\) ; \(h_v\) sind Knoten \(v \ ) ist der Eigenvektor, \(m_e\) ist die Nachricht auf der Kante \(e\) .

uGrapher definiert Operatoren, die die Eingabegraphstruktur als Graphoperatoren durchlaufen müssen. Graphoperatoren umfassen drei Kategorien: "Nachrichtenerstellung", "Nachrichtenaggregation" und "Fusionsaggregation". „Fusionsaggregation" bedeutet unter anderem, dass, wenn „Nachrichtenerstellung" ein einfacher Kopiervorgang ist, dieser mit „Nachrichtenaggregation" verschmolzen werden kann, um redundanten Zugriff zu vermeiden. DGL und PyG übernehmen diese Fusionsoptimierung.

Am Beispiel des GAT-Modells enthält es mehrere Graphoperatoren mit unterschiedlichen Berechnungsmodi. Die erste „Nachrichtenerstellung“-Operation ist sehr leicht, sie fügt die Merkmale der Quell- und Zielscheitelpunkte jeder Kante als Nachricht hinzu, um das Aufmerksamkeitsgewicht zu berechnen; die zweite „Fusionsaggregations“-Operation kopiert zuerst die Merkmale aus dem Quellscheitelpunkt und dann Multiplizieren Sie die Aufmerksamkeitsgewichte Kante für Kante und aggregieren Sie schließlich die Nachrichten auf den transformierten Kanten zu neuen Merkmalen von Scheitelpunkten. Die zweite Operation ist rechenintensiver als die erste.

Aufgrund des unregelmäßigen Speicherverhaltens, das durch die Graphstruktur verursacht wird, gekoppelt mit den komplexen arithmetischen Berechnungen in diesen Graphoperatoren, wird die Hochleistungsberechnung von Graphoperatoren in neuronalen Graphnetzen zu einer wichtigen Herausforderung.

Bestehende Frameworks für neurale Graphnetzwerke verlassen sich auf handgeschriebene statische Kernel, um die Berechnung von Graphoperatoren zu realisieren. Mit der Entwicklung von Algorithmen für neuronale Graphennetze nimmt jedoch die Variabilität und Komplexität von Graphoperatoren weiter zu, und ihre Berechnungen werden komplexer, was es für statische Operatoren schwierig macht, eine gute Leistung aufrechtzuerhalten. Daher untersucht dieses Papier, wie eine rechnerische Optimierung von Graphoperatoren bei sich ändernden Graphdaten und Graphmodellen durchgeführt werden kann.

Herausforderung

(1) Das neuronale Graphennetz führt die beiden Hauptmerkmale der Komplexität des Graphoperators und der Variabilität der Graphdaten ein, was zu Schwierigkeiten bei der Berechnung und Optimierung des Graphoperators führt.

Die folgende Tabelle kategorisiert die 160 von DGL unterstützten Graphoperatoren nach Eingabe- und Ausgabedatentypen. Selbst mit denselben Eingabe- oder Ausgabedatentypen können Graphoperatoren unterschiedliche Berechnungsmodi ausführen. Die Komplexität von Graphoperatoren macht es schwierig, einen statischen Weg zu finden, um eine leistungsstarke Unterstützung für die Rechenoperationen aller Graphoperatoren bereitzustellen.

Bild.png

Diagrammdatensätze in der realen Welt sind sehr unterschiedlich. Die Skalierung des Graphen, d. h. die Anzahl der Knoten und Kanten, der Grad der Graphenbalance, d. h. die Standardabweichung der Nicht-Null-Werte der Zeilen der Adjazenzmatrix, und die Merkmals- und Klassengrößen sind Eigenschaften, die unterscheiden sich erheblich zwischen verschiedenen Diagrammen. Diese Unterschiede wirken sich auf die Speichernutzung und die Rechenkomplexität von Graphoperatoren aus.

(2) Aufgrund des Fehlens von Systemoptimierungsmethoden hat der zugrunde liegende CUDA-Kernel, der vom bestehenden GNN-Framework verwendet wird, Probleme mit Ineffizienz und mangelnder Flexibilität.

DGL ruft statische CUDA-Kernel auf, wenn die obige Message-Passing-Programmierschnittstelle unterstützt wird, und diese statischen Kernel können sich nicht an sich ändernde Computerszenarien anpassen. Wenn beispielsweise ein unausgeglichener Graph ausgeführt wird, führt die geringe Auslastung der GPU zu einer Verschwendung von Hardwareressourcen. Die GPU-Leistung wird beim Ausführen kleiner Graphen häufig durch Parallelität begrenzt, während die Zugriffsbandbreite aufgrund der geringen Lokalität zu einem Engpass wird, wenn große Graphen ausgeführt werden. Gleichzeitig variieren diese Indikatoren auch zwischen verschiedenen Graph-Operatoren.

Bild.png

Brechen

uGrapher verwendet verschachtelte Schleifen als Scheduling-Ausdruck von Graphoperatoren und ermöglicht es Benutzern, Eingabetensoren und Funktionsoperationen in verschiedenen Phasen anzupassen, um verschiedene Graphoperatoroperationen darzustellen.

Die folgende Abbildung zeigt die abstrakten Details der Vereinheitlichung von Graphoperatoren im neuronalen Graphnetzwerk.

Bild.png

edge_op realisiert die Funktionsdarstellung des Speicherzugriffs und der Berechnung an der Kante, und collect_op realisiert die Zusammenführungsfunktionsdarstellung von Kante zu Vertex. Es gibt auch drei Eingabetensoren, bei denen es sich um den Quellen-Vertex-Einbettungstensor (Src_V), den Ziel-Vertex-Einbettungstensor (Dst_V), den Kanten-Einbettungstensor (Edge) und einen beliebigen von NULL handeln kann. Der Datentyp des Tensors bestimmt auch die verschiedenen Adressierungsmodi in der Schleifenberechnung (Zeile 10 bis 12).

Die folgende Formel definiert formal die vereinheitlichte Abstraktion von uGrapher, wobei \(\psi\) die edge_op-Funktion und \(\rho\) die collect_op-Funktion ist. Diese Abstraktion erfasst die vollständige Semantik von Graphoperatoren, einschließlich ihrer Berechnungs- und Speicherbewegungsmuster.

Bild.png

Gemäß der einheitlichen Abstraktion von Graphoperatoren konstruiert uGrapher einen operatoroptimierten Entwurfsraum, um eine leistungsstarke Ausführung von Graphoperatoren zu erreichen.

uGrapher verwendet Lokalität, Parallelität und Arbeitseffizienz, um die Leistungsindikatoren von Grafikoperatoren auf der GPU zu beschreiben. Das Anwenden von Kachel- oder Blockierungstechniken auf verschachtelte Schleifen kann die Lokalität von Graphoperatoren verbessern; durch das Starten von mehr Threads, Warps oder Threadblöcken kann die Parallelität von Graphoperatoren verbessert werden; die Arbeitseffizienz wird durch den Kehrwert des Overheads dargestellt, derselbe Operator Unterschiedliche Ausführung Strategien können zusätzliche Berechnungen einführen, wie z. B. Adressberechnungen, und kantenparallele Berechnungen gemeinsam genutzter Eckpunkte können atomare Anweisungen erfordern.

Es gibt zwei klassische Parallelisierungsstrategien in bestehenden Graphverarbeitungssystemen: Thread-Vertex- und Thread-Edge-Parallelität. Ersteres verringert die Parallelität, verbessert jedoch die Wiederverwendung und Lokalität der Ausgabedaten. Letzteres reduziert die Produktivität, da atomare Aktualisierungsvorgänge erforderlich sein können.

Da das Vertex/Edge-Merkmal in GNN ein Vektor ist, erhöht GNN die Parallelisierungsstrategie der Feature-Dimension, die Warp-Scheitel und Warp-Edge ist.Verglichen mit der Thread-Scheitel/Kante-Strategie können mehr Warps gestartet werden, wodurcherhöht werden Parallelität. Diese Strategie schadet jedoch auch der Lokalität aufgrund der reduzierten Cache-Kapazität pro Warp.

Daher gibt es keine einzelne Strategie, die diese drei Indikatoren gleichzeitig verbessern kann.Durch den oben erwähnten einheitlichen IR-Ausdruck entwirft uGrapher eine einheitliche Hochleistungs-Computing-Schnittstelle, um den Optimierungsraum zu erkunden und Leistungskompromisse zu treffen. Die Gesamtarchitektur ist in der folgenden Abbildung dargestellt.

Bild.png

Das von uGrapher bereitgestellte Graph Operator Unified High Performance Computing Interface Design ist in der folgenden Abbildung dargestellt.

Bild.png

Die uGrapher-Schnittstelle enthält drei Parameter: graph_tensor, der die Diagrammdaten darstellt; op_info, der verwendet wird, um edge_op, collect_op und die Berechnungsinformationen des Eingabetensors zu übergeben; parallel_info, der verwendet wird, um die Parallelisierungsstrategie anzugeben.

Das Schnittstellendesign von uGrapher trennt Operatorberechnung, Diagrammdaten und Parallelisierungsstrategien, sodass Benutzer Ausführungsstrategien manuell auswählen oder ihre eigenen heuristischen Algorithmen für verschiedene Operatoren und Diagrammstrukturen vorschlagen können. Wenn der Benutzer gleichzeitig keine Parallelisierungsstrategie angibt, verwendet uGrapher LightGBM [4], um das Entscheidungsmodell zu trainieren, wählt die optimale Strategie im Parallelisierungsraum aus, um sich automatisch an die beste Parallelisierungsstrategie anzupassen, und verwendet sie anders GPU-Architekturen und Graphen: Bereitstellung einer dedizierten und optimalen Berechnungsplanung für alle Graphoperatoren in neuronalen Graphnetzwerken auf dem Datensatz. uGrapher implementiert CUDA-Kernel-Vorlagen für jede Parallelisierungsstrategie, reserviert Gerätefunktionsschnittstellen für jeden Graphoperator und implementiert die End-to-End-Codegenerierung, einschließlich Operatorzusammenführung und Gerätefunktionsgenerierung, um eine flexible und effiziente Unterstützung zu gewährleisten. Lesen Sie unser ASPLOS 2023-Papier für weitere Einzelheiten.

Derzeit integriert Alibaba Cloud das Schlüsseldesign von uGrapher in GraphLearn, das von PAI selbst entwickelte Framework für groß angelegte neuronale Graphennetzwerke, wodurch die Leistung von Anwendungen für neuronale Graphennetzwerke auf industrieller Ebene beschleunigt wird.

PAI rekrutiert seit langem Praktikanten. Wenn Sie an verteiltem Deep-Learning-Trainings-Framework, verteiltem Graph-Neural-Network-Trainings-Framework, Computer- und Kommunikationsoptimierung interessiert sind, senden Sie bitte Ihren Lebenslauf an [email protected] oder baole. [email protected]

Fünfte Platte:

  • Papiertitel:

uGrapher: Hochleistungs-Graph-Operator-Berechnung über Unified Abstraction für Graph Neural Networks

  • Autor des Papiers:

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

  • PDF-Link zum Papier:

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

  • Verweise:

[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 : A graph-centric, high-performant package for graph neural networks“, arXiv preprint arXiv:1909.01315, 2019.

[2] M. Fey und JE Lenssen, „Schnelles Lernen von graphischen Darstellungen mit Pytorch-Geometrie“, arXiv-Vorabdruck arXiv:1903.02428, 2019.

[3] Y. Wang, B. Feng, G. Li, S. Li, L. Deng, Y. Xie und Y. Ding, „GNNAdvisor: Ein adaptives und effizientes Laufzeitsystem für die GNN-Beschleunigung auf GPUs“, in 15th USENIX Symposium on Operating Systems Design and Implementation (OSDI 21), 2021, S. 515–531.

[4] Guolin Ke, Qi Meng, Thomas Finley, Taifeng Wang, Wei Chen, Weidong Ma, Qiwei Ye und Tie-Yan Liu. 2017. Lightgbm: Ein hocheffizienter Gradienten-Boosting-Entscheidungsbaum. Fortschritte bei neuralen Informationsverarbeitungssystemen 30 ( 2017).

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

Supongo que te gusta

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