- Die wissenschaftliche Datenvisualisierung stößt wegen großer, hochdimensionaler Datenmengen und Anforderungen an Echtzeitanalyse zunehmend an Engpässe; fastplotlib ist eine Python-Bibliothek, die diese mit GPU-beschleunigtem Plotting verringern soll
- Das auf WGPU basierende Rendering unterstützt die Erkundung großer Datenmengen, schnelles Prototyping, Algorithmendesign und den Aufbau von Echtzeit-Erfassungssystemen für Messinstrumente
- Mit einer array-zentrierten API lassen sich auch nach dem ersten Plot Grafik-Eigenschaften wie Farben, Colormaps und Daten per NumPy-artigem Indexing dynamisch ändern
- Ein callback-basiertes Event-System definiert Benutzerinteraktionen wie Klicks; im Beispiel wird der dem Klickpunkt nächstgelegene Kreis gefunden und seine Farbe geändert
- Das Rendering wird über pygfx abstrahiert und zielt via WGPU auf Vulkan, Metal und DX12, wodurch der Fokus stärker auf der Nutzung moderner GPUs liegt als bei OpenGL-zentrierten Tools
Die wissenschaftlichen Visualisierungs-Engpässe, auf die fastplotlib abzielt
- fastplotlib ist eine GPU-beschleunigte wissenschaftliche Plotting-Bibliothek auf Basis von WGPU, die schnelle und interaktive Visualisierung zum Ziel hat
- Wissenschaftliche Visualisierung wird meist aus folgenden Gründen schwierig
- Daten können Terabyte-Größe erreichen und sind oft hochdimensional
- Rechenressourcen lassen sich nur schwer effizient nutzen
- Viele Tools sind auf statische Plots ausgerichtet oder skalieren bei großen Datenmengen schlecht
- Visualisierung ist im Vergleich zur Datenerzeugung zu langsam, wodurch Echtzeitanalyse verzögert wird
- fastplotlib hebt für performante und interaktive Visualisierung folgende Einsatzbereiche hervor
- GPU-beschleunigte Visualisierung
- Schnelles Prototyping und Algorithmendesign
- Erkundung großer Datenmengen und schnelles Rendering
- Erstellung von Echtzeit-Erfassungssystemen für Messinstrumente
- Für die meisten Anwendungsfälle reicht eine moderne integrierte GPU aus
Interaktive Erkundung jenseits statischer Plots
- Traditionelle wissenschaftliche Visualisierung war lange auf statische Plots angewiesen, doch dynamische und interaktive Visualisierung macht Datenerkundung und Analyse direkter
- Als Beispiel wird die Kovarianzmatrix des Olivetti faces dataset mit fastplotlib interaktiv visualisiert
- Das linke Subplot zeigt die Kovarianzmatrix des Olivetti faces dataset
- Jeder Eintrag der Kovarianzmatrix zeigt, wie sich die Intensität zweier Pixel gemeinsam verändert
- Das rechte Subplot ist ein rekonstruiertes Bild der aktuell ausgewählten Zeile der Kovarianzmatrix
- Durch Bewegen des Selektors lässt sich die betrachtete Zeile leicht ändern
- Statt die Kovarianzmatrix nur statisch zu betrachten, hilft die Kombination mit dem rekonstruierten Bild jeder Zeile dabei, besser zu verstehen, wie sich Pixelintensitäten in den Gesichtern des Datensatzes verändern
- Dieses Beispiel zeigt weniger eine tiefe Analyse der Kovarianzmatrix selbst als vielmehr, dass schon ein kleines Maß an Interaktion das Datenverständnis verbessern kann
- fastplotlib will den Einsatzbereich wissenschaftlicher Visualisierung erweitern, indem es Mechanismen für interaktive Plots auf höherem Niveau bereitstellt
Eine API, die sich wie ein Array behandeln lässt
- Im Python-Ökosystem für wissenschaftliche Visualisierung gibt es viele Open-Source-Tools, aber bei manchen Bibliotheken bilden komplexe APIs eine hohe Einstiegshürde für Wissenschaftler und Nutzer
- fastplotlib will schnelle interaktive Visualisierung über eine intuitive API bereitstellen
- Der zentrale Designgedanke ist, dass sich die Daten in einer Visualisierung nicht anders als ein Array anfühlen sollen
- Wenn Daten ihre vertraute arrayartige Struktur behalten, wird auch die Interaktion mit der Visualisierung einfacher
- Im Beispiel wird nach dem Zeichnen einer Sinuswelle per NumPy-artigem Indexing jeder dritte Punkt rot eingefärbt
sine_wave.colors[::3] = "red"
- Auf diese Weise lassen sich auch nach dem ersten Plot verschiedene Eigenschaften der Grafik dynamisch manipulieren
- Die arrayartige API bildet die Grundlage dafür, fastplotlib flexibel und intuitiv nutzen zu können
Ein Event-System, das mit Callbacks aufgebaut wird
- fastplotlib ist auch beim Event-System auf einfache Handhabung ausgelegt
- Events zwischen Grafiken oder Plots lassen sich als Callback-Funktionen definieren, wodurch interaktive Visualisierungen erstellt und erweitert werden können
- Das Beispiel für ein Klick-Event funktioniert in folgendem Ablauf
- Es werden Daten mehrerer Kreise erzeugt
- Die Kreise werden mit
add_line_collection dem Plot hinzugefügt
- Beim Renderer wird ein
"click"-Event-Handler registriert
- Die Klickposition wird von Bildschirmkoordinaten in Weltkoordinaten umgerechnet
- Die dem Klickpunkt nächstgelegene Grafik wird gefunden
- Die Farbe des nächstgelegenen Kreises wird auf Weiß geändert
- Die Event-Verarbeitung folgt dem Muster, zuerst das Verhalten als Funktion zu definieren und dann einen Handler zu der betreffenden Grafik oder dem Plot hinzuzufügen
- Nutzer können Interaktionen so über Funktionsdefinitionen aufbauen, statt erst eine komplexe bibliotheksspezifische API neu lernen zu müssen
Nutzung moderner GPUs und Grafik-APIs
- GPUs sind für wissenschaftliche Arbeit nahezu zur Voraussetzung geworden, und Visualisierung ist dabei keine Ausnahme
- Um hochauflösende Visualisierung performant umzusetzen, müssen die Rechenressourcen der GPU möglichst umfassend genutzt werden
- Ein fastplotlib-Beispiel plottet 3 Millionen Punkte und führt dabei folgende Operationen aus
- Eine Linie wird geplottet
- Es wird hinein- und herausgezoomt
- Die Colormap der Linie wird geändert
- Die Farbe bestimmter Punkte wird individuell geändert
- In anderen Python-Bibliotheken für wissenschaftliche Visualisierung ist es schwer, so viele Punkte auf einmal zu plotten und die Punktfarben so fein zu steuern
- fastplotlib ist über der Rendering-Engine pygfx abstrahiert
- pygfx wird von WGPU angetrieben, und WGPU zielt je nach Plattform auf folgende Grafik-APIs
- Linux: Vulkan
- Mac: Metal
- Windows: DX12
- Vulkan, Metal und DX12 sind gegenüber OpenGL schnellere und effizientere moderne Grafik-APIs, die GPU-Hardware besser ausnutzen
- Der Grund dafür, dass fastplotlib auf pygfx aufbaut, ist die Abstraktion von Low-Level-Details der Rendering-Engine wie Kamera, Renderer und Szene sowie von wiederkehrendem Boilerplate-Code, damit Nutzer sich auf ihre Daten konzentrieren können
Dokumentation und was folgt
- fastplotlib will aktuelle Probleme der wissenschaftlichen Visualisierung in Python angehen, indem es eine leicht nutzbare arrayartige API mit moderner Grafik-Hardware kombiniert
- Dokumentation und Beispiele sind in der fastplotlib-Dokumentation verfügbar
- Benutzerhandbuch
- Erste Schritte
- Beispielgalerie
- Fragen und Diskussionen werden über GitHub Issues oder Discussions entgegengenommen
- Künftig sollen weitere Beiträge folgen, die Nutzungsbeispiele von fastplotlib und die zugrunde liegende Grafiktechnologie tiefer behandeln
Noch keine Kommentare.