במדריך הזה תלמדו איך להתחיל להשתמש ב-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 ברמה גבוהה ללמידת עומק במסגרות מרובות, שתוכנן להיות פשוט וקל לשימוש. ב-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']
אופציונלי: אפשר לנסות Sampler אחר
כדי לקבוע את שיטת היצירה של 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.'
בעוד שהאלגוריתם החמדן שמוגדר כברירת מחדל תמיד בוחר את האסימון עם ההסתברות הגבוהה ביותר, האלגוריתם top-K בוחר באופן אקראי את האסימון הבא מתוך האסימונים עם ההסתברות הגבוהה ביותר מתוך K.
אתם לא חייבים לציין sampler, ואפשר להתעלם מקטע הקוד האחרון אם הוא לא עוזר לתרחיש לדוגמה שלכם. מידע נוסף על הסמפלרים הזמינים זמין במאמר סמפלרים.
המאמרים הבאים
במדריך הזה למדתם איך ליצור טקסט באמצעות KerasNLP ו-Gemma. ריכזנו כאן כמה הצעות לנושאים שאפשר ללמוד בהמשך: