מ-notebook ל-Kubeflow Pipelines עם MiniKF וקייל

1. מבוא

Kubeflow הוא ערכת כלים ללמידת מכונה ל-Kubernetes. הפרויקט מוקדש להפיכת פריסות של תהליכי עבודה של למידת מכונה (ML) ב-Kubernetes לפשוטות, לניידות ולניתנות להתאמה לעומס (scaling). המטרה היא לספק דרך פשוטה לפריסת מערכות קוד פתוח מהשורה הראשונה ללמידת מכונה בתשתיות מגוונות.

איך נראה פריסת Kubeflow?

פריסת Kubeflow היא:

  • נייד – פועל בכל אשכול Kubernetes, בין אם הוא נמצא ב-Google Cloud Platform‏ (GCP), במקום או אצל ספקים שונים.
  • ניתן להרחבה – אפשר להשתמש במשאבים משתנים, והמגבלה היחידה היא מספר המשאבים שהוקצו לאשכול Kubernetes.
  • ניתן להרכבה – משופר באמצעות Service Workers כדי לפעול אופליין או ברשתות באיכות נמוכה.

זוהי דרך לארגן מיקרו-שירותים עם צימוד רופף כיחידה אחת ולפרוס אותם במיקומים שונים, בין אם זה מחשב נייד או הענן.

Codelab זה ידריך אתכם ביצירת פריסת Kubeflow משלכם באמצעות MiniKF, ובהרצת תהליך עבודה של Kubeflow Pipelines מתוך מחברת Jupyter.

מה תפַתחו

ב-Codelab הזה תלמדו איך ליצור צינור עיבוד נתונים מורכב למדע הנתונים באמצעות Kubeflow Pipelines, בלי להשתמש בפקודות CLI או ב-SDK. לא נדרש ידע ב-Kubernetes או ב-Docker. בסיום התהליך, התשתית שלכם תכלול:

  • מכונה וירטואלית של MiniKF ‏ (Mini Kubeflow) שמתקינה באופן אוטומטי:
  • ‫Kubernetes (באמצעות Minikube)
  • Kubeflow
  • Kale, כלי להמרת קובצי Jupyter Notebooks למטרות כלליות לזרימות עבודה של Kubeflow Pipelines ( GitHub)
  • Arrikto Rok לניהול גרסאות של נתונים ולשחזור תוצאות

מה תלמדו

  • איך מתקינים את Kubeflow באמצעות MiniKF
  • איך להמיר את קובצי ה-Notebook של Jupyter ל-Kubeflow Pipelines בלי להשתמש בפקודות CLI או ב-SDK
  • איך מריצים Kubeflow Pipelines מתוך מחברת בלחיצת כפתור
  • איך ליצור גרסאות אוטומטיות של הנתונים במחברת ובכל שלב בצינור

מה תצטרכו

זהו Codelab מתקדם שמתמקד ב-Kubeflow. למידע נוסף על הרקע ועל הפלטפורמה, אפשר לעיין במסמכי העזרה בנושא מבוא ל-Kubeflow. מושגים ובלוקים של קוד שלא רלוונטיים מוצגים בקצרה, ואתם יכולים פשוט להעתיק ולהדביק אותם.

2. הגדרת הסביבה

הגדרת מזהה הפרויקט ב-GCP ושם האשכול

כדי למצוא את מזהה הפרויקט, עוברים לחלונית 'דף הבית' ב-GCP Console, שנמצאת בתפריט ההמבורגר בפינה הימנית העליונה. אם המסך ריק, לוחצים על 'כן' בהנחיה כדי ליצור מרכז בקרה.

פתיחת קונסולת GCP

3fdc4329995406a0.png

אם הפרויקט לא נבחר עדיין, לוחצים על Select a project:

e8952c0b96067dea.png

בוחרים את הפרויקט. צריך להיות לכם רק אחד מהם:

fe25c1925487142.png

3. התקנה של MiniKF

יצירת מכונת Compute

ב-GCP Marketplace, מחפשים את MiniKF.

בוחרים את המכונה הווירטואלית MiniKF של Arrikto.

d6b423c1911ea85a.png

לוחצים על הלחצן הפעלה ב-Compute Engine ובוחרים את הפרויקט.

b5eeba43053db4bd.png

בחלון Configure & Deploy (הגדרה ופריסה), בוחרים שם למופע MiniKF ומשאירים את אפשרויות ברירת המחדל. אחר כך לוחצים על הלחצן פריסה.

dc401e2bb5a884d9.png

מחכים שהמכונה של MiniKF Compute תופעל.

5228086caadc44c6.png

כניסה ל-MiniKF

כשהמכונה הווירטואלית MiniKF פועלת, לוחצים על לחצן ה-SSH כדי להתחבר ולהיכנס. פועלים לפי ההוראות במסך כדי להריץ את הפקודה minikf, שתתחיל את הפריסה של Minikube,‏ Kubeflow ו-Rok. הפעולה תימשך כמה דקות.

774e83c3e96cf7b3.png

כניסה ל-Kubeflow

אחרי שההתקנה מסתיימת וכל הפודים מוכנים, עוברים אל מרכז הבקרה של MiniKF. מתחברים ל-Kubeflow באמצעות שם המשתמש והסיסמה של MiniKF.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

משתמשי Chrome יראו את המסך הזה:

6258e0f09e46a6c2.png

משתמשי Firefox יראו את המסך הזה:

8cff90ce2f0670bd.png

משתמשי Safari יראו את המסך הזה:

1c6fd768d71c0a92.png

כניסה ל-Rok

אחרי שנכנסים ל-Kubeflow, פותחים את התפריט הימני על ידי לחיצה על סמל האפשרויות הנוספות (3 קווים). עוברים אל Snapshot Store ומתחברים ל-Rok באמצעות שם המשתמש והסיסמה של MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

מעולה! הפריסה של MiniKF ב-GCP הושלמה בהצלחה. עכשיו אפשר ליצור מחברות, לכתוב את קוד ה-ML ולהריץ את Kubeflow Pipelines. משתמשים ב-Rok לניהול גרסאות של נתונים ולשחזור נתונים.

4. הרצת צינור (Pipeline) מתוך Notebook

במהלך הקטע הזה, תריצו את הדוגמה של הטיטאניק, תחרות ב-Kaggle שבה מנסים לחזות אילו נוסעים שרדו את טביעת הטיטאניק.

יצירת שרת Notebook

עוברים לקישור Notebook Servers (שרתי מחברות) במרכז הבקרה המרכזי של Kubeflow.

4115cac8d8474d73.png

לוחצים על שרת חדש.

f9303c0a182e47f5.png

מזינים שם לשרת המחברות.

a2343f30bc9522ab.png

חשוב לוודא שבחרתם את התמונה הזו:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

מוסיפים נפח נתונים חדש וריק בגודל 5GB ונותנים לו את השם data.

8544d9b05826b316.png

לוחצים על הפעלה כדי ליצור את שרת ה-Notebook.

28c024bcc55cc70a.png

כשהשרת של המחברת זמין, לוחצים על Connect כדי להתחבר אליו.

2f06041475f45d3.png

הורדת הנתונים ופנקס הרשימות

תיפתח כרטיסייה חדשה עם דף הנחיתה של JupyterLab. יוצרים טרמינל חדש ב-JupyterLab.

2482011174f7bc75.png

בחלון Terminal, מריצים את הפקודות האלה כדי לנווט לתיקייה data ולהוריד את המחברת ואת הנתונים שבהם תשתמשו בהמשך שיעור ה-Lab.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

המאגר הזה מכיל סדרה של דוגמאות שנבחרו בקפידה עם נתונים ומחברות עם הערות. עוברים לתיקייה data/examples/titanic-ml-dataset/ בסרגל הצד ופותחים את המחברת titanic_dataset_ml.ipynb.

c85baf68b36c63b2.png

עיון בקוד ה-ML של האתגר Titanic

מריצים את ה-notebook שלב אחר שלב. שימו לב שהקוד נכשל כי חסרה ספרייה.

bf2451fd7407e334.png

חוזרים לטרמינל ומתקינים את הספרייה החסרה.

pip3 install --user seaborn

d90593b21425dd12.png

מפעילים מחדש את ליבת ה-Notebook בלחיצה על סמל הרענון.

a21f5f563b36ce4d.png

מריצים שוב את התא עם הספריות הנכונות שהותקנו ורואים שהפעולה מצליחה.

המרת מחברת ל-Kubeflow Pipeline

כדי להפעיל את Kale, לוחצים על סמל Kubeflow בחלונית הימנית.

3f4f9c93b187b105.png

בודקים את התלות של כל תא. אפשר לראות איך כמה תאים יכולים להיות חלק משלב אחד בצינור, ואיך שלב בצינור יכול להיות תלוי בשלבים קודמים.

15cca32444c1f12e.png

לוחצים על הלחצן הידור והרצה.

bde5cef34f00e258.png

צופים בהתקדמות של תמונת המצב.

9408f46abb2493f5.png

צופים בהתקדמות של הפעלת צינור עיבוד הנתונים.

9edbde68032f5e4b.png

לוחצים על הקישור כדי לעבור לממשק המשתמש של Kubeflow Pipelines ולראות את ההרצה.

a81646a22584e1b9.png

מחכים לסיום.

44bee7dc0d24ec21.png

d377b6d574a4970.png

מעולה! הרצתם עכשיו צינור Kubeflow מקצה לקצה, החל מה-notebook שלכם.

5. שחזור עם תמונות מצב של נפח אחסון

בדיקת התוצאות

כדאי לעיין ביומנים של השלב השני לפני האחרון בצינור Results. שימו לב שכל התחזיות מציגות ציון של 100%. מדען נתונים מנוסה יזהה מיד את החשד. זהו סימן טוב לכך שהמודלים שלנו לא מבצעים הכללה, אלא מתאימים יתר על המידה למערך נתוני האימון. הסיבה לכך היא כנראה בעיה בנתונים שהמודלים צורכים.

2a594032c2dd6ff6.png

שחזור המצב הקודם

למזלנו, Rok מטפל בניהול גרסאות של הנתונים וביצירה מחדש של כל הסביבה כפי שהיא הייתה בזמן שלחצתם על הלחצן Compile and Run (הידור והרצה). כך תוכלו לחזור אחורה בזמן ולראות את הנתונים והקוד שלכם. אז נחזור למצב של צינור הנתונים לפני אימון אחד מהמודלים ונראה מה קורה. מעיינים בשלב randomforest ואז לוחצים על Artifacts.

4f25ca4560711b23.png

פועלים לפי השלבים במאמר בנושא Markdown, כלומר לוחצים על הקישור המתאים כדי להציג את התמונה ב-Rok UI.

e533bc781da9355a.png

מעתיקים את כתובת ה-URL של Rok.

d155d19731b5cedd.png

עוברים לקישור Notebook Servers (שרתי מחברות).

aafeab01f3ef0863.png

לוחצים על שרת חדש.

f2265a64e8f9d094.png

מדביקים את כתובת ה-URL של Rok שהעתקתם קודם ולוחצים על הכפתור מילוי אוטומטי.

9ba4d4128a3bdeea.png

מזינים שם למחברת.

7685c3bf35fc74b2.png

חשוב לוודא שבחרתם את התמונה הזו:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

לוחצים על הפעלה כדי ליצור את שרת ה-Notebook.

28c024bcc55cc70a.png

כשהשרת של המחברת זמין, לוחצים על Connect כדי להתחבר אליו.

34955a64ae316de1.png

שימו לב: המחברת נפתחת בתא המדויק של שלב צינור עיבוד הנתונים שיצרתם.

a1f7c81f349e0364.png

ברקע, Kale חידש את מצב המחברת על ידי ייבוא של כל הספריות וטעינה של המשתנים מהשלבים הקודמים.

ניפוי באגים במצב קודם

מוסיפים פקודת הדפסה לתא הזה:

print(acc_random_forest)

מריצים את התא הפעיל על ידי הקשה על Shift + Return כדי לאמן מחדש את יער ההחלטה ולהדפיס את הניקוד. המספר הוא 100.

e2a8a3b5465fcb5d.png

עכשיו נבדוק אם יש משהו מוזר בנתוני האימון. כדי לבדוק ולפתור את הבעיה הזו, מוסיפים תא מעל לסימון של יער אקראי. לשם כך, בוחרים את התא הקודם ולוחצים על סמל הפלוס (+).

d1077f32dff9620f.png

מוסיפים את הטקסט הבא ומריצים את התא כדי להדפיס את קבוצת הנתונים לאימון.

train_df

2854798ff01aed4e.png

אופס! העמודה עם תוויות האימון (Survived) נכללה בטעות כמאפייני קלט. המודל למד להתמקד בתכונה 'האם הנוסע שרד' ולהתעלם מכל השאר, וכך הוא מזוהם. העמודה הזו תואמת בדיוק ליעד של המודל ולא מופיעה במהלך החיזוי, ולכן צריך להסיר אותה ממערך הנתונים לאימון כדי לאפשר למודל ללמוד מהתכונות האחרות.

הוספת תיקון באג

כדי להסיר את העמודה הזו, עורכים את התא כדי להוסיף את הפקודה הבאה:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

מפעילים את Kale ומוודאים שהתא שמסיר את התוויות Survived הוא חלק משלב הצינור featureengineering (צבע המתאר שלו צריך להיות זהה).

מריצים שוב את צינור העיבוד בלחיצה על הלחצן הידור והרצה.

לוחצים על הקישור כדי לעבור לממשק המשתמש של Kubeflow Pipelines ולראות את ההרצה.

מחכים לסיום השלב results וצופים ביומנים כדי לראות את התוצאות הסופיות. עכשיו יש לכם ציוני חיזוי ריאליים!

8c6a9676b49e5be8.png

6. הסרת המשאבים

כיבוי סופי של המכונה הווירטואלית של MiniKF

עוברים אל Deployment Manager במסוף GCP ומוחקים את הפריסה minikf-1.

7. מזל טוב

כל הכבוד, הפעלתם בהצלחה תהליך עבודה של מדעי הנתונים מקצה לקצה באמצעות Kubeflow‏ (MiniKF),‏ Kale ו-Rok.

מה השלב הבא?

הצטרפות לקהילת Kubeflow:

קריאה נוספת