Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Fine-tune Hugging Face LM con LoRa e QLoRa
Questo tutorial illustra la messa a punto di un modello di linguaggio causale di Hugging Face con Low-Rank Adaptation (LoRa) o Quantized Low-Rank Adaptation (QLoRa) su un set di dati di istruzioni personalizzato. Invii il pacchetto di lavoro di ottimizzazione di Hugging Face LoRa a una flotta di GPU della tua farm Deadline Cloud. GitHub
LoRa addestra un piccolo adattatore su un modello base congelato invece di aggiornare tutti i pesi del modello. QLoRa fa lo stesso mantenendo il modello base in forma quantizzata a 4 bit, il che dimezza all'incirca la memoria GPU necessaria e consente ai modelli più grandi di adattarsi a GPU più piccole.
Il pacchetto utilizza la libreria di trasformatori Hugging Face, la libreria di ottimizzazione fine efficiente dei parametri PEFT e la libreria di quantizzazione
Tempo stimato: circa un'ora, compresa la configurazione. La maggior parte delle regolazioni LoRa per i modelli 1B-7B vengono completate in 5-30 minuti di formazione.
L'esecuzione di questo tutorial comporta l'addebito delle istanze di lavoro della GPU che elaborano il job.
Panoramica di
Il flusso di lavoro è suddiviso in quattro fasi. Si prepara un set di dati JSONL, si invia il job Deadline Cloud in modo che un operatore GPU scarichi il set di dati ed esegua il fine-tuning di QLoRa, scarichi l'adattatore e combini l'adattatore con il modello base per l'deadline job download-outputinferenza locale.
Per completare questo tutorial, segui questi passaggi:
-
Completare i prerequisiti .
-
Allestisci la tua fattoria.
-
Prepara il tuo set di dati.
-
Concedi al ruolo di coda l'accesso al tuo bucket di set di dati (solo set di dati S3).
-
Invia il lavoro di ottimizzazione.
-
Scarica e usa l'adattatore addestrato.
-
Eliminare le risorse.
Prerequisiti
Prima di iniziare, avrai bisogno di:
-
L'interfaccia a riga di comando di Deadline Cloud è GitHub
installata. -
Un set di dati in formato JSONL, in una cartella locale o caricato in un bucket Amazon S3 che il ruolo della coda può leggere.
-
(Facoltativo) Un token Hugging Face, necessario solo se ripunti il pacchetto su un modello chiuso (ad esempio, Llama o Gemma). Tutti i modelli nel menu a discesa sono pubblici.
Configura la tua fattoria
È necessaria una farm Deadline Cloud con una GPU-enabled coda (parco Linux, GPU NVIDIA con 16 GB o più di RAM video (VRAM)).
La tabella seguente elenca i consigli sulla flotta in base alle dimensioni del modello. QLoRa dimezza il fabbisogno di memoria rispetto a LoRa completo e il pacchetto predefinito è QLoRa.
| Dimensione del modello | VRAM minima (QLoRa a 4 bit) | Istanza Amazon EC2 consigliata |
|---|---|---|
0,5B-1,5B |
8 GB |
|
3B-7B |
12 GB |
|
7B-14B |
24 GB |
|
14B—32B |
48 GB |
|
Nota
Le istanze multi-GPU nell'ultima riga forniscono quattro GPU da 24 GB anziché una singola GPU con 48 GB di VRAM. Lo script di training del pacchetto carica il modello con l'device_map="auto"impostazione Hugging Face, che suddivide i livelli del modello nelle GPU dell'istanza. Per una singola GPU con 48 GB di VRAM, usa un'istanza (L40S). g6e
Prepara il tuo set di dati
Il set di dati è un file JSONL in cui ogni riga è un oggetto JSON con due campi di testo. I nomi dei campi predefiniti sono instruction e output puoi configurarli con i parametri and. InstructionColumn ResponseColumn
Le righe seguenti sono tratte dal set di dati di esempio Saffron Stack incluso nel pacchetto:
{"instruction": "What is Saffron Stack's tagline?", "output": "Saffron Stack's tagline is 'Layered with love.'"} {"instruction": "How old is Saffron Stack?", "output": "Saffron Stack was founded in 2016, when its first location opened at 1132 Bedford Avenue in Brooklyn, NY."}
Il pacchetto accetta dati in due forme:
-
Cartella locale (impostazione predefinita): il
DatasetPathparametro punta a una cartella locale di uno o più.jsonlfile. Gli allegati al lavoro di Deadline Cloud caricano automaticamente la cartella e il lavoro concatena più file nella cartella, incluse le sottocartelle. Il valore predefinito è lasample_data/cartella del pacchetto, quindi l'invio con tutte le impostazioni predefinite si basa sui dati di esempio inclusi (un esempio fittizio di un ristorante chiamato Saffron Stack). -
URI Amazon S3 (override opzionale): se imposti il parametro, il pacchetto lo ignora e scarica invece da Amazon S3.
DatasetS3UriDatasetPathAccetta un singolo file, ad esempios3://bucket/path/train.jsonl, oppure un prefisso/che termina con il quale concatena tutti i file al suo interno..jsonlLa modalità S3 richiede che il ruolo di sessione della coda disponga dell'autorizzazione sul set di dati.s3:GetObject
Il formato del set di dati è compatibile con molti set di dati pubblici di Hugging Face, tra cui il dataset tatsu- su Hugging Face e il lab/alpaca dataset databricks-dolly-15k su Hugging Face, che utilizza instruction response ResponseColumn=response
Concedi al ruolo di coda l'accesso al bucket del tuo set di dati
I lavoratori di Deadline Cloud eseguono i lavori nell'ambito del ruolo di sessione della coda. Per impostazione predefinita, tale ruolo può leggere solo gli allegati ai lavori della coda, nel bucket Amazon S3. Se il tuo set di dati si trova altrove, devi concedere l'accesso in lettura al ruolo. Se utilizzi il set di dati predefinito con cartelle locali, salta questa sezione.
Per concedere al ruolo di coda l'accesso in lettura al set di dati
-
Crea un documento politico denominato
datasets-policy.json, sostituendo la risorsa ARN con il bucket e il prefisso effettivi:{ "Version": "2012-10-17", "Statement": [{ "Sid": "ReadFineTuningDatasets", "Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": [ "arn:aws:s3:::YOUR-BUCKET", "arn:aws:s3:::YOUR-BUCKET/datasets/*" ] }] } -
Allega la policy al tuo ruolo di coda:
QUEUE_ROLE=$(aws deadline get-queue --farm-idFARM-ID--queue-idQUEUE-ID\ --query 'roleArn' --output text | awk -F/ '{print $NF}') aws iam put-role-policy \ --role-name "$QUEUE_ROLE" \ --policy-name ReadFineTuningDatasets \ --policy-document file://datasets-policy.json
In alternativa, posiziona il set di dati sotto il prefisso del bucket job-attachments esistente della coda () a cui il ruolo ha già accesso. DeadlineCloud/...
Invia il lavoro di perfezionamento
Per inviarlo con il mittente della GUI, esegui il comando seguente, compila il modulo e scegli Invia. La GUI è organizzata in sezioni comprimibili: Model, Dataset, LoRa, Training e Output.
deadline bundle gui-submit /path/to/hf_finetune_lora
In alternativa, invia con la CLI:
deadline bundle submit /path/to/hf_finetune_lora \ --queue-idgpu-queue-id\ -p DatasetPath=/path/to/your/data\ -p OutputDir=/tmp/lora-output\ -p AdapterName=my-adapter
Il BaseModel parametro è predefinito Qwen/Qwen2.5-7B e offre un menu a discesa di cinque modelli pubblici: Qwen2.5 (0.5B, 1.5B e 7B) e. Mistral-7B-v0.3 Phi-3.5-mini-instruct Per ottimizzare un modello che non è nell'elenco, modifica il parametro nel file del allowedValues pacchetto. BaseModel template.yaml Gli iperparametri predefiniti sono ottimizzati per la memorizzazione dei fatti, che corrisponde ai dati di esempio raggruppati. Per i casi d'uso legati al trasferimento dello stile, una configurazione più leggera si allena più velocemente:
deadline bundle submit /path/to/hf_finetune_lora \ --queue-idgpu-queue-id\ -p BaseModel=Qwen/Qwen2.5-1.5B \ -p DatasetPath=/path/to/your/data\ -p Epochs=5 -p LoraRank=16 -p LearningRate=2e-4 \ -p OutputDir=/tmp/lora-output\ -p AdapterName=my-adapter
Per l'elenco completo dei parametri, tra cui il ranking LoRa, il tasso di apprendimento, la dimensione del batch e la lunghezza della sequenza, consulta la tabella dei parametri chiave nell'esempio README on. GitHub
Per attendere il completamento del processo, esegui il comando seguente:
deadline job wait --job-idjob-id--timeout 3600
Scaricate e utilizzate l'adattatore addestrato
Per scaricare e testare l'adattatore
-
Al termine del processo, scarica l'output:
deadline job download-output --job-idjob-idL'adattatore finisce
e contiene i pesi LoRa (), la configurazione PEFT (OutputDir/AdapterName/adapter_model.safetensors), i metadati di addestramento e i file tokenizer.adapter_config.json -
Installa lo stack di inferenza principale sul tuo computer locale:
pip install torch transformers peftGli strumenti di chat caricano l'intero modello base, quindi la tua macchina ha bisogno di risorse sufficienti per eseguirlo. Una GPU è opzionale: su una GPU NVIDIA, l'impostazione predefinita di pip CUDA-enabled PyTorch gestisce l'accelerazione; su un Mac Apple Silicon, utilizza PyTorch automaticamente Metal (MPS) e CPU-only funziona ma è lenta (circa 30 secondi per risposta per un modello da 1,5 B).
-
Prova l'adattatore con lo strumento di chat interattivo incluso:
python3 inference/chat.py --adapter-path/path/to/downloaded/my-adapterLo strumento carica l'adattatore sopra il modello base e fornisce un REPL in cui è possibile porre domande e confrontarlo con il modello base per verificare che la messa a punto abbia funzionato.
-
Per un'interfaccia utente web più adatta alle demo con bolle di chat nel browser, installa Gradio ed esegui lo strumento di chat web:
pip install gradio python3 inference/gradio_chat.py --adapter-path/path/to/downloaded/my-adapter
Per i dettagli su entrambi gli strumenti e sul caricamento programmatico dell'adattatore con PEFT, consulta il file README degli strumenti di inferenza su. GitHub
Suggerimenti
-
La perdita dovrebbe diminuire in modo monotono. In caso contrario, riduci il tasso di apprendimento (prova).
1e-4 -
Pressione della memoria:
PerDeviceBatchSizeabbassala (prova 1 o 2) e aumentaGradAccumStepsper mantenere costante la dimensione effettiva del batch. -
Il trasferimento dello stile e la memorizzazione dei fatti sono diversi: il trasferimento di stile spesso funziona con 3-5 epoche e circa 50-200 campioni. La memorizzazione dei fatti richiede 8-15 epoche e più campioni per fatto (5—8 frasi).
-
Modelli controllati: se riposizionate il pacchetto in base a un modello controllato come Llama o Gemma aggiungendolo al parametro del parametro, impostate il parametro.
allowedValuesBaseModelHuggingFaceTokenPer la produzione, preferite impostarlaHF_TOKENcome variabile di ambiente sulla coda stessa piuttosto che passarla come parametro. -
Model cache: il bundle utilizza,
/mnt/persistent/hf_cacheper impostazione predefinita, il volume persistente del lavoratore. La cache conserva i modelli di base tra i lavori, quindi le esecuzioni successive sono molto più veloci.
Eliminazione
Per evitare addebiti continui, pulisci le risorse che hai creato per questo tutorial:
Per ripulire le risorse del tutorial
-
Se hai creato una flotta di GPU appositamente per questo tutorial, interrompila o eliminala. Se hai utilizzato un parco veicoli condiviso preesistente, lascialo al suo posto.
-
Se hai aggiunto la
ReadFineTuningDatasetspolicy al tuo ruolo di coda e non ne hai più bisogno, rimuovila:QUEUE_ROLE=$(aws deadline get-queue --farm-idFARM-ID--queue-idQUEUE-ID\ --query 'roleArn' --output text | awk -F/ '{print $NF}') aws iam delete-role-policy \ --role-name "$QUEUE_ROLE" \ --policy-name ReadFineTuningDatasets -
Rimuovi i file di output locali se non ti servono più.
Risorse correlate
Le seguenti risorse forniscono informazioni aggiuntive: