
כיצד באג בן 18 שנה איים על תשתיות AI בקנה מידה עצום?
תחקיר הנדסי חדש חושף כיצד קריסות מסתוריות בתשתית הנתונים של ChatGPT הובילו לגילוי נדיר: שילוב בין חומרה פגומה בענן לבין מרוץ זעיר בספריית קוד פתוח ותיקה. מעבר לסיפור הטכני, זהו שיעור חשוב באמינות מערכות AI מודרניות.
כשהבאג נראה בלתי אפשרי, הבעיה היא לעיתים לא בקוד בלבד
מערכות בינה מלאכותית מודרניות אינן נשענות רק על מודלים גדולים, אלא גם על תשתיות נתונים מהירות, יציבות וחסכוניות בזיכרון. כאשר ChatGPT צריך לאתר מידע רלוונטי בזמן מענה, מאחורי הקלעים פועלות שכבות חיפוש, אינדוקס וניתוח בזמן אמת. חלק מהשכבות הללו כתובות ב-C++, שפה שמעניקה ביצועים גבוהים ושליטה נמוכה במערכת, אך גם חושפת את הארגון לסוגי תקלות שמפתחי שפות מנוהלות כמעט אינם פוגשים.
רוצה להישאר מעודכן ב-AI?
הירשם לדיוור השבועי שלנו וקבל עדכונים, המלצות על כלים, חדשות ודוחות מיוחדים
במקרה שתואר בפוסט ההנדסי של OpenAI Blog, קריסות חוזרות בשירות Rockset נראו בתחילה כמו תעלומה קלאסית של השחתת מחסנית. פונקציות סיימו לכאורה את עבודתן וחזרו לכתובת לא חוקית, לעיתים אפילו לכתובת אפס. במקרים אחרים נראה שמצביע המחסנית עצמו זז בשמונה בתים ללא סיבה הגיונית. אלה אינן תקלות רגילות באפליקציה עסקית, אלא סימנים למשהו עמוק בהרבה: באג בקומפיילר, בספריית זמן ריצה, בליבת לינוקס, או אפילו בחומרה.
המעבר מחשיבה של רופא לחשיבה של אפידמיולוג
הנקודה החשובה ביותר בתחקיר אינה דווקא היכולת לקרוא אסמבלי או להבין את מנגנון החריגות של C++, אלא שינוי שיטת העבודה. בתחילה המהנדסים בחנו קבצי core dump בודדים לעומק, כמו רופא שמנסה לאבחן מטופל אחד. אך במערכות ענן גדולות, גישה כזו עלולה להטעות. רק לאחר שנבנתה מערכת אוטומטית לניתוח אוכלוסייה שלמה של קריסות, התמונה התבהרה.
הנתונים חשפו שלא מדובר בבאג אחד, אלא בשתי תופעות בלתי קשורות שהתרחשו באותו זמן ויצרו אשליה של סיבה אחת. קבוצה אחת של קריסות נבעה ככל הנראה ממארח פיזי פגום בענן Azure, שבו החומרה ייצרה השחתת מצב רישומים נדירה. לאחר שהמארח הוצא משימוש, הקריסות מהסוג הזה נעלמו. זו תזכורת לכך שגם בעידן ענן מנוהל, חומרה אינה אבסטרקציה מושלמת.
הבאג הישן ב-libunwind שהפך לבעיה עכשווית
הקבוצה השנייה הובילה לממצא מעניין עוד יותר: מרוץ בן כ-18 שנה ב-GNU libunwind, ספריית קוד פתוח המשמשת למימוש מנגנוני פרימת מחסנית בזמן חריגות. בזמן טיפול בחריגת C++, הספרייה בונה מבנה מצב על המחסנית ומשחזרת רגיסטרים כדי להעביר שליטה לנקודת הטיפול המתאימה. אלא שבחלון זעיר במיוחד, לאחר עדכון מצביע המחסנית ולפני טעינת כתובת ההמשך, אות מערכת שנשלח לתהליך יכול לדרוס את אותו מבנה זמני.
החלון הזה כמעט בלתי נתפס: הוראת מעבד אחת. ועדיין, בסביבה שבה נזרקות אלפי חריגות בשנייה, ונשלחים אותות בתדירות גבוהה לצורך מדידת זמן CPU, גם הסתברות זעירה הופכת לאירוע יומיומי. זהו בדיוק ההבדל בין תוכנה שרצה במעבדה לבין תשתית AI שמשרתת עומסים גלובליים.
המשמעות העסקית: אמינות AI היא דיסציפלינת נתונים
הלקח הרחב עבור חברות AI ברור. ככל שמודלים הופכים לסוכנים שמחפשים, שולפים ופועלים על מידע בזמן אמת, אמינות שכבת הנתונים הופכת לחלק בלתי נפרד מאיכות המוצר. תקלה נדירה בספריית מערכת יכולה להתגלגל לשיבוש חוויית משתמש, לפגיעה באמון ואף לעלויות תפעול גבוהות.
לכן, יתרון תחרותי בעולם ה-AI לא יימדד רק בגודל המודל או במספר הפרמטרים, אלא גם ביכולת לבנות טלמטריה עמוקה, לאסוף ראיות באיכות גבוהה, ולזהות דפוסים ברמת צי שלמה. הסיפור הזה ממחיש שבקנה מידה גדול אין באמת באגים נדירים. יש רק באגים שעדיין לא הופיעו מספיק פעמים כדי שנדע למדוד אותם.
