מ-Notebook ל-Kubeflow Pipelines עם HP Tuning: A Data Science Journey

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 ובכל שלב בצינור עיבוד הנתונים

מה צריך להכין

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

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

הגדרת פרויקט GCP

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

יוצרים פרויקט חדש או בוחרים פרויקט קיים:

99b103929d928576.png

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

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

לקבלת עזרה נוספת בהגדרה של פרויקט GCP, עיינו במסמכי התיעוד של GCP.

אחרי שמגדירים פרויקט GCP, עוברים ישירות להוראות להתקנת MiniKF.

פתיחת פרויקט GCP שהוקצה מראש

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

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. התקנת MiniKF

יצירת מכונת Compute כולל MiniKF

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

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

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

ממתינים עד להפעלת מכונת ה-MineKF:

5228086caadc44c6.png

התחברות אל MiniKF

כשמכונת ה-VM של 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, לוחצים על סמל ההמבורגר בתפריט הימני. לוחצים על Snapshots ומתחברים ל-Rok באמצעות שם המשתמש והסיסמה של MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

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

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

איך יוצרים שרת notebook באשכול Kubeflow

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

60825e935fd0f39b.png

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

f9303c0a182e47f5.png

צריך לציין שם לשרת ה-notebook.

a2343f30bc9522ab.png

חשוב לוודא שבחרתם את תמונת ה-Docker הבאה (שימו לב שתג התמונה עשוי להיות שונה):

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

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

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

ab9ac96f1a1f0d09.png

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

cd data/
git clone https://github.com/kubeflow-kale/kale

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

בסרגל הצד, עוברים לתיקייה data/kale/examples/dog-breed-classification/ ופותחים את ה-notebook dog-breed.ipynb.

2bc436465522f65b.png

עיון בקוד למידת המכונה של הדוגמה לזיהוי גזעי כלבים

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

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

5e2b97ab2512f139.png

בדרך כלל, צריך ליצור תמונת Docker חדשה כדי שתוכל להריץ את ה-notebook הזה כצינור עיבוד נתונים של Kubeflow, כדי לכלול את הספריות החדשות שהותקנו. למרבה המזל, רוק וקייל מוודאים שכל הספריות שתתקינו במהלך הפיתוח יגיעו לצינור עיבוד הנתונים שלכם, הודות לטכנולוגיית ה-snapshot של רוק וקייל מעלה את הנפחים מהמצב הזה אל שלבי צינור עיבוד הנתונים.

מריצים את התא הבא כדי להתקין את הספרייה החסרה:

c483da77943a6f01.png

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

376b5203209c2c91.png

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

המרת ה-notebook לצינור עיבוד נתונים ב-Kubeflow Pipelines

כדי להפעיל את Kale לוחצים על הסמל של Kubeflow בחלונית השמאלית של ה-notebook:

7b96241f2ab6c389.png

מפעילים את Kale בלחיצה על פס ההזזה ב-Kale Deployment Panel:

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

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

18f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c.png

39e6fa39516d2773.png

מעולה! עכשיו הרצת צינור עיבוד נתונים מקצה לקצה ב-Kubeflow Pipelines, מה-notebook,

5. העברת הלמידה באמצעות כוונון היפר-פרמטרים

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

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

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

כוונון של היפר-פרמטר

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

לוחצים על הלחצן Compile and Run Katib Job:

f9c1ab0a6a3c5e8d.png

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

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

בדף הניסוי של Katib תראו את הניסויים החדשים:

a511dca519580133.png

ובממשק המשתמש של KFP תוכלו לראות את הריצות החדשות:

43dd34ee2b75018d.png

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

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

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

3e854d3d4bb766c.png

והפעלות נוספות בממשק המשתמש של KFP:

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

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

7acc64dfee4f35a3.png

אם תחזרו ל-notebook, תראו לחצן מידע ליד ניסוי Katib בחלונית Kale:

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

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

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

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

7. מזל טוב

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

מה השלב הבא?

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

קריאה נוספת