הגדרת Neptune.ai: מדוע ניסויים אינם משוחזרים
הגדרת Neptune.ai מתחילה לא בהרצת שרת, אלא במענה לשאלה: מדוע הרצת האימון מאתמול אינה חוזרת על עצמה עוד. תמונה אופיינית — המדדים עלו, המודל אושר, וכעבור שבוע בניסיון לאמן מחדש את אותה תצורה מתקבלת תוצאה אחרת. הפרמטרים נערכו במחברת, מערך הנתונים הוחלף תוך כדי, והסביבה עודכנה ברקע.
בסופו של דבר תיעוד הניסויים מצטמצם ללוגים מפוזרים: חלק בקונסולה, חלק בטבלאות, חלק בהתכתבות, ואי אפשר כבר לשחזר את שרשרת ההחלטות.
שורש הבעיה הוא ששלושה דברים אינם מתועדים: גרסאות של ארטיפקטים, היפר-פרמטרים וסביבה. מערך נתונים בלי סכום ביקורת, צ'קפוינט בלי קישור לקומיט, תלויות בלי רשימה — ושחזוריות המודלים נשענת על הזיכרון של המהנדס.
היקף הבעיה ענפי: לפי Survey on Machine Learning Reproducibility, רוב המומחים נתקלו בכך שלא ניתן היה לחזור על תוצאה קודמת של אחר או של עצמם בלי להתכתב עם המחבר.
המחיר של אי-ודאות כזו ניתן למדידה במונחים הנדסיים. השוואה בין שתי הרצות דורשת שעות של השוואה ידנית במקום שאילתה אחת; חזרה לתצורה מוצלחת אינה אפשרית, כי לא ידוע מה בדיוק היא הייתה; חיפוש סיבת ההידרדרות הופך לארכיאולוגיה בלוגים. כשגרסאות הנתונים, הקוד והפרמטרים נשמרות לצד המדדים, כל הרצה הופכת לנקודה משוחזרת ולא לזיכרון.
מפרקים איך זה נסגר: מה בדיוק מתעדת הגדרת Neptune.ai, איך לקשר ארטיפקטים להרצות ואילו בדיקות כדאי להציב כדי שניסוי ניתן יהיה לחזור עליו כעבור חודשים.
סדר בניסויים: שחזוריות ומהירות איטרציות
לאחר הגדרת מעקב הניסויים — ב-Neptune.ai או בכלי מעקב דומה — משתנה לא הדיווח, אלא מהירות העבודה. חיפוש התצורה שנתנה את התוצאה הטובה ביותר לפני חודש אורך דקות במקום שעות של התכתבות וחפירה בתיקיות.
שיעור ההרצות המשוחזרות מפסיק להיות תלוי במי ביצע אותן: פרמטרים, גרסת נתונים וסביבה מתועדים יחד עם התוצאה.
השוואה בין הרצות לגרסאות נתונים
כל הרצה כותבת מדדים לפי שלבי אימון, סט פרמטרים וקישור לגרסת מערך הנתונים — לפי תוכן, לא לפי שם קובץ. ההרצות מונחות על אותם גרפים, והפער נראה מיד: היכן המודל התפצל ואיזה פרמטר משך אותו.
קודם לכן לא ניתן היה לקשר תוצאה מוצלחת לנתונים שעליהם היא התקבלה, וחצי מהאיטרציות הושקעו במעבר חוזר על מה שכבר נעשה.
מרשם מודלים וארטיפקטים
מודל מוגמר נכנס למרשם יחד עם משקולות, תצורה ומדדים, וחי לפי שלבים — טיוטה, בדיקה, פרודקשן, ארכיון. רואים מי ומתי העביר גרסה הלאה ועל אילו מדדים זה הוחלט; חזרה לגרסה קודמת היא פעולה אחת במקום שחזור מגיבויים.
בפועל זמן חיפוש תצורה עובדת מצטמצם מימים לשעות, השחזוריות הופכת לכלל ולא למזל, והרצות אבודות לא נשארות — כל אחת מקושרת לנתונים ולקוד. זהו האפקט העיקרי: הצוות משקיע זמן בהיפותזות חדשות ולא בשחזור של מה שכבר נבדק.
אפשרויות הגדרה של Neptune.ai: ענן, סביבה מקומית, היברידי
אפשרויות ההגדרה של Neptune.ai נבדלות לא בממשק, אלא בשאלה אילו נתונים מותר לצוות להוציא מחוץ להיקף. מטא-נתונים של הרצות, ארטיפקטים של מודלים ומערכי נתונים אפשר לפרוס בין סביבות שונות — ואז המעקב נשאר רציף, והבידוד של הנתונים לא הופך להעברה ידנית של קבצים בין סביבות.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| תבנית ענן | הצוות עובד מבוזר, והנתונים אינם נופלים תחת מגבלות פנימיות על אחסון חיצוני | יש צורך בבקרת גישה ותיאום עם אבטחת מידע; העלאה של ארטיפקטים גדולים נתקעת ברוחב הפס |
| סביבה מקומית מלאה | מערכי נתונים רגישים, דרישות רגולטור או היקף סגור בלי יציאה החוצה | גיבוי ועדכון של אחסון נשארים באחריות הלקוח, וקיבולת לשיאי הרצות מתוכננת מראש |
| תבנית היברידית | חלק מהניסויים מותר לנהל בענן, וחלק חייב להישאר בפנים | שתי נקודות כשל וסנכרון בין הסביבות: צריך נוהל מה בדיוק יוצא החוצה |
היכן עובר גבול הנתונים
הגבול נקבע לא לפי סוג הארטיפקט אלא לפי מחלקת רגישות: מדדים ופרמטרים של הרצות נשארים בענן, מערכי נתונים ומשקולות של מודלים — באחסון מקומי. סוכן בתוך ההיקף שולח החוצה רק מדדים מצטברים, ולכן אובדן הנראות מינימלי, והעלאה של נתונים גולמיים נמנעת טכנית ולא מתוקף נוהל.
שלבי יישום: מפירוק תהליכים ועד מסירת נהלים
הגדרת Neptune.ai מתחילה לא בהתקנת שירות, אלא בפירוק של האופן שבו הצוות מאמן מודלים כיום. כל עוד לא ברור אילו הרצות משמעותיות והיכן אובד הקשר בין קוד, נתונים ותוצאה, האוטומציה תייצר פיד גרפים יפה אך חסר תועלת. שלבי היישום הולכים בסדר שבו כל צעד נשען על הקודם.
איך עובר האודיט
מהנדסים בוחנים מאגרי קוד, יומני הרצות, דרכי תיעוד של פרמטרים ומדדים. בנפרד בודקים מה קורה עם משקולות ביניים ומערכי נתונים — בדיוק שם לרוב אובדת השחזוריות. התוצאה — מפת הרצות ורשימת פערים.
- אודיט של תהליכי אימון: מי מריץ אימון, אילו פרמטרים משתנים, והיכן נשמרות התוצאות.
- תכנון סכימת מעקב: אילו מדדים, פרמטרים וקבצים נקשרים להרצה, ואיך נקראים הפרויקטים.
- הגדרת מעקב: כתיבת עקומות אימון ומדדים מערכתיים, קיבוץ הרצות, השוואה.
- חיבור אחסון ארטיפקטים: משקולות מודלים ותצורות נשמרים עם גרסאות במקום אחד.
- בדיקת הסכימה על הרצה אמיתית: מריצים אימון ובודקים שהנתונים ניתנים לשחזור.
- קבלה: הצוות עובר רשימת בקרה מהשוואת הרצות ועד חזרה לגרסת מודל קודמת.
- מסירת נהלים: הוראות, כללי שמות, סדר עבודה עם היסטוריית ניסויים.
בדיקה וקבלה
הקריטריון אחד: כל הרצה משוחזרת ומוסברת לפי הנתונים השמורים. אם המדד קיים בדוח אך אינו מקושר לגרסת קוד ונתונים, העבודה לא התקבלה.
תצורות, סכימות ונהלים: מה נשאר לצוות
בסיום ההגדרה הצוות מקבל לא רק שרת עובד, אלא סט ארטיפקטים: לפיהם הסביבה מוקמת מחדש, נמסרת למהנדס אחר ונבדקת בלי מחבר היישום. להלן מה בדיוק מתועד בכתב ובאיזו צורה נמסר ללקוח.
תיעוד ונהלים
- קבצי תצורה של מעקב ב-Neptune.ai — פרמטרי חיבור, סט המדדים שנרשמים, כללי קיבוץ הרצות לפי פרויקטים ותגים.
- סכימת סביבת הניסויים: מסלול הנתונים מהאימון ועד השוואת הרצות, נקודות כשל ומקומות שבהם נדרשת בקרה ידנית.
- תבניות הרצה למשימות טיפוסיות — אימון, אימון המשך, השוואת מודלים — עם תגים וסטים של פרמטרים מלאים מראש.
- תיעוד: הוראות הרצה, מבנה פרויקטים וכללי שמות — מהנדס חדש נכנס לסביבה בתוך יום, לא שבוע.
- נוהל תחזוקה: סדר עדכונים, תקופת שמירה של הרצות ישנות, פעולות במקרה של פער במדדים ונקודות הסלמה.
מדיניות גישה ותפקידים
- תפקידים והרשאות: קריאה, הרצה וניהול מופרדים — ניסיונאי לא יכול למחוק פרויקט של אחר או לשכתב היסטוריה.
- מדיניות גישה: טוקנים, תוקף שלהם, קישור לחשבונות שירות ונוהל שלילה עם עזיבת עובד.
- יומן פעולות: מי שינה תצורה ומתי — בירור פער במדדים לא הופך לחיפוש אשם.
הסט מיועד לכך שמכאן והלאה הצוות עובד באופן עצמאי: מרחיב את סט המדדים ומוסיף פרויקטים בלי להרכיב את הסביבה מחדש מאפס.
מקרה בוחן: איך קוצר החיפוש אחר תצורת מודל עובדת
מקרה יישום: צוות של לקוח אימן מודל המלצות, והניסויים נוהלו במחברות, טבלאות והתכתבות. פרסנו אצלם מרשם הרצות אחיד והעברנו את העבודה איתו לשגרה קבועה.
מה היה לפני
הפרמטרים של כל הרצה נשמרו אצל המחבר: חלק בטבלה, חלק בהתכתבות, חלק בראש. חיפוש תצורה עובדת ארך עד יומיים — היומנים הושוו ידנית, ואת ההבנה איזו קומבינציה נתנה את האיכות הרצויה אפשר היה להשיג רק בהרצה חוזרת.
משוחזרות נשארו פחות ממחצית הניסויים: גרסאות נתונים וסביבה לא תועדו. שיעור הכפילויות הגיע לשליש — אותה היפותזה נבדקה פעמיים-שלוש בלי לדעת על התוצאה הקודמת.
מה נהיה אחרי
ההרצות קושרו לגרסאות נתונים, קוד וסביבה ב-Neptune.ai. החיפוש אחר תצורה עובדת הצטמצם מיומיים לשלוש שעות: ההרצה הנדרשת נמצאת בסינון לפי פרמטרים ומדדים, וההשוואה נעשית על אותם צירים.
שיעור ההרצות המשוחזרות עלה מ-45% ל-95% — התוצאה עולה מהמרשם יחד עם הסביבה. הרצות כפולות הצטמצמו פי שלושה, וההערות הידניות כמעט נעלמו: פרמטרים ומדדים נכתבים אוטומטית, ובמרשם נשארות רק מסקנות לגבי היפותזות.
מה לעשות אם ניסויים כבר מנוהלים בכלי אחר?
מעבר מלא בבת אחת נדרש לעתים רחוקות: כל עוד מתקיימות סדרות הרצות פעילות, הסיכון לקרוע קשרים בין הרצות גבוה מהתועלת שבמהירות. לכן אנחנו קודם בונים דו-קיום של סביבות — הכלי הישן נשאר עובד, Neptune.ai מוקם לצידו, ושניהם כותבים לסכימת ישויות מתואמת.
הבסיס לעבודה מקבילה — מודל שמות אחיד: פרויקט, סדרה, הרצה, שלב, סט ארטיפקטים. לכל הרצה אנחנו מקצים מפתח יציב משם מערך הנתונים, טביעת האצבע של התצורה והפרמטרים, ולכן רשומה מסביבה אחת מוקרנת באופן חד-משמעי לאחרת, והשוואת מדדים בין האתרים נשארת תקינה.
העברת ההיסטוריה נעשית בשני מעברים. תחילה ייבוא תוצאות לפי מטא-נתונים — מבנה פרויקטים, קישורי הרצות לשלבים, הערות ומסקנות. אחר כך נתונים כבדים: עקומות מדדים, גרפים, נקודות ביקורת של מודלים. ייבוא חוזר מעדכן רשומה ולא יוצר כפילויות, ולכן ייצוא שהופסק ניתן להשלים מאותה נקודה.
מחקרים פעילים לא נעצרים: הרצות שלא הסתיימו נכתבות בסביבה הישנה עד השלב האחרון, והחדשות כבר מתחילות בחדשה. לאחר התכנסות משווים מדגם בקרה של ניסויים — אם המדדים המרכזיים תואמים, מאחדים את הסביבות לאחת, ואת הקודמת משאירים במצב קריאה של היסטוריה.
מכאן מספיק לשמור על כללי שמות אחידים להרצות חדשות — אחרת כעבור חודשיים ההיסטוריה שוב תתפצל בין שני בסיסי נתונים לא מקושרים.
ספקות טכניים: גישות, עומס, אבטחת נתונים
ספקות בנוגע לגישות, עומס ואחסון עולים לפני ההתחלה, לא אחרי התקרית הראשונה. אספנו ארבע שאלות שצוותי הנדסה שואלים הכי часто.
איך להפריד גישה בין מחלקות?
תפקידים ניתנים ברמת סביבת העבודה והפרויקט: מהנדס נתונים רואה הרצות של כל הצוותים, אנליסט — רק את שלו. אינטגרציות חיצוניות ומערכות בנייה מקבלות מפתחות לקריאה, ומפתחות לכתיבה הם קצרי מועד ומתחלפים לפי לוח זמנים.
האם איסוף מדדים יאט את האימון?
מדדים וארטיפקטים נשלחים באופן אסינכרוני: הלוגים נצברים ונשלחים בפקודות מראש משרשור רקע, והאימון לא ממתין להם. תקורות נשמרות בטווח של שברי אחוז מזמן האפוק, וניתן לכבות לוגינג בדגל אחד בתצורת ההרצה.
היכן נשמרים נתוני הניסויים?
את האפשרות קובעים מראש: הסביבה שלכם על המשאבים שלכם או אחסון ענן ייעודי. מטא-נתונים נמצאים בבסיס נתונים, ארטיפקטים כבדים — באחסון אובייקטים עם גישה בקישורים חתומים, ותקופת שמירה וניקוי נקבעות בכלל נפרד.
מה עם תחזוקה לאחר המסירה?
אנחנו מוסרים תיעוד, סכימות פריסה ונוהל תחזוקה: רוטציה של מפתחות, עדכון גרסאות, שחזור מגיבוי. בתקופה הראשונה נשארים בקשר ומבררים תקריות יחד עם הצוות שלכם, ומכאן והלאה — תמיכה לפי בקשה.
נדון במשימה ונחזור עם תוכנית יישום
הערכה מדויקת של היקף העבודה נעשית רק לאחר שאנחנו רואים את תמונת אימון המודלים הנוכחית שלכם: היכן מורצות ההרצות, מי ואיך משווה תוצאות, מה כבר מוגדר ב-Neptune.ai, ומה חי בטבלאות ובהתכתבות. לכן את הדיון במשימה מתחילים מקלט מהלקוח, ולא ממחיר לפי שעה.
מה כדאי להכין לשיחה:
- תהליך האימון הנוכחי: במה מורצות ההרצות — ידנית או מכלי תזמור, והיכן מצטברים ארטיפקטים ומדדים;
- היקף היסטוריית ההרצות — כמה ניסויים ובאיזו תקופה צריך להעביר כדי שההשוואה תהיה משמעותית ולא סלקטיבית;
- דרישות לאחסון נתונים: תקופות חיים של ארטיפקטים, אזור פריסה, מי שיש לו גישה למערכי נתונים רגישים;
- הרכב הצוות — כמה מהנדסים ואנליסטים יעבדו במערכת ובאילו הרשאות;
- סביבת הפריסה הרצויה: ענן, סביבה סגורה של הלקוח או היברידית, ואילו מגבלות רשת קיימות;
- כלי ויזואליזציה ודיווח נוכחיים, כדי לא לשכפל את מה שכבר עובד;
- מצב הפעולה של המערכת — העברה חד-פעמית של היסטוריה או מעקב מתמיד אחר ניסויים חדשים.
בתגובה נשלח הערכת היקף עבודה ותוכנית יישום: רצף שלבים, סכימת סביבות ואחסון, הרכב תפקידים וגישות, ונקודות קבלה. הצעד הבא — פירוק לפי הנתונים שלכם, שאחריו רואים את מאמץ העבודה ואת סדר הפעולות. תארו את המשימה — נחזור עם הערכה ותוכנית.







