במדריך הזה נסביר איך לייצא מודל של BigQuery ML ואז לפרוס אותו ב-Agent Platform או במכונה מקומית. תשתמשו בטבלה iris ממערכי הנתונים שזמינים לכולם ב-BigQuery, ותעבדו על שלושת התרחישים הבאים מקצה לקצה:
- אימון ופריסה של מודל רגרסיה לוגיסטית – רלוונטי גם למודלים של מסווג DNN, רגרסור DNN, k-means, רגרסיה לינארית ופירוק לגורמים של מטריצה.
- אימון ופריסה של מודל מסווג של עצי החלטה משופרים – רלוונטי גם למודל רגרסיה של עצי החלטה משופרים.
- אימון ופריסה של מודל מסווג של AutoML – רלוונטי גם למודל רגרסיה של AutoML.
עלויות
במדריך הזה משתמשים ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:
- BigQuery ML
- Cloud Storage
- Agent Platform (אופציונלי, משמש לחיזוי אונליין)
כאן תוכלו לקרוא מידע נוסף על העלויות של BigQuery ML.
למידע נוסף על העלויות של Cloud Storage, קראו את דף התמחור של Cloud Storage.
מידע נוסף על העלויות של Agent Platform מופיע במאמר מודלים באימון בהתאמה אישית.
לפני שמתחילים
-
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.
-
Verify that billing is enabled for your Google Cloud project.
- BigQuery מופעל באופן אוטומטי בפרויקטים חדשים.
כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל
מפעילים את BigQuery API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים? -
מפעילים את AI Platform Training and Prediction API ואת Compute Engine API, אם הם עדיין לא מופעלים.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים? - מתקינים את Google Cloud CLI ואת Google Cloud CLI.
יצירת מערך הנתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים אחת מהאפשרויות הבאות:
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.
ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.
בדף Datasets, לוחצים על Create dataset.
בחלונית Create dataset:
בשדה Dataset ID, מזינים
bqml_tutorial.בקטע Data location (מיקום הנתונים), בוחרים באפשרות US (ארה"ב).
משאירים את שאר הגדרות ברירת המחדל כמו שהן.
לוחצים על Create dataset.
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" } }
אימון ופריסה של מודל רגרסיה לוגיסטית
בקטעים הבאים מוסבר איך לאמן ולפרוס מודל רגרסיה לוגיסטית.
אימון המודל
מאמנים מודל רגרסיה לוגיסטית שחוזה את סוג האירוס באמצעות ההצהרה CREATE MODEL ב-BigQuery ML. משימת האימון הזו אמורה להימשך כדקה.
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.iris_model` OPTIONS (model_type="logistic_reg", max_iterations=10, input_label_cols=["species"]) AS SELECT * FROM `bigquery-public-data.ml_datasets.iris`;'
ייצוא המודל
מייצאים את המודל לקטגוריה של Cloud Storage באמצעות כלי שורת הפקודה של BigQuery. במאמר ייצוא מודלים של BigQuery ML מפורטות דרכים נוספות לייצוא מודלים. השלמת משימת החילוץ אמורה להימשך פחות מדקה.
bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model
פריסה והצגה מקומית
אפשר לפרוס מודלים של TensorFlow שיוצאו באמצעות מאגר Docker של TensorFlow Serving. כדי לבצע את השלבים הבאים, צריך להתקין את Docker.
מורידים את קובצי המודל שיוצאו לספרייה זמנית.
mkdir tmp_dir
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive
יוצרים ספריית משנה של גרסה
בשלב הזה מגדירים מספר גרסה (1 במקרה הזה) למודל.
mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir
משיכת קובץ האימג' של Docker
docker pull tensorflow/serving
הפעלת מאגר Docker
docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &
הרצת החיזוי
curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict
פריסה ומילוי בקשות אונליין
בקטע הזה נשתמש ב-Google Cloud CLI כדי לפרוס את המודל שיוצא ולהריץ חיזויים.
מידע נוסף על פריסת מודל ב-Agent Platform לחיזויים אונליין או באצווה זמין במאמר פריסת מודל בנקודת קצה (endpoint).
יצירת משאב של מודל
MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
יצירת גרסת מודל
1) מגדירים את משתני הסביבה:
MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"
2) יוצרים את הגרסה:
gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK
השלב הזה עשוי להימשך כמה דקות. אמורה להופיע ההודעה Creating version (this might take a few minutes).......
3) (אופציונלי) קבלת מידע על הגרסה החדשה:
gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME
הפלט אמור להיראות כך:
createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY
חיזוי מיידי
למידע נוסף על הפעלת חיזויים אונליין במודל שנפרס, קראו את המאמר קבלת הסקות אונליין ממודל שעבר אימון בהתאמה אישית.
1) יוצרים קובץ JSON עם שורות מופרדות לקלט, לדוגמה קובץ instances.json עם התוכן הבא:
{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}
2) מגדירים משתני סביבה לחיזוי:
INPUT_DATA_FILE="instances.json"
3) מריצים את החיזוי:
gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE
אימון ופריסה של מודל מסווג של עצי החלטה משופרים
בקטעים הבאים מוסבר איך לאמן ולפרוס מודל סיווג של עץ מוגבר.
אימון המודל
מאמנים מודל סיווג של עץ מוגבר (boosted tree) שחוזה את סוג האירוס באמצעות ההצהרה CREATE MODEL. משימת האימון הזו אמורה להימשך כ-7 דקות.
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model` OPTIONS (model_type="boosted_tree_classifier", max_iterations=10, input_label_cols=["species"]) AS SELECT * FROM `bigquery-public-data.ml_datasets.iris`;'
ייצוא המודל
מייצאים את המודל לקטגוריה של Cloud Storage באמצעות כלי שורת הפקודה של BigQuery. במאמר ייצוא מודלים של BigQuery ML מוסבר על דרכים נוספות לייצוא מודלים.
bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model
פריסה והצגה מקומית
בקובץ המיוצא יש קובץ main.py להרצה מקומית.
מורידים את קובצי המודל שיוצאו לספרייה מקומית
mkdir serving_dir
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive
חילוץ מנבאים
tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/
התקנת ספריית XGBoost
מתקינים את ספריית XGBoost – גרסה 0.82 ואילך.
הרצת החיזוי
cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'
פריסה ומילוי בקשות אונליין
בקטע הזה נשתמש ב-Google Cloud CLI כדי לפרוס את המודל שיוצא ולהריץ חיזויים. למידע נוסף, ראו קבלת הסקות אונליין ממודל שעבר אימון בהתאמה אישית.
למידע נוסף על פריסת מודל ב-Agent Platform לחיזויים אונליין או באצווה באמצעות שגרות בהתאמה אישית, ראו פריסת מודל בנקודת קצה (endpoint).
יצירת משאב של מודל
MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME
יצירת גרסת מודל
1) מגדירים את משתני הסביבה:
MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"
2) יוצרים את הגרסה:
gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15
השלב הזה עשוי להימשך כמה דקות. אמורה להופיע ההודעה Creating version (this might take a few minutes).......
3) (אופציונלי) קבלת מידע על הגרסה החדשה:
gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME
הפלט אמור להיראות כך:
createTime: '2020-02-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY
חיזוי מיידי
למידע נוסף על הפעלת חיזויים אונליין במודל שנפרס, קראו את המאמר קבלת הסקות אונליין ממודל שאומן בהתאמה אישית.
1) יוצרים קובץ JSON עם שורות מופרדות לקלט. לדוגמה, קובץ instances.json עם התוכן הבא:
{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}
2) מגדירים משתני סביבה לחיזוי:
INPUT_DATA_FILE="instances.json"
3) מריצים את החיזוי:
gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE
אימון ופריסה של מודל מסווג ב-AutoML
בקטעים הבאים מוסבר איך לאמן ולפרוס מודל סיווג של AutoML.
אימון המודל
מאמנים מודל סיווג של AutoML שחוזה את סוג האירוס באמצעות ההצהרה CREATE MODEL. מודלים של AutoML צריכים לפחות 1,000 שורות של נתוני קלט. בגלל שב-ml_datasets.iris יש רק 150 שורות, אנחנו משכפלים את הנתונים 10 פעמים. משימת האימון הזו אמורה להימשך כ-שעתיים.
bq query --use_legacy_sql=false \ 'CREATE MODEL `bqml_tutorial.automl_iris_model` OPTIONS (model_type="automl_classifier", budget_hours=1, input_label_cols=["species"]) AS SELECT * EXCEPT(multiplier) FROM `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'
ייצוא המודל
מייצאים את המודל לקטגוריה של Cloud Storage באמצעות כלי שורת הפקודה של BigQuery. במאמר ייצוא מודלים של BigQuery ML מפורטות דרכים נוספות לייצוא מודלים.
bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model
פריסה והצגה מקומית
למידע נוסף על בניית קונטיינרים של AutoML, קראו את המאמר ייצוא מודלים טבלאיים של AutoML. כדי לבצע את השלבים הבאים, צריך להתקין את Docker.
העתקת קובצי המודל שיוצאו לספרייה מקומית
mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive
משיכת קובץ אימג' של Docker ל-AutoML
docker pull gcr.io/cloud-automl-tables-public/model_server
הפעלת קונטיינר Docker
docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server
הרצת החיזוי
1) יוצרים קובץ JSON עם שורות מופרדות לקלט. לדוגמה, קובץ input.json עם התוכן הבא:
{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0},
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}]}
2) מבצעים את קריאת החיזוי:
curl -X POST --data @input.json http://localhost:8080/predict
פריסה ומילוי בקשות אונליין
ב-Agent Platform אין תמיכה בחיזוי אונליין למודלים של רגרסיה וסיווג ב-AutoML.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים הנפרדים.
- אתם יכולים למחוק את הפרויקט שיצרתם.
- אפשר גם להשאיר את הפרויקט ולמחוק את מערך הנתונים ואת הקטגוריה של Cloud Storage.
עצירת הקונטיינר של Docker
1) מציגים את כל מאגרי Docker שפועלים.
docker ps
2) עוצרים את הקונטיינר עם מזהה הקונטיינר הרלוונטי מרשימת הקונטיינרים.
docker stop container_id
מחיקת משאבים ב-Agent Platform
1) מוחקים את גרסת המודל.
gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME
2) מוחקים את המודל.
gcloud ai-platform models delete $MODEL_NAME
מחיקת מערך הנתונים
מחיקת הפרויקט תסיר את כל מערכי הנתונים ואת כל הטבלאות בפרויקט. אם אתם מעדיפים להשתמש שוב בפרויקט, אתם יכולים למחוק את קבוצת הנתונים שיצרתם במדריך הזה:
אם צריך, פותחים את הדף של BigQuery במסוףGoogle Cloud .
בניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.
לוחצים על מחיקת מערך הנתונים בצד שמאל של החלון. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (
bqml_tutorial) ולוחצים על Delete.
מחיקת הקטגוריה של Cloud Storage
כשמוחקים פרויקט, כל הקטגוריות של Cloud Storage בפרויקט נמחקות. אם אתם מעדיפים להשתמש שוב בפרויקט, אתם יכולים למחוק את הקטגוריה שיצרתם במדריך הזה.
- במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.
מסמנים את התיבה של הקטגוריה שרוצים למחוק.
לוחצים על Delete.
בחלון שכבת-העל, לוחצים על Delete כדי לאשר שרוצים למחוק את הקטגוריה ואת התוכן שלה.
מחיקת הפרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- לסקירה כללית על BigQuery ML, קראו את המאמר מבוא ל-BigQuery ML.
- מידע נוסף על ייצוא מודלים זמין במאמר ייצוא מודלים.
- מידע על יצירת מודלים זמין בדף התחביר של
CREATE MODEL.