Un Large Language Model (LLM), in italiano “modello di linguaggio di grandi dimensioni“, è un tipo di modello di apprendimento automatico altamente parametrizzato progettato per comprendere e generare testo nel linguaggio naturale. Questi modelli sono noti per la loro potenza ed estensione, essendo costituiti da milioni o miliardi di parametri che consentono loro di catturare e riprodurre la complessità del linguaggio umano.
ExLlamaV2: i LLM più potenti sbarcano sulle GPU consumer
Uno dei problemi più sentiti nello sviluppo di applicazioni che integrano funzionalità basate sull’intelligenza artificiale, consiste nelle difficoltà legate al caricamento e all’utilizzo dei modelli LLM più estesi. Per gestirli al meglio e ottenere risposte in termini ragionevoli, sono tipicamente necessarie configurazioni hardware che non tutti gli utenti possono permettersi.
Il progetto ExLlamaV2, da poco pubblicato su GitHub, ha come obiettivo quello di portare i LLM più potenti e versatili sulle GPU consumer moderne. Si tratta di una libreria che rappresenta un passo avanti significativo nell’ambito dell’elaborazione del linguaggio naturale (Natural Language Processing, NLP), offrendo un’efficace piattaforma per l’inferenza di modelli di linguaggio di dimensioni particolarmente ampie.
Parametri e inferenza
Nel contesto dei LLM, i parametri si riferiscono ai “pesi” o ai coefficienti che compongono il modello neurale. Sono parte integrante del processo di apprendimento automatico e rappresentano le interconnessioni tra le unità neurali all’interno del modello. I parametri definiscono come il modello interpreta e genera dati.
Nel caso dei modelli basati sull’architettura Transformer, i parametri includono i pesi delle connessioni tra gli strati del modello. Come abbiamo visto nell’articolo correlato, l’attenzione è un concetto fondamentale per l’elaborazione del linguaggio naturale e nell’apprendimento automatico in generale. Essa si riferisce alla capacità del modello di dare più peso a parti specifiche di un input durante l’elaborazione, in base alla loro rilevanza o importanza. I pesi definiscono come il modello tiene in considerazione e combina le informazioni provenienti da diverse parti della sequenza oggetto di analisi.
Con il termine inferenza, invece, si fa riferimento alla fase in cui il modello addestrato è utilizzato per effettuare previsioni o elaborazioni basate sui dati di input. In altre parole, durante l’inferenza, il modello applica le “conoscenze” acquisite durante la fase di addestramento per eseguire operazioni specifiche sui dati di input senza apportare ulteriori modifiche ai suoi parametri.
Caratteristiche di ExLlamaV2 e il “segreto” della quantizzazione
La nuova libreria ExLlamaV2 è progettata per sfruttare al massimo le GPU consumer moderne, consentendo elaborazioni linguistiche complesse in modo efficiente e rapido.
Nel caso dei modelli di linguaggio, i pesi sono solitamente rappresentati come numeri in virgola mobile (float): il processo di quantizzazione converte tali numeri in un formato a precisione inferiore, tipicamente rappresentato con meno bit (ne parliamo nell’articolo sul codice binario). Questo processo riduce lo spazio di archiviazione e il carico computazionale necessario per elaborare i pesi durante l’inferenza.
ExLlamaV2 introduce una tecnica di quantizzazione avanzata chiamata EXL2 permettendo l’utilizzo di “livelli” a 2, 3, 4, 5, 6 e 8 bit. In questo modo diventa possibile assegnare una precisione maggiore alle parti più importanti del modello e una precisione inferiore alle parti meno cruciali. La selezione dei parametri per la quantizzazione avviene in modo automatico con un approccio volto a ridurre al minimo l’errore su tutto il modello.
È proprio l’abile utilizzo della quantizzazione che consente di ridurre significativamente le dimensioni del modello e il suo consumo di risorse. Modelli di grandi dimensioni diventano così finalmente sfruttabili su hardware meno potente.
Per dare un’idea di cosa è possibile fare con ExLlamaV2, basti pensare che il modello Llama2 70B (70 miliardi di parametri) può essere eseguito su una singola GPU con 24 GB di VRAM con 2,55 bit per peso, producendo output coerenti e stabili.
La libreria accessibile da parte di chiunque tramite il corrispondente repository GitHub ha quindi il grande vantaggio di democratizzare l’accesso ai LLM per ideare e sviluppare vasta gamma di applicazioni del mondo reale, tra cui chatbot conversazionali, strumenti per la traduzione automatica, analisi del testo e molto altro ancora.
Come installare e usare ExLlamaV2
L’installazione e l’uso di ExLlamaV2 richiedono alcune operazioni di base, come clonare il repository e installare le dipendenze. Per procedere, basta aprire una finestra del terminale Linux quindi eseguire il comando seguente:
git clone https://github.com/turboderp/exllamav2
Il caricamento delle dipendenze si concretizza accedendo alla cartella del progetto quindi richiedendo l’installazione dei contenuti specificati nel file requirements.txt
:
cd exllamav2
pip install -r requirements.txt
Dopo aver installato ExLlamaV2, si può avviare subito un test di inferenza e utilizzare alcune delle funzionalità disponibili ricorrendo ai comandi di seguito. In particolare, nell’istruzione va indicato, al posto di percorso_modello
la cartella contenente il LLM scaricato in locale:
python test_inference.py -m <percorso_modello> -p "<testo_input>"
Al posto di testo_input va ovviamente indicato il prompt da trasmettere in ingresso al LLM prescelto.
Per caricare una console chatbot si può invece impartire il comando che segue, specificando al solito il modello da usare:
python examples/chat.py -m <percorso_modello> -mode llama
Se si volessero convertire modelli esistenti utilizzando la quantizzazione avanzata di ExLlamaV2, è possibile procedere con lo script convert.py
. Maggiori informazioni in proposito sono contenute nella pagina GitHub del progetto.
Credit immagine in apertura: iStock.com/da-kuk