ייצוא מודלים

בדף הזה מוסבר איך לייצא מודלים של BigQuery ML. אפשר לייצא מודלים של BigQuery ML ל-Cloud Storage ולהשתמש בהם לחיזוי אונליין, או לערוך אותם ב-Python. אפשר לייצא מודל BigQuery ML באמצעות:

  • באמצעות Google Cloud המסוף.
  • שימוש בהצהרה EXPORT MODEL.
  • שימוש בפקודה bq extract בכלי שורת הפקודה של BigQuery.
  • שליחת משימת extract דרך ה-API או ספריות הלקוח.

אפשר לייצא את סוגי המודלים הבאים:

  • AUTOENCODER
  • AUTOML_CLASSIFIER
  • AUTOML_REGRESSOR
  • BOOSTED_TREE_CLASSIFIER
  • BOOSTED_TREE_REGRESSOR
  • DNN_CLASSIFIER
  • DNN_REGRESSOR
  • DNN_LINEAR_COMBINED_CLASSIFIER
  • DNN_LINEAR_COMBINED_REGRESSOR
  • KMEANS
  • LINEAR_REG
  • LOGISTIC_REG
  • MATRIX_FACTORIZATION
  • RANDOM_FOREST_CLASSIFIER
  • RANDOM_FOREST_REGRESSOR
  • TENSORFLOW (מודלים של TensorFlow שיובאו)
  • PCA
  • TRANSFORM_ONLY

ייצוא פורמטים ודוגמאות של מודלים

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

סוג המודל פורמט ייצוא המודל דוגמה לקבצים שיוצאו
AUTOML_CLASSIFIER TensorFlow SavedModel (TF 2.1.0) gcs_bucket/
  assets/
    f1.txt
    f2.txt
  saved_model.pb
  variables/
    variables.data-00-of-01
    variables.index
AUTOML_REGRESSOR
AUTOENCODER TensorFlow SavedModel (TF 1.15 ואילך)
DNN_CLASSIFIER
DNN_REGRESSOR
DNN_LINEAR_COMBINED_CLASSIFIER
DNN_LINEAR_COMBINED_REGRESSOR
KMEANS
LINEAR_REGRESSOR
LOGISTIC_REG
MATRIX_FACTORIZATION
PCA
TRANSFORM_ONLY
BOOSTED_TREE_CLASSIFIER Booster (XGBoost 0.82) gcs_bucket/
  assets/
    0.txt
    1.txt
    model_metadata.json
  main.py
  model.bst
  xgboost_predictor-0.1.tar.gz
    ....
     predictor.py
    ....


main.py מיועד להרצה מקומית. פרטים נוספים מופיעים במאמר בנושא פריסת מודלים.
BOOSTED_TREE_REGRESSOR
RANDOM_FOREST_REGRESSOR
RANDOM_FOREST_REGRESSOR
‫TENSORFLOW (מיובא) TensorFlow SavedModel אותם קבצים בדיוק שהיו קיימים כשייבאו את המודל

ייצוא מודל שאומן באמצעות TRANSFORM

אם המודל אומן עם הסעיף TRANSFORM, מודל נוסף של עיבוד מקדים מבצע את אותה לוגיקה בסעיף TRANSFORM ונשמר בפורמט TensorFlow SavedModel בספריית המשנה transform. אפשר לפרוס מודל שאומן באמצעות סעיף TRANSFORM ב-Vertex AI וגם באופן מקומי. מידע נוסף זמין במאמר בנושא פריסת מודלים.

פורמט ייצוא המודל דוגמה לקבצים שיוצאו
מודל חיזוי: TensorFlow SavedModel או Booster‏ (XGBoost 0.82).
מודל לעיבוד מראש של סעיף TRANSFORM: TensorFlow SavedModel (גרסה TF 2.5 ואילך)
gcs_bucket/
  ....(model files)
  transform/
    assets/
        f1.txt/
        f2.txt/
    saved_model.pb
    variables/
        variables.data-00-of-01
        variables.index

המודל לא מכיל את המידע על הנדסת פיצ'רים (feature engineering) שבוצעה מחוץ לסעיף TRANSFORM במהלך האימון. לדוגמה, כל מה שמופיע בהצהרה SELECT . לכן, תצטרכו להמיר את נתוני הקלט באופן ידני לפני שתזינו אותם למודל של עיבוד מקדים.

סוגי נתונים נתמכים

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

סוג הקלט של הפונקציה TRANSFORM דוגמאות לקלט של פונקציית TRANSFORM דוגמאות קלט של מודל שעבר אימון מקדים
INT64 10,
11
tf.constant(
  [10, 11],
  dtype=tf.int64)
NUMERIC NUMERIC 10,
NUMERIC 11
tf.constant(
  [10, 11],
  dtype=tf.float64)
BIGNUMERIC BIGNUMERIC 10,
BIGNUMERIC 11
tf.constant(
  [10, 11],
  dtype=tf.float64)
FLOAT64 10.0,
11.0
tf.constant(
  [10, 11],
  dtype=tf.float64)
BOOL TRUE,
FALSE
tf.constant(
  [True, False],
  dtype=tf.bool)
מחרוזת 'abc',
'def'
tf.constant(
  ['abc', 'def'],
  dtype=tf.string)
BYTES b'abc',
b'def'
tf.constant(
  ['abc', 'def'],
  dtype=tf.string)
תאריך DATE '2020-09-27',
DATE '2020-09-28'
tf.constant(
  [
    '2020-09-27',
    '2020-09-28'
  ],
  dtype=tf.string)

"%F" format
DATETIME DATETIME '2023-02-02 02:02:01.152903',
DATETIME '2023-02-03 02:02:01.152903'
tf.constant(
  [
    '2023-02-02 02:02:01.152903',
    '2023-02-03 02:02:01.152903'
  ],
  dtype=tf.string)

"%F %H:%M:%E6S" format
שעות TIME '16:32:36.152903',
TIME '17:32:36.152903'
tf.constant(
  [
    '16:32:36.152903',
    '17:32:36.152903'
  ],
  dtype=tf.string)

"%H:%M:%E6S" format
TIMESTAMP TIMESTAMP '2017-02-28 12:30:30.45-08',
TIMESTAMP '2018-02-28 12:30:30.45-08'
tf.constant(
  [
    '2017-02-28 20:30:30.4 +0000',
    '2018-02-28 20:30:30.4 +0000'
  ],
  dtype=tf.string)

"%F %H:%M:%E1S %z" format
ARRAY ['a', 'b'],
['c', 'd']
tf.constant(
  [['a', 'b'], ['c', 'd']],
  dtype=tf.string)
ARRAY< STRUCT< INT64, FLOAT64>> [(1, 1.0), (2, 1.0)],
[(2, 1.0), (3, 1.0)]
tf.sparse.from_dense(
  tf.constant(
    [
      [0, 1.0, 1.0, 0],
      [0, 0, 1.0, 1.0]
    ],
    dtype=tf.float64))
NULL NULL,
NULL
tf.constant(
  [123456789.0e10, 123456789.0e10],
  dtype=tf.float64)

tf.constant(
  [1234567890000000000, 1234567890000000000],
  dtype=tf.int64)

tf.constant(
  [' __MISSING__ ', ' __MISSING__ '],
  dtype=tf.string)

פונקציות SQL נתמכות

כשמייצאים מודלים שאומנו באמצעות התנאי TRANSFORM, אפשר להשתמש בפונקציות ה-SQL הבאות בתוך התנאי TRANSFORM:

  • אופרטורים
    • +, ‏ -, ‏ *, ‏ /, ‏ =, ‏ <, ‏ >, ‏ <=, ‏ >=, ‏ !=, ‏ <>, [NOT] BETWEEN, ‏ [NOT] IN, ‏ IS [NOT] NULL, ‏ IS [NOT] TRUE, IS [NOT] FALSE, ‏ NOT, ‏ AND, ‏ OR.
  • ביטויים מותנים
    • CASE expr, CASE, COALESCE, IF, IFNULL, NULLIF.
  • פונקציות מתמטיות
    • ABS, ACOS, ACOSH, ASINH, ATAN, ATAN2, ATANH, CBRT, CEIL, CEILING, COS, COSH, COT, COTH, CSC, CSCH, EXP, FLOOR, IS_INF, IS_NAN, LN, LOG, LOG10, MOD, POW, POWER, SEC, SECH, SIGN, SIN, SINH, SQRT, TAN, TANH.
  • פונקציות המרה
    • CAST AS INT64, CAST AS FLOAT64, CAST AS NUMERIC, CAST AS BIGNUMERIC, CAST AS STRING, SAFE_CAST AS INT64, SAFE_CAST AS FLOAT64
  • פונקציות של מחרוזות
    • CONCAT, LEFT, LENGTH, LOWER, REGEXP_REPLACE, RIGHT, SPLIT, SUBSTR, SUBSTRING, TRIM, UPPER.
  • פונקציות של תאריכים
    • Date, DATE_ADD, DATE_SUB, DATE_DIFF, DATE_TRUNC, EXTRACT, FORMAT_DATE, PARSE_DATE, SAFE.PARSE_DATE.
  • פונקציות של תאריך ושעה
    • DATETIME, DATETIME_ADD, DATETIME_SUB, DATETIME_DIFF, DATETIME_TRUNC, EXTRACT, PARSE_DATETIME, SAFE.PARSE_DATETIME.
  • פונקציות שקשורות לזמן
    • TIME, TIME_ADD, TIME_SUB, TIME_DIFF, TIME_TRUNC, EXTRACT, FORMAT_TIME, PARSE_TIME, SAFE.PARSE_TIME.
  • פונקציות של חותמות זמן
    • TIMESTAMP, TIMESTAMP_ADD, TIMESTAMP_SUB, TIMESTAMP_DIFF, TIMESTAMP_TRUNC, FORMAT_TIMESTAMP, PARSE_TIMESTAMP, SAFE.PARSE_TIMESTAMP, TIMESTAMP_MICROS, TIMESTAMP_MILLIS, TIMESTAMP_SECONDS, EXTRACT, STRING, UNIX_MICROS, UNIX_MILLIS, UNIX_SECONDS.
  • פונקציות לעיבוד מקדים ידני
    • ML.IMPUTER, ML.HASH_BUCKETIZE, ML.LABEL_ENCODER, ML.MULTI_HOT_ENCODER, ML.NGRAMS, ML.ONE_HOT_ENCODER, ML.BUCKETIZE, ML.MAX_ABS_SCALER, ML.MIN_MAX_SCALER, ML.NORMALIZER, ML.QUANTILE_BUCKETIZE, ML.ROBUST_SCALER, ML.STANDARD_SCALER.

מגבלות

כשמייצאים מודלים, חלות המגבלות הבאות:

  • ייצוא מודלים לא נתמך אם נעשה שימוש באחת מהתכונות הבאות במהלך האימון:

    • סוגי התכונות ARRAY, TIMESTAMP או GEOGRAPHY היו קיימים בנתוני הקלט.
  • מודלים שיוצאו מסוגי המודלים AUTOML_REGRESSOR ו-AUTOML_CLASSIFIER לא תומכים בפריסה של Vertex AI לחיזוי אונליין.

  • מגבלת הגודל של המודל היא 1GB לייצוא של מודל פירוק מטריצות. גודל המודל פרופורציונלי בערך ל-num_factors, כך שאם תגיעו למגבלה, תוכלו להקטין את num_factors במהלך האימון כדי להקטין את גודל המודל.

  • לגבי מודלים שאומנו באמצעות סעיף BigQuery ML TRANSFORM לעיבוד מקדים ידני של תכונות, אפשר לעיין בסוגי הנתונים ובפונקציות שנתמכים בייצוא.

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

  • במהלך ייצוא המודל, יש תמיכה ב-ARRAY<STRUCT<INT64, FLOAT64>>, ARRAY וב-TIMESTAMP כנתונים שעברו טרנספורמציה מראש, אבל אין תמיכה בהם כנתונים שעברו טרנספורמציה אחרי הייצוא.

ייצוא מודלים של BigQuery ML

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

המסוף

  1. פותחים את הדף BigQuery במסוף Google Cloud .

    לדף BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

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

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets (מערכי נתונים) ואז לוחצים על מערך הנתונים.

  4. לוחצים על סקירה כללית > מודלים ואז על שם המודל שרוצים לייצא.

  5. לוחצים על עוד > ייצוא:

    ייצוא מודל

  6. בתיבת הדו-שיח Export model to Google Cloud Storage:

    • בקטע Select GCS location (בחירת מיקום ב-GCS), מחפשים את המיקום של ה-bucket או התיקייה שאליהם רוצים לייצא את המודל ולוחצים על Select (בחירה).
    • לוחצים על שליחה כדי לייצא את המודל.

כדי לבדוק את התקדמות העבודה, בחלונית Explorer לוחצים על Job history ומחפשים עבודה מסוג EXTRACT.

SQL

ההצהרה EXPORT MODEL מאפשרת לייצא מודלים של BigQuery ML ל-Cloud Storage באמצעות תחביר של שאילתות GoogleSQL.

כדי לייצא מודל BigQuery ML במסוף Google Cloud באמצעות הצהרת EXPORT MODEL, פועלים לפי השלבים הבאים:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. לוחצים על Compose new query (כתיבת שאילתה חדשה).

  3. בשדה Query editor (עורך השאילתות), מקלידים את הצהרת EXPORT MODEL.

    השאילתה הבאה מייצאת מודל בשם myproject.mydataset.mymodel לקטגוריה של Cloud Storage עם URIgs://bucket/path/to/saved_model/.

     EXPORT MODEL `myproject.mydataset.mymodel`
     OPTIONS(URI = 'gs://bucket/path/to/saved_model/')
     

  4. לוחצים על Run. בסיום השאילתה, בחלונית Query results מופיע: Successfully exported model.

BQ

משתמשים בפקודה bq extract עם הדגל --model.

(אופציונלי) מציינים את הדגל --destination_format ובוחרים את הפורמט של המודל המיוצא. (אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום.

bq --location=location extract \
--destination_format format \
--model project_id:dataset.model \
gs://bucket/model_folder

כאשר:

  • location הוא השם של המיקום. הדגל --location הוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ ‎.bigqueryrc.
  • destination_format הוא הפורמט של המודל המיוצא: ‫ML_TF_SAVED_MODEL (ברירת מחדל) או ML_XGBOOST_BOOSTER.
  • project_id הוא מזהה הפרויקט.
  • dataset הוא השם של מערך נתוני המקור.
  • model הוא המודל שמייצאים.
  • bucket הוא השם של קטגוריית Cloud Storage שאליה מייצאים את הנתונים. מערך הנתונים ב-BigQuery והקטגוריה של Cloud Storage צריכים להיות באותו מיקום.
  • model_folder הוא שם התיקייה שבה ייכתבו קובצי המודל המיוצאים.

דוגמאות:

לדוגמה, הפקודה הבאה מייצאת את mydataset.mymodel בפורמט TensorFlow SavedModel לקטגוריה של Cloud Storage בשם mymodel_folder.

bq extract --model \
'mydataset.mymodel' \
gs://example-bucket/mymodel_folder

ערך ברירת המחדל של destination_format הוא ML_TF_SAVED_MODEL.

הפקודה הבאה מייצאת את mydataset.mymodel בפורמט XGBoost Booster לקטגוריה של Cloud Storage בשם mymodel_folder.

bq extract --model \
--destination_format ML_XGBOOST_BOOSTER \
'mydataset.mytable' \
gs://example-bucket/mymodel_folder

API

כדי לייצא מודל, יוצרים משימת extract ומאכלסים את הגדרות המשימה.

(אופציונלי) מציינים את המיקום במאפיין location בקטע jobReference של משאב המשרה.

  1. יוצרים משימת חילוץ שמפנה למודל BigQuery ML וליעד ב-Cloud Storage.

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

  3. המאפיין destination URI(s) צריך להיות מוגדר באופן מלא, בפורמט gs://bucket/model_folder.

  4. מגדירים את מאפיין configuration.extract.destinationFormat כדי לציין את פורמט היעד. לדוגמה, כדי לייצא מודל של עץ מחוזק, מגדירים את המאפיין הזה לערך ML_XGBOOST_BOOSTER.

  5. כדי לבדוק את סטטוס המשימה, מתקשרים אל jobs.get(job_id) עם המזהה של המשימה שהוחזר מהבקשה הראשונית.

    • אם התוצאה היא status.state = DONE, העבודה הושלמה בהצלחה.
    • אם המאפיין status.errorResult קיים, הבקשה נכשלה והאובייקט הזה יכלול מידע שמתאר מה השתבש.
    • אם status.errorResult לא מופיע, המשמעות היא שהעבודה הסתיימה בהצלחה, למרות שיכול להיות שהיו כמה שגיאות לא קריטיות. שגיאות לא קריטיות מפורטות במאפיין status.errors של אובייקט המשימה שמוחזר.

הערות לגבי ה-API:

  • מומלץ ליצור מזהה ייחודי ולהעביר אותו כ-jobReference.jobId כשמתקשרים אל jobs.insert כדי ליצור משימה. הגישה הזו עמידה יותר בפני כשלים ברשת, כי הלקוח יכול לבצע בדיקה או לנסות שוב באמצעות מזהה המשימה הידוע.

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

Java

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

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.ExtractJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.ModelId;

// Sample to extract model to GCS bucket
public class ExtractModel {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectName = "bigquery-public-data";
    String datasetName = "samples";
    String modelName = "model";
    String bucketName = "MY-BUCKET-NAME";
    String destinationUri = "gs://" + bucketName + "/path/to/file";
    extractModel(projectName, datasetName, modelName, destinationUri);
  }

  public static void extractModel(
      String projectName, String datasetName, String modelName, String destinationUri)
      throws InterruptedException {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      ModelId modelId = ModelId.of(projectName, datasetName, modelName);

      ExtractJobConfiguration extractConfig =
          ExtractJobConfiguration.newBuilder(modelId, destinationUri).build();

      Job job = bigquery.create(JobInfo.of(extractConfig));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to extract due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Model extract successful");
    } catch (BigQueryException ex) {
      System.out.println("Model extraction job was interrupted. \n" + ex.toString());
    }
  }
}

פריסת מודל

אפשר לפרוס את המודל המיוצא ב-Vertex AI וגם באופן מקומי. אם המשפט TRANSFORM של המודל מכיל פונקציות של תאריך, פונקציות של תאריך ושעה, פונקציות של שעה או פונקציות של חותמת זמן, צריך להשתמש בספריית bigquery-ml-utils בקונטיינר. החריג הוא אם מבצעים פריסה דרך Model Registry, שלא דורשת מודלים מיוצאים או קונטיינרים להצגת מודעות.

פריסה של Vertex AI

פורמט ייצוא המודל פריסה
‫TensorFlow SavedModel (מודלים שאינם AutoML) פריסת TensorFlow SavedModel. צריך ליצור את קובץ SavedModel באמצעות גרסה נתמכת של TensorFlow.
‫TensorFlow SavedModel (מודלים של AutoML) לא נתמך.
XGBoost Booster משתמשים בשגרה מותאמת אישית של תחזיות. במודלים של XGBoost Booster, מידע על עיבוד מקדים ועיבוד שלאחר מכן נשמר בקבצים המיוצאים, ושגרת חיזוי בהתאמה אישית מאפשרת לכם לפרוס את המודל עם הקבצים המיוצאים הנוספים.

צריך ליצור את קובצי המודל באמצעות גרסה נתמכת של XGBoost.

פריסה מקומית

פורמט ייצוא המודל פריסה
‫TensorFlow SavedModel (מודלים שאינם AutoML) ‫SavedModel הוא פורמט סטנדרטי, ואפשר לפרוס אותם בקונטיינר Docker של TensorFlow Serving.

אפשר גם להשתמש בהרצה מקומית של חיזוי אונליין ב-Vertex AI.
‫TensorFlow SavedModel (מודלים של AutoML) העברת המודל לקונטיינר והרצת המודל.
XGBoost Booster כדי להריץ מודלים של XGBoost Booster באופן מקומי, אפשר להשתמש בקובץ main.py המיוצא:
  1. הורדת כל הקבצים מ-Cloud Storage לספרייה המקומית.
  2. מבטלים את דחיסת הקובץ predictor.py מ-xgboost_predictor-0.1.tar.gz לספרייה המקומית.
  3. מריצים את main.py (ההוראות מופיעות בmain.py).

פורמט הפלט של התחזית

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

AUTOENCODER

פורמט הפלט של התחזית פלט לדוגמה
+------------------------+------------------------+------------------------+
|      LATENT_COL_1      |      LATENT_COL_2      |           ...          |
+------------------------+------------------------+------------------------+
|       [FLOAT]          |         [FLOAT]        |           ...          |
+------------------------+------------------------+------------------------+
        
+------------------+------------------+------------------+------------------+
|   LATENT_COL_1   |   LATENT_COL_2   |   LATENT_COL_3   |   LATENT_COL_4   |
+------------------------+------------+------------------+------------------+
|    0.21384512    |    0.93457112    |    0.64978097    |    0.00480489    |
+------------------+------------------+------------------+------------------+
        

AUTOML_CLASSIFIER

פורמט הפלט של התחזית פלט לדוגמה
+------------------------------------------+
| predictions                              |
+------------------------------------------+
| [{"scores":[FLOAT], "classes":[STRING]}] |
+------------------------------------------+
        
+---------------------------------------------+
| predictions                                 |
+---------------------------------------------+
| [{"scores":[1, 2], "classes":['a', 'b']},   |
|  {"scores":[3, 0.2], "classes":['a', 'b']}] |
+---------------------------------------------+
        

AUTOML_REGRESSOR

פורמט הפלט של התחזית פלט לדוגמה
+-----------------+
| predictions     |
+-----------------+
| [FLOAT]         |
+-----------------+
        
+-----------------+
| predictions     |
+-----------------+
| [1.8, 2.46]     |
+-----------------+
        

‫BOOSTED_TREE_CLASSIFIER ו-RANDOM_FOREST_CLASSIFIER

פורמט הפלט של התחזית פלט לדוגמה
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [FLOAT]     | [STRING]     | STRING          |
+-------------+--------------+-----------------+
        
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [0.1, 0.9]  | ['a', 'b']   | ['b']           |
+-------------+--------------+-----------------+
| [0.8, 0.2]  | ['a', 'b']   | ['a']           |
+-------------+--------------+-----------------+
        

‫BOOSTED_TREE_REGRESSOR ו-RANDOM_FOREST_REGRESSOR

פורמט הפלט של התחזית פלט לדוגמה
+-----------------+
| predicted_label |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| predicted_label |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

DNN_CLASSIFIER

פורמט הפלט של התחזית פלט לדוגמה
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [INT64]       | [STRING]    | INT64     | STRING  | FLOAT                  | [FLOAT]| [FLOAT]       |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.36]                 | [-0.53]| [0.64, 0.36]  |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.2]                  | [-1.38]| [0.8, 0.2]    |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        

DNN_REGRESSOR

פורמט הפלט של התחזית פלט לדוגמה
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

DNN_LINEAR_COMBINED_CLASSIFIER

פורמט הפלט של התחזית פלט לדוגמה
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [INT64]       | [STRING]    | INT64     | STRING  | FLOAT                  | [FLOAT]| [FLOAT]       |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.36]                 | [-0.53]| [0.64, 0.36]  |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.2]                  | [-1.38]| [0.8, 0.2]    |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        

DNN_LINEAR_COMBINED_REGRESSOR

פורמט הפלט של התחזית פלט לדוגמה
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

KMEANS

פורמט הפלט של התחזית פלט לדוגמה
+--------------------+--------------+---------------------+
| CENTROID_DISTANCES | CENTROID_IDS | NEAREST_CENTROID_ID |
+--------------------+--------------+---------------------+
| [FLOAT]            | [INT64]      | INT64               |
+--------------------+--------------+---------------------+
        
+--------------------+--------------+---------------------+
| CENTROID_DISTANCES | CENTROID_IDS | NEAREST_CENTROID_ID |
+--------------------+--------------+---------------------+
| [1.2, 1.3]         | [1, 2]       | [1]                 |
+--------------------+--------------+---------------------+
| [0.4, 0.1]         | [1, 2]       | [2]                 |
+--------------------+--------------+---------------------+
        

LINEAR_REG

פורמט הפלט של התחזית פלט לדוגמה
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
       

LOGISTIC_REG

פורמט הפלט של התחזית פלט לדוגמה
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [FLOAT]     | [STRING]     | STRING          |
+-------------+--------------+-----------------+
        
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [0.1, 0.9]  | ['a', 'b']   | ['b']           |
+-------------+--------------+-----------------+
| [0.8, 0.2]  | ['a', 'b']   | ['a']           |
+-------------+--------------+-----------------+
        

MATRIX_FACTORIZATION

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

פורמט הפלט של התחזית פלט לדוגמה
+--------------------+--------------+
| PREDICTED_RATING | PREDICTED_ITEM |
+------------------+----------------+
| [FLOAT]          | [STRING]       |
+------------------+----------------+
        
+--------------------+--------------+
| PREDICTED_RATING | PREDICTED_ITEM |
+------------------+----------------+
| [5.5, 1.7]       | ['A', 'B']     |
+------------------+----------------+
| [7.2, 2.7]       | ['B', 'A']     |
+------------------+----------------+
        

‫TENSORFLOW (מיובא)

פורמט הפלט של התחזית
זהה למודל המיובא

PCA

פורמט הפלט של התחזית פלט לדוגמה
+-------------------------+---------------------------------+
| PRINCIPAL_COMPONENT_IDS | PRINCIPAL_COMPONENT_PROJECTIONS |
+-------------------------+---------------------------------+
|       [INT64]           |             [FLOAT]             |
+-------------------------+---------------------------------+
        
+-------------------------+---------------------------------+
| PRINCIPAL_COMPONENT_IDS | PRINCIPAL_COMPONENT_PROJECTIONS |
+-------------------------+---------------------------------+
|       [1, 2]            |             [1.2, 5.0]          |
+-------------------------+---------------------------------+
        

TRANSFORM_ONLY

פורמט הפלט של התחזית
זהה לעמודות שצוינו בסעיף TRANSFORM של המודל

הדמיה של מודל XGBoost

אחרי ייצוא המודל, אפשר ליצור תרשים להמחשה של העצים המחוזקים באמצעות plot_tree API בשפת Python. לדוגמה, אפשר להשתמש ב-Colab בלי להתקין את יחסי התלות:

  1. ייצוא של מודל עץ מחוזק לקטגוריה של Cloud Storage.
  2. מורידים את הקובץ model.bst מקטגוריה של Cloud Storage.
  3. ב-Colab notebook, מעלים את הקובץ model.bst אל Files.
  4. מריצים את הקוד הבא ב-notebook:

    import xgboost as xgb
    import matplotlib.pyplot as plt
    
    model = xgb.Booster(model_file="model.bst")
    num_iterations = <iteration_number>
    for tree_num in range(num_iterations):
      xgb.plot_tree(model, num_trees=tree_num)
    plt.show
    

בדוגמה הזו מוצגים כמה עצים (עץ אחד לכל איטרציה):

ייצוא מודל

אנחנו לא שומרים את שמות התכונות במודל, ולכן יוצגו שמות כמו f0,‏ f1 וכן הלאה. אפשר למצוא את שמות התכונות המתאימים בקובץ המיוצא assets/model_metadata.json באמצעות השמות האלה (למשל f0) בתור אינדקסים.

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

כדי לייצא מודל BigQuery ML ל-Cloud Storage, צריך הרשאות גישה למודל BigQuery ML, הרשאות להפעלת עבודת חילוץ והרשאות לכתיבת הנתונים לקטגוריה של Cloud Storage.

הרשאות ב-BigQuery

  • כדי לייצא מודל, אתם צריכים לקבל לפחות הרשאות bigquery.models.export. התפקידים המוגדרים מראש הבאים בניהול הזהויות והרשאות הגישה (IAM) מקבלים את ההרשאות bigquery.models.export:

    • bigquery.dataViewer
    • bigquery.dataOwner
    • bigquery.dataEditor
    • bigquery.admin
  • כדי להריץ עבודת ייצוא, אתם צריכים לפחות הרשאות bigquery.jobs.create. התפקידים המוגדרים מראש הבאים ב-IAM מקבלים את ההרשאות bigquery.jobs.create:

    • bigquery.user
    • bigquery.jobUser
    • bigquery.admin

הרשאות ב-Cloud Storage

  • כדי לכתוב את הנתונים לקטגוריית Cloud Storage קיימת, צריך לקבל הרשאות storage.objects.create. התפקידים המוגדרים מראש הבאים ב-IAM מקבלים את ההרשאות storage.objects.create:

    • storage.objectCreator
    • storage.objectAdmin
    • storage.admin

במאמר בקרת גישה יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery ML.

העברת נתונים ב-BigQuery בין מיקומים

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

מדיניות בנושא מכסה

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

תמחור

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

אחרי ייצוא הנתונים, תחויבו על אחסון הנתונים ב-Cloud Storage. מידע נוסף על התמחור של Cloud Storage מופיע בדף התמחור של Cloud Storage.

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