Prerequisiti
Al giorno d'oggi, le organizzazioni devono affrontare le complessità dello spostamento dei carichi di lavoro AI sul cloud, e un tema si ripete: l'"ultimo miglio" della distribuzione è spesso l'ostacolo più grande. I team costruiscono modelli brillanti, ma metterli in produzione in modo affidabile, scalabile e senza prosciugare il budget diventa un enorme problema operativo. L'infrastruttura di inferenza personalizzata, in particolare, si trasforma rapidamente in una responsabilità ad alta manutenzione.
È qui che gli endpoint serverless di Vertex AI di GCP cambiano le carte in tavola. Non si tratta solo di esporre un modello tramite un'API; si tratta di farlo con un'infrastruttura gestita che si scala su richiesta e minimizza l'overhead operativo. In questa guida pratica, illustrerò il mio processo per distribuire un modello utilizzando questo approccio serverless, assicurando che sia pronto a fornire previsioni senza che tu debba preoccuparti del computing sottostante.
Il dilemma della distribuzione dell'IA
Nelle infrastrutture aziendali, il punto di fallimento più comune per le iniziative di IA è l'ultimo miglio: portare un modello da un notebook a un servizio scalabile e pronto per la produzione. Modelli brillanti finiscono per raccogliere polvere digitale perché il livello di servizio è un ripensamento. Gli endpoint serverless di Vertex AI affrontano questo problema frontalmente astrando la complessa gestione dell'infrastruttura, consentendo al tuo team di concentrarsi sulle prestazioni del modello e sull'integrazione aziendale, dove risiede il vero valore.
Prima di addentrarci, configuriamo il tuo ambiente Google Cloud. Avrai bisogno di un progetto GCP con fatturazione abilitata e le autorizzazioni corrette.
- Progetto GCP: È richiesto un progetto Google Cloud attivo. Utilizzerò le regioni europee per tutte le risorse (
europe-west1). gcloudCLI: L'SDK di Google Cloud deve essere installato e configurato. Consiglio sempre di utilizzare la versione stabile più recente. Puoi verificare la tua configurazione congcloud version.- Autenticazione: Autentica la tua CLI e configura il tuo progetto. Assicurati di sostituire
your-gcp-project-idcon il tuo ID progetto effettivo.
# Autenticazione con Google Cloud
gcloud auth login
# Imposta il tuo progetto e la regione predefinita
gcloud config set project your-gcp-project-id
gcloud config set compute/region europe-west1
- Python 3.12+: Utilizzeremo l'SDK di Vertex AI per Python per gestire i nostri asset di modello.
python3.12 --version
# Previsto: Python 3.12.x
- SDK di Vertex AI per Python: Installa la libreria client necessaria. Al momento della stesura,
1.50.0è una versione solida e recente.
pip install google-cloud-aiplatform==1.50.0 scikit-learn==1.4.2
Architettura e concetti fondamentali
Quando si parla di distribuzione di modelli AI, spesso si confonde il servizio API generale con il servizio specializzato di modelli ML. È qui che comprendere la distinzione tra Google Cloud Endpoints e Vertex AI Endpoints è fondamentale.
Google Cloud Endpoints è un servizio per lo sviluppo, la distribuzione e la gestione di API RESTful e gRPC. È un API Gateway che si trova di fronte a servizi come App Engine o GKE, gestendo aspetti come l'autenticazione, la limitazione di frequenza e il monitoraggio per applicazioni generiche. Utilizza una specifica OpenAPI per definire la superficie dell'API.
Gli endpoint di Vertex AI, d'altra parte, sono specificamente progettati per l'inferenza di machine learning in tempo reale. Quando progetto sistemi MLOps su GCP, li priorizzo per il servizio di modelli perché offrono un'esperienza completamente gestita:
- Infrastruttura gestita: Google gestisce il computing sottostante, la scalabilità, le patch e la manutenzione. Non effettui il provisioning né gestisci alcun server.
- Scalabilità automatica intelligente: Gli endpoint si scalano da zero per gestire i picchi di traffico e si riducono per minimizzare i costi, tutto automaticamente.
- Pagamento a consumo: Per le distribuzioni serverless, paghi per il computing consumato durante le richieste di previsione, non per le istanze inattive (anche se un
min-replica-countdi 1 comporterà costi). - MLOps integrato: Sono strettamente integrati con il Vertex AI Model Registry per il controllo delle versioni e con Cloud Monitoring per metriche e log.
Il nostro flusso architetturale è semplice: caricheremo un artefatto di modello addestrato nel Vertex AI Model Registry, effettueremo il provisioning di una risorsa Endpoint serverless e quindi distribuiremo il nostro modello registrato a quell'endpoint. L'endpoint espone quindi un'API di previsione sicura che le applicazioni client possono chiamare.
Con questa base, passiamo dalla teoria alla pratica.
Guida all'implementazione
Mettiamoci al lavoro. Distribuiremo un semplice modello di analisi del sentiment di scikit-learn su un endpoint serverless di Vertex AI. Questo processo rispecchia un flusso di lavoro reale, da un artefatto locale a un servizio cloud scalabile.
Passaggio 1: Abilitare l'API di Vertex AI
Per prima cosa, assicurati che l'API di Vertex AI sia abilitata nel tuo progetto.
# Abilita l'API di Vertex AI
gcloud services enable aiplatform.googleapis.com
Questa operazione può richiedere uno o due minuti per essere completata.
Passaggio 2: Creare un artefatto di modello locale
In un progetto reale, porteresti il tuo modello addestrato. Per questa guida, addestreremo un classificatore di sentiment "giocattolo". Un errore comune che vedo è il pickling di un modello e del suo pre-processore (come un tokenizer o un vettorizzatore) separatamente. Questo crea un incubo di dipendenze durante la distribuzione. L'approccio corretto è combinarli in un singolo oggetto sklearn.pipeline.Pipeline e farne il pickling.
Crea un file chiamato create_model.py:
# create_model.py
import pickle
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
# Dati di esempio
corpus = [
"I love this product, it's amazing!",
"This is terrible, I hate it.",
"It's okay, nothing special.",
"Absolutely fantastic experience."
]
labels = [1, 0, 0, 1] # 1 per positivo, 0 per negativo/neutro
# Crea una pipeline scikit-learn
# Questa raggruppa il vettorizzatore e il modello in un singolo artefatto
pipeline = Pipeline([
('tfidf', TfidfVectorizer()),
('clf', LogisticRegression())
])
# Addestra la pipeline
pipeline.fit(corpus, labels)
# Salva l'intera pipeline in un singolo file
with open('model.pkl', 'wb') as f:
pickle.dump(pipeline, f)
print("Pipeline saved as model.pkl")
Esegui lo script per generare il tuo file model.pkl.
python3.12 create_model.py
# Output atteso: Pipeline saved as model.pkl
Passaggio 3: Effettuare il provisioning dell'endpoint con Terraform
Insisto sull'Infrastructure as Code (IaC) per tutte le risorse cloud. Garantisce che le distribuzioni siano ripetibili, versionate e verificabili. Utilizzeremo Terraform per definire il nostro endpoint di Vertex AI.
Crea un file main.tf:
# main.tf
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.50.0"
}
}
}
provider "google" {
project = var.project_id
region = var.region
}
variable "project_id" {
description = "The GCP project ID."
type = string
}
variable "region" {
description = "The GCP region for Vertex AI resources."
type = string
default = "europe-west1"
}
resource "google_vertex_ai_endpoint" "sentiment_endpoint" {
name = "sentiment-analysis-endpoint"
display_name = "Sentiment Analysis Serverless Endpoint"
description = "Managed serverless endpoint for sentiment analysis."
project = var.project_id
location = var.region
labels = {
environment = "production"
service = "sentiment-analysis"
}
}
output "endpoint_resource_name" {
description = "The full resource name of the created Vertex AI Endpoint."
value = google_vertex_ai_endpoint.sentiment_endpoint.name
}
Successivamente, crea un file terraform.tfvars per contenere il tuo ID specifico del progetto. Ricorda di sostituire il placeholder con il tuo ID progetto GCP effettivo.
# terraform.tfvars
project_id = "your-gcp-project-id"
Ora, inizializza Terraform e applica la configurazione:
terraform init
terraform apply --auto-approve
Dopo un momento, Terraform restituirà il nome completo della risorsa del tuo endpoint. Annotalo; ti servirà a breve.
Europa (ovest) — modulo Terraform da copiare (`europe-west4`)
Per lo stesso schema del Passaggio 3 con europe-west4 (Paesi Bassi) come predefinito, usa il blocco seguente. europe-west1 (Belgio) è un’alternativa frequente; vedi le regioni Vertex AI. Dopo terraform apply, mantieni la stessa regione per il bucket GCS, il Model Registry e gli script dei Passaggi 4–5.
# ---------------------------------------------------------------------------
# Vertex AI online prediction endpoint — EU West (default: europe-west4)
# Locations: https://cloud.google.com/vertex-ai/docs/general/locations
# Provider: hashicorp/google — same pattern as Step 3 in this article.
# Upload and deploy the model (Steps 4–5) in the SAME region.
# ---------------------------------------------------------------------------
terraform {
required_version = ">= 1.5.0"
required_providers {
google = {
source = "hashicorp/google"
version = ">= 4.50.0"
}
}
}
provider "google" {
project = var.project_id
region = var.region
}
variable "project_id" {
description = "The GCP project ID."
type = string
}
variable "region" {
description = "Vertex AI region (EU West). Default europe-west4 (Netherlands); europe-west1 (Belgium) is a common alternative."
type = string
default = "europe-west4"
}
resource "google_vertex_ai_endpoint" "sentiment_endpoint_eu" {
name = "sentiment-analysis-endpoint-euw4"
display_name = "Sentiment Analysis Serverless Endpoint (EU)"
description = "Managed Vertex AI endpoint — EU West module (Terraform)."
project = var.project_id
location = var.region
labels = {
environment = "production"
service = "sentiment-analysis"
eu_module = "europe-west4"
}
}
output "endpoint_resource_name" {
description = "Full resource name of the Vertex AI endpoint (use in SDK / gcloud deploy steps)."
value = google_vertex_ai_endpoint.sentiment_endpoint_eu.name
}
Passaggio 4: Caricare il modello nel registro di Vertex AI
Con il provisioning del nostro endpoint, dobbiamo registrare il nostro modello. Caricheremo model.pkl in un bucket Google Cloud Storage (GCS) e quindi creeremo una risorsa Model nel Vertex AI Model Registry che vi punti.
Innanzitutto, crea un bucket GCS (se non ne hai uno) e carica il tuo modello. I nomi dei bucket devono essere globalmente unici.
# Sostituisci con il nome del tuo bucket unico
BUCKET_NAME="your-unique-model-bucket-ew1"
PROJECT_ID=$(gcloud config get-value project)
gcloud storage buckets create gs://${BUCKET_NAME} --project=${PROJECT_ID} --location=europe-west1
gcloud storage cp model.pkl gs://${BUCKET_NAME}/sentiment_model/model.pkl
Ora useremo l'SDK Python per registrare questo artefatto come una nuova versione del modello. Indicheremo a Vertex AI un container di servizio scikit-learn pre-costruito, che sa come caricare e servire un modello in formato pickle.
Crea un file chiamato upload_model.py:
# upload_model.py
import os
from google.cloud import aiplatform
# --- Configurazione ---
# Si prega di aggiornare questi valori con i propri
PROJECT_ID = os.getenv("GCLOUD_PROJECT")
REGION = "europe-west1"
BUCKET_NAME = "your-unique-model-bucket-ew1" # Il bucket che hai appena creato
MODEL_DISPLAY_NAME = "sentiment-analysis-model"
# --- Fine configurazione ---
# Il percorso GCS alla directory contenente l'artefatto del modello
ARTIFACT_URI = f"gs://{BUCKET_NAME}/sentiment_model/"
# Container ufficiale pre-costruito di Google per scikit-learn 1.4
SERVING_CONTAINER_IMAGE = "europe-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-4:latest"
# Inizializza l'SDK di Vertex AI
aiplatform.init(project=PROJECT_ID, location=REGION)
# Carica il modello nel Vertex AI Model Registry
model = aiplatform.Model.upload(
display_name=MODEL_DISPLAY_NAME,
artifact_uri=ARTIFACT_URI,
serving_container_image_uri=SERVING_CONTAINER_IMAGE,
)
print(f"Model uploaded. Resource name: {model.resource_name}")
# Per vedere il modello nella console, visita:
# https://console.cloud.google.com/vertex-ai/models?project={PROJECT_ID}
Esegui lo script. Assicurati di sostituire your-unique-model-bucket-ew1 con il nome del bucket che hai creato.
export GCLOUD_PROJECT=$(gcloud config get-value project)
python3.12 upload_model.py
Questo registrerà il tuo modello e ne restituirà il nome completo della risorsa, di cui avremo bisogno per il passaggio finale della distribuzione.
Passaggio 5: Distribuire il modello all'endpoint serverless
Questo è il passaggio finale in cui tutto si unisce. Prenderemo l'endpoint creato da Terraform e il modello che abbiamo appena registrato, e distribuiremo il modello ad esso. Questa è l'azione che innesca Vertex AI a effettuare il provisioning dell'infrastruttura serverless.
Crea deploy_model.py:
# deploy_model.py
import os
from google.cloud import aiplatform
# --- Configurazione ---
PROJECT_ID = os.getenv("GCLOUD_PROJECT")
REGION = "europe-west1"
# Usa il nome della risorsa dell'endpoint dall'output di terraform
ENDPOINT_RESOURCE_NAME = f"projects/{PROJECT_ID}/locations/{REGION}/endpoints/your-endpoint-numeric-id"
# Usa il nome della risorsa del modello dall'output di upload_model.py
MODEL_RESOURCE_NAME = f"projects/{PROJECT_ID}/locations/{REGION}/models/your-model-numeric-id"
DEPLOYED_MODEL_DISPLAY_NAME = "sentiment-model-v1-prod"
# --- Fine configurazione ---
aiplatform.init(project=PROJECT_ID, location=REGION)
# Ottieni un riferimento all'endpoint esistente
endpoint = aiplatform.Endpoint(ENDPOINT_RESOURCE_NAME)
print("Deploying model to endpoint...")
# Questo può richiedere 10-15 minuti
endpoint.deploy(
model=MODEL_RESOURCE_NAME,
deployed_model_display_name=DEPLOYED_MODEL_DISPLAY_NAME,
# Per serverless, definisci la 'forma' della macchina, non un tipo specifico
machine_type="n1-standard-2",
min_replica_count=1, # Può essere 0 per puro serverless, 1 per avvio a caldo
max_replica_count=3,
traffic_split={"0": 100}, # Invia il 100% del traffico a questo nuovo modello
sync=True, # Attendi il completamento della distribuzione
)
print(f"Model deployed successfully to endpoint: {endpoint.display_name}")
Prima di eseguire, devi sostituire your-endpoint-numeric-id e your-model-numeric-id con gli ID effettivi dei passaggi precedenti. Puoi trovarli nell'output del tuo terminale o nella console GCP.
export GCLOUD_PROJECT=$(gcloud config get-value project)
python3.12 deploy_model.py
Questo passaggio richiede diversi minuti poiché Vertex AI effettua il provisioning delle risorse, scarica l'immagine del container e distribuisce il modello. Sii paziente.
Passaggio 6: Invocare l'endpoint per la previsione
Una volta completata la distribuzione, il tuo endpoint è attivo. Inviagliamo alcuni dati di esempio.
Crea predict_sentiment.py:
# predict_sentiment.py
import os
from google.cloud import aiplatform
# --- Configurazione ---
PROJECT_ID = os.getenv("GCLOUD_PROJECT")
REGION = "europe-west1"
ENDPOINT_RESOURCE_NAME = f"projects/{PROJECT_ID}/locations/{REGION}/endpoints/your-endpoint-numeric-id"
# --- Fine configurazione ---
aiplatform.init(project=PROJECT_ID, location=REGION)
# Ottieni un riferimento all'endpoint
endpoint = aiplatform.Endpoint(ENDPOINT_RESOURCE_NAME)
instances = [
"This service is incredible, highly recommend!",
"I'm very disappointed with the slow response.",
"The food was average, nothing to write home about."
]
# Il metodo predict accetta una lista di istanze
# Il container pre-costruito restituisce una semplice lista di previsioni
response = endpoint.predict(instances=instances)
print("Prediction Response:")
print(response)
print("\n--- Results ---")
for i, instance in enumerate(instances):
prediction = response.predictions[i]
sentiment = "Positive" if prediction == 1 else "Negative/Neutral"
print(f"Input: '{instance}'\n -> Prediction: {sentiment} ({prediction})\n")
Ancora una volta, aggiorna your-endpoint-numeric-id ed esegui lo script.
export GCLOUD_PROJECT=$(gcloud config get-value project)
python3.12 predict_sentiment.py
Dovresti vedere le previsioni del modello per i tuoi input di esempio.
Risoluzione dei problemi e verifica
Le distribuzioni non sempre vanno lisce. Ecco la mia checklist per il debugging.
- Descrivere l'endpoint: Usa
gcloudper controllare lo stato dei modelli distribuiti.
# Sostituisci con l'ID numerico del tuo endpoint
gcloud ai endpoints describe your-endpoint-numeric-id \n --project=$(gcloud config get-value project) \n --region=europe-west1
- Controllare i log: Questo è il passaggio più importante. I log del server del modello appariranno in Cloud Logging. Un errore comune è un modello che non riesce a caricarsi.
# Sostituisci con l'ID numerico del tuo endpoint
gcloud logging read 'resource.type="aiplatform.googleapis.com/Endpoint" resource.labels.endpoint_id="your-endpoint-numeric-id"' \n --project=$(gcloud config get-value project) --limit=20
Errori comuni e soluzioni
-
Permesso negato: Se vedi un
403 Permission 'aiplatform.endpoints.deployModel' denied, il tuo utente o account di servizio non ha il ruolo IAMVertex AI User(roles/aiplatform.user). Concedilo e riprova. -
Il modello distribuito non è riuscito ad avviarsi: Questo è un errore generico, di solito significa che il container è in un ciclo di crash. La causa è quasi sempre nei log. I motivi comuni includono:
- Mancata corrispondenza della versione di Pickle: La versione di
scikit-learnutilizzata per l'addestramento locale è incompatibile con la versione all'interno del container pre-costruito. Assicurati che corrispondano. - Percorso dell'artefatto errato: L'
artifact_uriinModel.uploaddeve puntare alla directory GCS contenentemodel.pkl, non al file stesso.
- Mancata corrispondenza della versione di Pickle: La versione di
-
Sforamento dei costi: Se imposti
min_replica_counta 1 o più, ti verranno addebitati i costi per quel computing 24 ore su 24, 7 giorni su 7, anche senza traffico. Per lo sviluppo o gli endpoint non critici, impostamin_replica_count=0per consentire al servizio di scalare completamente e evitare costi di inattività.
Conclusione
La distribuzione di modelli di machine learning non dovrebbe essere la parte più difficile di un progetto di IA. Sfruttando gli endpoint serverless di Vertex AI, siamo passati da un artefatto di modello locale a un servizio di inferenza completamente gestito, scalabile ed economicamente vantaggioso, senza scrivere una singola riga di Kubernetes YAML o gestire una singola VM.
Questa astrazione è potente. Permette ai tuoi team di concentrarsi su ciò che conta: migliorare la qualità del modello e fornire insight basati sull'IA all'azienda, piuttosto che affrontare i driver GPU e la configurazione dell'infrastruttura.
Punti chiave
- Serverless è il valore predefinito: Per la maggior parte dei carichi di lavoro di inferenza in tempo reale, inizia con gli endpoint serverless di Vertex AI. Forniscono il miglior equilibrio tra prestazioni, costi e semplicità operativa.
- IaC è irrinunciabile: Effettua sempre il provisioning delle risorse principali come gli endpoint con Terraform. Ciò fornisce una base ripetibile e verificabile per la tua piattaforma MLOps.
- Impacchetta correttamente i modelli: Usa strumenti come la
Pipelinediscikit-learnper raggruppare i passaggi di pre-elaborazione e modellazione in un unico artefatto portatile. Questo semplifica drasticamente la distribuzione. - Governa i tuoi endpoint: Usa le etichette per tenere traccia dei costi e della proprietà. Imposta
min_replica_count=0per i carichi di lavoro non di produzione per gestire la spesa.
Prossimi passi
Con un endpoint distribuito, il prossimo passo è integrarlo in un'applicazione reale. Oltre a ciò, puoi esplorare funzionalità più avanzate come:
- Divisione del traffico: Distribuisci una nuova versione del modello allo stesso endpoint e sposta gradualmente il traffico per eseguire test A/B o rilasci canary.
- Spiegabilità di Vertex AI: Integra la spiegabilità del modello per capire perché il tuo modello sta producendo determinate previsioni.
- Automazione CI/CD: Costruisci una pipeline in Cloud Build o GitHub Actions per addestrare, registrare e distribuire automaticamente nuove versioni del modello in caso di modifiche al codice.
Per un approfondimento sulle più ampie implicazioni dell'infrastruttura AI gestita, potresti voler consultare l'Analisi Tecnica del Settore dei Semiconduttori su Clear Signals.
- Codice sorgente completo: Puoi trovare il codice completo e le configurazioni Terraform utilizzate in questa guida nel [link a un repository GitHub pubblico con il codice sorgente completo].
- Esempi ufficiali di GCP: Per casi d'uso più avanzati, il repository ufficiale
GoogleCloudPlatform/vertex-ai-samplessu GitHub è un'ottima risorsa.