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

1. מבוא

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

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

אמורה להופיע התוצאה הבאה:

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

כדי לעשות את זה, אפשר להפעיל את השיטה get_כוונוןd_model() ב-LLM עם כתובת ה-URL המלאה ENDPOINT של המודל המכוונן שנפרס מ-Vertex AI Model Registry. לתשומת ליבכם: במקרה הזה מזינים את הפרויקט 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. אפשר לראות את תוצאות ההערכה גם במסוף Google Cloud בדף Model Registry של Vertex AI.

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

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

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

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

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

11. מזל טוב

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

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