close menu

המירוץ ל"מודל מתכנת" פתוח – מאמצי "COPILOT הפתוח"

אמ;לק: שוחרר מודל המתמחה בעריכת קטעי קוד לפי הוראות בשפה חופשית.

למה אמנים עצובים כל כך שמודלים לוקחים להם את העבודה?

הלוואי שמודלים יקחו ממני את העבודה!

מאמצי קהילת הקוד הפתוח ליצור "מודל מתכנת"

מאז שחרור Github CoPilot נעשו מספר מאמצים [1][2][3] להדביק את יכולות יצירת הקוד על ידי כמה גופים גדולים.

זה לא מפתיע בכלל, מודלים ליצירת קוד חוסכים זמן רב למתכנתים אנושיים [יש האומרים: אפילו מחליפים חלק מהם] וזמנם של מתכנתים יקר במיוחד.

שני "מודלים מתכנתים" מובילים כרגע:

  • המודל CodeGen מבית SalesForce
  • והמודל הפתוח הגדול בעולם מבית BigScience

שמתאמן ברגעים אלו ממש!

בזמן שאותו מודל החזק בעולם מתאמן לו, מעבדת מחקר אחרת לקחה את המושכות והחליטה לאמן עוד קצת את המודל ה"כמעט הכי חזק בעולם" (CodeGen).

מודל תכנות קצת אחר

שחקן חדש נכנס ברגע זה למירוץ: CarperAI, ששחררו סדרת מודלי תכנות המתמחים בהבדלים (Diffים) בין קטעי קוד.

כלומר: הם לא יוצרים קוד מאפס על פי הוראות. הם עורכים קוד על פי הוראות (ספציפית על פי הודעות Commit, כך הם אומנו).

רק רגע. את זה עוד לא ראינו.

למה זה מעניין? מה המודלים אומנו לעשות?

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

או בעברית:

יש לכם קטע קוד -> אמרו למודל בשפה חופשית מה לשנות והוא יעשה זאת עבורכם.

גדלי המודלים:

המודלים מגיעים אלינו בשלושה גדלים שונים – 250 מיליון פרמטרים, שני מיליארד ושישה מיליארד פרמטרים.

הם זמינים נגישים ופתוחים, אותם תמצאו ממש כאן: https://huggingface.co/CarperAI/diff-codegen-350m-v2

אבל למה זה מעניין? מה זה שונה מיצירת קוד?

מהסיבה הפשוטה: אורך הקוד.

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

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

נסו לתת לCoPilot להשלים לכם קטע קוד בסוף קובץ ארוך כל סמך מידע הנמצא בתחילת הקובץ.

אימונים המכריחים את המודל להסתכל "רחוק"

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

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

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

הדאטהסט

הדאטהסט מורכב מCommitים מ-GitHub, שנאספו באמצעות BigQuery, מכיוון שישנו מספר עצום של פרוייקטי קוד פתוח ב GitHub, החוקרים סיננו את קטעי הקוד על פי מספר הכוכבים למעל 100 ובנוסף הגבילו את הסינון רק לפרוייקטים אשר ברישיונות מסוימיים, מהם אספו Commitים המכילים לפחות 10 תווים ב 22 שפות תכנות שונות.

הדאטהסט הסופי 1.4 מיליון קבצים מ-19 מיליון Commitים, ולאחר קידוד 1.086 מיליארד טוקנים כשאורך הרצף הממוצע הוא 888 טוקנים.

על פי CarperAI, הדטאהסט ישוחרר בקרוב.

מימון: המודלים אומנו על 64 GPUs מתנת Stability AI שמימנו פרוייקט זה באמצעות גישה למשאבי המחשוב שלהם. הם אוהבים לקחת לאנשים את העבודה!

 

רפרנסים:

[0] שחרור המודל: https://carper.ai/diff-models-a-new-way-to-edit-code/

[1] המודל של סיילספורס – CodeGen, כאן: https://github.com/salesforce/CodeGen

[2] המודל של BigCode (תת קבוצה בBigScience), כרגע המודל הפתוח החזק בעולם ליצירת קוד: https://huggingface.co/bigcode/santacoder

[3] סדרת המודלים של CodeParrot, כאן: https://huggingface.co/codeparrot

עוד בנושא: