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

1. מבוא

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

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

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

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

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

מה תפַתחו

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

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

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

  • משתמשים ב-BBC FULLTEXT DATA (שזמין דרך מערך הנתונים הציבורי של BigQuery‏ bigquery-public-data.bbc_news.fulltext).
  • מבצעים התאמה עדינה של מודל שפה גדול (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 על המשאבים שבהם השתמשתם ב-Code Lab הזה:

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

11. מזל טוב

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

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