Implementare il recupero a due torri per la generazione di candidati su larga scala

Last reviewed 2025-01-16 UTC

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 elementi candidati.

Questo documento è destinato a professionisti tecnici come data scientist e machine learning engineer che sviluppano applicazioni di raccomandazione 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 Scalare il recupero profondo con TensorFlow Recommenders e la ricerca vettoriale.

Architettura

Il seguente diagramma mostra un'architettura per addestrare un modello a due torri e implementare ogni torre separatamente per diverse attività di deployment e servizio:

Un'architettura per addestrare un modello a due torri e implementare ogni torre separatamente.

L'architettura nel diagramma include i seguenti componenti:

  • Dati di addestramento: i file di addestramento sono 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.
  • Torri di query e candidati registrate: dopo l'addestramento delle torri, 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 sottoposta a deployment in un endpoint online Vertex AI.
  • Incorporamenti di previsione batch: la torre dei candidati registrata viene utilizzata in un job di previsione batch per precalcolare le rappresentazioni degli incorporamenti di tutti gli elementi candidati disponibili.
  • JSON degli incorporamenti: gli incorporamenti 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 approssimata del vicino più prossimo (ANN).
  • Indice di cui è stato eseguito il deployment: l'indice ANN viene sottoposto a deployment 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 ti consente di rendere operativo l'addestramento di modelli su larga scala.
  • Vector Search: un servizio di corrispondenza della somiglianza vettoriale che ti 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 la ridondanza.

Caso d'uso

Per soddisfare i requisiti di pubblicazione a bassa latenza, i sistemi di raccomandazione su larga scala vengono spesso implementati in produzione come sistemi a due fasi o a volte come sistemi a più fasi. L'obiettivo della prima fase, la generazione di candidati, è quello di esaminare una vasta raccolta di elementi candidati e recuperare un sottoinsieme pertinente di centinaia di elementi per le attività di filtro e ranking downstream. Per ottimizzare questa attività di recupero, considera questi due obiettivi principali:

  1. Durante l'addestramento del modello, impara la migliore rappresentazione del problema o dell'attività da risolvere e compila questa rappresentazione in <query, candidate> embedding.
  2. Durante la pubblicazione del modello, recupera gli elementi pertinenti abbastanza velocemente da soddisfare i requisiti di latenza.

Il seguente diagramma mostra i componenti concettuali di un sistema di raccomandazione a due fasi:

I componenti concettuali di un sistema di raccomandazione in due fasi.

Nel diagramma, la generazione dei candidati filtra milioni di elementi candidati. Il ranking filtra poi 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 caratteristiche della query o dell'elemento candidato e poi produce una rappresentazione di incorporamento di queste caratteristiche. Ogni torre viene sottoposta a deployment separatamente, perché ogni torre verrà utilizzata per attività diverse in produzione:

  • Torre dei candidati: la torre dei candidati viene utilizzata per precalcolare gli incorporamenti per tutti gli elementi candidati. Gli incorporamenti precalcolati vengono sottoposti a deployment in un endpoint di 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 utente non elaborate in rappresentazioni di incorporamento. Le rappresentazioni dell'incorporamento vengono quindi 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 incorporamento condiviso. Quando le entità vengono mappate a uno spazio di incorporamento condiviso, le entità semanticamente simili vengono raggruppate più vicine tra loro. 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 questa architettura è la possibilità di disaccoppiare l'inferenza delle rappresentazioni di query e candidati. I vantaggi di questo disaccoppiamento sono principalmente due:

  • Puoi pubblicare nuovi elementi senza dover riqualificare un nuovo vocabolario di elementi. Inserendo qualsiasi insieme di funzionalità dell'elemento nella torre dell'elemento candidato, puoi calcolare gli incorporamenti dell'elemento 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 dei candidati può supportare un insieme arbitrario di elementi candidati, inclusi quelli con cui non è ancora stato interagito con il sistema di raccomandazione. Questo supporto è possibile perché le architetture a due torri elaborano contenuti avanzati e funzionalità di metadati su ogni coppia <query, candidate>. Questo tipo di elaborazione consente al sistema di descrivere un elemento sconosciuto in termini di elementi che conosce.
  • Puoi ottimizzare l'inferenza di recupero precalcolando tutti gli incorporamenti degli elementi candidati. Questi incorporamenti precalcolati possono essere indicizzati e implementati in un'infrastruttura di pubblicazione ottimizzata per il recupero a bassa latenza.
    • Il co-apprendimento 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 precalcolare metà dell'equazione in anticipo. Il precalcolo ti consente di prendere il resto della decisione il più rapidamente possibile.

Considerazioni sulla progettazione

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 riportate in questa sezione non sono esaustive. A seconda dei tuoi requisiti specifici, potresti scegliere di considerare fattori di progettazione e compromessi aggiuntivi.

Sicurezza

Vertex AI Vector Search supporta i deployment di endpoint pubblici e Virtual Private Cloud (VPC). Se vuoi utilizzare una rete VPC, inizia seguendo la procedura descritta in Configurare una connessione di peering di rete VPC. Se l'indice Vector Search 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. Allo stesso modo, qualsiasi pipeline che dovrebbe creare un endpoint o distribuire un indice a un endpoint deve essere eseguita all'interno della 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 rendimento dei tuoi workload.

Job di addestramento del profilo

Per ottimizzare le pipeline di input dei dati e il grafico di addestramento complessivo, ti consigliamo di profilare il rendimento dell'addestramento con Cloud Profiler. Profiler è un'implementazione gestita di TensorBoard Profiler open source.

Se passi l'argomento –profiler nel job di addestramento, attivi il callback TensorFlow per profilare un numero fisso di batch per ogni epoca. Il profilo acquisisce le tracce dalla CPU host e dall'hardware GPU o TPU del dispositivo. Le tracce forniscono informazioni sul consumo di risorse del job di addestramento. Per evitare errori di memoria insufficiente, ti consigliamo di iniziare con una durata del profilo compresa tra 2 e 10 passaggi di addestramento e di aumentarla in base alle esigenze.

Per scoprire come utilizzare Profiler con Vertex AI Training e Vertex AI TensorBoard, consulta Profilare le prestazioni di addestramento del modello. Per le best practice di debug, consulta Ottimizza le prestazioni della GPU. Per informazioni su come ottimizzare le prestazioni, consulta Ottimizzare le prestazioni di TensorFlow utilizzando Profiler.

Utilizzare appieno gli acceleratori

Quando colleghi acceleratori di addestramento come GPU NVIDIA o TPU Cloud, è importante mantenerli completamente utilizzati. L'utilizzo completo degli acceleratori di addestramento è una best practice per la gestione dei costi perché gli acceleratori sono il componente più costoso dell'architettura. L'utilizzo completo degli acceleratori di addestramento è anche una best practice per l'efficienza del job, perché l'assenza di tempi di inattività comporta un consumo complessivo inferiore di risorse.

Per mantenere un acceleratore completamente utilizzato, in genere esegui alcune iterazioni per trovare il collo di bottiglia, ottimizzarlo e ripetere questi passaggi finché l'utilizzo del dispositivo acceleratore non è accettabile. Poiché molti dei set di dati per questo caso d'uso sono troppo grandi per essere contenuti nella memoria, i colli di bottiglia si trovano in genere tra l'archiviazione, le VM host e l'acceleratore.

Il seguente diagramma mostra le fasi concettuali di una pipeline di input di addestramento ML:

Le fasi concettuali di una pipeline di input di addestramento ML.

Nel diagramma, i dati vengono letti dallo spazio di archiviazione e pre-elaborati. Dopo il pre-elaborazione, i dati vengono inviati al dispositivo. Per ottimizzare le prestazioni, inizia determinando se le prestazioni complessive sono limitate dalla CPU host o dal dispositivo di accelerazione (GPU o TPU). Il dispositivo è responsabile dell'accelerazione del ciclo di addestramento, mentre l'host è responsabile dell'invio dei dati di addestramento al dispositivo e della ricezione dei risultati dal dispositivo. Le sezioni seguenti 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 parallelo.
  • Pre-elaborazione dei dati: per migliorare la pre-elaborazione dei dati, configura il trattamento parallelo 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 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 poter essere inserito in memoria con il resto del programma di addestramento. Se aumenti troppo la dimensione del mini-batch, potresti riscontrare errori di memoria insufficiente e divergenza del modello.
  • Vectorizza 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 vectorizzare questa funzione, applichi 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 eseguito una volta per batch, anziché una volta per elemento del set di dati.
Aumenta lo scale up prima dello scale out

Quando configuri le risorse di calcolo per i job di addestramento, ti consigliamo di aumentare lo scale up prima dello scale out. Ciò significa che devi scegliere un dispositivo più grande e potente prima di utilizzare più dispositivi meno potenti. Ti consigliamo difare lo scale inl seguente modo:

  1. Un solo lavoratore + un solo dispositivo
  2. Un solo operatore + dispositivo più potente
  3. Un solo lavoratore + più dispositivi
  4. Addestramento distribuito

Per valutare i vantaggi della ricerca ANN, puoi misurare la latenza e il richiamo di una determinata query. Per facilitare l'ottimizzazione dell'indice, Vertex AI Vector Search offre la possibilità di creare un indice di forza bruta. Gli indici di ricerca esaustiva eseguiranno una ricerca esaustiva, a scapito di una latenza maggiore, per trovare i vicini più prossimi effettivi per un determinato vettore di query. L'utilizzo di indici di forza bruta non è destinato all'uso in produzione, ma fornisce una buona base di riferimento quando calcoli il richiamo durante l'ottimizzazione dell'indice.

Per valutare il richiamo rispetto alla latenza, devi eseguire il deployment degli incorporamenti dei candidati precalcolati in un indice configurato per la ricerca ANN e in un altro indice configurato per la ricerca esaustiva. L'indice di ricerca esaustiva restituirà i vicini più vicini assoluti, ma in genere richiederà più tempo rispetto a una ricerca ANN. Potresti essere disposto a sacrificare un po' di precisione del recupero per ottenere vantaggi in termini di latenza del recupero, ma questo compromesso deve essere valutato. Altre caratteristiche che influiscono sul richiamo e sulla latenza includono:

  • Parametri di modellazione: molte decisioni di modellazione influiscono sullo spazio di incorporamento, che alla fine diventa l'indice di pubblicazione. Confronta i candidati recuperati per gli indici creati a partire da modelli di recupero sia superficiali che profondi.
  • Dimensioni: le dimensioni sono un altro aspetto che alla fine è determinato dal modello. Le dimensioni dell'indice ANN devono corrispondere a quelle dei vettori della query e della torre dei candidati.
  • Tag di affollamento e filtraggio: i tag possono fornire funzionalità avanzate per personalizzare i risultati per diversi casi d'uso di produzione. È una best practice comprendere in che modo i tag influenzano i candidati recuperati e il rendimento.
  • Conteggio ANN: l'aumento di questo valore incrementa il richiamo 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 richiamo e latenza. L'aumento di questo valore incrementa il richiamo e può aumentare proporzionalmente la latenza.

Passaggi successivi

Per ulteriori architetture di riferimento, diagrammi e best practice, esplora il Cloud Architecture Center.

Collaboratori

Autori:

Altro collaboratore: Kaz Sato | Staff Developer Advocate