1. סקירה כללית
במעבדה הזו מוסבר בפירוט איך לפרוס שרת אפליקציות LIT ב-Google Cloud Platform (GCP) כדי ליצור אינטראקציה עם מודלים בסיסיים של Vertex AI Gemini ועם מודלים גדולים של שפה (LLM) של צד שלישי שמתארחים בעצמם. הוא כולל גם הדרכה לשימוש בממשק המשתמש של LIT לניפוי באגים בהנחיות ולפירוש מודל.
בעזרת שיעור ה-Lab הזה, המשתמשים ילמדו איך:
- הגדרת שרת LIT ב-GCP.
- קישור שרת ה-LIT למודלים של Vertex AI Gemini או ל-LLMs אחרים שמתארחים בעצמם.
- אתם יכולים להשתמש בממשק המשתמש של LIT כדי לנתח, לנפות באגים ולפרש הנחיות, וכך לשפר את הביצועים והתובנות של המודל.
מה זה LIT?
LIT הוא כלי אינטראקטיבי חזותי להבנת מודלים, שתומך בנתוני טקסט, תמונות וטבלאות. אפשר להריץ אותו כשרת עצמאי או בסביבות של notebooks כמו Google Colab, Jupyter ו-Google Cloud Vertex AI. אפשר למצוא את LIT ב-PyPI וב-GitHub.
בעדכונים האחרונים, שפותחו במקור כדי להבין מודלים של סיווג ורגרסיה, נוספו כלים לניפוי באגים בהנחיות ל-LLM. בעזרת הכלים האלה תוכלו לבדוק איך המשתמשים, המודלים והתוכן של המערכת משפיעים על התנהגות היצירה.
מהם Vertex AI ו-Model Garden?
Vertex AI היא פלטפורמה ללמידת מכונה (ML) שמאפשרת לאמן ולפרוס מודלים של למידת מכונה ואפליקציות של AI, ולהתאים אישית מודלים של LLM לשימוש באפליקציות מבוססות-AI. Vertex AI משלב תהליכי עבודה של הנדסת מערכות מידע, מדעי נתונים והנדסת למידת מכונה, וכך מאפשר לצוותים שלכם לשתף פעולה באמצעות ערכת כלים משותפת ולהתאמה לעומס של האפליקציות שלכם על בסיס היתרונות של Google Cloud.
Vertex Model Garden היא ספרייה של מודלים של למידת מכונה שבעזרתה אפשר לגלות, לבדוק, להתאים אישית ולפרוס נכסים ומודלים קנייניים של Google ומודלים נבחרים של צד שלישי.
מה עליכם לעשות
נשתמש ב-Cloud Shell וב-Cloud Run כדי לפרוס קונטיינר של Docker מקובץ אימג' שנוצר מראש של LIT.
Cloud Run היא פלטפורמת מחשוב מנוהלת שמאפשרת להריץ קונטיינרים ישירות מעל התשתית הניתנת להתאמה של Google, כולל על מעבדי GPU.
מערך נתונים
כברירת מחדל, הדגמה משתמשת במערך הנתונים לדוגמה של תכונת ניפוי הבאגים של ה-LIT prompt. אפשר גם לטעון מערך נתונים משלכם דרך ממשק המשתמש.
לפני שמתחילים
במדריך העזר הזה תצטרכו פרויקט ב-Google Cloud. אפשר ליצור פרויקט חדש או לבחור פרויקט שכבר יצרת.
2. הפעלת מסוף Google Cloud ו-Cloud Shell
בשלב הזה תשיקו את מסוף Google Cloud ותשתמשו ב-Google Cloud Shell.
2-א: פותחים את מסוף Google Cloud
מפעילים דפדפן ונכנסים אל מסוף Google Cloud.
מסוף Google Cloud הוא ממשק ניהול מאובטח וחזק באינטרנט, שמאפשר לנהל במהירות את המשאבים ב-Google Cloud. זהו כלי DevOps על הדרך.
2-ב: השקת Google Cloud Shell
Cloud Shell היא סביבת פיתוח ותפעול אונליין שאפשר לגשת אליה מכל מקום באמצעות הדפדפן. תוכלו לנהל את המשאבים באמצעות טרמינל אונליין שנטען מראש בכלים כמו כלי שורת הפקודה של Google Cloud, kubectl ועוד. אפשר גם לפתח, ליצור, לנפות באגים ולפרוס אפליקציות מבוססות-ענן באמצעות Cloud Shell Editor אונליין. Cloud Shell הוא סביבה אונליין מוכנה למפתחים, עם קבוצת כלים מועדפים מותקנת מראש ו-5GB של נפח אחסון מתמיד. בשלבים הבאים תשתמשו במסוף הפקודה.
מפעילים את Google Cloud Shell באמצעות הסמל בפינה הימנית העליונה של סרגל התפריטים, שמוקף בעיגול בכחול בצילום המסך הבא.
בתחתית הדף אמור להופיע מסוף עם מעטפת Bash.
2-ג: הגדרת פרויקט ב-Google Cloud
צריך להגדיר את מזהה הפרויקט ואת האזור של הפרויקט באמצעות הפקודה gcloud
.
# Set your GCP Project ID.
gcloud config set project your-project-id
# Set your GCP Project Region.
gcloud config set run/region your-project-region
3. פריסה של קובץ האימג' של שרת האפליקציות של LIT ב-Docker באמצעות Cloud Run
3-א: פריסת אפליקציית LIT ב-Cloud Run
קודם צריך להגדיר את הגרסה האחרונה של LIT-App כגרסה לפריסה.
# Set latest version as your LIT_SERVICE_TAG.
export LIT_SERVICE_TAG=latest
# List all the public LIT GCP App server docker images.
gcloud container images list-tags us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app
אחרי שמגדירים את תג הגרסה, צריך לתת שם לשירות.
# Set your lit service name. While 'lit-app-service' is provided as a placeholder, you can customize the service name based on your preferences.
export LIT_SERVICE_NAME=lit-app-service
לאחר מכן, אפשר להריץ את הפקודה הבאה כדי לפרוס את הקונטיינר ב-Cloud Run.
# Use below cmd to deploy the LIT App to Cloud Run.
gcloud run deploy $LIT_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app:$LIT_SERVICE_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--no-allow-unauthenticated
אפשר גם להוסיף את מערך הנתונים ב-LIT כשמפעילים את השרת. לשם כך, צריך להגדיר את המשתנה DATASETS
כך שיכלול את הנתונים שרוצים לטעון, בפורמט name:path
, לדוגמה data_foo:/bar/data_2024.jsonl
. הפורמט של מערך הנתונים צריך להיות .jsonl, כאשר כל רשומה מכילה את השדה prompt
ואת השדות האופציונליים target
ו-source
. כדי לטעון כמה מערכי נתונים, מפרידים ביניהם באמצעות פסיק. אם לא תגדירו את הפרמטר, יוטען מערך הנתונים לדוגמה לניפוי באגים של ה-LIT prompt.
# Set the dataset.
export DATASETS=[DATASETS]
הגדרת MAX_EXAMPLES מאפשרת לכם להגדיר את המספר המקסימלי של דוגמאות לטעינה מכל קבוצת הערכה.
# Set the max examples.
export MAX_EXAMPLES=[MAX_EXAMPLES]
לאחר מכן, אפשר להוסיף את הפרמטר הזה לפקודת הפריסה:
--set-env-vars "DATASETS=$DATASETS" \
--set-env-vars "MAX_EXAMPLES=$MAX_EXAMPLES" \
3-b: הצגת שירות LIT App
אחרי שיוצרים את שרת האפליקציה של LIT, אפשר למצוא את השירות בקטע Cloud Run במסוף Cloud.
בוחרים את השירות של אפליקציית LIT שיצרתם. צריך לוודא ששם השירות זהה לשם של LIT_SERVICE_NAME
.
כדי למצוא את כתובת ה-URL של השירות, לוחצים על השירות שפרסמתם.
לאחר מכן אמורה להופיע ממשק המשתמש של LIT. אם נתקלים בשגיאה, עוברים לקטע 'פתרון בעיות'.
בקטע LOGS אפשר לעקוב אחרי הפעילות, לראות הודעות שגיאה ולעקוב אחרי ההתקדמות של הפריסה.
בקטע 'מדדים' אפשר לראות את המדדים של השירות.
3-ג: טעינת מערכי נתונים
לוחצים על האפשרות Configure
בממשק המשתמש של LIT ובוחרים באפשרות Dataset
. כדי לטעון את מערך הנתונים, מציינים שם ומספקים את כתובת ה-URL של מערך הנתונים. הפורמט של מערך הנתונים צריך להיות .jsonl, כאשר כל רשומה מכילה את השדה prompt
ואת השדות האופציונליים target
ו-source
.
4. הכנת מודלים של Gemini ב-Model Garden
מודלים בסיסיים של Gemini מבית Google זמינים דרך Vertex AI API. ב-LIT יש את מעטפת המודל VertexAIModelGarden
, שמאפשרת להשתמש במודלים האלה ליצירה. צריך רק לציין את הגרסה הרצויה (למשל, 'gemini-1.5-pro-001') באמצעות הפרמטר של שם המודל. יתרון מרכזי של השימוש במודלים האלה הוא שהם לא דורשים מאמץ נוסף לפריסה. כברירת מחדל, יש לכם גישה מיידית למודלים כמו Gemini 1.0 Pro ו-Gemini 1.5 Pro ב-GCP, כך שאין צורך לבצע שלבי הגדרה נוספים.
4-א: מתן הרשאות ל-Vertex AI
כדי לשלוח שאילתות ל-Gemini ב-GCP, צריך להקצות ל-Vertex AI הרשאות בחשבון השירות. מוודאים ששם חשבון השירות הוא Default compute service account
. מעתיקים את כתובת האימייל של חשבון השירות הרלוונטי.
מוסיפים את כתובת האימייל של חשבון השירות כחשבון משתמש עם התפקיד Vertex AI User
ברשימת ההיתרים של IAM.
4-ב: טעינת מודלים של Gemini
עליכם לטעון מודלים של Gemini ולהתאים את הפרמטרים שלהם לפי השלבים הבאים.
- לוחצים על האפשרות
Configure
בממשק המשתמש של LIT.
- לוחצים על האפשרות
- בוחרים באפשרות
gemini
בקטעSelect a base model
.
- בוחרים באפשרות
- צריך לתת שם לדגם בשדה
new_name
.
- צריך לתת שם לדגם בשדה
- מזינים את מודלי Gemini שנבחרו כ-
model_name
.
- מזינים את מודלי Gemini שנבחרו כ-
- לוחצים על
Load Model
.
- לוחצים על
- לוחצים על
Submit
.
- לוחצים על
5. פריסה של שרת מודלים של LLMs באירוח עצמי ב-GCP
אירוח עצמאי של מודלים של LLM באמצעות קובץ האימג' של שרת המודל ב-Docker של LIT מאפשר לכם להשתמש בפונקציות של LIT לזיהוי סמלים ולזיהוי סמלים כדי לקבל תובנות מעמיקות יותר לגבי התנהגות המודל. קובץ האימג' של שרת המודל פועל עם מודלים של KerasNLP או Hugging Face Transformers, כולל משקלים שסופקו על ידי ספרייה ומשקלים באירוח עצמי, למשל ב-Google Cloud Storage.
5-א: הגדרת מודלים
כל מאגר טוען מודל אחד, שמוגדר באמצעות משתני סביבה.
כדי לציין את המודלים לטעינה, צריך להגדיר את MODEL_CONFIG. הפורמט צריך להיות name:path
, למשל model_foo:model_foo_path
. הנתיב יכול להיות כתובת URL, נתיב של קובץ מקומי או השם של הגדרה קבועה מראש למסגרת של למידה עמוקה (Deep Learning) שהוגדרה (מידע נוסף מפורט בטבלה הבאה). השרת הזה נבדק עם Gemma, GPT2, Llama ו-Mistral בכל הערכים הנתמכים של DL_FRAMEWORK
. מודלים אחרים אמורים לפעול, אבל יכול להיות שצריך לבצע התאמות.
# Set models you want to load. While 'gemma2b is given as a placeholder, you can load your preferred model by following the instructions above.
export MODEL_CONFIG=gemma2b:gemma_2b_en
בנוסף, שרת המודל של LIT מאפשר להגדיר משתני סביבה שונים באמצעות הפקודה הבאה. הפרטים מופיעים בטבלה. לתשומת ליבכם: צריך להגדיר כל משתנה בנפרד.
# Customize the variable value as needed.
export [VARIABLE]=[VALUE]
משתנה | ערכים | תיאור |
DL_FRAMEWORK |
| ספריית המודלים שמשמש לטעינת משקלי המודל בסביבת זמן הריצה שצוינה. ברירת המחדל היא |
DL_RUNTIME |
| מסגרת הקצה העורפי של למידה עמוקה (Deep Learning) שבה המודל פועל. כל המודלים שנטענים על ידי השרת הזה ישתמשו באותו קצה עורפי, ואי-תאימות תוביל לשגיאות. ברירת המחדל היא |
PRECISION |
| רמת הדיוק של הנקודה הצפה במודלים של LLM. ברירת המחדל היא |
BATCH_SIZE | מספרים שלמים חיוביים | מספר הדוגמאות לעיבוד בכל קבוצה. ברירת המחדל היא |
SEQUENCE_LENGTH | מספרים שלמים חיוביים | אורך הרצף המקסימלי של הנחיית הקלט בתוספת הטקסט שנוצר. ברירת המחדל היא |
5-ב: פריסת שרת המודלים ב-Cloud Run
קודם צריך להגדיר את הגרסה האחרונה של Model Server כגרסה לפריסה.
# Set latest as MODEL_VERSION_TAG.
export MODEL_VERSION_TAG=latest
# List all the public LIT GCP model server docker images.
gcloud container images list-tags us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server
אחרי שמגדירים את תג הגרסה, צריך לתת שם לשרת המודלים.
# Set your Service name.
export MODEL_SERVICE_NAME='gemma2b-model-server'
לאחר מכן, אפשר להריץ את הפקודה הבאה כדי לפרוס את הקונטיינר ב-Cloud Run. אם לא תגדירו את משתני הסביבה, יוחלו ערכי ברירת מחדל. מאחר שרוב ה-LLMs דורשים משאבי מחשוב יקרים, מומלץ מאוד להשתמש ב-GPU. אם אתם מעדיפים להריץ את הקוד רק ב-CPU (האפשרות הזו מתאימה למודלים קטנים כמו GPT2), תוכלו להסיר את הארגומנטים הרלוונטיים --gpu 1 --gpu-type nvidia-l4 --max-instances 7
.
# Deploy the model service container.
gcloud beta run deploy $MODEL_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server:$MODEL_VERSION_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 7 \
--set-env-vars "MODEL_CONFIG=$MODEL_CONFIG" \
--no-allow-unauthenticated
בנוסף, אפשר להתאים אישית את משתני הסביבה על ידי הוספת הפקודות הבאות. מומלץ לכלול רק את משתני הסביבה הנחוצים לצרכים הספציפיים שלכם.
--set-env-vars "DL_FRAMEWORK=$DL_FRAMEWORK" \
--set-env-vars "DL_RUNTIME=$DL_RUNTIME" \
--set-env-vars "PRECISION=$PRECISION" \
--set-env-vars "BATCH_SIZE=$BATCH_SIZE" \
--set-env-vars "SEQUENCE_LENGTH=$SEQUENCE_LENGTH" \
יכול להיות שתצטרכו להגדיר משתני סביבה נוספים כדי לגשת למודלים מסוימים. בהתאם לצורך, אפשר לעיין בהוראות ב-Kaggle Hub (למודלים של KerasNLP) וב-Hugging Face Hub.
5-ג: גישה לשרת המודלים
אחרי שיוצרים את שרת המודל, השירות שהופעל יופיע בקטע Cloud Run בפרויקט GCP.
בוחרים את שרת המודל שיצרתם זה עתה. מוודאים ששם השירות זהה לשם MODEL_SERVICE_NAME
.
כדי למצוא את כתובת ה-URL של השירות, לוחצים על שירות המודל שפרסתם.
בקטע LOGS אפשר לעקוב אחרי הפעילות, לראות הודעות שגיאה ולעקוב אחרי ההתקדמות של הפריסה.
בקטע 'מדדים' אפשר לראות את המדדים של השירות.
5-ד: טעינת מודלים מתארחים
אם משתמשים בשרת proxy של LIT בשלב 3 (ראו הקטע 'פתרון בעיות'), צריך להריץ את הפקודה הבאה כדי לקבל את אסימון הזהות של GCP.
# Find your GCP identity token.
gcloud auth print-identity-token
תלמדו איך לטעון מודלים שמתארחים בעצמכם ולהתאים את הפרמטרים שלהם לפי השלבים הבאים.
- לוחצים על האפשרות
Configure
בממשק המשתמש של LIT. - בוחרים באפשרות
LLM (self hosted)
בקטעSelect a base model
. - צריך לתת שם לדגם בשדה
new_name
. - מזינים את כתובת ה-URL של שרת המודל בתור
base_url
. - מזינים את טוקן הזהות שהתקבל ב-
identity_token
אם משתמשים בשרת proxy של אפליקציית LIT (ראו שלב 3 ושלב 7). אחרת, משאירים אותו ריק. - לוחצים על
Load Model
. - לוחצים על
Submit
.
6. אינטראקציה עם LIT ב-GCP
ב-LIT יש מגוון עשיר של תכונות שיעזרו לכם לנפות באגים ולהבין את ההתנהגות של המודלים. אפשר לבצע פעולה פשוטה כמו שליחת שאילתה למודל, על ידי הקלדת טקסט בתיבה וצפייה בחיזויים של המודל, או לבחון את המודלים באופן מעמיק באמצעות התכונות רבות-העוצמה של LIT, כולל:
6-א: שליחת שאילתה למודל באמצעות LIT
מערכת LIT שולחת שאילתות באופן אוטומטי למערך הנתונים אחרי טעינת המודל ומערך הנתונים. כדי להציג את התשובה של כל מודל, בוחרים את התשובה בעמודות.
6-ב: שימוש בשיטה של הדגשת רצף
בשלב זה, הטכניקה Sequence Salience ב-LIT תומכת רק במודלים שמתארחים בעצמכם.
Sequence Salience הוא כלי חזותי שעוזר לנפות באגים בהנחיות של LLM על ידי הדגשת החלקים החשובים ביותר בהנחיה לתוצאה נתונה. מידע נוסף על 'הדגשת רצף' זמין במדריך המלא.
כדי לגשת לתוצאות של בולטוּת, לוחצים על קלט או פלט בהנחיה או בתשובה, ויוצגו תוצאות הבולטוּת.
6-ג: עריכה ידנית של ההנחיה והיעד
תכונת LIT מאפשרת לערוך ידנית כל prompt
ו-target
של נקודת נתונים קיימת. לחיצה על Add
תוסיף את הקלט החדש למערך הנתונים.
6-ד: השוואה של הנחיות זה לצד זה
בעזרת LIT אפשר להשוות בין הנחיות זה לצד זה, באמצעות דוגמאות מקוריות וערוכות. אתם יכולים לערוך דוגמה באופן ידני ולראות את תוצאת התחזית ואת ניתוח הבולטוּת של הרצף גם לגרסה המקורית וגם לגרסה הערוכה בו-זמנית. אפשר לשנות את ההנחיה לכל נקודה בתרשים, ו-LIT יפיק את התשובה המתאימה על ידי שליחת שאילתה למודל.
6-e: השוואה בין דגמים מרובים זה לצד זה
טכנולוגיית LIT מאפשרת להציג זה לצד זה השוואה בין מודלים שונים של יצירת טקסט וקביעת ניקוד, וכן דוגמאות מצטברות למדדים ספציפיים. שאילתות למודלים שונים שהועלו מאפשרות להשוות בקלות את ההבדלים בתשובות שלהם.
6-f: גנרטורים אוטומטיים של תרחישים נגדיים
אתם יכולים להשתמש בגנרטורים אוטומטיים של תרחישים נגדיים כדי ליצור נתוני קלט חלופיים ולראות מיד איך המודל מתנהג בהם.
6 ז': הערכת ביצועי המודל
תוכלו להעריך את ביצועי המודל באמצעות מדדים (כרגע יש תמיכה בציונים של BLEU ו-ROUGE ביצירת טקסט) בכל מערך הנתונים או בכל קבוצת משנה של דוגמאות שסוננו או שנבחרו.
7. פתרון בעיות
7-א: בעיות גישה פוטנציאליות ופתרונות אפשריים
מכיוון ש---no-allow-unauthenticated
מוחל בזמן הפריסה ב-Cloud Run, יכול להיות שתראו שגיאות אסורות כפי שמתואר בהמשך.
יש שתי דרכים לגשת לשירות LIT App.
1. שרת proxy ל-'Google בעלי מקצוע'
אפשר להעביר את השירות לשרתי proxy למארח המקומי באמצעות הפקודה הבאה.
# Proxy the service to local host.
gcloud run services proxy $LIT_SERVICE_NAME
לאחר מכן, אמורה להיות לך גישה לשרת LIT בלחיצה על הקישור לשירות שעבר דרך שרת proxy.
2. אימות משתמשים באופן ישיר
אפשר ללחוץ על הקישור הזה כדי לאמת משתמשים ולאפשר גישה ישירה לשירות האפליקציה LIT. הגישה הזו יכולה גם לאפשר לקבוצת משתמשים לגשת לשירות. זו אפשרות יעילה יותר לפיתוח שכרוך בשיתוף פעולה עם כמה אנשים.
7-ב: בדיקה ששרת המודלים הושק בהצלחה
כדי לוודא ששרת המודל הופעל בהצלחה, אפשר לשלוח שאילתות ישירות לשרת המודל. שרת המודלים מספק שלוש נקודות קצה: predict
, tokenize
ו-salience
. חשוב לציין בבקשה גם את השדה prompt
וגם את השדה target
.
# Query the model server predict endpoint.
curl -X POST http://YOUR_MODEL_SERVER_URL/predict -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'
# Query the model server tokenize endpoint.
curl -X POST http://YOUR_MODEL_SERVER_URL/tokenize -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'
# Query the model server salience endpoint.
curl -X POST http://YOUR_MODEL_SERVER_URL/salience -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'
אם נתקלתם בבעיה בגישה, תוכלו לעיין בקטע 7-א' שלמעלה.
8. מזל טוב
כל הכבוד על השלמת ה-Codelab! הגיע הזמן להירגע!
הסרת המשאבים
כדי לנקות את הסדנה, מוחקים את כל שירותי Google Cloud שנוצרו עבור הסדנה. מריצים את הפקודות הבאות באמצעות Google Cloud Shell.
אם החיבור ל-Google Cloud התנתק בגלל חוסר פעילות, צריך לאפס את המשתנים לפי השלבים הקודמים.
# Delete the LIT App Service.
gcloud run services delete $LIT_SERVICE_NAME
אם הפעלתם את שרת המודלים, תצטרכו למחוק גם אותו.
# Delete the Model Service.
gcloud run services delete $MODEL_SERVICE_NAME
מקורות מידע נוספים
תוכלו להמשיך ללמוד על התכונות של כלי LIT בעזרת החומרים הבאים:
- Gemma: קישור
- בסיס קוד פתוח של LIT: מאגר Git
- מאמר בנושא LIT: ArXiv
- מאמר בנושא ניפוי באגים בהנחיות LIT: ArXiv
- הדגמה של סרטון על תכונה של LIT: YouTube
- הדגמה לניפוי באגים של הנחיות LIT: YouTube
- ערכת הכלים ל-GenAI אחראי: קישור
יצירת קשר
אם יש לכם שאלות או בעיות לגבי הקודלאב הזה, אתם יכולים לפנות אלינו ב-GitHub.
רישיון
העבודה הזו בשימוש במסגרת רישיון Creative Commons Attribution 4.0 גנרי.