Il runtime TensorFlow ottimizzato ottimizza i modelli per un'inferenza più rapida e meno costosa rispetto ai container TensorFlow Serving predefiniti basati su open source. Il runtime TensorFlow ottimizzato esegue questa operazione utilizzando le tecnologie proprietarie e open source di Google.
Più grande è un modello di machine learning (ML), più può costare il suo utilizzo. Con il runtime TensorFlow ottimizzato, il costo dell'utilizzo 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 Gemini Enterprise Agent Platform, 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.
Sebbene le prestazioni del modello migliorino quando utilizzi il runtime TensorFlow ottimizzato, devi aspettarti che l'impatto sulle prestazioni vari a seconda dei tipi di modelli.
Panoramica del runtime TensorFlow ottimizzato
Il runtime TensorFlow ottimizzato utilizza le ottimizzazioni dei modelli e le 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 avviene quando Gemini Enterprise Agent Platform carica un modello, prima di eseguirlo. 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.
I seguenti argomenti descrivono i miglioramenti dell'ottimizzazione nel runtime TensorFlow ottimizzato.
Ottimizzazioni dei modelli
Il runtime TensorFlow ottimizzato include le seguenti tre ottimizzazioni dei modelli.
Precompilazione XLA del modello
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 XLA del modello è facoltativa e disattivata per impostazione predefinita. Per scoprire come attivare la precompilazione XLA del modello durante un deployment, consulta Attiva la precompilazione XLA del modello.
Ottimizzazioni della compressione dei modelli
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 il pruning 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 Attiva l'ottimizzazione della compressione del modello.
Prestazioni migliorate dei modelli tabulari sulle GPU
I modelli tabulari TensorFlow vengono in genere utilizzati 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 più veloce e meno costoso l'utilizzo dei modelli tabulari.
Il runtime TensorFlow ottimizzato ottimizza l'utilizzo dei seguenti tipi di modelli tabulari.
Ottimizzazione automatica dei modelli per Cloud TPU
I container runtime TensorFlow ottimizzati predefiniti che supportano Cloud TPU possono partizionare e ottimizzare automaticamente i modelli per l'esecuzione sulle TPU. Per saperne di più, consulta Esegui il deployment su Cloud TPU.
Utilizzo del runtime TensorFlow (TFRT)
Il runtime TensorFlow ottimizzato può utilizzare il runtime TensorFlow (TFRT). Il TFRT utilizza in modo efficiente le CPU host multithread, supporta i modelli di programmazione asincrona ed è ottimizzato per l'efficienza di basso livello.
La CPU TFRT è abilitata in tutte le immagini container della CPU runtime TensorFlow ottimizzate, 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 della GPU runtime TensorFlow ottimizzate per la notte e nelle immagini container della GPU runtime TensorFlow ottimizzate stabili versioni 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 attivato TFRT, funziona insieme alla compilazione XLA. Poiché la precompilazione XLA è attivata, potresti riscontrare alcuni effetti collaterali, come un aumento della latenza nella prima richiesta.
Per saperne di più, consulta Attiva la precompilazione XLA del modello.
Utilizzo del runtime Google
Poiché il runtime TensorFlow ottimizzato è basato sullo stack interno di Google, può sfruttare l'esecuzione nell'ambiente di runtime proprietario di Google.
Immagini container runtime TensorFlow ottimizzate
Gemini Enterprise Agent Platform fornisce due tipi di immagini container runtime TensorFlow ottimizzate: stabili e per la notte.
Immagini container stabili
I container runtime TensorFlow ottimizzati stabili sono associati a una versione specifica di TensorFlow, proprio come quelli basati su open source predefiniti di TensorFlow Serving. I container runtime TensorFlow ottimizzati associati a una versione specifica vengono gestiti per la stessa durata della build open source associata alla stessa versione. Le build runtime TensorFlow ottimizzate hanno le stesse proprietà delle build TensorFlow open source, ad eccezione di 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 container recenti dovrebbero avere prestazioni migliori rispetto a 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 per la notte
Le build runtime TensorFlow ottimizzate per la notte includono i miglioramenti e le ottimizzazioni più recenti, ma potrebbero non essere affidabili come le build stabili. Vengono utilizzate principalmente a scopo sperimentale. I nomi delle nightly build includono l'etichetta nightly. A differenza delle immagini container stabili, i container per la notte non sono coperti dall'accordo sul livello del servizio (SLA) di Gemini Enterprise Agent Platform.
Immagini container disponibili
Sono disponibili le seguenti immagini container Docker runtime TensorFlow ottimizzate per la notte e stabili.
| Versione framework ML | Acceleratori supportati (e versione CUDA, se applicabile) | Data di fine della patch e dell'assistenza | Fine della disponibilità | Immagini supportate |
|---|---|---|---|---|
| Per notte | Solo CPU | Non applicabile | Non applicabile |
|
| Per notte | GPU (CUDA 12.x) | Non applicabile | Non applicabile |
|
| Per 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 | 26 aprile 2025 | |
| 2.16 | GPU (CUDA 12.x) | 26 aprile 2024 | 26 aprile 2025 | |
| 2.16 | Cloud TPU | 26 aprile 2024 | 26 aprile 2025 | |
| 2.15 | Solo CPU | 15 agosto 2024 | 15 agosto 2025 | |
| 2.15 | GPU (CUDA 12.x) | 15 agosto 2024 | 15 agosto 2025 | |
| 2.15 | Cloud TPU | 15 agosto 2024 | 15 agosto 2025 | |
| 2.14 | Solo CPU | 15 agosto 2024 | 15 agosto 2025 | |
| 2.14 | GPU (CUDA 12.x) | 15 agosto 2024 | 15 agosto 2025 | |
| 2.13 | Solo CPU | 15 agosto 2024 | 15 agosto 2025 | |
| 2.13 | GPU (CUDA 11.x) | 15 agosto 2024 | 15 agosto 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 novembre 2024 | |
| 2.11 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 novembre 2024 | |
| 2.10 | Solo CPU | 15 novembre 2023 | 15 novembre 2024 | |
| 2.10 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 novembre 2024 | |
| 2.9 | Solo CPU | 15 novembre 2023 | 15 novembre 2024 | |
| 2.9 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 novembre 2024 | |
| 2.8 | Solo CPU | 15 novembre 2023 | 15 novembre 2024 | |
| 2.8 | GPU (CUDA 11.x) | 15 novembre 2023 | 15 novembre 2024 |
Utilizzare il runtime TensorFlow ottimizzato con un endpoint privato
L'utilizzo di endpoint privati per pubblicare inferenze online con Gemini Enterprise Agent Platform fornisce una connessione sicura e a bassa latenza al servizio di inferenza online di Gemini Enterprise Agent Platform, più veloce rispetto all'utilizzo di endpoint pubblici. Il runtime TensorFlow ottimizzato probabilmente pubblica modelli sensibili alla latenza, quindi potresti prendere in considerazione l'utilizzo con endpoint privati. Per saperne di più, consulta Utilizzare endpoint privati per l'inferenza online.
Eseguire 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 la
stessa della procedura per eseguire il deployment di 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 erogare 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 container runtime TensorFlow ottimizzato us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest. Per eseguire il deployment di questo modello, utilizza la stessa procedura utilizzata
per eseguire il deployment di un modello con altri
container TensorFlow Serving predefiniti.
Per saperne di più su ModelServiceClient utilizzato in questo esempio, consulta
la classe ModelServiceClient.
Per saperne di più su come eseguire il deployment di modelli utilizzando Gemini Enterprise Agent Platform, consulta
Eseguire il deployment di un modello utilizzando l'API Agent Platform.
Per saperne di più sulle impostazioni allow_precompilation e
allow_compression, consulta
Ottimizzazioni dei modelli
descritte 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 dei modelli
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 XLA del modello e l'ottimizzazione della compressione del modello. Le sezioni seguenti descrivono come attivare queste opzioni utilizzando i flag durante il deployment.
Attivare la precompilazione XLA del modello
Per configurare il runtime TensorFlow ottimizzato in modo che precompili i modelli, imposta il flag allow_precompilation su true. La precompilazione XLA del modello funziona per diversi tipi di modelli e, nella maggior parte dei casi, migliora le prestazioni. La precompilazione XLA funziona meglio per le richieste con batch di grandi dimensioni.
La precompilazione XLA del modello viene eseguita quando arriva la prima richiesta con la nuova dimensione del batch. Per assicurarti che il runtime venga inizializzato prima della prima richiesta, puoi includere un file di richieste di riscaldamento. Per saperne di più, consulta Riscaldamento di SavedModel nella documentazione di TensorFlow.
Il completamento della precompilazione XLA richiede da alcuni secondi a diversi minuti, a seconda della complessità del modello. Se utilizzi la precompilazione XLA del modello, devi tenere presente quanto segue.
Se utilizzi un file di riscaldamento, prova a includere richieste con dimensioni del batch che rappresentano le dimensioni del batch che prevedi che il modello riceva. Se fornisci un numero elevato di richieste nel file di riscaldamento, l'avvio del server del modello rallenta.
Se prevedi che il modello riceva richieste con dimensioni del batch diverse, potresti voler attivare il batch sul lato server con un insieme di valori fissi per
allow_batch_sizes. Per saperne di più su come attivare il batch sul lato server,consulta Attivare il batch delle richieste sul lato server per TensorFlow nella documentazione di TensorFlow.
Poiché la precompilazione XLA aggiunge un overhead di memoria, alcuni modelli di grandi dimensioni potrebbero non riuscire a essere eseguiti con un errore di esaurimento della memoria sulla GPU.
Ti consigliamo di testare la precompilazione XLA sul modello prima di attivare questa funzionalità in produzione.
Attivare l'ottimizzazione della compressione del modello
Per configurare il runtime TensorFlow ottimizzato in modo che utilizzi l'ottimizzazione della compressione del modello, imposta il flag allow_compression su true. Verifica in che modo 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 in modo che esegua i modelli senza ottimizzazione, imposta il 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 la spiegabilità Shapley campionata.
Prezzi
Il deployment di modelli utilizzando il runtime TensorFlow ottimizzato non comporta costi aggiuntivi. Il costo è lo stesso degli altri deployment di inferenza in cui ti viene addebitato un costo in base al numero di VM e acceleratori utilizzati. Per saperne di più, consulta i prezzi di Gemini Enterprise Agent Platform.