Ausblick
Machine Learning Modelle sind aus der heutigen Geschäftswelt nicht mehr wegzudenken. Von der Rechtschreibkorrektur über Betrugserkennungssysteme bis hin zu Sprachmodellen werden Systeme unterschiedlichster Typen, Größen und Anforderungen entwickelt. Diese Systeme beruhen meist auf Daten, die entweder in einem sequenziellen oder gar keinem Zusammenhang zueinander stehen. Für Anwendungsfelder, in denen Beziehungen zwischen verschiedenen Entitäten dargestellt werden sollen, werden allerdings oft Graphen als grundlegende Datenstruktur verwendet. Beispiele sind soziale Netzwerke, Kundeninteraktionen, Transaktionen, Banküberweisungen, aber auch Moleküle, Bahngleise oder dreidimensionale Formen. Um diese Beziehungen in das Machine Learning einfließen zu lassen, wurden sogenannte Graph Neuronale Netzwerke (GNN) entwickelt.
Dieser Blogbeitrag soll einen kurzen Einblick geben, welche Möglichkeiten AWS's GraphStorm Package bietet, schnell verschiedene GNN-Architekturen auszuprobieren und gegen unterschiedliche Graphstrukturen zu testen.
Graphen
Ebenso wie reale Netzwerke und Beziehungen sind Graphen sehr komplexe Gebilde mit unterschiedlichsten Abbildungsmöglichkeiten. Um dies zu verdeutlichen, werden hier kurz einige Begriffe im Bezug zu Graphen erläutert:
- Knoten (Nodes) entsprechen Entitäten in einem Netzwerk, also zum Beispiel IBAN-Nummern, Personen, Unternehmen, Kreditkarten oder auch Atome oder Bahnhöfe.
- Kanten (Edges) entsprechen den Beziehungen zwischen den Knoten.
- In gewichteten Graphen werden den Kanten Eigenschaften zugewiesen, wie zum Beispiel Entfernungen.
- In gerichteten Graphen verläuft die Beziehung zwischen mindestens einem Knotenpaar nur in eine Richtung.
- Von heterogenen Graphen spricht man, wenn in einem Graphen verschiedene Arten von Knoten vorkommen. So kann man z.B. Kunden, Konten, Waren und Unternehmen einzeln in einem Graphen darstellen und immer dann miteinander verbinden, wenn diese zusammen in einer Transaktion aufgetreten sind. Somit ergibt sich ein Transaktionsnetzwerk, in dem man z.B. nach Betrügern suchen, aber auch seine Logistik optimieren kann.
- Von homogenen Graphen spricht man, wenn in einem Graphen nur eine Art von Knoten vorkommt.
Möchte man aus einem vorhandenen Datensatz einen Graphen entwickeln, so ist durch die Menge an möglichen Entscheidungen (Welche Knoten gibt es? Welche Knoten werden verbunden? Wann werden Knoten verbunden? …) nicht immer offensichtlich, was die beste und informationsreichste Struktur für den eigenen Use-Case ist. Hier ist es oft erforderlich, verschiedene Graph-Strukturen zu erstellen und diese mit unterschiedlichen GNN-Algorithmen zu testen.
GraphStorm Feature
GraphStorm ist eine Open Source Python Library für das schnelle Bereitstellen von Graph Machine Learning Algorithmen, die von AWS aktiv entwickelt wird. Es stellt verschiedene Pipelines für das flexible Training und Inferenz auf sowohl einer lokalen Maschine oder großen Multi-Cluster Systemen wie zum Beispiel AWS EC2 Instanzen. Auch eine Integration in SageMaker ist möglich. In den GraphStorm Tools werden Python-Skripte mitgeliefert, die es ermöglichen, die Knoten- und Kanten-Daten in die benötigten Formate zu transformieren und gleichzeitig den Graphen für die Benutzung auf mehreren Maschinen zu partitionieren. Dies ermöglicht es, auch Graphen mit Milliarden an Knoten und Kanten zu bearbeiten.
GraphStorm stellt mehrere Graph Convolution und Attention Algorithmen zur Verfügung, die durch eine Konfigurationsdatei im YAML-Format ausgewählt werden können. Hier kann unter anderem die Anzahl der Layer, mögliche vor- oder nachgeschaltete Multi Layer Perceptrons, Normalisierungen und Early-Stopping ausgewählt werden. Jede Einstellung, die in der Konfigurationsdatei getroffen werden kann, kann auch über CLI-Flags überschrieben werden. Nutzt man nur bereitgestellte Algorithmen, ist es auch möglich, das trainierte Modell mittels AWS' NeptuneML für die Live-Vorhersage in Kombination mit einer Graph-Datenbank zu nutzen.
Wie unterstützt GraphStorm das Prototyping?
Üblicherweise nehmen die Implementierung der neuronalen Netzwerk Architektur und der dazugehörigen Trainingsroutinen viel Entwicklungszeit ein, da gerade im Prototyping entweder viel Zeit für anpassbaren Code oder auf die Anpassungen des Codes aufgebracht werden muss. Dies gilt insbesondere dann, wenn das Training auf mehreren GPUs, verteilt auf verschiedenen Servern stattfinden soll. Da diese Arbeiten bei GraphStorm bereits geleistet wurden und durch Konfigurationsdatei oder CLI-Flags gesteuert werden, kann das Hauptaugenmerk auf der Konstruktion des Graphen selbst liegen, sodass eine möglichst optimale Architektur des Graphen schnell gefunden werden kann.
Was ist bei der Verwendung von GraphStorm zu beachten?
Da es sich bei GraphStorm aktuell um ein Work-in-Progress handelt, kann es jederzeit zu Änderungen kommen, die inkompatibel zu schon bestehendem Code sind. Dazu kommt, dass durch das schnelle Hinzufügen von neuen Features, die Dokumentation nicht immer auf dem neuesten Stand ist. Auch die Architektur des neuronalen Netzwerks ist zurzeit noch nicht voll flexibel. So ist es nicht möglich, verschiedene GNN-Algorithmen hintereinander auszuführen oder bei mehreren Layern unterschiedliche Layer-Größen auszuwählen.
Fazit
Die AWS GraphStorm Library für Python ermöglicht es Data Scientists, effizient verschiedene neuronale Netzwerk und Graph-Architekturen miteinander zu testen, zu trainieren und für die Inferenz einzusetzen. Die Steuerung der Architektur über Konfigurationsdateien bzw. CLI-Flags erlaubt es sogar, verschiedenste Architekturen mittels Hyperparameter-Suche vollautomatisiert zu testen.