Infrastruttura per un'applicazione di AI generativa compatibile con RAG che utilizza GKE

Last reviewed 2024-04-02 UTC

Questo documento fornisce un'architettura di riferimento che puoi utilizzare per progettare dell'infrastruttura per eseguire un'applicazione di AI generativa RAG (Retrieval-Augmented Generation) utilizzando Google Kubernetes Engine (GKE), Cloud SQL e strumenti open source come Ray, Hugging Face e LangChain. Per aiutarti a sperimentare con questo riferimento un'applicazione di esempio e la configurazione di Terraform GitHub.

Questo documento è rivolto agli sviluppatori che vogliono creare ed eseguire rapidamente il deployment delle funzionalità RAG le applicazioni di AI generativa usando strumenti e modelli open source. Presuppone esperienza nell'uso di GKE di Cloud SQL e di avere una conoscenza concettuale di AI, machine machine learning (ML) e modelli linguistici di grandi dimensioni (LLM). Questo documento non fornisce indicazioni su come progettare sviluppare un'applicazione di AI generativa.

Architettura

Il seguente diagramma mostra una visione generale di un'architettura per Applicazione di AI generativa compatibile con RAG in Google Cloud:

Un'architettura di alto livello per un'applicazione di AI generativa compatibile con RAG in Google Cloud.

L'architettura contiene un sottosistema di pubblicazione e un sottosistema di incorporamento.

  • Il sottosistema di pubblicazione gestisce il flusso di richiesta-risposta tra i dell'applicazione e dei relativi utenti. Il sottosistema include un server frontend, un di inferenza e un IA responsabile (RAI) completamente gestito di Google Cloud. Il sottosistema di pubblicazione interagisce con il sottosistema di incorporamento attraverso un database vettoriale.
  • Il sottosistema di incorporamento abilita la funzionalità RAG dell'architettura. Questo sottosistema esegue le seguenti operazioni:
    • Importa i dati da origini dati in Google Cloud, on-premise e altre piattaforme cloud.
    • Converte i dati importati in incorporamenti vettoriali.
    • Archivia gli incorporamenti in un database vettoriale.

Il seguente diagramma mostra una vista dettagliata dell'architettura:

Un'architettura dettagliata per un'applicazione di AI generativa compatibile con RAG in Google Cloud.

Come mostrato nel diagramma precedente, il server frontend, il server di inferenza e il servizio di incorporamento viene eseguito in un cluster GKE Pilota automatico . I dati per RAG vengono importati tramite un bucket Cloud Storage. La utilizza un'istanza Cloud SQL per PostgreSQL con pgvector come database vettoriale per archiviare gli incorporamenti ed eseguire operazioni semantiche ricerche. Database vettoriali sono progettate per archiviare e recuperare in modo efficiente vettori ad alta dimensionalità.

Le seguenti sezioni descrivono i componenti e il flusso di dati all'interno di ogni sottosistema dell'architettura.

Incorporamento di sottosistema

Di seguito è riportato il flusso di dati nel sottosistema di incorporamento:

  1. I dati da fonti esterne e interne vengono caricati Bucket Cloud Storage da parte di utenti umani o in modo programmatico. La i dati caricati possono essere contenuti in file, database o flussi di dati.
  2. (non mostrato nel diagramma dell'architettura). L'attività di caricamento dati attiva un evento pubblicato in un servizio di messaggistica come in Pub/Sub. Il servizio di messaggistica invia una notifica all'indirizzo di incorporamento.
  3. Quando il servizio di incorporamento riceve una notifica di caricamento di dati avviene nel seguente modo:
    1. Recupera i dati dal bucket Cloud Storage tramite il Driver CSI di Cloud Storage FUSE.
    2. Legge i dati caricati e li pre-elabora utilizzando Dati a raggi. La pre-elaborazione può includere il chunking dei dati e la loro trasformazione in un formato adatto per la generazione dell'incorporamento.
    3. Esegue un Ray job per creare incorporamenti vettoriali dei dati pre-elaborati utilizzando un open source come il modello intfloat/multilingue-e5-small di cui è stato eseguito il deployment nello stesso cluster.
    4. Scrive gli incorporamenti vettorializzati nella Database vettoriale Cloud SQL per PostgreSQL.

Come descritto nella sezione seguente, quando il sottosistema di gestione elabora richieste dall'utente, utilizza gli incorporamenti nel database vettoriale per i dati specifici del dominio pertinenti.

Sottosistema di pubblicazione

Di seguito è riportato il flusso di richiesta-risposta nel sottosistema di pubblicazione:

  1. Un utente invia una richiesta in linguaggio naturale a un server frontend tramite un'interfaccia di chat basata sul web. Il server frontend viene eseguito con GKE.
  2. Il server frontend esegue LangChain che esegue le seguenti operazioni:
      .
    1. Converte la richiesta in linguaggio naturale in incorporamenti utilizzando lo stesso modello e gli stessi parametri utilizzati dal servizio di incorporamento.
    2. Recupera i dati di grounding pertinenti eseguendo una gli incorporamenti nel database vettoriale. La ricerca semantica aiuta a trovare incorporamenti basati sull'intento di un prompt piuttosto che sul suo contenuto testuale.
    3. Crea un prompt contestualizzato combinando l'originale richiesta con i dati di grounding recuperati.
    4. Invia il prompt contestualizzato al server di inferenza, che viene eseguito su GKE.
  3. Il server di inferenza utilizza TGI con Hugging Face per gestire un LLM open source come Istruzioni Mistral-7B o un Modello aperto di Gemma.
  4. L'LLM genera una risposta al prompt e il server di inferenza invia la risposta al server frontend.

    Puoi archiviare e visualizzare i log dell'attività richiesta-risposta in Cloud Logging, e configurare il monitoraggio basato su log utilizzando e configurazione in Cloud Monitoring. Puoi anche caricare le risposte generate BigQuery per l'analisi offline.

  5. Il server frontend richiama un servizio RAI per applicare la sicurezza richiesta filtri alla risposta. Puoi usare strumenti come Protezione dei dati sensibili e API Cloud Natural Language per scoprire, filtrare, classificare e anonimizzare i contenuti sensibili nel diverse.

  6. Il server frontend invia la risposta filtrata all'utente.

Prodotti utilizzati

Di seguito è riportato un riepilogo dei prodotti Google Cloud e open source usati dall'architettura precedente:

Prodotti Google Cloud

  • Google Kubernetes Engine (GKE): un servizio Kubernetes che puoi utilizzare per il deployment e gestire applicazioni containerizzate su larga scala utilizzando l'infrastruttura di Google.
  • Cloud Storage: un archivio di oggetti economico e senza limiti per diversi tipi di dati. I dati sono accessibili dall'interno e dall'esterno di Google Cloud replicati in più località per la ridondanza.
  • Cloud SQL: un servizio di database relazionale completamente gestito che ti aiuta Eseguire il provisioning, eseguire e gestire i database MySQL, PostgreSQL e SQL Server su Google Cloud.

Prodotti open source

Casi d'uso

RAG è una tecnica efficace per migliorare la qualità dell'output, generati da un LLM. Questa sezione fornisce esempi di casi d'uso per i quali possono utilizzare applicazioni di AI generativa compatibili con RAG.

Suggerimenti personalizzati sui prodotti

Un sito di shopping online potrebbe utilizzare un chatbot basato su LLM per assistere i clienti per la ricerca di prodotti o l'assistenza per gli acquisti. Le domande di un l'utente può essere incrementato utilizzando dati storici relativi al suo comportamento di acquisto e i modelli di interazione con il sito web. I dati potrebbero includere recensioni degli utenti e Feedback archiviato in un datastore non strutturato o in metriche relative alla ricerca in un data warehouse di analisi dei dati web. La domanda aumentata può essere poi elaborato dall'LLM per generare risposte personalizzate che l'utente potrebbero trovare più interessanti e convincenti.

Sistemi di assistenza clinica

I medici negli ospedali devono analizzare e diagnosticare rapidamente la salute di un paziente patologia per prendere decisioni relative a cure e farmaci appropriati. Un modello un'applicazione di AI che utilizza un LLM medico come Med-PaLM può essere utilizzato per assistere i medici nel loro processo di diagnosi clinica. Le risposte generati dall'applicazione possono essere basati sulle cartelle cliniche storiche dei pazienti, contestualizzare il lavoro con dati provenienti dal database elettronico dell'ospedale un database di cartelle cliniche (EHR) o da una knowledge base esterna come PubMed

La ricerca legale basata sull'IA generativa consente agli avvocati di interrogare rapidamente grandi volumi di statuti e giurisprudenza per identificare i precedenti legali pertinenti o riassumere concetti giuridici complessi. Il risultato di questa ricerca può essere migliorato Integrando le richieste di un avvocato con i dati recuperati dalla sua corpus proprietario di contratti, comunicazioni legali passate e casi interni record. Questo approccio di progettazione garantisce che le risposte generate siano pertinenti nell'ambito legale in cui l'avvocato è specializzato.

Note sul layout

Questa sezione fornisce indicazioni per aiutarti a sviluppare ed eseguire un un'architettura di AI generativa compatibile con RAG ospitata su GKE soddisfa i requisiti specifici di sicurezza, conformità, affidabilità, e prestazioni ottimali. Le indicazioni fornite in questa sezione non sono esaustive. In base requisiti specifici dell'applicazione e dei prodotti Google Cloud e le funzionalità che utilizzi, potresti dover prendere in considerazione altri fattori di progettazione e compromessi.

Per indicazioni sulla progettazione relative agli strumenti open source in questo riferimento come Hugging Face TGI, consulta la documentazione di questi strumenti.

Sicurezza, privacy e conformità

Questa sezione descrive i fattori che devi prendere in considerazione quando progetti creare un'applicazione di AI generativa compatibile con RAG in Google Cloud che soddisfi le per soddisfare i requisiti di sicurezza, privacy e conformità.

Prodotto Note sul layout
GKE

Nella modalità operativa Autopilot, preconfigura il cluster e gestisce i nodi in base alle per concentrarti sulla sicurezza specifica del carico di lavoro. Per ulteriori informazioni, consulta le seguenti risorse:

Per garantire un maggiore controllo dell'accesso per le applicazioni in esecuzione in GKE, puoi usare Identity-Aware Proxy (IAP). IAP si integra con risorsa Ingress e garantisce che solo gli utenti autenticati con con il ruolo corretto di Identity and Access Management (IAM) può accedere alle applicazioni. Per ulteriori informazioni, vedi Abilitazione di IAP per GKE.

Per impostazione predefinita, i dati in GKE sono criptati at-rest e . in transito usando chiavi di proprietà e gestite da Google. Come ulteriore per i dati sensibili, puoi criptare i dati utilizzando una chiave che possiedi e gestisci di Cloud KMS. Per ulteriori informazioni, vedi Cripta i secret a livello di applicazione.

Se utilizzi un cluster GKE standard, puoi utilizzare le seguenti funzionalità aggiuntive di crittografia dei dati:

Cloud SQL

L'istanza Cloud SQL nell'architettura non deve essere accessibili dalla rete internet pubblica. Se l'accesso esterno È necessaria un'istanza Cloud SQL. Puoi criptare gli indirizzi di connessioni utilizzando SSL/TLS o . Connettore proxy di autenticazione Cloud SQL. Il connettore del proxy di autenticazione fornisce l'autorizzazione alla connessione tramite IAM. La utilizza una connessione TLS 1.3 con una crittografia AES a 256 bit per verificare le identità client e server e cripta il traffico dati. Per connessioni creati con Java, Python, Go o Node.js, utilizza il linguaggio Connettore di lingua anziché il connettore proxy di autenticazione.

Per impostazione predefinita, Cloud SQL utilizza dati di proprietà e gestiti da Google chiavi di crittografia (DEK) e chiavi di crittografia della chiave (KEK) per criptare i dati a riposo. Se hai bisogno di utilizzare KEK che puoi controllare e gestire, puoi utilizzare e le chiavi di crittografia gestite dal cliente (CMEK).

Per impedire l'accesso non autorizzato all'API Cloud SQL Admin, puoi creare un perimetro di servizio Controlli di servizio VPC.

Per informazioni sulla configurazione di Cloud SQL soddisfare i requisiti di residenza dei dati, Panoramica sulla residenza dei dati.

Cloud Storage

Per impostazione predefinita, i dati archiviati in Cloud Storage sono usando chiavi di proprietà e gestite da Google. Se necessario, puoi usare CMEK o le tue chiavi che gestisci utilizzando un come le chiavi di crittografia fornite dal cliente (CSEK). Per ulteriori informazioni, vedi Opzioni di crittografia dei dati.

Cloud Storage supporta due metodi per controllare l'accesso degli utenti ai bucket e agli oggetti: IAM ed elenchi di controllo dell'accesso (ACL). Nella maggior parte dei casi, consigliamo di utilizzare IAM, che consente concedi le autorizzazioni a livello di bucket e di progetto. Per ulteriori informazioni le informazioni, vedi Panoramica del controllo dell'accesso.

I dati caricati nel sottosistema di importazione dati tramite Cloud Storage potrebbe includere dati sensibili. Per proteggere tali puoi usare Sensitive Data Protection per scoprire, a classificare e anonimizzare i dati. Per ulteriori informazioni, vedi Utilizzo di Sensitive Data Protection con Cloud Storage.

Per ridurre il rischio di esfiltrazione di dati da Cloud Storage, puoi creare un perimetro di servizio Controlli di servizio VPC.

Cloud Storage ti aiuta a soddisfare la residenza dei dati i tuoi requisiti. I dati vengono archiviati o replicati all'interno delle regioni da te specificato.

Tutti i prodotti di questa architettura

Gli audit log per le attività di amministrazione sono abilitati per impostazione predefinita per tutti Servizi Google Cloud utilizzati in questo riferimento dell'architettura. Puoi accedere ai log tramite Cloud Logging e utilizzare i log per monitorare le chiamate API o altre azioni che modificano configurazione o metadati delle risorse Google Cloud.

Anche gli audit log di accesso ai dati sono abilitati per impostazione predefinita per tutti ai servizi Google Cloud in questa architettura. Puoi utilizzare questi log per monitorare quanto segue:

  • Chiamate API che leggono la configurazione o i metadati delle risorse.
  • L'utente richiede di creare, modificare o leggere la risorsa fornita dall'utente e i dati di Google Cloud.

Per linee guida generali sui principi di sicurezza da considerare per le applicazioni dell'AI, vedi Presentazione Il Secure AI Framework di Google.

Affidabilità

Questa sezione descrive i fattori di progettazione che dovresti prendere in considerazione per creare e per gestire un'infrastruttura affidabile per un'applicazione di AI generativa compatibile con RAG in Google Cloud.

Prodotto Note sul layout
GKE

Con la modalità operativa Autopilot usata Transformer, GKE fornisce le seguenti funzionalità di affidabilità integrate:

  • Il carico di lavoro utilizza un cluster GKE a livello di regione. Il piano di controllo e i nodi worker sono distribuiti in tre diverse zone all'interno di una regione. I tuoi carichi di lavoro sono robusti contro le interruzioni di zona. I cluster GKE a livello di regione hanno tempo di attività più alto SLA rispetto ai cluster di zona.
  • Non è necessario creare nodi o gestire i pool di nodi. GKE crea automaticamente i pool di nodi le scala automaticamente in base ai requisiti carichi di lavoro con scale out impegnativi.

Per assicurarti che sia disponibile una capacità GPU sufficiente quando per scalare la scalabilità automatica del cluster GKE, puoi creare prenotazioni. Una prenotazione offre capacità garantita una zona specifica per una risorsa specificata. Una prenotazione può essere specifica a un progetto o condivisi tra più progetti. Ti vengono addebitati dei costi per le risorse prenotate anche se non è stato eseguito il provisioning delle risorse in uso. Per ulteriori informazioni, vedi Utilizzo di risorse di zona riservate.

Cloud SQL

Garantire che il database vettoriale sia affidabile rispetto al database guasti e interruzioni delle zone, utilizza Istanza Cloud SQL configurata ad alta disponibilità. In caso di errore del database principale o di un'interruzione della zona, Cloud SQL automaticamente al database in standby in un'altra zona. Non è necessario modificare l'indirizzo IP dell'endpoint del database.

Per assicurarti che le istanze Cloud SQL siano coperte il SLA, segui le linee guida operative consigliate. Ad esempio: garantire che CPU e memoria siano dimensionate correttamente per il carico di lavoro; e abilitare gli aumenti automatici dello spazio di archiviazione. Per ulteriori informazioni, vedi Linee guida operative.

Cloud Storage Puoi creare bucket Cloud Storage in uno dei tre seguenti tipi di località: a singola regione, a due regioni o a più regioni. I dati che sono archiviati in bucket a livello di regione vengono replicati in modo sincrono zone all'interno di una regione. Per una maggiore disponibilità, puoi usare due regioni o bucket multiregionali, dove i dati vengono replicati in modo asincrono regioni.

Ottimizzazione dei costi

Questa sezione fornisce indicazioni per aiutarti a ottimizzare i costi di configurazione un'applicazione di AI generativa compatibile con RAG in Google Cloud.

Prodotto Note sul layout
GKE

In modalità Autopilot, GKE ottimizza efficienza dell'infrastruttura del cluster in base al carico di lavoro i tuoi requisiti. Non hai bisogno di monitorare costantemente le risorse l'utilizzo o la gestione della capacità per controllare i costi.

Se puoi prevedere l'utilizzo di CPU, memoria e spazio di archiviazione temporaneo del tuo cluster GKE Autopilot, possono risparmiare denaro ottenendo sconti per impegno di utilizzo. Per ulteriori informazioni le informazioni, vedi Sconti per impegno di utilizzo di GKE.

Per ridurre il costo di esecuzione della tua applicazione, puoi utilizzare Spot VM per i tuoi nodi GKE. Le VM spot hanno un prezzo inferiore rispetto alle VM standard, ma non forniscono garanzia di disponibilità. Per informazioni sui vantaggi di di nodi che usano le VM spot, come funzionano GKE e come pianificare carichi di lavoro nodi, vedi VM spot.

Per ulteriori indicazioni sull'ottimizzazione dei costi, consulta Best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.

Cloud SQL

Una configurazione ad alta disponibilità (HA) aiuta a ridurre i tempi di inattività per il database Cloud SQL quando la zona o l'istanza diventa non disponibile. Tuttavia, il costo di un'istanza configurata ad alta disponibilità è superiore a quello di un'istanza un'istanza autonoma. Se non hai bisogno dell'alta disponibilità per il database vettoriale, puoi ridurre i costi utilizzando un'istanza autonoma, che non è affidabile contro le interruzioni di una zona.

Puoi rilevare se la tua istanza Cloud SQL è in overprovisioning e ottimizzare la fatturazione tramite Cloud SQL approfondimenti sui costi e suggerimenti basati su Active Assist. Per ulteriori informazioni, vedi Riduci le istanze Cloud SQL con overprovisioning.

Se puoi prevedere i requisiti di CPU e memoria all'istanza Cloud SQL, puoi risparmiare denaro ottenendo per l'utilizzo per impegno di utilizzo. Per ulteriori informazioni, vedi Sconti per impegno di utilizzo di Cloud SQL.

Cloud Storage Per il bucket Cloud Storage che utilizzi per caricare i dati per l'importazione dati, scegli un'istanza classe di archiviazione. Quando scegli la classe di archiviazione, considera i requisiti di conservazione dei dati e frequenza di accesso dei tuoi carichi di lavoro. Per Ad esempio, per controllare i costi di archiviazione, puoi scegliere il modello classe e uso Gestione del ciclo di vita degli oggetti. In questo modo viene attivato il downgrade automatico di archiviazione a una classe di archiviazione a basso costo o l'eliminazione di oggetti in base le condizioni da te impostate.

Per stimare il costo delle risorse Google Cloud, utilizza Calcolatore prezzi di Google Cloud.

Ottimizzazione delle prestazioni

Questa sezione descrive i fattori che devi prendere in considerazione quando progetti creare un'applicazione di AI generativa compatibile con RAG in Google Cloud che soddisfi le i tuoi requisiti di prestazioni.

Prodotto Note sul layout
GKE Scegli l'opzione appropriata di calcolo per i tuoi pod in base alle prestazioni i requisiti dei carichi di lavoro. Per i pod che eseguono l'inferenza server e al servizio di incorporamento, ti consigliamo di utilizzare un'istanza Tipo di macchina GPU come nvidia-l4.
Cloud SQL

Per ottimizzare le prestazioni dell'istanza Cloud SQL, assicura che la CPU e la memoria allocate all'istanza siano adeguato per il carico di lavoro. Per ulteriori informazioni, vedi Ottimizza le istanze Cloud SQL con underprovisioning.

Per migliorare il tempo di risposta per il vicino più prossimo approssimativo (ANN), utilizza la file invertito con indice di compressione piatta (IVFFlat) o . Indice HNSW (Hierarchical Navigable Small World)

Per aiutarti ad analizzare e migliorare le prestazioni delle query del Cloud SQL offre uno strumento Query Insights. Puoi utilizzare questo strumento per monitorare le prestazioni e tracciare l'origine di un una query problematica. Per ulteriori informazioni, vedi Utilizza Query Insights per migliorare le prestazioni delle query.

Per avere una panoramica dello stato e del rendimento dei tuoi e visualizzare metriche dettagliate come i picchi di connessioni per l'utilizzo del disco, puoi usare la dashboard di System Insights. Per ulteriori informazioni le informazioni, vedi Utilizza gli insight sul sistema per migliorare le prestazioni del sistema.

Cloud Storage Per caricare file di grandi dimensioni, puoi utilizzare un metodo chiamato parallelo caricamenti compositi. Con questa strategia, il file di grandi dimensioni viene in blocchi. I blocchi vengono caricati su Cloud Storage in parallelo e i dati vengono ricomposti nel cloud. Quando la rete larghezza di banda e velocità del disco non sono fattori limitanti, quindi i caricamenti compositi possono essere più veloci rispetto alle normali operazioni di caricamento. Tuttavia, questa strategia presenta alcune limitazioni e implicazioni in termini di costi. Per ulteriori informazioni, vedi Caricamenti compositi paralleli.

Deployment

Per eseguire il deployment di una topologia basata su questa architettura di riferimento, puoi scaricare e utilizzare il codice campione open source disponibile in un repository GitHub. Il codice campione non è destinato a casi d'uso di produzione. Puoi utilizzare il codice per fare esperimenti con la configurazione dell'infrastruttura AI per AI generativa abilitata per RAG un'applicazione.

Il codice di esempio esegue queste operazioni:

  1. Esegue il provisioning di un'istanza Cloud SQL per PostgreSQL da utilizzare come un database vettoriale.
  2. Esegue il deployment di Ray, JupyterHub e Hugging Face TGI in un cluster GKE da te specificato.
  3. Esegue il deployment di un'applicazione chatbot basata sul web di esempio nel tuo cluster GKE per consentirti di verificare la funzionalità RAG.

Per istruzioni su come utilizzare il codice campione, consulta LEGGIMI per il codice. Se si verificano errori quando utilizzi il codice campione e se aperto Problemi relativi a GitHub non esistono per gli errori, crea problemi in GitHub.

Il codice campione esegue il deployment di risorse Google Cloud fatturabili. Al termine utilizzando il codice, rimuovi tutte le risorse che non ti servono più.

Passaggi successivi

Collaboratori

Autore: Kumar Dhanagopal | Sviluppatore di soluzioni cross-product

Altri collaboratori: