מידע על Codelab זה
1. מבוא
למה חשוב לבצע שיפורים
מודלים בסיסיים מאומנים למטרות כלליות, ולפעמים הם לא מבצעים משימות כמו שציפיתם. יכול להיות שהסיבה לכך היא שהמשימות שאתם רוצים שהמודל יבצע הן משימות מיוחדות שקשה ללמד מודל באמצעות עיצוב הנחיות בלבד. במקרים כאלה, אפשר להשתמש בכוונון מודל כדי לשפר את הביצועים של מודל למשימות ספציפיות. כוונון מודל יכול גם לעזור לעמוד בדרישות ספציפיות של פלט כשההוראות לא מספיקות. מודלים גדולים של שפה (LLM) יכולים להכיל כמות עצומה של מידע ולבצע משימות רבות, אבל הם מצטיינים רק כשהם מקבלים אימון מיוחד. כוונון עדין יכול לאמן מודל שפה גדול, וכך לאפשר לכם להתאים מודל שפה גדול שהוכשרה מראש לצרכים הספציפיים שלכם.
בקודלאב הזה תלמדו איך לבצע כוונון עדין באמצעות הגישה של כוונון בפיקוח למודל LLM.
התאמה מבוקרת משפרת את הביצועים של מודל על ידי לימוד של מיומנות חדשה. נתונים שמכילים מאות דוגמאות מתויגות משמשים ללמד את המודל לחקות התנהגות או משימה רצויות. אנחנו נספק מערך נתונים מתויג של טקסט קלט (הנחיה) וטקסט פלט (תגובה) כדי ללמד את המודל איך להתאים אישית את התשובות לתרחיש לדוגמה הספציפי שלנו.
כאן אפשר למצוא מידע נוסף על התאמה אישית של מודלים.
מה תפַתחו
תרחיש לדוגמה: יצירת כותרות למאמרי חדשות
נניח שאתם רוצים ליצור כותרות באופן אוטומטי למאמרי חדשות. באמצעות Vertex AI, אפשר לשפר LLM שיוצר כותרת מתאימה עם סיכום בסגנון ספציפי, ומתאים אישית את הכותרת בהתאם להנחיות של ערוץ החדשות.
ב-codelab הזה תלמדו:
- משתמשים ב-
BBC FULLTEXT DATA
(שזמין במערך הנתונים הציבוריbigquery-public-data.bbc_news.fulltext
של BigQuery). - משדרגים מודל LLM (
text-bison@002
) למודל חדש ומשופר שנקראbbc-news-summary-tuned
, ומשווים את התוצאה לתשובה מהמודל הבסיסי. קובץ JSONL לדוגמה זמין לקודלאב הזה במאגר. אפשר להעלות את הקובץ לקטגוריה ב-Cloud Storage ולבצע את השלבים הבאים לשיפור: - הכנת הנתונים: מתחילים עם מערך נתונים של כתבות חדשותיות והכותרות התואמות שלהן, כמו מערך הנתונים של BBC News ששימש בקוד לדוגמה.
- ביצוע שיפורים למודל שהוכן מראש: בוחרים מודל בסיס כמו '
text-bison@002
' ומבצעים בו שיפורים באמצעות נתוני החדשות באמצעות Vertex AI SDK ל-Python. - בודקים את התוצאות: משווים את הביצועים של המודל שעבר שינוי מדויק לבין הביצועים של מודל הבסיס כדי לראות את השיפור באיכות הכותרות שנוצרות.
- פריסה של המודל ושימוש בו: הופכים את המודל המכוונן לזמין דרך נקודת קצה ל-API ומתחילים ליצור כותרות של מאמרים חדשים באופן אוטומטי.
2. לפני שמתחילים
- בדף לבחירת הפרויקט במסוף Google Cloud, בוחרים או יוצרים פרויקט ב-Google Cloud.
- מוודאים שהחיוב מופעל בפרויקט שלכם ב-Google Cloud. כך בודקים אם החיוב מופעל בפרויקט
- פותחים את Colab Notebook ונכנסים לאותו חשבון שבו אתם משתמשים ב-Google Cloud.
3. כוונון עדין של מודל שפה גדול
בשיעור ה-Codelab הזה נעשה שימוש ב-Vertex AI SDK ל-Python כדי לשפר את המודל. אפשר לבצע שיפורים גם באמצעות האפשרויות האחרות – HTTP, פקודת CURL, Java SDK, מסוף.
אפשר לשפר ולבדוק את המודל לתשובות בהתאמה אישית ב-5 שלבים. אפשר לעיין בקוד המלא בקובץ llm_fine_tuning_supervised.ipynb במאגר.
4. שלב 1: התקנה וייבוא של יחסי התלות
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
פועלים לפי שאר השלבים שמפורטים בקובץ .ipynb ב-repo. חשוב להחליף את PROJECT_ID ו-BUCKET_NAME בפרטי הכניסה שלכם.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. שלב 2: הכנה וטעינה של נתוני אימון
מחליפים את YOUR_BUCKET בקטגוריה שלכם ומעלים אליה את קובץ נתוני האימון לדוגמה TRAIN.jsonl. הנתונים לדוגמה הוקצו לתרחיש השימוש הזה בקישור שצוין למעלה.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
בסיום השלב הזה, התוצאה אמורה להיות:
6. שלב 3: כוונון עדין של מודל שפה גדול
בשלב הזה אפשר לכוונן כל מודל שפה גדול (LLM) (בהתאם לזמינות התמיכה) . עם זאת, בקטע הקוד הזה אנחנו מבצעים התאמה של המודל המאומן מראש 'text-bison@002' באמצעות מסגרת הנתונים שמכילה את נתוני האימון שהורדנו בשלב הקודם:
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
השלב הזה עשוי להימשך כמה שעות. אפשר לעקוב אחרי התקדמות השיפור באמצעות הקישור למשימה בצינור עיבוד הנתונים בתוצאה.
7. שלב 4: חיזוי באמצעות המודל החדש שעבר שיפור
אחרי שמשימת השיפור תסתיים, תוכלו לבצע תחזיות באמצעות המודל החדש. כדי לבצע חיזוי באמצעות המודל החדש שעבר כוונון:
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
התוצאה אמורה להיות:
כדי לחזות באמצעות מודל הבסיס (text-bison@002
) לצורך השוואה, מריצים את הפקודות הבאות:
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
התוצאה אמורה להיות:
למרות ששני השמות שנוצרו נראים מתאימים, השם הראשון (שנוצר באמצעות המודל שעבר כוונון) תואם יותר לסגנון השמות שנעשה בהם שימוש במערך הנתונים הרלוונטי.
טעינה של המודל המכוונן
יכול להיות שיהיה קל יותר לטעון מודל שעבר כוונון עדין. אבל חשוב לזכור שבשלב 3, הוא הופעל בהיקף הקוד עצמו, כך שהוא עדיין מכיל את המודל המכוונן במשתנה tuned_model. אבל מה קורה אם רוצים להפעיל מודל שעבר כוונון בעבר?
כדי לעשות זאת, אפשר להפעיל את השיטה get_tuned_model() ב-LLM עם כתובת ה-URL המלאה של נקודת הקצה (ENDPOINT) של המודל המכוונן שפרסמתם במרשם המודלים של Vertex AI. שימו לב שבמקרה הזה, מזינים את PROJECT_NUMBER ואת MODEL_NUMBER במקום את המזהים המתאימים שלהם.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. שלב 5: הערכת המודל החדש שעבר כוונון
הערכה היא היבט קריטי בהערכת האיכות והרלוונטיות של התשובה שנוצרה. התהליך כולל בדיקה של הפלט של מודל שפה גנרטיבי כדי לקבוע את העקביות, הדיוק וההתאמה שלו להנחיה שסופקה. הערכת המודל עוזרת לזהות תחומים שצריך לשפר, לבצע אופטימיזציה של ביצועי המודל ולוודא שהטקסט שנוצר עומד בסטנדרטים הרצויים של איכות ושימושיות. מידע נוסף זמין במסמכי התיעוד. בשלב הזה, נראה איך אפשר לקבל מדדי הערכה מסוימים של המודל המכוונן ולבצע השוואה למודל הבסיס.
- טוענים את מערך הנתונים EVALUATION:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- מגדירים את מפרט ההערכה של משימה לסיכום טקסט במודל שעבר שינוי מותאם אישית.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
השלב הזה יימשך כמה דקות. אפשר לעקוב אחרי ההתקדמות באמצעות הקישור למשימה בצינור עיבוד הנתונים בתוצאה. בסיום, תופיע תוצאת ההערכה הבאה:
המדד rougeLSum
בתוצאת ההערכה מציין את הציון של ROUGE-L לסיכום. ROUGE-L הוא מדד שמבוסס על זיכרון, ומדד את החפיפה בין סיכום לבין סיכום של מסמך עזר. כדי לחשב את המדד הזה, המערכת מחלקת את האורך של רצף המשנה המשותף הארוך ביותר (LCS) בין שני הסיכומים באורך של סיכום העזר.
הציון של rougeLSum
בביטוי שצוין הוא 0.36600753600753694, כלומר לסיכום יש חפיפה של 36.6% עם סיכום העזר.
אם מריצים את שלב ההערכה במודל הבסיסי, רואים שהציון הסיכום גבוה יחסית במודל שעבר שינוי מדויק.
תוצאות הבדיקה נמצאות בספריית הפלט של Cloud Storage שציינתם כשיצרתם את משימה הבדיקה. שם הקובץ הוא evaluation_metrics.json
. לגבי מודלים שעברו כוונון, אפשר גם לראות את תוצאות ההערכה במסוף Google Cloud בדף Model Registry ב-Vertex AI.
9. שיקולים חשובים
- תמיכה בדגם: תמיד כדאי לבדוק במסמכי התיעוד של הדגם את רמת התאימות העדכנית.
- פיתוח מהיר: תחום ה-LLM מתפתח במהירות. מודל חדש וחזק יותר עשוי להניב ביצועים טובים יותר מאשר מודל מותאם אישית שנבנה על בסיס ישן יותר. החדשות הטובות הן שתוכלו להחיל את שיטות השיפור האלה על מודלים חדשים יותר כשהיכולת הזו תהיה זמינה.
- LoRA: LoRA היא טכניקה לכוונון יעיל של מודלים גדולים של שפה. לשם כך, מוסיפים למעטפות הקיימות של המודל המאומן מראש מטריצות פירוק ברמה נמוכה שניתן לאמן. מידע נוסף זמין כאן. במקום לעדכן את כל הפרמטרים של מודל LLM גדול, LoRA לומד מטריצות קטנות יותר שמתווספות למטריצות המשקולות של המודל המקורי או שמוכפלות בהן. כך ניתן לצמצם באופן משמעותי את מספר הפרמטרים הנוספים שנוספו במהלך השיפור.
10. הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בקודלאב הזה, עליכם לפעול לפי השלבים הבאים:
- נכנסים לדף Manage resources במסוף Google Cloud.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
- לחלופין, אפשר לעבור אל מרשם המודלים, לעבור לכרטיסייה 'פריסה ובדיקה של מודל', לבטל את הפריסה של נקודת הקצה ולמחוק את המודל המכוונן שנפרס.
11. מזל טוב
מעולה! השתמשתם ב-Vertex AI כדי לשפר מודל LLM. כוונון עדין הוא שיטה יעילה שמאפשרת להתאים אישית מודלים גדולים של שפה (LLMs) לדומיין ולמשימות שלכם. בעזרת Vertex AI, יש לכם את הכלים והמשאבים הדרושים כדי לשפר את המודלים שלכם ביעילות ובאפקטיביות.
כדאי לבדוק את המאגרים ב-GitHub ולנסות את הקוד לדוגמה כדי להתנסות בהתאמה אישית ובבדיקה. כדאי לחשוב איך מודלים LLM מותאמים אישית יכולים לענות על הצרכים הספציפיים שלכם, החל מיצירת תוכן שיווקי מותאם אישית ועד לסיכום מסמכים מורכבים או תרגום שפות עם ניואנסים תרבותיים. אתם יכולים להשתמש בחבילה המקיפה של הכלים והשירותים של Vertex AI כדי ליצור, לאמן, להעריך ולפרוס בקלות מודלים שעברו כוונון מדויק.