הצגת מודלים פתוחים של Gemma באמצעות TPU ב-Gemini Enterprise Agent Platform עם Saxml

במדריך הזה מוסבר איך להכניס לשימוש בסביבת הייצור מודל שפה גדול (LLM) של Gemma בקוד פתוח באמצעות Tensor Processing Units (TPUs) ב-Gemini Enterprise Agent Platform עם Saxml. במדריך הזה נסביר איך להוריד את מודלי Gemma עם 2B ו-7B פרמטרים שעברו כוונון לפי הוראות ל-Cloud Storage, ולפרוס אותם ב-Gemini Enterprise Agent Platform שמריץ Saxml ב-TPU.

רקע

הפעלת Gemma באמצעות TPUs בפלטפורמת הסוכנים של Gemini Enterprise עם Saxml. אתם יכולים ליהנות מפתרון AI מנוהל שמטפל בתשתית ברמה נמוכה ומציע דרך חסכונית להפעלת מודלים גדולים של שפה (LLM). בקטע הזה מתוארות הטכנולוגיות העיקריות שבהן נעשה שימוש במדריך הזה.

‏Gemma

‫Gemma היא קבוצה של מודלים קלי משקל של בינה מלאכותית (AI) גנרטיבית שזמינים לכולם ופורסמו ברישיון קוד פתוח. מודלים של AI זמינים להרצה באפליקציות, בחומרה, במכשירים ניידים או בשירותים מתארחים. אתם יכולים להשתמש במודלים של Gemma ליצירת טקסט, אבל אתם יכולים גם לכוונן את המודלים האלה למשימות מיוחדות.

מידע נוסף זמין במאמרי העזרה בנושא Gemma.

Saxml

‫Saxml היא מערכת ניסיונית שמשמשת להסקת מסקנות ממודלים של Paxml,‏ JAX ו-PyTorch. במדריך הזה נסביר איך להשתמש ב-TPU כדי להפעיל את Gemma בצורה חסכונית יותר ב-Saxml. ההגדרה של מעבדי GPU דומה. ‫Saxml מציע סקריפטים ליצירת קונטיינרים ל-Gemini Enterprise Agent Platform, שנשתמש בהם במדריך הזה.

TPUs

יחידות TPU הן מעגלים משולבים לאפליקציות ספציפיות (ASIC) שפותחו על ידי Google כדי להאיץ מסגרות לעיבוד נתונים כמו TensorFlow,‏ PyTorch ו-JAX.

במדריך הזה נעשה שימוש במודלים Gemma 2B ו-Gemma 7B. ‫Gemini Enterprise Agent Platform מארחת את המודלים האלה במאגרי הצמתים הבאים של TPU v5e עם מארח יחיד:

  • ‫Gemma 2B: מתארח במאגר צומתי TPU v5e עם טופולוגיה של 1x1 שמייצגת שבב TPU אחד. סוג המכונה של הצמתים הוא ct5lp-hightpu-1t.
  • ‫Gemma 7B: מתארח במאגר צומתי TPU v5e עם טופולוגיה של 2x2 שמייצגת ארבעה שבבי TPU. סוג המכונה של הצמתים הוא ct5lp-hightpu-4t.

לפני שמתחילים

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the Agent Platform API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the API

  4. במסוף Cloud de Confiance , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

    בחלק התחתון של Cloud de Confiance המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

במדריך הזה מניחים שאתם משתמשים ב-Cloud Shell כדי ליצור אינטראקציה עם Cloud de Confiance by S3NS. אם אתם רוצים להשתמש במעטפת אחרת במקום ב-Cloud Shell, אתם צריכים לבצע את ההגדרה הנוספת הבאה:

  1. התקינו את ה-CLI של Google Cloud.

  2. הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.

    איך נכנסים ל-CLI של gcloud באמצעות הזהות המאוחדת?

  3. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  4. מוודאים שיש לכם מספיק מכסת שימוש בשבבי TPU v5e ל- Gemini Enterprise Agent Platform. כברירת מחדל, המכסה הזו היא 0. בטופולוגיה של 1x1, הערך צריך להיות 1. במקרה של 2x2, הערך צריך להיות 4. כדי להפעיל את שתי הטופולוגיות, הערך צריך להיות 5.
  5. אם עדיין אין לכם חשבון Kaggle, אתם צריכים ליצור חשבון.

גישה למודל

שימו לב: יכול להיות שלא יהיו לכם מספיק משאבים ב-Cloud Shell כדי להוריד את משקלי המודל. אם כן, תוכלו ליצור מופע של Gemini Enterprise Agent Platform Workbench כדי לבצע את המשימה.

כדי לקבל גישה למודלים של Gemma לצורך פריסה ב-Gemini Enterprise Agent Platform, צריך להיכנס לפלטפורמת Kaggle, לחתום על הסכם ההסכמה לרישיון ולקבל טוקן API של Kaggle. במדריך הזה נשתמש ב-Kubernetes Secret בשביל פרטי הכניסה ל-Kaggle.

כדי להשתמש ב-Gemma, צריך לחתום על הסכם ההסכמה. פועלים לפי ההוראות הבאות:

  1. נכנסים אל דף ההסכמה לשימוש במודל באתר Kaggle.com.
  2. נכנסים לחשבון Kaggle, אם עדיין לא עשיתם זאת.
  3. לוחצים על בקשת גישה.
  4. בקטע Choose Account for Consent, בוחרים באפשרות Verify via Kaggle Account כדי להשתמש בחשבון Kaggle לצורך מתן הסכמה.
  5. מאשרים את התנאים וההגבלות של המודל.

יצירת אסימון גישה

כדי לגשת למודל דרך Kaggle, צריך טוקן Kaggle API.

אם עדיין אין לכם טוקן, אתם יכולים ליצור טוקן חדש באמצעות השלבים הבאים:

  1. בדפדפן, עוברים אל ההגדרות של Kaggle.
  2. בקטע API, לוחצים על Create New Token (יצירת אסימון חדש).

    קובץ בשם kaggle.json יורד.

העלאה של טוקן הגישה ל-Cloud Shell

ב-Cloud Shell, אפשר להעלות את אסימון Kaggle API לפרויקט Cloud de Confiance by S3NS:

  1. ב-Cloud Shell, לוחצים על אפשרויות נוספות > העלאה.
  2. בוחרים באפשרות 'קובץ' ולוחצים על בחירת קבצים.
  3. פותחים את הקובץ kaggle.json.
  4. לוחצים על Upload.

יצירת קטגוריה של Cloud Storage

יוצרים קטגוריה של Cloud Storage לאחסון של נקודות הביקורת של המודל.

ב-Cloud Shell, מריצים את הפקודה הבאה:

gcloud storage buckets create gs://CHECKPOINTS_BUCKET_NAME

מחליפים את CHECKPOINTS_BUCKET_NAME בשם של קטגוריה של Cloud Storage שבה מאוחסנים נקודות הבדיקה של המודל.

העתקת המודל לקטגוריה של Cloud Storage

ב-Cloud Shell, מריצים את הפקודה הבאה:

pip install kaggle --break-system-packages

# For Gemma 2B
mkdir -p /data/gemma_2b-it
kaggle models instances versions download google/gemma/pax/2b-it/1 --untar -p /data/gemma_2b-it
gcloud storage cp /data/gemma_2b-it/* gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/ --recursive

# For Gemma 7B
mkdir -p /data/gemma_7b-it
kaggle models instances versions download google/gemma/pax/7b-it/1 --untar -p /data/gemma_7b-it
gcloud storage cp /data/gemma_7b-it/* gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/ --recursive

פריסת המודל

העלאת מודל

כדי להעלות משאב Model שמשתמש בקונטיינר Saxml, מריצים את הפקודה gcloud ai models upload הבאה:

Gemma 2B-it

gcloud ai models upload \
  --region=LOCATION \
  --display-name=DEPLOYED_MODEL_NAME \
  --container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
  --artifact-uri='gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/' \
  --container-args='--model_path=saxml.server.pax.lm.params.gemma.Gemma2BFP16' \
  --container-args='--platform_chip=tpuv5e' \
  --container-args='--platform_topology=2x2' \
  --container-args='--ckpt_path_suffix=checkpoint_00000000' \
  --container-ports=8502

Gemma 7B-it

gcloud ai models upload \
  --region=LOCATION \
  --display-name=DEPLOYED_MODEL_NAME \
  --container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
  --artifact-uri='gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/' \
  --container-args='--model_path=saxml.server.pax.lm.params.gemma.Gemma7BFP16' \
  --container-args='--platform_chip=tpuv5e' \
  --container-args='--platform_topology=2x2' \
  --container-args='--ckpt_path_suffix=checkpoint_00000000' \
  --container-ports=8502

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: המזהה של Cloud de Confianceהפרויקט
  • ‫LOCATION_ID: האזור שבו משתמשים ב-Agent Platform. חשוב לדעת ש-TPU זמין רק באזור us-west1.
  • ‫DEPLOYED_MODEL_NAME: שם ל-DeployedModel. אפשר גם להשתמש בשם המוצג של Model בשביל DeployedModel.

יצירת נקודת קצה

כדי להשתמש במודל להצגת מסקנות אונליין, צריך לפרוס אותו לנקודת קצה. אם אתם פורסים מודל לנקודת קצה קיימת, אתם יכולים לדלג על השלב הזה. בדוגמה הבאה משתמשים בפקודה gcloud ai endpoints create:

gcloud ai endpoints create \
  --region=LOCATION \
  --display-name=ENDPOINT_NAME

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו משתמשים ב-Agent Platform.
  • ‫ENDPOINT_NAME: השם המוצג של נקודת הקצה.

יכול להיות שיעברו כמה שניות עד שנקודת הקצה תיווצר באמצעות הכלי Google Cloud CLI.

פריסת המודל בנקודת קצה

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

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 \
  --traffic-split=0=100

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו משתמשים ב-Agent Platform.
  • ‫ENDPOINT_NAME: השם המוצג של נקודת הקצה.
  • ‫DEPLOYED_MODEL_NAME: שם ל-DeployedModel. אפשר גם להשתמש בשם המוצג של Model בשביל DeployedModel.

אפשר לפרוס את Gemma 2B במכונה קטנה יותר מסוג ct5lp-hightpu-1t, ובמקרה כזה צריך לציין את --platform_topology=1x1 כשמעלים את המודל.

יכול להיות שיחלפו כמה דקות עד שכלי Google Cloud CLI יפרוס את המודל לנקודת הקצה. כשהמודל נפרס בהצלחה, הפקודה הזו מדפיסה את הפלט הבא:

  Deployed a model to the endpoint xxxxx. Id of the deployed model: xxxxx.

קבלת מסקנות אונליין מהמודל שנפרס

כדי להפעיל את המודל דרך נקודת הקצה של Gemini Enterprise Agent Platform, צריך לעצב את בקשת ההסקה באמצעות אובייקט JSON סטנדרטי של בקשת הסקה .

בדוגמה הבאה משתמשים בפקודה gcloud ai endpoints predict:

ENDPOINT_ID=$(gcloud ai endpoints list \
   --region=LOCATION \
   --filter=display_name=ENDPOINT_NAME \
   --format="value(name)")

gcloud ai endpoints predict $ENDPOINT_ID \
  --region=LOCATION \
  --http-headers=Content-Type=application/json \
  --json-request instances.json

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION_ID: האזור שבו משתמשים ב-Agent Platform.
  • ‫ENDPOINT_NAME: השם המוצג של נקודת הקצה.
  • instances.json בפורמט הבא: {"instances": [{"text_batch": "<your prompt>"},{...}]}

סידור וארגון

כדי להימנע מחיובים נוספים על Gemini Enterprise Agent Platform ועל Artifact Registry, צריך למחוק את Cloud de Confiance המשאבים שיצרתם במהלך המדריך הזה:

  1. כדי לבטל את הפריסה של המודל מנקודת הקצה ולמחוק את נקודת הקצה, מריצים את הפקודה הבאה במעטפת:

    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
    

    מחליפים את LOCATION באזור שבו יצרתם את המודל בקטע הקודם.

  2. כדי למחוק את המודל, מריצים את הפקודה הבאה במעטפת:

    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
    

    מחליפים את LOCATION באזור שבו יצרתם את המודל בקטע הקודם.

מגבלות

  • ב-Gemini Enterprise Agent Platform, יש תמיכה ב-Cloud TPU רק ב-us-west1. מידע נוסף זמין במאמר בנושא מיקומים.

המאמרים הבאים