מדריך למתחילים של Keras CodeGemma

להצגה ב-ai.google.dev הפעלה ב-Google Colab הצגת המקור ב-GitHub

CodeGemma היא משפחה של מודלים חד-פעמיים קלילים ופתוחים שנוצרו על ידי אותו מחקר וטכנולוגיה ששימשו ליצירת המודלים של Gemini.

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

ל-CodeGemma יש 3 וריאציות:

  • מודל שעבר אימון מראש על ידי קוד 7B
  • מודל קוד מכוונן להוראה 7B
  • מודל 2B שאומן במיוחד למילוי קוד ויצירה של קוד פתוח.

במדריך הזה מוסבר איך להשתמש במודל CodeGemma 2B עם KerasNLP במשימה של השלמת קוד.

הגדרה

קבלת גישה ל-CodeGemma

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

  • ניתן לקבל גישה ל-Gemma בכתובת kaggle.com.
  • בחירת זמן ריצה של Colab עם מספיק משאבים להרצה במודל Gemma 2B.
  • יצירה והגדרה של שם משתמש ומפתח API ב-Kaggle.

אחרי שמשלימים את ההגדרה של Gemma, עוברים לקטע הבא, שבו מגדירים משתני סביבה לסביבת Colab.

בחירת סביבת זמן הריצה

כדי להשלים את המדריך הזה, צריך שיהיה לך זמן ריצה של Colab עם מספיק משאבים כדי להריץ את המודל CodeGemma 2B. במקרה הזה, תוכלו להשתמש ב-GPU T4:

  1. בפינה השמאלית העליונה של חלון Colab, לוחצים על ▾ (אפשרויות חיבור נוספות).
  2. בוחרים באפשרות Change runtime type (שינוי הסוג של סביבת זמן הריצה).
  3. בקטע Hardware Aacclerator (מאיץ החומרה), בוחרים באפשרות T4 GPU.

הגדרה של מפתח ה-API

כדי להשתמש ב-Gemma, עליך לציין את שם המשתמש שלך ב-Kaggle ומפתח Kaggle API.

כדי ליצור מפתח Kaggle API, עוברים לכרטיסייה Account בפרופיל המשתמש ב-Kaggle ובוחרים באפשרות Create New Token. הפעולה הזו תגרום להורדה של קובץ kaggle.json שמכיל את פרטי הכניסה ל-API.

ב-Colab, בוחרים באפשרות Secrets (🔑) בחלונית הימנית ומוסיפים את שם המשתמש של Kaggle ואת מפתח ה-API של Kaggle. שומרים את שם המשתמש בשם KAGGLE_USERNAME ואת מפתח ה-API בשם KAGGLE_KEY.

הגדרה של משתני סביבה

הגדרה של משתני סביבה בשביל KAGGLE_USERNAME ו-KAGGLE_KEY.

import os
from google.colab import userdata

os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

יחסי תלות בהתקנות

pip install -q -U keras-nlp

בחירת קצה עורפי

Keras הוא ממשק API ללמידה עמוקה (Deras) ברמה גבוהה של כמה פריימים, שנועד לפשט וקלות שימוש. באמצעות Keras 3, אתם יכולים להריץ תהליכי עבודה באחד משלושה קצוות עורפיים: TensorFlow, JAX או PyTorch.

במדריך הזה, צריך להגדיר את הקצה העורפי של TensorFlow.

os.environ["KERAS_BACKEND"] = "tensorflow"  # Or "jax" or "torch".

ייבוא חבילות

לייבא את Keras ו-KerasNLP.

import keras_nlp
import keras

# Run at half precision.
keras.config.set_floatx("bfloat16")

טעינת המודל

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

יוצרים את המודל באמצעות השיטה from_preset:

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("code_gemma_2b_en")
gemma_lm.summary()
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/config.json...
100%|██████████| 554/554 [00:00<00:00, 1.41MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/model.weights.h5...
100%|██████████| 4.67G/4.67G [05:06<00:00, 16.4MB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/tokenizer.json...
100%|██████████| 401/401 [00:00<00:00, 382kB/s]
Downloading from https://www.kaggle.com/api/v1/models/keras/codegemma/keras/code_gemma_2b_en/1/download/assets/tokenizer/vocabulary.spm...
100%|██████████| 4.04M/4.04M [00:01<00:00, 2.41MB/s]

ה-method from_preset מייצרת את המודל מתוך ארכיטקטורה ומשקולות מוגדרות מראש. בקוד שלמעלה, המחרוזת code_gemma_2b_en מציינת את הארכיטקטורה שהוגדרה מראש – מודל CodeGemma עם 2 מיליארד פרמטרים.

השלמת קוד מלא

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

CodeGemma מאפשר להשתמש ב-4 אסימונים בהגדרת המשתמש – 3 עבור FIM ואסימון <|file_separator|> לתמיכה בהקשר מרובה קבצים. השתמשו במספרים האלה כדי להגדיר קבועים.

BEFORE_CURSOR = "<|fim_prefix|>"
AFTER_CURSOR = "<|fim_suffix|>"
AT_CURSOR = "<|fim_middle|>"
FILE_SEPARATOR = "<|file_separator|>"

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

END_TOKEN = gemma_lm.preprocessor.tokenizer.end_token

stop_tokens = (BEFORE_CURSOR, AFTER_CURSOR, AT_CURSOR, FILE_SEPARATOR, END_TOKEN)

stop_token_ids = tuple(gemma_lm.preprocessor.tokenizer.token_to_id(x) for x in stop_tokens)

עיצוב ההנחיה להשלמת הקוד. הערה:

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

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

def format_completion_prompt(before, after):
    return f"{BEFORE_CURSOR}{before}{AFTER_CURSOR}{after}{AT_CURSOR}"

before = "import "
after = """if __name__ == "__main__":\n    sys.exit(0)"""
prompt = format_completion_prompt(before, after)
print(prompt)
<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":
    sys.exit(0)<|fim_middle|>

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

gemma_lm.generate(prompt, stop_token_ids=stop_token_ids, max_length=128)
'<|fim_prefix|>import <|fim_suffix|>if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>'

המודל מספק sys בתור השלמת הקוד המוצעת.

סיכום

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

בכרטיס המודל של CodeGemma אפשר למצוא גם את המפרטים הטכניים של דגמי CodeGemma.