Una guida per principianti a LLMOps per l’Ingegneria del Machine Learning

Una guida per principianti a LLMOps nell'Ingegneria del Machine Learning

Introduzione

Il rilascio di ChatGPT di OpenAI ha suscitato molto interesse nei grandi modelli di linguaggio (LLM) e ora si parla tutti di intelligenza artificiale. Ma non si tratta solo di conversazioni amichevoli; la comunità di machine learning (ML) ha introdotto un nuovo termine chiamato LLMOps. Abbiamo tutti sentito parlare di MLOps, ma cosa sono le LLMOps? Beh, si tratta di come trattiamo e gestiamo questi potenti modelli di linguaggio durante tutto il loro ciclo di vita.

I LLM stanno cambiando il modo in cui creiamo e manteniamo prodotti basati sull’intelligenza artificiale, e questo cambiamento sta portando alla necessità di nuovi strumenti e migliori pratiche. In questo articolo, analizzeremo le LLMOps e il loro background. Esamineremo anche come la creazione di prodotti basati sull’intelligenza artificiale con LLM differisce dai modelli di ML tradizionali. Inoltre, esamineremo le differenze tra MLOps (Operazioni di Machine Learning) e LLMOps a causa di queste differenze. Infine, discuteremo quali sviluppi interessanti ci aspettiamo nel mondo delle LLMOps a breve termine.

Obiettivi di apprendimento:

  • Avere una comprensione solida delle LLMOps e del loro sviluppo.
  • Imparare a costruire un modello utilizzando LLMOps attraverso esempi.
  • Conoscere le differenze tra LLMOps e MLOps.
  • Ottenere un’anteprima del futuro delle LLMOps.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cos’è LLMOps?

LLMOps significa Operazioni di Grandi Modelli di Linguaggio, simili a MLOps ma specificamente progettate per i Modelli di Linguaggio Lunghi (LLM). Richiede l’utilizzo di nuovi strumenti e migliori pratiche per gestire tutto ciò che riguarda le applicazioni alimentate da LLM, dallo sviluppo al rilascio e alla manutenzione continua.

Per capire meglio questo concetto, vediamo cosa significano LLM e MLOps:

  • LLM sono modelli di linguaggio lunghi che possono generare linguaggi umani. Hanno miliardi di parametri e vengono addestrati su miliardi di dati testuali.
  • MLOps (Operazioni di Machine Learning) è un insieme di strumenti e pratiche utilizzate per gestire il ciclo di vita delle applicazioni alimentate da machine learning.

Ora che abbiamo spiegato le basi, approfondiamo ulteriormente questo argomento.

Qual è l’eccitazione intorno a LLMOps?

Innanzitutto, LLM come BERT e GPT-2 sono presenti dal 2018. Eppure è solo adesso, quasi cinque anni dopo, che ci stiamo confrontando con una crescente popolarità dell’idea di LLMOps. La ragione principale è che i LLM hanno ottenuto molta attenzione mediatica con il rilascio di ChatGPT nel dicembre del 2022.

Da allora, abbiamo visto molti tipi diversi di applicazioni che sfruttano il potere dei LLM. Questo include chatbot che vanno dagli esempi familiari come ChatGPT, a assistenti personali di scrittura per editing o sommarizzazioni (ad esempio Notion AI) e abili nella scrittura di testi commerciali (ad esempio Jasper e copy.ai). Include anche assistenti alla programmazione per scrivere e debug del codice (ad esempio GitHub Copilot), testare il codice (ad esempio Codium AI) e identificare problemi di sicurezza (ad esempio Socket AI).

Con molte persone che sviluppano e portano applicazioni alimentate da LLM in produzione, le persone stanno contribuendo con le loro esperienze.

“È facile creare qualcosa di interessante con i LLM, ma molto difficile renderlo pronto per la produzione.” – Chip Huyen

È chiaro che la creazione di applicazioni pronte per la produzione basate su LLM presenta sfide proprie, diverse dalla creazione di prodotti di intelligenza artificiale con modelli di ML classici. Dobbiamo sviluppare nuovi strumenti e migliori pratiche per affrontare queste sfide e gestire il ciclo di vita dell’applicazione LLM. Pertanto, vediamo un uso esteso del termine “LLMOps”.

Quali sono i passi coinvolti in LLMOps?

I passi coinvolti in LLMOps sono almeno simili a MLOps. Tuttavia, i passi per la creazione di un’applicazione alimentata da LLM sono diversi a causa dell’inizio dei modelli di base. Invece di addestrare gli LLM da zero, l’attenzione è focalizzata sulla domésticazione degli LLM pre-addestrati per i seguenti compiti.

Già un anno fa, Andrej Karpathy ha spiegato come il processo di creazione di prodotti di intelligenza artificiale cambierà in futuro:

“Ma la tendenza più importante è che l’intero processo di addestrare una rete neurale da zero per un determinato compito sta rapidamente diventando obsoleto a causa del fine-tuning, specialmente con l’emergere di modelli di base come GPT. Questi modelli di base sono addestrati solo da poche istituzioni con risorse di calcolo notevoli e la maggior parte delle applicazioni vengono realizzate tramite un fine-tuning leggero di parte della rete, l’ingegnerizzazione delle prompt o un passaggio opzionale di elaborazione dei dati o dei modelli in reti di inferenza più piccole e specializzate.” – Andrej Karpathy.

Questa citazione potrebbe essere sorprendente la prima volta che la si legge. Ma riassume esattamente tutto ciò che è successo ultimamente, quindi descriviamolo passo dopo passo nei seguenti sottosezioni.

Passo 1: Selezione di un Modello di Base

I modelli di base o modelli di base sono LLM pre-addestrati su grandi quantità di dati che possono essere utilizzati per una vasta gamma di compiti. Poiché addestrare un modello di base da zero è difficile, richiede molto tempo e estremamente costoso, solo poche istituzioni hanno le risorse di addestramento necessarie.

Per metterlo in prospettiva, secondo uno studio di Lambda Labs del 2020, addestrare il GPT-3 di OpenAI (con 175 miliardi di parametri) richiederebbe 355 anni e 4,6 milioni di dollari utilizzando un’istanza cloud Tesla V100.

L’AI sta attraversando ciò che la comunità chiama il suo “Momento Linux”. Attualmente, gli sviluppatori devono scegliere tra due tipi di modelli di base in base a un compromesso tra prestazioni, costo, facilità d’uso e flessibilità dei modelli proprietari o dei modelli open-source.

I modelli esclusivi o proprietari sono modelli di base a codice chiuso posseduti da aziende con grandi team di esperti e grandi budget per l’IA. Di solito sono più grandi dei modelli open-source e offrono prestazioni migliori. Vengono anche acquistati e generalmente sono piuttosto facili da usare. Il principale svantaggio dei modelli proprietari sono le loro costose API (interfacce di programmazione delle applicazioni). Inoltre, i modelli di base a codice chiuso offrono una minore o nessuna elasticità per l’adattamento da parte degli sviluppatori.

Esempi di provider di modelli proprietari sono:

I modelli open-source sono spesso organizzati e ospitati su HuggingFace come hub della comunità. Di solito, sono modelli più piccoli con capacità inferiori rispetto ai modelli proprietari. Ma, da un lato, sono più economici dei modelli proprietari e offrono maggiore flessibilità per gli sviluppatori.

Esempi di modelli open-source sono:

Codice:

Questo passo prevede l’importazione di tutte le librerie necessarie.

from transformers import GPT2LMHeadModel, GPT2Tokenizer# Can you load pre-trained GPT-3 model and tokenizermodel = GPT2LMHeadModel.from_pretrained("gpt2")tokenizer = GPT2Tokenizer.from_pretrained("gpt2")

Output del codice sopra:

Passaggio 2: Adattarsi ai Seguenti Compiti

Una volta scelto il modello di base, è possibile accedere al LLM attraverso la sua API. Se solitamente si lavora con altre API, lavorare con le API del LLM può sembrare un po’ strano perché non è sempre chiaro quale input produrrà quale output in anticipo. Dato qualsiasi suggerimento di testo, l’API restituirà un completamento di testo, cercando di adattarsi al tuo pattern.

Ecco un esempio di come si utilizza l’API di OpenAI. Si fornisce all’API un input come suggerimento, ad esempio prompt = “Correggi questo in inglese standard:\n\nHe no went to the market.”

import openaiopenai.api_key = ...response = openai.Completion.create(  engine = "text-davinci-003",    prompt = "Correggi questo in inglese standard:\n\nHe no went to the market.",  # ...   )

L’API restituirà una risposta contenente il completamento response[‘choices’][0][‘text’] = “Non è andato al mercato.”

La sfida principale è che i LLM non sono potenti nonostante siano potenti, e quindi, la domanda chiave è: come fare in modo che un LLM produca l’output desiderato?

Una preoccupazione menzionata nella survey LLM in produzione è l’accuratezza del modello e l’allucinazione. Ciò significa che ottenere l’output dall’API LLM nel formato desiderato potrebbe richiedere alcune iterazioni e, inoltre, i LLM possono allucinare se non hanno le conoscenze specifiche richieste. Per affrontare queste preoccupazioni, è possibile adattare i modelli di base ai seguenti compiti nel modo seguente:

  • Ingegneria del prompt è una tecnica per migliorare l’input in modo che l’output corrisponda alle tue aspettative. Puoi utilizzare diversi trucchi per migliorare il tuo prompt (vedi OpenAI Cookbook). Un metodo consiste nel fornire alcuni esempi del formato di output atteso. Questo è simile all’apprendimento a zero sparo o all’apprendimento a pochi spari. Strumenti come LangChain o HoneyHive sono già disponibili per aiutarti a gestire e versionare i tuoi modelli di prompt.
  • Fine-tuning dei modelli pre-addestrati è una tecnica utilizzata nell’IA. Può aiutare a migliorare le prestazioni e l’accuratezza del modello nel compito specifico. Anche se ciò aumenterà gli sforzi di formazione, può ridurre il costo dell’infereza. Il costo delle API del LLM dipende dalla lunghezza della sequenza di input e output. Pertanto, riducendo il numero di token di input si riducono i costi delle API, poiché non è più necessario fornire esempi nel prompt.
  • Dati esterni: I modelli di base spesso forniscono informazioni contestuali limitate (ad esempio, l’accesso a documenti specifici) e possono diventare rapidamente obsoleti. Ad esempio, GPT-4 è stato allenato su dati fino a settembre 2021. Poiché i LLM possono immaginare cose se non hanno informazioni sufficienti, è necessario poter dare loro accesso a importanti dati esterni.
  • Embedding: Un modo leggermente più complesso è estrarre informazioni sotto forma di embedding dalle API del LLM (ad esempio, descrizioni di prodotti) e costruire applicazioni basate su di esse (ad esempio, ricerca, confronto, raccomandazioni).
  • Alternative: Poiché questo campo sta rapidamente evolvendo, ci sono molte altre applicazioni dei LLM nei prodotti di intelligenza artificiale. Alcuni esempi sono l’ottimizzazione delle istruzioni/l’ottimizzazione del prompt e il raffinamento del modello.

Codice:

from transformers import GPT2LMHeadModel, GPT2Tokenizer, TextDataset, Trainer, TrainingArguments# Carica il tuo datasetdataset = TextDataset(tokenizer=tokenizer, file_path="your_dataset.txt")# Effettua il fine-tuning del modellotraining_args = TrainingArguments(    output_dir="./your_fine_tuned_model",    overwrite_output_dir=True,    num_train_epochs=3,    per_device_train_batch_size=4,)trainer = Trainer(    model=model,    args=training_args,    data_collator=data_collator,    train_dataset=dataset,)trainer.train()trainer.save_model()

Passaggio 3: Valutazione del Modello

Nel MLOps classico, i modelli di machine learning vengono dimostrati su un insieme di convalida separato con una metrica che indica le prestazioni dei modelli. Ma come si valuta l’esecuzione di un LLM? Come si decide se un output è buono o cattivo? Attualmente, sembra che le organizzazioni stiano effettuando test A/B sui loro modelli.

Per valutare gli LLM, sono emersi strumenti come HoneyHive o HumanLoop.

Codice:

from transformers import pipeline# Crea un pipeline di generazione di testogenerator = pipeline("text-generation", model="your_fine_tuned_model")# Genera testo ed evalutagliogenerated_text = generator("Testo di input")print(generated_text)

Step 4: Deployment e Monitoraggio

Il successo degli LLM può variare enormemente tra le varie versioni. Ad esempio, OpenAI ha aggiornato i suoi modelli per ridurre la generazione di contenuti inappropriati, come il discorso di odio. Di conseguenza, cercando la frase “come un modello di linguaggio AI” su Twitter ora si scoprono innumerevoli bot.

Sono già disponibili strumenti per il monitoraggio degli LLM, come Whylabs o HumanLoop.

Codice:

# Importa le librerie necessarie
from flask import Flask, request, jsonify
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import logging

# Inizializza l'app Flask
app = Flask(__name__)

# Carica il modello GPT-2 preaddestrato e il tokenizer
model = GPT2LMHeadModel.from_pretrained("./your_fine_tuned_model")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")

# Imposta il logging
logging.basicConfig(filename='app.log', level=logging.INFO)

# Definisci una route per la generazione di testo
@app.route('/generate_text', methods=['POST'])
def generate_text():
    try:
        data = request.get_json()
        prompt = data['prompt']
        
        # Genera testo
        generated_text = model.generate(
            tokenizer.encode(prompt, return_tensors='pt'),
            max_length=100,  # Regola lunghezza massima a seconda delle necessità
            num_return_sequences=1,
            no_repeat_ngram_size=2,
            top_k=50,
            top_p=0.95,
        )[0]
        
        generated_text = tokenizer.decode(generated_text, skip_special_tokens=True)
        
        # Logga la richiesta e la risposta
        logging.info(f"Testo generato per il prompt: {prompt}")
        logging.info(f"Testo generato: {generated_text}")
        
        return jsonify({'generated_text': generated_text})
    except Exception as e:
        # Logga eventuali eccezioni
        logging.error(f"Errore: {str(e)}")
        return jsonify({'error': 'Si è verificato un errore'}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Funzionamento del Codice sopra:

  1. Importa le librerie necessarie: Questo significa importare le librerie e i moduli richiesti. Flask viene utilizzato per creare applicazioni web, transformers vengono utilizzati per gestire il modello GPT-2 e il logging viene utilizzato per registrare le informazioni.
  2. Inizializza l’app Flask.
  3. Carica il modello: Puoi caricare il modello GPT-2 preaddestrato e il relativo tokenizer. Puoi sostituire “./your_fine_tuned_model” con il percorso del tuo modello GPT-2 effettivamente addestrato.
  4. Imposta il logging: Questo indica l’accesso all’applicazione. Imposta il nome del file di log su app.log e imposta il livello di logging su INFO.
  5. Imposta una route utilizzando Flask: Specifica che quando viene effettuata una richiesta POST all’endpoint /generate_text, deve essere chiamata la funzione generate_text.
  6. Generazione del testo: Questo codice estrae i dati JSON dalla richiesta POST in ingresso. Assume che i dati JSON includano un campo “prompt”, che è il testo che verrà utilizzato per generare ulteriore testo.
  7. Generazione del testo utilizzando GPT-2: Questa sezione utilizza il modello GPT-2 caricato e il tokenizer per generare testo sulla base del prompt fornito. Imposta diversi parametri di generazione, come il testo generato della lunghezza massima, il numero di sequenze da generare e i parametri di campionamento.
  8. Decodifica e restituzione del testo generato: Dopo aver generato il testo, decodifica la sequenza generata e rimuove i token speciali. Quindi, restituisce il testo generato come risposta JSON.
  9. Registrazione della richiesta e della risposta: Registra il prompt della richiesta e il testo generato nel file di log.
  10. Gestione delle eccezioni: Se durante il processo di generazione del testo si verificano eccezioni, vengono catturate e registrate come errori. Viene restituito un output JSON con un messaggio di errore insieme a un codice di stato 500 per indicare un errore del server.
  11. Esecuzione dell’app Flask: Assicura che l’app Flask venga eseguita solo quando lo script viene eseguito direttamente. Esegue l’app in host ‘0.0.0.0’ e porta 5000, rendendola accessibile da qualsiasi indirizzo IP.

Output del codice sopra:

Prompt di input:

#{    "prompt": "C'era una volta"}Prompt di output:{    "generated_text": "C'era una volta, in una terra lontana, viveva un..."}import csv

Come si differenzia LLMOps da MLOps?

Le differenze tra MLOps e LLMOps derivano dalle differenze nella modalità di costruzione di prodotti di intelligenza artificiale con modelli di machine learning classici rispetto a quelli di Large Language Models (LLMs). Le differenze influiscono principalmente sulla gestione dei dati, sull’esperimento, sulla valutazione, sul costo e sulla latenza.

Gestione dei dati

Nell’MLOps standard siamo abituati a modelli di machine learning che richiedono molti dati. Addestrare una rete neurale da zero richiede molti dati etichettati e anche il perfezionamento di un modello pre-addestrato coinvolge almeno qualche centinaio di campioni. Tuttavia, la pulizia dei dati è essenziale nel processo di sviluppo di machine learning, poiché sappiamo e accettiamo che i grandi dataset presentano difetti.

Nel LLMOps, il perfezionamento è simile a quello dell’MLOps. Ma l’engineering dei prompt è una circostanza di apprendimento zero-shot o few-shot. Ciò significa che abbiamo pochi, ma selezionati a mano, campioni.

Esperimentazione

Nell’MLOps, la fase di sperimentazione è simile, che si tratti di addestrare un modello da zero o perfezionare uno già addestrato. In entrambi i casi, si definiscono input, come l’architettura del modello, gli iperparametri e le augumentazioni dei dati, e output, come le metriche.

Tuttavia, nel LLMOps, la domanda è se fare l’engineering dei prompt o il perfezionamento. Tuttavia, il perfezionamento sarà simile all’MLOps nel LLMOps, mentre l’engineering dei prompt comporta una configurazione diversa dell’esperimento che coinvolge la gestione dei prompt.

Valutazione

Nell’MLOps classico, le prestazioni di un modello vengono valutate utilizzando un set di validazione separato e una metrica di valutazione. Poiché valutare le prestazioni dei LLM è più complicato, attualmente le organizzazioni sembrano utilizzare test A/B.

Costo

Mentre il costo dell’MLOps tradizionale si concentra principalmente sulla raccolta dei dati e sull’addestramento del modello, il costo del LLMOps si concentra sull’inferenza. Sebbene ci si possa aspettare alcuni costi derivanti dall’utilizzo di API costose durante l’esperimento, Chip Huyen mostra che il costo dei prompt lunghi risiede nell’inferenza.

Velocità

Un’altra preoccupazione menzionata nel sondaggio sulla produzione di LLM è la latenza. La lunghezza della completamento di un LLM influisce significativamente sulla latenza. Anche se le preoccupazioni sulla latenza esistono anche nell’MLOps, sono molto più evidenti nel LLMOps perché rappresentano un problema importante per la velocità dell’esperimento durante lo sviluppo e l’esperienza utente nella produzione.

Il futuro di LLMOps

LLMOps è un campo emergente. Con la velocità con cui questo settore si sta evolvendo, è difficile fare previsioni. È persino discutibile se il termine “LLMOps” sarà utilizzato a lungo. Siamo certi solo che vedremo molti nuovi casi d’uso di LLM e strumenti e i migliori tentativi per gestire il ciclo di vita di LLM.

Il campo dell’intelligenza artificiale sta crescendo rapidamente, rendendo potenzialmente obsolete qualsiasi cosa scriviamo oggi in un mese. Siamo ancora alle prime fasi del trasporto delle applicazioni basate su LLM in produzione. Ci sono molte domande alle quali non abbiamo ancora risposte e solo il tempo dirà come si evolveranno le cose:

  • Il termine “LLMOps” sarà utilizzato a lungo?
  • Come si evolverà LLMOps in relazione a MLOps? Si trasformeranno insieme o diventeranno insiemi separati di operazioni?
  • Come si svilupperà il “momento Linux” dell’IA?

Possiamo dire con certezza che vedremo presto molti sviluppi, nuovi strumenti e migliori pratiche. Stiamo già osservando sforzi per ridurre i costi e la latenza per i modelli di base. Sono sicuramente tempi interessanti!

Conclusione

Dal rilascio di ChatGPT di OpenAI, i LLM sono diventati un argomento molto discusso nel campo dell’intelligenza artificiale. Questi modelli di apprendimento profondo possono generare output in linguaggio umano, rendendoli uno strumento potente per compiti come l’intelligenza artificiale conversazionale, gli assistenti di programmazione e gli assistenti di scrittura.

Tuttavia, portare applicazioni basate su LLM in produzione presenta una serie di sfide, che ha portato all’introduzione di un nuovo termine, “LLMOps”. Si riferisce al set di strumenti e migliori pratiche utilizzate per gestire il ciclo di vita delle applicazioni basate su LLM, compresi lo sviluppo, il rilascio e la manutenzione.

LLMOps può essere considerato come una sottocategoria di MLOps. Tuttavia, i passaggi necessari per costruire un’applicazione basata su LLM sono diversi rispetto a quelli per costruire applicazioni con modelli ML di base. Invece di addestrare un LLM da zero, l’attenzione è rivolta all’adattamento di LLM pre-addestrati alle seguenti attività. Ciò comporta la selezione di un modello di base, l’utilizzo di LLM nelle attività successive, la valutazione di essi e la distribuzione e monitoraggio del modello. Sebbene LLMOps sia ancora un campo relativamente nuovo, è destinato a continuare a svilupparsi ed evolversi man mano che i LLM diventano sempre più popolari nel settore dell’IA.

Punti chiave:

  • LLMOps (Large Language Model Operations) è un settore scientifico che si concentra sulla gestione del ciclo di vita dei potenti modelli di linguaggio come ChatGPT, trasformando la creazione e la manutenzione di prodotti basati sull’IA.
  • L’aumento delle applicazioni che utilizzano grandi modelli di linguaggio (LLM) come GPT-3, GPT-3.5 e GPT-4 ha portato all’emergere di LLMOps.
  • Il processo di LLMOps include la selezione di un modello di base, l’adattamento ad attività specifiche, la valutazione delle prestazioni del modello attraverso test A/B e la gestione del costo e della latenza associati alle applicazioni basate su LLM.
  • LLMOps si differenziano da MLOps tradizionali per quanto riguarda la gestione dei dati (apprendimento in poche passate), l’esame (ingegneria della richiesta), la valutazione (test A/B), il costo (costi correlati all’elaborazione) e la velocità (riflesso della latenza).

Nel complesso, l’aumento di LLM e LLMOps descrive un cambiamento significativo nella costruzione e nella gestione dei prodotti basati sull’IA. Spero che tu abbia apprezzato questo articolo. Puoi collegarti con me qui su LinkedIn.

Domande frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.