Questo documento fornisce un'architettura di riferimento che mostra come implementare un flusso di lavoro di generazione di candidati end-to-end a due torri con Vertex AI. Il framework di modellazione a due torri è una potente tecnica di recupero per i casi d'uso di personalizzazione perché apprende la somiglianza semantica tra due entità diverse, come query web e articoli candidati.
Questo documento è rivolto a professionisti tecnici come data scientist e machine learning engineer che sviluppano applicazioni di consigli su larga scala con requisiti di pubblicazione a bassa latenza. Per saperne di più sulle tecniche di modellazione, sulla definizione del problema e sulla preparazione dei dati per la creazione di un modello a due torri, consulta Escalation del recupero in profondità con i consigli di TensorFlow e la ricerca vettoriale.
Architettura
Il seguente diagramma mostra un'architettura per addestrare un modello a due torri e eseguire il deployment di ogni torre separatamente per diverse attività di deployment e pubblicazione:
L'architettura nel diagramma include i seguenti componenti:
- Dati di addestramento: i file di addestramento vengono archiviati in Cloud Storage.
- Addestramento a due torri: il modello combinato a due torri viene addestrato offline utilizzando il servizio Vertex AI Training; ogni torre viene salvata separatamente e utilizzata per attività diverse.
- Query registrate e torri candidate: dopo l'addestramento, ogni torre viene caricata separatamente in Vertex AI Model Registry.
- Torre di query di cui è stato eseguito il deployment: la torre di query registrata viene di cui è stato eseguito il deployment in un endpoint online di Vertex AI.
- Embedding di previsione batch: la torre di candidati registrata viene utilizzata in un job di previsione batch per precompilare le rappresentazioni degli embedding di tutti gli elementi candidati disponibili.
- Embedding JSON: gli embedding previsti vengono salvati in un file JSON in Cloud Storage.
- Indice ANN: Vertex AI Vector Search viene utilizzato per creare un indice di pubblicazione configurato per la ricerca del vicino più prossimo approssimativo (ANN).
- Indice di cui è stato eseguito il deployment: l'indice ANN viene eseguito in un endpoint di indice Vertex AI Vector Search.
Prodotti utilizzati
Questa architettura di riferimento utilizza i seguenti prodotti Google Cloud :
- Vertex AI Training: un servizio di addestramento completamente gestito che consente di eseguire l'addestramento di modelli su larga scala.
- Ricerca vettoriale: un servizio di ricerca di corrispondenze per somiglianza vettoriale che consente di archiviare, indicizzare e cercare dati semanticamente simili o correlati.
- Vertex AI Model Registry: un repository centrale in cui puoi gestire il ciclo di vita dei tuoi modelli ML.
- Cloud Storage: uno spazio di archiviazione di oggetti a basso costo e senza limiti per diversi tipi di dati. I dati sono accessibili dall'interno e dall'esterno di Google Cloude vengono replicati in più località per garantire la ridondanza.
Caso d'uso
Per soddisfare i requisiti di pubblicazione a bassa latenza, i sistemi di consigli su larga scala vengono spesso impiegati in produzione come sistemi a due fasi o, a volte, come sistemi a più fasi. Lo scopo della prima fase, la generazione di candidati, è esaminare una vasta raccolta di elementi candidati e recuperare un sottoinsieme pertinente di centinaia di elementi per le attività di filtro e ranking a valle. Per ottimizzare questa attività di recupero, prendi in considerazione questi due obiettivi principali:
- Durante l'addestramento del modello, apprendi la rappresentazione migliore del problema o del compito da risolvere e compila questa rappresentazione in
<query, candidate>
embedding. - Durante l'esecuzione del modello, recupera gli elementi pertinenti abbastanza rapidamente da soddisfare i requisiti di latenza.
Il seguente diagramma mostra i componenti concettuali di un recommender a due livelli:
Nel diagramma, la generazione di candidati filtra milioni di elementi candidati. Il ranking filtra quindi le centinaia di elementi candidati risultanti per restituire decine di elementi consigliati.
L'architettura di riferimento in questo documento addestra un modello di recupero basato su due torri. Nell'architettura, ogni torre è una rete neurale che elabora le funzionalità delle query o degli articoli candidati e poi produce una rappresentazione di embedding di queste funzionalità. Ogni torre viene implementata separatamente perché verrà utilizzata per attività diverse in produzione:
- Torre dei candidati: la torre dei candidati viene utilizzata per precompilare gli embedding per tutti gli elementi candidati. Gli embedding precomputati vengono implementati su un endpoint dell'indice Vertex AI Vector Search ottimizzato per il recupero a bassa latenza.
- Torre di query di cui è stato eseguito il deployment: durante la pubblicazione online, la torre di query di cui è stato eseguito il deployment converte le query non elaborate degli utenti in rappresentazioni di embedding. Le rappresentazioni degli incorporamenti vengono poi utilizzate per cercare incorporamenti di elementi simili nell'indice di cui è stato eseguito il deployment.
Le architetture a due torri sono ideali per molte attività di recupero perché acquisiscono la relazione semantica tra query ed entità candidate e le mappano in uno spazio di embedding condiviso. Quando le entità vengono mappate a uno spazio di embedding condiviso, le entità semanticamente simili vengono raggruppate più vicine. Pertanto, se calcoli gli incorporamenti vettoriali di una determinata query, puoi cercare nello spazio di incorporamento gli elementi candidati più vicini (più simili). Il vantaggio principale di un'architettura di questo tipo è la possibilità di disaccoppiare l'inferenza delle rappresentazioni di query e candidati. I vantaggi di questo disaccoppiamento sono principalmente due:
- Puoi pubblicare nuovi elementi (aggiornati) senza dover addestrare nuovamente un nuovo vocabolario di elementi. Fornendo qualsiasi insieme di funzionalità degli articoli alla torre di candidati, puoi calcolare gli embedding degli articoli per qualsiasi insieme di candidati, anche quelli che non vengono visualizzati durante l'addestramento. L'esecuzione di questo calcolo aiuta a risolvere il problema dell'avvio a freddo.
- La torre di candidati può supportare un insieme arbitrario di elementi candidati, inclusi gli elementi che non hanno ancora interagito con il sistema di consigli. Questo supporto è possibile perché le architetture a due torri elaborano funzionalità di metadati e contenuti avanzati per ogni coppia di
<query, candidate>
. Questo tipo di elaborazione consente al sistema di descrivere un elemento sconosciuto in termini di elementi che conosce.
- La torre di candidati può supportare un insieme arbitrario di elementi candidati, inclusi gli elementi che non hanno ancora interagito con il sistema di consigli. Questo supporto è possibile perché le architetture a due torri elaborano funzionalità di metadati e contenuti avanzati per ogni coppia di
- Puoi ottimizzare l'inferenza di recupero precomputando tutti gli embedding degli elementi candidati. Questi embedding precomputati possono essere indicizzati e implementati in un'infrastruttura di pubblicazione ottimizzata per il recupero a bassa latenza.
- L'apprendimento collaborativo delle torri ti consente di descrivere gli elementi in termini di query e viceversa. Se hai una metà di una coppia, come una query, e devi cercare l'altro elemento corrispondente, puoi precompilare metà dell'equazione in anticipo. La precomputazione ti consente di prendere il resto della decisione il più rapidamente possibile.
Note sul layout
Questa sezione fornisce indicazioni per aiutarti a sviluppare un'architettura di generazione di candidati in Google Cloud che soddisfi le tue esigenze di sicurezza e prestazioni. Le indicazioni contenute in questa sezione non sono esaustive. A seconda dei tuoi requisiti specifici, potresti scegliere di prendere in considerazione fattori di progettazione e compromessi aggiuntivi.
Sicurezza
Vertex AI Vector Search supporta sia i deployment di endpoint pubblici sia quelli Virtual Private Cloud (VPC). Se vuoi utilizzare una rete VPC, inizia seguendo la procedura per configurare una connessione in peering di rete VPC. Se l'indice di ricerca di vettori viene implementato all'interno di un perimetro VPC, gli utenti devono accedere alle risorse associate dalla stessa rete VPC. Ad esempio, se esegui lo sviluppo da Vertex AI Workbench, devi creare l'istanza di Workbench all'interno della stessa rete VPC dell'endpoint dell'indice di cui è stato eseguito il deployment. Analogamente, qualsiasi pipeline che dovrebbe creare un endpoint o eseguire il deployment di un indice in un endpoint deve essere eseguita nella stessa rete VPC.
Ottimizzazione delle prestazioni
Questa sezione descrive i fattori da considerare quando utilizzi questa architettura di riferimento per progettare una topologia in Google Cloud che soddisfi i requisiti di prestazioni dei tuoi carichi di lavoro.
Job di addestramento del profilo
Per ottimizzare le pipeline di input dei dati e il grafico di addestramento complessivo, ti consigliamo di eseguire il profiling del rendimento dell'addestramento con Cloud Profiler. Profiler è un'implementazione gestita del TensorBoard Profiler open source.
Se passi l'argomento –profiler
al job di addestramento, attivi il callback di TensorFlow per profilare un numero predefinito di batch per ogni epoca. Il profilo acquisisce le tracce dalla CPU dell'host e dall'hardware GPU o TPU del dispositivo. Le tracce forniscono informazioni sul consumo delle risorse del job di addestramento. Per evitare errori di esaurimento della memoria, ti consigliamo di iniziare con una durata del profilo compresa tra 2 e 10 passaggi di addestramento e di aumentare la durata in base alle esigenze.
Per scoprire come utilizzare Profiler con Vertex AI Training e Vertex AI TensorBoard, consulta Profila le prestazioni dell'addestramento del modello. Per le best practice di debug, consulta Ottimizzare le prestazioni della GPU. Per informazioni su come ottimizzare le prestazioni, consulta Ottimizzare le prestazioni di TensorFlow utilizzando Profiler.
Utilizzare completamente gli acceleratori
Quando colleghi acceleratori dell'addestramento come GPU NVIDIA o Cloud TPU, è importante mantenerli completamente utilizzati. L'utilizzo completo degli acceleratori della formazione è una best practice per la gestione dei costi perché gli acceleratori sono il componente più costoso dell'architettura. L'utilizzo completo degli acceleratori della formazione è anche una best practice per l'efficienza dei job, in quanto l'assenza di tempo di inattività comporta un minore consumo complessivo delle risorse.
Per mantenere un acceleratore completamente utilizzato, in genere esegui alcune iterazioni per trovare il collo di bottiglia, ottimizzarlo e poi ripetere questi passaggi fino a quando l'utilizzo del dispositivo dell'acceleratore non è accettabile. Poiché molti set di dati per questo caso d'uso sono troppo grandi per essere contenuti nella memoria, i colli di bottiglia si verificano tipicamente tra lo spazio di archiviazione, le VM host e l'acceleratore.
Il seguente diagramma mostra le fasi concettuali di una pipeline di input per l'addestramento ML:
Nel diagramma, i dati vengono letti dall'archiviazione e pre-elaborati. Dopo essere stati pre-elaborati, i dati vengono inviati al dispositivo. Per ottimizzare le prestazioni, inizia con determinare se le prestazioni complessive sono limitate dalla CPU dell'host o dal dispositivo di accelerazione (GPU o TPU). Il dispositivo è responsabile dell'accelerazione del loop di addestramento, mentre l'host è responsabile dell'alimentazione dei dati di addestramento al dispositivo e della ricezione dei risultati dal dispositivo. Le sezioni che seguono descrivono come risolvere i colli di bottiglia migliorando le prestazioni della pipeline di input e del dispositivo.
Migliorare le prestazioni della pipeline di input
- Lettura dei dati dallo spazio di archiviazione: per migliorare le letture dei dati, prova la memorizzazione nella cache, il prefetching, i pattern di accesso sequenziale e l'I/O parallela.
- Elaborazione dati preliminare: per migliorare l'elaborazione preliminare dei dati, configura la elaborazione parallela per l'estrazione e la trasformazione dei dati e ottimizza la trasformazione
interleave
nella pipeline di input dei dati. - Invio di dati al dispositivo: per ridurre il tempo complessivo del job, trasferisci i dati dall'host a più dispositivi in parallelo.
Migliorare le prestazioni del dispositivo
- Aumento della dimensione del mini-batch. I mini-batch sono il numero di campioni di addestramento utilizzati da ogni dispositivo in un'iterazione di un ciclo di addestramento. Aumentando le dimensioni del mini-batch, aumenti il parallelismo tra le operazioni e migliori il riutilizzo dei dati. Tuttavia, il mini batch deve essere in grado di adattarsi alla memoria con il resto del programma di addestramento. Se aumenti troppo le dimensioni del mini-batch, potresti riscontrare errori di esaurimento della memoria e divergenze del modello.
- Vettorizza le funzioni definite dall'utente. In genere, le trasformazioni dei dati possono essere espresse come una funzione definita dall'utente;utente che descrive come trasformare ogni elemento di un set di dati di input. Per vettorizzare questa funzione, applica l'operazione di trasformazione a un batch di input contemporaneamente anziché trasformare un elemento alla volta. Qualsiasi funzione definita dall'utente dall'utente ha un overhead correlato alla pianificazione e all'esecuzione. Quando trasformi un batch di input, l'overhead viene applicato una volta per batch anziché una volta per elemento del set di dati.
Esegui lo scale up prima dello scale out
Quando configuri le risorse di calcolo per i job di addestramento, ti consigliamo di eseguire lo scaling up prima di eseguire lo scaling out. Ciò significa che dovresti scegliere un dispositivo più grande e potente prima di utilizzare più dispositivi meno potenti. Ti consigliamo di eseguire la fare lo scale in seguente modo:
- Un solo worker + un solo dispositivo
- Un singolo worker + un dispositivo più potente
- Un singolo worker + più dispositivi
- Addestramento distribuito
Valutare il recupero rispetto alla latenza per la ricerca vettoriale ANN
Per valutare i vantaggi della ricerca con reti neurali artificiali, puoi misurare la latenza e il richiamo di una determinata query. Per facilitare l'ottimizzazione dell'indice, Vertex AI Ricerca vettoriale offre la possibilità di creare un indice di forza bruta. Gli indici di forza bruta eseguiranno una ricerca esaustiva, a scapito di una maggiore latenza, per trovare i veri vicini più vicini per un determinato vettore di query. L'utilizzo degli indici di forza bruta non è destinato all'uso in produzione, ma fornisce un buon riferimento quando calcoli il richiamo durante l'ottimizzazione dell'indice.
Per valutare il recupero rispetto alla latenza, esegui il deployment degli embedding candidati precomputati in un indice configurato per la ricerca con reti ANN e in un altro indice configurato per la ricerca bruta. L'indice di forza bruta restituirà i vicini più vicini assoluti, ma in genere richiederà più tempo di una ricerca con reti ANN. Potresti essere disposto a sacrificare un po' di recupero del recupero per ottenere guadagni in termini di latenza del recupero, ma questo compromesso deve essere valutato. Altre caratteristiche che influiscono sul richiamo e sulla latenza includono:
- Parametri di definizione del modello: molte decisioni di definizione del modello influiscono sullo spazio di embedding, che in ultima analisi diventa l'indice di pubblicazione. Confronta i candidati recuperati per gli indici creati da modelli di recupero sia superficiali che approfonditi.
- Dimensioni: le dimensioni sono un altro aspetto che viene determinato dal modello. Le dimensioni dell'indice ANN devono corrispondere alle dimensioni dei vettori della query e della torre candidata.
- Tag di aggregazione e filtri: i tag possono offrire funzionalità efficaci per personalizzare i risultati in base a diversi casi d'uso di produzione. È buona prassi comprendere in che modo i tag influiscono sui candidati recuperati e sul rendimento.
- Conteggio ANN: l'aumento di questo valore aumenta il ricordo e può aumentare proporzionalmente la latenza.
- Percentuale di nodi foglia in cui cercare: la percentuale di nodi foglia in cui cercare è l'opzione più importante per valutare il compromesso tra il recupero e la latenza. L'aumento di questo valore aumenta il richiamo e può proporzionalmente aumentare la latenza.
Passaggi successivi
Per altre architetture di riferimento, diagrammi e best practice, visita il Centro architetture di Google Cloud.
Collaboratori
Autori:
- Jordan Totten | Customer Engineer
- Jeremy Wortz | Customer Engineer
- Lakshmanan Sethu | Technical Account Manager
Altro collaboratore: Kaz Sato | Staff Developer Advocate