הצגת מודלים פתוחים של Llama 3 באמצעות יחידות TPU מרובות מארחים ב-Cloud בפלטפורמת הסוכנים של Gemini Enterprise עם Saxml

‫Llama 3 הוא מודל שפה גדול (LLM) בקוד פתוח מבית Meta. במדריך הזה מוסבר איך להציג מודל Llama 3 LLM באמצעות יחידות לעיבוד טנסורים (TPU) מרובות מארחים בפלטפורמת הסוכנים של Gemini Enterprise עם Saxml.

במדריך הזה מורידים את משקלי המודל ואת הטוקנייזר של Llama 3 70B ופורסים אותם בפלטפורמת הסוכנים של Gemini Enterprise שמריצה Saxml ב-TPU.

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

מומלץ להשתמש במכונה וירטואלית (VM) מסוג M2 המותאמת לצריכת זיכרון גבוהה כדי להוריד את המודל ולהמיר אותו ל-Saxml. הסיבה לכך היא שתהליך ההמרה של המודל דורש זיכרון משמעותי, והוא עלול להיכשל אם תבחרו סוג מכונה שאין בו מספיק זיכרון.

  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 and Artifact Registry APIs, if any are 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 APIs

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

    הפעלת Cloud Shell

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

  5. פועלים לפי ההוראות להתקנת Docker במסמכי התיעוד של Artifact Registry.
  6. מוודאים שיש לכם מספיק מכסות ל-16 שבבי TPU v5e עבור Gemini Enterprise Agent Platform.

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

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

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

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

  3. כדי לאתחל את ה-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.

  1. עוברים אל דף ההסכמה לשימוש במודל Llama.

  2. בוחרים ב-Llama 3, ממלאים את טופס ההסכמה ומאשרים את התנאים וההגבלות.

  3. בודקים אם קיבלתם הודעת אימייל עם כתובת URL חתומה.

  4. מורידים את הסקריפט download.sh מ-GitHub על ידי הפעלת הפקודה הבאה:

    wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh
    chmod +x download.sh
    
  5. כדי להוריד את משקלי המודל, מריצים את הסקריפט download.sh שהורדתם מ-GitHub.

  6. כשתתבקשו, תצטרכו להזין את כתובת ה-URL החתומה שקיבלתם באימייל שמופיע בקטע הקודם.

  7. כשמופיעה בקשה להוריד את המודלים, מזינים 70B.

המרת משקלי המודל לפורמט Saxml

  1. מריצים את הפקודה הבאה כדי להוריד את Saxml:

    git clone https://github.com/google/saxml.git
    
  2. מריצים את הפקודות הבאות כדי להגדיר סביבה וירטואלית של Python:

    python -m venv .
    source bin/activate
    
  3. מריצים את הפקודות הבאות כדי להתקין את יחסי התלות:

    pip install --upgrade pip
    
    pip install paxml
    
    pip install praxis
    
    pip install torch
    
  4. כדי להמיר את משקלי המודל לפורמט 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.

  5. מעתיקים את קובץ הטוקנייזר מהספרייה המקורית לספריית משנה בשם vocabs באופן הבא:

    cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
    
  6. מוסיפים קובץ 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 לאחסון המשקלים של המודל שהומר.

  1. ב-Cloud Shell, מריצים את הפקודות הבאות ומחליפים את PROJECT_ID במזהה הפרויקט:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. כדי ליצור את הקטגוריה, מריצים את הפקודה הבאה:

    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.

  1. מקבלים את מזהה נקודת הקצה של נקודת הקצה של ההסקה אונליין:

    ENDPOINT_ID=$(gcloud ai endpoints list \
        --region=LOCATION \
        --filter=display_name=ENDPOINT_NAME \
        --format="value(name)")
    
  2. מקבלים את מזהה המודל של המודל:

    MODEL_ID=$(gcloud ai models list \
        --region=LOCATION \
        --filter=display_name=DEPLOYED_MODEL_NAME \
        --format="value(name)")
    
  3. פורסים את המודל בנקודת הקצה:

    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.

  1. מריצים את הפקודה הבאה כדי ליצור קובץ request.json שמכיל בקשת הסקה לדוגמה:

    cat << EOF > request.json
    {"instances": [{"text_batch": "the distance between Earth and Moon is "}]}
    EOF
    
  2. כדי לשלוח את בקשת ההסקה אונליין לנקודת הקצה, מריצים את הפקודה הבאה:

    gcloud ai endpoints predict $ENDPOINT_ID \
        --project=PROJECT_ID \
        --region=LOCATION \
        --json-request=request.json
    

הסרת המשאבים

כדי להימנע מחיובים נוספים על Gemini Enterprise Agent Platform, צריך למחוק את 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
    
  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