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

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

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

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

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

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

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

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

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


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

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

עכשיו, בודקים את היומנים של השלב cnn-resnet50. בשלב הזה השתמשתם ב-Transfer Learning במודל 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:

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

לוחצים על סיום כדי לראות את ההרצות ב-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 וקהילות אחרות
