Jalankan tutorial ini sebagai notebook di Colab | Lihat notebook di GitHub |
Ringkasan
Tutorial ini menunjukkan cara men-deploy model scikit-learn terlatih ke AI Platform Prediction dan menyajikan prediksi menggunakan rutinitas prediksi kustom. Dengan begitu, Anda dapat menyesuaikan cara AI Platform Prediction merespons setiap permintaan prediksi.
Dalam contoh ini, Anda akan menggunakan rutinitas prediksi kustom untuk melakukan prapemrosesan input prediksi dengan menskalakannya, dan untuk melakukan pascapemrosesan output prediksi dengan mengonversi nomor class menjadi string label.
Tutorial ini memberikan beberapa langkah:
- Melatih model scikit-learn sederhana secara lokal (di notebook ini)
- Membuat dan men-deploy rutinitas prediksi kustom ke AI Platform Prediction
- Menyalurkan permintaan prediksi dari deployment tersebut
Set data
Tutorial ini menggunakan set data Iris R.A. Fisher, sebuah set data kecil yang populer untuk mencoba teknik machine learning. Setiap instance memiliki empat fitur numerik, yang merupakan ukuran bunga yang berbeda, dan label target yang menandainya sebagai salah satu dari tiga jenis iris: Iris setosa, Iris versicolour, atau Iris virginica.
Tutorial ini menggunakan salinan set data Iris yang disertakan dalam library scikit-learn.
Tujuan
Tujuannya adalah untuk melatih model yang menggunakan pengukuran bunga sebagai input untuk memprediksi jenis iris itu.
Tutorial ini lebih berfokus pada penggunaan model ini dengan AI Platform Prediction daripada desain model itu sendiri.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih:
- AI Platform Prediction
- Cloud Storage
Pelajari harga AI Platform Prediction dan harga Cloud Storage, lalu gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda.
Sebelum memulai
Anda harus melakukan beberapa hal sebelum dapat melatih dan men-deploy model di AI Platform Prediction:
- Menyiapkan lingkungan pengembangan lokal Anda.
- Siapkan project Google Cloud dengan penagihan dan API yang diperlukan telah diaktifkan.
- Buat bucket Cloud Storage untuk menyimpan paket pelatihan dan model yang Anda latih.
Menyiapkan lingkungan pengembangan lokal
Anda memerlukan hal berikut untuk menyelesaikan tutorial ini:
- Python 3
- Virtualenv
- Google Cloud SDK
Panduan Google Cloud untuk Menyiapkan lingkungan pengembangan Python menyediakan petunjuk mendetail untuk memenuhi persyaratan ini. Langkah-langkah berikut memberikan serangkaian petunjuk ringkas:
Instal virtualenv dan buat lingkungan virtual yang menggunakan Python 3.
Aktifkan lingkungan tersebut.
Selesaikan langkah-langkah di bagian berikut untuk menginstal Google Cloud SDK.
Menyiapkan project Google Cloud Anda
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API AI Platform Training & Prediction and Compute Engine.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API AI Platform Training & Prediction and Compute Engine.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
Mengautentikasi akun GCP Anda
Untuk menyiapkan autentikasi, Anda harus membuat kunci akun layanan dan menetapkan variabel lingkungan untuk jalur file ke kunci akun layanan.
-
Buat akun layanan:
-
Di konsol Google Cloud, buka halaman Buat akun layanan.
- Di kolom Nama akun layanan, masukkan nama.
- Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.
- Klik Create.
- Klik kolom Pilih peran. Di bagian Semua peran, pilih AI Platform > AI Platform Admin.
- Klik Add another role.
-
Klik kolom Pilih peran. Di bagian All roles, pilih Storage > Storage Object Admin.
-
Klik Selesai untuk membuat akun layanan.
Jangan tutup jendela browser Anda. Anda akan menggunakannya pada langkah berikutnya.
-
-
Membuat kunci akun layanan untuk autentikasi:
- Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.
- Klik Kunci.
- Klik Tambahkan kunci, lalu Buat kunci baru.
- Klik Create. File kunci JSON akan didownload ke komputer Anda.
- Klik Close.
-
Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file JSON yang berisi kunci akun layanan Anda. Variabel ini hanya berlaku untuk sesi shell Anda saat ini. Jadi, jika Anda membuka sesi baru, tetapkan variabel kembali.
Membuat bucket Cloud Storage
Untuk men-deploy rutinitas prediksi kustom, Anda harus mengupload artefak model yang telah dilatih dan kode kustom Anda ke Cloud Storage.
Tetapkan nama bucket Cloud Storage sebagai variabel lingkungan. Nama ini harus unik di semua bucket Cloud Storage:
BUCKET_NAME="your-bucket-name"
Pilih region tempat AI Platform Prediction tersedia dan buat variabel lingkungan lainnya.
REGION="us-central1"
Buat bucket Cloud Storage di region ini, lalu gunakan region yang sama untuk pelatihan dan prediksi. Jalankan perintah berikut untuk membuat bucket jika belum ada:
gsutil mb -l $REGION gs://$BUCKET_NAME
Membangun dan melatih model scikit-learn
Sering kali, Anda tidak dapat menggunakan data dalam bentuk mentah untuk melatih model machine learning. Meskipun bisa, pemrosesan data terlebih dahulu sebelum menggunakannya untuk pelatihan terkadang dapat meningkatkan kualitas model Anda.
Dengan asumsi bahwa Anda mengharapkan input untuk prediksi memiliki format yang sama dengan data pelatihan, Anda harus menerapkan pra-pemrosesan yang identik selama pelatihan dan prediksi untuk memastikan bahwa model Anda membuat prediksi yang konsisten.
Di bagian ini, buat modul pra-pemrosesan dan gunakan sebagai bagian dari pelatihan. Kemudian, ekspor praprosesor dengan karakteristik yang dipelajari selama pelatihan untuk digunakan nanti dalam rutinitas prediksi kustom Anda.
Menginstal dependensi untuk pelatihan lokal
Pelatihan secara lokal memerlukan beberapa dependensi:
pip install numpy>=1.16.0 scikit-learn==0.20.2
Menulis praprosesor Anda
Menskalakan data pelatihan sehingga setiap kolom fitur numerik memiliki rata-rata 0 dan deviasi standar 1 dapat meningkatkan kualitas model Anda.
Buat preprocess.py
, yang berisi class untuk melakukan penskalaan ini:
import numpy as np
class MySimpleScaler(object):
def __init__(self):
self._means = None
self._stds = None
def preprocess(self, data):
if self._means is None: # during training only
self._means = np.mean(data, axis=0)
if self._stds is None: # during training only
self._stds = np.std(data, axis=0)
if not self._stds.all():
raise ValueError('At least one column has standard deviation of 0.')
return (data - self._means) / self._stds
Perhatikan bahwa instance MySimpleScaler
menyimpan sarana dan standar deviasi dari setiap kolom fitur pada penggunaan pertama. Kemudian model ini menggunakan statistik
ringkasan ini untuk menskalakan data yang ditemukan setelahnya.
Dengan begitu, Anda dapat menyimpan karakteristik distribusi pelatihan dan menggunakannya untuk pra-pemrosesan yang identik pada waktu prediksi.
Melatih model Anda
Selanjutnya, gunakan preprocess.MySimpleScaler
untuk melakukan prapemrosesan data iris, lalu latih model menggunakan scikit-learn.
Pada akhirnya, ekspor model terlatih Anda sebagai file joblib (.joblib
) dan ekspor instance MySimpleScaler
sebagai file acar (.pkl
):
import pickle
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.externals import joblib
from preprocess import MySimpleScaler
iris = load_iris()
scaler = MySimpleScaler()
X = scaler.preprocess(iris.data)
y = iris.target
model = RandomForestClassifier()
model.fit(X, y)
joblib.dump(model, 'model.joblib')
with open ('preprocessor.pkl', 'wb') as f:
pickle.dump(scaler, f)
Men-deploy rutinitas prediksi kustom
Untuk men-deploy rutinitas prediksi kustom guna menampilkan prediksi dari model yang telah dilatih, lakukan hal berikut:
- Membuat prediktor kustom untuk menangani permintaan
- Mengemas prediktor dan modul pra-pemrosesan Anda
- Upload artefak model dan kode kustom Anda ke Cloud Storage
- Men-deploy rutinitas prediksi kustom Anda ke AI Platform Prediction
Membuat prediktor kustom
Untuk men-deploy rutinitas prediksi kustom, Anda harus membuat class yang mengimplementasikan antarmuka Predictor. Atribut ini akan memberi tahu AI Platform Prediction cara memuat model Anda dan cara menangani permintaan prediksi.
Tulis kode berikut ke predictor.py
:
import os
import pickle
import numpy as np
from sklearn.datasets import load_iris
from sklearn.externals import joblib
class MyPredictor(object):
def __init__(self, model, preprocessor):
self._model = model
self._preprocessor = preprocessor
self._class_names = load_iris().target_names
def predict(self, instances, **kwargs):
inputs = np.asarray(instances)
preprocessed_inputs = self._preprocessor.preprocess(inputs)
if kwargs.get('probabilities'):
probabilities = self._model.predict_proba(preprocessed_inputs)
return probabilities.tolist()
else:
outputs = self._model.predict(preprocessed_inputs)
return [self._class_names[class_num] for class_num in outputs]
@classmethod
def from_path(cls, model_dir):
model_path = os.path.join(model_dir, 'model.joblib')
model = joblib.load(model_path)
preprocessor_path = os.path.join(model_dir, 'preprocessor.pkl')
with open(preprocessor_path, 'rb') as f:
preprocessor = pickle.load(f)
return cls(model, preprocessor)
Perhatikan bahwa, selain menggunakan praprosesor yang Anda tentukan selama pelatihan, prediktor ini melakukan langkah pascapemrosesan yang mengonversi output prediksi dari indeks class (0
, 1
, atau 2
) menjadi string label (nama jenis bunga).
Namun, jika prediktor menerima argumen kata kunci probabilities
dengan nilai True
, prediktor akan menampilkan array probabilitas, yang menunjukkan probabilitas bahwa ketiga class tersebut adalah label yang benar (sesuai dengan model).
Bagian terakhir tutorial ini menunjukkan cara memberikan argumen kata kunci selama prediksi.
Mengemas kode kustom
Anda harus mengemas predictor.py
dan preprocess.py
sebagai paket distribusi sumber .tar.gz
dan memberikan paket tersebut ke AI Platform Prediction agar dapat menggunakan kode kustom Anda untuk menyajikan prediksi.
Tulis setup.py
berikut untuk menentukan paket Anda:
from setuptools import setup
setup(
name='my_custom_code',
version='0.1',
scripts=['predictor.py', 'preprocess.py'])
Lalu, jalankan perintah berikut untuk membuat dist/my_custom_code-0.1.tar.gz
:
python setup.py sdist --formats=gztar
Mengupload artefak model dan kode kustom ke Cloud Storage
Sebelum Anda dapat men-deploy model untuk inferensi, AI Platform Prediction memerlukan akses ke file berikut di Cloud Storage:
model.joblib
(artefak model)preprocessor.pkl
(artefak model)my_custom_code-0.1.tar.gz
(kode kustom)
Artefak model harus disimpan bersama dalam direktori model, yang dapat diakses oleh Prediktor sebagai argumen model_dir
dalam metode class from_path
-nya.
Kode kustom tidak perlu berada di direktori yang sama. Jalankan perintah berikut
untuk mengupload file Anda:
gsutil cp ./dist/my_custom_code-0.1.tar.gz gs://$BUCKET_NAME/custom_prediction_routine_tutorial/my_custom_code-0.1.tar.gz
gsutil cp model.joblib preprocessor.pkl gs://$BUCKET_NAME/custom_prediction_routine_tutorial/model/
Men-deploy rutinitas prediksi kustom Anda
Buat resource model dan resource versi untuk men-deploy rutinitas prediksi kustom Anda. Pertama-tama, tentukan variabel lingkungan dengan nama resource Anda:
MODEL_NAME='IrisPredictor'
VERSION_NAME='v1'
Kemudian buat model Anda:
gcloud ai-platform models create $MODEL_NAME \
--regions $REGION
Selanjutnya, buat versi. Pada langkah ini, berikan jalur ke artefak dan kode kustom yang Anda upload ke Cloud Storage:
gcloud components install beta
gcloud beta ai-platform versions create $VERSION_NAME \
--model $MODEL_NAME \
--runtime-version 1.13 \
--python-version 3.5 \
--origin gs://$BUCKET_NAME/custom_prediction_routine_tutorial/model/ \
--package-uris gs://$BUCKET_NAME/custom_prediction_routine_tutorial/my_custom_code-0.1.tar.gz \
--prediction-class predictor.MyPredictor
Pelajari lebih lanjut opsi yang harus Anda tentukan saat men-deploy rutinitas prediksi kustom.
Menyajikan prediksi online
Coba deployment Anda dengan mengirim permintaan prediksi online. Pertama, instal Library Klien Google API untuk Python:
pip install --upgrade google-api-python-client
Kemudian kirim dua instance data iris ke versi yang di-deploy dengan menjalankan kode Python berikut:
import googleapiclient.discovery
instances = [
[6.7, 3.1, 4.7, 1.5],
[4.6, 3.1, 1.5, 0.2],
]
service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}/versions/{}'.format(PROJECT_ID, MODEL_NAME, VERSION_NAME)
response = service.projects().predict(
name=name,
body={'instances': instances}
).execute()
if 'error' in response:
raise RuntimeError(response['error'])
else:
print(response['predictions'])
['versicolor', 'setosa']
Mengirim argumen kata kunci
Saat mengirim permintaan prediksi ke rutinitas prediksi kustom, Anda dapat memberikan kolom tambahan pada isi permintaan.
Metode predict
Predictor menerima peristiwa ini sebagai kolom kamus **kwargs
.
Kode berikut mengirim permintaan yang sama seperti sebelumnya, tetapi kali ini menambahkan kolom
probabilities
ke isi permintaan:
response = service.projects().predict(
name=name,
body={'instances': instances, 'probabilities': True}
).execute()
if 'error' in response:
raise RuntimeError(response['error'])
else:
print(response['predictions'])
[[0.0, 1.0, 0.0], [1.0, 0.0, 0.0]]
Pembersihan
Untuk membersihkan semua resource GCP yang digunakan dalam project ini, Anda dapat menghapus project GCP yang digunakan untuk tutorial.
Atau, Anda dapat membersihkan resource satu per satu dengan menjalankan perintah berikut:
# Delete version resource
gcloud ai-platform versions delete $VERSION_NAME --quiet --model $MODEL_NAME
# Delete model resource
gcloud ai-platform models delete $MODEL_NAME --quiet
# Delete Cloud Storage objects that were created
gsutil -m rm -r gs://$BUCKET_NAME/custom_prediction_routine_tutorial
Langkah selanjutnya
- Baca selengkapnya tentang rutinitas prediksi kustom.
- Pelajari cara mengekspor model untuk menampilkan prediksi tanpa rutinitas prediksi kustom.