Erstellen von Pipelines für maschinelles Lernen mit Snowflake und Dask
In diesem Beitrag möchte ich einige der Tools vorstellen, die ich kürzlich ausprobiert habe, und Ihnen zeigen, wie ich sie verwende und wie sie dazu beigetragen haben, die Effizienz meines Arbeitsablaufs zu verbessern. Die beiden, über die ich insbesondere sprechen werde, sind Snowflake und Dask. Zwei sehr unterschiedliche Tools, die sich aber insbesondere im Rahmen des ML-Lebenszyklus gut ergänzen.
By Daniel Foley, Datenwissenschaftler
Einleitung
In letzter Zeit habe ich versucht, bessere Möglichkeiten zu finden, meinen Arbeitsablauf als Datenwissenschaftler zu verbessern. Ich verbringe in meinem Job tendenziell einen beträchtlichen Teil meiner Zeit damit, ETLs zu modellieren und zu erstellen. Dies hat dazu geführt, dass ich immer mehr auf Tools angewiesen bin, um große Datenmengen zuverlässig und effizient verarbeiten zu können. Mir wurde schnell klar, dass die Verwendung von Pandas zur Manipulation dieser Datensätze nicht immer ein guter Ansatz ist, und dies veranlasste mich, nach anderen Alternativen zu suchen.
In diesem Beitrag möchte ich einige der Tools vorstellen, die ich kürzlich ausprobiert habe, und Ihnen zeigen, wie ich sie verwende und wie sie dazu beigetragen haben, die Effizienz meines Arbeitsablaufs zu verbessern. Die beiden, über die ich insbesondere sprechen werde, sind Snowflake und Dask. Zwei sehr unterschiedliche Tools, die sich aber insbesondere im Rahmen des ML-Lebenszyklus gut ergänzen. Ich hoffe, dass Sie nach der Lektüre dieses Beitrags ein gutes Verständnis dafür haben, was Snowflake und Dask sind, wie sie effektiv genutzt werden können und in der Lage sind, Ihre eigenen Anwendungsfälle umzusetzen.
Genauer gesagt möchte ich Ihnen zeigen, wie Sie mit Snowflake und Python eine ETL-Pipeline erstellen können, um Trainingsdaten für eine maschinelle Lernaufgabe zu generieren. Dann möchte ich Dask und vorstellen Saturnwolke und zeigen Ihnen, wie Sie die parallele Verarbeitung in der Cloud nutzen können, um den ML-Schulungsprozess wirklich zu beschleunigen und so Ihre Produktivität als Datenwissenschaftler zu steigern.
Erstellen von ETLs in Snowflake und Python
Bevor wir uns mit dem Codieren befassen, erkläre ich besser kurz, was Snowflake ist. Dies ist eine Frage, die ich mir kürzlich gestellt habe, als mein Team beschloss, damit zu beginnen. Auf hoher Ebene handelt es sich um ein Data Warehouse in der Cloud. Nachdem ich eine Weile damit herumgespielt hatte, wurde mir klar, wie mächtig es war. Ich glaube, dass eines der nützlichsten Features für mich die virtuellen Lager sind, die man nutzen kann. Ein virtuelles Warehouse bietet Ihnen Zugriff auf dieselben Daten, ist jedoch völlig unabhängig von anderen virtuellen Warehouses, sodass Rechenressourcen nicht von mehreren Teams gemeinsam genutzt werden. Dies hat sich als sehr nützlich erwiesen, da dadurch mögliche Leistungsprobleme beseitigt werden, die dadurch verursacht werden, dass andere Benutzer im Laufe des Tages Abfragen ausführen. Dies hat zu weniger Frustration und Zeitverschwendung beim Warten auf die Ausführung von Abfragen geführt.
Da wir Snowflake verwenden werden, werde ich kurz erläutern, wie Sie es einrichten und selbst damit experimentieren können. Wir müssen Folgendes tun:
- Richten Sie ein Snowflake-Konto ein
- Holen Sie sich unsere Daten in Snowflake
- Schreiben und testen Sie unsere Abfragen mit SQL und der Snowflake-Benutzeroberfläche
- Schreiben Sie eine Python-Klasse, die unsere Abfragen ausführen kann, um unseren endgültigen Datensatz für die Modellierung zu generieren
Das Einrichten eines Kontos ist so einfach wie die Anmeldung für eine kostenlose Testversion Website . Sobald Sie dies getan haben, können Sie die SnowSQL-CLI herunterladen hier. Dies erleichtert das Hinzufügen von Daten zu Snowflake. Nachdem wir diese Schritte ausgeführt haben, können wir versuchen, mithilfe unserer Anmeldeinformationen und der Befehlszeile eine Verbindung zu Snowflake herzustellen.
snowsql -a <account_name> -u <user_name>
Sie finden Ihren Kontonamen in der URL, wenn Sie sich bei der Snowflake-Benutzeroberfläche anmelden. Es sollte etwa so aussehen: xxxxx.europe-west2.gcp. Ok, fahren wir mit dem nächsten Schritt fort und übertragen unsere Daten in Snowflake. Es gibt ein paar Schritte, die wir hier befolgen müssen, nämlich:
- Erstellen Sie unser virtuelles Lager
- Erstellen Sie eine Datenbank
- Definieren und erstellen Sie unsere Tabellen
- Erstellen Sie eine Staging-Tabelle für unsere CSV-Dateien
- Kopieren der Daten in unsere Tabellen
Glücklicherweise ist dies nicht allzu schwierig und wir können dies vollständig mit der Snowsql-CLI tun. Für dieses Projekt werde ich einen kleineren Datensatz verwenden, als ich möchte, aber leider kann ich keine Daten meines Unternehmens verwenden und es kann ziemlich schwierig sein, große geeignete Datensätze online zu finden. Ich habe jedoch einige Transaktionsdaten von Dunnhumby gefunden, die auf frei verfügbar sind Kaggle. Nur aus Spaß erstelle ich mit diesen Daten einen viel größeren synthetischen Datensatz, um zu testen, wie gut Dask die Herausforderung im Vergleich zu sklearn bewältigt.
Zunächst müssen wir mit den folgenden Befehlen in der Snowflake-Benutzeroberfläche ein virtuelles Warehouse und eine Datenbank einrichten.
erstellen or ersetzen Lageranalytik_wh mit
Warehouse_size=“X-SMALL“
auto_suspend=180
auto_resume=true
initial_suspended=true;
erstellen or ersetzen Datenbank dunnhumby;
Unsere Daten bestehen aus 6 CSVs, die wir in 6 Tabellen umwandeln. Ich werde nicht zu viel Zeit damit verbringen, den Datensatz durchzugehen, da es in diesem Beitrag mehr um die Verwendung von Snowflake und Dask als um die Interpretation von Daten geht.
Nachfolgend finden Sie die Befehle, mit denen wir unsere Tabellen erstellen können. Alles, was Sie im Voraus wissen müssen, ist, mit welchen Spalten und Datentypen Sie arbeiten werden.
create or replace table campaign_desc ( description string, campaign number,
start_day number,
end_day number ); create or replace table campaign_table ( description string, Household_key number, campaign number ); create or replace table coupon ( COUPON_UPC number, product_id number, campaign number ); create or replace table coupon_redempt ( household_key number, day number, coupon_upc number, campaign number ); create or replace table transactions ( household_key number, BASKET_ID number, day number, product_id number, quantity number, sales_value number, store_id number, retail_disc decimal, trans_time number, week_no number, coupon_disc decimal, coupon_match_disc decimal ); create or replace table demographic_data ( age_dec string, marital_status_code string, income_desc string, homeowner_desc string, hh_comp_desc string, household_size_desc string, kid_category_desc string, Household_key number);
Nachdem wir nun unsere Tabellen erstellt haben, können wir darüber nachdenken, wie wir Daten in sie integrieren. Dazu müssen wir unsere CSV-Dateien bereitstellen. Dies ist im Grunde nur ein Zwischenschritt, damit Snowflake die Dateien direkt von unserer Bühne in unsere Tabellen laden kann. Wir können das nutzen SETZEN Befehl zum Einfügen lokaler Dateien in unsere Bühne und dann die KOPIEREN IN Befehl, um Snowflake anzuweisen, wo diese Daten abgelegt werden sollen.
use database dunnhumby; create or replace stage dunnhumby_stage; PUT file://campaigns_table.csv @dunnhumby.public.dunnhumby_stage; PUT file://campaigns_desc.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon_d=redempt.csv @dunnhumby.public.dunnhumby_stage; PUT file://transaction_data.csv @dunnhumby.public.dunnhumby_stage; PUT file://demographics.csv @dunnhumby.public.dunnhumby_stage;
Zur schnellen Überprüfung können Sie diesen Befehl ausführen, um zu überprüfen, was sich im Staging-Bereich befindet.
ls @dunnhumby.public.dunnhumby_stage;
Jetzt müssen wir nur noch die Daten mithilfe der folgenden Abfragen in unsere Tabellen kopieren. Sie können diese entweder in der Snowflake-Benutzeroberfläche oder in der Befehlszeile ausführen, nachdem Sie sich bei Snowflake angemeldet haben.
copy into campaign_table from @dunnhumby.public.dunnhumby_stage/campaigns_table.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into campaign_desc from @dunnhumby.public.dunnhumby_stage/campaign_desc.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon from @dunnhumby.public.dunnhumby_stage/coupon.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon_redempt from @dunnhumby.public.dunnhumby_stage/coupon_redempt.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into transactions from @dunnhumby.public.dunnhumby_stage/transaction_data.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into demographic_data from @dunnhumby.public.dunnhumby_stage/demographics.csv.gz file_format = ( type = csv skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’);
Ok, großartig, mit etwas Glück haben wir unsere Daten beim ersten Versuch in unseren Tabellen. Oh, wenn es nur so einfach wäre, dieser ganze Prozess hat mich ein paar Anläufe gekostet, bis ich alles richtig gemacht habe (achten Sie auf die falsche Schreibweise). Hoffentlich können Sie dem folgen und können loslegen. Wir kommen den interessanten Dingen immer näher, aber die oben genannten Schritte sind ein wichtiger Teil des Prozesses. Stellen Sie daher sicher, dass Sie jeden dieser Schritte verstehen.
Schreiben unserer Pipeline in SQL
In diesem nächsten Schritt werden wir die Abfragen schreiben, um unser Ziel und unsere Funktionen zu generieren und schließlich einen Trainingsdatensatz zu erstellen. Ein Ansatz zum Erstellen eines Datensatzes für die Modellierung besteht darin, diese Daten in den Speicher einzulesen und mithilfe von Pandas neue Features zu erstellen und alle Datenrahmen miteinander zu verbinden. Dies ist normalerweise der Ansatz, den Sie bei Kaggle und in anderen Online-Tutorials sehen. Das Problem dabei ist, dass es nicht sehr effizient ist, insbesondere wenn Sie mit Datensätzen angemessener Größe arbeiten. Aus diesem Grund ist es eine viel bessere Idee, die schwere Arbeit an etwas wie Snowflake auszulagern, das riesige Datenmengen hervorragend verarbeiten kann und Ihnen wahrscheinlich eine Menge Zeit sparen wird. Ich werde hier nicht viel Zeit damit verbringen, mich mit den Einzelheiten unseres Datensatzes zu befassen, da er für das, was ich zeigen möchte, nicht wirklich wichtig ist. Im Allgemeinen sollten Sie jedoch viel Zeit damit verbringen, Ihre Daten zu untersuchen und zu verstehen, bevor Sie mit der Modellierung beginnen. Das Ziel dieser Abfragen besteht darin, die Daten vorzuverarbeiten und einige einfache Funktionen zu erstellen, die wir später in unseren Modellen verwenden können.
Zieldefinition
Offensichtlich ist ein wesentlicher Bestandteil des überwachten maschinellen Lernens die Definition eines geeigneten Ziels für die Vorhersage. Für unseren Anwendungsfall werden wir die Abwanderung vorhersagen, indem wir berechnen, ob ein Benutzer innerhalb von zwei Wochen nach einer Cutoff-Woche einen weiteren Besuch durchführt oder nicht. Die Wahl von 2 Wochen ist ziemlich willkürlich und hängt von dem spezifischen Problem ab, das wir zu lösen versuchen, aber gehen wir einfach davon aus, dass es für dieses Projekt in Ordnung ist. Im Allgemeinen möchten Sie Ihre Kunden sorgfältig analysieren, um die Verteilung der Lücken zwischen Besuchen zu verstehen und zu einer geeigneten Definition der Abwanderung zu gelangen.
Die Hauptidee hierbei ist, dass wir für jede Tabelle eine Zeile pro Household_Key haben möchten, die Werte für jedes unserer Features enthält.
Kampagnenfunktionen
Transaktionsfunktionen
Im Folgenden erstellen wir einige einfache Metriken basierend auf aggregierten Statistiken wie dem Durchschnitt, dem Maximum und der Standardabweichung.
Demografische Merkmale
In diesem Datensatz fehlen viele Daten, daher habe ich mich entschieden, hier die Imputation zu verwenden. Es gibt viele Techniken für fehlende Daten, von der Löschung fehlender Daten bis hin zu fortgeschrittenen Imputationsmethoden. Ich habe es mir hier gerade einfach gemacht und fehlende Werte durch den Modus ersetzt. Ich würde diesen Ansatz nicht unbedingt allgemein empfehlen, da es wirklich wichtig ist, zu verstehen, warum diese Daten fehlen, um zu entscheiden, wie damit umgegangen werden soll. Für dieses Beispiel werde ich jedoch den einfachen Ansatz wählen. Wir berechnen zunächst den Modus für jedes unserer Features und ersetzen dann mithilfe von „coalesce“ jede Zeile durch den Modus, wenn Daten fehlen.
Trainingsdaten
Schließlich erstellen wir eine Abfrage für unsere Trainingsdaten, indem wir unsere Haupttabellen zusammenfügen. Am Ende erhalten wir eine Tabelle mit unserem Ziel, unserer Kampagne, Transaktionen und demografischen Merkmalen, die wir zum Erstellen eines Modells verwenden können.
Kurz nebenbei: Für diejenigen, die mehr über die Funktionen und Nuancen von Snowflake erfahren möchten, würde ich das folgende Buch empfehlen: Schneeflocken-Kochbuch. Ich habe mit der Lektüre dieses Buchs begonnen und es enthält viele wirklich hilfreiche Informationen zur Verwendung von Snowflake und geht viel detaillierter darauf ein, als ich es hier tue.
Python-Code für ETL
Der letzte Teil, den wir für diese ETL benötigen, ist das Schreiben eines Skripts, um sie auszuführen. Dies ist zwar nur dann wirklich erforderlich, wenn Sie vorhaben, eine ETL wie diese regelmäßig auszuführen, aber dies ist eine bewährte Vorgehensweise und macht es viel einfacher, die ETL bei Bedarf auszuführen.
Lassen Sie uns kurz die Hauptkomponenten unseres EtlTraining-Kurses besprechen. Unsere Klasse benötigt eine Eingabe, nämlich die Cutoff-Woche. Dies liegt an der Art und Weise, wie Daten in unserem Datensatz definiert sind. Normalerweise handelt es sich jedoch um ein Datumsformat, das dem Stichtag entspricht, den wir für die Generierung von Trainingsdaten auswählen möchten.
Wir initialisieren eine Liste unserer Abfragen, damit wir diese einfach durchlaufen und ausführen können. Wir erstellen außerdem ein Wörterbuch mit unseren Parametern, die wir an unsere Snowflake-Verbindung übergeben. Hier verwenden wir Umgebungsvariablen, die wir in Saturn Cloud eingerichtet haben. Hier ist eine Anleitung dazu. Es ist nicht allzu schwierig, eine Verbindung zu Snowflake herzustellen. Wir müssen lediglich den Snowflake-Connector verwenden und unser Wörterbuch mit Anmeldeinformationen übergeben. Wir implementieren dies in der Snowflake-Verbindungsmethode und geben diese Verbindung als Attribut zurück.
Um die Ausführung dieser Abfragen ein wenig zu vereinfachen, speichere ich jede Abfrage als Python-String-Variable in der Datei ml_query_pipeline.py. Die Methodeexecute_etl macht genau das, was sie verspricht. Wir durchlaufen jede Abfrage, formatieren sie, führen sie aus und schließen zum Abschluss die Snowflake-Verbindung.
Um diese ETL auszuführen, können wir einfach die folgenden Befehle in das Terminal eingeben. (wobei ml_pipeline der Name des obigen Skripts ist.)
python -m ml_pipeline -w 102 -j ‘train’
Kurz gesagt, Sie möchten wahrscheinlich in regelmäßigen Abständen eine solche ETL ausführen. Wenn Sie beispielsweise tägliche Vorhersagen treffen möchten, müssen Sie jeden Tag einen solchen Datensatz generieren, um ihn an Ihr Modell weiterzugeben, damit Sie ermitteln können, welche Ihrer Kunden wahrscheinlich abwandern. Ich werde hier nicht im Detail darauf eingehen, aber in meinem Job verwenden wir Airflow, um unsere ETLs zu orchestrieren, daher würde ich Ihnen empfehlen, es sich bei Interesse anzusehen. Tatsächlich habe ich kürzlich ein Buch gekauft.Datenpipelines mit Apache Airflow', was ich großartig finde und wirklich einige solide Beispiele und Ratschläge zur Verwendung des Luftstroms gibt.
Dask und Modellieren
Nachdem wir nun unsere Datenpipeline aufgebaut haben, können wir beginnen, über die Modellierung nachzudenken. Das andere Hauptziel dieses Beitrags besteht darin, die Vorteile der Verwendung von Dask als Teil des ML-Entwicklungsprozesses hervorzuheben und Ihnen zu zeigen, wie einfach die Verwendung ist.
Für diesen Teil des Projekts habe ich auch verwendet Saturnwolke Das ist ein wirklich nettes Tool, auf das ich kürzlich gestoßen bin und das es uns ermöglicht, die Leistung von Dask auf einem Cluster von Computern in der Cloud zu nutzen. Die Hauptvorteile der Nutzung von Saturn bestehen für mich darin, dass es wirklich einfach ist, Ihre Arbeit zu teilen, dass Sie Ihre Rechenleistung ganz einfach nach Bedarf skalieren können und dass es eine kostenlose Kontingentoption gibt. Die Modellentwicklung im Allgemeinen ist ein wirklich guter Anwendungsfall für Dask, da wir normalerweise eine Reihe verschiedener Modelle trainieren und sehen möchten, was am besten funktioniert. Je schneller wir dies tun können, desto besser, da wir mehr Zeit haben, uns auf andere wichtige Aspekte der Modellentwicklung zu konzentrieren. Ähnlich wie bei Snowflake müssen Sie sich nur anmelden hier und Sie können sehr schnell eine Instanz von Jupyter Lab starten und selbst damit experimentieren.
Jetzt wird mir klar, dass ich Dask ein paar Mal erwähnt habe, aber nie wirklich erklärt habe, was es ist. Lassen Sie mich mir einen Moment Zeit nehmen, um Ihnen einen umfassenden Überblick über Dask zu geben und zu erklären, warum ich es großartig finde. Ganz einfach gesagt ist Dask eine Python-Bibliothek, die paralleles Rechnen nutzt, um Ihnen die Verarbeitung und Durchführung von Operationen an sehr großen Datensätzen zu ermöglichen. Und das Beste daran ist: Wenn Sie bereits mit Python vertraut sind, sollte Dask sehr einfach sein, da die Syntax sehr ähnlich ist.
Die folgende Grafik zeigt die Hauptkomponenten von Dask.
Quelle: Dask-Dokumentation
Mithilfe von Sammlungen können wir ein Diagramm von Aufgaben erstellen, das dann auf mehreren Computern ausgeführt werden kann. Einige dieser Datenstrukturen kommen Ihnen wahrscheinlich ziemlich bekannt vor, wie etwa Arrays und Datenrahmen, und sie ähneln denen, die Sie in Python finden würden, weisen jedoch einige wichtige Unterschiede auf. Beispielsweise können Sie sich einen Dask-Datenrahmen als eine Reihe von Pandas-Datenrahmen vorstellen, die so aufgebaut sind, dass wir Vorgänge parallel ausführen können.
Als Nächstes von den Sammlungen haben wir den Planer. Sobald wir das Aufgabendiagramm erstellt haben, erledigt der Planer den Rest für uns. Es verwaltet den Workflow und sendet diese Aufgaben entweder an einen einzelnen Computer oder verteilt sie über einen Cluster. Hoffentlich gibt Ihnen das einen sehr kurzen Überblick über die Funktionsweise von Dask. Für weitere Informationen empfehle ich einen Blick auf die Dokumentation oder so buchen. Beides sind sehr gute Ressourcen, um tiefer in dieses Thema einzusteigen.
Python-Code zur Modellierung
Bei der Modellierung verfüge ich meist über eine kleine Anzahl von Go-to-Algorithmen, die ich immer zuerst ausprobiere. Dies gibt mir im Allgemeinen eine gute Vorstellung davon, was für mein spezifisches Problem geeignet sein könnte. Diese Modelle sind Logistische Regression, Random Forest und GradientBoosting. Meiner Erfahrung nach liefern diese Algorithmen bei der Arbeit mit tabellarischen Daten normalerweise ziemlich gute Ergebnisse. Im Folgenden erstellen wir mithilfe dieser drei Modelle eine Sklearn-Modellierungspipeline. Die genauen Modelle, die wir hier verwenden, sind nicht wirklich wichtig, da die Pipeline für jedes Sklearn-Klassifizierungsmodell funktionieren sollte. Dies ist nur meine Präferenz.
Lassen Sie uns ohne weitere Umschweife in den Code eintauchen. Glücklicherweise haben wir den Großteil unserer Vorverarbeitung an Snowflake ausgelagert, sodass wir hier nicht zu viel mit unseren Trainingsdaten herumspielen müssen, aber wir werden mithilfe von Sklearn-Pipelines ein paar zusätzliche Schritte hinzufügen.
Der erste Codeausschnitt unten zeigt die Pipeline bei Verwendung von sklearn. Beachten Sie, dass es sich bei unserem Datensatz um einen einfachen alten Pandas-Datenrahmen handelt und unsere Vorverarbeitungsschritte alle mit Sklearn-Methoden ausgeführt werden. Hier passiert nichts besonders Außergewöhnliches. Wir lesen unsere Daten aus der von unserem Snowflake ETL erstellten Tabelle ein und übergeben diese an eine Sklearn-Pipeline. Dabei gelten die üblichen Modellierungsschritte. Wir teilen den Datensatz in „Trainieren“ und „Testen“ auf und führen eine Vorverarbeitung durch, nämlich die Imputation fehlender Werte mithilfe des Medians, die Skalierung der Daten und die One-Hot-Codierung unserer kategorialen Daten. Ich bin ein großer Fan von Sklearn-Pipelines und verwende sie grundsätzlich immer dann, wenn ich heutzutage Modelle entwickle. Sie erleichtern wirklich sauberen und prägnanten Code.
Wie funktioniert diese Pipeline bei einem Datensatz mit etwa 2 Millionen Zeilen? Nun, die Ausführung dieses Modells ohne Hyperparameter-Tuning dauert etwa 34 Minuten. Autsch, irgendwie langsam. Sie können sich vorstellen, wie unerschwinglich lange dies dauern würde, wenn wir irgendeine Art von Hyperparameter-Optimierung durchführen wollten. Ok, also nicht ideal, aber mal sehen, wie Dask mit der Herausforderung umgeht.
Dask ML Python-Code
Unser Ziel hier ist es, zu sehen, ob wir die oben genannte Sklearn-Pipeline schlagen können, Spoiler-Alarm, das können wir auf jeden Fall. Das Coole an Dask ist, dass die Einstiegshürde ziemlich niedrig ist, wenn man bereits mit Python vertraut ist. Wir können diese Pipeline mit nur wenigen Änderungen in Dask zum Laufen bringen.
Die erste Änderung, die Ihnen wahrscheinlich auffallen wird, ist, dass wir einige unterschiedliche Importe haben. Einer der Hauptunterschiede zwischen dieser Pipeline und der vorherigen besteht darin, dass wir zum Trainieren unseres Modells einen Dask-Datenrahmen anstelle eines Pandas-Datenrahmens verwenden. Sie können sich einen Dask-Datenrahmen als eine Reihe von Pandas-Datenrahmen vorstellen, in denen wir für jeden einzelnen gleichzeitig Berechnungen durchführen können. Dies ist der Kern der Parallelität von Dask und wird die Trainingszeit für diese Pipeline verkürzen.
Beachten Sie, dass wir verwenden @dask.delayed als Dekorateur bei uns Load_training_data Funktion. Dies weist Dask an, diese Funktion für uns zu parallelisieren.
Wir werden auch einige Vorverarbeitungs- und Pipeline-Methoden von Dask importieren und vor allem müssen wir SaturnCluster importieren, was es uns ermöglicht, einen Cluster zum Training unserer Modelle zu erstellen. Ein weiterer wesentlicher Unterschied zu diesem Code besteht darin, dass wir ihn verwenden dask.persist nach der Trennung unseres Zugtests. Bis zu diesem Zeitpunkt wurde aufgrund der verzögerten Auswertung durch Dask keine unserer Funktionen tatsächlich berechnet. Sobald wir jedoch die Persist-Methode verwenden, weisen wir Dask an, unsere Daten an die Worker zu senden, die Aufgaben auszuführen, die wir bis zu diesem Punkt erstellt haben, und diese Objekte im Cluster zu belassen.
Abschließend trainieren wir unsere Modelle mit der verzögerten Methode. Auch dies ermöglicht es uns, unsere Pipeline auf verzögerte Weise zu erstellen. Die Pipeline wird erst ausgeführt, wenn wir diesen Code erreichen:
fit_pipelines = dask.compute(*pipelines_)
Dieses Mal haben wir nur etwa 10 Minuten gebraucht, um diese Pipeline mit genau demselben Datensatz auszuführen. Das ist eine Beschleunigung um den Faktor 3.4, nicht allzu schlecht. Wenn wir wollten, könnten wir dies jetzt noch beschleunigen, indem wir unsere Rechenressourcen auf Knopfdruck in Saturn erhöhen.
Bereitstellung unserer Pipeline
Ich habe bereits erwähnt, dass Sie eine solche Pipeline wahrscheinlich regelmäßig mit etwas wie Luftstrom betreiben möchten. Es ist einfach so, dass Saturn Cloud mit Jobs eine einfache Alternative bietet, wenn Sie sich den anfänglichen Aufwand ersparen möchten, alles für den Luftstrom einzurichten. Mithilfe von Jobs können wir unseren Code verpacken und ihn in regelmäßigen Abständen oder nach Bedarf ausführen. Sie müssen lediglich zu einem vorhandenen Projekt gehen und auf „Auftrag erstellen“ klicken. Sobald wir das getan haben, sollte es wie folgt aussehen:
Quelle: Saturn
Von hier aus müssen wir nur noch sicherstellen, dass sich unsere oben genannten Python-Dateien im Verzeichnis im Bild befinden, und wir können oben unseren Python-Befehl eingeben
python -m ml_pipeline -w 102 -j 'train'
Wenn wir möchten, können wir auch mithilfe der Cron-Syntax einen Zeitplan erstellen, um die ETL täglich auszuführen. Für Interessierte gibt es hier eine Dein Thema das geht bis ins Detail.
Schlussfolgerungen und Takeaways
Nun, an diesem Punkt sind wir am Ende unseres Projekts angelangt. Natürlich habe ich einige wichtige Teile des ML-Entwicklungszyklus ausgelassen, wie z. B. die Optimierung der Hyperparameter und die Bereitstellung unseres Modells, aber vielleicht werde ich das für einen anderen Tag aufheben. Glaube ich, dass Sie Dask ausprobieren sollten? Ich bin keineswegs ein Experte, aber nach dem, was ich bisher gesehen habe, scheint es auf jeden Fall sehr nützlich zu sein, und ich freue mich riesig darauf, mehr damit zu experimentieren und mehr Möglichkeiten zu finden, es in meine tägliche Arbeit als Datenwissenschaftler zu integrieren. Hoffentlich fanden Sie dies hilfreich und können auch einige der Vorteile von Snowflake und Dask erkennen und beginnen, selbst damit zu experimentieren.
Downloads
- Datenpipelines mit Apache Airflow
- Schneeflocken-Kochbuch
- Data Science im Maßstab mit Python und Dask
- Coursera: SQL für Data Science
Einige meiner anderen Beiträge könnten für Sie interessant sein
Lassen Sie uns eine Streaming-Datenpipeline erstellen
Gaußsche Mischungsmodellierung (GMM)
Ein Bayes'scher Ansatz zur Zeitreihenvorhersage
Hinweis: Einige der Links in diesem Beitrag sind Affiliate-Links.
Bio: Daniel Foley ist ein ehemaliger Wirtschaftswissenschaftler, der heute Datenwissenschaftler ist und in der Mobile-Gaming-Branche tätig ist.
Original. Mit Genehmigung erneut veröffentlicht.
Related:
Quelle: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- Zugang
- Konto
- Zusätzliche
- Vorteil
- Beratung
- Affiliate
- Algorithmen
- Alle
- Amazon
- Apache
- Bereich
- um
- Auto
- BESTE
- Bit
- bauen
- Building
- Haufen
- Kampagnen (Campaign)
- Fälle
- verursacht
- challenges
- Übernehmen
- Überprüfung
- Einstufung
- näher
- Cloud
- Code
- Programmierung
- Komponente
- Berechnen
- Computer
- Computing
- Coursera
- Erstellen
- Referenzen
- Kunden
- technische Daten
- Datenwissenschaft
- Datenwissenschaftler
- Datensatz
- Data Warehouse
- Datenbase
- Tag
- Deal
- tiefe Lernen
- demographisch
- Detail
- entwickeln
- Entwicklung
- DID
- Direktor
- Effizienz
- Ingenieure
- Arbeitsumfeld
- Experiment
- Eigenschaften
- Endlich
- Ende
- Vorname
- Setzen Sie mit Achtsamkeit
- folgen
- Format
- Frei
- voller
- Funktion
- Gaming
- Spielindustrie
- Allgemeines
- gut
- GPUs
- groß
- Guide
- hier
- GUTE
- Hervorheben
- Ultraschall
- Hilfe
- HTTPS
- riesig
- Idee
- identifizieren
- Image
- Erhöhung
- Energiegewinnung
- Info
- Information
- Probleme
- IT
- Job
- Jobs
- join
- springen
- Wesentliche
- grosse
- LERNEN
- lernen
- Niveau
- Bibliothek
- Line
- Liste
- Belastung
- aus einer regionalen
- Lang
- Maschinelles Lernen
- Metrik
- Million
- ML
- Mobil
- Mobile Spiele
- Modell
- schlauer bewegen
- nämlich
- Neue Funktionen
- Angebote
- Online
- Einkauf & Prozesse
- Option
- Andere
- Leistung
- Reichlich
- BLOG-POSTS
- Werkzeuge
- Prognosen
- Produziert
- PRODUKTIVITÄT
- Projekt
- Öffentlichkeit
- Python
- Lesebrillen
- Veteran
- Regression
- Downloads
- REST
- Die Ergebnisse
- Führen Sie
- Laufen
- Skalieren
- Skalierung
- Wissenschaft
- Wissenschaftler
- Modellreihe
- kompensieren
- Einstellung
- Teilen
- von Locals geführtes
- Einfacher
- klein
- So
- LÖSEN
- Geschwindigkeit
- verbringen
- Ausgabe
- Wirbelsäule ... zu unterstützen.
- gespalten
- SQL
- Stufe
- Anfang
- begonnen
- Statistiken
- Geschichten
- Streaming
- Target
- Test
- Denken
- Zeit
- Top
- aufnehmen
- Ausbildung
- Transaktion
- Transaktionen
- Versuch
- Tutorials
- ui
- us
- Nutzer
- Assistent
- Warehouse
- Woche
- Was ist
- .
- Arbeiten
- Arbeiter
- Arbeitsablauf.
- Werk
- Schreiben
- X
- Jahr