Mendapatkan prediksi online dengan scikit-learn

Sampel ini melatih model untuk memprediksi tingkat pendapatan seseorang berdasarkan Set Data Sensus Pendapatan. Setelah melatih dan menyimpan model secara lokal, Anda akan men-deploy model ke AI Platform Prediction dan membuat kueri untuk mendapatkan prediksi online.

Anda dapat men-deploy dan menyalurkan pipeline scikit-learn pada AI Platform Prediction. Dengan modul pipeline di scikit-learn, Anda dapat menerapkan beberapa transformasi data sebelum melakukan pelatihan dengan estimator. Tindakan ini mencakup beberapa langkah dalam pemrosesan data dan memastikan data pelatihan yang sama digunakan di setiap langkah.

Tutorial ini juga tersedia di GitHub sebagai notebook Jupyter.

Cara membawa model Anda ke AI Platform Prediction

Anda dapat membawa model Anda ke AI Platform Prediction untuk mendapatkan prediksi dalam lima langkah:

  • Simpan model ke file
  • Upload model tersimpan ke Cloud Storage
  • Membuat resource model di AI Platform Prediction
  • Buat versi model, dengan menautkan model tersimpan Anda
  • Buat prediksi online

Sebelum memulai

Selesaikan langkah-langkah berikut untuk menyiapkan akun GCP, mengaktifkan AI Platform Prediction API, lalu menginstal dan mengaktifkan Cloud SDK.

Menyiapkan project GCP

  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. Aktifkan API AI Platform Training & Prediction and Compute Engine.

    Mengaktifkan API

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  9. Aktifkan API AI Platform Training & Prediction and Compute Engine.

    Mengaktifkan API

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init

Menyiapkan lingkungan Anda

Pilih salah satu opsi di bawah ini untuk menyiapkan lingkungan Anda secara lokal di macOS atau di lingkungan jarak jauh di Cloud Shell.

Untuk pengguna macOS, sebaiknya siapkan lingkungan Anda menggunakan tab MACOS di bawah. Cloud Shell, yang ditampilkan di tab CLOUD SHELL, tersedia di macOS, Linux, dan Windows. Cloud Shell menyediakan cara cepat untuk mencoba AI Platform Prediction, tetapi tidak cocok untuk pekerjaan pengembangan yang sedang berlangsung.

macOS

  1. Periksa penginstalan Python
    Pastikan Anda telah menginstal Python dan, jika perlu, menginstalnya.

    python -V
  2. Periksa penginstalan pip
    pip adalah pengelola paket Python, yang disertakan dengan versi Python saat ini. Periksa apakah Anda sudah menginstal pip dengan menjalankan pip --version. Jika belum, lihat cara menginstal pip.

    Anda dapat mengupgrade pip menggunakan perintah berikut:

    pip install -U pip

    Lihat dokumentasi pip untuk mengetahui detail selengkapnya.

  3. Menginstal virtualenv
    virtualenv adalah alat untuk membuat lingkungan Python yang terisolasi. Periksa apakah Anda sudah menginstal virtualenv dengan menjalankan virtualenv --version. Jika belum, instal virtualenv:

    pip install --user --upgrade virtualenv

    Guna membuat lingkungan pengembangan yang terisolasi untuk panduan ini, buat lingkungan virtual baru di virtualenv. Misalnya, perintah berikut mengaktifkan lingkungan bernama aip-env:

    virtualenv aip-env
    source aip-env/bin/activate
  4. Untuk tujuan tutorial ini, jalankan perintah lainnya dalam lingkungan virtual Anda.

    Lihat informasi selengkapnya tentang penggunaan virtualenv. Untuk keluar dari virtualenv, jalankan deactivate.

Cloud Shell

  1. Buka konsol Google Cloud.

    Google Cloud console

  2. Klik tombol Activate Google Cloud Shell di bagian atas jendela konsol.

    Mengaktifkan Google Cloud Shell

    Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah konsol dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi shell diinisialisasi.

    Sesi Cloud Shell

    Sesi Cloud Shell Anda siap digunakan.

  3. Konfigurasikan alat command line gcloud untuk menggunakan project yang Anda pilih.

    gcloud config set project [selected-project-id]

    dengan [selected-project-id] sebagai project ID Anda. (Hilangkan tanda kurung penutup.)

Menginstal framework

macOS

Dalam lingkungan virtual Anda, jalankan perintah berikut untuk menginstal versi scikit-learn dan pandas yang digunakan dalam runtime versi 2.11 Prediction AI Platform:

(aip-env)$ pip install scikit-learn==1.0.2 pandas==1.3.5

Dengan memberikan nomor versi dalam perintah sebelumnya, Anda memastikan bahwa dependensi di lingkungan virtual Anda cocok dengan dependensi dalam versi runtime. Hal ini membantu mencegah perilaku yang tidak terduga saat kode Anda dijalankan pada AI Platform Prediction.

Untuk detail selengkapnya, opsi penginstalan, dan informasi pemecahan masalah, lihat petunjuk penginstalan untuk setiap framework:

Cloud Shell

Jalankan perintah berikut untuk menginstal scikit-learn, dan pandas:

pip install --user scikit-learn pandas

Untuk detail selengkapnya, opsi penginstalan, dan informasi pemecahan masalah, lihat petunjuk penginstalan untuk setiap framework:

Mendownload data

Set Data Pendapatan Sensus yang digunakan sampel ini untuk pelatihan dihosting oleh UC Irvine Machine Learning Repository. Lihat Tentang data untuk mengetahui informasi selengkapnya.

  • File pelatihan adalah adult.data
  • File evaluasi adalah adult.test

Melatih dan menyimpan model

Untuk melatih dan menyimpan model, selesaikan langkah-langkah berikut:

  1. Muat data ke dalam DataFrame pandas untuk menyiapkannya agar dapat digunakan dengan scikit-learn.
  2. Latih model sederhana di scikit-learn.
  3. Simpan model ke file yang dapat diupload ke AI Platform Prediction.

Jika Anda sudah memiliki model terlatih untuk diupload, lihat cara mengekspor model.

Memuat dan mentransformasi data

Anda dapat mengekspor objek Pipeline menggunakan versi joblib yang disertakan dalam scikit-learn atau pickle, mirip dengan cara mengekspor estimator scikit-learn. Contoh berikut menggunakan Pipeline untuk mengonversi setiap fitur kategoris menjadi nilai numerik, mengombinasikannya, dan menggunakan RandomForestClassifier untuk melatih model.

from sklearn.externals import joblib
import json
import numpy as np
import os
import pandas as pd
import pickle
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import FeatureUnion
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import LabelBinarizer

# Define the format of your input data, including unused columns.
# These are the columns from the census data files.
COLUMNS = (
    'age',
    'workclass',
    'fnlwgt',
    'education',
    'education-num',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'capital-gain',
    'capital-loss',
    'hours-per-week',
    'native-country',
    'income-level'
)

# Categorical columns are columns that need to be turned into a numerical value to be used by scikit-learn
CATEGORICAL_COLUMNS = (
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country'
)

# Load the training census dataset
with open('./census_data/adult.data', 'r') as train_data:
    raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)

# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
train_features = raw_training_data.drop('income-level', axis=1).as_matrix().tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
train_labels = (raw_training_data['income-level'] == ' >50K').as_matrix().tolist()

# Load the test census dataset
with open('./census_data/adult.test', 'r') as test_data:
    raw_testing_data = pd.read_csv(test_data, names=COLUMNS, skiprows=1)
# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
test_features = raw_testing_data.drop('income-level', axis=1).as_matrix().tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
test_labels = (raw_testing_data['income-level'] == ' >50K.').as_matrix().tolist()

# Since the census data set has categorical features, we need to convert
# them to numerical values. We'll use a list of pipelines to convert each
# categorical column and then use FeatureUnion to combine them before calling
# the RandomForestClassifier.
categorical_pipelines = []

# Each categorical column needs to be extracted individually and converted to a numerical value.
# To do this, each categorical column will use a pipeline that extracts one feature column via
# SelectKBest(k=1) and a LabelBinarizer() to convert the categorical value to a numerical one.
# A scores array (created below) will select and extract the feature column. The scores array is
# created by iterating over the COLUMNS and checking if it is a CATEGORICAL_COLUMN.
for i, col in enumerate(COLUMNS[:-1]):
    if col in CATEGORICAL_COLUMNS:
        # Create a scores array to get the individual categorical column.
        # Example:
        #  data = [39, 'State-gov', 77516, 'Bachelors', 13, 'Never-married', 'Adm-clerical',
        #         'Not-in-family', 'White', 'Male', 2174, 0, 40, 'United-States']
        #  scores = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        #
        # Returns: [['Sate-gov']]
        scores = []
        # Build the scores array
        for j in range(len(COLUMNS[:-1])):
            if i == j: # This column is the categorical column we want to extract.
                scores.append(1) # Set to 1 to select this column
            else: # Every other column should be ignored.
                scores.append(0)
        skb = SelectKBest(k=1)
        skb.scores_ = scores
        # Convert the categorical column to a numerical value
        lbn = LabelBinarizer()
        r = skb.transform(train_features)
        lbn.fit(r)
        # Create the pipeline to extract the categorical feature
        categorical_pipelines.append(
            ('categorical-{}'.format(i), Pipeline([
                ('SKB-{}'.format(i), skb),
                ('LBN-{}'.format(i), lbn)])))

# Create pipeline to extract the numerical features
skb = SelectKBest(k=6)
# From COLUMNS use the features that are numerical
skb.scores_ = [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0]
categorical_pipelines.append(('numerical', skb))

# Combine all the features using FeatureUnion
preprocess = FeatureUnion(categorical_pipelines)

# Create the classifier
classifier = RandomForestClassifier()

# Transform the features and fit them to the classifier
classifier.fit(preprocess.transform(train_features), train_labels)

# Create the overall model as a single pipeline
pipeline = Pipeline([
    ('union', preprocess),
    ('classifier', classifier)
])

Ekspor model Anda

Untuk mengekspor model, Anda dapat menggunakan joblib atau library pickle Python:

joblib

from sklearn.externals import joblib

# Export the model to a file
joblib.dump(pipeline, 'model.joblib')

pickle

# Export the model to a file
with open('model.pkl', 'wb') as model_file:
  pickle.dump(pipeline, model_file)

Persyaratan penamaan file model

File model tersimpan yang Anda upload ke Cloud Storage harus diberi nama model.pkl atau model.joblib, bergantung pada library yang Anda gunakan. Pembatasan ini memastikan bahwa AI Platform Prediction menggunakan pola yang sama untuk merekonstruksi model saat impor seperti yang digunakan selama ekspor.

Library yang digunakan untuk mengekspor model Nama model yang benar
pickle model.pkl
sklearn.externals.joblib model.joblib

Untuk iterasi model Anda di masa mendatang, atur bucket Cloud Storage Anda sehingga setiap model baru memiliki direktori khusus.

Menyimpan model Anda di Cloud Storage

Untuk keperluan tutorial ini, paling mudah menggunakan bucket Cloud Storage khusus dalam project yang sama yang Anda gunakan untuk AI Platform Prediction.

Jika menggunakan bucket dalam project yang berbeda, Anda harus memastikan bahwa akun layanan AI Platform Prediction Anda dapat mengakses model di Cloud Storage. Tanpa izin yang sesuai, permintaan Anda untuk membuat versi model Prediction AI Platform akan gagal. Lihat selengkapnya tentang memberikan izin untuk penyimpanan.

Menyiapkan bucket Cloud Storage

Bagian ini menunjukkan cara membuat bucket baru. Anda dapat menggunakan bucket yang sudah ada, tetapi harus berada di region yang sama dengan tempat Anda berencana menjalankan tugas AI Platform. Selain itu, jika bukan bagian dari project yang Anda gunakan untuk menjalankan AI Platform Prediction, Anda harus secara eksplisit memberikan akses ke akun layanan AI Platform Prediction.

  1. Tentukan nama untuk bucket baru Anda. Nama harus unik di semua bucket di Cloud Storage.

    BUCKET_NAME="YOUR_BUCKET_NAME"

    Misalnya, gunakan nama project Anda dengan tambahan -aiplatform:

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-aiplatform
  2. Periksa nama bucket yang Anda buat.

    echo $BUCKET_NAME
  3. Pilih region untuk bucket Anda dan tetapkan variabel lingkungan REGION.

    Gunakan region yang sama tempat Anda berencana menjalankan tugas Prediksi AI Platform. Lihat region yang tersedia untuk layanan AI Platform Prediction.

    Misalnya, kode berikut membuat REGION dan menetapkannya ke us-central1:

    REGION=us-central1
  4. Buat bucket baru:

    gsutil mb -l $REGION gs://$BUCKET_NAME

Upload file model yang diekspor ke Cloud Storage

Jalankan perintah berikut untuk mengupload file model tersimpan ke bucket Anda di Cloud Storage:

gsutil cp ./model.joblib gs://your_bucket_name/model.joblib

Memformat data untuk prediksi

Sebelum mengirim permintaan prediksi online, Anda harus memformat data pengujian guna mempersiapkannya untuk digunakan oleh layanan prediksi Prediksi AI Platform. Pastikan format instance input sesuai dengan yang diharapkan model Anda.

gcloud

Buat file input.json dengan setiap instance input di baris terpisah. Contoh berikut menggunakan sepuluh instance data pertama dalam daftar test_features yang ditentukan dalam langkah sebelumnya.

    [25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"]
    [38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"]
    [28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"]
    [44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"]
    [18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"]
    [34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"]
    [29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"]
    [63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"]
    [24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"]
    [55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]

Perhatikan bahwa format instance input harus sesuai dengan yang diharapkan oleh model Anda. Dalam contoh ini, model Sensus memerlukan 14 fitur, jadi input Anda harus berupa matriks bentuk (num_instances, 14).

REST API

Buat file input.json yang diformat dengan setiap instance input di baris terpisah. Contoh berikut menggunakan sepuluh instance data pertama dalam daftar test_features yang ditentukan dalam langkah sebelumnya.

{
  "instances": [

    [25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"],
    [38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"],
    [28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"],
    [44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"],
    [18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"],
    [34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"],
    [29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"],
    [63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"],
    [24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"],
    [55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]
  ]
}

Perhatikan bahwa format instance input harus sesuai dengan yang diharapkan oleh model Anda. Dalam contoh ini, model Sensus memerlukan 14 fitur, sehingga input Anda harus berupa matriks bentuk (num_instances, 14).

Lihat informasi selengkapnya tentang memformat input untuk prediksi online.

Menguji model Anda dengan prediksi lokal

Anda dapat menggunakan perintah gcloud ai-platform local predict untuk menguji bagaimana model Anda menyajikan prediksi sebelum men-deploy-nya ke AI Platform Prediction. Perintah ini menggunakan dependensi di lingkungan lokal Anda untuk melakukan prediksi dan menampilkan hasil dalam format yang sama dengan yang digunakan gcloud ai-platform predict saat melakukan prediksi online. Menguji prediksi secara lokal dapat membantu Anda menemukan error sebelum dikenai biaya untuk permintaan prediksi online.

Untuk argumen --model-dir, tentukan direktori yang berisi model machine learning yang diekspor, baik di mesin lokal Anda maupun di Cloud Storage. Untuk argumen --framework, tentukan tensorflow, scikit-learn, atau xgboost. Anda tidak dapat menggunakan perintah gcloud ai-platform local predict dengan rutinitas prediksi kustom.

Contoh berikut menunjukkan cara melakukan prediksi lokal:

gcloud ai-platform local predict --model-dir LOCAL_OR_CLOUD_STORAGE_PATH_TO_MODEL_DIRECTORY/ \
  --json-instances LOCAL_PATH_TO_PREDICTION_INPUT.JSON \
  --framework NAME_OF_FRAMEWORK

Men-deploy model dan versi

AI Platform Prediction mengatur model terlatih Anda menggunakan resource model dan versi. Model Prediksi AI Platform adalah penampung untuk versi model machine learning Anda.

Untuk men-deploy model, buat resource model di AI Platform Prediction, buat versi model tersebut, lalu tautkan versi model ke file model yang disimpan di Cloud Storage.

Membuat resource model

AI Platform Prediction menggunakan resource model untuk mengatur berbagai versi model Anda.

Untuk saat ini, Anda harus memutuskan apakah ingin versi model milik model ini menggunakan endpoint regional atau endpoint global. Pada umumnya, pilih endpoint regional. Jika Anda memerlukan fungsi yang hanya tersedia pada jenis mesin (MLS1) lama, gunakan endpoint global.

Anda juga harus memutuskan untuk saat ini apakah ingin versi model milik model ini mengekspor log apa pun saat model tersebut menayangkan prediksi. Contoh berikut tidak mengaktifkan logging. Pelajari cara mengaktifkan logging.

console

  1. Buka halaman Model Prediksi AI Platform di Konsol Google Cloud:

    Buka halaman Models

  2. Klik tombol Model Baru di bagian atas halaman Model. Tindakan ini akan mengarahkan Anda ke halaman Buat model.

  3. Masukkan nama unik untuk model Anda di kolom Nama model.

  4. Jika kotak Use regional endpoint dicentang, AI Platform Prediction akan menggunakan endpoint regional. Untuk menggunakan endpoint global, hapus centang pada kotak Use regional endpoint.

  5. Dari menu drop-down Region, pilih lokasi untuk node prediksi Anda. Region yang tersedia berbeda-beda bergantung pada apakah Anda menggunakan endpoint regional atau endpoint global.

  6. Klik Create.

  7. Pastikan Anda telah kembali ke halaman Model, dan bahwa model baru Anda muncul dalam daftar.

gcloud

Endpoint regional

Jalankan perintah berikut:

gcloud ai-platform models create MODEL_NAME \
  --region=REGION

Ganti kode berikut:

Jika Anda tidak menentukan flag --region, gcloud CLI akan meminta Anda untuk memilih endpoint regional (atau menggunakan us-central di endpoint global).

Selain itu, Anda dapat menetapkan properti ai_platform/region ke region tertentu untuk memastikan gcloud CLI selalu menggunakan endpoint regional yang sesuai untuk AI Platform Prediction, meskipun Anda tidak menentukan flag --region. (Konfigurasi ini tidak berlaku untuk perintah dalam grup perintah gcloud ai-platform operations.)

Endpoint global

Jalankan perintah berikut:

gcloud ai-platform models create MODEL_NAME \
  --regions=REGION

Ganti kode berikut:

Jika Anda tidak menentukan flag --regions, gcloud CLI akan meminta Anda untuk memilih endpoint regional (atau menggunakan us-central1 di endpoint global).

REST API

Endpoint regional

  1. Format permintaan Anda dengan menempatkan objek model dalam isi permintaan. Setidaknya, tentukan nama untuk model Anda dengan mengganti MODEL_NAME dalam contoh berikut:

    {
      "name": "MODEL_NAME"
    }
    
  2. Lakukan panggilan REST API ke URL berikut, dengan mengganti PROJECT_ID dengan project ID Google Cloud Anda:

    POST https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    Ganti kode berikut:

    Misalnya, Anda dapat membuat permintaan berikut menggunakan perintah curl. Perintah ini mengizinkan permintaan menggunakan kredensial yang terkait dengan penginstalan Google Cloud CLI Anda.

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    API menampilkan respons yang mirip dengan berikut ini:

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

Endpoint global

  1. Format permintaan Anda dengan menempatkan objek model dalam isi permintaan. Setidaknya, tentukan nama untuk model Anda dengan mengganti MODEL_NAME dalam contoh berikut, dan tentukan region dengan mengganti REGION dengan region yang mendukung jenis mesin (MLS1) lama:

    {
      "name": "MODEL_NAME",
      "regions": ["REGION"]
    }
    
  2. Lakukan panggilan REST API ke URL berikut, dengan mengganti PROJECT_ID dengan project ID Google Cloud Anda:

    POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    Misalnya, Anda dapat membuat permintaan berikut menggunakan perintah curl. Perintah ini mengizinkan permintaan menggunakan kredensial yang terkait dengan penginstalan Google Cloud CLI Anda.

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME", "regions": ["REGION"]}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    API menampilkan respons yang mirip dengan berikut ini:

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

Lihat AI Platform Prediction model API untuk detail selengkapnya.

Membuat versi model

Sekarang Anda siap untuk membuat versi model dengan model terlatih yang sebelumnya diupload ke Cloud Storage. Saat membuat versi, Anda dapat menentukan sejumlah parameter. Daftar berikut menjelaskan parameter umum, beberapa di antaranya diperlukan:

  • name: harus unik dalam model AI Platform Prediction.
  • deploymentUri: jalur ke direktori model Anda di Cloud Storage.

    • Jika Anda men-deploy model TensorFlow, ini adalah direktoriSavedModel.
    • Jika Anda men-deploy model scikit-learn atau XGBoost, ini adalah direktori yang berisi file model.joblib, model.pkl, atau model.bst Anda.
    • Jika Anda men-deploy rutinitas prediksi kustom, ini adalah direktori yang berisi semua artefak model Anda. Ukuran total direktori ini harus 500 MB atau kurang.
  • framework: TENSORFLOW, SCIKIT_LEARN, atau XGBOOST.

  • runtimeVersion: versi runtime berdasarkan dependensi yang diperlukan model Anda. Jika Anda men-deploy model scikit-learn atau model XGBoost, versi setidaknya harus dalam versi 1.4. Jika berencana menggunakan versi model untuk prediksi batch, Anda harus menggunakan runtime versi 2.1 atau yang lebih lama.

  • pythonVersion: harus ditetapkan ke "3.5" (untuk runtime versi 1.4 hingga 1.14) atau "3.7" (untuk versi runtime 1.15 dan yang lebih baru) agar kompatibel dengan file model yang diekspor menggunakan Python 3. Juga dapat ditetapkan ke "2.7" jika digunakan dengan runtime versi 1.15 atau yang lebih lama.

  • machineType (opsional): jenis mesin virtual yang digunakan AI Platform Prediction untuk node yang menyajikan prediksi. Pelajari jenis mesin lebih lanjut. Jika tidak ditetapkan, setelan ini akan ditetapkan secara default ke n1-standard-2 di endpoint regional dan mls1-c1-m2 di endpoint global.

Lihat informasi selengkapnya tentang setiap parameter ini, serta parameter tambahan yang kurang umum, di referensi API untuk resource versi.

Selain itu, jika Anda membuat model di endpoint regional, pastikan untuk membuat versi di endpoint regional yang sama juga.

console

  1. Buka halaman Model Prediksi AI Platform di Konsol Google Cloud:

    Buka halaman Models

  2. Di halaman Models, pilih nama resource model yang ingin digunakan untuk membuat versi. Tindakan ini akan mengarahkan Anda ke halaman Model Details.

  3. Klik tombol New Version di bagian atas halaman Model Details. Tindakan ini akan mengarahkan Anda ke halaman Buat versi.

  4. Masukkan nama versi di kolom Name. Jika ingin, masukkan deskripsi untuk versi Anda di kolom Description.

  5. Masukkan informasi berikut tentang cara melatih model Anda di kotak dropdown yang sesuai:

    • Pilih Versi Python yang digunakan untuk melatih model Anda.
    • Pilih Framework dan Framework version.
    • Pilih versi runtime ML. Pelajari versi runtime AI Platform Prediction lebih lanjut.
  6. Pilih Jenis mesin untuk menjalankan prediksi online.

  7. Di kolom Model URI, masukkan lokasi bucket Cloud Storage tempat Anda mengupload file model. Anda dapat menggunakan tombol Browse untuk menemukan jalur yang benar.

    Pastikan untuk menentukan jalur ke direktori yang berisi file, bukan jalur ke file model itu sendiri. Misalnya, gunakan gs://your_bucket_name/model-dir/, bukan gs://your_bucket_name/model-dir/saved_model.pb atau gs://your_bucket_name/model-dir/model.pkl.

  8. Pilih opsi Scaling untuk deployment prediksi online:

    • Jika Anda memilih "Penskalaan otomatis", kolom Jumlah node minimum opsional akan ditampilkan. Anda dapat memasukkan jumlah minimum node agar tetap berjalan setiap saat, setelah skala layanan diperkecil.

    • Jika memilih "Penskalaan manual", Anda harus memasukkan Jumlah node yang ingin selalu dijalankan.

    Pelajari bagaimana opsi penskalaan berbeda bergantung pada jenis mesin.

    Pelajari lebih lanjut penetapan harga untuk biaya prediksi.

  9. Untuk menyelesaikan pembuatan versi model, klik Simpan.

gcloud

  1. Tetapkan variabel lingkungan untuk menyimpan jalur ke direktori Cloud Storage tempat biner model Anda berada, nama model, nama versi, dan pilihan framework Anda.

    Saat membuat versi dengan gcloud CLI, Anda dapat memberikan nama framework dalam huruf besar dengan garis bawah (misalnya, SCIKIT_LEARN) atau dalam huruf kecil dengan tanda hubung (misalnya, scikit-learn). Kedua opsi tersebut menghasilkan perilaku yang identik.

    Ganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
    

  2. Buat versi:

    gcloud ai-platform versions create $VERSION_NAME \
      --model=$MODEL_NAME \
      --origin=$MODEL_DIR \
      --runtime-version=2.11 \
      --framework=$FRAMEWORK \
      --python-version=3.7 \
      --region=REGION \
      --machine-type=MACHINE_TYPE
    

    Ganti kode berikut:

    • REGION: Region dari endpoint regional tempat Anda membuat model. Jika Anda membuat model di endpoint global, hapus flag --region.

    • MACHINE_TYPE: Jenis mesin, yang menentukan resource komputasi yang tersedia untuk node prediksi Anda.

    Pembuatan versi memerlukan waktu beberapa menit. Jika sudah siap, Anda akan melihat output berikut:

    Creating version (this might take a few minutes)......done.
  3. Dapatkan informasi tentang versi baru Anda:

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

    Anda akan melihat output yang serupa dengan ini:

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: [YOUR-FRAMEWORK-NAME]
    machineType: mls1-c1-m2
    name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
    pythonVersion: '3.7'
    runtimeVersion: '2.11'
    state: READY

REST API

  1. Format isi permintaan Anda agar memuat objek versi. Contoh ini menentukan versi name, deploymentUri, runtimeVersion, framework, dan machineType. Ganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai:

    {
      "name": "[YOUR-VERSION-NAME]",
      "deploymentUri": "gs://your_bucket_name/",
      "runtimeVersion": "2.11",
      "framework": "[YOUR_FRAMEWORK_NAME]",
      "pythonVersion": "3.7",
      "machineType": "[YOUR_MACHINE_TYPE]"
    }
    
  2. Lakukan panggilan REST API Anda ke jalur berikut, dengan mengganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai:

    POST https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
    

    Ganti REGION dengan region endpoint regional tempat Anda membuat model. Jika Anda membuat model di endpoint global, gunakan ml.googleapis.com.

    Misalnya, Anda dapat membuat permintaan berikut menggunakan perintah curl:

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
    

    Pembuatan versi memerlukan waktu beberapa menit. Jika sudah siap, Anda akan melihat output seperti ini:

    {
      "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata",
        "createTime": "2018-07-07T02:51:50Z",
        "operationType": "CREATE_VERSION",
        "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
        "version": {
          "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]",
          "deploymentUri": "gs://your_bucket_name",
          "createTime": "2018-07-07T02:51:49Z",
          "runtimeVersion": "2.11",
          "framework": "[YOUR_FRAMEWORK_NAME]",
          "machineType": "[YOUR_MACHINE_TYPE]",
          "pythonVersion": "3.7"
        }
      }
    }
    

Kirim permintaan prediksi online

Setelah Anda berhasil membuat versi, AI Platform Prediction memulai server baru yang siap untuk menayangkan permintaan prediksi.

Bagian ini menunjukkan hal berikut:

  1. Cara menguji model Anda menggunakan gcloud dengan mengirimkan permintaan untuk set data yang lebih kecil.
  2. Cara mengirim permintaan yang lebih besar untuk set data pengujian lengkap dengan menggunakan library klien Python, dan melihat sepuluh hasil pertama.

gcloud

Bagian ini menjelaskan cara mengirim permintaan prediksi menggunakan file input.json yang Anda buat di langkah sebelumnya.

  1. Tetapkan variabel lingkungan untuk nama model, nama versi, dan nama file input Anda. Ganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai:

    MODEL_NAME="[YOUR-MODEL-NAME]"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    INPUT_FILE="input.json"
    
  2. Kirim permintaan prediksi:

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

    Hasil prediksi menampilkan True jika pendapatan orang tersebut diprediksi lebih besar dari $50.000 per tahun, dan False jika tidak. Misalnya, sepuluh hasil pertama Anda mungkin tampak seperti berikut:

    [False, False, False, True, False, False, False, False, False, False]
    

REST API

Bagian ini menjelaskan cara mengirim permintaan prediksi menggunakan file input.json yang Anda buat di langkah sebelumnya.

Kirim permintaan prediksi:

curl -X POST -H "Content-Type: application/json" -d @input.json \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
"https://ml.googleapis.com/v1/projects/${PROJECT_ID}/models/${MODEL_NAME}/versions/${VERSION_NAME}:predict"

Hasil prediksi menampilkan True jika pendapatan orang tersebut diprediksi lebih besar dari $50.000 per tahun, dan False jika tidak. Hasil prediksi ditampilkan di konsol sebagai daftar nilai boolean. Contohnya, sepuluh hasil pertama Anda mungkin tampak mirip dengan berikut ini:

{"predictions": [false, false, false, true, false, false, false, false, false, false]}

Python

Sampel ini menggunakan library klien Python guna mengirim permintaan prediksi untuk seluruh set data Sensus, dan mencetak sepuluh hasil pertama. Lihat informasi selengkapnya tentang cara menggunakan Library Klien Python.

Ganti [VALUES_IN_BRACKETS] dengan nilai yang sesuai:

import googleapiclient.discovery

# Fill in your PROJECT_ID, VERSION_NAME and MODEL_NAME before running
# this code.

PROJECT_ID = [YOUR PROJECT_ID HERE]
VERSION_NAME = [YOUR VERSION_NAME HERE]
MODEL_NAME = [YOUR MODEL_NAME HERE]

service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
name += '/versions/{}'.format(VERSION_NAME)

# Due to the size of the data, it needs to be split in 2
first_half = test_features[:int(len(test_features)/2)]
second_half = test_features[int(len(test_features)/2):]

complete_results = []
for data in [first_half, second_half]:
    responses = service.projects().predict(
        name=name,
        body={'instances': data}
    ).execute()

    if 'error' in responses:
        print(response['error'])
    else:
        complete_results.extend(responses['predictions'])

# Print the first 10 responses
for i, response in enumerate(complete_results[:10]):
    print('Prediction: {}\tLabel: {}'.format(response, test_labels[i]))

Hasil prediksi menampilkan True jika pendapatan orang tersebut diprediksi lebih besar dari $50.000 per tahun, dan False jika tidak. Misalnya, sepuluh hasil pertama Anda mungkin tampak seperti berikut:

Prediction: False Label: False
Prediction: False Label: False
Prediction: True  Label: True
Prediction: True  Label: True
Prediction: False Label: False
Prediction: False Label: False
Prediction: False Label: False
Prediction: True  Label: True
Prediction: False Label: False
Prediction: False Label: False

Lihat informasi selengkapnya tentang setiap parameter input di detail Permintaan Prediksi AI Platform Prediction API.

Tentang data

Set Data Pendapatan Sensus yang digunakan sampel ini untuk pelatihan dihosting oleh UC Irvine Machine Learning Repository.

Data sensus disediakan oleh: Lichman, M. (2013). Repositori UCI Machine Learning http://archive.ics.uci.edu/ml. Irvine, CA: University of California, School of Information and Computer Science. Set data ini tersedia secara publik untuk digunakan oleh siapa saja berdasarkan persyaratan berikut yang disediakan oleh Sumber Set Data - http://archive.ics.uci.edu/ml - dan disediakan "APA ADANYA" tanpa jaminan apa pun, baik tersurat maupun tersirat, dari Google. Google tidak bertanggung jawab atas kerusakan apa pun, baik secara langsung maupun tidak langsung, akibat penggunaan set data.

Langkah selanjutnya