TinyLlama 1.1B - Le dimensioni non contano

TinyLlama 1.1B – Le dimensioni non contano

Nodo di origine: 3081711

Introduzione

Nel panorama in rapida crescita dell’intelligenza artificiale e dell’apprendimento automatico, TinyLlama 1.1B emerge come uno sviluppo degno di nota. In un’era in cui i vincoli computazionali pongono sfide per l’esecuzione di modelli più complessi, TinyLlama si distingue sfidando le aspettative. Mette in mostra le notevoli prestazioni dei modelli compatti.

Questo articolo mira a fornire un'analisi di TinyLlama 1.1B, un modello di linguaggio compatto e di grandi dimensioni. Approfondiremo i suoi aspetti principali, come il modo in cui è stato addestrato nei benchmark delle prestazioni e nell'implementazione pratica utilizzando la piattaforma Hugging Face. Eseguiremo questo modello anche sul servizio gratuito Google Colab e testeremo le sue capacità matematiche e di ragionamento.

Piccolo Lama 1.1B

obiettivi formativi

  • Ottieni una comprensione completa di TinyLlama 1.1B
  • Esplora l'intricato processo di formazione che il modello ha attraversato
  • Analizzare le prestazioni e confrontare i risultati per valutarne l'efficacia
  • Impara i passaggi pratici per implementare TinyLlama 1.1B utilizzando esempi di codice

Questo articolo è stato pubblicato come parte di Blogathon sulla scienza dei dati.

Sommario

Cos'è TinyLlama 1.1B?

TinyLlama 1.1B, una parte del più ampio progetto Llama, è una testimonianza dei progressi della modellazione del linguaggio. È un modello con 1.1 miliardi di parametri, addestrato su ben 3 trilioni di token, che lo colloca in una posizione unica nel panorama dell'intelligenza artificiale. A differenza delle sue controparti più grandi, TinyLlama 1.1B è progettato per essere più efficiente e gestibile, rendendolo una buona scelta per applicazioni con risorse computazionali limitate.

Questo modello open source democratizza l’accesso alla tecnologia IA all’avanguardia, consentendo a molti sviluppatori e ricercatori di esplorare e innovare nel campo dell’elaborazione del linguaggio naturale. Si tratta di un modello noto per la sua capacità di bilanciare le prestazioni con il consumo di risorse, una considerazione fondamentale nei diversi ambienti computazionali di oggi.

Processo di formazione di TinyLlama 1.1B

Il processo di addestramento di TinyLlama 1.1B è affascinante, come il modello stesso. L'addestramento di TinyLlama si è svolto in soli 90 giorni, addestrato sulle 16 GPU A100-40G. Il pre-addestramento è stato effettuato su 3 trilioni di token e il team TinyLlama ha pubblicato il modello intermedio tra ogni mezzo trilione. 

Per quanto riguarda i dati, Slimpajama e Starcoderdata sono stati presi con una dimensione combinata del set di dati di 950 miliardi di token. Il rapporto linguaggio-codice naturale è stato mantenuto a 7:3, ovvero il 70% dei dati era linguaggio naturale e il 30% codice. Pertanto, per raggiungere il traguardo dei 3 trilioni di gettoni per la messa a punto, TinyLlama è stato sottoposto a 3 epoche di addestramento per questo set di dati. 

Esiste anche una versione chat di TinyLlama chiamata TinyLlama-Chat rilasciata. Inizialmente, questo modello è stato messo a punto sul set di dati UltraChat, che contiene diverse conversazioni sintetiche generate da ChatGPT. Questo passaggio è stato cruciale per rendere il modello in grado di gestire diversi contesti e stili di conversazione.

Un ulteriore perfezionamento è stato ottenuto utilizzando DPOTrainer sul set di dati UltraFeedback. Questa fase di formazione si è concentrata sull'allineamento delle risposte del modello per allinearle con modelli di conversazione simili a quelli umani. Il risultato è un modello che non solo coglie informazioni su argomenti diversi ma interagisce in modo naturale e coinvolgente​​.

Puoi anche leggere: Iniziare con LlaMA 2: una guida per principianti

Risultati delle prestazioni e dei benchmark

La valutazione delle prestazioni di TinyLlama 1.1B rivela la sua capacità di fornire rapidamente risposte di alta qualità. La sua formazione l'ha dotata della capacità di soddisfare applicazioni multilingue, una caratteristica importante nel nostro mondo globalizzato. Nonostante le sue dimensioni più piccole, TinyLlama 1.1B sta ancora recuperando terreno rispetto alle sue controparti più grandi in termini di qualità e velocità di risposta, rendendolo uno strumento potente in diverse applicazioni IA.

I benchmark per TinyLlama 1.1B, sebbene meno estesi di quelli per i modelli più grandi, dimostrano comunque la sua competenza nella gestione di compiti linguistici complessi. La sua capacità di generare risposte coerenti e contestualmente rilevanti in più lingue è particolarmente impressionante. Il modello è stato testato su diversi benchmark come HellaSwag, WinoGrande, ARC, MMLU e altri. Il punteggio medio combinato è risultato essere 52.99. Questo è decisamente migliore dell'altro modello da 1 miliardo di parametri, ovvero il Pythia 1B, che ha ottenuto un punteggio medio di 48.3. La tabella illustra i punteggi individuali di ciascun benchmark

Segno di riferimento Punteggio TinyLlama 1.1B
Hella Swag 59.2
Obqa 36.0
Vino Grande 59.12
ARC_c 30.12
ARC_e 55.25
boolq 57.83
piqa 73.29
avg 52.9

TinyLlama – Per iniziare

Qui, in questa sezione, scaricheremo la versione quantizzata di TinyLlama Chat e la eseguiremo in Google Colab. Prima di scaricare il modello, dobbiamo scaricare e installare i seguenti pacchetti Python

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip3 install llama-cpp-python 
!pip3 install huggingface-hub 
  • Il CMAKE_ARGS=”-DLLAMA_CUBLAS=attivato” ed FORCE_CMAKE=1, consentirà a llama_cpp_python di utilizzare la GPU Nvidia disponibile nella versione colab gratuita.
  • Quindi installiamo il lama_cpp_python pacchetto tramite pip3
  • Scarichiamo anche il file abbracciandoface-hub, con il quale scaricheremo la chat quantizzata TinyLlama 1.1B

Per testare il modello TinyLlama 1.1B Chat, dobbiamo prima scaricarne la versione quantizzata. Per scaricarlo, eseguiremo il seguente codice

from huggingface_hub import hf_hub_download

# specifying the model name
model_name = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
# specifying the type of quantization of the model
model_file = "tinyllama-1.1b-chat-v1.0.Q8_0.gguf"

# download the model by specifying the model name and quantized model name
model_path = hf_hub_download(model_name, filename=model_file)

Qui, il abbracciare_face_hub La libreria si occuperà del processo di download del modello quantizzato. Per questo importiamo il file hf_hub_download che accetta i seguenti parametri:

  • nome del modello: A questa variabile passiamo il modello che desideriamo scaricare. Qui desideriamo scaricare il modello TinyLlama 1.1B Chat GGUF.
  • file_modello: Qui specifichiamo il tipo di modello quantizzato che vogliamo scaricare. Qui scaricheremo la versione quantizzata a 8 bit della TinyLlama 1.1B Chat.
  • Infine, passiamo questi parametri al file hf_hub_download, che accetta questi parametri e scarica il modello specificato. Dopo il download, restituisce il percorso in cui è stato scaricato il modello.
  • Questo percorso restituito viene salvato nel file percorso_modello variabile.

Ora possiamo caricare questo modello tramite il file lama_cpp_python biblioteca. Il codice per caricare il modello sarà come quello seguente.

from llama_cpp import Llama
llm = Llama(
    model_path=model_path,
    n_ctx=512,  # the number of i/p tokens the model can take
    n_threads=8, # the number of threads to use
    n_gpu_layers=40# how many layers of the model to offload to the GPU
)

Importiamo il Lama classe dal lama_cpp, che accetta i seguenti parametri

  • percorso_modello: Questa variabile prende il percorso in cui è memorizzato il nostro modello. Abbiamo ottenuto il percorso dal passaggio precedente, che forniremo qui
  • n_ctx: Qui diamo la lunghezza del contesto per il modello. Per ora, forniamo 512 token come lunghezza del contesto
  • n_thread: Qui menzioniamo il numero di thread che devono essere utilizzati dal file Lama classe
  • n_gpu_layers: Lo specifichiamo se abbiamo una GPU funzionante, cosa che facciamo in caso di colab gratuita. Per questo superiamo 40, il che implica che vogliamo scaricare l'intero modello nella GPU e non vogliamo che nessuna parte di esso venga eseguita nella RAM di sistema
  • Infine, creiamo un oggetto da questo Lama class e assegnatelo alla variabile llm

L'esecuzione di questo codice caricherà il modello quantizzato TinyLlama 1.1B Chat sulla GPU e imposterà la lunghezza del contesto appropriata. Ora è il momento di fare alcune inferenze su questo modello. Per questo, lavoriamo con il codice seguente

output = llm(
  "<|im_start|>usernWho are you?<|im_end|>n<|im_start|>assistantn", # User Prompt
  max_tokens=512,  # Number of output tokens generated
  stop=["</s>"],   # Token which tells the LLM to stop
)
print(output['choices'][0]['text']) # Model generated text

Per dedurre il modello, passiamo i seguenti parametri al LLM:

  • modello di prompt/chat: Questo è il modello di prompt necessario per chattare con la modella. Il modello sopra citato(cioè , ) è quello che funziona per il modello TinyLlama 1.1B Chat. Nel modello, la frase dopo l'Utente è il Prompt dell'utente e la generazione verrà generata dopo l'Assistente.
  • max_token: A questa variabile passiamo un valore che definisce il numero massimo di token che un modello di linguaggio di grandi dimensioni può generare quando viene fornito un prompt. Per ora lo limitiamo a 512 token.
  • smettere: A questa variabile passiamo il token di stop. Il token di arresto indica al modello linguistico di grandi dimensioni di interrompere la generazione di ulteriori token. Per TinyLlama 1.1B Chat, il token di arresto è

Il testo generato viene memorizzato nella variabile di output quando lo eseguiamo. Il risultato viene generato in un formato simile alla chiamata API OpenAI. Pertanto, possiamo accedere alla generazione tramite l'istruzione print specificata, in modo simile a come accediamo alla generazione dalle risposte OpenAI. L'output generato può essere visto di seguito

Piccolo Lama 1.1B

Per un modello di queste dimensioni, la risposta generata è di prim'ordine. Ciò è inaspettato per un modello di queste dimensioni; la grammatica e il tono sembrano perfettamente a posto e non vi è alcun segno di ripetizione delle frasi. Proviamo a testare le capacità di ragionamento del modello

output = llm(
  "<|im_start|>usernIf all students who study hard get good grades, 
  and John got good grades, can we conclude that John studied hard?
  <|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
Piccolo Lama 1.1B
output = llm(
  "<|im_start|>usernHow fast can a snake fly?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

Fin qui tutto bene. Dagli esempi che abbiamo visto, il modello genera buone risposte. Ma questo potrebbe non essere vero in tutti i casi perché lo testiamo solo su un numero limitato di domande. Testiamo anche il modello sulle sue capacità di ragionamento matematico

output = llm(
  "<|im_start|>usernJohn is twice as old as Sarah, and Sarah is three years 
  older than Mary. If Mary is 10 years old, how old is John?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"
output = llm(
  "<|im_start|>usernWhat is the missing number in this pattern: 
  1, 4, 9, 16, __, 36?n<|im_end|>n<|im_start|>assistantn",
  max_tokens=512,
  stop=["</s>"],
)


print(output['choices'][0]['text'])
"

Dagli esempi che abbiamo visto, è chiaro che TinyLlamaChat si comporta in modo estremamente scarso nel rispondere a semplici domande attitudinali in matematica. Ciò è previsto perché il modello non è stato pre-addestrato su alcun set di dati matematici. La qualità della generazione può essere migliorata ottimizzandola sul set di dati matematici

Venendo alla messa a punto, TinyLlama è una scelta obbligata per coloro che hanno limitazioni hardware limitate e desiderano mettere a punto modelli linguistici di grandi dimensioni sul proprio set di dati specifico

Potenziali casi d'uso e applicazioni

Date le dimensioni compatte di TinyLlama, che vanta 1.1 miliardi di parametri, le sue applicazioni sono adatte principalmente ad ambienti in cui modelli più grandi potrebbero non essere realizzabili a causa di limitazioni hardware o di maggiore efficienza. Ecco alcuni casi d'uso specifici tenendo in considerazione le sue dimensioni:

Applicazioni mobili: Le dimensioni ridotte di TinyLlama lo rendono una buona scelta per l'integrazione in app mobili dove è necessaria l'elaborazione sul dispositivo. Ciò include app di traduzione linguistica, funzionalità di assistente personale e chatbot che possono funzionare in modo efficiente sugli smartphone.

Sistemi integrati nei dispositivi IoT: Nel campo dell’Internet of Things (IoT), le risorse informatiche sono spesso limitate; TinyLlama può essere utilizzato per aggiungere funzionalità di elaborazione linguistica intelligente a diverse apparecchiature come assistenti domestici intelligenti, tecnologia indossabile e altre apparecchiature connesse simili.

Elaborazione perimetrale: Per le applicazioni che traggono vantaggio dall'elaborazione dei dati più vicino alla fonte piuttosto che in un ambiente cloud centralizzato, TinyLlama può essere impiegato in modo efficace. Ciò include l’elaborazione del linguaggio in tempo reale nei sistemi automobilistici, nelle apparecchiature di produzione e in altri dispositivi edge.

Ricerca linguistica con risorse limitate: A causa delle sue dimensioni ridotte e dei minori requisiti computazionali, TinyLlama può essere uno strumento prezioso nella ricerca linguistica, in particolare per le lingue con risorse limitate in cui la formazione di modelli su larga scala non è fattibile.

Strumenti didattici: In contesti educativi, in particolare quelli con accesso limitato a risorse informatiche di fascia alta, TinyLlama può essere utilizzato per sviluppare app per l'apprendimento delle lingue, strumenti educativi interattivi e altri ausili all'apprendimento.

Generazione di contenuti per le piccole imprese: Le piccole imprese con risorse limitate possono utilizzare TinyLlama per generare contenuti, come descrizioni di prodotti, testi di marketing e corrispondenza con i clienti, senza la necessità di una grande potenza di calcolo.

Prototipazione e Sperimentazione: Sviluppatori e ricercatori che desiderano sperimentare modelli linguistici ma non hanno accesso a risorse informatiche ad alta potenza possono utilizzare TinyLlama per prototipare e sviluppare nuove applicazioni NLP.

Analisi efficiente dei dati: TinyLlama può essere utilizzato per l'analisi del testo e l'estrazione dei dati in scenari in cui è necessaria un'elaborazione rapida ed efficiente, come l'analisi del feedback dei clienti, delle risposte ai sondaggi o delle interazioni sui social media.

Conclusione

TinyLlama 1.1B è una testimonianza dei progressi nel campo dell'intelligenza artificiale e dell'elaborazione del linguaggio naturale. Il suo sviluppo e la sua ampia disponibilità sono vitali per creare modelli linguistici di inferenza più efficienti, piccoli e rapidi. Bilanciando un ingombro ridotto dei parametri con prestazioni robuste, TinyLlama 1.1B risponde alla necessità critica di modelli potenti e pratici per un'ampia gamma di applicazioni. La sua capacità di comprendere e generare linguaggio in modo simile a quello umano pur essendo sufficientemente leggero per diversi ambienti informatici lo rende una scelta ideale per le persone che hanno difficoltà a eseguire modelli linguistici di grandi dimensioni sulle proprie macchine. Il modello può essere facilmente messo a punto su un set di dati e può essere addestrato con risorse di calcolo limitate. 

I punti chiave di questo articolo includono

  • Progettato per l'efficienza, TinyLlama 1.1B è disponibile per un pubblico più ampio, compresi quelli con risorse computazionali limitate, rendendolo adatto a diverse applicazioni.
  • Il modello è stato sottoposto a un ampio processo di formazione, inclusa la formazione su 3 trilioni di token in 90 giorni utilizzando 16 GPU A100-40G.
  • Nonostante le sue dimensioni ridotte, TinyLlama 1.1B fornisce risposte di alta qualità e contestualmente pertinenti in più lingue, rendendolo un modello da considerare.
  • È una buona scelta per applicazioni mobili, apparecchiature IoT, strumenti didattici e altro ancora. Le sue dimensioni compatte e la sua efficienza consentono ampie applicazioni.
  • I suoi minori requisiti computazionali lo rendono uno strumento prezioso nella ricerca linguistica, soprattutto per le lingue con risorse limitate.
  • Il modello è una buona scelta per coloro che sperimentano modelli linguistici o sviluppano nuove app di PNL, principalmente in contesti con potenza computazionale limitata.

Domande frequenti

Q1. Cos'è TinyLlama 1.1B?

A. TinyLlama 1.1B è un modello di linguaggio di grandi dimensioni compatto ed efficiente con 1.1 miliardi di parametri, addestrati su 3 trilioni di token, adatto per applicazioni con risorse computazionali limitate.

Q2. Come è stato addestrato TinyLlama 1.1B?

A. È stato addestrato per oltre 90 giorni utilizzando 16 GPU A100-40G su set di dati tra cui Slimpajama e Starcoderdata, con un rapporto linguaggio naturale/codice di 7:3.

Q3. Quali sono i parametri di riferimento delle prestazioni di TinyLlama 1.1B?

A. TinyLlama 1.1B mostra le sue capacità nella gestione di compiti linguistici complessi, ottenendo un punteggio medio di 52.99 su benchmark come HellaSwag, MMLU e WinoGrande.

Q4. Quali sono alcuni potenziali casi d'uso di TinyLlama 1.1B?

A. È adatto per applicazioni in cui le dimensioni e la velocità sono un problema importante. Questi includono app mobili, apparecchiature IoT come dispositivi di automazione domestica, generazione di contenuti per piccole imprese e analisi efficiente dei dati.

Q5. TinyLlama 1.1B è adatto a sviluppatori con risorse limitate?

A. Assolutamente, è una scelta perfetta per sviluppatori e ricercatori che non hanno accesso a risorse informatiche ad alta potenza per la prototipazione e lo sviluppo di nuove applicazioni NLP. Il modello TinyLlama può essere eseguito anche su una macchina Raspberry Pi.

Q6. Come si comporta TinyLlama 1.1B nei compiti di ragionamento matematico?

A. Anche se eccelle davvero in diversi compiti linguistici, mostra limiti nel ragionamento matematico, che può essere migliorato mettendo a punto i set di dati rilevanti.

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

Timestamp:

Di più da Analisi Vidhya