1. מבוא
Kubeflow היא ערכת כלים ללמידת מכונה של Kubernetes. הפרויקט מיועד לפריסות של תהליכי עבודה של למידת מכונה (ML) ב-Kubernetes לפשוט, נייד וניתנה להתאמה. המטרה היא לספק דרך פשוטה לפרוס מערכות קוד פתוח מהטובות ביותר ללמידת מכונה (ML) לתשתיות מגוונות. |
איך נראית פריסה של Kubeflow?
פריסת Kubeflow היא:
- נייד – פועל על כל אשכול Kubernetes, ב-Google Cloud Platform (GCP), בארגון או אצל ספקים שונים.
- ניתן להתאמה – אפשר להשתמש במשאבים משתנים ומוגבל רק על ידי מספר המשאבים שמוקצים לאשכול Kubernetes.
- קומפוזבילי – מאפשר להגדיר שלבים עצמאיים לתהליך עבודה מלא של למידת מכונה, באמצעות בחירה מתוך אוסף של מסגרות וספריות של למידת מכונה.
ב-Kubeflow אתם יכולים לארגן מיקרו-שירותים בצימוד חלש כיחידה אחת, ולפרוס אותם במגוון מיקומים, כולל במחשב נייד, בארגון או בענן.
ה-Codelab הזה ילמד אותך איך ליצור פריסת Kubeflow משלכם באמצעות MiniKF, ולאחר מכן להריץ תהליך עבודה של Kubeflow Pipelines עם כוונון היפר-פרמטרים כדי לאמן ולהציג מודל. את כל הפעולות האלה מבצעים מתוך מחברת 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 ובכל שלב בצינור עיבוד הנתונים
מה צריך להכין
- פרויקט GCP פעיל שיש לך בו הרשאות בעלים
זהו Codelab מתקדם שמתמקד ב-Kubeflow. לקבלת רקע נוסף והקדמה לפלטפורמה, אפשר לעיין במסמכים בנושא מבוא ל-Kubeflow. מונחים לא רלוונטיים ובלוקים של קוד עם הפרדה מודגשת, כך שאפשר פשוט להעתיק ולהדביק אותם.
2. הגדרת הסביבה
הגדרת פרויקט GCP
כדי ליצור פרויקט GCP או להגדיר פרויקט GCP קיים יש לפעול לפי השלבים הבאים. אם אתם מתכננים להשתמש בפרויקט GCP קיים, צריך לוודא שהפרויקט עומד בדרישות המינימליות שמפורטות בהמשך. השלב הראשון הוא לפתוח את מנהל המשאבים במסוף GCP.
יוצרים פרויקט חדש או בוחרים פרויקט קיים:
חשוב לבדוק את הדרישות המינימליות הבאות:
- חשוב לוודא שיש לכם את תפקיד הבעלים בפרויקט.
- חשוב לוודא שהאפשרות חיוב מופעלת בפרויקט.
- אם אתם משתמשים בתוכנית ללא תשלום של GCP או בתקופת ניסיון של 12 חודשים עם זיכוי בסך 300$, שימו לב שלא תוכלו להריץ את התקנת ברירת המחדל ל-GCP של MiniKF, כי התוכנית ללא תשלום לא מציעה מספיק משאבים. אתם צריכים לשדרג לחשבון בתשלום.
לקבלת עזרה נוספת בהגדרה של פרויקט GCP, עיינו במסמכי התיעוד של GCP.
אחרי שמגדירים פרויקט GCP, עוברים ישירות להוראות להתקנת MiniKF.
פתיחת פרויקט GCP שהוקצה מראש
כדי לפתוח את פרויקט GCP שהוקצה מראש, צריך ללחוץ על הלחצן שלמטה כדי להיכנס למסוף GCP ולפתוח את חלונית הבית, שנמצאת בתפריט ההמבורגר בפינה הימנית העליונה. אם המסך ריק, לוחצים על 'כן' בהודעה כדי ליצור מרכז בקרה.
אם עוד לא בחרתם פרויקט, לוחצים על Select a project:
בוחרים את הפרויקט הרצוי. צריך להיות לכם רק:
3. התקנת MiniKF
יצירת מכונת Compute כולל MiniKF
ב-GCP Marketplace, מחפשים את "MiniKF".
בוחרים את המכונה הווירטואלית MiniKF של Arrikto:
לוחצים על הלחצן השקה ובוחרים את הפרויקט:
בקטע הגדרה ו- חלון Deploy, בוחרים name ו-zone (תחום) למכונה של MiniKF ומשאירים את אפשרויות ברירת המחדל. לאחר מכן לוחצים על הלחצן Deploy:
ממתינים עד להפעלת מכונת ה-MineKF:
התחברות אל MiniKF
כשמכונת ה-VM של MiniKF פועלת, מתחברים ומתחברים בלחיצה על הלחצן SSH. פועלים לפי ההוראות במסך כדי להריץ את הפקודה minikf
, שמתחילה את הפריסה של Minikube , Kubeflow ו-Rok. הפעולה הזאת עשויה להימשך כמה דקות.
התחברות ל-Kubeflow
בסיום ההתקנה וכל ה-Pods מוכנים, היכנסו ללוח הבקרה של MiniKF. מתחברים ל-Kubeflow באמצעות שם המשתמש והסיסמה של MiniKF:
משתמשי Chrome יראו את המסך הזה:
משתמשי Firefox יראו את המסך הבא:
משתמשי Safari יראו את המסך הזה:
התחברות ל-Rok
אחרי ההתחברות ל-Kubeflow, לוחצים על סמל ההמבורגר בתפריט הימני. לוחצים על Snapshots ומתחברים ל-Rok באמצעות שם המשתמש והסיסמה של MiniKF.
מעולה! פרסתם בהצלחה את MiniKF ב-GCP. עכשיו אפשר ליצור notebooks, לכתוב קוד ללמידת מכונה, להריץ Kubeflow Pipelines ולהשתמש ב-Rok לניהול גרסאות של נתונים ושחזור.
4. איך מריצים צינור עיבוד נתונים מתוך ה-notebook
בחלק הזה תפעילו את הדוגמה לזיהוי גזעי כלבים, פרויקט ב-Udacity AI Nanodegree. בהינתן תמונה של כלב, המודל הסופי יספק אומדן של גזע הכלב.
איך יוצרים שרת notebook באשכול Kubeflow
עוברים אל הקישור Notebooks במרכז הבקרה המרכזי של Kubeflow.
לוחצים על שרת חדש.
צריך לציין שם לשרת ה-notebook.
חשוב לוודא שבחרתם את תמונת ה-Docker הבאה (שימו לב שתג התמונה עשוי להיות שונה):
gcr.io/arrikto/jupyter-kale:f20978e
מוסיפים נפח נתונים חדש וריק בגודל 5GB ונותנים לו את השם data (נתונים).
לוחצים על Launch כדי ליצור את שרת ה-notebook.
כששרת ה-notebook זמין, לוחצים על Connect (התחברות) כדי להתחבר אליו.
הורדה של הנתונים וה-notebook
תיפתח כרטיסייה חדשה עם דף הנחיתה של JupyterLab. יצירת טרמינל חדש ב-JupyterLab.
בחלון הטרמינל, מריצים את הפקודות הבאות כדי לנווט לתיקייה data ומורידים את ה-notebook ואת הנתונים שבהם תשתמשו עד סוף שיעור ה-Lab:
cd data/ git clone https://github.com/kubeflow-kale/kale
המאגר המשוכפל מכיל סדרה של דוגמאות שנאספו עם נתונים ומחברת notebook עם הערות.
בסרגל הצד, עוברים לתיקייה data/kale/examples/dog-breed-classification/
ופותחים את ה-notebook dog-breed.ipynb
.
עיון בקוד למידת המכונה של הדוגמה לזיהוי גזעי כלבים
בינתיים, אל תריצו את התאים שמורידים את מערכי הנתונים, כי אתם עומדים להשתמש במערכי נתונים קטנים יותר הכלולים במאגר ששכפולם. אם אתם מריצים את הדוגמה הזו בקצב שלכם מהבית, אתם יכולים להוריד את מערכי הנתונים.
מפעילים את התא imports
כדי לייבא את כל הספריות הנדרשות. שימו לב שהקוד נכשל כי חסרה ספרייה:
בדרך כלל, צריך ליצור תמונת Docker חדשה כדי שתוכל להריץ את ה-notebook הזה כצינור עיבוד נתונים של Kubeflow, כדי לכלול את הספריות החדשות שהותקנו. למרבה המזל, רוק וקייל מוודאים שכל הספריות שתתקינו במהלך הפיתוח יגיעו לצינור עיבוד הנתונים שלכם, הודות לטכנולוגיית ה-snapshot של רוק וקייל מעלה את הנפחים מהמצב הזה אל שלבי צינור עיבוד הנתונים.
מריצים את התא הבא כדי להתקין את הספרייה החסרה:
מפעילים מחדש את הליבה של ה-notebook בלחיצה על הסמל הפעלה מחדש:
הריצו שוב את התא imports
עם הספריות הנכונות שהותקנו ובדקו אותו ללא שגיאות.
המרת ה-notebook לצינור עיבוד נתונים ב-Kubeflow Pipelines
כדי להפעיל את Kale לוחצים על הסמל של Kubeflow בחלונית השמאלית של ה-notebook:
מפעילים את Kale בלחיצה על פס ההזזה ב-Kale Deployment Panel:
לחקור את יחסי התלות לכל תא בתוך ה-notebook. ניתן לראות איך מספר תאי notebook יכולים להיות חלק משלב יחיד בצינור עיבוד נתונים, כפי שניתן לראות לפי סרגלי צבעים מימין לתאים, ואיך שלב בצינור עיבוד נתונים עשוי להיות תלוי בשלבים הקודמים. כפי שמתואר על ידי תלוי בתוויות מעל התאים. לדוגמה, בתמונה הבאה מוצגים מספר תאים שהם חלק מאותו שלב בצינור עיבוד הנתונים. יש להם את אותו הצבע האדום והם תלויים בשלב קודם בצינור עיבוד הנתונים.
לוחצים על הלחצן הידור והרצה:
עכשיו קייל משתלטת ובונה את ה-notebook על ידי המרתו לצינור עיבוד הנתונים של Kubeflow Pipelines. בנוסף, מכיוון שקייל משתלב עם Rok כדי לצלם תמונות מצב של נפח הנתונים ב-notebook הנוכחי, תוכלו לצפות בהתקדמות של קובץ ה-snapshot. רוק מטפל בניהול גרסאות של נתונים ובשחזור של כל הסביבה כפי שהיא הייתה כשלוחצים על הלחצן Compile and Run כך תהיה לכם מכונת זמן לנתונים ולקוד, וצינור עיבוד הנתונים שלכם יפעל באותה סביבה שבה פיתחתם את הקוד, ללא צורך ביצירת קובצי אימג' חדשים של Docker.
צינור עיבוד הנתונים נוצר והועלה ל-Kubeflow Pipelines. עכשיו צריך ללחוץ על הקישור כדי לעבור לממשק המשתמש של Kubeflow Pipelines ולצפות בהרצה.
ממשק המשתמש של Kubeflow Pipelines ייפתח בכרטיסייה חדשה. צריך להמתין לסיום ההפעלה.
מעולה! עכשיו הרצת צינור עיבוד נתונים מקצה לקצה ב-Kubeflow Pipelines, מה-notebook,
5. העברת הלמידה באמצעות כוונון היפר-פרמטרים
בודקים את התוצאות
מעיינים ביומנים של שלב ה-cnn-מ-scratch. (לוחצים על השלב בתרשים בממשק המשתמש של Kubeflow Pipelines, ואז לוחצים על הכרטיסייה Logs). זה השלב שבו אימנת מאפס רשת עצבית מתקפלת (CNN). שימו לב שרמת הדיוק של המודל שעבר אימון נמוכה מאוד, ובנוסף, השלמת השלב הזה נמשכה זמן רב.
עיינו ביומנים של השלב cnn-vgg16. בשלב הזה השתמשתם בלמידת העברה במודל VGG-16 שעבר אימון מראש – רשת נוירונים שאומנה על ידי Visual Geometry Group (VGG). רמת הדיוק הרבה יותר גבוהה מהמודל הקודם, אבל אנחנו עדיין יכולים לשפר אותו.
עכשיו אתם יכולים לעיין ביומנים של השלב cnn-resnet50. בשלב הזה השתמשתם בלמידת העברה במודל ResNet-50 שעבר אימון. הדיוק הרבה יותר גבוה. לכן זה המודל שבו תשתמשו בשארית ה-Codelab הזה.
כוונון של היפר-פרמטר
חוזרים לשרת ה-notebook בממשק המשתמש של Kubeflow ופותחים את ה-notebook שנקרא dog-breed-katib.ipynb
(בנתיב data/kale/examples/dog-breed-classification/
). ב-notebook הזה אתם עומדים להריץ כמה ניסויי כוונון היפר-פרמטרים במודל ResNet-50, באמצעות Katib. שימו לב שיש בתחילת ה-notebook תא אחד שבו אפשר להצהיר על פרמטרים:
בחלונית השמאלית של ה-notebook, מפעילים את האפשרות HP Tuning with Katib כדי להריץ כוונון היפר-פרמטרים:
לאחר מכן לוחצים על Set up Katib Job כדי להגדיר את Katib:
מגדירים את שטח החיפוש לכל פרמטר ומגדירים יעד:
לוחצים על הלחצן Compile and Run Katib Job:
צופים בהתקדמות של ניסוי Katib:
לוחצים על הצגה כדי לראות את הניסוי של Katib:
לוחצים על Done כדי לראות את ההפעלות ב-Kubeflow Pipelines (KFP):
בדף הניסוי של Katib תראו את הניסויים החדשים:
ובממשק המשתמש של KFP תוכלו לראות את הריצות החדשות:
בואו נפרק את מה שקרה עכשיו. בעבר, קייל יצר צינור עיבוד נתונים מתוך notebook, ועכשיו הוא יוצר מספר הפעלות של צינור עיבוד נתונים, שכל אחד מהם מוזן באמצעות שילוב אחר של ארגומנטים.
Katib הוא הרכיב של Kubeflow כדי להריץ משימות כוונון היפר-פרמטרים לשימוש כללי. קאטי לא יודעת שום דבר על המשרות שהיא באמת מריצה (שנקראות 'ניסויים' בז'רגון Katib). כל מה שקייל תומך בו הוא מרחב החיפוש, אלגוריתם האופטימיזציה והמטרה. Katib תומך בהפעלת משרות פשוטות (כלומר, Pods) כניסויים, אבל קייל מיישמת ספריית Shim כדי שהניסויים יפעילו בפועל צינורות עיבוד נתונים ב-Kubeflow Pipelines, ולאחר מכן יאספו את המדדים מהפעלות צינור עיבוד הנתונים.
מאחר שניסוי Katib יוצר ניסויים, יופיעו יותר ניסויים בממשק המשתמש של Katib:
והפעלות נוספות בממשק המשתמש של KFP:
אחרי שניסוי Katib יסתיים, תוכלו לראות את כל הניסויים בממשק המשתמש של Katib:
וכל הריצות בממשק המשתמש של KFP:
אם תחזרו ל-notebook, תראו לחצן מידע ליד ניסוי Katib בחלונית Kale:
לחיצה עליו תציג את התוצאה הטובה ביותר ואת הפרמטרים שהניבו אותה:
6. הסרת המשאבים
השמדת מכונת ה-VM של MiniKF
עוברים אל Deployment Manager במסוף GCP ומוחקים את הפריסה minikf-on-gcp
.
7. מזל טוב
כל הכבוד! השלמת בהצלחה תהליך עבודה מקצה לקצה בתחום מדעי הנתונים באמצעות Kubeflow (MiniKF), קייל ורוק!
מה השלב הבא?
מצטרפים לקהילת Kubeflow:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- שיחה שבועית לקהילה, Slack ופרטים נוספים על הקהילה