Il runtime TensorFlow ottimizzato ottimizza i modelli per un'inferenza più rapida e a costi inferiori rispetto ai container TensorFlow Serving predefiniti basati su open source. Il runtime TensorFlow ottimizzato lo fa utilizzando le tecnologie proprietarie e open source di Google.
Più grande è un modello di machine learning (ML), maggiore è il costo della sua gestione. Con il runtime TensorFlow ottimizzato, il costo della pubblicazione del modello ML e la velocità di inferenza possono essere inferiori rispetto a quando utilizzi un runtime TensorFlow basato su open source. Per sfruttare il runtime TensorFlow ottimizzato quando utilizzi Vertex AI, non devi modificare il codice. Scegli invece un'immagine container di pubblicazione che lo utilizzi.
Il runtime TensorFlow ottimizzato è compatibile con le versioni precedenti dei container TensorFlow Serving predefiniti. Se esegui modelli TensorFlow con un container predefinito, puoi passare a un container runtime TensorFlow ottimizzato con il minimo sforzo.
Anche se il rendimento del modello migliora quando utilizzi il runtime TensorFlow ottimizzato, l'impatto sul rendimento varia a seconda del tipo di modello.
Panoramica del runtime TensorFlow ottimizzato
Il runtime TensorFlow ottimizzato utilizza ottimizzazioni del modello e nuove tecnologie proprietarie di Google per migliorare la velocità e ridurre il costo dell'inferenza rispetto ai container TensorFlow Serving predefiniti basati su open source.
L'ottimizzazione si verifica quando Vertex AI carica un modello, prima che venga eseguito. Dopo aver eseguito il deployment di un modello in un endpoint, il log di ottimizzazione viene aggiunto al log di inferenza. Puoi utilizzare questi log per risolvere i problemi che potrebbero verificarsi durante l'ottimizzazione.
Nei seguenti argomenti vengono descritti i miglioramenti dell'ottimizzazione nel runtime TensorFlow ottimizzato.
Ottimizzazioni del modello
Le seguenti tre ottimizzazioni del modello sono incluse nel runtime TensorFlow ottimizzato.
Precompilazione di Model XLA
Quando viene eseguito un modello TensorFlow, tutte le operazioni vengono eseguite singolarmente. L'esecuzione di singole operazioni comporta un piccolo overhead. Il runtime TensorFlow ottimizzato può rimuovere parte di questo overhead sfruttando XLA per precompilare tutto o una parte del grafico TensorFlow in kernel più grandi.
La precompilazione del modello XLA è facoltativa e disattivata per impostazione predefinita. Per scoprire come attivare la precompilazione XLA del modello durante un deployment, consulta Attivare la precompilazione XLA del modello.
Ottimizzazioni della compressione del modello
Il runtime TensorFlow ottimizzato può eseguire alcuni modelli più velocemente con un piccolo impatto sulla precisione del modello, consentendo l'ottimizzazione della compressione del modello. Quando l'ottimizzazione della compressione del modello è attivata, il runtime TensorFlow ottimizzato utilizza tecniche come la quantizzazione e l'eliminazione dei pesi per eseguire i modelli più velocemente.
La funzionalità di ottimizzazione della compressione del modello è disattivata per impostazione predefinita. Per scoprire come attivare l'ottimizzazione della compressione del modello durante un deployment, consulta Attivare l'ottimizzazione della compressione del modello.
Prestazioni migliorate del modello tabellare sulle GPU
I modelli tabulari TensorFlow vengono in genere pubblicati sulle CPU perché non possono utilizzare gli acceleratori in modo efficace. Il runtime TensorFlow ottimizzato risolve questo problema eseguendo le parti del modello che richiedono un elevato carico di calcolo sulle GPU. Il resto del modello viene eseguito sulle CPU riducendo al minimo la comunicazione tra l'host e l'acceleratore. L'esecuzione delle parti costose del modello sulle GPU e il resto sulle CPU rende l'erogazione dei modelli tabulari più rapida e meno costosa.
Il runtime TensorFlow ottimizzato ottimizza la pubblicazione dei seguenti tipi di modelli tabulari.
Ottimizzazione automatica del modello per Cloud TPU
I container di runtime TensorFlow ottimizzati predefiniti che supportano le Cloud TPU possono partizionare e ottimizzare automaticamente i modelli per l'esecuzione sulle TPU. Per saperne di più, vedi Eseguire il deployment su Cloud TPU.
Utilizzo del runtime TensorFlow (TFRT)
Il runtime TensorFlow ottimizzato può utilizzare il runtime TensorFlow (TFRT). TFRT utilizza in modo efficiente le CPU host multithread, supporta modelli di programmazione asincroni ed è ottimizzato per l'efficienza delle operazioni di basso livello.
La CPU TFRT è abilitata in tutte le immagini container della CPU del runtime TensorFlow ottimizzato, ad eccezione della versione 2.8. Per disattivare la CPU TFRT, imposta il flag use_tfrt
su false
.
La GPU TFRT è disponibile nelle immagini container GPU del runtime TensorFlow ottimizzato notturno e nelle immagini container GPU del runtime TensorFlow ottimizzato stabile versione 2.13 e successive. Per attivare la GPU TFRT,
imposta i flag use_tfrt
e allow_precompilation
su true
.
TFRT su un'immagine container GPU riduce al minimo l'overhead di trasferimento dei dati tra la CPU host e la GPU. Dopo aver abilitato TFRT, questo funziona insieme alla compilazione XLA. Poiché la precompilazione XLA è abilitata, potresti riscontrare alcuni
effetti collaterali, come una maggiore latenza nella prima richiesta.
Per ulteriori informazioni, vedi Attivare la precompilazione del modello XLA.
Utilizzo del runtime Google
Poiché il runtime TensorFlow ottimizzato è creato utilizzando lo stack interno di Google, può sfruttare l'esecuzione nell'ambiente di runtime proprietario di Google.
Immagini container del runtime TensorFlow ottimizzato
Vertex AI fornisce due tipi di immagini container di runtime TensorFlow ottimizzate: stabile e nightly.
Immagini container stabili
I container di runtime TensorFlow ottimizzati stabili sono associati a una versione specifica di TensorFlow, proprio come i container predefiniti di TensorFlow Serving basati sull'open source. I container di runtime TensorFlow ottimizzati associati a una versione specifica vengono mantenuti per la stessa durata della build open source associata alla stessa versione. Le build del runtime TensorFlow ottimizzato hanno le stesse proprietà delle build TensorFlow open source, ma con un'inferenza più rapida.
Le build sono compatibili con le versioni precedenti. Ciò significa che dovresti essere in grado di eseguire modelli addestrati su versioni precedenti di TensorFlow utilizzando un container più recente. I contenitori recenti dovrebbero avere un rendimento migliore di quelli meno recenti. In rare eccezioni, un modello addestrato su una versione precedente di TensorFlow potrebbe non funzionare con un container più recente.
Immagini container notturne
Le build del runtime TensorFlow ottimizzato notturno includono i miglioramenti e le ottimizzazioni più recenti, ma potrebbero non essere affidabili come le build stabili. Vengono utilizzati principalmente a scopo sperimentale. I nomi delle build notturne includono l'etichetta nightly
. A differenza
delle immagini container stabili, i container notturni non sono coperti dall'accordo sul livello del servizio (SLA) di Vertex AI.
Immagini container disponibili
Sono disponibili le seguenti immagini container Docker di runtime TensorFlow ottimizzate stabili e notturne.
Versione framework ML | Acceleratori supportati (e versione CUDA, se applicabile) | Data di fine della patch e del supporto | Fine della disponibilità | Immagini supportate |
---|---|---|---|---|
a notte | Solo CPU | Non applicabile | Non applicabile |
|
a notte | GPU (CUDA 12.x) | Non applicabile | Non applicabile |
|
a notte | Cloud TPU | Non applicabile | Non applicabile |
|
2.17 | Solo CPU | 11 luglio 2024 | 11 luglio 2025 |
|
2.17 | GPU (CUDA 12.x) | 11 luglio 2024 | 11 luglio 2025 |
|
2.17 | Cloud TPU | 11 luglio 2024 | 11 luglio 2025 |
|
2.16 | Solo CPU | 26 aprile 2024 | Apr 26, 2025 |
|
2.16 | GPU (CUDA 12.x) | 26 aprile 2024 | Apr 26, 2025 |
|
2.16 | Cloud TPU | 26 aprile 2024 | Apr 26, 2025 |
|
2.15 | Solo CPU | 15 agosto 2024 | 15 ago 2025 |
|
2.15 | GPU (CUDA 12.x) | 15 agosto 2024 | 15 ago 2025 |
|
2.15 | Cloud TPU | 15 agosto 2024 | 15 ago 2025 |
|
2.14 | Solo CPU | 15 agosto 2024 | 15 ago 2025 |
|
2.14 | GPU (CUDA 12.x) | 15 agosto 2024 | 15 ago 2025 |
|
2.13 | Solo CPU | 15 agosto 2024 | 15 ago 2025 |
|
2.13 | GPU (CUDA 11.x) | 15 agosto 2024 | 15 ago 2025 |
|
2.12 | Solo CPU | 15 maggio 2024 | 15 maggio 2025 |
|
2.12 | GPU (CUDA 11.x) | 15 maggio 2024 | 15 maggio 2025 |
|
2.11 | Solo CPU | 15 novembre 2023 | 15 nov 2024 |
|
2.11 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 nov 2024 |
|
2.10 | Solo CPU | 15 novembre 2023 | 15 nov 2024 |
|
2.10 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 nov 2024 |
|
2,9 | Solo CPU | 15 novembre 2023 | 15 nov 2024 |
|
2,9 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 nov 2024 |
|
2,8 | Solo CPU | 15 novembre 2023 | 15 nov 2024 |
|
2,8 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 nov 2024 |
|
Utilizzare il runtime TensorFlow ottimizzato con un endpoint privato
L'utilizzo di endpoint privati per pubblicare inferenze online con Vertex AI fornisce una connessione sicura e a bassa latenza al servizio di inferenza online di Vertex AI, più veloce rispetto all'utilizzo di endpoint pubblici. Il runtime TensorFlow ottimizzato probabilmente gestisce modelli sensibili alla latenza, quindi potresti prendere in considerazione l'utilizzo con endpoint privati. Per maggiori informazioni, consulta Utilizzare endpoint privati per l'inferenza online.
Esegui il deployment di un modello utilizzando il runtime TensorFlow ottimizzato
La procedura per eseguire il deployment di un modello per l'inferenza utilizzando il runtime TensorFlow ottimizzato è quasi identica a quella per eseguire il deployment dei modelli utilizzando container TensorFlow Serving predefiniti basati su open source. Le uniche
differenze sono che specifichi un'immagine container che utilizza il runtime TensorFlow ottimizzato quando
crei il modello e puoi attivare i flag di ottimizzazione descritti
in precedenza in questo documento. Ad esempio, se hai eseguito il deployment del modello con il container us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest
, puoi pubblicare lo stesso modello con il runtime TensorFlow ottimizzato utilizzando il container us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.2-8:latest
.
Il seguente esempio di codice mostra come creare un modello con il
us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest
contenitore di runtime TensorFlow ottimizzato. Per eseguire il deployment di questo modello, utilizza la stessa procedura che utilizzi
per eseguire il deployment di un modello con altri
container TensorFlow Serving predefiniti.
Per saperne di più su ModelServiceClient
utilizzato in questo esempio, consulta
Class ModelServiceClient.
Per saperne di più su come eseguire il deployment dei modelli utilizzando Vertex AI, consulta
Eseguire il deployment di un modello utilizzando l'API Vertex AI.
Per ulteriori informazioni sulle impostazioni allow_precompilation
e allow_compression
, consulta la sezione Ottimizzazioni del modello descritta in precedenza in questo documento.
from google.cloud.aiplatform import gapic as aip PROJECT_ID = PROJECT_ID REGION = LOCATION API_ENDPOINT = f"{REGION}-aiplatform.googleapis.com" PARENT = f"projects/{PROJECT_ID}/locations/{REGION}" client_options = {"api_endpoint": API_ENDPOINT} model_service_client = aip.ModelServiceClient(client_options=client_options) tf_opt_model_dict = { "display_name": "DISPLAY_NAME", "metadata_schema_uri": "", "artifact_uri": "MODEL_URI", "container_spec": { "image_uri": "us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest", "args": [ # The optimized TensorFlow runtime includes the following # options that can be set here. # "--allow_precompilation=true" - enable XLA precompilation # "--allow_compression=true" - enable # model compression optimization ], }, } tf_opt_model = model_service_client.upload_model( parent=PARENT, model=tf_opt_model_dict).result(timeout=180).model
Flag di ottimizzazione del modello
Quando esegui il deployment di un modello utilizzando il runtime TensorFlow ottimizzato, puoi attivare due funzionalità che potrebbero ottimizzare ulteriormente la pubblicazione dei modelli TensorFlow.
Puoi attivare contemporaneamente la precompilazione del modello XLA e l'ottimizzazione della compressione del modello. Le sezioni seguenti descrivono come attivare queste opzioni utilizzando i flag durante il deployment.
Abilita la precompilazione XLA del modello
Per configurare il runtime TensorFlow ottimizzato per la precompilazione dei modelli, imposta il flag allow_precompilation
su true
. La precompilazione di Model XLA funziona per diversi tipi di modelli e nella
maggior parte dei casi migliora le prestazioni. La precompilazione XLA è più adatta alle richieste con batch di grandi dimensioni.
La precompilazione del modello XLA avviene quando arriva la prima richiesta con la nuova dimensione batch. Per assicurarti che il runtime venga inizializzato prima della prima richiesta, puoi includere un file di richieste di pre-riscaldamento. Per saperne di più, consulta Riscaldamento di SavedModel nella documentazione di TensorFlow.
La precompilazione di XLA richiede da alcuni secondi a diversi minuti, a seconda della complessità del modello. Se utilizzi la precompilazione del modello XLA, devi tenere presente quanto segue.
Se utilizzi un file di pre-riscaldamento, prova a includere richieste con dimensioni batch che rappresentano le dimensioni batch che prevedi che il modello riceva. Fornire un numero elevato di richieste nel file di pre-riscaldamento rallenta l'avvio del server del modello.
Se prevedi che il tuo modello riceva richieste con dimensioni batch diverse, ti consigliamo di abilitare il batch lato server con un insieme di valori fissi per
allow_batch_sizes
. Per ulteriori informazioni su come abilitare l'unwrapping lato serverper il batch, consulta Attivare il batch di richieste lato server per TensorFlow nella documentazione di TensorFlow.
Poiché la precompilazione XLA aggiunge un sovraccarico di memoria, alcuni modelli di grandi dimensioni potrebbero non riuscire a causa di un errore di memoria insufficiente sulla GPU.
Ti consigliamo di testare la precompilazione XLA sul tuo modello prima di attivare questa funzionalità in produzione.
Abilita l'ottimizzazione della compressione del modello
Per configurare il runtime TensorFlow ottimizzato in modo che utilizzi l'ottimizzazione della compressione del modello, imposta il relativo flag
allow_compression
su true
. Prova a vedere come l'attivazione di questo flag influisce sulla
precisione del modello e poi decidi se vuoi attivarlo in produzione.
Disattivare le ottimizzazioni
Per configurare il runtime TensorFlow ottimizzato per eseguire modelli senza ottimizzazione, imposta il relativo flag
disable_optimizer
su true
.
Limiti del runtime TensorFlow ottimizzato
Il runtime TensorFlow ottimizzato presenta le seguenti limitazioni:
- Il runtime TensorFlow ottimizzato non è compatibile con le GPU NVIDIA meno recenti, come Tesla P4 e Tesla P100.
- Al momento, il runtime TensorFlow ottimizzato supporta solo l'interpretabilità Shapley campionata��.
Prezzi
Il deployment dei modelli utilizzando il runtime TensorFlow ottimizzato non comporta costi aggiuntivi. Il costo è lo stesso di altri deployment di inferenza in cui l'addebito si basa sul numero di VM e acceleratori utilizzati. Per saperne di più, consulta la pagina Prezzi di Vertex AI.