בניית צינורות למידה של מכונות באמצעות פתית שלג ודסק
בפוסט הזה, אני רוצה לשתף כמה מהכלים שחקרתי לאחרונה ולהראות לך איך אני משתמש בהם וכיצד הם עזרו לשפר את היעילות של זרימת העבודה שלי. השניים עליהם אדבר במיוחד הם Snowflake ו-Dask. שני כלים שונים מאוד אבל כאלה שמשלימים זה את זה בצורה טובה במיוחד כחלק ממחזור החיים של ML.
By דניאל פולי, מדען נתונים
מבוא
לאחרונה ניסיתי למצוא דרכים טובות יותר לשפר את זרימת העבודה שלי כמדען נתונים. אני נוטה לבלות חלק הגון מזמני בדוגמנות ובניית ETLs בעבודה שלי. זה גרם לכך שיותר ויותר אני צריך להסתמך על כלים כדי לטפל בצורה מהימנה ויעילה במערכי נתונים גדולים. מהר מאוד הבנתי ששימוש בפנדות לצורך מניפולציה של מערכי נתונים אלה אינו תמיד גישה טובה וזה גרם לי לבחון חלופות אחרות.
בפוסט הזה, אני רוצה לשתף כמה מהכלים שחקרתי לאחרונה ולהראות לכם איך אני משתמש בהם וכיצד הם עזרו לשפר את היעילות של זרימת העבודה שלי. השניים עליהם אדבר במיוחד הם Snowflake ו-Dask. שני כלים שונים מאוד אבל כאלה שמשלימים זה את זה בצורה טובה במיוחד כחלק ממחזור החיים של ML. תקוותי היא שאחרי קריאת הפוסט הזה תהיה לך הבנה טובה של מה הם Snowflake ו-Dask, כיצד ניתן להשתמש בהם ביעילות ולהיות מסוגלים להתחיל לעבוד עם מקרי השימוש שלך.
ליתר דיוק, אני רוצה להראות לך איך אתה יכול לבנות צינור ETL באמצעות Snowflake ו-Python כדי ליצור נתוני אימון עבור משימת למידת מכונה. לאחר מכן אני רוצה להציג את Dask ו ענן שבתאי ולהראות לך איך אתה יכול לנצל את העיבוד המקביל בענן כדי להאיץ באמת את תהליך אימון ה-ML כדי שתוכל להגדיל את הפרודוקטיביות שלך כמדען נתונים.
בניית ETLs ב- Snowflake ו- Python
לפני שנקפוץ לקידוד מוטב שאסביר בקצרה מה זה Snowflake. זו שאלה ששאלתי לאחרונה כשהצוות שלי החליט להתחיל להשתמש בו. ברמה גבוהה מדובר במחסן נתונים בענן. אחרי ששיחקתי איתו זמן מה הבנתי כמה הוא חזק. אני חושב שבשבילי, אחת התכונות השימושיות ביותר היא המחסנים הווירטואליים שבהם אתה יכול להשתמש. מחסן וירטואלי נותן לך גישה לאותם נתונים אך הוא בלתי תלוי לחלוטין במחסנים וירטואליים אחרים, כך שמשאבי מחשוב אינם משותפים בין צוותים. זה הוכח מאוד שימושי מכיוון שהוא מסיר כל פוטנציאל לבעיות ביצועים הנגרמות על ידי משתמשים אחרים המבצעים שאילתות במהלך היום. זה הביא פחות תסכול ובזבוז זמן בהמתנה להפעלת שאילתות.
מכיוון שאנו הולכים להשתמש ב- Snowflake, אפרט בקצרה כיצד תוכל להגדיר אותו ולהתחיל להתנסות בו בעצמך. אנחנו צריכים לעשות את הפעולות הבאות:
- הגדר חשבון Snowflake
- קבל את הנתונים שלנו לתוך Snowflake
- כתוב ובדוק את השאילתות שלנו באמצעות SQL וממשק המשתמש של Snowflake
- כתוב מחלקת Python שיכולה לבצע את השאילתות שלנו כדי ליצור את מערך הנתונים הסופי שלנו למידול
הקמת חשבון היא קלה כמו הרשמה לגרסת ניסיון בחינם אצלם אתר אינטרנט. לאחר שתעשה זאת תוכל להוריד את ה- snowsql CLI כאן. זה יעשה את זה פשוט להוסיף נתונים ל- Snowflake. לאחר ביצוע השלבים הללו נוכל לנסות ולהתחבר ל- Snowflake באמצעות האישורים שלנו ושורת הפקודה.
snowsql -a <account_name> -u <user_name>
אתה יכול למצוא את שם החשבון שלך בכתובת ה-URL כאשר אתה מתחבר ל-Snowflake UI. זה אמור להיראות בערך כך: xxxxx.europe-west2.gcp. אוקיי, בואו נעבור לשלב הבא ונכניס את הנתונים שלנו ל- Snowflake. יש כמה שלבים שעלינו לבצע כאן, כלומר:
- צור את המחסן הוירטואלי שלנו
- צור מסד נתונים
- הגדר וצור את הטבלאות שלנו
- צור טבלת הצגה עבור קובצי ה-CSV שלנו
- העתקת הנתונים לטבלאות שלנו
למרבה המזל זה לא קשה מדי ואנחנו יכולים לעשות את זה לחלוטין באמצעות snowsql CLI. עבור הפרויקט הזה, אני אשתמש במערך נתונים קטן יותר ממה שהייתי רוצה, אבל לצערי, אני לא יכול להשתמש באף אחד מהנתונים של החברה שלי וזה יכול להיות די קשה למצוא מערכי נתונים גדולים מתאימים באינטרנט. עם זאת מצאתי כמה נתוני עסקאות מ-Dunnhumby שזמינים באופן חופשי ב- קגל. רק בשביל בעיטות למרות שאני יוצר מערך נתונים סינתטי גדול בהרבה באמצעות הנתונים האלה כדי לבדוק עד כמה Dask מתמודד עם האתגר בהשוואה ל-sklearn.
קודם כל, עלינו להגדיר מחסן וירטואלי ומסד נתונים באמצעות הפקודות הבאות בממשק המשתמש של Snowflake.
לִיצוֹר or להחליף מחסן אנליטיקס_wh עם
warehouse_size="X-SMALL"
auto_suspend=180
auto_resume=true
initially_suspended=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 יכול לטעון ישירות את הקבצים מהשלב שלנו לטבלאות שלנו. אנחנו יכולים להשתמש ב PUT הפקודה לשים קבצים מקומיים בשלב שלנו ולאחר מכן את העתק לתוך הפקודה להנחות את 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 או בשורת הפקודה לאחר הכניסה ל- 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
בשלב הבא זה, נכתוב את השאילתות כדי ליצור את היעד שלנו, את התכונות שלנו, ולאחר מכן נפיק לבסוף מערך נתוני אימון. גישה אחת ליצירת מערך נתונים למידול היא לקרוא נתונים אלה לזיכרון ולהשתמש בפנדות כדי ליצור תכונות חדשות ולחבר את כל מסגרות הנתונים יחד. זו בדרך כלל הגישה שאתה רואה ב- Kaggle ובמדריכים מקוונים אחרים. הבעיה עם זה היא שזה לא מאוד יעיל, במיוחד כשאתה עובד עם מערכי נתונים בגודל סביר. מסיבה זו, זה רעיון הרבה יותר טוב להוציא את ההרמה הכבדה למיקור חוץ למשהו כמו Snowflake אשר מטפל היטב במערכי נתונים מסיביים וכנראה יחסוך לך כמות עצומה של זמן. אני לא אקדיש זמן רב לצלול לפרטים הספציפיים של מערך הנתונים שלנו כאן מכיוון שהוא לא ממש חיוני למה שאני מנסה להראות. באופן כללי, עם זאת, תרצה להקדיש זמן לא מבוטל לחקירה והבנת הנתונים שלך לפני שתתחיל לעשות מודלים. המטרה של שאילתות אלו תהיה לעבד מראש את הנתונים וליצור כמה תכונות פשוטות בהן נוכל להשתמש מאוחר יותר במודלים שלנו.
הגדרת יעד
ברור שמרכיב חיוני של למידת מכונה מפוקחת הוא הגדרת יעד מתאים לניבוי. במקרה השימוש שלנו, נחזה נטישה על ידי חישוב אם משתמש יבצע ביקור נוסף בתוך שבועיים לאחר שבוע הפסקה. הבחירה של שבועיים היא די שרירותית ותלויה בבעיה הספציפית שאנו מנסים לפתור, אבל בוא נניח שזה בסדר עבור הפרויקט הזה. באופן כללי, תרצה לנתח בקפידה את הלקוחות שלך כדי להבין את ההתפלגות בפערים בין ביקורים כדי להגיע להגדרה מתאימה של נטישה.
הרעיון המרכזי כאן הוא שלכל טבלה אנו רוצים שתהיה שורה אחת לכל household_key המכילה ערכים עבור כל אחת מהתכונות שלנו.
תכונות מסע פרסום
תכונות עסקה
להלן אנו יוצרים כמה מדדים פשוטים המבוססים על נתונים סטטיסטיים מצטברים, כגון ממוצע, סטית תקן מרבית.
מאפיינים דמוגרפיים
למערך הנתונים הזה יש הרבה נתונים חסרים אז החלטתי להשתמש כאן בזקיפה. יש הרבה טכניקות בחוץ לנתונים חסרים, החל מהורדת הנתונים החסרים ועד לשיטות זקיפה מתקדמות. זה עתה עשיתי לעצמי חיים קלים כאן והחלפתי ערכים חסרים במצב. לא בהכרח הייתי ממליץ לנקוט בגישה זו באופן כללי מכיוון שהבנת מדוע הנתונים הללו חסרים היא באמת חשובה בהחלטה כיצד להתמודד איתם, אבל למטרות הדוגמה הזו, אני אקח את הגישה הקלה. תחילה אנו מחשבים את המצב עבור כל אחת מהתכונות שלנו ולאחר מכן משתמשים בהתאחדות כדי להחליף כל שורה במצב אם חסרים נתונים.
נתוני הדרכה
לבסוף, אנו בונים שאילתה עבור נתוני ההדרכה שלנו על ידי צירוף הטבלאות הראשיות שלנו יחד ובסופו של דבר עם טבלה המכילה את היעד שלנו, מסע הפרסום, העסקאות והמאפיינים הדמוגרפיים שלנו, שבה נוכל להשתמש כדי לבנות מודל.
בקיצור, למי שמעוניין ללמוד עוד על התכונות והניואנסים של Snowflake אמליץ על הספר הבא: ספר בישול של פתית שלג. התחלתי לקרוא את הספר הזה והוא מלא במידע מועיל מאוד על איך להשתמש ב- Snowflake ונכנס לפרטים הרבה יותר ממה שאני עושה כאן.
קוד פייתון עבור ETL
היצירה האחרונה שאנו דורשים עבור ETL זה היא לכתוב סקריפט לביצועו. עכשיו, זה באמת נדרש רק אם אתה מתכנן להפעיל ETL כזה באופן קבוע, אבל זה תרגול טוב ומקל הרבה יותר על הפעלת ה-ETL לפי הצורך.
בואו נדון בקצרה במרכיבים העיקריים של שיעור EtlTraining שלנו. הכיתה שלנו לוקחת קלט אחד שהוא שבוע הפסיקה. זה נובע מהאופן שבו נתונים מוגדרים במערך הנתונים שלנו, אבל בדרך כלל, זה יהיה בפורמט תאריך התואם לתאריך הפריצה שאנו רוצים לבחור להפקת נתוני אימון.
אנו מאתחלים רשימה של השאילתות שלנו כדי שנוכל בקלות לעבור דרך אלה ולבצע אותן. אנו גם יוצרים מילון המכיל את הפרמטרים שלנו אותו אנו מעבירים לחיבור Snowflake שלנו. כאן אנו משתמשים במשתני סביבה שהגדרנו ב-Saturn Cloud. כאן הוא מדריך כיצד לעשות זאת. זה לא קשה מדי להתחבר ל-Snowflake, כל מה שאנחנו צריכים לעשות זה להשתמש במחבר Snowflake ולהעביר את מילון האישורים שלנו. אנו מיישמים זאת בשיטת Snowflake connect ומחזירים את החיבור הזה כתכונה.
כדי להפוך את השאילתות האלה לקצת יותר קלות להפעלה, אני שומר כל שאילתה בתור משתנה מחרוזת פיתון בקובץ ml_query_pipeline.py. שיטת execute_etl עושה בדיוק מה שהיא אומרת על הפח. אנו עוברים בלולאה דרך כל שאילתה, מפרמטים אותה, מבצעים אותה ומסיימים על ידי סגירת חיבור Snowflake.
כדי להפעיל את ה-ETL הזה אנחנו יכולים פשוט להקליד את הפקודות למטה בטרמינל. (כאשר ml_pipeline הוא השם של הסקריפט למעלה.)
python -m ml_pipeline -w 102 -j ‘train’
בקיצור, סביר להניח שתרצה להריץ ETL כזה במרווחי זמן קבועים. לדוגמה, אם ברצונך לבצע תחזיות יומיות, תצטרך ליצור מערך נתונים כזה בכל יום שיעבור למודל שלך כדי שתוכל לזהות מי מהלקוחות שלך צפוי להתנתק. אני לא אכנס לזה בפירוט כאן, אבל בעבודה שלי, אנחנו משתמשים ב- Airflow כדי לתזמן את ה-ETLs שלנו אז הייתי ממליץ לבדוק את זה אם אתה מעוניין. למעשה, לאחרונה קניתי ספר 'צינורות נתונים עם Apache Airflowשלדעתי הוא נהדר ובאמת נותן כמה דוגמאות מוצקות ועצות כיצד להשתמש בזרימת אוויר.
דסק ודוגמנות
כעת, לאחר שבנו את צינור הנתונים שלנו, אנו יכולים להתחיל לחשוב על מודלים. המטרה העיקרית הנוספת שיש לי לפוסט הזה היא להדגיש את היתרונות של השימוש ב-Dask כחלק מתהליך הפיתוח של ML ולהראות לכם כמה זה קל לשימוש.
עבור חלק זה של הפרויקט, השתמשתי גם ענן שבתאי שזה כלי ממש נחמד שנתקלתי בו לאחרונה שמאפשר לנו לרתום את הכוח של Dask על פני אשכול מחשבים בענן. היתרונות העיקריים של השימוש בשבתאי עבורי הם שזה ממש קל לשתף את העבודה שלך, סופר פשוט להגדיל את המחשוב שלך מתי וכאשר אתה צריך את זה ויש לו אפשרות שכבה חינמית. פיתוח מודלים באופן כללי הוא מקרה שימוש ממש טוב עבור Dask מכיוון שאנו בדרך כלל רוצים לאמן חבורה של דגמים שונים ולראות מה עובד הכי טוב. ככל שנוכל לעשות זאת מהר יותר כך יהיה לנו יותר זמן להתמקד בהיבטים חשובים אחרים של פיתוח מודלים. בדומה ל- Snowflake אתה רק צריך להירשם כאן ואתה יכול מהר מאוד ליצור מופע של מעבדת Jupyter ולהתחיל להתנסות בו בעצמך.
עכשיו, אני מבין שבשלב הזה הזכרתי את Dask כמה פעמים אבל מעולם לא הסברתי באמת מה זה. אז תן לי לקחת רגע כדי לתת לך סקירה ברמה גבוהה מאוד של Dask ולמה אני חושב שהוא מדהים. פשוט מאוד, Dask היא ספריית פיתון שמנצלת את המחשוב המקביל כדי לאפשר לך לעבד ולבצע פעולות על מערכי נתונים גדולים מאוד. והחלק הטוב ביותר הוא שאם אתה כבר מכיר את Python, אז Dask צריך להיות מאוד פשוט מכיוון שהתחביר דומה מאוד.
הגרף שלהלן מדגיש את המרכיבים העיקריים של Dask.
מקור: תיעוד דאסק
אוספים מאפשרים לנו ליצור גרף של משימות אשר לאחר מכן ניתן לבצע על פני מספר מחשבים. חלק ממבני הנתונים הללו כנראה נשמעים די מוכרים כמו מערכים ומסגרות נתונים והם דומים למה שתמצאו ב-python אבל עם כמה הבדלים חשובים. לדוגמה, אתה יכול לחשוב על מסגרת נתונים של Dask כעל חבורה של מסגרות נתונים של פנדה הבנויות בצורה כזו שמאפשרת לנו לבצע פעולות במקביל.
ממשיכים מהאוספים יש לנו את המתזמן. ברגע שאנו יוצרים את גרף המשימות, המתזמן מטפל בשאר עבורנו. הוא מנהל את זרימת העבודה ושולח את המשימות הללו למחשב יחיד או מפיץ אותן באשכול. אני מקווה שזה נותן לך סקירה קצרה מאוד של איך Dask עובד. למידע נוסף, אני מציע לבדוק את תיעוד או זו ספר. שניהם משאבים טובים מאוד להעמיק בנושא זה.
קוד פייתון לדוגמנות
כשמדגמנים, אני נוטה לקבל מספר קטן של אלגוריתמים שתמיד אנסה קודם. זה בדרך כלל ייתן לי מושג טוב מה עשוי להתאים לבעיה הספציפית שיש לי. מודלים אלו הם רגרסיה לוגיסטית, יער אקראי ו- GradientBoosting. מניסיוני, כאשר עובדים עם נתונים טבלאיים אלגוריתמים אלו בדרך כלל יתנו לך תוצאות די טובות. להלן אנו בונים צינור דוגמנות של sclearn באמצעות 3 הדגמים הללו. המודלים המדויקים שבהם אנו משתמשים כאן לא ממש חשובים מכיוון שהצינור אמור לעבוד עבור כל מודל סיווג של sklearn, זו רק ההעדפה שלי.
בלי להתעסק יותר, בואו נצלול לתוך הקוד. למרבה המזל, העברנו את רוב העיבוד המקדים שלנו ל-Snowflake כך שלא נצטרך להתעסק עם נתוני האימון שלנו יותר מדי כאן, אבל נוסיף כמה שלבים נוספים באמצעות צינורות sclearn.
קטע הקוד הראשון למטה מציג את הצינור בעת שימוש ב-sklearn. שימו לב למערך הנתונים שלנו הוא מסגרת נתונים ישנה ופשוטה של פנדות ושלבי העיבוד המקדים שלנו מתבצעים כולם בשיטות sklearn. אין כאן שום דבר חריג במיוחד. אנו קוראים בנתונים שלנו מהטבלה שהופקה על ידי Snowflake ETL שלנו ומעבירים את זה לצינור למידה. שלבי הדוגמנות הרגילים חלים כאן. אנו מפצלים את מערך הנתונים לאימון ובודקים ועושים עיבוד מקדים, כלומר מייחסים ערכים חסרים באמצעות החציון, מדרגים את הנתונים ומקודדים חדים את הנתונים הקטגוריים שלנו. אני מעריץ גדול של צינורות sklearn ובעצם משתמש בהם בכל פעם שאני מפתח מודלים בימינו, הם באמת מקלים על קוד נקי ותמציתי.
כיצד מתפקד הצינור הזה במערך נתונים עם כ-2 מיליון שורות? ובכן, הפעלת הדגם הזה ללא כל כוונון היפרפרמטרים נמשכת כ-34 דקות. אוץ', קצת איטי. אתם יכולים לתאר לעצמכם כמה זמן זה ייקח בצורה עצומה אם נרצה לבצע כל סוג של כוונון היפרפרמטרים. אוקיי, אז לא אידיאלי אבל בואו נראה איך Dask מתמודד עם האתגר.
Dask ML Python Code
המטרה שלנו כאן היא לראות אם אנחנו יכולים לנצח את הצינור של sclearn למעלה, התראת ספוילר, אנחנו בהחלט יכולים. הדבר המגניב ב-Dask הוא שמחסום הכניסה כשאתה כבר מכיר את פיתון הוא די נמוך. אנחנו יכולים להפעיל את הצינור הזה ב-Dask רק עם כמה שינויים.
השינוי הראשון שוודאי תבחין בו הוא שיש לנו כמה יבואים שונים. אחד ההבדלים העיקריים בין צינור זה לקודם הוא שאנו נשתמש במסגרת נתונים של Dask במקום מסגרת נתונים של פנדה כדי לאמן את המודל שלנו. אתה יכול לחשוב על מסגרת נתונים של Dask כעל חבורה של מסגרות נתונים של פנדה שבהן נוכל לבצע חישובים על כל אחת מהן בו זמנית. זוהי הליבה של ההקבלה של Dask והיא מה שהולך להפחית את זמן האימון עבור צינור זה.
שימו לב שאנו משתמשים @dask.delayed בתור דקורטור שלנו load_training_data פוּנקצִיָה. זה מורה ל-Dask לעשות במקביל את הפונקציה הזו עבורנו.
אנחנו גם הולכים לייבא כמה שיטות עיבוד מראש וצינורות מ-Dask והכי חשוב, נצטרך לייבא את SaturnCluster שיאפשר לנו ליצור אשכול להדרכה של המודלים שלנו. הבדל מרכזי נוסף בקוד זה הוא שאנו משתמשים בו דסק.מתמיד לאחר פיצול מבחן הרכבת שלנו. לפני שלב זה, אף אחת מהפונקציות שלנו לא מחושבת בפועל עקב ההערכה העצלה של Dask. ברגע שאנו משתמשים בשיטת ה-persist למרות שאנו אומרים ל-Dask לשלוח את הנתונים שלנו לעובדים ולבצע את המשימות שיצרנו עד לנקודה זו ולהשאיר את האובייקטים הללו באשכול.
לבסוף, אנו מאמנים את הדגמים שלנו בשיטה המושהית. שוב, זה מאפשר לנו ליצור את הצינור שלנו בצורה עצלה. הצינור לא מבוצע עד שנגיע לקוד הזה:
fit_pipelines = dask.compute(*pipelines_)
הפעם לקח לנו רק 10 דקות להפעיל את הצינור הזה על אותו מערך נתונים בדיוק. זה מהירות של 3.4, לא עלוב מדי. כעת, אם נרצה, נוכל להאיץ את זה עוד יותר על ידי הגדלת משאבי המחשוב שלנו בלחיצת כפתור בשבתאי.
פריסת הצינור שלנו
ציינתי קודם שככל הנראה תרצה להפעיל צינור כזה באופן קבוע למדי באמצעות משהו כמו זרימת אוויר. במקרה אתה לא רוצה את הטרחה הראשונית של הגדרת הכל לזרימת אוויר Saturn Cloud מציע אלטרנטיבה פשוטה עם Jobs. Jobs מאפשרים לנו לארוז את הקוד שלנו ולהפעיל אותו במרווחי זמן קבועים או לפי הצורך. כל מה שאתה צריך לעשות הוא ללכת לפרויקט קיים וללחוץ על צור עבודה. ברגע שנעשה זאת, זה אמור להיראות כך:
מקור: שבתאי
מכאן, כל מה שאנחנו צריכים לעשות הוא לוודא שקבצי הפיתון שלנו למעלה נמצאים בספרייה שבתמונה ונוכל להזין את פקודת הפיתון שלנו למעלה
python -m ml_pipeline -w 102 -j 'train'
אנחנו יכולים גם להגדיר לוח זמנים באמצעות תחביר cron כדי להפעיל את ה-ETL על בסיס יומי אם נרצה. למעוניינים, הנה א הדרכה זה נכנס לכל העניינים.
מסקנות וטייק אווי
ובכן, הגענו לסוף הפרויקט שלנו בשלב זה. עכשיו ברור שהשארתי כמה חלקים מרכזיים במחזור הפיתוח של ML כמו כוונון היפרפרמטרים ופריסה של המודל שלנו אבל אולי אשאיר את זה ליום אחר. האם אני חושב שכדאי לך לנסות את Dask? אני לא מומחה בשום פנים ואופן, אבל ממה שראיתי עד כה זה בהחלט נראה ממש שימושי ואני מאוד נרגש להתנסות בו יותר ולמצוא הזדמנויות נוספות לשלב אותו בעבודה היומיומית שלי כמדען נתונים. אני מקווה שמצאתם את זה שימושי וגם אתם יכולים לראות כמה מהיתרונות של Snowflake ו-Dask ותתחילו להתנסות בהם בעצמכם.
משאבים
- צינורות נתונים עם Apache Airflow
- ספר בישול של פתית שלג
- מדעי נתונים בקנה מידה עם Python ו-Dask
- קורסרה: SQL למדעי הנתונים
כמה מהפוסטים האחרים שלי אולי תמצאו מעניינים
גישה בייסיאנית לחיזוי סדרות זמן
הערה: חלק מהקישורים בפוסט זה הם קישורי שותפים.
Bio you דניאל פולי הוא כלכלן לשעבר שהפך למדען נתונים ועובד בתעשיית המשחקים הניידים.
מְקוֹרִי. פורסם מחדש באישור.
מידע נוסף:
הסיפורים הגדולים ביותר ב 30 יום | |||||
---|---|---|---|---|---|
|
|
מקור: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- גישה
- חֶשְׁבּוֹן
- נוסף
- יתרון
- עצה
- שותפים
- אלגוריתמים
- תעשיות
- אמזון בעברית
- אַפָּשׁ
- AREA
- סביב
- המכונית
- הטוב ביותר
- קצת
- לִבנוֹת
- בִּניָן
- צרור
- מבצע
- מקרים
- גרם
- לאתגר
- שינוי
- בדיקה
- מיון
- קרוב יותר
- ענן
- קוד
- סִמוּל
- רְכִיב
- לחשב
- מחשבים
- מחשוב
- Coursera
- יוצרים
- אישורים
- לקוחות
- נתונים
- מדע נתונים
- מדען נתונים
- מערך נתונים
- מחסן נתונים
- מסד נתונים
- יְוֹם
- עסקה
- למידה עמוקה
- דמוגרפי
- פרט
- לפתח
- צעצועי התפתחות
- DID
- מְנַהֵל
- יְעִילוּת
- מהנדסים
- סביבה
- לְנַסוֹת
- תכונות
- בסופו של דבר
- סוף
- ראשון
- להתמקד
- לעקוב
- פוּרמָט
- חופשי
- מלא
- פונקציה
- המשחקים
- תעשיית המשחקים
- כללי
- טוב
- GPUs
- גדול
- מדריך
- כאן
- גָבוֹהַ
- להבליט
- איך
- איך
- HTTPS
- עצום
- רעיון
- לזהות
- תמונה
- להגדיל
- תעשייה
- מידע
- מידע
- בעיות
- IT
- עבודה
- מקומות תעסוקה
- להצטרף
- לקפוץ
- מפתח
- גָדוֹל
- לִלמוֹד
- למידה
- רמה
- סִפְרִיָה
- קו
- לינקדין
- רשימה
- לִטעוֹן
- מקומי
- ארוך
- למידת מכונה
- מדדים
- מִילִיוֹן
- ML
- סלולרי
- משחקים ניידים
- מודל
- המהלך
- כלומר
- תכונות חדשות
- המיוחדות שלנו
- באינטרנט
- תפעול
- אפשרות
- אחר
- ביצועים
- שפע
- הודעות
- כּוֹחַ
- התחזיות
- מיוצר
- פִּריוֹן
- פּרוֹיֶקט
- ציבורי
- פיתון
- קריאה
- להפחית
- נסיגה
- משאבים
- REST
- תוצאות
- הפעלה
- ריצה
- סולם
- דרוג
- מדע
- מדענים
- סדרה
- סט
- הצבה
- שיתוף
- משותף
- פָּשׁוּט
- קטן
- So
- לפתור
- מְהִירוּת
- לבלות
- הוצאה
- לְסוֹבֵב
- לפצל
- SQL
- התמחות
- התחלה
- החל
- סטטיסטיקה
- סיפורים
- נהירה
- יעד
- מבחן
- חושב
- זמן
- חלק עליון
- לגעת
- הדרכה
- עסקה
- עסקות
- מִשׁפָּט
- הדרכות
- ui
- us
- משתמשים
- וירטואלי
- מחסן
- שבוע
- מה
- בתוך
- תיק עבודות
- עובדים
- זרימת עבודה
- עובד
- כתיבה
- X
- שנים