יצירת תחזיות באמצעות מודלים מיובאים של TensorFlow

במדריך הזה תייבאו מודלים של TensorFlow למערך נתונים של BigQuery ML. לאחר מכן, משתמשים בשאילתת SQL כדי ליצור תחזיות מהמודלים המיובאים.

מטרות

  • משתמשים בהצהרה CREATE MODEL כדי לייבא מודלים של TensorFlow ל-BigQuery ML.
  • משתמשים בפונקציה ML.PREDICT כדי ליצור חיזויים באמצעות המודלים המיובאים של TensorFlow.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  3. צריך לוודא ש-BigQuery API מופעל.

    הפעלת ה-API

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

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

אם אתם יוצרים פרויקט חדש, אתם ה-Project Owner של הפרויקט ומוענקות לכם כל ההרשאות הנדרשות ב-Identity and Access Management (IAM) כדי להשלים את המדריך הזה.

אם אתם משתמשים בפרויקט קיים, התפקיד אדמין של BigQuery Studio (roles/bigquery.studioAdmin) נותן את כל ההרשאות שצריך כדי להשלים את המדריך הזה.

מוודאים שיש לכם את התפקיד או התפקידים הבאים בפרויקט: אדמין ב-BigQuery Studio (roles/bigquery.studioAdmin).

בדיקת התפקידים

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

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

  4. בכל השורות שבהן אתם מופיעים, בודקים בעמודה Role אם רשימת התפקידים כוללת את התפקידים הנדרשים.

מתן התפקידים

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

    כניסה לדף IAM
  2. בוחרים את הפרויקט.
  3. לוחצים על Grant access.
  4. בשדה New principals, מזינים את מזהה המשתמש. ‫ בדרך כלל זה המזהה של משתמש במאגר זהויות של כוח עבודה. למידע נוסף, קראו את המאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM או פנו לאדמין שלכם.

  5. לוחצים על Select a role ומחפשים את התפקיד.
  6. כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
  7. לוחצים על Save.

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

יצירת קבוצת נתונים

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

המסוף

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

    כניסה ל-BigQuery

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

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

    אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.

  3. ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.

  4. בדף Datasets, לוחצים על Create dataset.

  5. בחלונית Create dataset:

    • בשדה Dataset ID, מזינים bqml_tutorial.

    • בקטע Data location (מיקום הנתונים), בוחרים באפשרות US (ארה"ב).

    משאירים את שאר הגדרות ברירת המחדל כמו שהן.

  6. לוחצים על Create dataset.

BQ

כדי ליצור קבוצת נתונים חדשה, משתמשים בפקודה bq mk --dataset.

  1. יוצרים מערך נתונים בשם bqml_tutorial ומגדירים את מיקום הנתונים ל-US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. מוודאים שמערך הנתונים נוצר:

    bq ls

API

מפעילים את השיטה datasets.insert עם משאב של מערך נתונים מוגדר:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

ייבוא מודל TensorFlow

כך מייבאים מודל מ-Cloud Storage: הנתיב למודל הוא gs://cloud-training-demos/txtclass/export/exporter/1549825580/*. שם המודל המיובא הוא imported_tf_model.

שימו לב שה-URI של Cloud Storage מסתיים בתו כללי לחיפוש (*). התו הזה מציין ש-BigQuery ML צריך לייבא את כל הנכסים שמשויכים למודל.

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

כדי לייבא את המודל של TensorFlow למערך הנתונים, פועלים לפי השלבים הבאים.

המסוף

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

    כניסה לדף BigQuery

  2. בקטע Create new, לוחצים על שאילתת SQL.

  3. בעורך השאילתות, מזינים את ההצהרה CREATE MODEL ולוחצים על Run.

      CREATE OR REPLACE MODEL `bqml_tutorial.imported_tf_model`
      OPTIONS (MODEL_TYPE='TENSORFLOW',
        MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')

    בסיום הפעולה, אמורה להופיע הודעה כמו Successfully created model named imported_tf_model.

  4. המודל החדש מופיע בחלונית משאבים. המודלים מסומנים בסמל המודל: סמל
המודל.

  5. אם בוחרים את המודל החדש בחלונית Resources, המידע על המודל מופיע מתחת ל-עורך השאילתות.

    פרטי המודל של TensorFlow

BQ

  1. מייבאים את המודל של TensorFlow מ-Cloud Storage באמצעות הזנת ההצהרה הבאה של CREATE MODEL.

    bq query --use_legacy_sql=false \
    "CREATE OR REPLACE MODEL
      `bqml_tutorial.imported_tf_model`
    OPTIONS
      (MODEL_TYPE='TENSORFLOW',
        MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
  2. אחרי שמייבאים את המודל, מוודאים שהוא מופיע במערך הנתונים.

    bq ls -m bqml_tutorial

    הפלט אמור להיראות כך:

    tableId             Type
    ------------------- -------
    imported_tf_model   MODEL

API

מוסיפים משימה חדשה ומאכלסים את המאפיין jobs#configuration.query בגוף הבקשה.

{
  "query": "CREATE MODEL `PROJECT_ID:bqml_tutorial.imported_tf_model` OPTIONS(MODEL_TYPE='TENSORFLOW' MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
}

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

BigQuery DataFrames

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

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

יוצרים את המודל באמצעות הפונקציה bigframes.bigquery.ml.create_model.

import bigframes
import bigframes.pandas as bpd
from bigframes.bigquery import ml

bigframes.options.bigquery.project = PROJECT_ID
# You can change the location to one of the valid locations: https://cloud.google.com/bigquery/docs/locations#supported_locations
bigframes.options.bigquery.location = "US"

# Set partial ordering mode for BigQuery DataFrames.
# For more information, see the BigQuery DataFrames performance documentation:
# https://cloud.google.com/bigquery/docs/dataframes-performance#partial-ordering-mode
bpd.options.bigquery.ordering_mode = "partial"

# Use ml.create_model to create and import the model in BigQuery.
# The options parameter specifies the model type and the Cloud Storage path.
# For more information, see the BigQuery DataFrames API reference documentation:
# https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ml.create_model.html#bigframes.bigquery.ml.create_model
ml.create_model(
    your_model_id,  # For example: "bqml_tutorial.imported_tf_model"
    options={
        "model_type": "TENSORFLOW",
        "model_path": "gs://cloud-training-demos/txtclass/export/exporter/1549825580/*",
    },
    replace=True,
)

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

יצירת חיזויים באמצעות מודל TensorFlow המיובא

אחרי שמייבאים את המודל של TensorFlow, משתמשים בפונקציה ML.PREDICT כדי ליצור תחזיות באמצעות המודל.

השאילתה הבאה משתמשת ב-imported_tf_model כדי ליצור חיזויים באמצעות נתוני קלט מהטבלה full במערך הנתונים הציבורי hacker_news. בשאילתה, הפונקציה serving_input_fn של מודל TensorFlow מציינת שהמודל מצפה למחרוזת קלט אחת בשם input. שאילתת המשנה מקצה את השם החלופי input לעמודה title בהצהרת ה-SELECT של שאילתת המשנה.

כדי ליצור חיזויים באמצעות מודל TensorFlow המיובא, מבצעים את השלבים הבאים.

המסוף

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

    כניסה לדף BigQuery

  2. בקטע Create new, לוחצים על שאילתת SQL.

  3. בעורך השאילתות, מזינים את השאילתה הזו שמשתמשת בפונקציה ML.PREDICT.

    SELECT *
      FROM ML.PREDICT(MODEL `bqml_tutorial.imported_tf_model`,
        (
         SELECT title AS input
         FROM bigquery-public-data.hacker_news.full
        )
    )

    תוצאות השאילתה אמורות להיראות כך:

    תוצאות השאילתה

BQ

מזינים את הפקודה הזו כדי להריץ את השאילתה שמשתמשת ב-ML.PREDICT.

bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
  MODEL `bqml_tutorial.imported_tf_model`,
  (SELECT title AS input FROM `bigquery-public-data.hacker_news.full`))'

התוצאות אמורות להיראות כך:

+------------------------------------------------------------------------+----------------------------------------------------------------------------------+
|                               dense_1                                  |                                       input                                      |
+------------------------------------------------------------------------+----------------------------------------------------------------------------------+
|   ["0.6251608729362488","0.2989124357700348","0.07592673599720001"]    | How Red Hat Decides Which Open Source Companies t...                             |
|   ["0.014276246540248394","0.972910463809967","0.01281337533146143"]   | Ask HN: Toronto/GTA mastermind around side income for big corp. dev?             |
|   ["0.9821603298187256","1.8601855117594823E-5","0.01782100833952427"] | Ask HN: What are good resources on strategy and decision making for your career? |
|   ["0.8611106276512146","0.06648492068052292","0.07240450382232666"]   | Forget about promises, use harvests                                              |
+------------------------------------------------------------------------+----------------------------------------------------------------------------------+

API

מוסיפים משימה חדשה ומאכלסים את המאפיין jobs#configuration.query כמו בגוף הבקשה. מחליפים את project_id בשם הפרויקט.

{
  "query": "SELECT * FROM ML.PREDICT(MODEL `project_id.bqml_tutorial.imported_tf_model`, (SELECT * FROM input_data))"
}

BigQuery DataFrames

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

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

משתמשים בפונקציה bigframes.bigquery.ml.predict כדי להריץ את המודל של TensorFlow:

import bigframes.pandas as bpd
from bigframes.bigquery import ml

# Set partial ordering mode for BigQuery DataFrames.
# For more information, see the BigQuery DataFrames performance documentation:
# https://cloud.google.com/bigquery/docs/dataframes-performance#partial-ordering-mode
bpd.options.bigquery.ordering_mode = "partial"

df = bpd.read_gbq("bigquery-public-data.hacker_news.full")
df_pred = df.rename(columns={"title": "input"})

# Use the ml.predict method to predict results using your model.
# For more information, see the BigQuery DataFrames API reference documentation:
# https://dataframes.bigquery.dev/reference/api/bigframes.bigquery.ml.predict.html#bigframes.bigquery.ml.predict
predictions = ml.predict(
    your_model_id,  # For example: "bqml_tutorial.imported_tf_model"
    input_=df_pred,
)
predictions.peek(5)

התוצאות אמורות להיראות כך:

המחשת התוצאה

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

הסרת המשאבים

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

מחיקת הפרויקט

המסוף

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

gcloud

    כדי למחוק פרויקט ב- Google Cloud :

    gcloud projects delete PROJECT_ID

מחיקת משאבים ספציפיים

לחלופין, אפשר להסיר את המשאבים הספציפיים שבהם השתמשתם במדריך הזה:

  1. מוחקים את המודל המיובא.

  2. אופציונלי: מוחקים את מערך הנתונים.

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