Tutto ciò che devi sapere per sviluppare con l’uso di grandi modelli di linguaggio

Tutto ciò che devi sapere per sfruttare al meglio l'utilizzo dei grandi modelli di linguaggio

Immagine generata da Stable Diffusion

Spiegare in modo semplice le tecnologie chiave necessarie per iniziare a sviluppare applicazioni basate su LLM.

Lo scopo di questo articolo è spiegare in modo semplice le tecnologie chiave necessarie per iniziare a sviluppare applicazioni basate su LLM. È rivolto a sviluppatori di software, scienziati dei dati e appassionati di intelligenza artificiale che hanno una conoscenza di base dei concetti di apprendimento automatico e vogliono approfondire. L’articolo fornisce anche numerosi link utili per ulteriori studi. Sarà interessante!

1. Introduzione ai Modelli di Linguaggio Volgari (LLM)

Credo che tu abbia già sentito mille volte cosa sia un LLM, quindi non voglio sovraccaricarti con ciò. Tutto ciò che dobbiamo sapere è: un Grande Modello di Linguaggio (LLM) è un modello di rete neurale GRANDE che predice il token successivo basandosi su quello precedentemente previsto. Questo è tutto.

Confronto del numero di parametri dei modelli. Guarda quanto è grande GPT-3. E nessuno sa nulla di GPT-4...

La popolarità dei LLM è dovuta alla loro versatilità ed efficacia. Si adattano perfettamente a compiti come la traduzione, la sintesi, l’analisi dei significati, ecc.

Capacità dei LLM

Alcuni esempi di progetti che utilizzano LLM:

  • Notion AI – aiuta a migliorare la qualità della scrittura, a generare contenuti, a correggere l’ortografia e la grammatica, a modificare la voce e l’intonazione, a tradurre e altro ancora.
  • GitHub Copilot – migliora il tuo codice offrendo suggerimenti in stile autocompletamento.
  • Dropbox Dash – fornisce una funzionalità di ricerca in linguaggio naturale e indica anche specificamente da quali file è stato tratto la risposta.

Se vuoi una comprensione dettagliata del funzionamento dei LLM, ti consiglio vivamente di leggere l’eccellente articolo “Un’introduzione molto gentile ai Modelli di Linguaggio Volgari senza l’esagerazione” di Mark Riedl.

2. Modelli Open Source vs Modelli a Codice Chiuso

Anche se ci sono diverse differenze, evidenzio le seguenti come le principali:

  • Privacy – uno dei motivi più importanti per cui le grandi aziende scelgono soluzioni auto-ospitate.
  • Prototipazione veloce – ottimo per le piccole startup per testare rapidamente le loro idee senza eccessive spese.
  • Qualità della generazione – o affini il modello per il tuo compito specifico o utilizzi un’API a pagamento.

Non esiste una risposta definitiva su cosa sia meglio o peggio. Ho evidenziato i seguenti punti:

Se sei interessato a approfondire i dettagli, ti suggerisco di leggere il mio articolo “Non hai bisogno di LLM ospitati, vero?”.

Esplora la Collezione LLM per visualizzare tutti i modelli.

3. L’arte dell’ingegneria delle sollecitazioni

Lo so, lo so, molti lo considerano una pseudo-scienza o solo un’attenzione temporanea. Ma la verità è che ancora non capiamo completamente come funzionano i LLM. Perché a volte forniscono risposte di alta qualità e altre volte fabbricano fatti (allucinano)? O perché aggiungere “pensiamo passo dopo passo” a una sollecitazione migliora improvvisamente la qualità?

Aggiungere una colorazione emotiva aumenta la qualità su qualsiasi modello. Fonte

A causa di tutto ciò, gli scienziati e gli appassionati possono solo sperimentare con diverse sollecitazioni, cercando di far funzionare meglio i modelli.

Schema che illustra vari approcci alla risoluzione dei problemi con LLM

Non ti annoierò con complessi catene di sollecitazioni; invece, ti darò solo alcuni esempi che miglioreranno istantaneamente le prestazioni:

  1. “Pensiamo passo dopo passo” — funziona bene per ragionamenti o compiti logici.
  2. “Fai un respiro profondo e lavora su questo problema passo dopo passo”— una versione migliorata del punto precedente. Può aggiungere qualche percento in più di qualità.
  3. “Questo è molto importante per la mia carriera” — aggiungilo alla fine della tua sollecitazione e noterai un miglioramento del 5-20% nella qualità.

Inoltre, condividerò subito un utile modello di sollecitazione:

Uniamo il nostro comando X e il pensiero chiaro per decifrare rapidamente e accuratamente la risposta nell’approccio passo dopo passo. Fornisci dettagli e includi fonti nella risposta. Questo è molto importante per la mia carriera.

Dove X è l’industria del compito che stai risolvendo, ad esempio, la programmazione.

Raccomando vivamente di passare qualche sera a esplorare le tecniche di ingegneria prompt. Questo non solo ti permetterà di controllare meglio il comportamento del modello, ma ti aiuterà anche a migliorare la qualità e ridurre le allucinazioni. A tal proposito, consiglio di leggere la Guida all’Ingegneria Prompt.

  • prompttools — test e sperimentazione del prompt, con supporto per entrambi i LLM (ad es. OpenAI, LLaMA).
  • promptfoo — test e valutazione della qualità dell’output del LLM.
  • Awesome ChatGPT Prompts — una collezione di esempi di prompt da utilizzare con il modello ChatGPT.

4. Incorporazione di Nuovi Dati: Generazione con Recupero Migliorato (RAG)

RAG è una tecnica che combina il LLM con basi di conoscenza esterne. Questo consente al modello di aggiungere informazioni pertinenti o dati specifici non inclusi nell’insieme di formazione originale al modello.

Nonostante il nome intimidatorio (a volte aggiungiamo anche la parola “reranker”), è in realtà una tecnica piuttosto vecchia e sorprendentemente semplice:

Illustrazione schematica di come funziona RAG
  1. Converti i documenti in numeri, li chiamiamo embeddings.
  2. Successivamente, converti anche la query di ricerca dell’utente in embeddings utilizzando lo stesso modello.
  3. Trova i primi K documenti più simili, di solito basati sulla similarità cosinale.
  4. Chiedi al LLM di generare una risposta basata su questi documenti.

Quando Utilizzare

  • Necessità di Informazioni Attuali: Quando l’applicazione richiede informazioni che si aggiornano costantemente, come articoli di notizie.
  • Applicazioni Specifiche di Dominio: Per applicazioni che necessitano di conoscenze specializzate al di fuori dei dati di addestramento del LLM. Ad esempio, documenti interni aziendali.

Quando NON Utilizzare

  • Applicazioni di Conversazione Generale: Dove le informazioni devono essere generali e non richiedono dati aggiuntivi.
  • Scenari con Risorse Limitate: Il componente di recupero di RAG comporta la ricerca in basi di conoscenza ampie, cosa che può essere computazionalmente dispendiosa e lenta — sebbene comunque più veloce e meno costosa del fine-tuning.

Costruire un’Applicazione con RAG

Un ottimo punto di partenza è utilizzare la libreria LlamaIndex. Ti permette di collegare rapidamente i tuoi dati ai LLM. Per questo hai bisogno solo di poche righe di codice:

from llama_index import VectorStoreIndex, SimpleDirectoryReader# 1. Carica i tuoi documenti:documents = SimpleDirectoryReader("YOUR_DATA").load_data()# 2. Convertili in vettori:index = VectorStoreIndex.from_documents(documents)# 3. Fai la domanda:query_engine = index.as_query_engine()response = query_engine.query("Quando è il compleanno del mio capo?")print(response)

Nelle applicazioni reali, le cose sono notevolmente più complesse. Come in ogni sviluppo, incontrerai molte sfumature. Ad esempio, i documenti recuperati potrebbero non essere sempre pertinenti alla domanda o potrebbero esserci problemi di velocità. Tuttavia, anche in questa fase, è possibile migliorare significativamente la qualità del sistema di ricerca.

5. Perfezionare il tuo LLM

Perfezionare è il processo di continuare l’addestramento di un LLM preaddestrato su un dataset specifico. Potresti chiederti perché abbiamo bisogno di addestrare ulteriormente il modello se possiamo già aggiungere dati tramite RAG. La risposta semplice è che solo il perfezionamento può personalizzare il modello per comprendere un dominio specifico o definirne lo stile. Ad esempio, ho creato una copia di me stesso perfezionando le corrispondenze personali:

Demo del modello perfezionato sulle corrispondenze dell'autore

Ok, se ti ho convinto della sua importanza, vediamo come funziona (sorpresa – non è così difficile):

Approccio classico al perfezionamento su dati specifici del dominio (tutte le icone da flaticon)
  1. Prendi un LLM addestrato, talvolta chiamato LLM di base. Puoi scaricarli da HuggingFace.
  2. Prepara i tuoi dati di addestramento. Hai solo bisogno di compilare istruzioni e risposte. Ecco un esempio di tale dataset. Puoi anche generare dati sintetici con GPT-4.
  3. Scegli un metodo adatto per il perfezionamento. Al momento, LoRA e QLoRA sono popolari.
  4. Perfeziona il modello su nuovi dati.

Quando Utilizzare

  • Applicazioni di nicchia: Quando l’applicazione tratta argomenti specializzati o non convenzionali. Ad esempio, applicazioni di documenti legali che devono comprendere e gestire il gergo legale.
  • Stili di linguaggio personalizzati: Per applicazioni che richiedono un tono o uno stile specifico. Ad esempio, creare un personaggio IA, che sia una celebrità o un personaggio di un libro.

Quando NON Utilizzare

  • Applicazioni ampie: Quando l’ambito dell’applicazione è generale e non richiede conoscenze specializzate.
  • Dati limitati: Il perfezionamento richiede una quantità significativa di dati pertinenti. Tuttavia, puoi sempre generarli con un altro LLM. Ad esempio, il dataset Alpaca di 52k coppie istruzione-risposta generate da LLM è stato utilizzato per creare il primo modello di perfezionamento Llama v1 all’inizio di quest’anno.

Perfeziona il tuo LLM

Puoi trovare un gran numero di articoli dedicati al perfezionamento del modello. Solo su VoAGI ne trovi migliaia. Pertanto, non voglio approfondire troppo questo argomento ma mostrarti una libreria a elevato livello, Lit-GPT, che nasconde tutta la magia. Sì, non permette molte personalizzazioni del processo di addestramento, ma puoi condurre rapidamente esperimenti e ottenere risultati iniziali. Ti servono solo poche righe di codice:

# 1. Scarica il modello:python scripts/download.py --repo_id meta-llama/Llama-2-7b# 2. Converti il checkpoint nel formato lit-gpt:python scripts/convert_hf_checkpoint.py --checkpoint_dir checkpoints/llama# 3. Genera un dataset di istruzioni di sintonizzazione:python scripts/prepare_alpaca.py  # dovrebbe essere il tuo dataset# 4. Esegui lo script di fine-tuningpython finetune/lora.py \    --checkpoint_dir checkpoints/llama/    --data_dir your_data_folder/    --out_dir my_finetuned_model/ 

Ecco fatto! Il tuo processo di addestramento inizierà:

Sii consapevole che il processo può richiedere molto tempo. Ci vogliono circa 10 ore e 30 GB di memoria per sintonizzare Falcon-7B su una singola GPU A100.

Ovviamente, ho semplificato un po’ e abbiamo appena graffiato la superficie. In realtà, il processo di fine-tuning è molto più complesso e per ottenere risultati migliori, dovrai comprendere vari adattatori, i loro parametri e molto altro. Tuttavia, anche dopo una semplice iterazione del genere, avrai un nuovo modello che segue le tue istruzioni.

6. Deploy della tua applicazione LLM

A volte, tutto ciò che vogliamo è semplicemente premere un pulsante “deploy”…

Fortunatamente, questo è abbastanza fattibile. Ci sono molti framework che si specializzano nel deploy di grandi modelli di linguaggio. Cosa li rende così buoni?

  • Un sacco di wrapper e integrazioni predefinite.
  • Una vasta selezione di modelli disponibili.
  • Una moltitudine di ottimizzazioni interne.
  • Prototipazione rapida.

Scegliere il framework giusto

La scelta del framework per il deploy di un’applicazione LLM dipende da vari fattori, tra cui la dimensione del modello, le esigenze di scalabilità dell’applicazione e l’ambiente di deploy. Attualmente, non c’è una vasta diversità di framework, quindi non dovrebbe essere troppo difficile comprendere le loro differenze. Qui sotto ho preparato un promemoria che ti aiuterà a iniziare rapidamente:

Inoltre, nel mio articolo “7 Framework per il Servizio di LLM” fornisco una panoramica più dettagliata delle soluzioni esistenti. Ti consiglio di darci un’occhiata se stai pianificando di deployare il tuo modello.

Confronto dei framework per l'inferenza di LLMs

Codice di Esempio per il Deployment

Passiamo dalla teoria alla pratica e proviamo a deployare LLaMA-2 usando Text Generation Inference. E, come potresti immaginare, avrai bisogno solo di poche righe di codice:

# 1. Crea una cartella dove il tuo modello sarà salvato:mkdir data# 2. Esegui il container Docker (lancia il servizio RestAPI):docker run --gpus all --shm-size 1g -p 8080:80 \    -v $volume:/data \    ghcr.io/huggingface/text-generation-inference:1.1.0    --model-id meta-llama/Llama-2-7b# 3. E ora puoi fare richieste:curl 127.0.0.1:8080/generate \    -X POST \    -d '{"inputs":"Dimmi una battuta!","parameters":{"max_new_tokens":20}}' \    -H 'Content-Type: application/json'

Ecco fatto! Hai configurato un servizio RestAPI con registrazione integrata, endpoint Prometheus per il monitoraggio, streaming dei token e il tuo modello è completamente ottimizzato. Non è magico?

Documentazione dell'API
  • 7 Framework per il Servizio LLMs – guida completa sull’inferenza e il servizio degli LLMs con una dettagliata comparazione.
  • Endpoint per l’Inferenza – un prodotto di HuggingFace che ti permetterà di deployare qualsiasi LLMs con pochi click. Una buona scelta quando hai bisogno di prototipazione veloce.

7. Cosa Rimane Dietro le Quinte

Nonostante abbiamo coperto i concetti principali necessari per lo sviluppo di applicazioni basate su LLMs, ci sono ancora alcuni aspetti che potresti incontrare in futuro. Perciò, vorrei lasciarti alcuni link utili:

Ottimizzazione

Quando lanci il tuo primo modello, inevitabilmente troverai che non è veloce come vorresti e consuma molte risorse. Se è il tuo caso, devi capire come può essere ottimizzato.

Valutazione

Supponiamo che tu abbia un modello fine-tuned. Ma come puoi essere sicuro che la sua qualità sia migliorata? Quali metriche dovremmo usare?

Database di Vettori

Se lavori con RAG, ad un certo punto, passerai dal memorizzare i vettori in memoria ad un database. Per questo, è importante capire cosa c’è attualmente sul mercato e le sue limitazioni.

Agenti LLM

A mio parere, lo sviluppo più promettente negli LLM. Se desideri che più modelli lavorino insieme, ti consiglio di esplorare i seguenti link.

  • Un’analisi approfondita sugli agenti autonomi basati su LLM – questa è probabilmente la panoramica più completa degli agenti basati su LLM.
  • autogen – è un framework che consente lo sviluppo di applicazioni LLM utilizzando più agenti che possono conversare tra loro per risolvere compiti.
  • OpenAgents – una piattaforma aperta per l’utilizzo e l’hosting di agenti linguistici in the wild.

Apprendimento attraverso rinforzo da feedback umano (RLHF)

Appena si permette agli utenti di accedere al proprio modello, si assume la responsabilità. Cosa succede se risponde in modo scortese? O svela ingredienti per la creazione di bombe? Per evitare ciò, leggi questi articoli:

  • Illustrazione dell’apprendimento attraverso rinforzo da feedback umano (RLHF) – un articolo di panorama che descrive la tecnologia RLHF.
  • RL4LMs – una libreria modulare di RL per adattare fino alle preferenze umane i modelli di linguaggio.
  • TRL – un insieme di strumenti per addestrare modelli di linguaggio tramite trasformatori utilizzando l’apprendimento attraverso rinforzo, dal passaggio di fine-tuning supervisionato (SFT) al passaggio di modellazione del reward (RM) fino al passaggio di ottimizzazione delle politiche prossimali (PPO).

Conclusione

Nonostante l’entusiasmo, a cui siamo tutti un po’ stanchi, gli LLM saranno con noi per molto tempo e la capacità di comprendere la loro struttura e scrivere semplici applicazioni può darti un notevole vantaggio. Spero di esserti riuscito ad immergere un po’ in questo settore e dimostrarti che non c’è nulla di complicato o spaventoso.

Grazie per l’attenzione, resta sintonizzato per nuovi articoli!

Disclaimer: Le informazioni contenute nell’articolo sono aggiornate a novembre 2023, ma si prega di tenere presente che potrebbero verificarsi cambiamenti successivamente.

Salvo diversa indicazione, tutte le immagini sono dell’autore.

Se hai domande o suggerimenti, non esitare a connetterti su LinkedIn.