ייצוא מודל BigQuery ML לחיזוי אונליין

במדריך הזה נסביר איך לייצא מודל של 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 מופיע במאמר מודלים באימון בהתאמה אישית.

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

  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. Verify that billing is enabled for your Google Cloud project.

  3. ‫BigQuery מופעל באופן אוטומטי בפרויקטים חדשים. כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל

    מפעילים את BigQuery API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

    להפעלת ה-API

  4. מפעילים את AI Platform Training and Prediction API ואת Compute Engine API, אם הם עדיין לא מופעלים.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

    הפעלת ממשקי ה-API

  5. מתקינים את Google Cloud CLI ואת Google Cloud CLI.

יצירת מערך הנתונים

כדי ליצור מערך נתונים ב-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"
  }
}

אימון ופריסה של מודל רגרסיה לוגיסטית

בקטעים הבאים מוסבר איך לאמן ולפרוס מודל רגרסיה לוגיסטית.

אימון המודל

מאמנים מודל רגרסיה לוגיסטית שחוזה את סוג האירוס באמצעות ההצהרה 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

מחיקת מערך הנתונים

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

  1. אם צריך, פותחים את הדף של BigQuery במסוףGoogle Cloud .

    כניסה לדף BigQuery

  2. בניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.

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

  4. בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (bqml_tutorial) ולוחצים על Delete.

מחיקת הקטגוריה של Cloud Storage

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

  1. במסוף Google Cloud , נכנסים לדף Buckets של Cloud Storage.

    כניסה לדף Buckets

  2. מסמנים את התיבה של הקטגוריה שרוצים למחוק.

  3. לוחצים על Delete.

  4. בחלון שכבת-העל, לוחצים על Delete כדי לאשר שרוצים למחוק את הקטגוריה ואת התוכן שלה.

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

כדי למחוק את הפרויקט:

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

    כניסה לדף Manage resources

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

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