שליטה בעלויות באמצעות מכסות טוקנים

במאמר הזה מוסבר איך להגדיר ולנהל מגבלות יומיות על מספר הטוקנים של הקלט והפלט שפונקציות AI גנרטיבי צורכות.

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

מכסות הטוקנים חלות על פונקציות SQL של BigQuery שמיועדות למשימות הסקה של AI גנרטיבי שמשתמשות במודלי LLM של Gemini, כמו הפונקציות AI.CLASSIFY ו-AI.GENERATE_TEXT. מכסות הטוקנים לא חלות על פונקציות של הטמעת נתונים וחיפוש סמנטי, כמו AI.EMBED, שיש להן מבני חיוב שונים.

פרטי המכסה

ב-BigQuery יש מכסות יומיות שמבוססות על השימוש בטוקנים של LLM. השימוש בטוקנים משפיע ישירות על החיוב ב-Vertex AI על פונקציות של AI גנרטיבי ב-BigQuery שמשתמשות במודלים של Gemini. המכסות האלה נמדדות באופן גלובלי בכל האזורים. המכסות היומיות מתאפסות בחצות לפי שעון החוף המערבי.

המכסות האלה קובעות את מספר הטוקנים של הקלט והפלט שהמודלים הגדולים של השפה מעבדים בשביל פונקציות ה-AI הגנרטיבי:

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

מכסה מזהה המדד והמכסה ברירת מחדל הערות
טוקנים של קלט AI ביום מדד: bigquery.googleapis.com/quota/query/ai_input_tokens

מזהה המכסה: GenAiInputTokensPerDay
200,000,000,000 טוקנים של קלט שנעשה בהם שימוש על ידי מודל ה-LLM. המכסה היא ליום, לכל פרויקט.
טוקנים של קלט AI ליום לכל משתמש מדד: bigquery.googleapis.com/quota/query/ai_input_tokens

מזהה המכסה: GenAiInputTokensPerUserPerDay
150,000,000,000 טוקנים של קלט שנעשה בהם שימוש על ידי מודל ה-LLM. המגבלה חלה על כל יום, פרויקט ומשתמש.
טוקנים של פלט AI ביום מדד: bigquery.googleapis.com/quota/query/ai_output_tokens

מזהה המכסה: GenAiOutputTokensPerDay
20,000,000,000 טוקנים של פלט ושל חשיבה שבהם משתמש מודל ה-LLM. המכסה היא ליום, לכל פרויקט.
טוקנים של פלט AI ליום לכל משתמש מדד: bigquery.googleapis.com/quota/query/ai_output_tokens

מזהה המכסה: GenAiOutputTokensPerUserPerDay
15,000,000,000 טוקנים של פלט ושל חשיבה שבהם משתמש מודל ה-LLM. המגבלה חלה על כל יום, פרויקט ומשתמש.

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

טוקנים שנשמרו במטמון לא נכללים במכסות.

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

אם אתם משתמשים ב-Google Cloud CLI, בספריות הלקוח של Cloud Quotas API או ב-Terraform כדי לנהל את מכסות האסימונים באופן פרוגרמטי, הפעילו את Cloud Quotas API‏ (cloudquotas.googleapis.com) בפרויקט ב- Google Cloud:

gcloud services enable cloudquotas.googleapis.com --project=PROJECT_ID

מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud .

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות לצפייה ולעדכון של מכסות טוקנים, בקשו מהאדמין לתת לכם את התפקיד אדמין של מכסות ב-Cloud (roles/cloudquotas.admin) ב-IAM בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

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

  • cloudquotas.quotas.get
  • cloudquotas.quotas.update

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

ניהול המכסות

בהתאם לשימוש במשאבים, יכול להיות שתרצו להציג או לשנות את ערכי מכסת הטוקנים:

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

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף IAM & Admin > Quotas & System Limits.

    כניסה לדף Quotas & System Limits

  2. מסננים את המכסות לפי Service: BigQuery API.

  3. ברשימת המכסות, מחפשים מכסה ספציפית, כמו AI input tokens per day (GenAiInputTokensPerDay), או ממיינים את העמודה Name כדי להציג את המכסות של טוקנים ל-AI בראש הרשימה.

  4. לוחצים על more_vert More actions > Edit quota.

  5. כדי להגדיל או להקטין את המכסה, בחלונית Quota changes מזינים ערך חדש בשדה New value ולוחצים על Done. הקטנת המכסה נכנסת לתוקף באופן מיידי, ללא צורך באישור.

  6. לוחצים על Submit request.

gcloud

כשאתם מנהלים את מכסות האסימונים באמצעות ה-CLI של gcloud, ציינו את bigquery.googleapis.com בתור שם השירות והשתמשו במזהי המכסות הבאים (תלויי אותיות רישיות):

  • טוקנים של קלט AI ביום: GenAiInputTokensPerDay
  • אסימוני קלט של AI ליום לכל משתמש: GenAiInputTokensPerUserPerDay
  • טוקנים של פלט AI ביום: GenAiOutputTokensPerDay
  • טוקנים של פלט AI ליום לכל משתמש: GenAiOutputTokensPerUserPerDay
  1. אופציונלי: כדי להציג את מכסות הטוקנים של BigQuery ל-AI גנרטיבי ואת הערכים הנוכחיים שלהן, משתמשים ב-gcloud quotas info list:

    gcloud quotas info list \
        --service=bigquery.googleapis.com \
        --project=PROJECT_ID \
        --filter="quotaId:GenAi*"
    
  2. כדי ליצור או לעדכן את העדפות המכסה של מגבלות האסימונים היומיות, משתמשים ב-gcloud quotas preferences update. בדוגמה הבאה נבדק אם כבר קיימת העדפת מכסה לכל מכסה (לדוגמה, אם היא שונתה בעבר במסוףGoogle Cloud ), וההעדפה מתעדכנת או נוצרת:

    PROJECT_ID="PROJECT_ID"
    
    for ITEM in \
      "GenAiInputTokensPerDay:INPUT_TOKEN_LIMIT" \
      "GenAiOutputTokensPerDay:OUTPUT_TOKEN_LIMIT"; do
      QUOTA_ID="${ITEM%:*}"
      NEW_LIMIT="${ITEM#*:}"
    
      PREF_ID=$(gcloud quotas preferences list \
        --project="${PROJECT_ID}" \
        --filter="quotaId:${QUOTA_ID}" \
        --format="value(name.basename())")
      PREF_ID="${PREF_ID:-custom-${QUOTA_ID}}"
    
      gcloud quotas preferences update "${PREF_ID}" \
        --project="${PROJECT_ID}" \
        --service=bigquery.googleapis.com \
        --quota-id="${QUOTA_ID}" \
        --preferred-value="${NEW_LIMIT}" \
        --allow-high-percentage-quota-decrease \
        --allow-missing
    done
    

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

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫INPUT_TOKEN_LIMIT: מגבלת היעד היומית של טוקנים לקלט (לדוגמה, 754000000).
    • ‫OUTPUT_TOKEN_LIMIT: מגבלת הטוקנים היומית של פלט היעד (לדוגמה, 8000000).

    אפשר גם לכלול את הדגלים האופציונליים הבאים עם gcloud quotas preferences update:

    • ‫--allow-quota-decrease-below-usage: מאפשר להקטין את מגבלת המכסה מתחת לשימוש הנוכחי לאותו יום.
    • --email: מציין כתובת אימייל ליצירת קשר, שנדרשת כשמבקשים להגדיל את המכסה מעבר למגבלת ברירת המחדל.
    • ‫--justification: הסיבה לשינוי המכסה.
  3. כדי לבדוק את הסטטוס של העדפות המכסות, משתמשים ב-gcloud quotas preferences list:

    gcloud quotas preferences list \
        --project=PROJECT_ID \
        --filter="quotaId:GenAiInputTokensPerDay OR quotaId:GenAiOutputTokensPerDay"
    

    כשהערך של reconciling הוא false, הערך של grantedValue נאכף באופן פעיל.

Python

כשאתם מנהלים מכסות של טוקנים באמצעות ספריית הלקוח של Cloud Quotas ל-Python, ציינו את bigquery.googleapis.com כשם השירות והשתמשו במזהי המכסות הבאים (תלויי אותיות רישיות):

  • טוקנים של קלט AI ביום: GenAiInputTokensPerDay
  • אסימוני קלט של AI ליום לכל משתמש: GenAiInputTokensPerUserPerDay
  • טוקנים של פלט AI ביום: GenAiOutputTokensPerDay
  • טוקנים של פלט AI ליום לכל משתמש: GenAiOutputTokensPerUserPerDay
  1. מתקינים את ספריית הלקוח של Cloud Quotas ל-Python:

    pip install --user google-cloud-quotas
    
  2. כדי לבדוק אם יש משאבים קיימים של העדפות מכסה וליצור או לעדכן את מגבלות הטוקנים היומיות, מריצים את הסקריפט הבא ב-Python:

    from google.cloud import cloudquotas_v1
    
    PROJECT_ID = "PROJECT_ID"
    QUOTA_LIMITS = {
        "GenAiInputTokensPerDay": INPUT_TOKEN_LIMIT,
        "GenAiOutputTokensPerDay": OUTPUT_TOKEN_LIMIT,
    }
    
    # Initialize the client with quota_project_id (required by the Cloud Quotas API).
    client = cloudquotas_v1.CloudQuotasClient(
        client_options={"quota_project_id": PROJECT_ID}
    )
    parent = f"projects/{PROJECT_ID}/locations/global"
    
    for quota_id, new_limit in QUOTA_LIMITS.items():
        # Check for an existing preference ID, or fall back to a default name.
        list_request = cloudquotas_v1.ListQuotaPreferencesRequest(
            parent=parent,
            filter=f"quotaId:{quota_id}",
        )
        prefs = list(client.list_quota_preferences(request=list_request))
        pref_name = (
            prefs[0].name
            if prefs
            else f"{parent}/quotaPreferences/custom-{quota_id}"
        )
    
        # Update the existing preference or create it if missing (allow_missing=True).
        update_request = cloudquotas_v1.UpdateQuotaPreferenceRequest(
            quota_preference=cloudquotas_v1.QuotaPreference(
                name=pref_name,
                service="bigquery.googleapis.com",
                quota_id=quota_id,
                quota_config=cloudquotas_v1.QuotaConfig(preferred_value=new_limit),
            ),
            allow_missing=True,
            ignore_safety_checks=[
                cloudquotas_v1.QuotaSafetyCheck.QUOTA_DECREASE_PERCENTAGE_TOO_HIGH
            ],
        )
        response = client.update_quota_preference(request=update_request)
        print(f"Quota ID: {quota_id}")
        print(f"Preference Name: {response.name}")
        print(f"Preferred Value: {response.quota_config.preferred_value}")
        print(f"Granted Value: {response.quota_config.granted_value}")
        print(f"Reconciling: {response.reconciling}\n")
    

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

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫INPUT_TOKEN_LIMIT: מגבלת היעד היומית של אסימוני קלט כמספר שלם (לדוגמה, 754000000).
    • ‫OUTPUT_TOKEN_LIMIT: מגבלת היעד היומית של אסימוני הפלט כמספר שלם (לדוגמה, 8000000).

Terraform

כשמנהלים מכסות של אסימונים באמצעות Terraform, צריך לציין את bigquery.googleapis.com בתור שם השירות ולהשתמש במזהי המכסות הבאים (תלויי אותיות רישיות):

  • טוקנים של קלט AI ביום: GenAiInputTokensPerDay
  • אסימוני קלט של AI ליום לכל משתמש: GenAiInputTokensPerUserPerDay
  • טוקנים של פלט AI ביום: GenAiOutputTokensPerDay
  • טוקנים של פלט AI ליום לכל משתמש: GenAiOutputTokensPerUserPerDay
  1. בודקים אם כבר קיימות העדפות מכסה בפרויקט. במכסות ב-Cloud אפשר להגדיר רק משאב העדפה אחד לכל מכסה בפרויקט. אם מכסה שונתה בעבר במסוףGoogle Cloud או בכלי אחר, צריך להשתמש במזהה ההעדפה הקיים שלה:

    gcloud quotas preferences list \
        --project=PROJECT_ID \
        --filter="quotaId:GenAiInputTokensPerDay OR quotaId:GenAiOutputTokensPerDay" \
        --format="table(quotaId, name.basename():label=PREFERENCE_ID, quotaConfig.preferredValue)"
    
  2. כדי להגדיר את המגבלות היומיות על אסימונים בהגדרות של Terraform (לדוגמה, main.tf), משתמשים במשאב google_cloud_quotas_quota_preference:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = ">= 5.30.0"
        }
      }
    }
    
    locals {
      project_id = "PROJECT_ID"
    
      # If you previously modified a quota in the console or another
      # tool, replace `name` with the existing PREFERENCE_ID from
      # `gcloud quotas preferences list` and uncomment the `import` block.
      bq_genai_quotas = {
        GenAiInputTokensPerDay = {
          name            = "custom-GenAiInputTokensPerDay"
          preferred_value = "INPUT_TOKEN_LIMIT" # Default: 200,000,000,000
        }
        GenAiOutputTokensPerDay = {
          name            = "custom-GenAiOutputTokensPerDay"
          preferred_value = "OUTPUT_TOKEN_LIMIT" # Default: 20,000,000,000
        }
      }
    }
    
    # If quota preferences already exist on your project, uncomment this `import`
    # block so that Terraform imports the existing preferences instead of
    # attempting to create duplicates.
    #
    # import {
    #   for_each = local.bq_genai_quotas
    #   to       = google_cloud_quotas_quota_preference.bq_genai[each.key]
    #   id       = "projects/${local.project_id}/locations/global/quotaPreferences/${each.value.name}"
    # }
    
    resource "google_cloud_quotas_quota_preference" "bq_genai" {
      for_each      = local.bq_genai_quotas
      parent        = "projects/${local.project_id}"
      name          = each.value.name
      service       = "bigquery.googleapis.com"
      quota_id      = each.key
      justification = "Managing BigQuery GenAI daily token budget"
    
      # Allows decreases greater than 10% when setting a stricter cost cap.
      ignore_safety_checks = "QUOTA_DECREASE_PERCENTAGE_TOO_HIGH"
    
      quota_config {
        preferred_value = each.value.preferred_value
      }
    }
    
    output "quota_status" {
      value = {
        for k, v in google_cloud_quotas_quota_preference.bq_genai : k => {
          preferred_value = v.quota_config[0].preferred_value
          granted_value   = v.quota_config[0].granted_value
          reconciling     = v.reconciling
        }
      }
    }
    

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

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫INPUT_TOKEN_LIMIT: מגבלת היעד היומית של טוקנים לקלט (לדוגמה, 754000000).
    • ‫OUTPUT_TOKEN_LIMIT: מגבלת הטוקנים היומית של פלט היעד (לדוגמה, 8000000).
  3. מאתחלים ומחילים את ההגדרות של Terraform:

    terraform init
    terraform apply
    

מעקב אחרי המכסות

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

  1. במסוף Google Cloud , נכנסים לדף IAM & Admin > Quotas & System Limits.

    כניסה לדף Quotas & System Limits

  2. מסננים את המכסות לפי Service: BigQuery API.

  3. בעמודות Current usage percentage ו-Current usage אפשר לבדוק את צריכת הטוקנים היומית של הפרויקט במכסות AI input tokens per day (GenAiInputTokensPerDay) ו-AI output tokens per day (GenAiOutputTokensPerDay).

  4. כדי לראות את היסטוריית צריכת הטוקנים לאורך זמן, בשורה של מכסת הטוקנים ברמת הפרויקט לוחצים על monitoring Show usage chart.

    בכרטיס השימוש מוצגים המגבלה שהגדרתם, אחוז השימוש הנוכחי ואחוז השימוש בשיא, וגם תרשים של היסטוריית הצריכה בטווח התאריכים הבאים: 7 ימים, 14 ימים, 30 ימים ובהתאמה אישית:

    תרשים השימוש במכסה היומית של טוקנים לקלט של AI במסוף Google Cloud .

  5. אופציונלי: הגדרת התראות בסיסיות על שימוש במכסות כדי לקבל התראה באימייל, ב-SMS או ב-Pub/Sub כשצריכת הטוקנים מגיעה לאחוז מסוים מהמגבלה היומית.

  6. אופציונלי: יצירת תרשימים ב-Cloud Monitoring כדי להציג באופן חזותי את מגמות השימוש בטוקנים וליצור לוחות בקרה בהתאמה אישית. מידע נוסף על מעקב אחרי מכסות והגדרת מדיניות התראות זמין במאמר הגדרת התראות על הגעה למכסה ומעקב אחרי מכסות.

כדי להעריך את השימוש באסימוני קלט לפני שמריצים שאילתה, משתמשים בפונקציה AI.COUNT_TOKENS. אפשר גם לראות את מספר האסימונים שעובדו בשאילתה ספציפית בכרטיסייה Job information שבחלונית Query results.

התנהגות אכיפת המכסות

‫BigQuery עוקב אחרי צריכת הטוקנים בכמה שלבים של הרצת השאילתה:

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

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

  • מכסות גלובליות: המכסות שמוגדרות הן גלובליות. השימוש בטוקנים נצבר בכל האזורים שבהם הפרויקט פועל, וכך נוצר מנגנון אחיד לבקרת עלויות. כך אפשר למנוע חיובים לא צפויים על שימוש באזורים שונים.
  • הקצאת משאבים לפי התפוקה שנקבעה: אם אתם משתמשים במודלים של Gemini Enterprise Agent Platform עם הקצאת משאבים לפי התפוקה שנקבעה, החיוב לא מבוסס על השימוש בטוקנים. כדאי להגדיר את מכסות האסימונים האלה ב-BigQuery לערך גבוה, כדי להימנע מחסימה מיותרת של השאילתות.
  • בדיקת בטיחות להפחתת מכסות: כברירת מחדל, Cloud Quotas API חוסם כל עדכון פרוגרמטי שמפחית את מגבלת המכסה בפועל ביותר מ-10% בבת אחת. מכיוון שמגבלות ברירת המחדל של הטוקנים הן במאות מיליארדים, הגדרת מכסה יומית מחמירה יותר בדרך כלל חורגת מהפחתה של 10% ונכשלת עם השגיאה QUOTA_DECREASE_PERCENTAGE_TOO_HIGH, אלא אם מבטלים את בדיקת הבטיחות הזו:
    • ‫ה-CLI של gcloud: כוללים את הדגל --allow-high-percentage-quota-decrease.
    • ספריית הלקוח של Python: מעבירים את הערך ignore_safety_checks=[cloudquotas_v1.QuotaSafetyCheck.QUOTA_DECREASE_PERCENTAGE_TOO_HIGH].
    • Terraform: מגדירים את ignore_safety_checks = "QUOTA_DECREASE_PERCENTAGE_TOO_HIGH".

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