Tutorial Lengkap Vertex AI: Platform ML Terpadu di Google Cloud
Vertex AI adalah platform machine learning terpadu Google Cloud yang menggabungkan semua layanan ML Google Cloud. Platform ini menyediakan tools untuk membangun, mendeploy, dan menskalakan model ML dengan AutoML dan custom training.
Mengapa Vertex AI?
Manfaat Utama:- Platform terpadu: Semua tools ML dalam satu tempat
- AutoML: Pembuatan model tanpa kode
- Custom training: Kontrol penuh dengan kode custom
- MLOps: Built-in pipelines dan monitoring
- Scalable: Infrastruktur enterprise-grade
- Datasets
- Training (AutoML dan Custom)
- Model Registry
- Endpoints
- Pipelines
- Feature Store
- Experiments
Prerequisites
pip install google-cloud-aiplatform
Autentikasi
gcloud auth login
gcloud config set project your-project-id
Setup
1. Inisialisasi Vertex AI
from google.cloud import aiplatform
aiplatform.init(
project="your-project-id",
location="us-central1",
stagingbucket="gs://your-bucket"
)
2. Aktifkan APIs
gcloud services enable aiplatform.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable storage.googleapis.com
Datasets
1. Buat Tabular Dataset
from google.cloud import aiplatform
Buat dari BigQuery
dataset = aiplatform.TabularDataset.create(
displayname="customer-churn-dataset",
bqsource="bq://project.dataset.table"
)
Buat dari GCS
dataset = aiplatform.TabularDataset.create(
displayname="customer-churn-dataset",
gcssource="gs://bucket/data/train.csv"
)
print(f"Dataset dibuat: {dataset.resourcename}")
2. Buat Image Dataset
# Buat image dataset
imagedataset = aiplatform.ImageDataset.create(
displayname="product-images",
gcssource="gs://bucket/images/",
importschemauri=aiplatform.schema.dataset.ioformat.image.singlelabelclassification
)
3. Buat Text Dataset
# Buat text dataset
textdataset = aiplatform.TextDataset.create(
displayname="sentiment-dataset",
gcssource="gs://bucket/text/data.jsonl",
importschemauri=aiplatform.schema.dataset.ioformat.text.singlelabelclassification
)
AutoML Training
1. AutoML Tabular
# Buat AutoML tabular training job
job = aiplatform.AutoMLTabularTrainingJob(
displayname="churn-automl",
optimizationpredictiontype="classification",
optimizationobjective="maximize-au-roc"
)
Train model
model = job.run(
dataset=dataset,
targetcolumn="churn",
trainingfractionsplit=0.8,
validationfractionsplit=0.1,
testfractionsplit=0.1,
budgetmillinodehours=1000,
modeldisplayname="churn-model"
)
print(f"Model ditraining: {model.resourcename}")
2. AutoML Image Classification
# Buat AutoML image training job
job = aiplatform.AutoMLImageTrainingJob(
displayname="image-classifier",
predictiontype="classification",
multilabel=False
)
Train model
model = job.run(
dataset=imagedataset,
trainingfractionsplit=0.8,
validationfractionsplit=0.1,
testfractionsplit=0.1,
budgetmillinodehours=8000,
modeldisplayname="product-classifier"
)
3. AutoML Text Classification
# Buat AutoML text training job
job = aiplatform.AutoMLTextTrainingJob(
displayname="sentiment-classifier",
predictiontype="classification",
multilabel=False
)
Train model
model = job.run(
dataset=textdataset,
trainingfractionsplit=0.8,
validationfractionsplit=0.1,
testfractionsplit=0.1,
modeldisplayname="sentiment-model"
)
Custom Training
1. Custom Training Job
from google.cloud import aiplatform
Definisikan custom training job
job = aiplatform.CustomTrainingJob(
displayname="custom-sklearn-training",
scriptpath="train.py",
containeruri="us-docker.pkg.dev/vertex-ai/training/sklearn-cpu.1-0:latest",
requirements=["pandas", "scikit-learn"],
modelservingcontainerimageuri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest"
)
Jalankan training
model = job.run(
dataset=dataset,
modeldisplayname="sklearn-model",
machinetype="n1-standard-4",
replicacount=1,
args=["--epochs", "100", "--batch-size", "32"]
)
2. Training Script
# train.py
import argparse
import os
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.modelselection import traintestsplit
from sklearn.metrics import accuracyscore
import joblib
from google.cloud import storage
def main():
parser = argparse.ArgumentParser()
parser.addargument("--epochs", type=int, default=100)
parser.addargument("--batch-size", type=int, default=32)
args = parser.parseargs()
# Load data dari environment variable
trainingdatauri = os.environ.get("AIPTRAININGDATAURI")
df = pd.readcsv(trainingdatauri)
X = df.drop("target", axis=1)
y = df["target"]
Xtrain, Xtest, ytrain, ytest = traintestsplit(
X, y, testsize=0.2, randomstate=42
)
# Train model
model = RandomForestClassifier(nestimators=args.epochs)
model.fit(Xtrain, ytrain)
# Evaluasi
predictions = model.predict(Xtest)
accuracy = accuracyscore(ytest, predictions)
print(f"Accuracy: {accuracy}")
# Simpan model
modeldir = os.environ.get("AIPMODELDIR")
joblib.dump(model, os.path.join(modeldir, "model.joblib"))
if name == "main":
main()
3. Custom Container Training
# Definisikan custom container training job
job = aiplatform.CustomContainerTrainingJob(
displayname="pytorch-training",
containeruri="gcr.io/your-project/pytorch-training:latest",
modelservingcontainerimageuri="gcr.io/your-project/pytorch-serving:latest"
)
Jalankan training
model = job.run(
dataset=dataset,
modeldisplayname="pytorch-model",
machinetype="n1-standard-8",
acceleratortype="NVIDIATESLAV100",
acceleratorcount=1,
replicacount=1
)
4. Dockerfile untuk Custom Container
FROM pytorch/pytorch:1.9.0-cuda10.2-cudnn7-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY train.py .
ENTRYPOINT ["python", "train.py"]
Hyperparameter Tuning
1. Definisikan Hyperparameter Tuning Job
from google.cloud import aiplatform
from google.cloud.aiplatform import hyperparametertuning as hpt
Definisikan hyperparameter spec
parameterspec = {
"learningrate": hpt.DoubleParameterSpec(min=0.001, max=0.1, scale="log"),
"numlayers": hpt.DiscreteParameterSpec(values=[2, 4, 6, 8], scale="linear"),
"dropout": hpt.DoubleParameterSpec(min=0.0, max=0.5, scale="linear")
}
Definisikan metric spec
metricspec = {"accuracy": "maximize"}
Buat hyperparameter tuning job
job = aiplatform.HyperparameterTuningJob(
displayname="hpt-training",
customjob=aiplatform.CustomJob(
displayname="hpt-custom-job",
workerpoolspecs=[{
"machinespec": {"machinetype": "n1-standard-4"},
"replicacount": 1,
"containerspec": {
"imageuri": "gcr.io/your-project/training:latest",
"args": []
}
}]
),
metricspec=metricspec,
parameterspec=parameterspec,
maxtrialcount=20,
paralleltrialcount=4,
searchalgorithm="random"
)
Jalankan job
job.run()
Model Registry
1. Upload Model
# Upload model ke registry
model = aiplatform.Model.upload(
displayname="sklearn-model",
artifacturi="gs://bucket/models/sklearn/",
servingcontainerimageuri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest"
)
print(f"Model diupload: {model.resourcename}")
2. List Models
# List semua models
models = aiplatform.Model.list()
for m in models:
print(f"{m.displayname}: {m.resourcename}")
Dapatkan model spesifik
model = aiplatform.Model("projects/123/locations/us-central1/models/456")
print(f"Model: {model.displayname}")
3. Model Versioning
# Upload versi baru
newversion = aiplatform.Model.upload(
displayname="sklearn-model",
artifacturi="gs://bucket/models/sklearn-v2/",
servingcontainerimageuri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-0:latest",
parentmodel=model.resourcename
)
Endpoints dan Deployment
1. Buat Endpoint
# Buat endpoint
endpoint = aiplatform.Endpoint.create(
displayname="prediction-endpoint",
description="Production endpoint untuk predictions"
)
print(f"Endpoint dibuat: {endpoint.resourcename}")
2. Deploy Model
# Deploy model ke endpoint
endpoint.deploy(
model=model,
deployedmodeldisplayname="sklearn-deployed",
machinetype="n1-standard-4",
minreplicacount=1,
maxreplicacount=5,
trafficpercentage=100,
sync=True
)
print("Model dideploy")
3. Buat Predictions
# Online prediction
instances = [
{"feature1": 1.0, "feature2": 2.0, "feature3": 3.0},
{"feature1": 4.0, "feature2": 5.0, "feature3": 6.0}
]
predictions = endpoint.predict(instances=instances)
print(f"Predictions: {predictions.predictions}")
4. Batch Prediction
# Buat batch prediction job
batchjob = model.batchpredict(
jobdisplayname="batch-prediction",
gcssource="gs://bucket/batch-input/",
gcsdestinationprefix="gs://bucket/batch-output/",
machinetype="n1-standard-4",
startingreplicacount=2,
maxreplicacount=10
)
batchjob.wait()
print(f"Batch prediction selesai: {batchjob.outputinfo}")
Experiments dan Tracking
1. Buat Experiment
# Inisialisasi experiment
aiplatform.init(experiment="my-experiment")
Mulai run
aiplatform.startrun("run-1")
Log parameters
aiplatform.logparams({
"learningrate": 0.01,
"epochs": 100,
"batchsize": 32
})
Log metrics
aiplatform.logmetrics({
"accuracy": 0.95,
"f1score": 0.93
})
Akhiri run
aiplatform.endrun()
2. Compare Runs
# Dapatkan experiment
experiment = aiplatform.Experiment("my-experiment")
Dapatkan semua runs
runsdf = experiment.getdataframe()
print(runsdf[["runname", "accuracy", "learningrate"]])
Best Practices
1. Resource Management
# Gunakan context manager untuk cleanup
with aiplatform.init(project="project", location="us-central1"):
# Kode ML Anda di sini
pass
Hapus resources setelah selesai
endpoint.undeployall()
endpoint.delete()
model.delete()
2. Optimasi Biaya
# Gunakan preemptible VMs untuk training
job = aiplatform.CustomTrainingJob(
displayname="cost-optimized-training",
scriptpath="train.py",
containeruri="training-container"
)
model = job.run(
machinetype="n1-standard-4",
replicacount=1,
bootdisktype="pd-ssd",
bootdisksize_gb=100
)
Kesimpulan
Vertex AI menyediakan:
Key takeaways:
- Gunakan AutoML untuk prototyping cepat
- Gunakan custom training untuk kontrol
- Register models untuk versioning
- Deploy ke managed endpoints
- Track experiments secara sistematis