Heim >Technologie-Peripheriegeräte >KI >Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

PHPz
PHPznach vorne
2023-04-04 11:35:011485Durchsuche

Dieser Artikel teilt hauptsächlich die Plattformpraxis und die Konstruktionserfahrung des Alibaba Cloud FeatHub-Projektteams in der Feature-Engineering-Entwicklung.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Dieses Teilen ist in vier Teile unterteilt. Der erste Teil stellt im Allgemeinen die Szenarien, Ziele, Schwachstellen und Herausforderungen vor, mit denen FeatHub bei der Funktionsentwicklung, -bereitstellung, -überwachung und -freigabe konfrontiert ist . und verwandte Kernkonzepte; der dritte Teil stellt die grundlegende Verwendung von APIs, grundlegende Computerfunktionen und Codepraktiken von Beispielszenarien während der Verwendung von FeatHub sowie Leistungsoptimierung, zukünftige Erweiterungsziele und die gemeinsame Konstruktion des Open vor Quellgemeinschaft, Bereitstellung des Projekts Zum Lernen, Entwickeln und Verwenden werden wir auch die Funktion zur Wiedergabe historischer Daten von FeatHub, die Unterstützung für Offline-, Nearline- und Online-Verarbeitung sowie die Unterstützung für die Upstream- und Downstream-Komponenten von Alibaba Cloud teilen. 1. Warum FeatHub benötigt wird , wie das beliebte TensorFlow, PyTorch und scikit-learn, die in einigen traditionellen maschinellen Lernszenarien usw. verwendet werden. Wir hoffen, Datenwissenschaftler dabei zu unterstützen, weiterhin vertrautes Python zu verwenden, um Feature-Engineering-Code zu schreiben, um die Entwicklung und Bereitstellung von End-to-End-Links für maschinelles Lernen abzuschließen, und Bibliotheken im Python-Ökosystem zu verwenden, mit denen sie vertraut sind.

(2) Echtzeitfunktionen generieren

Immer mehr Anwendungen für maschinelles Lernen entwickeln sich in Richtung Echtzeit, und die Effizienz und Genauigkeit des maschinellen Lernens kann durch Echtzeitverarbeitung verbessert werden. Um das Ziel zu erreichen, müssen Echtzeitfunktionen generiert werden. Dabei geht es nicht nur darum, Abfragefunktionen in Echtzeit zu erhalten, sondern auch um die Generierung von Funktionen in Echtzeit. Wenn Sie beispielsweise die Anzahl der Benutzerklicks in den letzten zwei Minuten in Echtzeit ermitteln müssen, müssen Sie eine Streaming-Computing-Engine verwenden, um Echtzeit-Feature-Berechnungen durchzuführen.

(3) Open-Source-Lösungen sind erforderlich, um die Multi-Cloud-Bereitstellung zu unterstützenKonstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Immer mehr kleine und mittlere Unternehmen hoffen auf eine Multi-Cloud-Bereitstellung, um Produktionssicherheitsgarantien zu erhalten und Angebotsvorteile unter Cloud-Anbietern zu erzielen. Daher erfordert unsere Lösung nicht, dass Benutzer sich an einen Cloud-Anbieter binden, sondern ermöglicht Benutzern die freie Wahl zwischen verschiedenen Cloud-Anbietern und sogar die Bereitstellung von Feature-Engineering-Vorgängen in privaten Clouds.

Dies sind einige der Bedingungen, die das FeatHub-Projekt bei seiner Gründung erfüllen wollte.

2. Schwachstellen des Echtzeit-Feature-Engineerings

Heutzutage entwickeln viele Unternehmen Echtzeit-Feature-Engineering-Operationen. Es gibt einige Schwachstellen, die den gesamten Lebenszyklus von Funktionen abdecken, einschließlich Entwicklung, Bereitstellung, Überwachung und anschließender Freigabe.

(1) Die Entwicklung ist schwierig

① Feature Traversal

In der Entwicklungsphase wird hauptsächlich das Echtzeit-Feature-Framework Apache Flink verwendet, da Flink im Grunde der De-facto-Standard für Echtzeit-Stream-Computing ist. Aber mit Flink oder Wenn ein ähnliches Framework zur Entwicklung von Echtzeitfunktionen verwendet wird, muss die Schwierigkeit der Feature-Traversierung gelöst werden. Viele Datenwissenschaftler verfügen nicht über die Erfahrung, um Feature-Traversal zu lösen, und die Lösung solcher Probleme erfordert viel Lernzeit und -kosten, was den Hauptschmerzpunkt in der Entwicklungsphase darstellt.

(2) Die Bereitstellung ist schwierig

① Eine manuelle Übersetzung ist erforderlichKonstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Viele Unternehmen verfügen über ein spezielles Plattformteam, um von Datenwissenschaftlern geschriebene Einzelprozess-Python-Jobs in Flink- oder Spark-Jobs zu übersetzen, die verteilt ausgeführt werden können Erzielen Sie eine hohe Leistung. Hochverfügbare Bereitstellung. Sein Übersetzungsprozess wird die Länge des gesamten Entwicklungslebenszyklus verlängern. Und da für die Übersetzungsarbeit zusätzliche Arbeitskräfte erforderlich sind, erhöhen sich die Entwicklungskosten und es besteht außerdem die Möglichkeit, dass Fehler auftreten. Nachdem eine andere Gruppe von Personen die Arbeit der Datenwissenschaftler übersetzt hat, stimmt die Logik möglicherweise nicht mit der ursprünglichen Logik überein, was zu einem höheren Debugging-Arbeitsaufwand führt.

(3) Hohe Schwierigkeit bei der Überwachung

① Änderungen in der Funktionsverteilung

Die gesamte Qualität und Effizienz des Feature-Engineering-Jobs hängt nicht nur davon ab, ob der Job Fehler aufweist, sondern auch davon, dass die numerische Verteilung der Upstream-Eingabedaten bestimmte Merkmale erfüllt, z. B. dass sie während des Trainings nahe an der numerischen Verteilung der Daten liegt. Die Inferenzleistung vieler Jobs nimmt ab, häufig aufgrund von Änderungen in der Verteilung der von vorgelagerten Jobs erzeugten Daten. In diesem Fall müssen Entwickler den gesamten Link Segment für Segment verfolgen, um zu sehen, wo sich die Feature-Datenverteilung geändert hat, und um zu sehen, ob je nach Situation eine Neuschulung oder Fehlerbehebungen erforderlich sind. Auch die übermäßige Arbeitsbelastung dieses Teils der Arbeitskräfte ist ein Problem.

(4) Das Teilen ist schwierig

① Duplizierung der Entwicklungsarbeit

Obwohl die Entwicklungsteams und Szenarien vieler Feature-Berechnungsjobs unterschiedlich sind, werden tatsächlich ähnliche oder sogar die gleichen Feature-Definitionen verwendet. Viele Unternehmen verfügen nicht über einen guten Kanal für verschiedene Teams innerhalb des Unternehmens, um vorhandene Funktionen abzufragen und wiederzuverwenden. Dies führt dazu, dass verschiedene Teams häufig wiederholte Entwicklungsarbeiten durchführen und sogar Jobs wiederholt ausführen müssen, um einige Funktionen für dieselben Funktionen zu generieren. Dies bringt eine Verschwendung von Arbeitskräften und Rechen-/Speicherressourcen mit sich, da mehr Rechenleistung, Arbeitsspeicher und Speicherplatz benötigt werden, um die gleichen Funktionen zu generieren.

② Zeitpunktkorrekte Semantik

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Damit jeder versteht, was Feature Crossing ist, zeigt die obige Abbildung ein einfaches Beispiel, um dieses Problem zu veranschaulichen. Die Tabelle oben links in der Abbildung ist ein Verhaltensmerkmal des Benutzers, das die Anzahl der Klicks in den letzten zwei Minuten für einen Benutzer mit einer bestimmten ID zu verschiedenen Zeitknoten ausdrückt. Anhand dieser Anzahl an Klicks können wir möglicherweise schließen, ob ein Nutzer auf eine Anzeige klickt. Um diese Funktionen für das Training verwenden zu können, ist es normalerweise erforderlich, die Funktionen mithilfe von Labels in einige Benutzerdatensätze einzubinden. Die Tabelle unten links in der Abbildung zeigt einen Datensatz einiger positiver und negativer Proben, der zeigt, ob ein Benutzer tatsächlich auf die Anzeige geklickt hat, wobei die vom Benutzer zu verschiedenen Zeitpunkten generierten positiven oder negativen Proben markiert werden. Um die Merkmale in diesen beiden Datensätzen zu einem Trainingsdatensatz zusammenzufügen, ist es normalerweise erforderlich, Merkmale basierend auf der Benutzer-ID als Schlüssel zu verbinden. Wenn Sie einfach eine Tabellenverknüpfung durchführen, ohne den Zeitstempel zu berücksichtigen, können Probleme beim Überkreuzen von Merkmalen auftreten. Beispielsweise sollte bei 6:03 Minuten die Anzahl der Klicks des Benutzers in den letzten 2 Minuten 10 betragen, der durch Spleißen erhaltene Merkmalswert kann jedoch ab 7:00 Minuten 6 betragen. Diese Art der Merkmalskreuzung führt zu einer Verringerung des tatsächlichen Argumentationseffekts. Ein Join-Ergebnis mit zeitrichtiger Semantik sollte wie in der folgenden Abbildung dargestellt aussehen: Es sollte sich in der Dimensionstabelle befinden. Suchen Sie unter den Features mit mehreren Versionen den Feature-Wert, dessen Zeitstempel kleiner als der Zeitstempel in der linken Tabelle ist und diesem am nächsten kommt, und fügen Sie ihn in den endgültig generierten Trainingsdatensatz ein. Eine solche Verkettung mit zeitrichtiger Semantik ergibt den Trainingsdatensatz, der auf der rechten Seite der Abbildung oben dargestellt ist. Für verschiedene Zeitpunkte gibt es entsprechende Merkmalswerte, die in den letzten zwei Minuten generiert wurden. Der auf diese Weise generierte Trainingsdatensatz kann die Leistung von Training und Inferenz verbessern.

3. Kernszenarien des Feature StoreKonstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Als nächstes werden FeatHub als Feature Store, die Probleme, die es zu lösen versucht, und die Tools, die es in jeder Phase des gesamten Feature-Entwicklungszyklus bereitstellt, vorgestellt. (1) Feature-Entwicklung

In der Feature-Entwicklungsphase wird FeatHub ein äußerst benutzerfreundliches SDK auf Basis von Python bereitstellen, das es Benutzern ermöglicht, die Berechnungslogik von Features prägnant auszudrücken. Die Feature-Berechnung ist im Wesentlichen die ETL eines Features. Das Wichtigste während der Entwicklungsphase ist die Benutzerfreundlichkeit und Einfachheit des SDK.

(2) Feature-BereitstellungKonstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

In der Feature-Bereitstellungsphase stellt FeatHub eine Ausführungs-Engine bereit, um die Bereitstellung einer Hochleistungs-Feature-Berechnungslogik mit geringer Latenz zu implementieren, und kann eine Verbindung zu verschiedenen Feature-Stores herstellen. Das Wichtigste in der Bereitstellungsphase ist die Leistung der Ausführungs-Engine und die Möglichkeit, verschiedene Feature-Stores zu verbinden.

(3) Funktionsalarm Unzulässige Werte oder Merkmalsdurchschnitte werden auf der Grundlage dieser Indikatoren ausgegeben, um die verantwortliche Person umgehend zu benachrichtigen, damit sie die Ursachen für Änderungen in der relevanten Merkmalsverteilung untersuchen und Maßnahmen ergreifen kann, um die Wirkung der empfohlenen End-to-End-Links aufrechtzuerhalten.

(4) Feature-Sharing

In der Feature-Sharing-Phase wird FeatHub künftig Feature-Registrierungs- und Suchfunktionen bereitstellen, die es Entwicklern aus verschiedenen Teams innerhalb desselben Unternehmens ermöglichen, abzufragen, ob die gewünschten Features bereits vorhanden sind, und diese Feature-Definitionen wiederzuverwenden und generierte Feature-Daten.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriertDas obige Bild veranschaulicht die Kernfunktionen von FeatHub. Während der Entwicklungsphase kann FeatHub ein benutzerfreundliches SDK bereitstellen, das Feature-Splicing, Feature-Aggregation und andere Logik mit punktgenauer Semantik unterstützt. Während der Bereitstellungsphase kann FeatHub eine Feature-Generierung mit hohem Durchsatz und geringer Latenz unterstützen, die Verwendung von Flink als Ausführungs-Engine zur Berechnung von Features unterstützen und mehrere Feature-Speichersysteme unterstützen, sodass Benutzer den Speichertyp, den sie verwenden möchten, frei wählen können. Während der Überwachungsphase wird FeatHub in der Lage sein, Echtzeitindikatoren zur Überwachung von Änderungen in der Funktionsverteilung bereitzustellen, einschließlich Offline- und Echtzeitüberwachung, um Entwicklern die rechtzeitige Erkennung von Problemen zu erleichtern. In der Freigabephase wird FeatHub eine benutzerfreundliche Web-Benutzeroberfläche und ein SDK bereitstellen, um Entwickler bei der Registrierung, Suche und Wiederverwendung von Funktionen zu unterstützen.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriertEs gibt bereits einige repräsentative Feature Store-Projekte im Feature Store-Bereich, wie zum Beispiel Feathr, das Anfang dieses Jahres von LinkedIn als Open Source bereitgestellt wurde, und Feast, das seit vielen Jahren als Open Source verfügbar ist. Wir haben diese Projekte untersucht und festgestellt, dass sie nicht gut geeignet sind, die von uns vorgeschlagenen Zielszenarien zu erreichen.

Im Vergleich zu bestehenden Lösungen bietet FeatHub einen Mehrwert, darunter:

Einfaches und benutzerfreundliches Python SDK. Das SDK von FeatHub bezieht sich auf die SDKs bestehender Feature Store-Projekte, unterstützt die Kernfunktionen dieser Projekte und verbessert die Abstraktionsfähigkeiten und die Benutzerfreundlichkeit des SDK weiter.

② unterstützt Entwicklung und Experimente auf einer einzelnen Maschine.

Entwickler müssen keine Verbindung zu verteilten Flink- oder Spark-Clustern herstellen, um Experimente durchzuführen, sondern müssen nur die CPU- oder Speicherressourcen auf einem einzelnen Computer verwenden, um Entwicklungen und Experimente durchzuführen, und können Algorithmenbibliotheken für maschinelles Lernen auf einem einzelnen Computer verwenden, z scikit-lernen.

③ Sie können die Ausführungs-Engine wechseln, ohne den Code zu ändern.

Nachdem der Benutzer die Entwicklung auf einer einzelnen Maschine abgeschlossen hat, kann er die Einzelmaschinen-Ausführungs-Engine auf eine verteilte Ausführungs-Engine wie Flink oder Spark umstellen, ohne den Code zu ändern, der die Funktionsberechnungslogik ausdrückt. Durch die Verwendung von Flink als Ausführungs-Engine kann Feathhub Echtzeit-Feature-Berechnungen mit hohem Durchsatz und geringer Latenz unterstützen. FeatHub wird die Verwendung von Spark als Ausführungs-Engine in Zukunft weiter unterstützen, sodass Benutzer potenziell eine bessere Durchsatzleistung in Offline-Szenarien erzielen und die je nach Szenario am besten geeignete Ausführungs-Engine frei wählen können.

④ Bietet die Erweiterungsmöglichkeiten der Ausführungs-Engine.

FeatHub unterstützt nicht nur Flink und Spark als Ausführungs-Engines, sondern unterstützt Entwickler auch dabei, Ausführungs-Engines anzupassen und die intern entwickelten Ausführungs-Engines des Unternehmens für Feature-ETL zu verwenden.

⑤ Der Code ist Open Source,

so dass Benutzer den Cloud-Anbieter frei wählen können, um FeatHub bereitzustellen, oder es in einer privaten Cloud bereitzustellen. 2. FeatHub-Architektur und Kernkonzepte

1. Architektur

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriertDas obige ist ein Architekturdiagramm, das die Hauptmodule von FeatHub enthält. Die oberste Ebene stellt eine Reihe von Python-SDKs zur Unterstützung benutzerdefinierter Datenquellen, Datenendpunkte und Feature-Berechnungslogik bereit. Vom SDK definierte Features können im Feature-Metadatenzentrum registriert werden, sodass andere Benutzer und Jobs Features abfragen und wiederverwenden und die Feature-Herkunft basierend auf Feature-Metadaten noch weiter analysieren können. Die Feature-Definition umfasst die Quelle und Senke des Features sowie allgemeine Berechnungslogik, wie z. B. UDF-Aufrufe, Feature-Splicing, Aggregation basierend auf Over-Windows und Sliding-Windows usw. Wenn benutzerdefinierte Features generiert werden müssen, stellt FeatHub einige integrierte Feature-Prozessoren, also Ausführungs-Engines, bereit, um die Berechnungslogik vorhandener Features auszuführen. Wenn Benutzer Experimente auf einem einzelnen Computer durchführen müssen, können sie den lokalen Prozessor verwenden, um die Ressourcen auf dem einzelnen Computer zu nutzen, ohne eine Verbindung zu einem Remote-Cluster herzustellen. Wenn Sie Echtzeitfunktionen generieren müssen, können Sie den Flink-Prozessor verwenden, um Streaming-Funktionsberechnungen mit hohem Durchsatz und geringer Latenz durchzuführen.

In Zukunft kann auch ein Feature-Service ähnlich der Lambda-Funktion unterstützt werden, um die Online-Feature-Berechnung zu implementieren, und er kann mit Spark verbunden werden, um eine Offline-Feature-Berechnung mit hohem Durchsatz durchzuführen. Die Ausführungs-Engine kann mit verschiedenen Offline- und Online-Funktionsspeichersystemen kommunizieren, z. B. mit Redis für die Online-Funktionsspeicherung, HDFS für die Offline-Funktionsspeicherung und Kafka für die Nearline-Funktionsspeicherung.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Die obige Abbildung zeigt, wie FeatHub von Benutzern verwendet und mit nachgelagerten Trainings- und Inferenzprogrammen für maschinelles Lernen verbunden wird. Benutzer oder Entwickler drücken die Funktionen aus, die sie über das SDK berechnen möchten, und übermitteln sie dann an die Ausführungs-Engine Einsatz. Nachdem die Features berechnet wurden, müssen sie an Feature-Stores wie Redis und HDFS ausgegeben werden. Ein Offline-Trainingsprogramm für maschinelles Lernen kann die Daten direkt in HDFS für Batch-Training lesen. Ein Online-Inferenzprogramm für maschinelles Lernen kann die Daten in Redis direkt für Online-Inferenzen lesen.

2. Kernkonzepte

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Das obige Bild zeigt die Beziehung zwischen den Kernkonzepten in FeatHub. Ein TableDescriptor stellt eine Sammlung von Features dar. TableDescriptor kann durch logische Transformation einen neuen TableDescriptor erzeugen.

TableDescriptor ist in zwei Kategorien unterteilt. FeatureTable drückt eine Tabelle mit einer bestimmten physischen Adresse aus. Es kann sich beispielsweise um eine Tabelle in Redis oder eine Tabelle in HDFS handeln. FeatureViews sind logische Tabellen, die nicht unbedingt physische Adressen haben. Sie werden normalerweise nach einer Reihe logischer Zeichenfolgenkonvertierungen aus einer FeatureTable abgerufen.

FeatureView hat die folgenden 3 Unterklassen:

① DerivedFeatureView Die Zeilen der Ausgabe-Feature-Tabelle und ihrer Eingabe-Feature-Tabelle (d. h. Quelle) sind grundsätzlich eins zu eins. Es kann den Ausdruck einzeiliger Konvertierungslogik (z. B. Addition, Subtraktion, Multiplikation und Division), Over-Window-Aggregation-Logik und Feature-Splicing-Logik unterstützen. Es kann zur Generierung von Trainingsdaten verwendet werden. Wenn Sie beispielsweise im zuvor vorgestellten Beispiel Trainingsbeispiele mit Features aus verschiedenen Dimensionstabellen verbinden müssen, um tatsächliche Trainingsdaten zu erhalten, können Sie DerivedFeatureView verwenden, um dies abzuschließen.

② SlidingFeatureView unterstützt die Darstellung von durch Schiebefenster berechneten Features. Die Zeilen der ausgegebenen Feature-Tabelle und der eingegebenen Feature-Tabelle sind nicht unbedingt eins zu eins. Dies liegt daran, dass sich die vom Schiebefenster berechneten Merkmalswerte im Laufe der Zeit ändern, auch wenn keine neuen Eingaben vorliegen. SlidingFeatureView kann verwendet werden, um in Echtzeit generierte Features zu verwalten und sie zur Online-Inferenz an einen Online-Feature-Store wie Redis auszugeben. Beispielsweise können wir SlidingFeatureView verwenden, um zu berechnen, wie oft jeder Benutzer in den letzten zwei Minuten auf eine bestimmte Webseite geklickt hat, und den Feature-Wert in Echtzeit auf Redis aktualisieren. Anschließend kann der Anzeigenempfehlungslink den Wert dieser Funktion abfragen online für Online-Argumentation.

③ OnDemandFeatureView kann mit Feature Service verwendet werden, um die Online-Feature-Berechnung zu unterstützen. Wenn Entwickler beispielsweise Amap verwenden, möchten sie möglicherweise die Geschwindigkeit und Richtung der Bewegung des Benutzers basierend auf dem aktuellen physischen Standort des Benutzers und dem physischen Standort beim Senden der letzten Anfrage berechnen, um Empfehlungen zur Route abzugeben Entscheidungen. Diese Merkmale müssen online auf Anfrage des Benutzers berechnet werden. Zur Unterstützung solcher Szenarien kann OnDemandFeatureView verwendet werden.

Transform drückt die Funktionsberechnungslogik aus. FeatHub unterstützt derzeit die folgenden 5 Arten von Feature-Berechnungslogik:

① Expression ermöglicht es Benutzern, eine einzelne Zeile Feature-Berechnungslogik basierend auf einer DSL-Sprache auszudrücken. Seine Ausdrucksfähigkeit ähnelt der SELECT-Anweisung in der SQL-Sprache und unterstützt Addition, Subtraktion, Multiplikation und Division sowie integrierte Funktionsaufrufe, sodass Entwickler, die mit SQL vertraut sind, schnell loslegen können.

② Join drückt die Feature-Splicing-Logik aus. Entwickler können Informationen wie den Namen der Dimensionstabelle und den Namen der zu verbindenden Features angeben.

③ PythonUDF Unterstützt benutzerdefinierte Python-Funktionen zur Berechnung von Features.

④ OverWindow drückt die Over-Window-Aggregationslogik aus. Wenn der Benutzer beispielsweise eine Datenzeile empfängt, möchte er die vorherigen fünf Datenzeilen aggregieren und berechnen, wie viele Datenelemente einer bestimmten Regel entsprechen.

⑤ SlidingWindow drückt die Aggregationslogik des Schiebefensters aus.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Wie Sie der obigen Abbildung entnehmen können, liest ein Feature-ETL-Job normalerweise Features aus der Feature-Quelltabelle, generiert neue Features über mehrere Feature-Berechnungslogiken und gibt die generierten Features in die Feature-Ergebnistabelle aus. Die Feature-Quelltabelle kann mit verschiedenen Feature-Stores wie FileSystem, Kafka, Hive usw. verbunden werden. Ebenso kann die Feature-Ergebnistabelle auch mit Feature-Speichern wie FileSystem, Kafka und Redis verbunden werden.

Der Prozessor umfasst LocalProcessor, FlinkProcessor und SparkProcessor, die eigenständige physische Ressourcen, einen verteilten Flink-Cluster bzw. einen verteilten Spark-Cluster verwenden können, um benutzerdefinierte Funktionsberechnungslogik auszuführen. 3. FeatHub-API-Anzeige Die Kernfunktion des Feature Development SDK besteht darin, neue Feature-Berechnungslogik auszudrücken. FeatHub SDK unterstützt Feature-Splicing, Fensteraggregation, integrierte Funktionsaufrufe und benutzerdefinierte Python-Funktionen. In Zukunft wird es auch UDF-Aufrufe basierend auf JAVA oder C++ unterstützen.

Das obige Bild zeigt einen Codeausschnitt des Feature-Splicing. In diesem Beispiel wird davon ausgegangen, dass in HDFS ursprüngliche positive und negative Beispieldaten vorhanden sind, die das Kaufverhalten des Benutzers aufzeichnen. Wir möchten außerdem den Produktpreis erhalten, wenn der Benutzer jedes Produkt kauft. Eine Tabelle „price_updates“ verwaltet Daten zu Produktpreisänderungen. Jedes Mal, wenn sich der Produktpreis ändert, wird in der Tabelle „price_updates“ eine Datenzeile generiert, einschließlich der Produkt-ID und des neuesten Produktpreises. Wir können JoinTransform verwenden und table_name=price_updates, feature_name=price und key=item_id festlegen, um die entsprechende Feature-Spleißlogik auszudrücken. Auf diese Weise kann FeatHub die Zeile mit der angegebenen item_id in price_updates finden und anhand des Zeitstempels den am besten geeigneten Preiswert finden, um ihn in die Beispieldatentabelle einzubinden.

Das Code-Snippet für die Over-Window-Aggregation zeigt, wie OverWindowTransform zum Berechnen von Features verwendet wird. Benutzer können expr=“item_counts * price“ und agg_fun=“SUM“ verwenden, um den Gesamtverbrauch im letzten Zeitfenster basierend auf der Menge und dem Preis der gekauften Artikel zu berechnen. Die Fensterlänge beträgt 2 Minuten. group_by_keys=["user_id"] bedeutet, dass wir den entsprechenden Gesamtverbrauch für jeden Benutzer separat berechnen.

​Die Sliding-Window-Aggregation ähnelt der Over-Window-Aggregation. Der einzige Unterschied in der API besteht darin, dass zusätzlich „step_size“ angegeben werden kann. Wenn step_size = 1 Minute, verschiebt sich das Fenster und generiert jede Minute neue Merkmalswerte. Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Codeausschnitte für integrierte Funktionsaufrufe zeigen, wie Sie die DSL-Sprache verwenden, um Additions-, Subtraktions-, Multiplikations-, Divisions- und UDF-Aufrufe auszudrücken. Angenommen, die Eingabedaten enthalten Zeitstempel von Taxiabholungen und -abgaben. Wir können den Zeitstempel des Abholens und Absetzens von Passagieren in eine Epochenzeit vom Typ Ganzzahl umwandeln, indem wir die integrierte Funktion UNIX_TIMESTAMP aufrufen und dann die erhaltene Epochenzeit subtrahieren, um die Länge jeder Fahrt zu erhalten, die als Funktion verwendet werden kann für nachfolgendes Training und Schlussfolgerungen.

Im von PythonUDF aufgerufenen Codeausschnitt kann der Benutzer eine Python-Funktion anpassen, um eine beliebige Verarbeitung der Eingabefunktionen durchzuführen, z. B. die Generierung von Zeichenfolgen in Kleinbuchstaben.

Anhand der obigen Codeausschnitte können wir erkennen, dass die API von FeatHub relativ einfach und benutzerfreundlich ist. Benutzer müssen lediglich die erforderlichen Parameter für die Berechnungslogik festlegen, ohne die Details der Verarbeitungs-Engine zu kennen.

2. Beispielszenario

Im obigen Beispielszenario verfügt der Benutzer über zwei Datenquellen. Seine Kaufereignisse enthalten Beispieldaten der von Benutzern gekauften Produkte, die von Kafka oder FileSystem stammen können. Artikelpreisereignisse enthalten Daten zu Produktpreisänderungen. Jedes Mal, wenn sich der Preis eines Artikels ändert, wird in Artikelpreisereignissen eine Datenzeile generiert, einschließlich der Artikel-ID und des neuesten Artikelpreises. Wir hoffen, dass wir für alle Beispieldaten eines Benutzers, der ein Produkt kauft, den Gesamtverbrauch des Benutzers in den letzten zwei Minuten, in denen das Verhalten auftrat, berechnen und ihn als Funktion nutzen können, um abzuleiten, ob der Benutzer ein bestimmtes Produkt kaufen wird . Um diese Funktion zu generieren, können Sie die in der Abbildung oben beschriebene Berechnungslogik verwenden, um zunächst die Preisfunktion in Artikelpreisereignissen mit Kaufereignissen zu verbinden, indem Sie item_id als Join_key verwenden. Dann aggregieren Sie basierend auf dem Zeitfenster und verwenden user_id als group_by _keys, um den Gesamtverbrauch jedes Benutzers in den letzten zwei Minuten zu berechnen.

3. Beispielcode

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriertDer obige Codeausschnitt zeigt die Schritte, die für eine Beispiel-FeatHub-Anwendung ausgeführt werden müssen.

① Zuerst muss der Benutzer einen FeatHubClient erstellen und den Prozessortyp festlegen. Wenn es sich um ein lokales Experiment handelt, kann es auf „Lokal“ eingestellt werden. Wenn es sich um eine verteilte Remote-Produktionsbereitstellung handelt, kann es auf „Flink“ eingestellt werden.

② Benutzer müssen eine Quelle erstellen, um Daten zu lesen. Sie können beispielsweise FileSystemSource verwenden, um Daten in einem Offline-Speichersystem zu lesen, oder KafkaSource, um Echtzeitdaten in einem Nearline-Speichersystem zu lesen. In FileSystemSource können Benutzer Informationen wie Datenformat, Schema, Dateispeicherort usw. angeben. Es ist erwähnenswert, dass Benutzer time_stamp_field und time_stamp_format angeben können, um die Spalte darzustellen, die die Zeit in der Datenquellentabelle darstellt, bzw. das entsprechende Analyseformat. FeatHub verwendet diese Informationen, um zeitpunktkorrekte Feature-Berechnungen durchzuführen und so Feature-Crossing-Probleme zu vermeiden.

③ Benutzer können eine FeatureView erstellen, um die Logik des Feature-Spleißens und der Feature-Aggregation auszudrücken. Wenn Sie eine Verbindung herstellen möchten, kann der Benutzer item_price_events.price verwenden, um die Funktionen auszudrücken, die Sie verbinden möchten. FeatHub findet die Tabelle mit dem Namen item_price_events und ruft daraus die Funktion mit dem Namen „price“ ab. Benutzer können OverWindowTransform auch verwenden, um die Over-Window-Aggregation abzuschließen und ein Merkmal mit dem Namen total_ payment_last_two_minutes zu definieren. Dabei bedeutet window_size=2 Minuten, dass der angegebene Ausdruck und die Aggregatfunktion angewendet werden, um Features für Daten innerhalb von zwei Minuten zu berechnen.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

④ Wenn der Benutzer für die definierte FeatureView lokal entwickeln und experimentieren und die scikit-learn-Algorithmusbibliothek für das Training auf einem einzelnen Computer verwenden möchte, kann die to_pandas()-API verwendet werden, um die Daten zu erhalten einzelne Maschine im Pandas DataFrame-Format im Speicher.

⑤ Wenn Benutzer die Produktionsbereitstellung von Funktionen abschließen müssen, können sie FileSystemSink verwenden, um einen Offline-Funktionsspeicher zum Speichern von Daten anzugeben. Rufen Sie dannexecute_insert() auf, um die Features an die angegebene Senke auszugeben.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

Der Grundwert von FeatHub besteht darin, ein SDK bereitzustellen, um Benutzern die Entwicklung von Features zu erleichtern, und eine Ausführungs-Engine zum Berechnen von Features. Darüber hinaus bietet FeatHub auch eine Leistungsoptimierung der Ausführungs-Engine, sodass Benutzer während der Feature-Bereitstellungsphase weitere Vorteile erzielen können. Wenn Sie beispielsweise für Features, die auf der Sliding-Window-Aggregation basieren, derzeit die native Flink-API zur Berechnung verwenden, gibt Flink bei jeder Sliding-Step_Size den entsprechenden Feature-Wert aus, unabhängig davon, ob sich der Feature-Wert geändert hat. Für ein Schiebefenster mit window_size=1 Stunde und step_size=1 Sekunde gibt Flink in den meisten Fällen möglicherweise denselben Feature-Wert aus. Dadurch werden Netzwerkverkehr, Downstream-Speicher und andere Ressourcen verschwendet. FeatHub unterstützt Benutzer bei der Konfiguration des Verhaltens des Schiebefensters, sodass das Schiebefenster Features nur dann ausgeben kann, wenn sich der Feature-Wert ändert, um die Ressourcennutzung des Feature-Berechnungsauftrags zu optimieren.

Darüber hinaus wird FeatHub die Speicher- und CPU-Auslastung von Schiebefenstern weiter optimieren. In einigen Szenarien werden sich Benutzer mit vielen ähnlichen Schiebefensterfunktionen zufrieden geben. Diese Funktionen unterscheiden sich nur in der Fenstergröße. Beispielsweise möchten wir möglicherweise den Gesamtbetrag ermitteln, den jeder Benutzer in den letzten 1 Minute, 5 Minuten und 10 Minuten für Einkäufe ausgegeben hat. Wenn die native Flink-API zur Berechnung verwendet wird, kann der Job drei Aggregationsoperatoren verwenden, um diese drei Funktionen jeweils zu berechnen. Jeder Aggregationsoperator verfügt über einen separaten Speicherplatz. Da sich die von diesen Operatoren verarbeiteten Daten und Berechnungslogik stark überschneiden, kann FeatHub einen benutzerdefinierten Operator verwenden, um die Berechnung dieser Funktionen einheitlich abzuschließen und so das Ziel der Einsparung von Speicher- und CPU-Ressourcen zu erreichen.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

FeatHub ist derzeit Open Source auf GitHub und kann einige grundlegende LocalProcessor- und FlinkProcessor-Funktionen unterstützen. Wir werden die Kernfunktionen von FeatHub weiter verbessern, um die Entwicklung und Implementierung von User Feature Engineering zu erleichtern. Dazu gehören die Unterstützung häufiger verwendeter Offline- und Online-Speicher, das Andocken an Notebook, die Bereitstellung einer Web-Benutzeroberfläche zur Visualisierung von Feature-Metadaten, die Unterstützung von Benutzern bei der Registrierung, Suche und Wiederverwendung von Features sowie die Unterstützung der Verwendung von Spark als Ausführungs-Engine von FeatHub.

Konstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert

FeatHub-Codebasis: ​https://github.com/alibaba/FeatHub​

FeatHub-Codebeispiele: ​https://github.com/flink-extended/FeatHub-examples​

Die FeatHub-Codebasis befindet sich derzeit im Verzeichnis github/alibaba. Um es allen einfacher zu machen, die Verwendung von FeatHub zu erlernen und schnell Codeausschnitte zu finden und darauf zu verweisen, die den Anforderungen der erforderlichen Szenarien entsprechen, stellen wir in der Codebibliothek flink-extended/feathub-examples zusätzliche Codebeispiele zur Verfügung, die Sie nutzen können frei nutzen und ausprobieren. Jeder ist willkommen, Feedback zu geben und PRs beizutragen.

4. Frage-und-Antwort-Runde

F1: Wird beim Point_in_Time-Join eine Feature-Kreuzung durch eine Daten-Out-of-Order-Verzögerung oder durch manuelles Schreiben des Joins verursacht?

A1: Selbst wenn die Daten nicht in Ordnung sind, kann es grundsätzlich zu einer Fehlordnung kommen, wenn das Zeitstempelfeld beim Beitritt nicht berücksichtigt wird. In tatsächlichen Szenarien sind die Quelldaten möglicherweise auch nicht in der richtigen Reihenfolge. Zu diesem Zeitpunkt können Sie eine Wasserzeichenstrategie ähnlich der in Flink verwenden, um auf verspätet eintreffende Daten zu warten und die Auswirkungen von Daten außerhalb der Reihenfolge zu reduzieren. Darüber hinaus können wir reguläre Offline-Jobs verwenden, um Online-Feature-Daten aufzufüllen und so die Auswirkungen von Datenstörungen weiter zu reduzieren.

F2: Wie generiert man nach dem Start von FeatHub frühere Trainingsdaten und die entsprechenden Funktionen? Unterstützt FeatHub die Wiedergabe historischer Daten?

A2: Die FeatHub-API kann die Wiedergabe unterstützen, aber dieser Teil der Funktion wurde noch nicht produktionsverifiziert. FeatHub unterstützt die Verwendung von Flink und Spark als Ausführungs-Engines, sodass die Rechenfunktionen von Flink und Spark wiederverwendet werden können, um die Wiedergabe historischer Daten abzuschließen. Beispielsweise können wir einen Spark-Job starten, die Quelle so einstellen, dass alle Daten auf HDFS im letzten Monat verarbeitet werden, die definierte Feature-Splicing- und Aggregationslogik ausführen und dann die berechneten Features ausgeben.

Q3. FeatHub ist nur für die Offline-Funktionsberechnung verantwortlich. Wie werden einige Online-Funktionen verarbeitet?

A3: Die Feature-Berechnung ist in Offline, Nearline und Online unterteilt ist eine Nearline-Ausführungs-Engine, die Features wie die Anzahl der Benutzerklicks in den letzten 5 Minuten in Echtzeit berechnen kann Unterstützung für Offline-Berechnungen. Daher kann FeatHub Offline- und Nearline-Feature-Berechnungen unterstützen. FeatHub plant, in Zukunft die Online-Feature-Berechnung zu unterstützen und dabei eine auf Feature Service basierende Architektur zu verwenden, um die von OnDemandFeatureView ausgedrückten Features zu berechnen.

F4: FeatHub bietet Dienste in Alibaba Cloud an. Welche aktuellen vor- und nachgelagerten ökologischen Unterstützungen wie ODPS usw. gibt es?

A4: FeatHub unterstützt alle von Flink unterstützten Quellen/Senken, einschließlich ODPS, Holo und andere von Alibaba Cloud bereitgestellte Dienste. Derzeit unterstützt FeatHub nur Kafka und FileSystem. Wir werden nach und nach mehr Speicherunterstützung hinzufügen.

Das obige ist der detaillierte Inhalt vonKonstruktionspraxis einer Echtzeit-Feature-Engineering-Plattform, die Streaming und Batching integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen