LLMOps con prompt flow e GitHub

LLMOps (Large Language Operations) è diventato l'elemento fondamentale di una progettazione e dello sviluppo e della distribuzione efficienti di applicazioni con modelli linguistici di grandi dimensioni (LLM). Man mano che la domanda di applicazioni con LLM continua ad aumentare, le organizzazioni si trovano ad avere bisogno di un processo coerente e semplificato per gestire il ciclo di vita end-to-end.

Azure Machine Learning consente di eseguire l'integrazione con GitHub per automatizzare il ciclo di vita di sviluppo delle applicazioni con LLM tramite prompt flow.

Il prompt flow di Azure Machine Learning offre un approccio semplificato e strutturato allo sviluppo di applicazioni con LLM. Il processo e il ciclo di vita ben definiti guidano l'utente nel processo di compilazione, test, ottimizzazione e distribuzione dei flussi, che culmina nella creazione di soluzioni con LLM completamente funzionali.

Funzionalità del prompt flow LLMOps

LLMOps con prompt flow è un "modello LLMOps e indicazioni" per semplificare la creazione di app con LLM tramite prompt flow. Offre le funzionalità seguenti:

  • Hosting centralizzato del codice: questo repository supporta l'hosting di codice per più flussi in base al prompt flow, fornendo un singolo repository per tutti i flussi. È possibile considerare questa piattaforma come un unico repository in cui si trova tutto il codice del prompt flow. È come una libreria per i flussi, che semplifica l'individuazione, l'accesso e la collaborazione su progetti diversi.

  • Gestione del ciclo di vita: ogni flusso ha il proprio ciclo di vita, in modo da consentire transizioni senza problemi dalla sperimentazione locale alla distribuzione di produzione. Screenshot of pipeline.

  • Sperimentazione con varianti e iperparametri: è possibile sperimentare con più varianti e iperparametri, valutando le varianti di flusso con facilità. Varianti e iperparametri sono come ingredienti in una ricetta. Questa piattaforma consente di sperimentare diverse combinazioni di varianti tra più nodi in un flusso.

  • Più destinazioni di distribuzione: il repository supporta la distribuzione di flussi in Servizi app di Azure, Kubernetes, ambienti di calcolo gestiti di Azure tramite la configurazione per garantire che i flussi possano essere ridimensionati in base alle esigenze. Genera anche immagini Docker che includono il runtime di Flow e i flussi per la distribuzione in qualsiasi piattaforma e sistema operativo di destinazione che supporta Docker. Screenshot of endpoints.

  • Distribuzione A/B: è possibile implementare facilmente distribuzioni A/B, in modo da confrontare facilmente versioni di flusso diverse. Analogamente ai tradizionali test A/B per i siti Web, questa piattaforma facilita la distribuzione A/B per il prompt flow. Ciò significa che è possibile confrontare facilmente versioni diverse di un flusso in un contesto reale per determinare le prestazioni migliori. Screenshot of deployments.

  • Relazioni molti-a-molti tra set di dati e flussi: è possibile supportare più set di dati per ogni flusso standard e di valutazione, in modo da garantire la versatilità nel test e nella valutazione del flusso. La piattaforma è progettata per supportare più set di dati per ogni flusso.

  • Registrazione condizionale di dati e modelli: la piattaforma crea una nuova versione per il set di dati nell'asset di dati di Azure Machine Learning e per i flussi nel registro dei modelli solo quando sono presenti modifiche, non in caso contrario.

  • Creazione di report completi: è possibile generare report dettagliati per ogni configurazione variante, in modo da consentire di prendere decisioni informate. Fornisce raccolte dettagliate di metriche, esecuzioni in blocco di esperimenti e varianti per tutte le esecuzioni e gli esperimenti, consentendo decisioni basate sui dati in file CSV e HTML. Screenshot of flow variants report.Screenshot of metrics report.

Altre funzionalità per la personalizzazione:

  • Offre l'approccio BYOF (Bring-Your-Own-Flows). Una piattaforma completa per lo sviluppo di più casi d'uso correlati alle applicazioni con LLM.

  • Offre sviluppo basato sulla configurazione. Non è necessario scrivere codice boilerplate esteso.

  • Fornisce l'esecuzione di sperimentazione e valutazione di richieste in locale e nel cloud.

  • Fornisce notebook per la valutazione locale delle richieste. Fornisce la libreria di funzioni per la sperimentazione locale.

  • Test degli endpoint all'interno della pipeline dopo la distribuzione per verificare la disponibilità e l'idoneità.

  • Fornisce un approccio "human-in-the-loop" per convalidare le metriche di richiesta prima della distribuzione.

LLMOps con prompt flow offre funzionalità sia per app con LLM semplici e complesse. È completamente personalizzabile in base alle esigenze dell'applicazione.

Fasi di LLMOps

Il ciclo di vita comprende quattro fasi distinte:

  • Inizializzazione: definire chiaramente l'obiettivo aziendale, raccogliere esempi di dati pertinenti, stabilire una struttura di richiesta di base e creare un flusso che ne migliora le funzionalità.

  • Sperimentazione: applicare il flusso ai dati di esempio, valutare le prestazioni della richiesta e perfezionare il flusso in base alle esigenze. Eseguire l'iterazione continuamente fino a quando non si è soddisfatti dei risultati.

  • Valutazione e perfezionamento: definire un benchmark per le prestazioni del flusso usando un set di dati più grande, valutare l'efficacia della richiesta e apportare miglioramenti di conseguenza. Passare alla fase successiva se i risultati soddisfano gli standard desiderati.

  • Distribuzione: ottimizzare il flusso per efficienza ed efficacia, distribuirlo in un ambiente di produzione, inclusa la distribuzione A/B, monitorarne le prestazioni, raccogliere il feedback degli utenti e usare queste informazioni per migliorare ulteriormente il flusso.

Rispettando questa metodologia strutturata, il prompt flow consente di sviluppare in modo sicuro, testare rigorosamente, ottimizzare e distribuire i flussi, portando alla creazione di applicazioni basate su intelligenza artificiale affidabili e sofisticate.

Il modello di prompt flow di LLMOps formalizza questa metodologia strutturata usando l'approccio code-first e consente di compilare app con LLM usando il prompt flow con strumenti e processi rilevanti per il prompt flow. Offre una gamma di funzionalità, tra cui hosting di codice centralizzato, gestione del ciclo di vita, sperimentazione con varianti e iperparametri, distribuzione A/B, creazione di report per tutte le esecuzioni e gli esperimenti e altro ancora.

Il repository per questo articolo è disponibile in LLMOps con modello di prompt flow

Flusso del processo LLMOps

Screenshot of LLMOps prompt flow Process.

  1. Questa è la fase di inizializzazione. In questa fase vengono sviluppati i flussi, i dati vengono preparati e curati e i file di configurazione correlati a LLMOps vengono aggiornati.
  2. Dopo lo sviluppo locale con Visual Studio Code insieme all'estensione del prompt flow, viene generata una richiesta pull dal ramo di funzionalità al ramo di sviluppo. Ciò comporta l'esecuzione della pipeline di convalida della compilazione. Vengono eseguiti anche i flussi di sperimentazione.
  3. La richiesta pull viene approvata manualmente e il codice viene unito al ramo di sviluppo
  4. Dopo che la richiesta pull viene unita al ramo di sviluppo, viene eseguita la pipeline di integrazione continua per l'ambiente di sviluppo. Esegue i flussi di sperimentazione e valutazione in sequenza e registra i flussi nel registro di Azure Machine Learning, oltre ad altri passaggi nella pipeline.
  5. Dopo il completamento dell'esecuzione della pipeline di integrazione continua, un trigger di distribuzione continua garantisce l'esecuzione della pipeline di distribuzione continua, che distribuisce il flusso standard dal registro di Azure Machine Learning come endpoint online di Azure Machine Learning ed esegue test di integrazione e smoke test nel flusso distribuito.
  6. Un ramo di rilascio viene creato dal ramo di sviluppo o viene generata una richiesta pull dal ramo di sviluppo al ramo di rilascio.
  7. La richiesta pull viene approvata manualmente e il codice viene unito al ramo di rilascio. Dopo che la richiesta pull viene unita al ramo di rilascio, viene eseguita la pipeline di integrazione continua per l'ambiente di produzione. Esegue i flussi di sperimentazione e valutazione in sequenza e registra i flussi nel registro di Azure Machine Learning, oltre ad altri passaggi nella pipeline.
  8. Dopo il completamento dell'esecuzione della pipeline di integrazione continua, un trigger di distribuzione continua garantisce l'esecuzione della pipeline di distribuzione continua, che distribuisce il flusso standard dal registro di Azure Machine Learning come endpoint online di Azure Machine Learning ed esegue test di integrazione e smoke test nel flusso distribuito.

A partire da questo punto è possibile apprendere i concetti relativi a LLMOps con prompt flow seguendo gli esempi end-to-end forniti, che consentono di compilare applicazioni con LLM usando il prompt flow e GitHub. L'obiettivo principale è fornire assistenza per lo sviluppo di tali applicazioni, sfruttando le funzionalità del prompt flow e LLMOps.

Suggerimento

È consigliabile comprendere come integrare LLMOps con il prompt flow.

Importante

Il prompt flow è attualmente disponibile in anteprima pubblica. Questa anteprima viene messa a disposizione senza contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Prerequisiti

  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. Provare la versione gratuita o a pagamento di Azure Machine Learning.
  • Un'area di lavoro di Azure Machine Learning.
  • Git in esecuzione nel computer locale.
  • GitHub come repository del controllo del codice sorgente.

Nota

È necessario Git versione 2.27 o successiva. Per altre informazioni sull'installazione del comando Git, vedere https://git-scm.com/downloads e selezionare il sistema operativo

Importante

I comandi dell'interfaccia della riga di comando in questo articolo sono stati testati usando Bash. Se si usa una shell diversa, è possibile che si verifichino errori.

Configurare il prompt flow

Il prompt flow usa la risorsa connessioni per connettersi agli endpoint, ad esempio OpenAI di Azure, OpenAI o Azure AI Search, e usa il runtime per l'esecuzione dei flussi. Queste risorse devono essere create prima di eseguire i flussi nel prompt flow.

Configurare le connessioni per il prompt flow

Le connessioni possono essere create tramite l'interfaccia utente del portale del prompt flow o tramite l'API REST. Seguire le linee guida per creare connessioni per il prompt flow.

Fare clic sul collegamento per ottenere altre informazioni sulle connessioni.

Nota

I flussi di esempio usano la connessione "aoai" ed è necessario creare la connessione denominata "aoai" per eseguirli.

Configurare l'ambiente di calcolo e il runtime per il prompt flow

Il runtime può essere creato tramite l'interfaccia utente del portale del prompt flow o tramite l'API REST. Seguire le linee guida per configurare l'ambiente di calcolo e il runtime per il prompt flow.

Fare clic sul collegamento per ottenere altre informazioni sul runtime.

Nota

Lo stesso nome di runtime deve essere usato nel file LLMOps_config.json illustrato più avanti.

Configurare il repository GitHub

È necessario eseguire più passaggi per configurare il processo LLMOps usando il repository GitHub.

Creare una copia tramite fork del repository e configurarlo

Seguire le linee guida per creare un repository con fork nell'organizzazione GitHub. Questo repository usa due rami, main e development, per promozioni di codice ed esecuzione di pipeline al posto delle modifiche apportate al codice.

Configurare l'autenticazione tra GitHub e Azure

Seguire le linee guida per usare l'entità servizio creata in precedenza e configurare l'autenticazione tra il repository GitHub e i servizi di Azure.

Questo passaggio configura un segreto GitHub che archivia le informazioni sull'entità servizio. I flussi di lavoro nel repository possono leggere le informazioni di connessione usando il nome del segreto. Ciò consente di configurare i passaggi del flusso di lavoro GitHub per connettersi automaticamente ad Azure.

Clonazione del repository

Seguire le linee guida per creare un nuovo repository locale.

Ciò consentirà di creare un nuovo ramo di funzionalità dal ramo di sviluppo e incorporare le modifiche.

Testare le pipeline

Seguire le linee guida per testare le pipeline. I passaggi sono:

  1. Generare una richiesta pull da un ramo di funzionalità a un ramo di sviluppo.
  2. La pipeline di richiesta pull deve essere eseguita automaticamente in seguito alla configurazione dei criteri di ramo.
  3. La richiesta pull viene quindi unita al ramo di sviluppo.
  4. Viene eseguita la pipeline "dev" associata. Ciò comporterà l'esecuzione completa dell'integrazione continua e della distribuzione continua e si otterrà il provisioning o l'aggiornamento degli endpoint esistenti di Azure Machine Learning.

Gli output dei test dovrebbero essere simili a quelli visualizzati qui.

Esecuzione locale

Per sfruttare le funzionalità dell'esecuzione locale, seguire questa procedura di installazione:

  1. Clonare il repository: iniziare clonando il repository del modello dal relativo repository GitHub.
git clone https://github.com/microsoft/llmops-promptflow-template.git
  1. Configurare il file ENV: creare un file con estensione env a livello di cartella principale e fornire informazioni per gli elementi menzionati. Aggiungere tutti i nomi di connessione necessari. Tutti gli esempi di flusso in questo repository usano la connessione AzureOpenAI denominata aoai. Aggiungere una riga aoai={"api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"} con valori aggiornati per api_key e api_base. Se nei flussi vengono usate altre connessioni con nomi diversi, devono essere aggiunte di conseguenza. Attualmente il flusso con AzureOpenAI come provider è supportato.

experiment_name=
connection_name_1={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
connection_name_2={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
  1. Preparare l'ambiente locale conda o virtuale per installare le dipendenze.

python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv

  1. Inserire o scrivere i flussi nel modello in base alla documentazione disponibile qui.

  2. Scrivere script Python simili agli esempi forniti nella cartella local_execution.

Passaggi successivi