שליטה בעלויות באמצעות מכסות טוקנים
במאמר הזה מוסבר איך להגדיר ולנהל מגבלות יומיות על מספר הטוקנים של הקלט והפלט שפונקציות 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
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
ניהול המכסות
בהתאם לשימוש במשאבים, יכול להיות שתרצו להציג או לשנות את ערכי מכסת הטוקנים:
- אם עומסי העבודה שלכם דורשים קיבולת גדולה יותר מהמגבלה שמוגדרת כברירת מחדל, אתם יכולים לבקש להגדיל את המכסה.
- אם אתם רוצים להגביל את השימוש בצורה מחמירה יותר כדי למנוע חריגה מהתקציב, אתם יכולים ליצור שינוי של מכסה כדי להגביל את השימוש.
כדי לראות ולעדכן את מכסות הטוקנים היומיות, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud , נכנסים לדף IAM & Admin > Quotas & System Limits.
מסננים את המכסות לפי
Service: BigQuery API.ברשימת המכסות, מחפשים מכסה ספציפית, כמו AI input tokens per day (
GenAiInputTokensPerDay), או ממיינים את העמודה Name כדי להציג את המכסות של טוקנים ל-AI בראש הרשימה.לוחצים על more_vert More actions > Edit quota.
כדי להגדיל או להקטין את המכסה, בחלונית Quota changes מזינים ערך חדש בשדה New value ולוחצים על Done. הקטנת המכסה נכנסת לתוקף באופן מיידי, ללא צורך באישור.
לוחצים על Submit request.
gcloud
כשאתם מנהלים את מכסות האסימונים באמצעות ה-CLI של gcloud, ציינו את bigquery.googleapis.com בתור שם השירות והשתמשו במזהי המכסות הבאים (תלויי אותיות רישיות):
- טוקנים של קלט AI ביום:
GenAiInputTokensPerDay - אסימוני קלט של AI ליום לכל משתמש:
GenAiInputTokensPerUserPerDay - טוקנים של פלט AI ביום:
GenAiOutputTokensPerDay - טוקנים של פלט AI ליום לכל משתמש:
GenAiOutputTokensPerUserPerDay
אופציונלי: כדי להציג את מכסות הטוקנים של BigQuery ל-AI גנרטיבי ואת הערכים הנוכחיים שלהן, משתמשים ב-
gcloud quotas info list:gcloud quotas info list \ --service=bigquery.googleapis.com \ --project=PROJECT_ID \ --filter="quotaId:GenAi*"כדי ליצור או לעדכן את העדפות המכסה של מגבלות האסימונים היומיות, משתמשים ב-
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: הסיבה לשינוי המכסה.
-
כדי לבדוק את הסטטוס של העדפות המכסות, משתמשים ב-
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
מתקינים את ספריית הלקוח של Cloud Quotas ל-Python:
pip install --user google-cloud-quotasכדי לבדוק אם יש משאבים קיימים של העדפות מכסה וליצור או לעדכן את מגבלות הטוקנים היומיות, מריצים את הסקריפט הבא ב-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
בודקים אם כבר קיימות העדפות מכסה בפרויקט. במכסות ב-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)"כדי להגדיר את המגבלות היומיות על אסימונים בהגדרות של 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).
-
מאתחלים ומחילים את ההגדרות של Terraform:
terraform init terraform apply
מעקב אחרי המכסות
כדי למנוע כשלים לא צפויים בשאילתות, לזהות עלייה חדה בשימוש ולנהל את העלויות, אתם יכולים לעקוב אחרי צריכת מכסת הטוקנים במסוף Google Cloud :
במסוף Google Cloud , נכנסים לדף IAM & Admin > Quotas & System Limits.
מסננים את המכסות לפי
Service: BigQuery API.בעמודות Current usage percentage ו-Current usage אפשר לבדוק את צריכת הטוקנים היומית של הפרויקט במכסות AI input tokens per day (
GenAiInputTokensPerDay) ו-AI output tokens per day (GenAiOutputTokensPerDay).כדי לראות את היסטוריית צריכת הטוקנים לאורך זמן, בשורה של מכסת הטוקנים ברמת הפרויקט לוחצים על monitoring Show usage chart.
בכרטיס השימוש מוצגים המגבלה שהגדרתם, אחוז השימוש הנוכחי ואחוז השימוש בשיא, וגם תרשים של היסטוריית הצריכה בטווח התאריכים הבאים: 7 ימים, 14 ימים, 30 ימים ובהתאמה אישית:
אופציונלי: הגדרת התראות בסיסיות על שימוש במכסות כדי לקבל התראה באימייל, ב-SMS או ב-Pub/Sub כשצריכת הטוקנים מגיעה לאחוז מסוים מהמגבלה היומית.
אופציונלי: יצירת תרשימים ב-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".
- ה-CLI של gcloud: כוללים את הדגל