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

1. מבוא

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

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

פריסת Kubeflow היא:

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

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

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

מה תפַתחו

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

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

מה תלמדו

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

מה צריך להכין

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

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

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

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

לפתיחת מסוף GCP

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. התקנת MiniKF

יצירת מכונה של Compute

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

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

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

בקטע הגדרה ו- Deploy (פריסה), בוחרים name למכונה של MiniKF ומשאירים את אפשרויות ברירת המחדל. לאחר מכן לוחצים על הלחצן פריסה.

dc401e2bb5a884d9.png

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

5228086caadc44c6.png

התחברות אל MiniKF

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

774e83c3e96cf7b3.png

התחברות ל-Kubeflow

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

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

6258e0f09e46a6c2.png

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

8cff90ce2f0670bd.png

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

1c6fd768d71c0a92.png

התחברות ל-Rok

אחרי ההתחברות ל-Kubeflow, לוחצים על סמל ההמבורגר בתפריט הימני. מנווטים אל ה-Snapshot Store ומתחברים ל-Rok באמצעות שם המשתמש והסיסמה של MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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

4. איך מריצים צינור עיבוד נתונים מתוך ה-notebook

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

יצירת שרת notebook

עוברים לקישור שרתי Notebooks במרכז הבקרה המרכזי של Kubeflow.

4115cac8d8474d73.png

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

f9303c0a182e47f5.png

מציינים שם לשרת ה-notebook.

a2343f30bc9522ab.png

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

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

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

8544d9b05826b316.png

לוחצים על Launch (הפעלה) כדי ליצור את שרת ה-notebook.

28c024bcc55cc70a.png

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

2f06041475f45d3.png

הורדה של הנתונים וה-notebook

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

2482011174f7bc75.png

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

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

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

c85baf68b36c63b2.png

קודמים ללמידת מכונה של אתגר Titanic

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

bf2451fd7407e334.png

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

pip3 install --user seaborn

d90593b21425dd12.png

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

a21f5f563b36ce4d.png

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

המרת ה-notebook ל-Kubeflow Pipeline

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

3f4f9c93b187b105.png

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

15cca32444c1f12e.png

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

bde5cef34f00e258.png

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

9408f46abb2493f5.png

כדאי לצפות בהתקדמות של Pipeline Run.

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

צריך להמתין להשלמת התהליך.

44bee7dc0d24ec21.png

d377b6d574a4970.png

מעולה! הרצת את Kubeflow Pipeline מקצה לקצה מה-notebook שלך.

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

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

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

2a594032c2dd6ff6.png

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

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

4f25ca4560711b23.png

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

e533bc781da9355a.png

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

d155d19731b5cedd.png

עוברים לקישור שרתי Notebook.

aafeab01f3ef0863.png

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

f2265a64e8f9d094.png

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

9ba4d4128a3bdeea.png

מציינים שם ל-notebook.

7685c3bf35fc74b2.png

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

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

לוחצים על Launch (הפעלה) כדי ליצור את שרת ה-notebook.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

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

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

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

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 (הוא צריך להיות באותו צבע מתאר).

כדי להריץ את צינור עיבוד הנתונים שוב, לוחצים על הלחצן Compile and Run

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

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

8c6a9676b49e5be8.png

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

השמדת מכונת ה-VM של MiniKF

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

7. מזל טוב

כל הכבוד! השלמת בהצלחה תהליך עבודה מקצה לקצה בתחום מדעי הנתונים באמצעות Kubeflow (MiniKF), קייל ורוק!

מה השלב הבא?

מצטרפים לקהילת Kubeflow:

קריאה נוספת