Δημιουργία σωληνώσεων εκμάθησης μηχανών με νιφάδα χιονιού και Dask
Σε αυτήν την ανάρτηση, θέλω να μοιραστώ μερικά από τα εργαλεία που έχω εξερευνήσει πρόσφατα και να σας δείξω πώς τα χρησιμοποιώ και πώς βοήθησαν στη βελτίωση της αποτελεσματικότητας της ροής εργασίας μου. Τα δύο για τα οποία θα μιλήσω συγκεκριμένα είναι το Snowflake και το Dask. Δύο πολύ διαφορετικά εργαλεία, αλλά αυτά που αλληλοσυμπληρώνονται καλά ειδικά ως μέρος του κύκλου ζωής ML.
By Ντάνιελ Φόλι, Επιστήμονας δεδομένων
Εισαγωγή
Πρόσφατα προσπαθώ να βρω καλύτερους τρόπους για να βελτιώσω τη ροή εργασίας μου ως επιστήμονας δεδομένων. Τείνω να ξοδεύω ένα αξιοπρεπές μέρος του χρόνου μου μοντελοποιώντας και χτίζοντας ETL στη δουλειά μου. Αυτό σημαίνει ότι όλο και περισσότερο χρειάζεται να βασίζομαι σε εργαλεία για να χειρίζομαι αξιόπιστα και αποτελεσματικά μεγάλα σύνολα δεδομένων. Γρήγορα συνειδητοποίησα ότι η χρήση panda για τον χειρισμό αυτών των συνόλων δεδομένων δεν είναι πάντα καλή προσέγγιση και αυτό με ώθησε να ψάξω άλλες εναλλακτικές λύσεις.
Σε αυτήν την ανάρτηση, θέλω να μοιραστώ μερικά από τα εργαλεία που εξερευνώ πρόσφατα και να σας δείξω πώς τα χρησιμοποιώ και πώς βοήθησαν στη βελτίωση της αποτελεσματικότητας της ροής εργασίας μου. Τα δύο για τα οποία θα μιλήσω συγκεκριμένα είναι το Snowflake και το Dask. Δύο πολύ διαφορετικά εργαλεία, αλλά αυτά που αλληλοσυμπληρώνονται καλά ειδικά ως μέρος του κύκλου ζωής ML. Ελπίζω ότι μετά την ανάγνωση αυτής της ανάρτησης θα κατανοήσετε καλά τι είναι τα Snowflake και Dask, πώς μπορούν να χρησιμοποιηθούν αποτελεσματικά και να μπορέσετε να ξεκινήσετε τη λειτουργία με τις δικές σας θήκες χρήσης.
Πιο συγκεκριμένα, θέλω να σας δείξω πώς μπορείτε να δημιουργήσετε έναν αγωγό ETL χρησιμοποιώντας Snowflake και Python για να δημιουργήσετε δεδομένα εκπαίδευσης για μια εργασία μηχανικής μάθησης. Στη συνέχεια, θέλω να παρουσιάσω το Dask και Κρόνος σύννεφο και να σας δείξει πώς μπορείτε να επωφεληθείτε από την παράλληλη επεξεργασία στο cloud για να επιταχύνετε πραγματικά τη διαδικασία εκπαίδευσης ML, ώστε να αυξήσετε την παραγωγικότητά σας ως επιστήμονας δεδομένων.
Δημιουργία ETL σε Snowflake και Python
Πριν προχωρήσουμε στην κωδικοποίηση, καλύτερα να εξηγήσω εν συντομία τι είναι το Snowflake. Αυτή είναι μια ερώτηση που έκανα πρόσφατα όταν η ομάδα μου αποφάσισε να αρχίσει να τη χρησιμοποιεί. Σε υψηλό επίπεδο, είναι μια αποθήκη δεδομένων στο cloud. Αφού έπαιξα μαζί του για λίγο, συνειδητοποίησα πόσο δυνατό ήταν. Νομίζω ότι για μένα, ένα από τα πιο χρήσιμα χαρακτηριστικά είναι οι εικονικές αποθήκες που μπορείτε να χρησιμοποιήσετε. Μια εικονική αποθήκη σάς δίνει πρόσβαση στα ίδια δεδομένα, αλλά είναι εντελώς ανεξάρτητη από άλλες εικονικές αποθήκες, επομένως οι υπολογιστικοί πόροι δεν μοιράζονται μεταξύ των ομάδων. Αυτό έχει αποδειχθεί πολύ χρήσιμο καθώς αφαιρεί τυχόν προβλήματα απόδοσης που προκαλούνται από άλλους χρήστες που εκτελούν ερωτήματα κατά τη διάρκεια της ημέρας. Αυτό είχε ως αποτέλεσμα λιγότερη απογοήτευση και σπατάλη χρόνου αναμονής για την εκτέλεση των ερωτημάτων.
Δεδομένου ότι πρόκειται να χρησιμοποιήσουμε το Snowflake, θα περιγράψω εν συντομία πώς μπορείτε να το ρυθμίσετε και να αρχίσετε να πειραματίζεστε με αυτό μόνοι σας. Πρέπει να κάνουμε τα εξής:
- Δημιουργήστε έναν λογαριασμό Snowflake
- Πάρτε τα δεδομένα μας στο Snowflake
- Γράψτε και δοκιμάστε τα ερωτήματά μας χρησιμοποιώντας SQL και τη διεπαφή χρήστη Snowflake
- Γράψτε μια κλάση Python που μπορεί να εκτελέσει τα ερωτήματά μας για να δημιουργήσει το τελικό μας σύνολο δεδομένων για μοντελοποίηση
Η δημιουργία ενός λογαριασμού είναι τόσο εύκολη όσο η εγγραφή για μια δωρεάν δοκιμή στο δικό τους . Αφού το κάνετε αυτό, μπορείτε να κάνετε λήψη του snowsql CLI εδώ. Αυτό θα κάνει εύκολη την προσθήκη δεδομένων στο Snowflake. Αφού ακολουθήσουμε αυτά τα βήματα, μπορούμε να προσπαθήσουμε να συνδεθούμε στο Snowflake χρησιμοποιώντας τα διαπιστευτήριά μας και τη γραμμή εντολών.
snowsql -a <account_name> -u <user_name>
Μπορείτε να βρείτε το όνομα του λογαριασμού σας στη διεύθυνση URL όταν συνδέεστε στη διεπαφή χρήστη Snowflake. Θα πρέπει να μοιάζει κάπως έτσι: xxxxx.europe-west2.gcp. Εντάξει, ας προχωρήσουμε στο επόμενο βήμα και ας μεταφέρουμε τα δεδομένα μας στο Snowflake. Υπάρχουν μερικά βήματα που πρέπει να ακολουθήσουμε εδώ και συγκεκριμένα:
- Δημιουργήστε την εικονική μας αποθήκη
- Δημιουργήστε μια βάση δεδομένων
- Ορίστε και δημιουργήστε τους πίνακές μας
- Δημιουργήστε έναν πίνακα σταδιοποίησης για τα αρχεία CSV μας
- Αντιγραφή των δεδομένων στους πίνακες μας
Ευτυχώς αυτό δεν είναι πολύ δύσκολο και μπορούμε να το κάνουμε εξ ολοκλήρου χρησιμοποιώντας το snowsql CLI. Για αυτό το έργο, θα χρησιμοποιήσω ένα μικρότερο σύνολο δεδομένων από αυτό που θα ήθελα, αλλά δυστυχώς, δεν μπορώ να χρησιμοποιήσω κανένα από τα δεδομένα της εταιρείας μου και μπορεί να είναι αρκετά δύσκολο να βρω μεγάλα κατάλληλα σύνολα δεδομένων στο διαδίκτυο. Βρήκα ωστόσο κάποια δεδομένα συναλλαγών από το Dunnhumby τα οποία είναι ελεύθερα διαθέσιμα στο Kaggle. Ωστόσο, δημιουργώ ένα πολύ μεγαλύτερο συνθετικό σύνολο δεδομένων χρησιμοποιώντας αυτά τα δεδομένα για να ελέγξω πόσο καλά το Dask χειρίζεται την πρόκληση σε σύγκριση με το sklearn.
Πρώτα απ 'όλα, πρέπει να δημιουργήσουμε μια εικονική αποθήκη και μια βάση δεδομένων χρησιμοποιώντας τις ακόλουθες εντολές στο Snowflake UI.
δημιουργία or αντικαθιστώ αποθήκη analytics_wh με
warehouse_size=”X-SMALL”
auto_suspend=180
auto_resume=true
αρχικά_αναστολή=αληθής;
δημιουργία or αντικαθιστώ βάσεις δεδομένων Dunnhumby?
Τα δεδομένα μας αποτελούνται από 6 CSV τα οποία θα μετατρέψουμε σε 6 πίνακες. Δεν θα αφιερώσω πολύ χρόνο εξετάζοντας το σύνολο δεδομένων, καθώς αυτή η ανάρτηση αφορά περισσότερο τη χρήση του Snowflake και του Dask αντί για την ερμηνεία δεδομένων.
Παρακάτω είναι οι εντολές που μπορούμε να χρησιμοποιήσουμε για να δημιουργήσουμε τους πίνακές μας. Το μόνο που θα χρειαστεί να γνωρίζετε εκ των προτέρων είναι με ποιες στήλες και τύπους δεδομένων θα εργαστείτε.
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);
Τώρα που έχουμε δημιουργήσει τους πίνακες μας, μπορούμε να αρχίσουμε να σκεφτόμαστε πώς να εισάγουμε δεδομένα σε αυτούς. Για αυτό, θα χρειαστεί να σκηνοθετήσουμε τα αρχεία CSV μας. Αυτό είναι βασικά απλώς ένα ενδιάμεσο βήμα, ώστε το Snowflake να μπορεί να φορτώσει απευθείας τα αρχεία από τη σκηνή μας στα τραπέζια μας. Μπορούμε να χρησιμοποιήσουμε το ΒΆΖΩ εντολή για να βάλουμε τοπικά αρχεία στο στάδιο μας και μετά το ΑΝΤΙΓΡΑΦΗ ΣΤΟ εντολή για να δώσει οδηγίες στο Snowflake πού να τοποθετήσει αυτά τα δεδομένα.
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;
Ως γρήγορος έλεγχος, μπορείτε να εκτελέσετε αυτήν την εντολή για να ελέγξετε τι υπάρχει στην περιοχή σταδιοποίησης.
ls @dunnhumby.public.dunnhumby_stage;
Τώρα πρέπει απλώς να αντιγράψουμε τα δεδομένα στους πίνακες μας χρησιμοποιώντας τα παρακάτω ερωτήματα. Μπορείτε να τα εκτελέσετε είτε στο Snowflake UI είτε στη γραμμή εντολών αφού συνδεθείτε στο Snowflake.
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=’”’);
Εντάξει υπέροχα, με κάθε τύχη έχουμε τα δεδομένα μας στα τραπέζια μας πρώτα δοκιμάστε. Ω, αν ήταν τόσο απλό, όλη αυτή η διαδικασία μου πήρε μερικές προσπάθειες για να τα καταφέρω σωστά (προσοχή να μην γράφω σωστά τα πράγματα). Ας ελπίσουμε ότι μπορείτε να το ακολουθήσετε και να είστε έτοιμοι. Πλησιάζουμε πιο κοντά στα ενδιαφέροντα πράγματα, αλλά τα παραπάνω βήματα αποτελούν ζωτικό μέρος της διαδικασίας, επομένως βεβαιωθείτε ότι κατανοείτε καθένα από αυτά τα βήματα.
Γράφοντας το Pipeline μας σε SQL
Σε αυτό το επόμενο βήμα, θα γράψουμε τα ερωτήματα για να δημιουργήσουμε τον στόχο μας, τα χαρακτηριστικά μας και, στη συνέχεια, να δημιουργήσουμε ένα σύνολο δεδομένων εκπαίδευσης. Μια προσέγγιση για τη δημιουργία ενός συνόλου δεδομένων για μοντελοποίηση είναι να διαβάσετε αυτά τα δεδομένα στη μνήμη και να χρησιμοποιήσετε panda για να δημιουργήσετε νέες δυνατότητες και να ενώσετε όλα τα πλαίσια δεδομένων μαζί. Αυτή είναι συνήθως η προσέγγιση που βλέπετε στο Kaggle και σε άλλα διαδικτυακά σεμινάρια. Το πρόβλημα με αυτό είναι ότι δεν είναι πολύ αποτελεσματικό, ιδιαίτερα όταν εργάζεστε με οποιαδήποτε σύνολα δεδομένων λογικού μεγέθους. Για αυτόν τον λόγο, είναι πολύ καλύτερη ιδέα να αναθέσετε σε τρίτους τη βαριά ανύψωση σε κάτι σαν το Snowflake που χειρίζεται εξαιρετικά καλά τεράστια σύνολα δεδομένων και πιθανότατα θα σας εξοικονομήσει τεράστιο χρόνο. Δεν θα αφιερώσω πολύ χρόνο εξετάζοντας τις ιδιαιτερότητες του συνόλου δεδομένων μας εδώ, καθώς δεν είναι πραγματικά ζωτικής σημασίας για αυτό που προσπαθώ να δείξω. Σε γενικές γραμμές, ωστόσο, θα θέλατε να αφιερώσετε πολύ χρόνο για να εξερευνήσετε και να κατανοήσετε τα δεδομένα σας προτού ξεκινήσετε τη μοντελοποίηση. Ο στόχος αυτών των ερωτημάτων θα είναι η προεπεξεργασία των δεδομένων και η δημιουργία κάποιων απλών χαρακτηριστικών που μπορούμε να χρησιμοποιήσουμε αργότερα στα μοντέλα μας.
Ορισμός στόχου
Προφανώς, ένα ζωτικό στοιχείο της εποπτευόμενης μηχανικής εκμάθησης είναι ο καθορισμός ενός κατάλληλου στόχου για πρόβλεψη. Για την περίπτωση χρήσης μας, θα προβλέπουμε την ανατροπή υπολογίζοντας εάν ένας χρήστης πραγματοποιεί άλλη επίσκεψη εντός δύο εβδομάδων μετά από μια εβδομάδα διακοπής. Η επιλογή των 2 εβδομάδων είναι αρκετά αυθαίρετη και θα εξαρτηθεί από το συγκεκριμένο πρόβλημα που προσπαθούμε να λύσουμε, αλλά ας υποθέσουμε ότι είναι μια χαρά για αυτό το έργο. Σε γενικές γραμμές, θα θέλατε να αναλύσετε προσεκτικά τους πελάτες σας για να κατανοήσετε την κατανομή στα κενά μεταξύ των επισκέψεων για να καταλήξετε σε έναν κατάλληλο ορισμό της απόκλισης.
Η κύρια ιδέα εδώ είναι ότι για κάθε πίνακα θέλουμε να έχουμε μία σειρά ανά home_key που περιέχει τιμές για κάθε χαρακτηριστικό μας.
Χαρακτηριστικά καμπάνιας
Χαρακτηριστικά συναλλαγής
Παρακάτω δημιουργούμε μερικές απλές μετρήσεις με βάση συγκεντρωτικά στατιστικά στοιχεία όπως ο μέσος όρος, η μέγιστη και η τυπική απόκλιση.
Δημογραφικά χαρακτηριστικά
Αυτό το σύνολο δεδομένων έχει πολλά δεδομένα που λείπουν, γι' αυτό αποφάσισα να χρησιμοποιήσω τον καταλογισμό εδώ. Υπάρχουν πολλές τεχνικές εκεί έξω για τα δεδομένα που λείπουν από την απόρριψη των δεδομένων που λείπουν, έως τις προηγμένες μεθόδους καταλογισμού. Μόλις έκανα τη ζωή μου εύκολη εδώ και αντικατέστησα τις τιμές που λείπουν με τη λειτουργία. Δεν θα συνιστούσα απαραιτήτως να ακολουθήσετε αυτήν την προσέγγιση γενικά, καθώς η κατανόηση του γιατί λείπουν αυτά τα δεδομένα είναι πραγματικά σημαντική για να αποφασίσετε πώς να τα αντιμετωπίσετε, αλλά για τους σκοπούς αυτού του παραδείγματος, θα προχωρήσω και θα ακολουθήσω την εύκολη προσέγγιση. Αρχικά υπολογίζουμε τη λειτουργία για κάθε χαρακτηριστικό μας και, στη συνέχεια, χρησιμοποιούμε τη συνένωση για να αντικαταστήσουμε κάθε σειρά με τη λειτουργία εάν λείπουν δεδομένα.
Δεδομένα εκπαίδευσης
Τέλος, δημιουργούμε ένα ερώτημα για τα δεδομένα εκπαίδευσής μας ενώνοντας τους κύριους πίνακές μας και καταλήγουμε σε έναν πίνακα που περιέχει τον στόχο, την καμπάνια, τις συναλλαγές μας και τα δημογραφικά χαρακτηριστικά που μπορούμε να χρησιμοποιήσουμε για να δημιουργήσουμε ένα μοντέλο.
Εν συντομία, για όσους ενδιαφέρονται να μάθουν περισσότερα για τα χαρακτηριστικά και τις αποχρώσεις του Snowflake, θα συνιστούσα το ακόλουθο βιβλίο: Βιβλίο μαγειρικής για νιφάδες χιονιού. Άρχισα να διαβάζω αυτό το βιβλίο και είναι γεμάτο με πραγματικά χρήσιμες πληροφορίες σχετικά με τον τρόπο χρήσης του Snowflake και αναφέρεται σε πολύ περισσότερες λεπτομέρειες από ό,τι εδώ.
Κώδικας Python για ETL
Το τελευταίο κομμάτι που χρειαζόμαστε για αυτό το ETL είναι να γράψουμε ένα σενάριο για να το εκτελέσουμε. Τώρα, αυτό απαιτείται πραγματικά μόνο εάν σκοπεύετε να εκτελείτε ένα ETL όπως αυτό τακτικά, αλλά αυτή είναι καλή πρακτική και διευκολύνει πολύ την εκτέλεση του ETL όπως και όταν χρειάζεται.
Ας συζητήσουμε εν συντομία τα κύρια στοιχεία της τάξης μας EtlTraining. Η τάξη μας λαμβάνει μία είσοδο που είναι η εβδομάδα αποκοπής. Αυτό οφείλεται στον τρόπο με τον οποίο ορίζονται τα δεδομένα στο σύνολο δεδομένων μας, αλλά συνήθως, αυτό θα είναι σε μορφή ημερομηνίας που αντιστοιχεί στην ημερομηνία λήξης που θέλουμε να επιλέξουμε για τη δημιουργία δεδομένων εκπαίδευσης.
Αρχικοποιούμε μια λίστα με τα ερωτήματά μας, ώστε να μπορούμε εύκολα να τα κάνουμε βρόχο και να τα εκτελέσουμε. Δημιουργούμε επίσης ένα λεξικό που περιέχει τις παραμέτρους μας τις οποίες μεταβιβάζουμε στη σύνδεσή μας Snowflake. Εδώ χρησιμοποιούμε μεταβλητές περιβάλλοντος που ρυθμίσαμε στο Saturn Cloud. Εδώ είναι ένας οδηγός για το πώς να το κάνετε αυτό. Δεν είναι πολύ δύσκολο να συνδεθείτε στο Snowflake, το μόνο που χρειάζεται να κάνουμε είναι να χρησιμοποιήσουμε την υποδοχή Snowflake και να περάσουμε στο λεξικό διαπιστευτηρίων μας. Το εφαρμόζουμε στη μέθοδο σύνδεσης Snowflake και επιστρέφουμε αυτήν τη σύνδεση ως χαρακτηριστικό.
Για να κάνω αυτά τα ερωτήματα λίγο πιο εύκολα στην εκτέλεση, αποθηκεύω κάθε ερώτημα ως μεταβλητή συμβολοσειράς python στο αρχείο ml_query_pipeline.py. Η μέθοδος execute_etl κάνει ακριβώς αυτό που λέει στο tin. Κάνουμε βρόχο σε κάθε ερώτημα, το μορφοποιούμε, το εκτελούμε και τελειώνουμε κλείνοντας τη σύνδεση Snowflake.
Για να τρέξουμε αυτό το ETL μπορούμε απλά να πληκτρολογήσουμε τις παρακάτω εντολές στο τερματικό. (όπου ml_pipeline είναι το όνομα του παραπάνω σεναρίου.)
python -m ml_pipeline -w 102 -j ‘train’
Εν συντομία, πιθανότατα θα θέλετε να εκτελέσετε ένα ETL όπως αυτό σε τακτά χρονικά διαστήματα. Για παράδειγμα, αν θέλετε να κάνετε καθημερινές προβλέψεις, τότε θα πρέπει να δημιουργείτε ένα σύνολο δεδομένων όπως αυτό κάθε μέρα για να το μεταβιβάζετε στο μοντέλο σας, ώστε να μπορείτε να προσδιορίσετε ποιοι από τους πελάτες σας είναι πιθανό να ανακληθούν. Δεν θα υπεισέλθω σε αυτό λεπτομερώς εδώ, αλλά στη δουλειά μου, χρησιμοποιούμε το Airflow για να ενορχηστρώσουμε τα ETL μας, επομένως θα συνιστούσα να το ελέγξετε αν σας ενδιαφέρει. Μάλιστα, πρόσφατα αγόρασα ένα βιβλίο «Σωληνώσεις δεδομένων με ροή αέρα Apacheτο οποίο νομίζω ότι είναι υπέροχο και πραγματικά δίνει μερικά σταθερά παραδείγματα και συμβουλές για το πώς να χρησιμοποιήσετε τη ροή αέρα.
Dask και Modeling
Τώρα που έχουμε δημιουργήσει τη γραμμή δεδομένων μας, μπορούμε να αρχίσουμε να σκεφτόμαστε τη μοντελοποίηση. Ο άλλος κύριος στόχος που έχω για αυτήν την ανάρτηση είναι να επισημάνω τα πλεονεκτήματα της χρήσης του Dask ως μέρος της διαδικασίας ανάπτυξης ML και να σας δείξω πόσο εύκολο είναι στη χρήση του.
Για αυτό το μέρος του έργου χρησιμοποίησα και εγώ Κρόνος σύννεφο που είναι ένα πολύ ωραίο εργαλείο που συνάντησα πρόσφατα και μας επιτρέπει να αξιοποιήσουμε τη δύναμη του Dask σε ένα σύμπλεγμα υπολογιστών στο cloud. Τα κύρια πλεονεκτήματα της χρήσης του Κρόνου για μένα είναι ότι είναι πραγματικά εύκολο να μοιράζεσαι την εργασία σου, εξαιρετικά απλό να κλιμακώνεις τον υπολογισμό σου όσο και όποτε το χρειάζεσαι και έχει μια επιλογή δωρεάν βαθμίδας. Η ανάπτυξη μοντέλων γενικά είναι μια πολύ καλή περίπτωση χρήσης για το Dask, καθώς συνήθως θέλουμε να εκπαιδεύσουμε ένα σωρό διαφορετικά μοντέλα και να δούμε τι λειτουργεί καλύτερα. Όσο πιο γρήγορα μπορούμε να το κάνουμε αυτό, τόσο καλύτερα, καθώς έχουμε περισσότερο χρόνο να επικεντρωθούμε σε άλλες σημαντικές πτυχές της ανάπτυξης μοντέλων. Παρόμοια με το Snowflake, απλά πρέπει να εγγραφείτε εδώ και μπορείτε πολύ γρήγορα να περιστρέψετε μια παρουσία του εργαστηρίου Jupyter και να αρχίσετε να πειραματίζεστε με αυτό μόνοι σας.
Τώρα, συνειδητοποιώ ότι σε αυτό το σημείο έχω αναφέρει το Dask μερικές φορές, αλλά ποτέ δεν εξήγησα πραγματικά τι είναι. Επιτρέψτε μου λοιπόν να αφιερώσω λίγο για να σας δώσω μια επισκόπηση σε πολύ υψηλό επίπεδο του Dask και γιατί νομίζω ότι είναι φοβερό. Πολύ απλά, το Dask είναι μια βιβλιοθήκη python που εκμεταλλεύεται τον παράλληλο υπολογισμό για να σας επιτρέπει να επεξεργάζεστε και να εκτελείτε λειτουργίες σε πολύ μεγάλα σύνολα δεδομένων. Και, το καλύτερο μέρος είναι, εάν είστε ήδη εξοικειωμένοι με την Python, τότε το Dask θα πρέπει να είναι πολύ απλό καθώς η σύνταξη είναι πολύ παρόμοια.
Το παρακάτω γράφημα επισημαίνει τα κύρια στοιχεία του Dask.
πηγή: Τεκμηρίωση Dask
Οι συλλογές μας επιτρέπουν να δημιουργήσουμε ένα γράφημα εργασιών που στη συνέχεια μπορούν να εκτελεστούν σε πολλούς υπολογιστές. Μερικές από αυτές τις δομές δεδομένων πιθανώς ακούγονται αρκετά γνωστές, όπως πίνακες και πλαίσια δεδομένων και είναι παρόμοιες με αυτές που θα βρείτε στην python, αλλά με ορισμένες σημαντικές διαφορές. Για παράδειγμα, μπορείτε να σκεφτείτε ένα πλαίσιο δεδομένων Dask ως μια δέσμη πλαισίων δεδομένων panda κατασκευασμένα με τέτοιο τρόπο που μας επιτρέπει να εκτελούμε λειτουργίες παράλληλα.
Προχωρώντας από τις συλλογές έχουμε τον προγραμματιστή. Μόλις δημιουργήσουμε το γράφημα εργασιών, ο προγραμματιστής χειρίζεται τα υπόλοιπα για εμάς. Διαχειρίζεται τη ροή εργασίας και στέλνει αυτές τις εργασίες είτε σε ένα μόνο μηχάνημα είτε τις διανέμει σε ένα σύμπλεγμα. Ας ελπίσουμε ότι αυτό σας δίνει μια πολύ σύντομη επισκόπηση του τρόπου λειτουργίας του Dask. Για περισσότερες πληροφορίες, προτείνω να ελέγξετε το τεκμηρίωση ή αυτό βιβλίο. Και οι δύο είναι πολύ καλοί πόροι για να εμβαθύνετε σε αυτό το θέμα.
Python Code for Modelling
Κατά τη μοντελοποίηση, τείνω να έχω έναν μικρό αριθμό αλγορίθμων μετάβασης που θα δοκιμάζω πάντα πρώτος. Αυτό θα μου δώσει γενικά μια καλή ιδέα για το τι μπορεί να ταιριάζει στο συγκεκριμένο πρόβλημα που έχω. Αυτά τα μοντέλα είναι η Logistic Regression, το Random Forest και το GradientBoosting. Από την εμπειρία μου, όταν εργάζεστε με δεδομένα σε πίνακα, αυτοί οι αλγόριθμοι συνήθως σας δίνουν αρκετά καλά αποτελέσματα. Παρακάτω κατασκευάζουμε έναν αγωγό μοντελοποίησης sklearn χρησιμοποιώντας αυτά τα 3 μοντέλα. Τα ακριβή μοντέλα που χρησιμοποιούμε εδώ δεν είναι πραγματικά σημαντικά, καθώς η διοχέτευση θα πρέπει να λειτουργεί για οποιοδήποτε μοντέλο ταξινόμησης sklearn, αυτή είναι απλώς η προτίμησή μου.
Χωρίς περαιτέρω καθυστέρηση, ας βουτήξουμε στον κώδικα. Ευτυχώς, αναθέσαμε σε εξωτερικούς συνεργάτες το μεγαλύτερο μέρος της προεπεξεργασίας μας στο Snowflake, ώστε να μην χρειάζεται να ασχολούμαστε πολύ με τα δεδομένα προπόνησής μας εδώ, αλλά θα προσθέσουμε μερικά επιπλέον βήματα χρησιμοποιώντας αγωγούς sklearn.
Το πρώτο απόσπασμα κώδικα παρακάτω δείχνει τη διοχέτευση κατά τη χρήση του sklearn. Σημειώστε ότι το σύνολο δεδομένων μας είναι ένα απλό πλαίσιο δεδομένων παλαιών panda και τα βήματα προεπεξεργασίας μας εκτελούνται όλα χρησιμοποιώντας μεθόδους sklearn. Δεν συμβαίνει τίποτα ιδιαίτερα ασυνήθιστο εδώ. Διαβάζουμε τα δεδομένα μας από τον πίνακα που παρήχθη από το Snowflake ETL και το περνάμε σε έναν αγωγό sklearn. Εδώ ισχύουν τα συνήθη βήματα μοντελοποίησης. Διαχωρίζουμε το σύνολο δεδομένων σε εκπαίδευση και δοκιμάζουμε και κάνουμε κάποια προεπεξεργασία, δηλαδή καταλογίζουμε τιμές που λείπουν χρησιμοποιώντας τη διάμεσο, κλιμακώνουμε τα δεδομένα και κωδικοποιούμε τα κατηγοριοποιημένα μας δεδομένα. Είμαι μεγάλος λάτρης των αγωγών sklearn και βασικά τα χρησιμοποιώ όποτε αναπτύσσω μοντέλα στις μέρες μας, διευκολύνουν πραγματικά τον καθαρό και συνοπτικό κώδικα.
Πώς λειτουργεί αυτός ο αγωγός σε ένα σύνολο δεδομένων με περίπου 2 εκατομμύρια σειρές; Λοιπόν, η εκτέλεση αυτού του μοντέλου χωρίς συντονισμό υπερπαραμέτρων διαρκεί περίπου 34 λεπτά. Ωχ, λίγο αργό. Μπορείτε να φανταστείτε πόσο απαγορευτικό θα έπαιρνε αυτό αν θέλαμε να κάνουμε οποιονδήποτε τύπο συντονισμού υπερπαραμέτρων. Εντάξει, όχι το ιδανικό, αλλά ας δούμε πώς το Dask χειρίζεται την πρόκληση.
Dask ML Python Code
Στόχος μας εδώ είναι να δούμε αν μπορούμε να νικήσουμε τον αγωγό sklearn παραπάνω, ειδοποίηση spoiler, σίγουρα μπορούμε. Το ωραίο με το Dask είναι ότι το εμπόδιο εισόδου όταν είστε ήδη εξοικειωμένοι με τον python είναι αρκετά χαμηλό. Μπορούμε να θέσουμε σε λειτουργία αυτόν τον αγωγό στο Dask με λίγες μόνο αλλαγές.
Η πρώτη αλλαγή που πιθανώς θα παρατηρήσετε είναι ότι έχουμε κάποιες διαφορετικές εισαγωγές. Μία από τις βασικές διαφορές μεταξύ αυτού του αγωγού και του προηγούμενου είναι ότι θα χρησιμοποιήσουμε ένα πλαίσιο δεδομένων Dask αντί για ένα πλαίσιο δεδομένων panda για να εκπαιδεύσουμε το μοντέλο μας. Μπορείτε να σκεφτείτε ένα πλαίσιο δεδομένων Dask ως μια δέσμη πλαισίων δεδομένων panda όπου μπορούμε να εκτελέσουμε υπολογισμούς για το καθένα ταυτόχρονα. Αυτός είναι ο πυρήνας του παραλληλισμού του Dask και είναι που πρόκειται να μειώσει τον χρόνο εκπαίδευσης για αυτόν τον αγωγό.
Παρατηρήστε ότι χρησιμοποιούμε @dask.delayed ως διακοσμητής μας load_training_data λειτουργία. Αυτό δίνει εντολή στο Dask να παραλληλίσει αυτή τη συνάρτηση για εμάς.
Θα εισαγάγουμε επίσης ορισμένες μεθόδους προεπεξεργασίας και διοχέτευσης από το Dask και το πιο σημαντικό, θα χρειαστεί να εισαγάγουμε το SaturnCluster που θα μας επιτρέψει να δημιουργήσουμε ένα σύμπλεγμα για την εκπαίδευση των μοντέλων μας. Μια άλλη βασική διαφορά με αυτόν τον κώδικα είναι ότι χρησιμοποιούμε dask.επιμένω μετά τη διάσπαση της δοκιμής του τρένου μας. Πριν από αυτό το σημείο, καμία από τις συναρτήσεις μας δεν είχε πραγματικά υπολογιστεί λόγω της τεμπέλης αξιολόγησης του Dask. Μόλις χρησιμοποιήσουμε τη μέθοδο persist, ωστόσο, λέμε στον Dask να στείλει τα δεδομένα μας στους εργαζόμενους και να εκτελέσει τις εργασίες που έχουμε δημιουργήσει μέχρι αυτό το σημείο και να αφήσει αυτά τα αντικείμενα στο σύμπλεγμα.
Τέλος, εκπαιδεύουμε τα μοντέλα μας χρησιμοποιώντας την καθυστερημένη μέθοδο. Και πάλι, αυτό μας δίνει τη δυνατότητα να δημιουργήσουμε τον αγωγό μας με νωχελικό τρόπο. Η διοχέτευση δεν εκτελείται μέχρι να φτάσουμε σε αυτόν τον κώδικα:
fit_pipelines = dask.compute(*pipelines_)
Αυτή τη φορά μας πήρε μόνο περίπου 10 λεπτά για να εκτελέσουμε αυτόν τον αγωγό στο ίδιο ακριβώς σύνολο δεδομένων. Αυτό είναι μια επιτάχυνση κατά 3.4, όχι πολύ άθλια. Τώρα, αν θέλαμε, θα μπορούσαμε να το επιταχύνουμε ακόμη περισσότερο, αυξάνοντας τους υπολογιστικούς μας πόρους με το πάτημα ενός κουμπιού στον Κρόνο.
Ανάπτυξη του αγωγού μας
Ανέφερα νωρίτερα ότι πιθανότατα θα θέλετε να εκτελείτε έναν αγωγό σαν αυτόν αρκετά τακτικά χρησιμοποιώντας κάτι σαν ροή αέρα. Τυχαίνει ότι, αν δεν θέλετε την αρχική ταλαιπωρία να ρυθμίσετε τα πάντα για τη ροή αέρα, το Saturn Cloud προσφέρει μια απλή εναλλακτική με το Jobs. Οι εργασίες μάς επιτρέπουν να συσκευάζουμε τον κώδικα μας και να τον εκτελούμε σε τακτά χρονικά διαστήματα ή όπως απαιτείται. Το μόνο που χρειάζεται να κάνετε είναι να μεταβείτε σε ένα υπάρχον έργο και να κάνετε κλικ στο Δημιουργία εργασίας. Μόλις το κάνουμε αυτό, θα πρέπει να μοιάζει με το εξής:
πηγή: Κρόνος
Από εδώ, το μόνο που χρειάζεται να κάνουμε είναι να βεβαιωθούμε ότι τα αρχεία python παραπάνω βρίσκονται στον κατάλογο στην εικόνα και μπορούμε να εισαγάγουμε την εντολή python παραπάνω
python -m ml_pipeline -w 102 -j 'train'
Μπορούμε επίσης να ορίσουμε ένα χρονοδιάγραμμα χρησιμοποιώντας σύνταξη cron για την εκτέλεση του ETL σε καθημερινή βάση, αν θέλουμε. Για όσους ενδιαφέρονται, εδώ είναι ένα φροντιστήριο που πηγαίνει σε όλα τα νιφίδια.
Συμπεράσματα και συμπεράσματα
Λοιπόν, έχουμε φτάσει στο τέλος του έργου μας σε αυτό το σημείο. Τώρα προφανώς έχω αφήσει έξω ορισμένα βασικά μέρη του κύκλου ανάπτυξης ML, όπως ο συντονισμός υπερπαραμέτρων και η ανάπτυξη του μοντέλου μας, αλλά ίσως το αφήσω για άλλη μια μέρα. Νομίζω ότι πρέπει να δοκιμάσετε το Dask; Δεν είμαι ειδικός σε καμία περίπτωση, αλλά από ό,τι έχω δει μέχρι τώρα είναι σίγουρα πολύ χρήσιμο και είμαι πολύ ενθουσιασμένος που θα πειραματιστώ περισσότερο με αυτό και θα βρω περισσότερες ευκαιρίες να το ενσωματώσω στην καθημερινή μου εργασία ως επιστήμονας δεδομένων. Ας ελπίσουμε ότι σας φάνηκε χρήσιμο και μπορείτε επίσης να δείτε μερικά από τα πλεονεκτήματα του Snowflake και του Dask και θα αρχίσετε να πειραματίζεστε με αυτά μόνοι σας.
Υποστηρικτικό υλικό
- Σωληνώσεις δεδομένων με ροή αέρα Apache
- Βιβλίο μαγειρικής για νιφάδες χιονιού
- Επιστήμη δεδομένων σε κλίμακα με Python και Dask
- Μαθήματα: SQL για Επιστήμη Δεδομένων
Μερικές από τις άλλες αναρτήσεις μου μπορεί να σας φανούν ενδιαφέρουσες
Ας δημιουργήσουμε μια γραμμή δεδομένων ροής
Gaussian Mixture Modeling (GMM)
Μια Μπεϋζιανή Προσέγγιση στην Πρόβλεψη Χρονοσειρών
Σημείωση: Μερικοί από τους συνδέσμους σε αυτήν την ανάρτηση είναι σύνδεσμοι συνεργατών.
Bio: Ντάνιελ Φόλι είναι πρώην Economist που έγινε Επιστήμονας Δεδομένων και εργάζεται στη βιομηχανία τυχερών παιχνιδιών για κινητά.
Πρωτότυπο. Αναδημοσιεύτηκε με άδεια.
Συγγενεύων:
- BigQuery εναντίον Snowflake: Μια σύγκριση των δεδομένων Warehouse Giants
- Οι Πάντες δεν είναι αρκετοί; Ακολουθούν μερικές καλές εναλλακτικές λύσεις για την επεξεργασία μεγαλύτερων και ταχύτερων δεδομένων στο Python
- Χρησιμοποιείτε ακόμα Pandas για την επεξεργασία μεγάλων δεδομένων το 2021; Εδώ είναι δύο καλύτερες επιλογές
Πηγή: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- πρόσβαση
- Λογαριασμός
- Πρόσθετος
- Πλεονέκτημα
- συμβουλές
- Υιοθετώ
- αλγόριθμοι
- Όλα
- Amazon
- Apache
- ΠΕΡΙΟΧΗ
- γύρω
- αυτόματη
- ΚΑΛΎΤΕΡΟΣ
- Κομμάτι
- χτίζω
- Κτίριο
- τσαμπί
- Εκστρατεία
- περιπτώσεις
- προκαλούνται
- πρόκληση
- αλλαγή
- έλεγχος
- ταξινόμηση
- πιο κοντά
- Backup
- κωδικός
- Κωδικοποίηση
- συστατικό
- Υπολογίστε
- υπολογιστές
- χρήση υπολογιστή
- Coursera
- δημιουργία
- Διαπιστεύσεις
- Πελάτες
- ημερομηνία
- επιστημονικά δεδομένα
- επιστήμονας δεδομένων
- σύνολο δεδομένων
- αποθήκη δεδομένων
- βάση δεδομένων
- ημέρα
- συμφωνία
- βαθιά μάθηση
- δημογραφικός
- λεπτομέρεια
- ανάπτυξη
- Ανάπτυξη
- DID
- Διευθυντής
- αποδοτικότητα
- Μηχανικοί
- Περιβάλλον
- πείραμα
- Χαρακτηριστικά
- Τελικά
- τέλος
- Όνομα
- Συγκέντρωση
- ακολουθήστε
- μορφή
- Δωρεάν
- πλήρη
- λειτουργία
- τυχερών παιχνιδιών
- Βιομηχανία τυχερών παιχνιδιών
- General
- καλός
- GPU
- εξαιρετική
- καθοδηγήσει
- εδώ
- Ψηλά
- Επισημάνετε
- Πως
- Πώς να
- HTTPS
- τεράστιος
- ιδέα
- προσδιορίσει
- εικόνα
- Αυξάνουν
- βιομηχανία
- πληροφορίες
- πληροφορίες
- θέματα
- IT
- Δουλειά
- Θέσεις εργασίας
- ενταχθούν
- άλμα
- Κλειδί
- large
- ΜΑΘΑΊΝΩ
- μάθηση
- Επίπεδο
- Βιβλιοθήκη
- γραμμή
- Λιστα
- φορτίο
- τοπικός
- Μακριά
- μάθηση μηχανής
- Metrics
- εκατομμύριο
- ML
- Κινητό
- Mobile gaming
- μοντέλο
- μετακινήσετε
- και συγκεκριμένα
- Νέες δυνατότητες
- προσφορές
- διαδικτυακά (online)
- λειτουργίες
- Επιλογή
- ΑΛΛΑ
- επίδοση
- Αφθονία
- Δημοσιεύσεις
- δύναμη
- Προβλέψεις
- Παράγεται
- παραγωγικότητα
- σχέδιο
- δημόσιο
- Python
- Ανάγνωση
- μείωση
- οπισθοδρόμηση
- Υποστηρικτικό υλικό
- ΠΕΡΙΦΕΡΕΙΑ
- Αποτελέσματα
- τρέξιμο
- τρέξιμο
- Κλίμακα
- απολέπιση
- Επιστήμη
- επιστήμονες
- Σειρές
- σειρά
- τον καθορισμό
- Κοινοποίηση
- Shared
- Απλούς
- small
- So
- SOLVE
- ταχύτητα
- δαπανήσει
- Δαπάνες
- Γνέθω
- διαίρεση
- SQL
- Στάδιο
- Εκκίνηση
- ξεκίνησε
- στατιστική
- ιστορίες
- ροής
- στόχος
- δοκιμή
- Σκέψη
- ώρα
- κορυφή
- αφή
- Εκπαίδευση
- συναλλαγή
- Συναλλαγές
- δίκη
- tutorials
- ui
- us
- Χρήστες
- Πραγματικός
- Αποθήκη
- εβδομάδα
- Τι είναι
- εντός
- Εργασία
- εργαζομένων
- ροής εργασίας
- λειτουργεί
- γραφή
- X
- χρόνια