Pelatihan dengan scikit-learn tentang Pelatihan AI Platform

Layanan pelatihan AI Platform Training mengelola resource komputasi di cloud untuk melatih model Anda. Halaman ini menjelaskan proses melatih model scikit-learn menggunakan Pelatihan AI Platform.

Tutorial ini melatih model sederhana untuk memprediksi tingkat pendapatan seseorang berdasarkan Set Data Sensus Pendapatan. Anda membuat aplikasi pelatihan secara lokal, menguploadnya ke Cloud Storage, dan mengirim tugas pelatihan. Layanan pelatihan AI Platform Training menulis outputnya ke bucket Cloud Storage Anda, dan membuat log dalam Logging.

Konten ini juga tersedia di GitHub sebagai notebook Jupyter.

Cara melatih model Anda di Pelatihan AI Platform

Anda dapat melatih model Anda di Pelatihan AI Platform dalam tiga langkah:

  • Membuat file model Python
    • Tambahkan kode untuk mendownload data dari Cloud Storage agar AI Platform Training dapat menggunakannya
    • Tambahkan kode untuk mengekspor dan menyimpan model ke Cloud Storage setelah Pelatihan AI Platform selesai melatih model tersebut
  • Menyiapkan paket aplikasi pelatihan
  • Mengirim tugas pelatihan

Sebelum memulai

Selesaikan langkah-langkah berikut untuk menyiapkan akun GCP, mengaktifkan AI Platform Training API, serta 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. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  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. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  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 Training, tetapi tidak cocok untuk pekerjaan pengembangan berkelanjutan.

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. Instal virtualenv
    virtualenv adalah alat untuk membuat lingkungan Python yang terisolasi. Periksa apakah Anda sudah menginstal virtualenv dengan menjalankan virtualenv --version. Jika tidak, instal virtualenv:

    pip install --user --upgrade virtualenv

    Guna membuat lingkungan pengembangan 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 keperluan 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 dipilih.

    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 AI Platform Training versi 2.11:

(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 diharapkan saat kode Anda dijalankan di AI Platform Training.

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:

Menyiapkan bucket Cloud Storage

Anda memerlukan bucket Cloud Storage untuk menyimpan kode pelatihan dan dependensi. Untuk tujuan tutorial ini, cara yang paling mudah adalah menggunakan bucket Cloud Storage khusus dalam project yang sama dengan yang Anda gunakan untuk Pelatihan AI Platform.

Jika menggunakan bucket di project yang berbeda, Anda harus memastikan bahwa akun layanan AI Platform Training Anda dapat mengakses kode pelatihan dan dependensi di Cloud Storage. Tanpa izin yang sesuai, tugas pelatihan Anda akan gagal. Lihat cara memberikan izin untuk penyimpanan.

Pastikan untuk menggunakan atau menyiapkan bucket di region yang sama dengan yang Anda gunakan untuk menjalankan tugas pelatihan. Lihat region yang tersedia untuk layanan AI Platform Training.

Bagian ini menunjukkan cara membuat bucket baru. Anda dapat menggunakan bucket yang ada, tetapi bucket tersebut 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 Training, Anda harus secara eksplisit memberikan akses ke akun layanan AI Platform Training.

  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 Pelatihan AI Platform. Lihat region yang tersedia untuk layanan AI Platform Training.

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

    REGION=us-central1
  4. Buat bucket baru:

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

Tentang data

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

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, yang timbul dari penggunaan set data ini.

Untuk memudahkan Anda, kami telah menghosting data di bucket Cloud Storage publik: gs://cloud-samples-data/ai-platform/sklearn/census_data/, yang dapat didownload dalam file pelatihan Python Anda.

Membuat file model Python

Anda dapat menemukan semua kode pelatihan untuk bagian ini di GitHub: train.py.

Bagian selanjutnya memberikan penjelasan tentang fungsi kode pelatihan.

Penyiapan

Impor library berikut dari Python, Google Cloud CLI, dan scikit-learn. Tetapkan variabel untuk nama bucket Cloud Storage Anda.

import datetime
import pandas as pd
import joblib

from google.cloud import storage

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

# TODO: REPLACE 'YOUR_BUCKET_NAME' with your GCS Bucket name.
BUCKET_NAME = 'YOUR_BUCKET_NAME'

Mendownload data dari Cloud Storage

Selama proses pengembangan standar, Anda mengupload data Anda sendiri ke Cloud Storage sehingga AI Platform Training dapat mengaksesnya. Data untuk tutorial ini dihosting di bucket publik: gs://cloud-samples-data/ai-platform/sklearn/census_data/

Kode di bawah mendownload set data pelatihan, adult.data. (Data evaluasi tersedia dalam adult.test, tetapi tidak digunakan dalam tutorial ini.)

# Public bucket holding the census data
bucket = storage.Client().bucket('cloud-samples-data')

# Path to the data inside the public bucket
blob = bucket.blob('ai-platform/sklearn/census_data/adult.data')
# Download the data
blob.download_to_filename('adult.data')

Tambahkan kode model Anda

Kode pelatihan model melakukan beberapa langkah dasar:

  • Menentukan dan memuat data
  • Mengonversi fitur kategoris ke fitur numerik
  • Mengekstrak fitur numerik dengan pipeline scikit-learn
  • Mengekspor dan menyimpan model ke Cloud Storage

Menentukan dan memuat data

# 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('./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).values.tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
train_labels = (raw_training_data['income-level'] == ' >50K').values.tolist()

Mengonversi fitur kategoris ke fitur numerik

# 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: [['State-gov']]
        # Build the scores array.
        scores = [0] * len(COLUMNS[:-1])
        # This column is the categorical column we want to extract.
        scores[i] = 1
        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)])))

Mengekstrak fitur numerik dengan pipeline scikit-learn

# 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)
])

Mengekspor dan menyimpan model ke Cloud Storage

Jika bucket Cloud Storage Anda berada dalam project yang sama dengan yang digunakan untuk AI Platform Training, Pelatihan AI Platform dapat membaca dan menulis ke bucket Anda. Jika tidak, Anda harus memastikan bahwa project yang Anda gunakan untuk menjalankan AI Platform Training dapat mengakses bucket Cloud Storage. Lihat cara memberikan izin untuk penyimpanan.

Pastikan untuk memberi nama file model model.pklatau model.joblib jika Anda ingin menggunakannya untuk meminta prediksi online dengan AI Platform Prediction.

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

# Upload the model to GCS
bucket = storage.Client().bucket(BUCKET_NAME)
blob = bucket.blob('{}/{}'.format(
    datetime.datetime.now().strftime('census_%Y%m%d_%H%M%S'),
    model))
blob.upload_from_filename(model)

Memverifikasi upload file model Cloud Storage (Opsional)

Di command line, lihat isi folder model tujuan untuk memverifikasi bahwa file model Anda telah diupload ke Cloud Storage. Tetapkan variabel lingkungan (BUCKET_NAME) untuk nama bucket, jika Anda belum melakukannya.

gsutil ls gs://$BUCKET_NAME/census_*

Output akan terlihat seperti berikut:

gs://[YOUR-PROJECT-ID]/census_[DATE]_[TIME]/model.joblib

Membuat paket aplikasi pelatihan

Cara termudah (dan direkomendasikan) untuk membuat paket aplikasi pelatihan adalah menggunakan gcloud untuk mengemas dan mengupload aplikasi tersebut saat Anda mengirimkan tugas pelatihan. Metode ini memungkinkan Anda membuat struktur file yang sangat sederhana hanya dengan dua file. Untuk tutorial ini, struktur file paket aplikasi pelatihan Anda akan terlihat seperti berikut:

census_training/
    __init__.py
    train.py
  1. Buat direktori secara lokal:

    mkdir census_training
    
  2. Buat file kosong bernama __init__.py:

    touch census_training/__init__.py
    
  3. Simpan kode pelatihan Anda dalam satu file Python, dan simpan file tersebut dalam direktori census_training Anda. Lihat kode contoh untuk train.py. Anda dapat menggunakan cURL untuk mendownload dan menyimpan file:

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-samples/master/sklearn/notebooks/census_training/train.py > census_training/train.py
    

Pelajari lebih lanjut cara memaketkan aplikasi pelatihan.

Mengirim tugas pelatihan

Di bagian ini, Anda menggunakan gcloud ai-platform jobs submit training untuk mengirimkan tugas pelatihan.

Menentukan parameter tugas pelatihan

Setel variabel lingkungan berikut untuk setiap parameter dalam permintaan tugas pelatihan Anda:

  • PROJECT_ID - Gunakan PROJECT_ID yang cocok dengan project Google Cloud Anda.
  • BUCKET_NAME - Nama bucket Cloud Storage Anda.
  • JOB_NAME - Nama yang akan digunakan untuk tugas (hanya campuran huruf besar/kecil, angka, dan garis bawah, yang dimulai dengan huruf). Dalam kasus ini: census_training_$(date +"%Y%m%d_%H%M%S")
  • JOB_DIR - Jalur ke lokasi Cloud Storage yang akan digunakan untuk file output tugas pelatihan Anda. Contoh, gs://$BUCKET_NAME/scikit_learn_job_dir.
  • TRAINING_PACKAGE_PATH - Jalur lokal ke direktori utama aplikasi pelatihan Anda. Dalam hal ini: ./census_training/.
  • MAIN_TRAINER_MODULE - Menentukan file mana yang harus dijalankan oleh layanan pelatihan Pelatihan AI Platform. Ini diformat sebagai [YOUR_FOLDER_NAME.YOUR_PYTHON_FILE_NAME]. Dalam hal ini, census_training.train.
  • REGION - Nama region yang Anda gunakan untuk menjalankan tugas pelatihan. Gunakan salah satu region yang tersedia untuk layanan pelatihan AI Platform Training. Pastikan bucket Cloud Storage Anda berada di region yang sama.
  • RUNTIME_VERSION - Anda harus menentukan versi runtime Pelatihan AI Platform yang mendukung scikit-learn. Dalam contoh ini, 2.11.
  • PYTHON_VERSION - Versi Python yang akan digunakan untuk tugas. Untuk tutorial ini, tentukan Python 3.7.
  • SCALE_TIER - Spesifikasi cluster yang telah ditentukan sebelumnya agar mesin dapat menjalankan tugas pelatihan Anda. Dalam hal ini, BASIC. Anda juga dapat menggunakan tingkat skala kustom untuk menentukan konfigurasi cluster Anda sendiri untuk pelatihan.

Untuk memudahkan Anda, variabel lingkungan untuk tutorial ini ada di bawah. Ganti [VALUES-IN-BRACKETS] dengan nilai yang sesuai:

PROJECT_ID=[YOUR-PROJECT-ID]
BUCKET_NAME=[YOUR-BUCKET-NAME]
JOB_NAME=census_training_$(date +"%Y%m%d_%H%M%S")
JOB_DIR=gs://$BUCKET_NAME/scikit_learn_job_dir
TRAINING_PACKAGE_PATH="[YOUR-LOCAL-PATH-TO-TRAINING-PACKAGE]/census_training/"
MAIN_TRAINER_MODULE=census_training.train
REGION=us-central1
RUNTIME_VERSION=2.11
PYTHON_VERSION=3.7
SCALE_TIER=BASIC

Kirim permintaan:

gcloud ai-platform jobs submit training $JOB_NAME \
  --job-dir $JOB_DIR \
  --package-path $TRAINING_PACKAGE_PATH \
  --module-name $MAIN_TRAINER_MODULE \
  --region $REGION \
  --runtime-version=$RUNTIME_VERSION \
  --python-version=$PYTHON_VERSION \
  --scale-tier $SCALE_TIER

Anda akan melihat output yang mirip dengan berikut ini:

Job [census_training_[DATE]_[TIME]] submitted successfully.
Your job is still active. You may view the status of your job with the command

  $ gcloud ai-platform jobs describe census_training_[DATE]_[TIME]

or continue streaming the logs with the command

  $ gcloud ai-platform jobs stream-logs census_training_[DATE]_[TIME]
jobId: census_training_[DATE]_[TIME]
state: QUEUED

Melihat log pelatihan Anda (opsional)

Pelatihan AI Platform merekam semua aliran data stdout dan stderr serta pernyataan logging. Log ini disimpan di Logging dan terlihat selama serta setelah eksekusi.

Untuk melihat log tugas pelatihan Anda:

Konsol

  1. Buka halaman Tugas Pelatihan AI Platform.

    Membuka tugas di konsol Google Cloud

  2. Pilih nama tugas pelatihan yang akan diperiksa. Tindakan ini akan mengarahkan Anda ke halaman Detail tugas untuk tugas pelatihan yang dipilih.

  3. Dalam detail tugas, pilih link Lihat log. Tindakan ini akan membuka halaman Logging tempat Anda dapat menelusuri dan memfilter log untuk tugas pelatihan yang dipilih.

gcloud

Anda dapat melihat log di terminal dengan gcloud ai-platform jobs stream-logs.

gcloud ai-platform jobs stream-logs $JOB_NAME

Langkah selanjutnya