3 Punkte von GN⁺ 2025-03-12 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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
    • Colormaps
    • Farben
    • Daten
  • 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.

Noch keine Kommentare.