An open supply unified execution engine

  • Meta stellt Velox vor, eine Open Source Unified Execution Engine, die darauf abzielt, Datenverwaltungssysteme zu beschleunigen und ihre Entwicklung zu rationalisieren.
  • Velox befindet sich in aktiver Entwicklung. Experimentelle Ergebnisse aus unserem auf der International Conference on veröffentlichten Artikel Very Large Data Bases (VLDB) 2022 zeigen, wie Velox die Effizienz und Konsistenz in Datenmanagementsystemen verbessert.
  • Velox hilft bei der Konsolidierung und Vereinheitlichung von Datenverwaltungssystemen in einer Weise, von der wir glauben, dass sie der Branche zugute kommt. Wir hoffen, dass die größere Open-Source-Community sich uns anschließen wird, um zu dem Projekt beizutragen.

Die Infrastruktur von Meta spielt eine wichtige Rolle bei der Unterstützung unserer Produkte und Dienstleistungen. Unser Dateninfrastruktur-Ökosystem besteht aus Dutzenden spezialisierter Datenberechnungs-Engines, die sich alle auf unterschiedliche Workloads für eine Vielzahl von Anwendungsfällen konzentrieren, die von SQL-Analysen (Batch und interaktiv) bis hin zu Transaktions-Workloads, Stream-Verarbeitung, Datenaufnahme und mehr reichen. In letzter Zeit das schnelle Wachstum von Anwendungsfällen für künstliche Intelligenz (KI) und maschinelles Lernen (ML). innerhalb der Infrastruktur von Meta hat zu zusätzlichen Engines und Bibliotheken geführt, die auf Feature-Engineering, Datenvorverarbeitung und andere Workloads für ML-Training und Bereitstellungspipelines abzielen.

Trotz der Ähnlichkeiten haben sich diese Motoren jedoch weitgehend unabhängig voneinander entwickelt. Diese Fragmentierung hat ihre Wartung und Verbesserung erschwert, insbesondere wenn man bedenkt, dass sich mit der Weiterentwicklung der Workloads auch die Hardware ändert, die diese Workloads ausführt. Letztendlich führt diese Fragmentierung zu Systemen mit unterschiedlichen Funktionssätzen und inkonsistenter Semantik – was die Produktivität von Datenbenutzern verringert, die mit mehreren Engines interagieren müssen, um Aufgaben zu erledigen.

Um diesen Herausforderungen zu begegnen und eine stärkere, effizientere Dateninfrastruktur für unsere eigenen Produkte und die Welt zu schaffen, hat Meta Open Source entwickelt Schnell. Es handelt sich um eine neuartige, hochmoderne einheitliche Ausführungsmaschine, die darauf abzielt, Datenverwaltungssysteme zu beschleunigen und ihre Entwicklung zu rationalisieren. Velox vereint die gemeinsamen datenintensiven Komponenten von Datenverarbeitungs-Engines und ist dennoch erweiterbar und an verschiedene Berechnungs-Engines anpassbar. Es demokratisiert Optimierungen, die zuvor nur in einzelnen Engines implementiert wurden, und bietet einen Rahmen, in dem eine konsistente Semantik implementiert werden kann. Dies reduziert Doppelarbeit, fördert die Wiederverwendbarkeit und verbessert die allgemeine Effizienz und Konsistenz.

Velox befindet sich in aktiver Entwicklung, befindet sich jedoch bereits in verschiedenen Stadien der Integration mit mehr als einem Dutzend Datensystemen bei Meta, darunter Presto, Spark und PyTorch (letzteres über eine Datenvorverarbeitungsbibliothek namens TorchArrow) sowie andere interne Stream-Verarbeitung Plattformen, Transaktions-Engines, Datenerfassungssysteme und -infrastruktur, ML-Systeme für Feature-Engineering und andere.

Da war es erstmal auf GitHub hochgeladenhat das Open-Source-Projekt Velox mehr als 150 Code-Beitragende angezogen, darunter wichtige Mitarbeiter wie Ahana, Intel und Voltron Data sowie verschiedene akademische Institutionen. Wir glauben, dass wir durch Open-Sourcing und die Förderung einer Community für Velox das Innovationstempo in der Entwicklungsbranche für Datenmanagementsysteme beschleunigen können. Wir hoffen, dass sich uns weitere Einzelpersonen und Unternehmen bei diesen Bemühungen anschließen werden.

Ein Überblick über Velox

Während Datenberechnungs-Engines auf den ersten Blick unterschiedlich erscheinen mögen, bestehen sie alle aus einem ähnlichen Satz logischer Komponenten: einem Sprach-Front-End, einer Zwischendarstellung (IR), einem Optimierer, einer Ausführungs-Laufzeit und einer Ausführungs-Engine. Velox stellt die Bausteine ​​bereit, die für die Implementierung von Ausführungsmaschinen erforderlich sind, die aus allen datenintensiven Operationen bestehen, die innerhalb eines einzigen Hosts ausgeführt werden, wie z. B. Ausdrucksauswertung, Aggregation, Sortierung, Verknüpfung und mehr – auch allgemein als Datenebene bezeichnet. Daher erwartet Velox einen optimierten Plan als Eingabe und führt ihn unter Verwendung der im lokalen Host verfügbaren Ressourcen effizient aus.

Datenverwaltungssysteme wie Presto und Spark verfügen in der Regel über eigene Ausführungs-Engines und andere Komponenten. Velox kann als gemeinsame Ausführungsmaschine für verschiedene Datenverwaltungssysteme fungieren. (Diagramm von Philip Bell.)

Velox nutzt zahlreiche Laufzeitoptimierungen, wie z. B. Filter- und Konjunktionsumordnung, Schlüsselnormalisierung für Array- und Hash-basierte Aggregationen und Joins, dynamisches Filter-Pushdown und adaptives Spalten-Prefetching. Diese Optimierungen bieten angesichts des verfügbaren Wissens und der Statistiken, die aus eingehenden Datenstapeln extrahiert werden, eine optimale lokale Effizienz. Velox ist außerdem von Grund auf so konzipiert, dass komplexe Datentypen aufgrund ihrer Allgegenwart in modernen Workloads effizient unterstützt werden, und verlässt sich daher weitgehend auf die Wörterbuchcodierung für kardinalitätserhöhende und kardinalitätsverringernde Operationen wie Joins und Filtern, während gleichzeitig schnelle Pfade für bereitgestellt werden primitive Datentypen.

Die Hauptkomponenten von Velox sind:

  • Typ: ein generisches Typsystem, mit dem Entwickler skalare, komplexe und verschachtelte Datentypen darstellen können, einschließlich Strukturen, Karten, Arrays, Funktionen (Lambdas), Dezimalzahlen, Tensoren und mehr.
  • Vektor: Ein mit Apache Arrow kompatibles spaltenförmiges Speicherlayoutmodul, das mehrere Codierungen unterstützt, z. B. flach, Wörterbuch, Konstante, Sequenz/RLE und Referenzrahmen, zusätzlich zu einem faulen Materialisierungsmuster und Unterstützung für die Auffüllung von Ergebnispuffern außerhalb der Reihenfolge.
  • Ausdruck Eval: eine hochmoderne Auswertungsmaschine für vektorisierte Ausdrücke, die auf vektorkodierten Daten basiert und Techniken wie die Eliminierung gemeinsamer Unterausdrücke, konstante Faltung, effiziente Nullausbreitung, kodierungsbewusste Auswertung, Wörterbuch-Peeling und Memoisierung nutzt.
  • Funktionen: APIs, die von Entwicklern zum Erstellen benutzerdefinierter Funktionen verwendet werden können und eine einfache (Zeile für Zeile) und vektorisierte (Batch für Batch) Schnittstelle für Skalarfunktionen und eine API für Aggregatfunktionen bereitstellen.
    • Ein Funktionspaket Kompatibilität mit dem beliebten PrestoSQL-Dialekt wird ebenfalls als Teil der Bibliothek bereitgestellt.
  • Betreiber: Implementierung gängiger SQL-Operatoren wie TableScan, Project, Filter, Aggregation, Exchange/Merge, OrderBy, TopN, HashJoin, MergeJoin, Unnest und mehr.
  • E/A: eine Reihe von APIs, mit denen Velox in den Kontext anderer Engines und Laufzeiten integriert werden kann, z. B.:
    • Anschlüsse: ermöglicht Entwicklern, Datenquellen und -senken für TableScan- und TableWrite-Operatoren zu spezialisieren.
    • DWI: eine erweiterbare Schnittstelle, die Unterstützung für die Codierung/Decodierung gängiger Dateiformate wie Parquet, ORC und DWRF bietet.
    • Speicheradapter: eine bytebasierte erweiterbare Schnittstelle, die es Velox ermöglicht, sich mit Speichersystemen wie z TektonikS3, HDFS und mehr.
    • Serialisierer: eine Serialisierungsschnittstelle, die auf die Netzwerkkommunikation abzielt, wo verschiedene Drahtprotokolle implementiert werden können, unterstützt PrestoPage und die UnsafeRow-Formate von Spark.
  • Resourcenmanagement: eine Sammlung von Primitiven zur Handhabung von Rechenressourcen wie CPU- und Speicherverwaltung, Spilling sowie Speicher- und SSD-Caching.

Die wichtigsten Integrationen und experimentellen Ergebnisse von Velox

Über die Effizienzgewinne hinaus bietet Velox einen Mehrwert, indem es die Ausführungs-Engines über verschiedene Datenberechnungs-Engines hinweg vereinheitlicht. Die drei beliebtesten Integrationen sind Presto, Spark und TorchArrow/PyTorch.

Bald, sehr bald

Velox wird als Teil des in Presto integriert Sehr bald -Projekt, bei dem Presto-Java-Worker durch einen auf Velox basierenden C++-Prozess ersetzt werden. Das Projekt wurde ursprünglich von Meta im Jahr 2020 erstellt und wird in Zusammenarbeit mit Ahana und anderen Open-Source-Mitwirkenden weiterentwickelt.

Prestissimo bietet eine C++-Implementierung der HTTP-REST-Schnittstelle von Presto, einschließlich Worker-to-Worker-Austauschserialisierungsprotokoll, Koordinator-zu-Worker-Orchestrierung und Endpunkte für die Statusberichterstattung, wodurch ein Drop-in-C++-Ersatz für Presto-Worker bereitgestellt wird. Der Hauptabfrage-Workflow besteht darin, ein Presto-Planfragment von einem Java-Koordinator zu erhalten, es in einen Velox-Abfrageplan zu übersetzen und es zur Ausführung an Velox zu übergeben.

Wir haben zwei verschiedene Experimente durchgeführt, um die Beschleunigung von Velox in Presto zu untersuchen. Unser erstes Experiment verwendete den TPC-H-Benchmark und maß bei einigen CPU-gebundenen Abfragen eine Beschleunigung von fast einer Größenordnung. Wir haben eine bescheidenere Beschleunigung (im Durchschnitt 3-6x) für Shuffle-Bound-Abfragen gesehen.

Obwohl der TPC-H-Datensatz ein Standard-Benchmark ist, ist er nicht repräsentativ für echte Arbeitslasten. Um zu untersuchen, wie Velox in diesen Szenarien abschneiden könnte, haben wir ein Experiment erstellt, bei dem wir Produktionsdatenverkehr ausgeführt haben, der von einer Vielzahl von interaktiven Analysetools generiert wurde, die bei Meta zu finden sind. In diesem Experiment sahen wir eine durchschnittliche 6- bis 7-fache Beschleunigung bei der Datenabfrage, wobei einige Ergebnisse die Beschleunigung um mehr als eine Größenordnung erhöhten. Mehr über die Details der Experimente und deren Ergebnisse erfahren Sie in unserem Forschungsbericht.

SchnellPrestissimo-Ergebnisse zu echten analytischen Workloads. Das obige Histogramm zeigt die relative Beschleunigung von Prestissimo gegenüber Presto Java. Die y-Achse gibt die Anzahl der Abfragen an (in Tausend [K]). Null auf der x-Achse bedeutet, dass Presto Java schneller ist; 10 gibt an, dass Prestissimo mindestens 10-mal schneller ist als Presto Java.Codebasis von Prestissimo ist auf GitHub verfügbar.

Funke – Gluten

Velox wird auch in Spark als Teil des integriert Gluten-Projekt erstellt von Intel. Gluten ermöglicht die Verwendung von C++-Ausführungsmodulen (z. B. Velox) innerhalb der Spark-Umgebung, während Spark-SQL-Abfragen ausgeführt werden. Gluten entkoppelt die Spark-JVM und die Ausführungs-Engine, indem es eine JNI-API basierend auf dem Apache-Arrow-Datenformat und Substrait-Abfrageplänen erstellt, sodass Velox innerhalb von Spark verwendet werden kann, indem es einfach in die JNI-API von Gluten integriert wird.

Glutens Codebasis ist auf GitHub verfügbar.

FackelPfeil

FackelPfeil ist eine Dataframe-Python-Bibliothek für die Datenvorverarbeitung im Deep Learning und Teil des PyTorch-Projekts. TorchArrow übersetzt die Datenrahmendarstellung intern in einen Velox-Plan und delegiert ihn zur Ausführung an Velox. Neben der Konvergenz des ansonsten fragmentierten Bereichs der ML-Datenvorverarbeitungsbibliotheken ermöglicht diese Integration Meta, den Ausführungs-Engine-Code zwischen Analyse-Engines und ML-Infrastruktur zu konsolidieren. Es bietet eine konsistentere Erfahrung für ML-Endbenutzer, die häufig mit verschiedenen Berechnungs-Engines interagieren müssen, um eine bestimmte Aufgabe zu erledigen, indem sie denselben Satz von Funktionen/UDFs verfügbar machen und konsistentes Verhalten über Engines hinweg sicherstellen.

TorchArrow wurde kürzlich in veröffentlicht Beta-Modus auf GitHub.

Die Zukunft der Datenbanksystementwicklung

Velox zeigt, dass es möglich ist, Datenverarbeitungssysteme anpassungsfähiger zu machen, indem ihre Ausführungsmaschinen in einer einzigen einheitlichen Bibliothek konsolidiert werden. Während wir Velox weiterhin in unsere eigenen Systeme integrieren, setzen wir uns dafür ein, eine nachhaltige Open-Source-Community aufzubauen, um das Projekt zu unterstützen und die Entwicklung von Bibliotheken und die Einführung in der Industrie zu beschleunigen. Wir sind auch daran interessiert, die Grenzen zwischen ML-Infrastruktur und traditionellen Datenmanagementsystemen weiter zu verwischen, indem wir Funktionspakete und Semantik zwischen diesen Silos vereinheitlichen.

Mit Blick auf die Zukunft glauben wir, dass die einheitliche und modulare Natur von Velox das Potenzial hat, für Branchen von Vorteil zu sein, die Datenverwaltungssysteme verwenden und insbesondere solche, die Datenverwaltungssysteme entwickeln. Es wird uns ermöglichen, mit Hardwareanbietern zusammenzuarbeiten und unseren einheitlichen Software-Stack proaktiv an den Fortschritt der Hardware anzupassen. Die Wiederverwendung einheitlicher und hocheffizienter Komponenten wird es uns auch ermöglichen, schneller Innovationen einzuführen, wenn sich die Daten-Workloads weiterentwickeln. Wir glauben, dass Modularität und Wiederverwendbarkeit die Zukunft der Entwicklung von Datenbanksystemen sind, und wir hoffen, dass Datenunternehmen, Hochschulen und einzelne Datenbankpraktiker sich uns in diesen Bemühungen anschließen werden.

Ausführliche Dokumentation zu Velox und diesen Komponenten finden Sie auf unserer Webseite und in unserem Forschungsbericht „Velox: Meta’s Unified Execution Engine“.

Danksagungen

Wir möchten allen Mitwirkenden am Velox-Projekt danken. Ein besonderes Dankeschön an Sridhar Anumandla, Philip Bell, Biswapesh Chattopadhyay, Naveen Cherukuri, Wei He, Jiju John, Jimmy Lu, Xiaoxuang Meng, Krishna Pai, Laith Sakka, Bikramjeet Vigand, Kevin Wilfong vom Meta-Team und an die unzählige Community Mitwirkende, darunter Frank Hu, Deepak Majeti, Aditi Pandit und Ying Su.

Comments are closed.