Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Architettura

TensorFlow Serving è un sistema di servizio flessibile e ad alte prestazioni per modelli di apprendimento automatico, progettato per ambienti di produzione. TensorFlow Serving semplifica l'implementazione di nuovi algoritmi ed esperimenti, mantenendo la stessa architettura server e le stesse API. Il servizio TensorFlow offre l'integrazione immediata con i modelli TensorFlow, ma può essere facilmente esteso per servire altri tipi di modelli.

Concetti chiave

Per comprendere l'architettura di TensorFlow Serving, è necessario comprendere i seguenti concetti chiave:

Servables

I servable sono l'astrazione centrale nel servizio TensorFlow. I servable sono gli oggetti sottostanti che i client utilizzano per eseguire il calcolo (ad esempio, una ricerca o inferenza).

Le dimensioni e la granularità di un Servable sono flessibili. Un singolo Servable può includere qualsiasi cosa, da un singolo frammento di una tabella di ricerca a un singolo modello a una tupla di modelli di inferenza. I servizi possono essere di qualsiasi tipo e interfaccia, consentendo flessibilità e miglioramenti futuri come:

  • risultati di streaming
  • API sperimentali
  • modalità operative asincrone

I servizi non gestiscono il proprio ciclo di vita.

I servizi tipici includono:

  • a TensorFlow SavedModelBundle ( tensorflow::Session )
  • una tabella di ricerca per le ricerche di incorporamento o di vocabolario

Versioni Servibili

Il servizio TensorFlow è in grado di gestire una o più versioni di un servizio per la durata di una singola istanza del server. Ciò consente di caricare nel tempo nuove configurazioni di algoritmi, pesi e altri dati. Le versioni consentono di caricare più di una versione di un servable contemporaneamente, supportando l'implementazione e la sperimentazione graduali. Al momento della pubblicazione, i clienti possono richiedere la versione più recente o un ID versione specifico, per un modello particolare.

Flussi servibili

Un flusso servibile è la sequenza di versioni di un servizio, ordinata per numero di versione crescente.

Modelli

TensorFlow Serving rappresenta un modello come uno o più servable. Un modello di apprendimento automatico può includere uno o più algoritmi (inclusi pesi appresi) e tabelle di ricerca o incorporamento.

È possibile rappresentare un modello composito come uno dei seguenti:

  • più servable indipendenti
  • singolo composito servibile

Un servizio può anche corrispondere a una frazione di un modello. Ad esempio, una tabella di ricerca di grandi dimensioni potrebbe essere suddivisa in più istanze di TensorFlow Serving.

caricatori

I caricatori gestiscono il ciclo di vita di un servizio. L'API Loader consente un'infrastruttura comune indipendente da specifici algoritmi di apprendimento, dati o casi d'uso dei prodotti coinvolti. In particolare, i caricatori standardizzano le API per il caricamento e lo scaricamento di un oggetto servibile.

fonti

Le fonti sono moduli plug-in che trovano e forniscono servizi. Ogni sorgente fornisce zero o più flussi servibili. Per ogni flusso servibile, un'origine fornisce un'istanza Loader per ogni versione che rende disponibile per il caricamento. (Una sorgente è in realtà concatenata con zero o più SourceAdapters e l'ultimo elemento nella catena emette i Caricatori.)

L'interfaccia di TensorFlow Serving per le fonti può rilevare i servizi da sistemi di archiviazione arbitrari. Il servizio TensorFlow include implementazioni di sorgenti di riferimento comuni. Ad esempio, le fonti possono accedere a meccanismi come RPC e possono eseguire il polling di un file system.

Le fonti possono mantenere lo stato condiviso tra più servizi o versioni. Ciò è utile per i servizi che utilizzano aggiornamenti delta (diff) tra le versioni.

Versioni Aspired

Le versioni aspirate rappresentano l'insieme di versioni servibili che devono essere caricate e pronte. Le fonti comunicano questo set di versioni servibili per un singolo flusso servibile alla volta. Quando un'origine fornisce un nuovo elenco di versioni aspirate al gestore, sostituisce l'elenco precedente per quel flusso servibile. Il gestore scarica tutte le versioni caricate in precedenza che non compaiono più nell'elenco.

Guarda il tutorial avanzato per vedere come funziona il caricamento della versione.

I gestori

I gestori gestiscono l'intero ciclo di vita dei servizi, tra cui:

  • caricamento di Servables
  • servire Servables
  • scaricabili Servables

I manager ascoltano le fonti e tengono traccia di tutte le versioni. Il gestore tenta di soddisfare le richieste di Fonti, ma può rifiutare di caricare una versione aspirata se, per esempio, le risorse richieste non sono disponibili. I manager possono anche posticipare uno "scarico". Ad esempio, un Manager può attendere di scaricare fino al termine del caricamento di una versione più recente, in base a un criterio per garantire che almeno una versione venga caricata in ogni momento.

I gestori di servizi TensorFlow forniscono un'interfaccia semplice e ristretta, GetServableHandle() , per consentire ai client di accedere alle istanze servibili caricate.

Nucleo

Utilizzando le API di servizio standard TensorFlow, TensorFlow Serving Core gestisce i seguenti aspetti dei servizi:

  • ciclo vitale
  • metrica

TensorFlow Serving Core tratta i servable e i caricatori come oggetti opachi.

Vita di un utile

tf che serve diagramma di architettura

Ampiamente parlando:

  1. Le fonti creano Caricatori per versioni servibili.
  2. I caricatori vengono inviati come versioni aspirate al gestore, che li carica e li serve alle richieste del client.

Più in dettaglio:

  1. Un plug-in di origine crea un caricatore per una versione specifica. Il caricatore contiene tutti i metadati necessari per caricare il servizio.
  2. La fonte utilizza un callback per comunicare al gestore la versione aspirata.
  3. Il Manager applica i criteri di versione configurati per determinare l'azione successiva da eseguire, che potrebbe essere quella di scaricare una versione precedentemente caricata o di caricare la nuova versione.
  4. Se il Manager determina che è sicuro, fornisce al caricatore le risorse necessarie e indica al caricatore di caricare la nuova versione.
  5. I clienti chiedono al Gestore il Servizio, specificando esplicitamente una versione o semplicemente richiedendo la versione più recente. Il gestore restituisce un handle per il servizio.

Ad esempio, supponiamo che una sorgente rappresenti un grafico TensorFlow con pesi del modello aggiornati di frequente. I pesi sono memorizzati in un file su disco.

  1. Source rileva una nuova versione dei pesi del modello. Crea un Caricatore che contiene un puntatore ai dati del modello sul disco.
  2. La fonte notifica al gestore dinamico della versione Aspired.
  3. Dynamic Manager applica i criteri di versione e decide di caricare la nuova versione.
  4. Dynamic Manager comunica al caricatore che c'è memoria sufficiente. Il caricatore crea un'istanza del grafico TensorFlow con i nuovi pesi.
  5. Un client richiede un handle all'ultima versione del modello e Dynamic Manager restituisce un handle alla nuova versione del Servable.

Estensibilità

TensorFlow Serving offre diversi punti di estensione in cui è possibile aggiungere nuove funzionalità.

Politica della versione

I criteri di versione specificano la sequenza di caricamento e scaricamento della versione in un singolo flusso servibile.

TensorFlow Serving include due criteri che soddisfano i casi d'uso più noti. Questi sono i criteri di conservazione della disponibilità (evitare di lasciare zero versioni caricate; in genere caricare una nuova versione prima di scaricare quella precedente) e i criteri di conservazione delle risorse (evitare di caricare due versioni contemporaneamente, richiedendo quindi il doppio delle risorse; scaricare una versione precedente prima di caricare uno nuovo). Per un utilizzo semplice di TensorFlow Serving in cui la disponibilità di servizio di un modello è importante e il costo delle risorse basso, la Politica di conservazione della disponibilità garantirà che la nuova versione sia caricata e pronta prima di scaricare quella precedente. Per un uso sofisticato del servizio TensorFlow, ad esempio la gestione delle versioni su più istanze del server, la politica di conservazione delle risorse richiede il minor numero di risorse (nessun buffer aggiuntivo per il caricamento di nuove versioni).

fonte

Nuove fonti potrebbero supportare nuovi filesystem, offerte cloud e backend di algoritmi. TensorFlow Serving fornisce alcuni blocchi comuni per rendere più semplice e veloce la creazione di nuove fonti. Ad esempio, TensorFlow Serving include un'utilità per avvolgere il comportamento di polling attorno a una fonte semplice. Le fonti sono strettamente correlate ai Caricatori per algoritmi specifici e servizi di hosting dei dati.

Consulta il documento Origine personalizzata per ulteriori informazioni su come creare un'origine personalizzata.

caricatori

I caricatori sono il punto di estensione per l'aggiunta di algoritmi e backend di dati. TensorFlow è uno di questi backend di algoritmo. Ad esempio, si implementerebbe un nuovo Caricatore per caricare, fornire accesso e scaricare un'istanza di un nuovo tipo di modello di apprendimento automatico servibile. Prevediamo la creazione di caricatori per tabelle di ricerca e algoritmi aggiuntivi.

Consulta il documento Servable personalizzato per informazioni su come creare un servable personalizzato.

dosatore

Il raggruppamento di più richieste in una singola richiesta può ridurre significativamente i costi di inferenza, in particolare in presenza di acceleratori hardware come le GPU. TensorFlow Serving include un widget di batch di richieste che consente ai clienti di raggruppare facilmente le inferenze specifiche del tipo tra le richieste in richieste batch che i sistemi algoritmici possono elaborare in modo più efficiente. Vedere la Guida di dosaggio per ulteriori informazioni.