Mengekspor model BigQuery ML untuk prediksi online


Tutorial ini menunjukkan cara mengekspor model BigQuery ML, lalu men-deploy model tersebut di AI Platform atau di mesin lokal. Anda akan menggunakan tabel iris dari set data publik BigQuery dan mengerjakan tiga skenario menyeluruh berikut:

  • Melatih dan men-deploy model regresi logistik - juga berlaku untuk pengklasifikasi DNN, regressor DNN, k-means, regresi linear, dan model faktorisasi matriks.
  • Melatih dan men-deploy model pengklasifikasi pohon yang ditingkatkan - juga berlaku untuk model regressor pohon yang ditingkatkan.
  • Melatih dan men-deploy model pengklasifikasi AutoML - juga berlaku untuk model regressor AutoML.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:

  • BigQuery ML
  • Cloud Storage
  • AI Platform (opsional, digunakan untuk prediksi online)

Untuk informasi selengkapnya tentang biaya BigQuery ML, lihat harga BigQuery ML.

Untuk mengetahui informasi selengkapnya tentang biaya Cloud Storage, lihat halaman Harga Cloud Storage.

Untuk mengetahui informasi selengkapnya tentang biaya AI Platform, lihat halaman node prediksi dan alokasi resource.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. BigQuery secara otomatis diaktifkan dalam project baru. Untuk mengaktifkan BigQuery dalam project yang sudah ada, buka

    Aktifkan API BigQuery.

    Mengaktifkan API

  7. Aktifkan API AI Platform Training and Prediction API and Compute Engine.

    Mengaktifkan API

  8. Instal Google Cloud CLI dan Google Cloud CLI.

Membuat set data

Buat set data BigQuery untuk menyimpan model ML Anda:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka halaman BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Buat set data.

  4. Di halaman Create dataset, lakukan hal berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).

      Set data publik disimpan di US multi-region. Untuk mempermudah, simpan set data Anda di lokasi yang sama.

    • Jangan ubah setelan default yang tersisa, lalu klik Create dataset.

      Halaman Create dataset.

Melatih dan men-deploy model regresi logistik

Melatih model

Latih model regresi logistik yang memprediksi jenis iris menggunakan pernyataan CREATE MODEL BigQuery ML. Tugas pelatihan ini akan memerlukan waktu sekitar 1 menit.

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`;'

Mengekspor model

Ekspor model ke bucket Cloud Storage menggunakan alat command line bq. Guna mengetahui cara lain untuk mengekspor model, lihat Mengekspor model BigQuery ML. Tugas ekstrak ini memerlukan waktu kurang dari 1 menit untuk diselesaikan.

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

Deployment dan inferensi lokal

Anda dapat men-deploy model TensorFlow yang diekspor menggunakan container TensorFlow Serving Docker. Langkah-langkah berikut mengharuskan Anda menginstal Docker.

Mendownload file model yang diekspor ke direktori sementara

mkdir tmp_dir
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

Membuat subdirektori versi

Langkah ini akan menetapkan nomor versi (dalam hal ini 1) untuk model tersebut.

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Mengambil image Docker

docker pull tensorflow/serving

Menjalankan container 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 &

Menjalankan prediksi

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

Deployment dan inferensi online

Bagian ini menggunakan Google Cloud CLI untuk men-deploy dan menjalankan prediksi terhadap model yang diekspor.

Untuk detail selengkapnya tentang men-deploy model ke AI Platform untuk prediksi online/batch, lihat Men-deploy model.

Membuat resource model

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Membuat versi model

1) Setel variabel lingkungan:

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2) Buat versi:

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

Langkah ini mungkin memerlukan waktu beberapa menit hingga selesai. Anda akan melihat pesan Creating version (this might take a few minutes).......

3) (opsional) Dapatkan informasi mengenai versi baru Anda:

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

Anda akan melihat output yang serupa dengan ini:

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

Prediksi online

Detail tentang menjalankan prediksi online terhadap model yang di-deploy tersedia di Meminta prediksi.

1) Buat file JSON yang dibatasi baris baru untuk input, misalnya file instances.json dengan konten berikut:

{"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) Siapkan variabel lingkungan untuk memprediksi:

INPUT_DATA_FILE="instances.json"

3) Jalankan prediksi:

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Melatih dan men-deploy model pengklasifikasi hierarki yang ditingkatkan

Melatih model

Latih model pengklasifikasi hierarki yang ditingkatkan yang memprediksi jenis iris menggunakan pernyataan CREATE MODEL. Tugas pelatihan ini akan memerlukan waktu sekitar 7 menit.

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`;'

Mengekspor model

Ekspor model ke bucket Cloud Storage menggunakan alat command line bq. Guna mengetahui cara tambahan untuk mengekspor model, lihat Mengekspor model BigQuery ML.

bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model

Deployment dan inferensi lokal

Dalam file yang diekspor, ada file main.py untuk dijalankan secara lokal.

Mendownload file model yang diekspor ke direktori lokal

mkdir serving_dir
gsutil cp -r gs://some/gcs/path/boosted_tree_iris_model serving_dir

Mengekstrak prediktor

tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/

Menginstal library XGBoost

Instal library XGBoost - versi 0.82 atau yang lebih baru.

Menjalankan prediksi

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}]'

Deployment dan inferensi online

Bagian ini menggunakan Google Cloud CLI untuk men-deploy dan menjalankan prediksi terhadap model yang diekspor di Prediksi Online AI Platform.

Untuk detail selengkapnya tentang men-deploy model ke AI Platform untuk prediksi online/batch menggunakan rutinitas kustom, lihat Men-deploy model.

Membuat resource model

MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

Membuat versi model

1) Setel variabel lingkungan:

MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"

2) Buat versi:

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

Langkah ini mungkin memerlukan waktu beberapa menit hingga selesai. Anda akan melihat pesan Creating version (this might take a few minutes).......

3) (opsional) Dapatkan informasi mengenai versi baru Anda:

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

Anda akan melihat output yang serupa dengan ini:

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

Prediksi online

Untuk detail selengkapnya tentang menjalankan prediksi online terhadap model yang di-deploy, lihat Meminta prediksi.

1) Buat file JSON yang dibatasi baris baru untuk input. Misalnya, file instances.json dengan konten berikut:

{"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) Menyiapkan variabel lingkungan untuk memprediksi:

INPUT_DATA_FILE="instances.json"

3) Jalankan prediksi:

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

Melatih dan men-deploy model pengklasifikasi AutoML

Melatih model

Latih model pengklasifikasi AutoML yang memprediksi jenis iris menggunakan pernyataan CREATE MODEL. Model AutoML memerlukan setidaknya 1.000 baris data input. Karena ml_datasets.iris hanya memiliki 150 baris, kita duplikasi data tersebut 10 kali. Tugas pelatihan ini akan memakan waktu sekitar 2 jam.

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;'

Mengekspor model

Ekspor model ke bucket Cloud Storage menggunakan alat command line bq. Guna mengetahui cara tambahan untuk mengekspor model, lihat Mengekspor model BigQuery ML.

bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model

Deployment dan inferensi lokal

Untuk mengetahui detail tentang cara mem-build container AutoML, lihat Mengekspor model. Langkah-langkah berikut mengharuskan Anda menginstal Docker.

Menyalin file model yang diekspor ke direktori lokal

mkdir automl_serving_dir
gsutil cp -r gs://some/gcs/path/automl_iris_model/* automl_serving_dir/

Menarik image Docker AutoML

docker pull gcr.io/cloud-automl-tables-public/model_server

Memulai container Docker

docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server

Menjalankan prediksi

1) Buat file JSON yang dibatasi baris baru untuk input. Misalnya, file input.json dengan konten berikut:

{"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) Lakukan panggilan prediksi:

curl -X POST --data @input.json http://localhost:8080/predict

Deployment dan inferensi online

Prediksi online untuk model regressor AutoML dan pengklasifikasi AutoML tidak didukung di AI Platform.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus resource satu per satu.

  • Anda dapat menghapus project yang dibuat.
  • Atau, Anda dapat menyimpan project dan menghapus set data dan bucket Cloud Storage.

Menghentikan container Docker

1) Cantumkan semua container Docker yang berjalan.

docker ps

2) Hentikan container dengan ID container yang berlaku dari daftar container.

docker stop container_id

Menghapus resource AI Platform

1) Hapus versi model.

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2) Hapus modelnya.

gcloud ai-platform models delete $MODEL_NAME

Menghapus set data

Jika project Anda dihapus, semua set data dan semua tabel dalam project akan dihapus. Jika ingin menggunakan kembali project tersebut, Anda dapat menghapus set data yang dibuat dalam tutorial ini:

  1. Jika perlu, buka halaman BigQuery di konsol Google Cloud.

    Buka halaman BigQuery

  2. Di navigasi, klik set data bqml_tutorial yang telah Anda buat.

  3. Klik Delete dataset di sisi kanan jendela. Tindakan ini akan menghapus set data, tabel, dan semua data.

  4. Di kotak dialog Delete dataset, konfirmasi perintah hapus dengan mengetikkan nama set data Anda (bqml_tutorial), lalu klik Delete.

Menghapus bucket Cloud Storage

Menghapus project Anda akan menghapus semua bucket Cloud Storage di project tersebut. Jika ingin menggunakan kembali project tersebut, Anda dapat menghapus bucket yang Anda buat dalam tutorial ini

  1. Di konsol Google Cloud, buka halaman Buckets Cloud Storage.

    Buka Buckets

  2. Pilih kotak centang bucket yang ingin Anda hapus.

  3. Klik Delete.

  4. Di jendela overlay yang muncul, konfirmasi bahwa Anda ingin menghapus bucket beserta isinya dengan mengklik Delete.

Menghapus project Anda

Untuk menghapus project:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya