GCP Vertex AI Temel Kullanımı: Başlangıç Rehberi
Makine öğrenmesi modellerini üretimde çalıştırmak, çoğu sysadmin için hâlâ “başkasının işi” gibi görünüyor. Ama artık değil. GCP Vertex AI, Google’ın tam yönetimli ML platformu olarak sadece veri bilimcilerin değil, altyapı yöneticilerinin de ilgilenmesi gereken bir servis haline geldi. Çünkü sonuçta bu modellerin çalışacağı ortamı, endpoint’leri, erişim politikalarını ve maliyet optimizasyonunu biz yönetiyoruz. Bu yazıda Vertex AI’ı sıfırdan kurarak gerçek dünyada nasıl kullanabileceğinizi adım adım ele alacağız.
Vertex AI Nedir ve Neden Önemli?
Vertex AI, Google’ın 2021’de birleştirdiği ML platformudur. Eskiden ayrı ayrı olan AI Platform, AutoML ve çeşitli ML araçlarını tek çatı altında topladı. Bir sysadmin perspektifinden bakıldığında şu anlama geliyor: Model eğitimi, depolama, servis etme ve izleme işlemlerini tek bir yerde, IAM entegrasyonuyla, Terraform ile yönetilebilir şekilde yapabiliyorsunuz.
Günlük hayattan bir senaryo düşünelim: Şirketinizin müşteri hizmetleri ekibi, gelen destek taleplerini otomatik sınıflandırmak istiyor. Bir NLP modeli eğitmek, bunu bir API olarak sunmak ve bu API’yi CRM sistemine bağlamak gerekiyor. İşte tam da burada Vertex AI devreye giriyor.
Ortam Kurulumu ve Ön Gereksinimler
Önce temel araçları hazırlayalım. GCP CLI (gcloud) kurulu olmayan bir sistemde hiçbir şey çalışmaz.
# gcloud SDK kurulumu (Linux)
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
# Mevcut konfigürasyonu kontrol et
gcloud config list
# Vertex AI için gerekli API'leri etkinleştir
gcloud services enable aiplatform.googleapis.com
gcloud services enable storage.googleapis.com
gcloud services enable containerregistry.googleapis.com
gcloud services enable cloudbuild.googleapis.com
# Python SDK kurulumu
pip install google-cloud-aiplatform
pip install google-auth
Vertex AI ile çalışırken proje değişkenlerini baştan tanımlamak hayat kurtarır. Her komutta tekrar tekrar yazmak yerine şunu yapın:
# Temel değişkenleri tanımla
export PROJECT_ID="sirket-ml-projesi"
export REGION="europe-west1"
export BUCKET_NAME="gs://${PROJECT_ID}-vertex-artifacts"
# Proje ve bölgeyi varsayılan olarak ayarla
gcloud config set project $PROJECT_ID
gcloud config set ai/region $REGION
# Artifact Storage için bucket oluştur
gsutil mb -l $REGION $BUCKET_NAME
# Service account oluştur ve gerekli rolleri ver
gcloud iam service-accounts create vertex-sa
--display-name="Vertex AI Service Account"
gcloud projects add-iam-policy-binding $PROJECT_ID
--member="serviceAccount:vertex-sa@${PROJECT_ID}.iam.gserviceaccount.com"
--role="roles/aiplatform.user"
gcloud projects add-iam-policy-binding $PROJECT_ID
--member="serviceAccount:vertex-sa@${PROJECT_ID}.iam.gserviceaccount.com"
--role="roles/storage.objectAdmin"
Burada dikkat edilmesi gereken nokta: roles/aiplatform.admin vermek yerine minimum gerekli rolleri verin. Üretim ortamında her service account’un sadece ihtiyacı olan yetkiye sahip olması şart.
Dataset Oluşturma ve Yönetme
Vertex AI’da her şey bir dataset’le başlar. Desteklenen veri tipleri şunlardır:
- Tabular: CSV, BigQuery tabloları
- Image: Sınıflandırma, nesne tespiti
- Text: Sınıflandırma, varlık çıkarma
- Video: Sınıflandırma, hareket tespiti
Destek talebi sınıflandırma senaryomuz için text dataset oluşturalım:
# dataset_olustur.py
from google.cloud import aiplatform
aiplatform.init(
project="sirket-ml-projesi",
location="europe-west1",
staging_bucket="gs://sirket-ml-projesi-vertex-artifacts"
)
# Text dataset oluştur
dataset = aiplatform.TextDataset.create(
display_name="destek-talepleri-dataset",
gcs_source="gs://sirket-ml-projesi-vertex-artifacts/data/destek_talepleri.jsonl",
import_schema_uri=aiplatform.schema.dataset.ioformat.text.single_label_classification,
sync=True
)
print(f"Dataset oluşturuldu: {dataset.resource_name}")
print(f"Dataset ID: {dataset.name}")
JSONL formatındaki veri dosyasının yapısı şöyle olmalı:
# Örnek veri formatı (destek_talepleri.jsonl)
cat << 'EOF' > destek_talepleri.jsonl
{"textSegment": {"content": "Şifremi sıfırlamak istiyorum"}, "annotations": [{"displayName": "hesap_erişimi"}]}
{"textSegment": {"content": "Faturamda hata var"}, "annotations": [{"displayName": "faturalandirma"}]}
{"textSegment": {"content": "Ürün teslimatım nerede"}, "annotations": [{"displayName": "kargo_takip"}]}
{"textSegment": {"content": "Aboneliğimi iptal etmek istiyorum"}, "annotations": [{"displayName": "abonelik"}]}
EOF
# Dosyayı GCS'e yükle
gsutil cp destek_talepleri.jsonl $BUCKET_NAME/data/
AutoML ile Model Eğitimi
Vertex AI’ın en güçlü özelliklerinden biri AutoML. Kendi ML pipeline’ınızı yazmadan, sadece veriyi verip modeli eğitebiliyorsunuz. Şirketin destek ekibi için bu ideal bir başlangıç noktası.
# model_egit.py
from google.cloud import aiplatform
aiplatform.init(
project="sirket-ml-projesi",
location="europe-west1"
)
# Mevcut dataset'i al
dataset = aiplatform.TextDataset("DATASET_ID_BURAYA")
# AutoML Text Classification job başlat
job = aiplatform.AutoMLTextTrainingJob(
display_name="destek-siniflandirma-v1",
prediction_type="classification",
multi_label=False
)
model = job.run(
dataset=dataset,
target_column="annotations",
training_fraction_split=0.8,
validation_fraction_split=0.1,
test_fraction_split=0.1,
model_display_name="destek-siniflandirma-model-v1",
budget_milli_node_hours=1000, # 1 saat, maliyet kontrolü için
sync=True
)
print(f"Model eğitimi tamamlandı: {model.resource_name}")
budget_milli_node_hours parametresi önemli. 1000 değeri 1 node saati anlamına geliyor. Büyük veri setleri için artırmanız gerekebilir ama test aşamasında düşük tutun, yoksa beklenmedik maliyet çıkar.
Custom Training Job Oluşturma
AutoML her zaman yeterli olmaz. Özelleştirilmiş model mimarisi gerektiğinde Custom Training kullanılır. Bunun için bir training script ve container image hazırlamak gerekiyor.
# trainer/task.py - Custom training scripti
import os
import argparse
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import joblib
from google.cloud import storage
def upload_model(model, bucket_name, model_dir):
"""Modeli GCS'e yükle"""
local_path = "/tmp/model.joblib"
joblib.dump(model, local_path)
client = storage.Client()
bucket = client.bucket(bucket_name)
blob = bucket.blob(f"{model_dir}/model.joblib")
blob.upload_from_filename(local_path)
print(f"Model yüklendi: gs://{bucket_name}/{model_dir}/model.joblib")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--bucket", type=str, required=True)
parser.add_argument("--model-dir", type=str, default="models/v1")
parser.add_argument("--n-estimators", type=int, default=100)
args = parser.parse_args()
# Veriyi GCS'den yükle
df = pd.read_csv(f"gs://{args.bucket}/data/egitim_verisi.csv")
X = df.drop("label", axis=1)
y = df["label"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Model eğitimi
model = RandomForestClassifier(n_estimators=args.n_estimators)
model.fit(X_train, y_train)
accuracy = model.score(X_test, y_test)
print(f"Test accuracy: {accuracy:.4f}")
upload_model(model, args.bucket, args.model_dir)
if __name__ == "__main__":
main()
Bu scripti Vertex AI’da çalıştırmak için:
# Custom training job başlat
gcloud ai custom-jobs create
--region=$REGION
--display-name="rf-siniflandirma-job"
--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri=europe-docker.pkg.dev/vertex-ai/training/scikit-learn-cpu.0-23:latest
--args="--bucket=${PROJECT_ID}-vertex-artifacts,--model-dir=models/rf-v1,--n-estimators=200"
# Job durumunu kontrol et
gcloud ai custom-jobs list --region=$REGION
# Belirli bir job'ın loglarını gör
gcloud ai custom-jobs stream-logs JOB_ID --region=$REGION
Model Deployment ve Endpoint Yönetimi
Model eğitimi bittikten sonra sıra onu servis etmeye geliyor. Vertex AI’da önce bir endpoint oluşturuyorsunuz, sonra modeli bu endpoint’e deploy ediyorsunuz.
# endpoint_deploy.py
from google.cloud import aiplatform
aiplatform.init(
project="sirket-ml-projesi",
location="europe-west1"
)
# Endpoint oluştur
endpoint = aiplatform.Endpoint.create(
display_name="destek-siniflandirma-endpoint",
description="Müşteri destek talebi sınıflandırma servisi"
)
# Modeli endpoint'e deploy et
model = aiplatform.Model("MODEL_ID_BURAYA")
deployed_model = endpoint.deploy(
model=model,
deployed_model_display_name="destek-siniflandirma-v1",
machine_type="n1-standard-2",
min_replica_count=1,
max_replica_count=5, # Auto-scaling
accelerator_type=None,
traffic_split={"0": 100} # Tüm trafiği yeni modele yönlendir
)
print(f"Endpoint: {endpoint.resource_name}")
min_replica_count ve max_replica_count parametrelerine dikkat edin. Bu değerler doğrudan maliyeti etkiliyor. Gece trafiği düşük olan bir endpoint için min_replica_count=0 ayarlayabilirsiniz, böylece istek gelmediğinde hiçbir şey çalışmaz ve boşuna para ödemezsiniz.
Prediction API Kullanımı
Endpoint hazır olduğunda tahmin almak çok basit:
# gcloud ile hızlı test
gcloud ai endpoints predict ENDPOINT_ID
--region=$REGION
--json-request='{
"instances": [
{"content": "Şifremi unuttum yardım edin"},
{"content": "Son faturamda fazla ücret kesilmiş"}
]
}'
Üretim ortamında Python SDK’sı daha kontrollü:
# prediction_test.py
from google.cloud import aiplatform
aiplatform.init(project="sirket-ml-projesi", location="europe-west1")
endpoint = aiplatform.Endpoint("ENDPOINT_ID_BURAYA")
test_instances = [
{"content": "Şifremi unuttum, nasıl sıfırlayabilirim?"},
{"content": "Geçen ay 2 kat ücret çıkmış faturama"},
{"content": "Paketim 5 gündür gelmedi nerede?"}
]
response = endpoint.predict(instances=test_instances)
for instance, prediction in zip(test_instances, response.predictions):
print(f"Metin: {instance['content'][:50]}")
print(f"Tahmin: {prediction['displayNames'][0]}")
print(f"Güven Skoru: {max(prediction['confidences']):.2%}")
print("---")
Monitoring ve Alerting Kurulumu
Üretim ortamında modelin doğruluğunu ve servis kalitesini izlemek şart. Vertex AI’ın Model Monitoring özelliği bunu sağlıyor.
# monitoring_kur.py
from google.cloud import aiplatform
from google.cloud.aiplatform import model_monitoring
aiplatform.init(project="sirket-ml-projesi", location="europe-west1")
# Monitoring job oluştur
monitoring_job = aiplatform.ModelDeploymentMonitoringJob.create(
display_name="destek-model-monitoring",
endpoint=endpoint.resource_name,
logging_sampling_strategy=model_monitoring.RandomSampleConfig(
random_sample_rate=0.2 # %20 isteği logla
),
drift_config=model_monitoring.DriftConfig(
features=["content"],
drift_thresholds={"content": model_monitoring.DriftThresholds(
categorical_metric_config=model_monitoring.CategoricalMetricConfig(
statistical_test="l_infinity",
default_categorical_alert_condition=model_monitoring.AlertCondition(
threshold=0.3
)
)
)}
),
monitor_interval=1 # Saatte bir kontrol
)
print(f"Monitoring job: {monitoring_job.resource_name}")
Monitoring alertlerini Cloud Monitoring ile entegre etmek için:
# Alert policy oluştur - tahmin hatası oranı için
gcloud alpha monitoring policies create
--notification-channels=CHANNEL_ID
--display-name="Vertex AI Prediction Error Alert"
--condition-display-name="High error rate"
--condition-filter='resource.type="aiplatform.googleapis.com/Endpoint" AND metric.type="aiplatform.googleapis.com/prediction/online/error_count"'
--condition-threshold-value=10
--condition-threshold-duration=300s
--condition-comparison=COMPARISON_GT
Maliyet Optimizasyonu – Gerçek Dünya Taktikleri
Vertex AI faturaları sürpriz yapabilir. Şu önlemleri almak şart:
- Committed Use Discounts: Sürekli çalışan endpoint’ler için 1 yıllık commitment yapın, %30’a kadar indirim alırsınız
- min_replica_count=0: Gece veya düşük trafikli dönemlerde endpoint’i sıfır replica’ya ölçeklendirin
- Preemptible VM’ler: Custom training joblar için preemptible kullanın, %80 daha ucuz
- Region seçimi:
us-central1genellikle diğer bölgelerden daha ucuz, gecikme toleransınız varsa tercih edin - Budget alertleri: Mutlaka Cloud Billing budget alert kurun
# Preemptible worker ile training job
gcloud ai custom-jobs create
--region=$REGION
--display-name="ucuz-training-job"
--worker-pool-spec=machine-type=n1-standard-8,replica-count=1,container-image-uri=gcr.io/myproject/trainer:latest,accelerator-type=NVIDIA_TESLA_T4,accelerator-count=1
--enable-web-access
# Kullanılmayan endpoint'leri listele ve sil
gcloud ai endpoints list --region=$REGION --format="table(displayName,name,deployedModels.len())"
# Boş endpoint'i sil (önce modeli undeploy et)
gcloud ai endpoints undeploy-model ENDPOINT_ID
--region=$REGION
--deployed-model-id=DEPLOYED_MODEL_ID
gcloud ai endpoints delete ENDPOINT_ID --region=$REGION
Terraform ile Altyapı Yönetimi
Üretim ortamında her şeyi manuel yapmak kabul edilemez. Vertex AI kaynaklarını Terraform ile yönetmek mümkün:
# main.tf - Vertex AI Endpoint için Terraform
cat << 'EOF' > vertex_endpoint.tf
resource "google_vertex_ai_endpoint" "destek_endpoint" {
name = "destek-siniflandirma-endpoint"
display_name = "Destek Talebi Sınıflandırma"
location = var.region
project = var.project_id
labels = {
ortam = "production"
takim = "ml-ops"
}
}
resource "google_vertex_ai_dataset" "destek_dataset" {
display_name = "destek-talepleri"
metadata_schema_uri = "gs://google-cloud-aiplatform/schema/dataset/metadata/text_1.0.0.yaml"
region = var.region
project = var.project_id
labels = {
ortam = "production"
}
}
EOF
terraform init
terraform plan
terraform apply -auto-approve
CI/CD Pipeline ile Model Güncelleme
Model versiyonlama ve otomatik deployment için Cloud Build kullanabilirsiniz:
# cloudbuild.yaml
cat << 'EOF' > cloudbuild.yaml
steps:
- name: 'python:3.9'
id: 'test'
entrypoint: pip
args: ['install', '-r', 'requirements.txt']
- name: 'python:3.9'
id: 'train'
entrypoint: python
args: ['trainer/task.py', '--bucket=${_BUCKET}', '--model-dir=models/${BUILD_ID}']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
id: 'deploy'
entrypoint: gcloud
args:
- ai
- endpoints
- deploy-model
- ${_ENDPOINT_ID}
- --region=${_REGION}
- --model=${_MODEL_ID}
- --display-name=model-${BUILD_ID}
- --machine-type=n1-standard-2
- --min-replica-count=1
- --max-replica-count=3
- --traffic-split=0=100
substitutions:
_BUCKET: sirket-ml-projesi-vertex-artifacts
_REGION: europe-west1
_ENDPOINT_ID: 'ENDPOINT_ID'
_MODEL_ID: 'MODEL_ID'
EOF
# Pipeline'ı tetikle
gcloud builds submit --config=cloudbuild.yaml .
Troubleshooting – Sık Karşılaşılan Sorunlar
Vertex AI ile çalışırken en çok şu sorunlarla karşılaşıyorum:
- “Permission denied” hataları: Service account’a
roles/aiplatform.userveroles/storage.objectViewerrollerini verdiğinizden emin olun. Çoğu zaman GCS bucket’a erişim yetkisi eksik oluyor.
- Training job quota exceeded:
gcloud compute regions describe REGION --format="table(quotas.metric,quotas.limit,quotas.usage)"ile mevcut quota’nızı kontrol edin. Özellikle GPU quota’ları düşük gelir, Google’dan artış talebinde bulunun.
- Endpoint prediction timeout: Büyük modellerde ilk prediction yavaş gelir (cold start).
min_replica_count=1yaparak bunu çözebilirsiniz ama maliyet artar.
- Model artifact bulunamıyor:
AIP_MODEL_DIRenvironment variable’ının training script içinde doğru kullanıldığını kontrol edin. Custom container kullanıyorsanız model dosyasını bu path’e kaydetmeniz şart.
- SDK version uyumsuzluğu:
google-cloud-aiplatformkütüphanesi sık güncellenir.pip install --upgrade google-cloud-aiplatformyapın vechangelog‘u okuyun.
Sonuç
Vertex AI, başlangıçta karmaşık görünüyor ama temel konseptleri kavradıktan sonra son derece güçlü bir platform. Sysadmin perspektifinden bakıldığında en değerli özellikler şunlar: IAM entegrasyonu sayesinde güvenlik yönetimi tanıdık geliyor, Cloud Monitoring ile mevcut alerting altyapınıza kolayca entegre edebiliyorsunuz ve Terraform desteği sayesinde tüm ML altyapısını kod olarak yönetebiliyorsunuz.
Pratik öneri: Eğer şirketinizde ilk kez Vertex AI kullanıyorsanız, AutoML ile başlayın. Custom training’e geçmeden önce AutoML’in ne kadar iş çıkardığını görün. Çoğu zaman kurumsal ihtiyaçlar için AutoML fazlasıyla yeterli oluyor ve operasyonel yük çok daha az.
Maliyet konusunu asla hafife almayın. Bir endpoint unutup açık bırakmak, aylık ciddi faturaların gelmesine neden olabilir. Budget alertleri kurmak ve düzenli aralıklarla kullanılmayan kaynakları temizlemek, Vertex AI operasyonunun ayrılmaz bir parçası olmalı.
