Open Neural Network Exchange (ONNX) מספק פורמט אחיד שנועד לייצג כל מסגרת של למידת מכונה. התמיכה של BigQuery ML ב-ONNX מאפשרת לכם:
- אימון מודל באמצעות המסגרת המועדפת.
- ממירים את המודל לפורמט של מודל ONNX.
- מייבאים את מודל ONNX ל-BigQuery ומבצעים חיזויים באמצעות BigQuery ML.
במדריך הזה מוסבר איך לייבא מודלים של ONNX שאומנו באמצעות PyTorch למערך נתונים ב-BigQuery, ואיך להשתמש בהם כדי ליצור תחזיות משאילתת SQL.
מטרות
- ייבוא מודל שעבר אימון מראש באמצעות PyTorch.
- ממירים את המודל לפורמט ONNX באמצעות torch.onnx.
- משתמשים בהצהרה
CREATE MODELכדי לייבא את מודל ONNX ל-BigQuery. - משתמשים בפונקציה
ML.PREDICTכדי ליצור תחזיות באמצעות מודל ONNX המיובא.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
מפעילים את ממשקי ה-API של BigQuery, של BigQuery Connection ושל Cloud Storage, אם הם עדיין לא מופעלים.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים- חשוב לוודא שיש לכם את ההרשאות הנדרשות לביצוע המשימות שמתוארות במאמר הזה.
התפקידים הנדרשים
אם תיצרו פרויקט חדש, אתם תהיו בעלי הפרויקט ותקבלו את כל ההרשאות הנדרשות לניהול זהויות והרשאות גישה (IAM) כדי להשלים את המדריך הזה.
אם אתם משתמשים בפרויקט קיים, מבצעים את הפעולות הבאות.
צריך לוודא שיש לכם בפרויקט את התפקיד או התפקידים הבאים:
- אדמין של BigQuery Studio (
roles/bigquery.studioAdmin) - אדמין של BigQuery Connection (
roles/bigquery.connectionAdmin) - אדמין באחסון
(roles/storage.admin)
בדיקת התפקידים
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הפרויקט.
-
בעמודה Principal, מחפשים את כל השורות שמזהות אתכם או קבוצה שאתם נכללים בה. כדי לברר באילו קבוצות אתם נכללים, פנו לאדמין.
- בודקים את העמודה Role בכל השורות שבהן מצוין או מופיע השם שלכם, כדי לראות אם רשימת התפקידים כוללת את התפקידים הנדרשים.
מתן התפקידים
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הפרויקט.
- לוחצים על Grant access.
-
בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל מזהה המשתמש הוא כתובת האימייל של חשבון Google.
- לוחצים על Select a role ומחפשים את התפקיד.
- כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
- לוחצים על Save.
מידע נוסף על הרשאות IAM ב-BigQuery זמין במאמר הרשאות IAM.
אופציונלי: אימון מודל והמרה שלו לפורמט ONNX
בדוגמאות הקוד הבאות אפשר לראות איך לייבא מודל סיווג שאומן מראש ל-PyTorch ואיך להמיר את המודל שמתקבל לפורמט ONNX. במדריך הזה נשתמש במודל לדוגמה מוכן מראש שמאוחסן בכתובת gs://cloud-samples-data/bigquery/ml/onnx/resnet18.onnx. אם אתם משתמשים במודל לדוגמה, אתם לא צריכים לבצע את השלבים האלה.
יצירת מודל ראייה של PyTorch לסיווג תמונות
אפשר להשתמש בדוגמת הקוד הבאה כדי לייבא מודל resnet18 שאומן מראש ב-PyTorch ומקבל נתוני תמונה מפוענחים שמוחזרים על ידי הפונקציות ML.DECODE_IMAGE ו-ML.RESIZE_IMAGE של BigQuery ML.
import torch
import torch.nn as nn
# Define model input format to match the output format of
# ML.DECODE_IMAGE function: [height, width, channels]
dummy_input = torch.randn(1, 224, 224, 3, device="cpu")
# Load a pretrained pytorch model for image classification
model = torch.hub.load('pytorch/vision:v0.10.0', 'resnet18', pretrained=True)
# Reshape input format from [batch_size, height, width, channels]
# to [batch_size, channels, height, width]
class ReshapeLayer(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
x = x.permute(0, 3, 1, 2) # reorder dimensions
return x
class ArgMaxLayer(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
return torch.argmax(x, dim=1)
final_model = nn.Sequential(
ReshapeLayer(),
model,
nn.Softmax(),
ArgMaxLayer()
)
המרת המודל לפורמט ONNX
כדי לייצא את מודל הראייה של PyTorch באמצעות torch.onnx, משתמשים בדוגמה הבאה. קובץ ה-ONNX המיוצא נקרא resnet18.onnx.
torch.onnx.export(final_model, # model being run
dummy_input, # model input
"resnet18.onnx", # where to save the model
opset_version=10, # the ONNX version to export the model to
input_names = ['input'], # the model's input names
output_names = ['class_label']) # the model's output names
העלאת מודל ONNX ל-Cloud Storage
אחרי ששומרים את המודל, מבצעים את הפעולות הבאות:
יצירת מערך נתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בסייר, מרחיבים את הפרויקט ואז לוחצים על מערכי נתונים.
בדף Datasets (מערכי נתונים), לוחצים על Create dataset (יצירת מערך נתונים).
בחלונית Create dataset:
בשדה Dataset ID (מזהה קבוצת נתונים), מזינים
bqml_tutorial.בקטע Data location, בוחרים באפשרות US.
משאירים את שאר הגדרות ברירת המחדל כמו שהן.
לוחצים על יצירת מערך נתונים.
BQ
כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.
יוצרים מערך נתונים בשם
bqml_tutorialעם מיקום הנתונים שמוגדר ל-US:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
בודקים שמערך הנתונים נוצר:
bq ls
API
מפעילים את השיטה datasets.insert עם משאב מוגדר של מערך נתונים:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
ייבוא מודל ONNX ל-BigQuery
בשלבים הבאים מוסבר איך לייבא את מודל ONNX לדוגמה מ-Cloud Storage למערך הנתונים באמצעות הצהרת CREATE MODEL.
המסוף
במסוף Google Cloud , עוברים לדף BigQuery Studio.
בעורך השאילתות, מזינים את הצהרת
CREATE MODELהבאה.CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')
מחליפים את
BUCKET_PATHבנתיב של המודל שהעליתם ל-Cloud Storage. אם אתם משתמשים במודל לדוגמה, מחליפים אתBUCKET_PATHבערך הבא:gs://cloud-samples-data/bigquery/ml/onnx/resnet18.onnx.בסיום הפעולה, תופיע הודעה דומה לזו:
Successfully created model named imported_onnx_model.המודל החדש יופיע בחלונית משאבים. מודלים מסומנים בסמל המודל:
אם בוחרים את המודל החדש בחלונית Resources, פרטים על המודל מופיעים לצד עורך השאילתות.
BQ
מייבאים את מודל ONNX מ-Cloud Storage על ידי הזנת ההצהרה הבאה
CREATE MODEL.bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')"
מחליפים את
BUCKET_PATHבנתיב של המודל שהעליתם ל-Cloud Storage. אם אתם משתמשים במודל לדוגמה, מחליפים אתBUCKET_PATHבערך הזה:gs://cloud-samples-data/bigquery/ml/onnx/resnet18.onnx.אחרי שמייבאים את המודל, מוודאים שהוא מופיע במערך הנתונים.
bq ls -m bqml_tutorial
הפלט אמור להיראות כך:
tableId Type --------------------- ------- imported_onnx_model MODEL
למידע נוסף על ייבוא מודלים של ONNX ל-BigQuery, כולל דרישות הפורמט והאחסון, אפשר לעיין במאמר בנושא הצהרת CREATE MODEL לייבוא מודלים של ONNX.
יצירת טבלת אובייקטים ב-BigQuery לניתוח נתוני תמונות
טבלת אובייקטים היא טבלה לקריאה בלבד של אובייקטים של נתונים לא מובְנים שנמצאים ב-Cloud Storage. טבלאות אובייקטים מאפשרות לכם לנתח נתונים לא מובְנים מ-BigQuery.
במדריך הזה משתמשים בפונקציה ML.PREDICT כדי להפיק את תווית הסיווג החזויה של תמונת קלט שמאוחסנת בקטגוריה של Cloud Storage.
כדי ליצור את טבלת האובייקטים, צריך לבצע את הפעולות הבאות:
- תיצור קטגוריה של Cloud Storage ותעלה אליה תמונה של דג זהב.
- יוצרים קישור למשאבים ב-Cloud שמשמש לגישה לטבלת האובייקטים.
- מעניקים גישה לחשבון השירות של חיבור המשאב.
יצירת קטגוריה והעלאת תמונה
כדי ליצור קטגוריה של Cloud Storage ולהעלות תמונה של דג זהב:
המסוף
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
לוחצים על יצירה.
ממלאים את פרטי הקטגוריה בדף Create a bucket.
בקטע Get started (תחילת העבודה), מבצעים את הפעולות הבאות:
בתיבה, מזינים
bqml_images.לוחצים על Continue.
בקטע Choose where to store your data, מבצעים את הפעולות הבאות:
בקטע Location type, בוחרים באפשרות Multi-region.
בתפריט של סוג המיקום, בוחרים באפשרות ארה"ב (מספר אזורים בארצות הברית).
לוחצים על Continue.
בקטע Choose a storage class for your data:
בוחרים באפשרות הגדרת סיווג ברירת מחדל.
בוחרים באפשרות רגילה.
לוחצים על Continue.
בקטעים הנותרים, משאירים את ערכי ברירת המחדל.
לוחצים על יצירה.
שורת הפקודה
מזינים את הפקודה gcloud storage buckets create הבאה:
gcloud storage buckets create gs://bqml_images --location=us
אם הבקשה מבוצעת בהצלחה, הפקודה תחזיר את ההודעה הבאה:
Creating gs://bqml_images/...
העלאת תמונה לקטגוריה של Cloud Storage
אחרי שיוצרים את הקטגוריה, מורידים תמונה של דג זהב ומעלים אותה לקטגוריה של Cloud Storage.
כדי להעלות את התמונה:
המסוף
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
ברשימת הקטגוריות, לוחצים על
bqml_images.בכרטיסייה Objects של הקטגוריה, מבצעים אחת מהפעולות הבאות:
גוררים את הקובץ משולחן העבודה או ממנהל הקבצים ומשחררים אותו בחלונית הראשית של Google Cloud המסוף.
לוחצים על העלאה > העלאת קבצים, בוחרים את קובץ התמונה שרוצים להעלות בתיבת הדו-שיח שמופיעה ולוחצים על פתיחה.
שורת הפקודה
מזינים את הפקודה gcloud storage cp הבאה:
gcloud storage cp OBJECT_LOCATION gs://bqml_images/IMAGE_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
OBJECT_LOCATION: הנתיב המקומי לקובץ התמונה. לדוגמה,Desktop/goldfish.jpg. -
IMAGE_NAME: שם התמונה. לדוגמה,goldfish.jpg.
אם הפעולה בוצעה בהצלחה, התגובה תהיה דומה לדוגמה הבאה:
Completed files 1/1 | 164.3kiB/164.3kiB
יצירת קישור למשאבים ב-Cloud ב-BigQuery
כדי להתחבר לטבלת האובייקטים שתיצרו בהמשך המדריך הזה, צריך קישור למשאבים ב-Cloud.
חיבורים למשאבי ענן מאפשרים לשלוח שאילתות לנתונים שמאוחסנים מחוץ ל-BigQuery ב Google Cloud שירותים כמו Cloud Storage או Spanner, או במקורות של צד שלישי כמו AWS או Azure. החיבורים החיצוניים האלה משתמשים ב-BigQuery Connection API.
כדי ליצור את הקישור למשאבים ב-Cloud:
המסוף
עוברים לדף BigQuery Studio.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, לוחצים על Add data.
תיבת הדו-שיח הוספת נתונים תיפתח.
בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Databases.
אפשרות אחרת היא להקליד
Vertex AIבשדה חיפוש מקורות נתונים.בקטע מקורות נתונים מומלצים, לוחצים על Vertex AI.
לוחצים על כרטיס הפתרון Vertex AI Models: BigQuery Federation.
ברשימה Connection type, בוחרים באפשרות Vertex AI remote models, remote functions and BigLake (Cloud Resource).
בשדה מזהה החיבור, מזינים את הערך
bqml_tutorial.מוודאים שהאפשרות Multi-region—US (מספר אזורים – ארה"ב) נבחרה.
לוחצים על יצירת קישור.
בתחתית החלון, לוחצים על מעבר לחיבור. אפשר גם ללחוץ על Connections בחלונית Explorer ואז על
us.bqml_tutorial.בחלונית פרטי החיבור, מעתיקים את המזהה של חשבון השירות. תצטרכו את המזהה הזה כשמגדירים הרשאות לחיבור. כשיוצרים משאב חיבור, BigQuery יוצר חשבון שירות ייחודי של המערכת ומקשר אותו לחיבור.
BQ
יצירת חיבור:
bq mk --connection --location=US --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE bqml_tutorial
מחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud . הפרמטר--project_idמבטל את ברירת המחדל של הפרויקט.כשיוצרים משאב חיבור, מערכת BigQuery יוצרת חשבון שירות ייחודי ומקשרת אותו לחיבור.
פתרון בעיות: אם מופיעה שגיאת החיבור הבאה, צריך לעדכן את Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
מאחזרים ומעתיקים את מזהה חשבון השירות כדי להשתמש בו בשלב מאוחר יותר:
bq show --connection PROJECT_ID.us.bqml_tutorial
הפלט אמור להיראות כך:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
הגדרת גישה לחיבור
מקצים לחשבון השירות של הקישור למשאבים ב-Cloud את התפקיד 'אדמין של אובייקט אחסון'. חייבים להקצות את התפקיד הזה באותו פרויקט שבו העליתם את קובצי התמונות.
כדי להקצות את התפקיד:
עוברים לדף IAM & Admin.
לוחצים על Grant Access.
בשדה New principals, מזינים את מזהה חשבון השירות של חיבור משאב Cloud שהעתקתם קודם.
בשדה Select a role, בוחרים באפשרות Cloud Storage ואז באפשרות Storage object admin.
לוחצים על Save.
יצירת טבלת האובייקטים
כדי ליצור טבלת אובייקטים בשם goldfish_image_table באמצעות תמונת הדג הזהב שהעליתם ל-Cloud Storage, מבצעים את השלבים הבאים.
המסוף
עוברים לדף BigQuery Studio.
בעורך השאילתות, מזינים את השאילתה הבאה כדי ליצור את טבלת האובייקטים.
CREATE EXTERNAL TABLE `bqml_tutorial.goldfish_image_table` WITH CONNECTION `us.bqml_tutorial` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bqml_images/IMAGE_NAME'], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC');
מחליפים את
IMAGE_NAMEבשם של קובץ האימג' – לדוגמה,goldfish.jpg.בסיום הפעולה, תופיע הודעה כמו
This statement created a new table named goldfish_image_table.
BQ
כדי ליצור את טבלת האובייקטים, מזינים את ההצהרה הבאה
CREATE EXTERNAL TABLEbq query --use_legacy_sql=false \ "CREATE EXTERNAL TABLE `bqml_tutorial.goldfish_image_table` WITH CONNECTION `us.bqml_tutorial` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bqml_images/IMAGE_NAME'], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC')"
מחליפים את
IMAGE_NAMEבשם של קובץ האימג' – לדוגמה,goldfish.jpg.אחרי שיוצרים את טבלת האובייקטים, מוודאים שהיא מופיעה במערך הנתונים.
bq ls bqml_tutorial
הפלט אמור להיראות כך:
tableId Type --------------------- -------- goldfish_image_table EXTERNAL
מידע נוסף זמין במאמר יצירת טבלאות אובייקטים.
ביצוע חיזויים באמצעות מודל ONNX מיובא
משתמשים בשאילתה הבאה שמכילה את הפונקציה ML.PREDICT כדי ליצור תחזיות מנתוני תמונות בטבלת אובייקטים של קלט goldfish_image_table. השאילתה הזו מחזירה את תווית הסיווג הצפויה של תמונת הקלט על סמך מילון תוויות ImageNet.
בשביל ש-ML.PREDICT יוכל לפרש את נתוני התמונה, צריך להשתמש בפונקציה ML.DECODE_IMAGE בשאילתה כדי לפענח את הנתונים. הפונקציה ML.RESIZE_IMAGE נקראת כדי לשנות את גודל התמונה כך שתתאים לגודל הקלט של המודל (224*224).
למידע נוסף על הפעלת הסקה בטבלאות של אובייקטים בתמונות, אפשר לעיין במאמר הפעלת הסקה בטבלאות של אובייקטים בתמונות.
כדי ליצור תחזיות מנתוני התמונות, פועלים לפי השלבים הבאים.
המסוף
עוברים לדף BigQuery Studio.
בעורך השאילתות, מזינים את השאילתה
ML.PREDICTהבאה.SELECT class_label FROM ML.PREDICT(MODEL
bqml_tutorial.imported_onnx_model, ( SELECT ML.RESIZE_IMAGE(ML.DECODE_IMAGE(DATA), 224, 224, FALSE) AS input FROM bqml_tutorial.goldfish_image_table))תוצאות השאילתה אמורות להיראות כך:
BQ
מזינים את הפקודה bq query הבאה:
bq query --use_legacy_sql=false \
'SELECT
class_label
FROM
ML.PREDICT(MODEL `bqml_tutorial.imported_onnx_model`,
(
SELECT
ML.RESIZE_IMAGE(ML.DECODE_IMAGE(DATA),
224,
224,
FALSE) AS input
FROM
bqml_tutorial.goldfish_image_table))'הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
המסוף
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
gcloud
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
מחיקת משאבים בודדים
לחלופין, כדי להסיר את המשאבים הספציפיים שבהם השתמשתם במדריך הזה:
המאמרים הבאים
- מידע נוסף על ייבוא של מודלים של ONNX זמין במאמר בנושא הצהרת
CREATE MODELלמודלים של ONNX. - מידע נוסף על ממירים זמינים ל-ONNX ומדריכים זמין במאמר המרת פורמט ל-ONNX.
- סקירה כללית על BigQuery ML זמינה במאמר מבוא ל-BigQuery ML.
- כדי להתחיל להשתמש ב-BigQuery ML, אפשר לעיין במאמר בנושא יצירת מודלים של למידת מכונה ב-BigQuery ML.