1. מבוא
| Kubeflow הוא ערכת כלים ללמידת מכונה ל-Kubernetes. הפרויקט מוקדש להפיכת פריסות של תהליכי עבודה של למידת מכונה (ML) ב-Kubernetes לפשוטות, לניידות ולניתנות להתאמה לעומס (scaling). המטרה היא לספק דרך פשוטה לפריסת מערכות קוד פתוח מהשורה הראשונה ללמידת מכונה בתשתיות מגוונות. |
איך נראה פריסת Kubeflow?
פריסת Kubeflow היא:
- נייד – פועל בכל אשכול Kubernetes, בין אם הוא נמצא ב-Google Cloud Platform (GCP), במקום או אצל ספקים שונים.
- ניתן להרחבה – אפשר להשתמש במשאבים משתנים, וההגבלה היחידה היא מספר המשאבים שהוקצו לאשכול Kubernetes.
- אפשרות להרכבה – מאפשרת להגדיר שלבים עצמאיים לתהליך עבודה מלא של למידת מכונה, ולבחור מתוך קבוצה נבחרת של מסגרות וספריות של למידת מכונה.
Kubeflow מאפשר לארגן מיקרו-שירותים עם צימוד רופף כיחידה אחת ולפרוס אותם במגוון מיקומים, כולל במחשב נייד, בתשתית מקומית או בענן.
ב-Codelab הזה תלמדו איך ליצור פריסת Kubeflow משלכם באמצעות MiniKF, ואז להריץ תהליך עבודה של Kubeflow Pipelines עם כוונון היפר-פרמטרים כדי לאמן מודל ולהציג אותו. אתם מבצעים את כל הפעולות האלה מתוך Jupyter Notebook.
מה תפַתחו
ב-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 עם אופטימיזציה של היפר-פרמטרים מתוך מחברת בלחיצת כפתור
- איך ליצור גרסאות אוטומטיות של הנתונים במחברת ובכל שלב בצינור
מה תצטרכו
- פרויקט פעיל ב-GCP שבו יש לכם הרשאות בעלים
זהו Codelab מתקדם שמתמקד ב-Kubeflow. למידע נוסף על הרקע ועל הפלטפורמה, אפשר לעיין במסמכי העזרה בנושא מבוא ל-Kubeflow. מושגים ובלוקים של קוד שלא רלוונטיים מוצגים בקצרה, ואתם יכולים פשוט להעתיק ולהדביק אותם.
2. הגדרת הסביבה
הגדרת פרויקט GCP
כדי ליצור פרויקט GCP או להגדיר פרויקט GCP קיים, פועלים לפי השלבים הבאים. אם אתם מתכננים להשתמש בפרויקט קיים ב-GCP, אתם צריכים לוודא שהפרויקט עומד בדרישות המינימום שמתוארות בהמשך. השלב הראשון הוא לפתוח את הכלי לניהול משאבים ב-GCP Console.
יוצרים פרויקט חדש או בוחרים פרויקט קיים:

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

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

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

3. התקנה של MiniKF
יצירת מכונת Compute שכוללת את MiniKF
ב-GCP Marketplace, מחפשים את MiniKF.
בוחרים את המכונה הווירטואלית MiniKF של Arrikto:

לוחצים על הלחצן הפעלה ובוחרים את הפרויקט:

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

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

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

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


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

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

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

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


מעולה! הפריסה של MiniKF ב-GCP הושלמה בהצלחה. עכשיו אפשר ליצור מחברות, לכתוב את קוד ה-ML, להריץ את Kubeflow Pipelines ולהשתמש ב-Rok לניהול גרסאות של נתונים ולשחזור.
4. הרצת צינור מתוך ה-notebook
במהלך הקטע הזה, תריצו את הדוגמה לזיהוי גזע כלבים, פרויקט בתוכנית Udacity AI Nanodegree. בהינתן תמונה של כלב, המודל הסופי יספק הערכה של גזע הכלב.
יצירת שרת Notebook באשכול Kubeflow
עוברים לקישור Notebooks במרכז הבקרה של Kubeflow.

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

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

מוודאים שבחרתם את קובץ האימג' הבא של Docker (שימו לב שתג האימג' עשוי להיות שונה):
gcr.io/arrikto/jupyter-kale:f20978e
מוסיפים נפח נתונים חדש וריק בגודל 5GB ונותנים לו את השם data.

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

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

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

בחלון הטרמינל, מריצים את הפקודות האלה כדי לנווט לתיקייה data ולהוריד את המחברת ואת הנתונים שבהם תשתמשו בהמשך שיעור ה-Lab:
cd data/ git clone https://github.com/kubeflow-kale/kale
המאגר המשוכפל מכיל סדרה של דוגמאות שנבחרו בקפידה עם נתונים ומחברות עם הערות.
בסרגל הצד, עוברים לתיקייה data/kale/examples/dog-breed-classification/ ופותחים את המחברת dog-breed.ipynb.

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

בדרך כלל, כדי להריץ את מחברת ה-Notebook הזו כצינור Kubeflow, צריך ליצור קובץ אימג' של Docker חדש שתכלול את הספריות שהותקנו לאחרונה. למזלנו, Rok ו-Kale דואגים שכל הספריות שתתקינו במהלך הפיתוח יגיעו לצינור העיבוד, הודות לטכנולוגיית הצילום של Rok ולטכנולוגיית ההרכבה של Kale, שמרכיבה את הכרכים שצולמו בשלבי צינור העיבוד.
מריצים את התא הבא כדי להתקין את הספרייה החסרה:

מפעילים מחדש את ליבת ה-Notebook בלחיצה על סמל ההפעלה מחדש:

מריצים שוב את התא imports עם הספריות הנכונות שמותקנות ורואים שהפעולה מצליחה.
המרת מחברת לצינור עיבוד נתונים ב-Kubeflow Pipelines
מפעילים את Kale בלחיצה על סמל Kubeflow בחלונית הימנית של המחברת:

מפעילים את Kale על ידי לחיצה על פס ההזזה בלוח הפריסה של Kale:

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

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

עכשיו Kale משתלטת על העניינים ובונה את ה-notebook על ידי המרה שלו לצינור עיבוד נתונים של Kubeflow Pipelines. בנוסף, מכיוון ש-Kale משתלב עם Rok כדי לצלם תמונות של נפח הנתונים של המחברת הנוכחית, אפשר לעקוב אחרי התקדמות התמונה. Rok מטפל בניהול גרסאות של הנתונים וביצירה מחדש של הסביבה כפי שהיא הייתה כשלוחצים על הלחצן Compile and Run (קומפילציה והרצה). כך תוכלו לחזור אחורה בזמן ולראות את הנתונים והקוד שלכם, והצינור יפעל באותה סביבה שבה פיתחתם את הקוד, בלי שתצטרכו ליצור תמונות חדשות של Docker.

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

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


מעולה! הרצת עכשיו צינור (pipeline) מקצה לקצה ב-Kubeflow Pipelines, החל מתיקיית ה-Notebook שלך!
5. למידה העברתית עם כוונון היפר-פרמטרים
בדיקת התוצאות
בודקים את היומנים של השלב cnn-from-scratch. (לוחצים על השלב בתרשים בממשק המשתמש של Kubeflow Pipelines ואז לוחצים על הכרטיסייה Logs). בשלב הזה אימנתם רשת נוירונים מלאכותית (CNN) מאפס. שימו לב שרמת הדיוק של המודל שאומן נמוכה מאוד, ובנוסף, השלב הזה נמשך זמן רב.

כדאי לעיין ביומני הרישום של השלב cnn-vgg16. בשלב הזה השתמשתם בלמידת העברה במודל VGG-16 שעבר אימון מראש – רשת נוירונים שאומנה על ידי Visual Geometry Group (VGG). הדיוק גבוה בהרבה מהמודל הקודם, אבל עדיין יש מקום לשיפור.

עכשיו, בודקים את היומנים של השלב cnn-resnet50. בשלב הזה השתמשתם בלמידת העברה במודל ResNet-50 שעבר אימון מראש. רמת הדיוק גבוהה בהרבה. לכן, זה המודל שבו תשתמשו בהמשך ה-codelab הזה.

כוונון היפר-פרמטרים
חוזרים לשרת המחברות בממשק המשתמש של Kubeflow ופותחים את המחברת בשם dog-breed-katib.ipynb (בנתיב data/kale/examples/dog-breed-classification/). במחברת הזו, תריצו כמה ניסויים של כוונון היפר-פרמטרים במודל ResNet-50 באמצעות Katib. שימו לב שיש תא אחד בתחילת המחברת להצהרת פרמטרים:

בחלונית הימנית של המחברת, מפעילים את האפשרות HP Tuning with Katib כדי להריץ כוונון של היפרפרמטרים:

לאחר מכן לוחצים על Set up Katib Job (הגדרת משימת Katib) כדי להגדיר את Katib:

מגדירים את מרחב החיפוש לכל פרמטר ומגדירים יעד:

לוחצים על הלחצן Compile and Run Katib Job (קומפילציה והרצה של משימת Katib):

צופים בהתקדמות של ניסוי Katib:

כדי לראות את הניסוי של Katib, לוחצים על View (הצגה):

לוחצים על Done כדי לראות את ההרצות ב-Kubeflow Pipelines (KFP):

בדף הניסוי של Katib יופיעו הניסויים החדשים:

בממשק המשתמש של KFP יופיעו ההרצות החדשות:

בואו ננסה להבין מה קרה. בעבר, Kale יצר הפעלה של צינור עיבוד נתונים ממחברת, ועכשיו הוא יוצר כמה הפעלות של צינור עיבוד נתונים, כשכל אחת מהן מוזנת בשילוב שונה של ארגומנטים.
Katib הוא רכיב של Kubeflow שמאפשר להריץ משימות כוונון של היפר-פרמטרים לשימוש כללי. Katib לא יודע דבר על המשימות שהוא מריץ בפועל (שנקראות ניסויים במינוח של Katib). כל מה שחשוב ל-Kale הוא מרחב החיפוש, אלגוריתם האופטימיזציה והיעד. Katib תומך בהרצת משימות פשוטות (כלומר, Pods) כניסויים, אבל Kale מטמיע shim כדי שהניסויים יפעילו בפועל צינורות ב-Kubeflow Pipelines, ואז יאסוף את המדדים מהרצות הצינור.
במהלך הניסוי של Katib, כשהמערכת תייצר ניסויים, יופיעו עוד ניסויים בממשק המשתמש של Katib:

ועוד הרצות בממשק המשתמש של KFP:

אחרי שהניסוי ב-Katib מסתיים, אפשר לראות את כל הניסויים בממשק המשתמש של Katib:

וכל ההרצות בממשק המשתמש של KFP:

אם תחזרו ל-Notebook, תראו כפתור מידע ממש ליד הניסוי של Katib בחלונית Kale:

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

6. הסרת המשאבים
כיבוי סופי של המכונה הווירטואלית של MiniKF
עוברים אל Deployment Manager במסוף GCP ומוחקים את הפריסה minikf-on-gcp.
7. מזל טוב
כל הכבוד, הפעלתם בהצלחה תהליך עבודה של מדעי הנתונים מקצה לקצה באמצעות Kubeflow (MiniKF), Kale ו-Rok.
מה השלב הבא?
הצטרפות לקהילת Kubeflow:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- פרטים על שיחות קהילתיות שבועיות, Slack וקהילות אחרות
