Llama 3 הוא מודל שפה גדול (LLM) בקוד פתוח מבית Meta. במדריך הזה מוסבר איך להציג מודל Llama 3 LLM באמצעות יחידות לעיבוד טנסורים (TPU) מרובות מארחים בפלטפורמת הסוכנים של Gemini Enterprise עם Saxml.
במדריך הזה מורידים את משקלי המודל ואת הטוקנייזר של Llama 3 70B ופורסים אותם בפלטפורמת הסוכנים של Gemini Enterprise שמריצה Saxml ב-TPU.
לפני שמתחילים
מומלץ להשתמש במכונה וירטואלית (VM) מסוג M2 המותאמת לצריכת זיכרון גבוהה כדי להוריד את המודל ולהמיר אותו ל-Saxml. הסיבה לכך היא שתהליך ההמרה של המודל דורש זיכרון משמעותי, והוא עלול להיכשל אם תבחרו סוג מכונה שאין בו מספיק זיכרון.
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Agent Platform and Artifact Registry APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
במסוף Cloud de Confiance , מפעילים את Cloud Shell.
בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
- פועלים לפי ההוראות להתקנת Docker במסמכי התיעוד של Artifact Registry.
- מוודאים שיש לכם מספיק מכסות ל-16 שבבי TPU v5e עבור Gemini Enterprise Agent Platform.
במדריך הזה מניחים שאתם משתמשים ב-Cloud Shell כדי ליצור אינטראקציה עם Cloud de Confiance by S3NS. אם אתם רוצים להשתמש במעטפת אחרת במקום ב-Cloud Shell, אתם צריכים לבצע את ההגדרה הנוספת הבאה:
-
התקינו את ה-CLI של Google Cloud.
-
הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init
אם אתם משתמשים במעטפת אחרת במקום ב-Cloud Shell לפריסת מודלים, ודאו שגרסת Google Cloud CLI היא חדשה יותר מגרסה 475.0.0. אפשר לעדכן את Google Cloud CLI באמצעות הפקודה gcloud components update.
אם אתם פורסים את המודל באמצעות Vertex AI SDK, ודאו שמותקנת אצלכם גרסה 1.50.0 ואילך.
קבלת גישה למודל והורדה של משקלי המודל
השלבים הבאים מתייחסים למופע של Agent Platform Workbench שיש לו מכונה וירטואלית (VM) מסוג M2 מותאמת לצריכת זיכרון גבוהה (memory-optimized). מידע על שינוי סוג המכונה של מופע Agent Platform Workbench זמין במאמר שינוי סוג המכונה של מופע Agent Platform Workbench.
עוברים אל דף ההסכמה לשימוש במודל Llama.
בוחרים ב-Llama 3, ממלאים את טופס ההסכמה ומאשרים את התנאים וההגבלות.
בודקים אם קיבלתם הודעת אימייל עם כתובת URL חתומה.
מורידים את הסקריפט
download.shמ-GitHub על ידי הפעלת הפקודה הבאה:wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh chmod +x download.shכדי להוריד את משקלי המודל, מריצים את הסקריפט
download.shשהורדתם מ-GitHub.כשתתבקשו, תצטרכו להזין את כתובת ה-URL החתומה שקיבלתם באימייל שמופיע בקטע הקודם.
כשמופיעה בקשה להוריד את המודלים, מזינים
70B.
המרת משקלי המודל לפורמט Saxml
מריצים את הפקודה הבאה כדי להוריד את Saxml:
git clone https://github.com/google/saxml.gitמריצים את הפקודות הבאות כדי להגדיר סביבה וירטואלית של Python:
python -m venv . source bin/activateמריצים את הפקודות הבאות כדי להתקין את יחסי התלות:
pip install --upgrade pip pip install paxml pip install praxis pip install torchכדי להמיר את משקלי המודל לפורמט Saxml, מריצים את הפקודה הבאה:
python3 saxml/saxml/tools/convert_llama_ckpt.py \ --base PATH_TO_META_LLAMA3 \ --pax PATH_TO_PAX_LLAMA3 \ --model-size llama3_70bמחליפים את מה שכתוב בשדות הבאים:
-
PATH_TO_META_LLAMA3: הנתיב לספרייה שמכילה את משקלי המודל שהורדו -
PATH_TO_PAX_LLAMA3: הנתיב לספרייה שבה יישמרו משקלי המודל שהומרו
המודלים שהומרו יועברו לתיקייה
$PATH_TO_PAX_LLAMA3/checkpoint_00000000.-
מעתיקים את קובץ הטוקנייזר מהספרייה המקורית לספריית משנה בשם
vocabsבאופן הבא:cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.modelמוסיפים קובץ
commit_success.txtריק בתיקייה$PATH_TO_PAX_LLAMA3, ומוסיפים את תיקיות המשנהmetadataו-stateבתיקייה הזו באופן הבא:touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txtהתיקייה
$PATH_TO_PAX_LLAMA3מכילה עכשיו את התיקיות והקבצים הבאים:$PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
יצירת קטגוריה של Cloud Storage
יוצרים קטגוריה של Cloud Storage לאחסון המשקלים של המודל שהומר.
ב-Cloud Shell, מריצים את הפקודות הבאות ומחליפים את PROJECT_ID במזהה הפרויקט:
projectid=PROJECT_ID gcloud config set project ${projectid}כדי ליצור את הקטגוריה, מריצים את הפקודה הבאה:
gcloud storage buckets create gs://WEIGHTS_BUCKET_NAMEמחליפים את WEIGHTS_BUCKET_NAME בשם שרוצים לתת לקטגוריה.
העתקת משקלי המודל לקטגוריה של Cloud Storage
כדי להעתיק את משקלי המודל לקטגוריה, מריצים את הפקודה הבאה:
gcloud storage cp PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/ --recursive
העלאת המודל
קונטיינר Saxml מוכן מראש זמין בכתובת
us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest.
כדי להעלות משאב Model ל-Gemini Enterprise Agent Platform באמצעות מאגר Saxml מוכן מראש, מריצים את הפקודה gcloud ai models upload באופן הבא:
gcloud ai models upload \
--region=LOCATION \
--display-name=MODEL_DISPLAY_NAME \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
--artifact-uri='gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b' \
--container-args='--model_path=saxml.server.pax.lm.params.lm_cloud.LLaMA3_70BFP16x16' \
--container-args='--platform_chip=tpuv5e' \
--container-args='--platform_topology=4x4' \
--container-args='--ckpt_path_suffix=checkpoint_00000000' \
--container-deployment-timeout-seconds=2700 \
--container-ports=8502 \
--project=PROJECT_ID
מחליפים את הפרטים הבאים:
-
LOCATION: האזור שבו אתם משתמשים ב-Gemini Enterprise Agent Platform. הערה: מכשירי TPU זמינים רק ב-us-west1. -
MODEL_DISPLAY_NAME: השם המוצג שרוצים לתת למודל -
PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance by S3NS
יצירת נקודת קצה של הסקה אונליין
כדי ליצור את נקודת הקצה, מריצים את הפקודה הבאה:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_DISPLAY_NAME \
--project=PROJECT_ID
מחליפים את ENDPOINT_DISPLAY_NAME בשם התצוגה שרוצים לתת לנקודת הקצה.
פריסת המודל בנקודת הקצה
אחרי שנקודת הקצה מוכנה, פורסים את המודל בנקודת הקצה.
במדריך הזה נלמד איך לפרוס מודל Llama 3 70B שחולק ל-16 שבבי Cloud TPU v5e באמצעות טופולוגיה של 4x4. עם זאת, אפשר לציין כל אחת מהטופולוגיות הבאות של Cloud TPU עם כמה מארחים:
| סוג המכונה | טופולוגיה | מספר שבבי ה-TPU | מספר המארחים |
|---|---|---|---|
ct5lp-hightpu-4t |
4x4 | 16 | 2 |
ct5lp-hightpu-4t |
4x8 | 32 | 4 |
ct5lp-hightpu-4t |
8x8 | 64 | 8 |
ct5lp-hightpu-4t |
8x16 | 128 | 16 |
ct5lp-hightpu-4t |
16x16 | 256 | 32 |
אם אתם פורסים מודל Llama אחר שמוגדר במאגר Saxml GitHub, ודאו שהוא מחולק למחיצות בהתאם למספר המכשירים שאתם מכוונים אליהם, ול-Cloud TPU יש מספיק זיכרון כדי לטעון את המודל.
למידע על פריסת מודל ב-Cloud TPU עם מארח יחיד, ראו פריסת מודל.
רשימה מלאה של סוגי Cloud TPU ואזורים נתמכים זמינה במאמר מיקומים של Gemini Enterprise Agent Platform.
מקבלים את מזהה נקודת הקצה של נקודת הקצה של ההסקה אונליין:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)")מקבלים את מזהה המודל של המודל:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)")פורסים את המודל בנקודת הקצה:
gcloud ai endpoints deploy-model $ENDPOINT_ID \ --region=LOCATION \ --model=$MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --machine-type=ct5lp-hightpu-4t \ --tpu-topology=4x4 \ --traffic-split=0=100מחליפים את DEPLOYED_MODEL_NAME בשם של הפריסה. יכול להיות שזה יהיה אותו שם כמו השם המוצג של המודל (MODEL_DISPLAY_NAME).
יכול להיות שהזמן הקצוב לפעולת הפריסה יסתיים.
הפקודה
deploy-modelמחזירה מזהה פעולה שאפשר להשתמש בו כדי לבדוק מתי הפעולה מסתיימת. אפשר לדגום את סטטוס הפעולה עד שהתשובה כוללת את"done": true. כדי לבדוק את הסטטוס, מריצים את הפקודה הבאה:gcloud ai operations describe \ --region=LOCATION \ OPERATION_IDמחליפים את OPERATION_ID במזהה הפעולה שהוחזר מהפקודה הקודמת.
קבלת מסקנות אונליין מהמודל שנפרס
כדי לקבל מסקנות אונליין מנקודת הקצה של Gemini Enterprise Agent Platform, מריצים את הפקודה gcloud ai endpoints predict.
מריצים את הפקודה הבאה כדי ליצור קובץ
request.jsonשמכיל בקשת הסקה לדוגמה:cat << EOF > request.json {"instances": [{"text_batch": "the distance between Earth and Moon is "}]} EOFכדי לשלוח את בקשת ההסקה אונליין לנקודת הקצה, מריצים את הפקודה הבאה:
gcloud ai endpoints predict $ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION \ --json-request=request.json
הסרת המשאבים
כדי להימנע מחיובים נוספים על Gemini Enterprise Agent Platform, צריך למחוק את Cloud de Confiance המשאבים שיצרתם במהלך המדריך הזה:
כדי לבטל את הפריסה של המודל מנקודת הקצה ולמחוק את נקודת הקצה, מריצים את הפקודות הבאות:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)") DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \ --region=LOCATION \ --format="value(deployedModels.id)") gcloud ai endpoints undeploy-model $ENDPOINT_ID \ --region=LOCATION \ --deployed-model-id=$DEPLOYED_MODEL_ID gcloud ai endpoints delete $ENDPOINT_ID \ --region=LOCATION \ --quietכדי למחוק את המודל, מריצים את הפקודות הבאות:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)") gcloud ai models delete $MODEL_ID \ --region=LOCATION \ --quiet