Esegui il deployment di un modello nelle VM Cloud TPU

Google Cloud dà accesso ad acceleratori di machine learning personalizzati chiamati Tensor Processing Unit (TPU). Le TPU sono ottimizzate per accelerare l'addestramento e l'inferenza dei modelli di machine learning, rendendoli ideali per una varietà di applicazioni, tra cui l'elaborazione del linguaggio naturale, la visione artificiale e il riconoscimento vocale.

Questa pagina descrive come eseguire il deployment dei modelli in un singolo host Cloud TPU v5e per la previsione online in Vertex AI.

È supportata solo la versione di Cloud TPU v5e. Altre generazioni di Cloud TPU non sono supportate.

Importa il modello

Per il deployment sulle Cloud TPU, devi importare il modello in Vertex AI e configurarlo in modo che utilizzi uno dei seguenti container:

Container di runtime TensorFlow ottimizzato predefinito

Per importare ed eseguire un oggetto SavedModel su una Cloud TPU, il modello deve essere ottimizzato per TPU. Se TensorFlow SavedModel non è già ottimizzato per TPU, puoi ottimizzarlo in tre modi:

  • Ottimizzazione manuale del modello: utilizzi lo convertitore di inferenza per ottimizzare il modello e salvarlo. Poi devi passare i flag --saved_model_tags='serve,tpu' e --disable_optimizer=true quando upload il modello. Ad esempio:

    model = aiplatform.Model.upload(
        display_name='Manually optimized model',
        artifact_uri="gs://model-artifact-uri",
        serving_container_image_uri="us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-tpu.2-15:latest",
        serving_container_args=[
            "--saved_model_tags=serve,tpu",
            "--disable_optimizer=true",
        ]
    )
    
  • Ottimizzazione automatica del modello con il partizionamento automatico: quando importi un modello, Vertex AI tenterà di ottimizzare il modello non ottimizzato utilizzando un algoritmo di partizionamento automatico. Questa ottimizzazione non funziona su tutti i modelli. Se l'ottimizzazione non va a buon fine, devi ottimizzare manualmente il modello o scegliere l'ottimizzazione automatica del modello con il partizionamento manuale. Ad esempio:

    model = aiplatform.Model.upload(
        display_name='TPU optimized model with automatic partitioning',
        artifact_uri="gs://model-artifact-uri",
        serving_container_image_uri="us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-tpu.2-15:latest",
        serving_container_args=[
        ]
    )
    
  • Ottimizzazione automatica dei modelli con il partizionamento manuale. Specifica il flag --converter_options_string e regola ConverterOptions.TpuFunction in base alle tue esigenze. Per un esempio, consulta Immagine convertitore. Tieni presente che è supportato solo ConverterOptions.TpuFunction, che è tutto ciò che serve per il partizionamento manuale. Ad esempio:

    model = aiplatform.Model.upload(
    display_name='TPU optimized model with manual partitioning',
      artifact_uri="gs://model-artifact-uri",
      serving_container_image_uri="us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-tpu.2-15:latest",
      serving_container_args=[
          "--converter_options_string='tpu_functions { function_alias: \"partitioning function name\" }'"
      ]
    )
    

Per saperne di più sull'importazione dei modelli, consulta la sezione Importazione dei modelli in Vertex AI.

Container PyTorch predefinito

Le istruzioni per importare ed eseguire un modello PyTorch su Cloud TPU corrispondono a quelle per importare ed eseguire un modello PyTorch.

Ad esempio, TorchServe per l'inferenza Cloud TPU v5e mostra come pacchettizzare il modello Densenet 161 negli artefatti del modello utilizzando Torch Model Archiver.

Quindi, carica gli artefatti del modello nella cartella Cloud Storage e carica il modello come mostrato:

model = aiplatform.Model.upload(
    display_name='DenseNet TPU model from SDK PyTorch 2.1',
    artifact_uri="gs://model-artifact-uri",
    serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/pytorch-tpu.2-1:latest",
    serving_container_args=[],
    serving_container_predict_route="/predictions/model",
    serving_container_health_route="/ping",
    serving_container_ports=[8080]
)

Per maggiori informazioni, consulta Esportazione degli artefatti del modello per PyTorch e il blocco note Jupyter per Pubblicare un modello PyTorch utilizzando un container predefinito.

Container personalizzato

Per i container personalizzati, il modello non deve essere necessariamente un modello TensorFlow, ma deve essere ottimizzato per TPU. Per informazioni sulla produzione di un modello ottimizzato per TPU, consulta le seguenti guide per i framework ML comuni:

Per informazioni sulla gestione di modelli addestrati con JAX, TensorFlow o PyTorch su Cloud TPU v5e, consulta Inferenza di Cloud TPU v5e.

Assicurati che il contenitore personalizzato soddisfi i requisiti per i contenitori personalizzati.

Devi aumentare il limite di memoria bloccato in modo che il driver possa comunicare con i chip TPU tramite accesso diretto alla memoria (DMA). Ad esempio:

Riga di comando

ulimit -l 68719476736

Python

import resource

resource.setrlimit(
    resource.RLIMIT_MEMLOCK,
    (
        68_719_476_736_000,  # soft limit
        68_719_476_736_000,  # hard limit
    ),
  )

Poi, consulta Utilizzare un container personalizzato per la previsione per informazioni sull'importazione di un modello con un container personalizzato. Se vuoi implementare una logica di pre o post-elaborazione, valuta l'utilizzo di routine di previsione personalizzate.

Creazione di un endpoint

Le istruzioni per creare un endpoint per le Cloud TPU corrispondono a quelle per la creazione di qualsiasi endpoint.

Ad esempio, il comando seguente crea una risorsa endpoint:

endpoint = aiplatform.Endpoint.create(display_name='My endpoint')

La risposta contiene l'ID del nuovo endpoint, che utilizzerai nei passaggi successivi.

Per maggiori informazioni sulla creazione di un endpoint, consulta Eseguire il deployment di un modello in un endpoint.

Deployment di un modello

Le istruzioni per il deployment di un modello nelle Cloud TPU corrispondono a quelle per il deployment di qualsiasi modello, ad eccezione del fatto che devi specificare uno dei seguenti tipi di macchine Cloud TPU supportati:

Tipo di macchina Numero di chip TPU
ct5lp-hightpu-1t 1
ct5lp-hightpu-4t 4
ct5lp-hightpu-8t 8

Gli acceleratori TPU sono integrati nel tipo di macchina. Non devi specificare il tipo o il conteggio dell'acceleratore.

Ad esempio, il seguente comando esegue il deployment di un modello chiamando deployModel:

machine_type = 'ct5lp-hightpu-1t'

deployed_model = model.deploy(
    endpoint=endpoint,
    deployed_model_display_name='My deployed model',
    machine_type=machine_type,
    traffic_percentage=100,
    min_replica_count=1
    sync=True,
)

Per saperne di più, consulta Eseguire il deployment di un modello in un endpoint.

Ottieni previsioni online

Le istruzioni per ottenere previsioni online da una Cloud TPU corrispondono a quelle per ottenere previsioni online.

Ad esempio, il seguente comando invia una richiesta di previsione online chiamando predict:

deployed_model.predict(...)

Per i container personalizzati, consulta i requisiti di previsione e risposta relativi ai container personalizzati.

Capacità di protezione

Per impostazione predefinita, la quota per Custom model serving TPU v5e cores per region è 0.

Per richiedere un aumento, consulta Richiedere un limite di quota più elevato.

Prezzi

I tipi di macchina TPU vengono fatturati su base oraria, proprio come tutti gli altri tipo di macchina in Vertex Prediction. Per ulteriori informazioni, consulta la sezione Prezzi della previsione.

Passaggi successivi