מלום: מודל זריז להשלמת קוד

התחום של סביבות פיתוח משולבות (IDEs) מתחזק מזה זמן רב על ידי העוצמה והדיוק של תכונות השלמה אוטומטית. עם זאת, מתחרה חדש נכנס לזירה: בינה מלאכותית (AI). השילוב של AI בתוך IDEs הופך לנפוץ יותר ויותר, מה שמעורר הערכה מחודשת של כלים מסורתיים. אמנם שיטות ישנות אלו עדיין פועלות, אך ייתכן שהן כבר לא מספקות את הסיוע החדשני שמפתחים מצפים לו כעת.

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

התמודדות עם האתגרים הברורים

מהנדסי JetBrains נתקלו במספר אתגרים קריטיים במרדף שלהם אחר השלמה אוטומטית מבוססת AI:

  • מהירות ועלות: מודלים קונבנציונליים של צ’אט התגלו כלא מעשיים בשל עלויות החישוב הגבוהות וזמני התגובה האיטיים שלהם. למודלים אלה גם חסרה מודעות לטכניקות ספציפיות לקוד כמו מילוי-באמצע (FIM) או ריפוי טוקנים.
  • פורמט פלט: מודלי צ’אט מובילים יצרו לעתים קרובות נתונים בפורמטים לא עקביים, מה שהקשה על ניתוח התגובות ושילובן בצורה חלקה בעורך.
  • מקור הנתונים: קביעת מקור נתוני האימון והפחתת בעיות פוטנציאליות של הפרת זכויות יוצרים הציבו מכשול משמעותי.

מלום: סקירה כללית

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

תהליך האימון של מודל מלום מורכב משלושה שלבים נפרדים, שכל אחד מהם תורם ידע חדש ומשפר את איכות הקוד שנוצר. השלב הראשוני כולל אימון מוקדם בסיסי על קורפוס גדול של קבצים בודדים. השלב השני מורכב מעידון המודל עם קבוצה קטנה יותר של דוגמאות מיוחדות. למידת חיזוק עם משוב AI (RLAIF) מועסקת בשלב השלישי כדי להתאים את המודל למאפיינים ספציפיים ל-IDE ולחסל פלט לא רצוי.

אימון מוקדם

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

מאגר נתונים

מקור הנתונים העיקרי לאימון מוקדם היה TheStack. מאגר נתונים זה מבטיח שהנתונים יהיו הן תקינים מבחינה חוקית והן מועילים מבחינה מעשית.

תהליך אימון מוקדם

במהלך האימון המוקדם, מאגר הנתונים נדגם מספר פעמים כדי להגיע לכ-3 טריליון טוקנים. נעשה שימוש בחלון הקשר של 8192 טוקנים, כאשר מאגר הנתונים חולק לקטעים בגודל זה. טרנספורמציית מילוי-באמצע (FIM) הוחלה על מחצית מהקבצים בכל קטע, ועודדה את המודל לשקול גם קוד קודם וגם קוד עוקב. טכניקה זו מחקה מקרוב תרחישי יצירת קוד בעולם האמיתי.

שלב האימון המוקדם נערך על אשכול של שישה עשר צמתים, שכל אחד מהם מצויד בשמונה GPUs H100. שלב זה ארך כ-15 יום להשלמתו, וכתוצאה מכך מודל מלום-בסיס בעל 4 מיליארדי פרמטרים.

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

שלב הכוונון העדין נועד לטפל במגבלות אלו.

כוונון עדין מודע הקשר

מילוי-באמצע משופר

שלא כמו אימון מוקדם, שבו קטעי קוד נבחרים באקראי לחיזוי, כוונון עדין מתרכז בפילוח קוד בצורה משמעותית יותר, ומלמד את המודל לחלץ קטעי קוד המתרחשים ‘בטבע’.

דוגמאות מיוחדות

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

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

מציאת האלגוריתמים הנכונים דרשה קצת ניסוי וטעייה.

כוונון לשפות ספציפיות

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

  • mellum-all: תומך ברוב השפות והניבים הזמינים ב-IDEs של JetBrains, אך איכות ההשלמה האוטומטית נמוכה ממודלים מיוחדים.
  • mellum-python: מתמחה בפייתון ו-Jupyter.
  • mellum-kotlin: מתמחה בג’אווה וקוטלין.
  • mellum-web: מתמחה בטכנולוגיות אינטרנט.

השלב האחרון: RLAIF

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

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

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

עד כמה מלום טוב?

המודל מתפקד היטב באופן יוצא דופן לגודלו. כך הוא הוערך:

  • ראשית, המודל הוערך על מדד פנימי בשם קוד ‘JetBrains BigCode’.
  • לאחר מכן הוא נבדק על מדדים ציבוריים ידועים כגון SAFIM.
  • לבסוף, נאספו נתוני שימוש עבור תכונות, וחושבו מדדי משתמשים.

הערכה לא מקוונת

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

EM:

  • התאמה מדויקת היא רעיון פופולרי מאוד.
  • חיזוי נחשב לטוב אם השורה הראשונה של ההשלמה תואמת את השורה הראשונה של המקור, עם עיבוד מקדים מינימלי.

KK:

  • המדד נקרא על שם מחבריו.
  • מספר השורות המוצעות מהמקור חלקי מספר השורות בהשלמה המוצעת.

JetBrains BigCode

המודל הוערך מול מערך נתונים מדד שהושג באמצעות הכלי הפנימי JetBrains BigCode.

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

התוצאות של הערכת JetBrains BigCode שלנו מראות איכות ברמה של מודלים פופולריים, אך מלום קטן ויעיל יותר.

איכות הצעות לשורה בודדת (מדד EM)

מדדים ציבוריים

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

הערכה מקוונת

המדד העיקרי נקרא יחס הקוד שהושלם (RoCC). הוא מוגדר כיחס בין תווי קוד שנכתבו באמצעות השלמה אוטומטית של קוד לסך כל כמות הקוד בעורך.

מדד חשוב נוסף הוא קצב הקבלה (AR), המחושב כמספר ההצעות המקובלות חלקי מספר כל ההצעות המוצגות.

זה היה מסע מורכב, אבל מומחי JetBrains השלימו אותו בכבוד. בסופו של דבר, הושגו מודל כללי אחד ומספר מודלים מיוחדים, הזמינים דרך פלטפורמת ה-AI של JetBrains. הם פועלים כעת בהצלחה ב-JetBrains AI Assistant.

מה הלאה?

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