קבלת מסקנות באצווה למודל תחזית

‫Gemini Enterprise Agent Platform מספקת שתי אפשרויות לחיזוי ערכים עתידיים באמצעות מודל התחזית שאומן: הסקת מסקנות אונליין והסקת מסקנות באצווה.

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

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

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

אפשר לבקש מסקנות אצווה ישירות ממקור המידע של המודל.

אתם יכולים לבקש הסבר על ההסקה (שנקרא גם שיוך תכונות) כדי לראות איך המודל הגיע להסקה. ערכי החשיבות של התכונות המקומיות מציינים את מידת התרומה של כל תכונה לתוצאת ההסקה. סקירה כללית של המושגים זמינה במאמר שיוך תכונות לחיזוי.

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

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

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

נתוני קלט

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

  • אובייקטים של CSV ב-Cloud Storage
  • טבלאות ב-BigQuery

מומלץ להשתמש באותו פורמט לנתוני הקלט כמו זה ששימש לאימון המודל. לדוגמה, אם אימנתם את המודל באמצעות נתונים ב-BigQuery, מומלץ להשתמש בטבלה ב-BigQuery כקלט להסקת מסקנות באצווה. מכיוון שפלטפורמת הסוכנים של Gemini Enterprise מתייחסת לכל שדות הקלט של קובץ ה-CSV כמחרוזות, ערבוב של פורמטים של נתוני אימון ונתוני קלט עלול לגרום לשגיאות.

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

הדרישות לגבי נתוני הקלט

הקלט למודלים של תחזיות צריך לעמוד בדרישות הבאות:

  • כל הערכים בעמודת הזמן חייבים להיות נוכחים ותקינים.
  • כל העמודות שמשמשות בבקשת ההסקה חייבות להופיע בנתוני הקלט. אם העמודות ריקות או לא קיימות, Agent Platform מוסיפה באופן אוטומטי רווחים לנתונים.
  • תדירות הנתונים של נתוני הקלט ונתוני האימון צריכה להיות זהה. אם חסרות שורות בסדרת הזמן, צריך להוסיף אותן באופן ידני בהתאם לידע המתאים בתחום.
  • סדרות זמן עם חותמות זמן כפולות מוסרות מההסקות. כדי לכלול אותם, צריך להסיר את חותמות הזמן הכפולות.
  • מספקים נתונים היסטוריים לכל סדרת זמן שרוצים לחזות. כדי לקבל את התחזיות הכי מדויקות, כמות הנתונים צריכה להיות שווה לחלון ההקשר, שמוגדר במהלך אימון המודל. לדוגמה, אם חלון ההקשר הוא 14 ימים, צריך לספק נתונים היסטוריים של 14 ימים לפחות. אם מספקים פחות נתונים, Agent Platform מוסיפה לנתונים ערכים ריקים.
  • התחזית מתחילה בשורה הראשונה של סדרת זמן (מסודרת לפי זמן) עם ערך null בעמודת היעד. ערך ה-null חייב להיות רציף בסדרת הזמן. לדוגמה, אם העמודה של היעד מסודרת לפי זמן, אי אפשר להזין ערכים כמו 1, ‏ 2, ‏ null,‏ 3, ‏ 4, ‏ null, ‏ null עבור סדרת זמן אחת. במקרה של קובצי CSV, פלטפורמת הסוכנים של Gemini Enterprise מתייחסת למחרוזת ריקה כאל null, וב-BigQuery יש תמיכה מובנית בערכי null.

טבלה ב-BigQuery

אם בוחרים טבלה ב-BigQuery כקלט, צריך לוודא את הדברים הבאים:

  • הגודל של טבלאות של מקור נתונים ב-BigQuery לא יכול להיות גדול מ-100GB.
  • אם הטבלה נמצאת בפרויקט אחר, צריך להקצות את התפקיד BigQuery Data Editor לחשבון השירות של Agent Platform בפרויקט הזה.

קובץ CSV

אם בוחרים אובייקט CSV ב-Cloud Storage כקלט, צריך לוודא את הדברים הבאים:

  • מקור הנתונים חייב להתחיל בשורת כותרת עם שמות העמודות.
  • גודל כל אובייקט של מקור נתונים לא יכול להיות גדול מ-10GB. אפשר לצרף כמה קבצים, עד לגודל מקסימלי של 100GB.
  • אם קטגוריה של Cloud Storage נמצאת בפרויקט אחר, צריך להעניק את התפקיד Storage Object Creator לחשבון השירות של Agent Platform באותו פרויקט.
  • כל המחרוזות צריכות להיות מוקפות במירכאות כפולות (").

פורמט פלט

פורמט הפלט של בקשת ההסקה באצווה לא צריך להיות זהה לפורמט הקלט. לדוגמה, אם משתמשים בטבלה ב-BigQuery כקלט, אפשר להגדיר שהתוצאות של התחזית ייצאו לאובייקט CSV ב-Cloud Storage.

שליחת בקשת הסקה באצווה למודל

כדי לשלוח בקשות להסקת מסקנות באצווה, אפשר להשתמש ב Google Cloud מסוף או ב-Agent Platform API. מקור נתוני הקלט יכול להיות אובייקטים של CSV שמאוחסנים בקטגוריה של Cloud Storage או בטבלאות של BigQuery. בהתאם לכמות הנתונים שאתם שולחים כקלט, יכול להיות שיעבור זמן עד שמשימת הסקת מסקנות בכמות גדולה תסתיים.

מסוף Google Cloud

משתמשים במסוף Google Cloud כדי לבקש הסקה באצווה.

  1. במסוף Google Cloud , בקטע Agent Platform, עוברים לדף Batch inferences.

    כניסה לדף Batch inferences

  2. לוחצים על Create (יצירה) כדי לפתוח את החלון New batch inference (הסקת מסקנות חדשה באצווה).
  3. בקטע Define your batch inference (הגדרת מסקנות אצווה), מבצעים את השלבים הבאים:
    1. מזינים שם להסקת המסקנות באצווה.
    2. בקטע Model name (שם המודל), בוחרים את שם המודל שרוצים להשתמש בו להסקת המסקנות של הקבוצה הזו.
    3. בשדה Version (גרסה), בוחרים את גרסת המודל.
    4. בקטע Select source (בחירת מקור), בוחרים אם נתוני הקלט של המקור הם קובץ CSV ב-Cloud Storage או טבלה ב-BigQuery.
      • עבור קובצי CSV, מציינים את המיקום ב-Cloud Storage שבו נמצא קובץ הקלט CSV.
      • בטבלאות BigQuery, מציינים את מזהה הפרויקט שבו נמצאת הטבלה, את מזהה מערך הנתונים ב-BigQuery ואת מזהה הטבלה או התצוגה ב-BigQuery.
    5. בקטע Batch inference output (פלט של הסקת מסקנות באצווה), בוחרים באפשרות CSV או BigQuery.
      • במקרה של CSV, מציינים את קטגוריית Cloud Storage שבה Gemini Enterprise Agent Platform מאחסן את הפלט.
      • ב-BigQuery, אפשר לציין מזהה פרויקט או מערך נתונים קיים:
        • כדי לציין את מזהה הפרויקט, מזינים את מזהה הפרויקט בשדה מזהה פרויקט ב-Google Cloud. ‫Gemini Enterprise Agent Platform יוצרת בשבילכם מערך נתונים חדש של פלט.
        • כדי לציין מערך נתונים קיים, מזינים את הנתיב שלו ב-BigQuery בשדה מזהה הפרויקט ב-Google Cloud, למשל bq://projectid.datasetid.
      • אופציונלי. אם יעד הפלט הוא BigQuery או JSONL ב-Cloud Storage, אפשר להפעיל שיוך תכונות בנוסף למסקנות. כדי לעשות את זה, בוחרים באפשרות הפעלת שיוך תכונות למודל הזה. ‫Feature attributions לא אפשרי ב-CSV ב-Cloud Storage. מידע נוסף
  4. אופציונלי: ניתוח של מעקב אחרי מודלים עבור מסקנות אצווה זמין בתצוגה מקדימה. במאמר דרישות מוקדמות מוסבר איך מוסיפים הגדרה של זיהוי הטיה למשימת הסקת מסקנות באצווה.
    1. לוחצים על המתג כדי להפעיל את האפשרות הפעלת מעקב אחר המודל עבור הסקת המסקנות הזו.
    2. בוחרים מקור נתוני אימון. מזינים את נתיב הנתונים או המיקום של מקור נתוני האימון שבחרתם.
    3. אופציונלי: בקטע ערכי סף להתראות, מציינים את ערכי הסף להפעלת ההתראות.
    4. בקטע התראות באימייל, מזינים כתובת אימייל אחת או יותר שמופרדות בפסיקים כדי לקבל התראות כשמודל חורג מערך הסף להתראה.
    5. אופציונלי: בערוצי התראות, מוסיפים ערוצים של Cloud Monitoring כדי לקבל התראות כשמודל חורג מסף ההתראה. אתם יכולים לבחור ערוצים קיימים של Cloud Monitoring או ליצור ערוץ חדש בלחיצה על Manage notification channels. המסוף תומך בערוצי התראות של PagerDuty,‏ Slack ו-Pub/Sub.
  5. לוחצים על יצירה.

‫API : BigQuery

REST

משתמשים ב-method‏ batchPredictionJobs.create כדי לבקש הסקה של נתונים בכמות גדולה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור שבו המודל מאוחסן ועבודת ההיקשים באצווה מבוצעת. לדוגמה, us-central1.
  • PROJECT_ID: [מזהה הפרויקט](/resource-manager/docs/creating-managing-projects#identifiers).
  • BATCH_JOB_NAME: השם המוצג של המשימה באצווה
  • MODEL_ID: המזהה של המודל שבו רוצים להשתמש כדי להסיק מסקנות
  • INPUT_URI: הפניה למקור הנתונים של BigQuery. בטופס:
    bq://bqprojectId.bqDatasetId.bqTableId
    
  • OUTPUT_URI: הפניה ליעד ב-BigQuery (המקום שבו נכתבות ההסקות). מציינים את מזהה הפרויקט ואופציונלית מזהה של מערך נתונים קיים. צריך להשתמש בטופס הבא:
    bq://bqprojectId.bqDatasetId
    אם מציינים רק את מזהה הפרויקט, Agent Platform יוצרת בשבילכם מערך נתונים חדש של פלט. צריך להשתמש בטופס הבא:
    bq://bqprojectId
  • GENERATE_EXPLANATION: ערך ברירת המחדל הוא false. מגדירים את הערך true כדי להפעיל את שיוך התכונות. מידע נוסף זמין במאמר בנושא שיוך תכונות לתחזיות.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

גוף בקשת JSON:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "OUTPUT_URI"
    }
  },
  "generate_explanation": GENERATE_EXPLANATION
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

PowerShell

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

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs/67890",
  "displayName": "batch_job_1 202005291958",
  "model": "projects/12345/locations/us-central1/models/5678",
  "state": "JOB_STATE_PENDING",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
        "outputUri": bq://12345
    }
  },
  "dedicatedResources": {
    "machineSpec": {
      "machineType": "n1-standard-32",
      "acceleratorCount": "0"
    },
    "startingReplicaCount": 2,
    "maxReplicaCount": 6
  },
  "manualBatchTuningParameters": {
    "batchSize": 4
  },
  "outputInfo": {
    "bigqueryOutputDataset": "bq://12345.reg_model_2020_10_02_06_04
  }
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-09-30T02:58:44.341643Z",
  "updateTime": "2020-09-30T02:58:44.341643Z",
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaההוראות להגדרה במאמר מדריך למתחילים של Agent Platform באמצעות ספריות לקוח.

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

בדוגמה הבאה, מחליפים את INSTANCES_FORMAT ואת PREDICTIONS_FORMAT ב-bigquery. כדי ללמוד איך להחליף את שאר placeholders, אפשר לעיין בכרטיסייה REST & CMD LINE בקטע הזה.
import com.google.cloud.aiplatform.v1.BatchPredictionJob;
import com.google.cloud.aiplatform.v1.BigQueryDestination;
import com.google.cloud.aiplatform.v1.BigQuerySource;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.ModelName;
import com.google.gson.JsonObject;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.io.IOException;

public class CreateBatchPredictionJobBigquerySample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String modelName = "MODEL_NAME";
    String instancesFormat = "INSTANCES_FORMAT";
    String bigquerySourceInputUri = "BIGQUERY_SOURCE_INPUT_URI";
    String predictionsFormat = "PREDICTIONS_FORMAT";
    String bigqueryDestinationOutputUri = "BIGQUERY_DESTINATION_OUTPUT_URI";
    createBatchPredictionJobBigquerySample(
        project,
        displayName,
        modelName,
        instancesFormat,
        bigquerySourceInputUri,
        predictionsFormat,
        bigqueryDestinationOutputUri);
  }

  static void createBatchPredictionJobBigquerySample(
      String project,
      String displayName,
      String model,
      String instancesFormat,
      String bigquerySourceInputUri,
      String predictionsFormat,
      String bigqueryDestinationOutputUri)
      throws IOException {
    JobServiceSettings settings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient client = JobServiceClient.create(settings)) {
      JsonObject jsonModelParameters = new JsonObject();
      Value.Builder modelParametersBuilder = Value.newBuilder();
      JsonFormat.parser().merge(jsonModelParameters.toString(), modelParametersBuilder);
      Value modelParameters = modelParametersBuilder.build();
      BigQuerySource bigquerySource =
          BigQuerySource.newBuilder().setInputUri(bigquerySourceInputUri).build();
      BatchPredictionJob.InputConfig inputConfig =
          BatchPredictionJob.InputConfig.newBuilder()
              .setInstancesFormat(instancesFormat)
              .setBigquerySource(bigquerySource)
              .build();
      BigQueryDestination bigqueryDestination =
          BigQueryDestination.newBuilder().setOutputUri(bigqueryDestinationOutputUri).build();
      BatchPredictionJob.OutputConfig outputConfig =
          BatchPredictionJob.OutputConfig.newBuilder()
              .setPredictionsFormat(predictionsFormat)
              .setBigqueryDestination(bigqueryDestination)
              .build();
      String modelName = ModelName.of(project, location, model).toString();
      BatchPredictionJob batchPredictionJob =
          BatchPredictionJob.newBuilder()
              .setDisplayName(displayName)
              .setModel(modelName)
              .setModelParameters(modelParameters)
              .setInputConfig(inputConfig)
              .setOutputConfig(outputConfig)
              .build();
      LocationName parent = LocationName.of(project, location);
      BatchPredictionJob response = client.createBatchPredictionJob(parent, batchPredictionJob);
      System.out.format("response: %s\n", response);
      System.out.format("\tName: %s\n", response.getName());
    }
  }
}

Python

במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.

def create_batch_prediction_job_bigquery_sample(
    project: str,
    location: str,
    model_resource_name: str,
    job_display_name: str,
    bigquery_source: str,
    bigquery_destination_prefix: str,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    my_model = aiplatform.Model(model_resource_name)

    batch_prediction_job = my_model.batch_predict(
        job_display_name=job_display_name,
        bigquery_source=bigquery_source,
        bigquery_destination_prefix=bigquery_destination_prefix,
        sync=sync,
    )

    batch_prediction_job.wait()

    print(batch_prediction_job.display_name)
    print(batch_prediction_job.resource_name)
    print(batch_prediction_job.state)
    return batch_prediction_job

‫API : Cloud Storage

REST

משתמשים ב-method‏ batchPredictionJobs.create כדי לבקש הסקה של נתונים בכמות גדולה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • LOCATION_ID: האזור שבו המודל מאוחסן ועבודת ההיקשים באצווה מבוצעת. לדוגמה, us-central1.
  • PROJECT_ID:
  • BATCH_JOB_NAME: השם המוצג של המשימה באצווה
  • MODEL_ID: המזהה של המודל שבו רוצים להשתמש כדי להסיק מסקנות
  • URI: נתיבים (URI) לקטגוריות של Cloud Storage שמכילות את נתוני האימון. יכול להיות שיש יותר מכתובת אחת. כל מזהה URI מופיע בפורמט:
    gs://bucketName/pathToFileName
    
  • OUTPUT_URI_PREFIX: הנתיב ליעד ב-Cloud Storage שבו ייכתבו ההסקות. ‫Agent Platform כותב היסקים של קבוצות נתונים לספריית משנה עם חותמת זמן בנתיב הזה. מגדירים את הערך הזה כמחרוזת בפורמט הבא:
    gs://bucketName/pathToOutputDirectory
    
  • GENERATE_EXPLANATION: ערך ברירת המחדל הוא false. מגדירים את הערך true כדי להפעיל את שיוך התכונות. האפשרות הזו זמינה רק אם יעד הפלט הוא JSONL. אין תמיכה בשיוך תכונות לקובצי CSV ב-Cloud Storage. מידע נוסף זמין במאמר בנושא שיוך תכונות לתחזיות.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

גוף בקשת JSON:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "csv",
    "gcsSource": {
      "uris": [
        URI1,...
      ]
    },
  },
  "outputConfig": {
    "predictionsFormat": "csv",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    }
  },
  "generate_explanation": GENERATE_EXPLANATION
}

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

PowerShell

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

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs/67890",
  "displayName": "batch_job_1 202005291958",
  "model": "projects/12345/locations/us-central1/models/5678",
  "state": "JOB_STATE_PENDING",
  "inputConfig": {
    "instancesFormat": "csv",
    "gcsSource": {
      "uris": [
        "gs://bp_bucket/reg_mode_test"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "csv",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_URI_PREFIX"
    }
  },
  "dedicatedResources": {
    "machineSpec": {
      "machineType": "n1-standard-32",
      "acceleratorCount": "0"
    },
    "startingReplicaCount": 2,
    "maxReplicaCount": 6
  }
  "outputInfo": {
    "gcsOutputDataset": "OUTPUT_URI_PREFIX/prediction-batch_job_1 202005291958-2020-09-30T02:58:44.341643Z"
  }
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-09-30T02:58:44.341643Z",
  "updateTime": "2020-09-30T02:58:44.341643Z",
}

Python

במאמר התקנת Vertex AI SDK ל-Python מוסבר איך להתקין או לעדכן את Vertex AI SDK ל-Python. מידע נוסף מופיע ב מאמרי העזרה של Python API.

def create_batch_prediction_job_sample(
    project: str,
    location: str,
    model_resource_name: str,
    job_display_name: str,
    gcs_source: Union[str, Sequence[str]],
    gcs_destination: str,
    sync: bool = True,
):
    aiplatform.init(project=project, location=location)

    my_model = aiplatform.Model(model_resource_name)

    batch_prediction_job = my_model.batch_predict(
        job_display_name=job_display_name,
        gcs_source=gcs_source,
        gcs_destination_prefix=gcs_destination,
        sync=sync,
    )

    batch_prediction_job.wait()

    print(batch_prediction_job.display_name)
    print(batch_prediction_job.resource_name)
    print(batch_prediction_job.state)
    return batch_prediction_job

אחזור תוצאות של הסקה בקבוצות

פלטפורמת הסוכנים של Gemini Enterprise שולחת את הפלט של מסקנות אצווה ליעד שציינתם, שיכול להיות BigQuery או Cloud Storage.

אין תמיכה בפלט של Cloud Storage לשיוך תכונות.

BigQuery

מערך נתונים של פלט

אם אתם משתמשים ב-BigQuery, הפלט של הסקת מסקנות באצווה מאוחסן במערך נתונים של פלט. אם סיפקתם מערך נתונים ל-Gemini Enterprise Agent Platform, השם של מערך הנתונים (BQ_DATASET_NAME) הוא השם שסיפקתם קודם. אם לא סיפקתם מערך נתונים של פלט, Gemini Enterprise Agent Platform יצר בשבילכם מערך כזה. כדי למצוא את השם שלו (BQ_DATASET_NAME), צריך לבצע את השלבים הבאים:

  1. נכנסים לדף Batch inferences של Gemini Enterprise Agent Platform במסוף Google Cloud .

    כניסה לדף Batch inferences

  2. בוחרים את ההסקה שיצרתם.
  3. מערך הנתונים של הפלט מופיע במיקום הייצוא. שם מערך הנתונים מופיע בפורמט הבא: prediction_MODEL_NAME_TIMESTAMP

טבלאות פלט

מערך הנתונים של הפלט מכיל אחת או יותר משלוש טבלאות הפלט הבאות:

  • טבלת היקש

    הטבלה הזו מכילה שורה לכל שורה בנתוני הקלט שבהם נשלחה בקשה להסקת מסקנות (כלומר, שבהם TARGET_COLUMN_NAME = null). לדוגמה, אם הקלט שלכם כלל 14 ערכים מסוג null בעמודת היעד (למשל, מכירות ל-14 הימים הבאים), בקשת ההסקה תחזיר 14 שורות, עם מספר המכירות לכל יום. אם הבקשה להסקת מסקנות חורגת מאופק התחזית של המודל, Gemini Enterprise Agent Platform מחזירה רק מסקנות עד לאופק התחזית.

  • טבלת אימות שגיאות

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

  • טבלת השגיאות

    הטבלה הזו מכילה שורה לכל שגיאה לא קריטית שנתקלה בה במהלך הסקת מסקנות באצווה. כל שגיאה לא קריטית מתאימה לשורה בנתוני הקלט שהפלטפורמה של Agent לא הצליחה להחזיר לגביה תחזית.

טבלת חיזויים

שם הטבלה (BQ_PREDICTIONS_TABLE_NAME) נוצר על ידי הוספת הקידומת `predictions_` לחותמת הזמן של תחילת העבודה של משימת ההסקה באצווה: predictions_TIMESTAMP

כדי לאחזר את טבלת ההסקות:

  1. במסוף, נכנסים לדף BigQuery.
    כניסה ל-BigQuery
  2. מריצים את השאילתה הבאה:
    SELECT * FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
          

‫Gemini Enterprise Agent Platform מאחסן את ההסקות בעמודה predicted_TARGET_COLUMN_NAME.value.

אם אימנתם מודל עם Temporal Fusion Transformer‏ (TFT), תוכלו למצוא את פלט הפרשנות של TFT בעמודה predicted_TARGET_COLUMN_NAME.tft_feature_importance.

העמודה הזו מחולקת עוד יותר לקטגוריות הבאות:

  • context_columns: תכונות חיזוי שהערכים של חלון ההקשר שלהן משמשים כקלט למקודד הזיכרון ארוך הטווח (LSTM) של TFT.
  • context_weights: המשקלים של חשיבות התכונות שמשויכים לכל אחד מהערכים context_columns עבור המופע החזוי.
  • horizon_columns: תכונות חיזוי שהערכים של טווח החיזוי שלהן משמשים כקלט למפענח של זיכרון ארוך לטווח קצר (LSTM) של TFT.
  • horizon_weights: המשקלים של חשיבות התכונות שמשויכים לכל אחד מהערכים horizon_columns עבור המופע החזוי.
  • attribute_columns: תכונות של תחזיות שהן בלתי תלויות בזמן.
  • attribute_weights: המשקלים שמשויכים לכל אחד מהמאפיינים attribute_columns.

אם המודל מותאם לחישוב הפסד קוונטילי וקבוצת הקוונטילים כוללת את החציון, predicted_TARGET_COLUMN_NAME.value הוא ערך ההסקה בחציון. אחרת, predicted_TARGET_COLUMN_NAME.value הוא ערך ההסקה באחוזון הנמוך ביותר בקבוצה. לדוגמה, אם קבוצת הכמויות שלכם היא [0.1, 0.5, 0.9], אז value הוא ההסקה לגבי הכמות 0.5. אם קבוצת הכמויות היא [0.1, 0.9], אז value היא ההסקה לגבי הכמות 0.1.

בנוסף, Gemini Enterprise Agent Platform מאחסנת ערכי קוונטיל והסקות בעמודות הבאות:

  • predicted_TARGET_COLUMN_NAME.quantile_values: ערכי הכמויות, שמוגדרים במהלך אימון המודל. לדוגמה, 0.1, 0.5 ו-0.9.
  • predicted_TARGET_COLUMN_NAME.quantile_predictions: ערכי ההסקה שמשויכים לערכי הכמותון.

אם המודל משתמש בהסקה הסתברותית, ‫predicted_TARGET_COLUMN_NAME.value מכיל את המינימייזר של יעד האופטימיזציה. לדוגמה, אם יעד האופטימיזציה הוא minimize-rmse, הערך של predicted_TARGET_COLUMN_NAME.value הוא הערך הממוצע. אם הוא minimize-mae, predicted_TARGET_COLUMN_NAME.value מכיל את ערך החציון.

אם המודל שלכם משתמש בהסקה הסתברותית עם קוונטילים, Gemini Enterprise Agent Platform שומרת את ערכי הקוונטילים וההסקות בעמודות הבאות:

  • predicted_TARGET_COLUMN_NAME.quantile_values: ערכי הכמויות, שמוגדרים במהלך אימון המודל. לדוגמה, 0.1, 0.5 ו-0.9.
  • predicted_TARGET_COLUMN_NAME.quantile_predictions: ערכי ההסקה שמשויכים לערכי הכמותון.

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

SELECT explanation.attributions[OFFSET(0)].featureAttributions.BQ_FEATURE_NAME FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
  

מידע נוסף זמין במאמר בנושא שיוך תכונות לתחזיות.

טבלת אימות שגיאות

שם הטבלה (BQ_ERRORS_VALIDATION_TABLE_NAME) נוצר על ידי הוספת ‎ `errors_validation` לחותמת הזמן של תחילת משימת ההסקה של אצווה: errors_validation_TIMESTAMP

כדי לאחזר את טבלת שגיאות האימות:
  1. במסוף, נכנסים לדף BigQuery.
    כניסה ל-BigQuery
  2. מריצים את השאילתה הבאה:
    SELECT * FROM BQ_DATASET_NAME.BQ_ERRORS_VALIDATION_TABLE_NAME
          
הודעת השגיאה מאוחסנת בעמודה הבאה:
  • errors_TARGET_COLUMN_NAME

טבלת השגיאות

שם הטבלה (BQ_ERRORS_TABLE_NAME) נוצר על ידי הוספת המחרוזת errors_‎ לחותמת הזמן שבה התחילה משימת ההסקה של אצווה: errors_TIMESTAMP

כדי לאחזר את טבלת שגיאות האימות:
  1. במסוף, נכנסים לדף BigQuery.
    כניסה ל-BigQuery
  2. מריצים את השאילתה הבאה:
    SELECT * FROM BQ_DATASET_NAME.BQ_ERRORS_TABLE_NAME
          
השגיאות מאוחסנות בעמודות הבאות:
  • errors_TARGET_COLUMN_NAME.code
  • errors_TARGET_COLUMN_NAME.message

Cloud Storage

אם ציינתם את Cloud Storage כיעד הפלט, התוצאות של בקשת ההסקה באצווה יוחזרו כאובייקטים של CSV בתיקייה חדשה בדלי שציינתם. שם התיקייה הוא שם המודל, עם הקידומת prediction- ותוספת של חותמת הזמן של תחילת העבודה של ההסקת המסקנות באצווה. אפשר לראות את שם התיקייה ב-Cloud Storage בכרטיסייה Batch predictions (תחזיות אצווה) של המודל.

התיקייה ב-Cloud Storage מכילה שני סוגים של אובייקטים:
  • אובייקטים של הסקה

    שמות האובייקטים של ההסקות הם ‎ `predictions_1.csv`,‏ ‎`predictions_2.csv` וכן הלאה. הם מכילים שורת כותרת עם שמות העמודות ושורה לכל תחזית שמוחזרת. מספר ערכי ההסקה תלוי בקלט ההסקה ובאופק התחזית. לדוגמה, אם הקלט שלכם כלל 14 ערכים מסוג null בעמודת היעד (למשל, מכירות ל-14 הימים הבאים), בקשת ההסקה תחזיר 14 שורות, עם מספר המכירות לכל יום. אם הבקשה להסקת מסקנות חורגת מאופק התחזית של המודל, Gemini Enterprise Agent Platform מחזירה רק מסקנות עד לאופק התחזית.

    ערכי התחזית מוחזרים בעמודה בשם `predicted_TARGET_COLUMN_NAME`. בתחזיות של קוונטילים, עמודת הפלט מכילה את ההסקות של הקוונטילים ואת ערכי הקוונטילים בפורמט JSON.

  • אובייקטים של שגיאות

    שמות אובייקטי השגיאה הם errors_1.csv,‏ errors_2.csv וכן הלאה. הם מכילים שורת כותרת ושורה לכל שורה בנתוני הקלט ש-Agent Platform לא הצליחה להחזיר עבורה תחזית (לדוגמה, אם מאפיין שלא ניתן להגדיר כ-null היה null).

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

שאילתות לדוגמה לשיוך תכונות ב-BigQuery

דוגמה 1: קביעת שיוכים להסקה יחידה

כדאי לשקול את השאלה הבאה:

בכמה פרסום של מוצר מסוים הגדיל את המכירות הצפויות בחנות מסוימת ב-24 בנובמבר?

השאילתה המתאימה היא:

SELECT
  * EXCEPT(explanation, predicted_sales),
  ROUND(predicted_sales.value, 2) AS predicted_sales,
  ROUND(
    explanation.attributions[OFFSET(0)].featureAttributions.advertisement,
    2
  ) AS attribution_advertisement
FROM
  `project.dataset.predictions`
WHERE
  product = 'product_0'
  AND store = 'store_0'
  AND date = '2019-11-24'

דוגמה 2: קביעת חשיבות התכונות הגלובלית

כדאי לשקול את השאלה הבאה:

מה הייתה התרומה של כל תכונה למכירות הכוללות החזויות?

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

WITH

/*
* Aggregate from (id, date) level attributions to global feature importance.
*/
attributions_aggregated AS (
 SELECT
   SUM(ABS(attributions.featureAttributions.date)) AS date,
   SUM(ABS(attributions.featureAttributions.advertisement)) AS advertisement,
   SUM(ABS(attributions.featureAttributions.holiday)) AS holiday,
   SUM(ABS(attributions.featureAttributions.sales)) AS sales,
   SUM(ABS(attributions.featureAttributions.store)) AS store,
   SUM(ABS(attributions.featureAttributions.product)) AS product,
 FROM
   project.dataset.predictions,
   UNNEST(explanation.attributions) AS attributions

),

/*
* Calculate the normalization constant for global feature importance.
*/
attributions_aggregated_with_total AS (
 SELECT
   *,
   date + advertisement + holiday + sales + store + product AS total
 FROM
   attributions_aggregated
)

/*
* Calculate the normalized global feature importance.
*/
SELECT
 ROUND(date / total, 2) AS date,
 ROUND(advertisement / total, 2) AS advertisement,
 ROUND(holiday / total, 2) AS holiday,
 ROUND(sales / total, 2) AS sales,
 ROUND(store / total, 2) AS store,
 ROUND(product / total, 2) AS product,
FROM
 attributions_aggregated_with_total

דוגמה לפלט של הסקת מסקנות באצווה ב-BigQuery

במערך נתונים לדוגמה של מכירות משקאות חריפים, יש ארבע חנויות בעיר "Ida Grove":‏ "Ida Grove Food Pride",‏ "Discount Liquors of Ida Grove",‏ "Casey's General Store #3757" ו-"Brew Ida Grove". ‫store_name הוא series identifier ושלושה מתוך ארבעת המאגרי הבקשות למסקנות עבור עמודת היעד sale_dollars. נוצרת שגיאת אימות כי לא נשלחה בקשה לתחזית עבור Discount Liquors of Ida Grove.

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

דוגמה לקבוצת נתונים של קלט לחיזוי

קטע מתוצאות ההסקה:

תוצאות לדוגמה של תחזיות

קטע מתוך שגיאות האימות:

שגיאות אימות לדוגמה

פלט לדוגמה של הסקה באצווה עבור מודל שעבר אופטימיזציה לפי quantile-loss

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

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

ערכי הכמותיים מוצגים בעמודה predicted_Sales.quantile_values. בדוגמה הזו, המודל חזה ערכים באחוזונים 0.1, 0.5 ו-0.9.

ערכי ההסקה מופיעים בעמודה predicted_Sales.quantile_predictions. זהו מערך של ערכי מכירות, שממופים לערכי הכמותון בעמודה predicted_Sales.quantile_values. בשורה הראשונה אנחנו רואים שההסתברות שערך המכירות יהיה נמוך מ-4484.04 היא 10%. ההסתברות שערך המכירות יהיה נמוך מ-5615.64 היא 50%. ההסתברות לכך שערך המכירות יהיה נמוך מ-6853.29 היא 90%. ההסקה לשורה הראשונה, שמיוצגת כערך יחיד, היא 5615.64.

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