כוונון עדין של מודלים גדולים של שפה: איך Vertex AI לוקח מודל שפה גדול (LLM) לרמה הבאה

1. מבוא

למה כוונון עדין חשוב

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

בשיעור Codelab הזה תלמדו איך לבצע כוונון עדין באמצעות גישת הכוונון המפוקחת למודל LLM.

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

מידע נוסף על התאמה אישית של מודלים זמין כאן.

מה תפַתחו

תרחיש לדוגמה: יצירת כותרות לכתבות חדשותיות

נניח שאתם רוצים ליצור כותרות לכתבות חדשות באופן אוטומטי. באמצעות Vertex AI, אפשר לבצע כוונון עדין של מודל LLM שיוצר כותרת מתאימה ומסוכמת בסגנון ספציפי, ומתאים אישית את הכותרת בהתאם להנחיות של ערוץ החדשות.

ב-codelab הזה תבצעו את הפעולות הבאות:

  • משתמשים ב-BBC FULLTEXT DATA (שזמין דרך מערך הנתונים הציבורי של BigQuery‏ bigquery-public-data.bbc_news.fulltext).
  • מכווננים מודל LLM‏ (text-bison@002) למודל מכוונן חדש בשם bbc-news-summary-tuned ומשווים את התוצאה לתשובה מהמודל הבסיסי. קובץ JSONL לדוגמה זמין במאגר של ה-codelab הזה. אפשר להעלות את הקובץ לקטגוריה של Cloud Storage ולבצע את השלבים הבאים של כוונון עדין:
  • הכנת הנתונים: מתחילים עם מערך נתונים של כתבות חדשותיות והכותרות התואמות שלהן, כמו מערך הנתונים של BBC News שמשמש בקוד לדוגמה.
  • התאמה עדינה של מודל שאומן מראש: בוחרים מודל בסיסי כמו text-bison@002 ומבצעים התאמה עדינה שלו באמצעות נתוני החדשות שלכם באמצעות Vertex AI SDK ל-Python.
  • הערכת התוצאות: משווים את הביצועים של המודל שעבר כוונון עדין עם המודל הבסיסי כדי לראות את השיפור באיכות של יצירת הכותרות.
  • פריסה ושימוש במודל: הופכים את המודל המכוונן לזמין דרך נקודת קצה ל-API ומתחילים ליצור כותרות לכתבות חדשות באופן אוטומטי.

‫2. לפני שמתחילים

  1. ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
  2. מוודאים שהחיוב מופעל בפרויקט בענן שלכם ב-Google Cloud. כך בודקים אם החיוב מופעל בפרויקט
  3. פותחים את Colab Notebook ונכנסים לאותו חשבון שמוגדר כחשבון Google Cloud הפעיל הנוכחי.

3. כוונון עדין של מודל שפה גדול

בשיעור Codelab הזה נשתמש ב-Vertex AI SDK ל-Python כדי לבצע כוונון עדין של המודל. אפשר לבצע התאמה עדינה גם באמצעות האפשרויות האחרות – HTTP, פקודת CURL, Java SDK ו-Console.

אתם יכולים לכוונן את המודל ולהעריך את התשובות המותאמות אישית ב-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 במאגר. חשוב להחליף את 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)

בשלב הזה אמור להתקבל:

17274866af36a47c.png

6. שלב 3: כוונון עדין של מודל שפה גדול

בשלב הזה אפשר לכוונן כל מודל שפה גדול (בהתאם לזמינות התמיכה) . עם זאת, בקטע הקוד הזה אנחנו משפרים את המודל שאומן מראש 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)

אמורה להתקבל התוצאה הבאה:

67061c36b7ba39b7.png

כדי לבצע חיזוי באמצעות מודל הבסיס (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)

אמורה להתקבל התוצאה הבאה:

22ec58e4261405d6.png

למרות ששני השמות שנוצרו נראים מתאימים, השם הראשון (שנוצר באמצעות המודל שעבר כוונון עדין) תואם יותר לסגנון השמות שמשמשים במערך הנתונים הרלוונטי.

טעינת המודל שעבר כוונון עדין

יכול להיות שיהיה קל יותר לטעון מודל שעבר כוונון עדין. אבל חשוב לזכור שבשלב 3, הפונקציה מופעלת בהיקף של הקוד עצמו, ולכן היא עדיין מחזיקה את המודל המכוונן במשתנה tuned_model. אבל מה קורה אם רוצים להפעיל מודל שעבר כוונון בעבר?

כדי לעשות את זה, אפשר להפעיל את השיטה get_tuned_model() במודל ה-LLM עם כתובת ה-URL המלאה של נקודת הקצה של המודל המכוונן שנפרס ממרשם המודלים של 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: הערכת המודל החדש שעבר כוונון עדין

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

  1. טוענים את מערך הנתונים EVALUATION:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
  1. מגדירים את מפרט ההערכה למשימת סיכום טקסט במודל שעבר כוונון עדין.
task_spec = EvaluationTextSummarizationSpec(
 task_name = "summarization",
 ground_truth_data=df
)

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

387843d6c970e02.png

המדד rougeLSum בתוצאת ההערכה מציין את הציון של ROUGE-L לסיכום. ‫ROUGE-L הוא מדד שמבוסס על היזכרות ומודד את החפיפה בין סיכום לבין סיכום ייחוס. החישוב מתבצע על ידי מציאת הרצף המשותף הארוך ביותר (LCS) בין שני הסיכומים, וחלוקתו באורך של סיכום הייחוס.

הציון rougeLSum בביטוי שצוין הוא 0.36600753600753694, כלומר יש חפיפה של 36.6% בין הסיכום לבין סיכום הייחוס.

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

תוצאות ההערכה מופיעות בספריית הפלט של Cloud Storage שציינתם כשייצרתם את משימת ההערכה. שם הקובץ הוא evaluation_metrics.json. בנוסף, בדף Model Registry של Vertex AI במסוף Google Cloud, אפשר לראות את תוצאות ההערכה של מודלים שעברו התאמה.

9. שיקולים חשובים

  • תמיכה במודלים: חשוב תמיד לבדוק את התיעוד של המודל כדי לראות מהי התאימות העדכנית.
  • פיתוח מהיר: תחום ה-LLM מתפתח במהירות. מודל חדש וחזק יותר עשוי להניב ביצועים טובים יותר ממודל שעבר כוונון עדין ונבנה על בסיס ישן יותר. החדשות הטובות הן שאפשר להשתמש בטכניקות האלה של כוונון עדין במודלים חדשים יותר כשהיכולת הזו תהיה זמינה.
  • LoRA:‏ LoRA היא טכניקה לכוונון עדין ויעיל של מודלים גדולים של שפה. הוא עושה את זה על ידי הוספה של מטריצות ניתנות לאימון עם דרגה נמוכה לשכבות של המודל הקיים שעבר אימון מראש. מידע נוסף זמין כאן. במקום לעדכן את כל הפרמטרים של מודל שפה גדול (LLM) עצום, LoRA לומד מטריצות קטנות יותר שנוספות למטריצות המשקל של המודל המקורי או מוכפלות בהן. כך מצמצמים באופן משמעותי את מספר הפרמטרים הנוספים שנוספים במהלך הכוונון העדין.

10. הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם ב-codelab הזה:

  1. במסוף Google Cloud, עוברים לדף Manage resources.
  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
  4. אפשר גם להיכנס אל מרשם המודלים, לעבור לכרטיסייה model deploy and test (פריסת מודל ובדיקה), לבטל את הפריסה של נקודת הקצה ולמחוק את המודל המכוונן שנפרס.

11. מזל טוב

מעולה! השתמשתם בהצלחה ב-Vertex AI כדי לבצע התאמה עדינה של מודל LLM. כוונון עדין הוא טכניקה יעילה שמאפשרת לכם להתאים אישית מודלים גדולים של שפה לדומיין ולמשימות שלכם. עם Vertex AI, יש לכם את הכלים והמשאבים שאתם צריכים כדי לכוונן את המודלים בצורה יעילה ואפקטיבית.

אתם יכולים לעיין במאגרי GitHub ולהתנסות בקוד לדוגמה כדי לחוות כוונון עדין והערכה ממקור ראשון. כדאי לחשוב איך מודלים של שפה גדולה (LLM) שעברו כוונון עדין יכולים לענות על הצרכים הספציפיים שלכם, החל מיצירת טקסט שיווקי ממוקד ועד לסיכום מסמכים מורכבים או תרגום שפות עם ניואנסים תרבותיים. אתם יכולים להשתמש בחבילה המקיפה של כלים ושירותים שמוצעים ב-Vertex AI כדי ליצור, לאמן, להעריך ולפרוס בקלות את המודלים המכווננים שלכם.