Vertex AI Pipelines ti consente di orchestrare i tuoi flussi di lavoro di machine learning (ML) in modo serverless. Prima che Vertex AI Pipelines possa orchestrare il tuo flusso di lavoro ML, devi descriverlo come una pipeline. Le pipeline ML sono flussi di lavoro ML portabili e scalabili basati su container e servizi Google Cloud.
Questa guida descrive come iniziare a creare pipeline ML.
Quale SDK per le pipeline devo utilizzare?
Vertex AI Pipelines può eseguire pipeline create utilizzando uno dei seguenti SDK:
SDK Kubeflow Pipelines 1.8 o versioni successive (è consigliata la versione 2)
TensorFlow Extended v0.30.0 o versioni successive
Se utilizzi TensorFlow in un flusso di lavoro ML che elabora terabyte di dati strutturati o dati di testo, ti consigliamo di creare la pipeline utilizzando TFX.
- Per scoprire di più sulla creazione di una pipeline TFX, segui i tutorial introduttivi su TFX.
- Per scoprire di più sull'utilizzo di Vertex AI Pipelines per eseguire una pipeline TFX, segui i tutorial per TFX su Google Cloud.
Per altri casi d'uso, ti consigliamo di creare la pipeline utilizzando l'SDK Kubeflow Pipelines. Se crei una pipeline con l'SDK Kubeflow Pipelines, puoi implementare il flusso di lavoro creando componenti personalizzati o riutilizzando componenti predefiniti, ad esempio i componenti di Google Cloud Pipeline. I componenti di Google Cloud Pipeline semplificano l'uso dei servizi Vertex AI come AutoML nella tua pipeline.
Questa guida descrive come creare pipeline utilizzando l'SDK Kubeflow Pipelines.
Prima di iniziare
Prima di creare ed eseguire le pipeline, segui le istruzioni riportate di seguito per configurare il progetto e l'ambiente di sviluppo di Google Cloud.
Per preparare il tuo progetto Google Cloud all'esecuzione di pipeline ML, segui le istruzioni riportate nella guida per la configurazione del progetto Google Cloud.
Per creare la tua pipeline utilizzando l'SDK Kubeflow Pipelines, installa l'SDK Kubeflow Pipelines versione 1.8 o successiva.
Per utilizzare il client Python Vertex AI nelle tue pipeline, installa le librerie client di Vertex AI v1.7 o successive.
Per utilizzare i servizi Vertex AI nelle tue pipeline, installa l'SDK Google Cloud Pipeline Componenti.
Introduzione alla creazione di una pipeline
Per orchestrare il flusso di lavoro ML su Vertex AI Pipelines, devi prima descrivere il flusso di lavoro come una pipeline. Il seguente esempio mostra come utilizzare i componenti di pipeline di Google Cloud con Vertex AI per creare un set di dati, addestrare un modello utilizzando AutoML ed eseguire il deployment del modello addestrato per le previsioni.
Prima di eseguire il seguente esempio di codice, devi configurare l'autenticazione.
Come configurare l'autenticazione
Per configurare l'autenticazione, devi creare una chiave dell'account di servizio e impostare una variabile di ambiente per il percorso della chiave dell'account di servizio.
-
Crea un account di servizio:
-
Nella console Google Cloud, vai alla pagina Crea account di servizio.
- Inserisci un nome nel campo Nome account di servizio.
- (Facoltativo) Nel campo Descrizione account di servizio, inserisci una descrizione.
- Fai clic su Crea.
- Fai clic sul campo Seleziona un ruolo. In Tutti i ruoli, seleziona Vertex AI > Utente Vertex AI.
-
Fai clic su Fine per creare l'account di servizio.
Non chiudere la finestra del browser. Lo utilizzerai nel passaggio successivo.
-
-
Crea una chiave dell'account di servizio per l'autenticazione:
- Nella console Google Cloud, fai clic sull'indirizzo email dell'account di servizio che hai creato.
- Fai clic su Chiavi.
- Fai clic su Aggiungi chiave, quindi su Crea nuova chiave.
- Fai clic su Crea. Un file di chiave JSON viene scaricato sul computer.
- Fai clic su Chiudi.
- Concedi al nuovo account di servizio l'accesso all'account di servizio che utilizzi per eseguire le pipeline.
- Fai clic su per tornare all'elenco degli account di servizio.
Fai clic sul nome dell'account di servizio che utilizzi per eseguire le pipeline. Viene visualizzata la pagina Dettagli account di servizio.
Se hai seguito le istruzioni nella guida per configurare il tuo progetto per Vertex AI Pipelines, questo sarà lo stesso account di servizio che hai creato nella sezione Configura un account di servizio con autorizzazioni granulari. Altrimenti, Vertex AI utilizza l'account di servizio predefinito di Compute Engine per eseguire le pipeline. L'account di servizio predefinito di Compute Engine è denominato come segue:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
- Fai clic sulla scheda Autorizzazioni.
- Fai clic su Concedi accesso. Viene visualizzato il riquadro Aggiungi entità.
- Nella casella Nuove entità, inserisci l'indirizzo email dell'account di servizio creato in un passaggio precedente.
- Nell'elenco a discesa Ruolo, seleziona Account di servizio > Utente account di servizio.
- Fai clic su Salva
-
Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso del file JSON che contiene la chiave dell'account di servizio. Questa variabile si applica solo alla sessione di Shell corrente; di conseguenza, se apri una nuova sessione, imposta di nuovo la variabile.
Esempio: Linux o macOS
Sostituisci [PATH] con il percorso del file JSON che contiene la chiave dell'account di servizio.
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Ad esempio:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Esempio: Windows
Sostituisci [PATH] con il percorso del file JSON che contiene la chiave dell'account di servizio e [FILE_NAME] con il nome file.
Con PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Ad esempio:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\[FILE_NAME].json"
Con il prompt dei comandi:
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
Definisci il flusso di lavoro utilizzando il pacchetto DSL di Kubeflow Pipelines
Il pacchetto kfp.dsl
contiene il linguaggio specifico del dominio (DSL) che puoi
utilizzare per definire e interagire con pipeline e componenti.
I componenti della pipeline kubeflow sono funzioni di fabbrica che creano i passaggi della pipeline. Ogni componente descrive input, output e implementazione del componente. Ad esempio, nell'esempio di codice riportato di seguito, ds_op
è un componente.
I componenti vengono utilizzati per creare i passaggi della pipeline. Quando una pipeline è in esecuzione, i passaggi vengono eseguiti man mano che i dati da cui dipendono diventano disponibili. Ad esempio, un componente di addestramento potrebbe prendere un file CSV come input e utilizzarlo per addestrare un modello.
import kfp
from google.cloud import aiplatform
from google_cloud_pipeline_components.v1.dataset import ImageDatasetCreateOp
from google_cloud_pipeline_components.v1.automl.training_job import AutoMLImageTrainingJobRunOp
from google_cloud_pipeline_components.v1.endpoint import EndpointCreateOp, ModelDeployOp
project_id = PROJECT_ID
pipeline_root_path = PIPELINE_ROOT
# Define the workflow of the pipeline.
@kfp.dsl.pipeline(
name="automl-image-training-v2",
pipeline_root=pipeline_root_path)
def pipeline(project_id: str):
# The first step of your workflow is a dataset generator.
# This step takes a Google Cloud Pipeline Component, providing the necessary
# input arguments, and uses the Python variable `ds_op` to define its
# output. Note that here the `ds_op` only stores the definition of the
# output but not the actual returned object from the execution. The value
# of the object is not accessible at the dsl.pipeline level, and can only be
# retrieved by providing it as the input to a downstream component.
ds_op = ImageDatasetCreateOp(
project=project_id,
display_name="flowers",
gcs_source="gs://cloud-samples-data/vision/automl_classification/flowers/all_data_v2.csv",
import_schema_uri=aiplatform.schema.dataset.ioformat.image.single_label_classification,
)
# The second step is a model training component. It takes the dataset
# outputted from the first step, supplies it as an input argument to the
# component (see `dataset=ds_op.outputs["dataset"]`), and will put its
# outputs into `training_job_run_op`.
training_job_run_op = AutoMLImageTrainingJobRunOp(
project=project_id,
display_name="train-iris-automl-mbsdk-1",
prediction_type="classification",
model_type="CLOUD",
dataset=ds_op.outputs["dataset"],
model_display_name="iris-classification-model-mbsdk",
training_fraction_split=0.6,
validation_fraction_split=0.2,
test_fraction_split=0.2,
budget_milli_node_hours=8000,
)
# The third and fourth step are for deploying the model.
create_endpoint_op = EndpointCreateOp(
project=project_id,
display_name = "create-endpoint",
)
model_deploy_op = ModelDeployOp(
model=training_job_run_op.outputs["model"],
endpoint=create_endpoint_op.outputs['endpoint'],
automatic_resources_min_replica_count=1,
automatic_resources_max_replica_count=1,
)
Sostituisci quanto segue:
- PROJECT_ID: il progetto Google Cloud in cui viene eseguita questa pipeline.
PIPELINE_ROOT_PATH: specifica un URI Cloud Storage a cui può accedere l'account di servizio della pipeline. Gli artefatti delle esecuzioni della pipeline vengono archiviati nella directory radice.
La radice della pipeline può essere impostata come argomento dell'annotazione
@kfp.dsl.pipeline
nella funzione della pipeline oppure quando chiamicreate_run_from_job_spec
per creare un'esecuzione della pipeline.
Compila la pipeline in un file YAML
Dopo aver definito il flusso di lavoro della pipeline, puoi procedere con la compilazione della pipeline in formato YAML. Il file YAML include tutte le informazioni per eseguire la pipeline su Vertex AI Pipelines.
from kfp import compiler
compiler.Compiler().compile(
pipeline_func=pipeline,
package_path='image_classif_pipeline.yaml'
)
Invia l'esecuzione della pipeline
Dopo aver compilato il flusso di lavoro della pipeline in formato YAML, puoi usare il client Python Vertex AI per inviare ed eseguire la pipeline.
import google.cloud.aiplatform as aip
# Before initializing, make sure to set the GOOGLE_APPLICATION_CREDENTIALS
# environment variable to the path of your service account.
aip.init(
project=project_id,
location=PROJECT_REGION,
)
# Prepare the pipeline job
job = aip.PipelineJob(
display_name="automl-image-training-v2",
template_path="image_classif_pipeline.yaml",
pipeline_root=pipeline_root_path,
parameter_values={
'project_id': project_id
}
)
job.submit()
Sostituisci quanto segue:
- PROJECT_REGION: la regione in cui viene eseguita la pipeline.
Nell'esempio precedente:
- Una pipeline Kubeflow è definita come funzione Python.
La funzione è annotata con il decorator
@kfp.dsl.pipeline
, che specifica il nome e il percorso principale della pipeline. Il percorso root della pipeline è la località in cui sono archiviati gli artefatti della pipeline. - I passaggi del flusso di lavoro della pipeline vengono creati utilizzando i componenti di Google Cloud Pipeline. Utilizzando gli output di un componente come input di un altro componente, definisci il flusso di lavoro della pipeline come un grafico. Ad esempio:
training_job_run_op
dipende dall'outputdataset
dids_op
. - La pipeline viene compilata utilizzando
kfp.compiler.Compiler
. - Puoi creare un'esecuzione della pipeline su Vertex AI Pipelines utilizzando il client Python Vertex AI. Quando esegui una pipeline, puoi sostituire il nome e il percorso root della pipeline. Le esecuzioni della pipeline possono essere raggruppate utilizzando il nome della pipeline. Eseguire l'override del nome della pipeline può aiutarti a distinguere le esecuzioni di pipeline di produzione da quelle sperimentali.
Per scoprire di più sulla creazione delle pipeline, leggi la sezione relativa alla creazione di pipeline Kubeflow e segui gli esempi e i tutorial.
Creazione di pipeline Kubeflow
Usa la procedura seguente per creare una pipeline.
Progetta la pipeline come una serie di componenti. Per favorire la riusabilità, ogni componente deve avere una singola responsabilità. Quando possibile, progetta la tua pipeline in modo da riutilizzare componenti comprovati come i componenti di Google Cloud Pipeline.
Crea tutti i componenti personalizzati necessari per implementare il flusso di lavoro ML utilizzando l'SDK Kubeflow Pipelines. I componenti sono insiemi di codice autonomi che eseguono un passaggio nel flusso di lavoro ML. Utilizza le seguenti opzioni per creare i componenti della pipeline.
pacchettizza il codice del componente come immagine container. Questa opzione ti consente di includere nella pipeline del codice scritto in qualsiasi linguaggio che può essere pacchettizzato come immagine container.
Implementa il codice del componente come funzione Python autonoma e utilizza l'SDK Kubeflow Pipelines per pacchettizzare la funzione come componente. Questa opzione semplifica la creazione di componenti basati su Python.
Crea la tua pipeline come funzione Python.
Scopri di più sulla definizione della pipeline come funzione Python.
Utilizza il compilatore dell'SDK Kubeflow Pipelines per compilare la tua pipeline.
from kfp import compiler compiler.Compiler().compile( pipeline_func=PIPELINE_FUNCTION, package_path=PIPELINE_PACKAGE_PATH)
Sostituisci quanto segue:
- PIPELINE_FUNCTION: il nome della funzione della pipeline.
- PIPELINE_PACKAGE_PATH: il percorso in cui archiviare la pipeline compilata.
Esegui la pipeline utilizzando la console Google Cloud o Python.
Accesso alle risorse Google Cloud in una pipeline
Se non specifichi un account di servizio quando esegui una pipeline, Vertex AI Pipelines utilizza l'account di servizio predefinito di Compute Engine per eseguire la pipeline. Vertex AI Pipelines utilizza anche l'account di servizio di un'esecuzione di pipeline per autorizzare la pipeline ad accedere alle risorse Google Cloud. L'account di servizio predefinito di Compute Engine ha il ruolo Editor progetto per impostazione predefinita. Ciò potrebbe concedere alle tue pipeline un accesso eccessivo alle risorse Google Cloud nel tuo progetto Google Cloud.
Scopri di più sull'utilizzo di Identity and Access Management per creare un account di servizio e gestire l'accesso concesso a un account di servizio.
Mantieni aggiornate le tue pipeline
I client e le immagini container dell'SDK che utilizzi per creare ed eseguire le pipeline vengono aggiornati periodicamente a nuove versioni per applicare patch alle vulnerabilità di sicurezza e aggiungere nuove funzionalità. Per mantenere le pipeline aggiornate con la versione più recente, ti consigliamo di effettuare le seguenti operazioni:
Esamina le norme di supporto per i framework Vertex AI e l'elenco dei framework supportati.
Iscriviti alle note di rilascio di Vertex AI e ai feed RSS di PyPi.org per gli SDK che utilizzi (SDK Kubeflow Pipelines, SDK Google Cloud Pipeline Componenti o TensorFlow Extended SDK) per essere sempre al corrente delle nuove release.
Se hai un modello o una definizione di pipeline che fa riferimento a un container con vulnerabilità di sicurezza, devi fare quanto segue:
Installare la versione più recente con patch dell'SDK.
Ricrea e ricompila il modello o la definizione della pipeline.
Ricarica il modello o la definizione su Artifact Registry o Cloud Storage.
Passaggi successivi
- Leggi l'introduzione a Vertex AI Pipelines per scoprire di più sull'orchestrazione dei flussi di lavoro ML.
- Scopri come eseguire una pipeline.
- Visualizza e analizza i risultati delle esecuzioni della pipeline.