Panoramica di PEFT Messa a punto efficiente dei parametri all’avanguardia

Una panoramica sul PEFT Ottimizzazione efficace dei parametri all'avanguardia

 

Cos’è PEFT

 

Man mano che i modelli di lingua di grandi dimensioni come GPT-3.5, LLaMA2 e PaLM2 diventano sempre più grandi, il processo di fine-tuning su compiti di elaborazione del linguaggio naturale (NLP) diventa sempre più costoso dal punto di vista computazionale e della memoria. 

I metodi di Fine-Tuning Parametrico-Efficiente (PEFT) risolvono questi problemi effettuando il fine-tuning solo su un piccolo numero di parametri aggiuntivi, mentre la maggior parte del modello preaddestrato rimane congelata. Questo evita il “catastrophic forgetting” nei modelli di grandi dimensioni e consente il fine-tuning con risorse di calcolo limitate. 

PEFT si è dimostrato efficace per compiti come la classificazione delle immagini e la generazione di testi, utilizzando solo una frazione dei parametri. I piccoli pesi sintonizzati possono essere aggiunti semplicemente ai pesi preaddestrati originali. 

Puoi persino eseguire il fine-tuning dei modelli di lingua di grandi dimensioni sulla versione gratuita di Google Colab utilizzando la quantizzazione a 4 bit e le tecniche PEFT QLoRA.   

La natura modulare di PEFT consente anche di adattare lo stesso modello preaddestrato per molti compiti aggiungendo piccoli pesi specifici per ogni compito, evitando così la necessità di salvare copie complete. 

La libreria PEFT integra popolari tecniche PEFT come LoRA, Prefix Tuning, AdaLoRA, Prompt Tuning, MultiTask Prompt Tuning e LoHa con Transformers e Accelerate. Ciò fornisce un facile accesso ai modelli di lingua di grandi dimensioni all’avanguardia con fine-tuning efficiente e scalabile.             

 

Cos’è LoRA

 

In questo tutorial, utilizzeremo la tecnica più popolare di fine-tuning parametrico efficiente (PEFT) chiamata LoRA (Adattamento a Bassa Gradazione di Modelli di Lingua di Grandi Dimensioni). LoRA è una tecnica che accelera significativamente il processo di fine-tuning dei modelli di lingua di grandi dimensioni riducendo al contempo l’utilizzo di memoria.

La chiave di LoRA è rappresentare gli aggiornamenti dei pesi usando due matrici più piccole ottenute tramite la decomposizione a bassa gradazione. Queste matrici possono essere addestrate per adattarsi ai nuovi dati riducendo il numero di modifiche complessive. La matrice di pesi originale rimane invariata e non subisce ulteriori adattamenti. I risultati finali vengono ottenuti combinando sia i pesi originali che quelli adattati.

Ci sono diversi vantaggi nell’utilizzare LoRA. In primo luogo, migliora notevolmente l’efficienza del fine-tuning riducendo il numero di parametri addestrabili. Inoltre, LoRA è compatibile con altre varie tecniche parametriche efficienti e può essere combinata con esse. I modelli sintonizzati con LoRA dimostrano prestazioni paragonabili a quelli sintonizzati completamente. Importante, LoRA non introduce alcuna latenza di inferenza aggiuntiva poiché i pesi dell’adattatore possono essere fusi senza soluzione di continuità con il modello di base.

 

Casi d’uso

 

PEFT ha molti casi d’uso, dai modelli di lingua ai classificatori di immagini. Puoi consultare tutti gli tutorial sui casi d’uso nella documentazione ufficiale. 

  1. StackLLaMA: Guida pratica per addestrare LLaMA con RLHF
  2. Finetune-opt-bnb-peft
  3. Addestramento efficiente di flan-t5-xxl con LoRA e Hugging Face
  4. DreamBooth fine-tuning con LoRA
  5. Classificazione delle immagini utilizzando LoRA

 

Allenare gli LLM utilizzando PEFT

 

In questa sezione, impareremo come caricare e avvolgere il nostro modello trasformatore utilizzando la libreria `bitsandbytes` e `peft`. Copriremo anche il caricamento del modello QLoRA ottimizzato salvato e l’esecuzione di inferenze con esso.

 

Per iniziare

 

Prima di tutto, installeremo tutte le librerie necessarie. 

%%capture%pip install accelerate peft transformers datasets bitsandbytes

 

Poi, importeremo i moduli essenziali e nomineremo il modello di base (Llama-2-7b-chat-hf) per ottimizzarlo utilizzando l’insieme di dati mlabonne/guanaco-llama2-1k

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfigfrom peft import get_peft_model, LoraConfigimport torchmodel_name = "NousResearch/Llama-2-7b-chat-hf"dataset_name = "mlabonne/guanaco-llama2-1k"

 

Configurazione PEFT

 

Crea la configurazione PEFT che utilizzeremo per avvolgere o allenare il nostro modello. 

peft_config = LoraConfig(    lora_alpha=16,    lora_dropout=0.1,    r=64,    bias="none",    task_type="CAUSAL_LM",)

 

Quantizzazione a 4 bit

 

Caricare gli LLM su GPU per consumatori o Colab presenta significative sfide. Tuttavia, possiamo superare questo problema implementando una tecnica di quantizzazione a 4 bit con una configurazione di tipo NF4 utilizzando BitsAndBytes. Utilizzando questo approccio, possiamo caricare efficacemente il nostro modello, risparmiando così memoria e prevenendo crash della macchina.

compute_dtype = getattr(torch, "float16")bnb_config = BitsAndBytesConfig(    load_in_4bit=True,    bnb_4bit_quant_type="nf4",    bnb_4bit_compute_dtype=compute_dtype,    bnb_4bit_use_double_quant=False,)

 

Avvolgimento del modello base di Transformers

 

Per rendere il nostro modello efficiente in termini di parametri, avvolgeremo il modello trasformatore di base utilizzando `get_peft_model`. 

model = AutoModelForCausalLM.from_pretrained(    model_name,    quantization_config=bnb_config,    device_map="auto")model = get_peft_model(model, peft_config)model.print_trainable_parameters()

 

I nostri parametri addestrabili sono inferiori rispetto a quelli del modello di base, consentendoci di utilizzare meno memoria e di ottimizzare il modello più velocemente.

trainable params: 33,554,432 || all params: 6,771,970,048 || trainable%: 0.49548996469513035

 

Il prossimo passo è quello di allenare il modello. Puoi farlo seguendo la guida 4-bit quantization and QLoRA

 

Salva il modello

 

Dopo l’addestramento, puoi salvare il modello localmente.

model.save_pretrained("llama-2-7b-chat-guanaco")

 

O pushalo su Hugging Face Hub. 

!huggingface-cli login --token $secret_value_0

 

model.push_to_hub("llama-2-7b-chat-guanaco")

 

Come possiamo vedere, l’adopter del modello è solo di 134 MB mentre il modello base LLaMA 2 7B è di circa 13 GB. 

 

 

Caricamento del Modello

 

Per eseguire l’inferenza del modello, dobbiamo prima caricare il modello utilizzando una quantizzazione a precisione a 4-bit e quindi unire i pesi del PEFT addestrato con il modello base (LlaMA 2). 

from transformers import AutoModelForCausalLMfrom peft import PeftModel, PeftConfigimport torchpeft_model = "kingabzpro/llama-2-7b-chat-guanaco"base_model = AutoModelForCausalLM.from_pretrained(    model_name,    quantization_config=bnb_config,    device_map="auto")model = PeftModel.from_pretrained(base_model, peft_model)tokenizer = AutoTokenizer.from_pretrained(model_name)model = model.to("cuda")model.eval()

 

Inferenza

 

Per eseguire l’inferenza, è necessario scrivere il prompt in stile dataset guanaco-llama2-1k (“<s>[INST] {prompt} [/INST]”). Altrimenti otterrete risposte in lingue diverse. 

prompt = "What is Hacktoberfest?"inputs = tokenizer(f"<s>[INST] {prompt} [/INST]", return_tensors="pt")with torch.no_grad():    outputs = model.generate(        input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=100    )    print(        tokenizer.batch_decode(            outputs.detach().cpu().numpy(), skip_special_tokens=True        )[0]    )

 

La risposta sembra perfetta. 

[INST] What is Hacktoberfest? [/INST] Hacktoberfest è un evento di sviluppo di software open source che si svolge in ottobre. È stato creato dall'organizzazione non profit Open Source Software Institute (OSSI) nel 2017. L'evento mira a incoraggiare le persone a contribuire a progetti open source, con l'obiettivo di aumentare il numero di contributori e migliorare la qualità del software open source.Durante Hacktoberfest, i partecipanti sono incoraggiati a contribuire a progetti open source

 

Nota: Se incontri difficoltà durante il caricamento del modello in Colab, puoi consultare il mio notebook: Panoramica di PEFT.

 

Conclusione

 

Tecniche di ottimizzazione dei parametri efficienti come LoRA consentono un efficiente fine-tuning dei grandi modelli di linguaggio utilizzando solo una frazione dei parametri. Ciò evita costosi interi fine-tuning e consente la formazione con risorse di calcolo limitate. La natura modulare del PEFT consente di adattare i modelli a molteplici compiti. Metodi di quantizzazione come la precisione a 4-bit possono ridurre ulteriormente l’utilizzo della memoria. Nel complesso, il PEFT apre le capacità dei grandi modelli di linguaggio a un pubblico molto più ampio.

****[Abid Ali Awan](https://www.polywork.com/kingabzpro)**** (@1abidaliawan) è un professionista certificato di data science che ama costruire modelli di apprendimento automatico. Attualmente si sta concentrando sulla creazione di contenuti e sulla scrittura di blog tecnici su tecnologie di apprendimento automatico e data science. Abid ha una laurea magistrale in Gestione della Tecnologia e una laurea triennale in Ingegneria delle Telecomunicazioni. La sua visione è quella di costruire un prodotto di intelligenza artificiale utilizzando una rete neurale a grafo per gli studenti che lottano con disturbi mentali.