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
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.
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.
Alcuni esempi di progetti che utilizzano LLM:
- Grafica Data Science per i dati tabulari
- Introduzione all’entropia e all’indice di Gini
- Un’introduzione all’apprendimento approfondito per i dati sequenziali
- 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?”.
Modelli open source popolari
Modelli closed source popolari
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à?
A causa di tutto ciò, gli scienziati e gli appassionati possono solo sperimentare con diverse sollecitazioni, cercando di far funzionare meglio i modelli.
Non ti annoierò con complessi catene di sollecitazioni; invece, ti darò solo alcuni esempi che miglioreranno istantaneamente le prestazioni:
- “Pensiamo passo dopo passo” — funziona bene per ragionamenti o compiti logici.
- “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à.
- “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.
Link Utili:
- 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:
- Converti i documenti in numeri, li chiamiamo embeddings.
- Successivamente, converti anche la query di ricerca dell’utente in embeddings utilizzando lo stesso modello.
- Trova i primi K documenti più simili, di solito basati sulla similarità cosinale.
- 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.
Cosa Leggere & Link Utili
- Costruire Applicazioni LLM basate su RAG per la Produzione — un ottimo articolo dettagliato sui principali componenti di RAG.
- Perché il Tuo RAG Non è Affidabile in un Ambiente di Produzione — un ottimo articolo di Ahmed Besbes che spiega in modo chiaro le difficoltà che possono sorgere nell’utilizzo di RAG.
- 7 Strategie di Query per Navigare nei Grafi di Conoscenza con LlamaIndex — un articolo informativo di Wenqi Glantz che analizza dettagliatamente e in modo sfumato la costruzione di una pipeline RAG utilizzando LlamaIndex.
- Strumento di Recupero di OpenAI — utilizza RAG di OpenAI se desideri il minimo sforzo.
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:
Ok, se ti ho convinto della sua importanza, vediamo come funziona (sorpresa – non è così difficile):
- Prendi un LLM addestrato, talvolta chiamato LLM di base. Puoi scaricarli da HuggingFace.
- 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.
- Scegli un metodo adatto per il perfezionamento. Al momento, LoRA e QLoRA sono popolari.
- 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.
Cosa leggere e link utili
- Crea un clone di te stesso con un LLM sintonizzato — il mio articolo in cui ho scritto su come raccogliere dataset, parametri utilizzati e ho dato utili consigli sul fine-tuning.
- Comprendere il fine-tuning efficiente dei parametri di grandi modelli di linguaggio — un ottimo tutorial se vuoi approfondire i dettagli del concetto di fine-tuning e delle alternative efficienti in termini di parametri.
- Fine-tuning LLMs con LoRA e QLoRA: Approfondimenti da centinaia di esperimenti — uno dei miei articoli preferiti per capire le capacità di LoRA.
- Fine-tuning OpenAI — se vuoi sintonizzare GPT-3.5 con un minimo di sforzo.
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.
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?
Cosa Leggere e Link Utili
- 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.
- 7 Modi Per Velocizzare l’Inferenza dei Tuoi LLMs Ospitati – tecniche per velocizzare l’inferenza degli LLMs al fine di aumentare la velocità di generazione di token e ridurre il consumo di memoria.
- Ottimizzare l’Utilizzo della Memoria per il Training di LLMs in PyTorch – l’articolo fornisce una serie di tecniche che possono ridurre il consumo di memoria in PyTorch di circa 20 volte senza compromettere le prestazioni e l’accuratezza della modellazione.
Valutazione
Supponiamo che tu abbia un modello fine-tuned. Ma come puoi essere sicuro che la sua qualità sia migliorata? Quali metriche dovremmo usare?
- Tutto sulla valutazione dei Grandi modelli di linguaggio – un articolo di panoramica su benchmark e metriche.
- evals – il framework più popolare per la valutazione di LLMs e sistemi LLM.
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.
- Tutto ciò che Devi Sapere sui Database di Vettori – una guida passo-passo di Dominik Polzer per scoprire e sfruttare il potere dei database di vettori.
- Scegliere un database di vettori: confronto e guida per il 2023 – confronto tra i database Pinecone, Weviate, Milvus, Qdrant, Chroma, Elasticsearch e PGvector.
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.