本教學課程將說明如何匯出 BigQuery ML 模型,然後在 AI Platform 或本機電腦上部署模型。您將使用 BigQuery 公開資料集中的 iris
資料表,並完成以下三個端對端情境:
- 訓練及部署邏輯迴歸模型 - 也適用於 DNN 分類器、DNN 迴歸器、k-means、線性迴歸和矩陣分解模型。
- 訓練及部署提升決策樹分類器模型 (也適用於提升決策樹迴歸器模型)。
- 訓練及部署 AutoML 分類器模型 (也適用於 AutoML 回歸器模型)。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- BigQuery ML
- Cloud Storage
- AI 平台 (選用,用於線上預測)
如要進一步瞭解 BigQuery ML 費用,請參閱 BigQuery ML 定價。
如要進一步瞭解 Cloud Storage 費用,請參閱 Cloud Storage 定價頁面。
如要進一步瞭解 AI 平台費用,請參閱「預測節點和資源分配」頁面。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 新專案會自動啟用 BigQuery。如要在現有的專案中啟用 BigQuery,請前往
Enable the BigQuery API.
-
Enable the AI Platform Training and Prediction API and Compute Engine APIs.
- 安裝 Google Cloud CLI 和 Google Cloud CLI。
建立您的資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點選
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「Create dataset」頁面上執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。在「位置類型」中選取「多區域」,然後選取「美國 (多個美國區域)」。
保留其餘預設設定,然後點選「Create dataset」(建立資料集)。
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能參數的完整清單,請參閱 bq mk --dataset
指令參考資料。
建立名為
bqml_tutorial
的資料集,並將資料位置設為US
,說明為BigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
這個指令採用
-d
捷徑,而不是使用--dataset
旗標。如果您省略-d
和--dataset
,該指令預設會建立資料集。確認資料集已建立:
bq ls
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請先參閱 BigQuery 快速入門:使用 BigQuery DataFrames,按照 BigQuery DataFrames 設定說明進行操作。詳情請參閱 BigQuery DataFrames 參考資料說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。
訓練並部署邏輯迴歸模型
訓練模型
使用 BigQuery ML CREATE MODEL
陳述式訓練邏輯迴歸模型,以便預測鳶尾花類型。這項訓練作業應會在大約 1 分鐘內完成。
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`;'
匯出模型
使用 bq 指令列工具,將模型匯出至 Cloud Storage bucket。如要瞭解其他匯出模型的方式,請參閱「匯出 BigQuery ML 模型」。這項擷取作業應可在 1 分鐘內完成。
bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model
本機部署和服務
您可以使用 TensorFlow Serving Docker 容器部署匯出的 TensorFlow 模型。您必須安裝 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,針對匯出的模型部署及執行預測。
如要進一步瞭解如何將模型部署至 AI Platform 以進行線上/批次預測,請參閱「部署模型」。
建立模型資源
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
訓練及部署提升決策樹分類器模型
訓練模型
訓練使用 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`;'
匯出模型
使用 bq 指令列工具,將模型匯出至 Cloud Storage bucket。如要瞭解其他匯出模型的方式,請參閱「匯出 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,針對在 AI Platform 線上預測中匯出的模型,部署並執行預測。
如要進一步瞭解如何使用自訂例行程序,將模型部署至 AI Platform 以進行線上/批次預測,請參閱「部署模型」。
建立模型資源
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 分類器模型
訓練模型
使用 CREATE MODEL
陳述式訓練 AutoML 分類器模型,以便預測鳶尾花型態。AutoML 模型至少需要 1000 列輸入資料。由於 ml_datasets.iris
只有 150 列,因此我們複製資料 10 次。這項訓練工作應會在 2 小時內完成。
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;'
匯出模型
使用 bq 指令列工具,將模型匯出至 Cloud Storage bucket。如要瞭解其他匯出模型的方式,請參閱「匯出 BigQuery ML 模型」。
bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model
本機部署和服務
如要進一步瞭解如何建構 AutoML 容器,請參閱「匯出模型」。您必須在下列步驟中安裝 Docker。
將匯出的模型檔案複製到本機目錄
mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive
提取 AutoML Docker 映像檔
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
線上部署和供應
AI 平台不支援 AutoML 回歸器和 AutoML 分類器模型的線上預測。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
- 您可以刪除建立的專案。
- 或者,您可以保留專案,並刪除資料集和 Cloud Storage 值區。
停止 Docker 容器
1) 列出所有執行中的 Docker 容器。
docker ps
2) 停止在容器清單中,具有適用容器 ID 的容器。
docker stop container_id
刪除 AI 平台資源
1) 刪除模型版本。
gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME
2) 刪除模型。
gcloud ai-platform models delete $MODEL_NAME
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有必要,請在Google Cloud 控制台中開啟 BigQuery 頁面。
在導覽窗格中,按一下您建立的 bqml_tutorial 資料集。
按一下視窗右側的「Delete dataset」。這個動作將會刪除資料集、資料表,以及所有資料。
在「Delete dataset」(刪除資料集) 對話方塊中,輸入資料集的名稱 (
bqml_tutorial
),然後按一下 [Delete] (刪除) 來確認刪除指令。
刪除 Cloud Storage 值區
刪除專案後,系統會移除專案中的所有 Cloud Storage 值區。如果您想重複使用專案,可以刪除您在本教學課程中建立的儲存空間
- 在 Google Cloud 控制台,前往 Cloud Storage「Buckets」頁面。
找到您要刪除的值區,並選取旁邊的核取方塊。
按一下 [Delete] (刪除)。
在出現的重疊視窗中,確認您要刪除的值區及內容,然後按一下 [Delete] (刪除)。
刪除專案
如要刪除專案,請進行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
後續步驟
- 如需 BigQuery ML 的總覽,請參閱 BigQuery ML 簡介。
- 如要瞭解如何匯出模型,請參閱「匯出模型」。
- 如要瞭解如何建立模型,請參閱
CREATE MODEL
語法頁面。