להתחיל לעבוד עם Gemma באמצעות KerasNLP

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

במדריך הזה מוסבר איך להתחיל להשתמש ב-Gemma באמצעות KerasNLP. Gemma היא משפחה של מודלים חד-פעמיים קלילים ופתוחים שנוצרו על ידי אותו מחקר וטכנולוגיה ששימשו ליצירת המודלים של Gemini. KerasNLP הוא אוסף של מודלים של עיבוד שפה טבעית (NLP) שמוטמעים ב-Keras וניתן להריץ אותם ב-JAX, ב-PyTorch וב-TensorFlow.

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

הגדרה

הגדרת Gemma

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

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

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

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

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

import os
from google.colab import userdata

# Note: `userdata.get` is a Colab API. If you're not using Colab, set the env
# vars as appropriate for your system.
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')

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

מתקינים את Keras ו-KerasNLP.

# Install Keras 3 last. See https://keras.io/getting_started/ for more details.
pip install -q -U keras-nlp
pip install -q -U "keras>=3"

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

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

import os

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

ייבוא חבילות

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

import keras
import keras_nlp

יצירת מודל

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

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

gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma2_2b_en")

הפונקציה GemmaCausalLM.from_preset() יוצרת את המודל מארכיטקטורה ומשקולות מוגדרות מראש. בקוד שלמעלה, המחרוזת "gemma2_2b_en" מציינת את ההגדרה הקבועה מראש של מודל Gemma 2 2B עם 2 מיליארד פרמטרים. יש גם מודלים של Gemma עם פרמטרים של 7B, 9B ו-27B. מחרוזות הקוד של דגמים של Gemma מופיעים בכרטיסי המוצר של וריאציית המודל ב-Kaggle.

אפשר להשתמש ב-summary כדי לקבל מידע נוסף על המודל:

gemma_lm.summary()

כמו שאפשר לראות בסיכום, למודל יש 2.6 מיליארד פרמטרים שניתן לאמן.

יצירת טקסט

עכשיו הגיע הזמן ליצור טקסט! למודל יש שיטה מסוג generate שיוצרת טקסט על סמך הנחיה. הארגומנט האופציונלי max_length מציין את האורך המקסימלי של הרצף שנוצר.

אפשר לנסות להשתמש בהנחיה "what is keras in 3 bullet points?".

gemma_lm.generate("what is keras in 3 bullet points?", max_length=64)
'what is keras in 3 bullet points?\n\n[Answer 1]\n\nKeras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, Theano, or PlaidML. It is designed to be user-friendly and easy to extend.\n\n'

אפשר לנסות להתקשר שוב אל generate עם הנחיה אחרת.

gemma_lm.generate("The universe is", max_length=64)
'The universe is a vast and mysterious place, filled with countless stars, planets, and galaxies. But what if there was a way to see the universe in a whole new way? What if we could see the universe as it was when it was first created? What if we could see the universe as it is now'

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

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

gemma_lm.generate(
    ["what is keras in 3 bullet points?",
     "The universe is"],
    max_length=64)
['what is keras in 3 bullet points?\n\n[Answer 1]\n\nKeras is a high-level neural networks API, written in Python and capable of running on top of TensorFlow, CNTK, Theano, or PlaidML. It is designed to be user-friendly and easy to extend.\n\n',
 'The universe is a vast and mysterious place, filled with countless stars, planets, and galaxies. But what if there was a way to see the universe in a whole new way? What if we could see the universe as it was when it was first created? What if we could see the universe as it is now']

אופציונלי: אפשר לנסות דוגם אחר

אפשר לשלוט באסטרטגיית היצירה של GemmaCausalLM על ידי הגדרת הארגומנט sampler ב-compile(). כברירת מחדל, המערכת תשתמש בדגימה של "greedy".

כניסוי, כדאי לנסות להגדיר שיטת בידינג מסוג "top_k":

gemma_lm.compile(sampler="top_k")
gemma_lm.generate("The universe is", max_length=64)
'The universe is a big place, and there are so many things we do not know or understand about it.\n\nBut we can learn a lot about our world by studying what is known to us.\n\nFor example, if you look at the moon, it has many features that can be seen from the surface.'

אלגוריתם ברירת המחדל באלגוריתם החמדן תמיד בוחר את האסימון שיש לו את הסבירות הגבוהה ביותר, אבל האלגוריתם המוביל של K בוחרים באקראי את האסימון הבא מתוך האסימונים בעלי הסבירות הגבוהה ביותר K.

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

המאמרים הבאים

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