Μοντέλα και πλατφόρμες AI

Η Μονάδικη Οδηγία που Χρειάζεστε για την Λειτουργία του Llama 3 ή Οποιουδήποτε Άλλου Ανοικτού Μοντέλου

mm
Προσθέστε το Unite.AI στις προτιμώμενες πηγές σας στο Google

Η λειτουργία μεγάλων γλωσσικών μοντέλων (LLMs) όπως το Llama 3 περιλαμβάνει την προσαρμογή ενός προ-εκπαιδευμένου μοντέλου σε συγκεκριμένες εργασίες χρησιμοποιώντας ένα σύνολο δεδομένων ειδικών για το domaine. Αυτή η διαδικασία αξιοποιεί τις προϋπάρχουσες γνώσεις του μοντέλου, καθιστώντας την αποτελεσματική και οικονομική σε σύγκριση με την εκπαίδευση από την αρχή. Σε αυτόν τον οδηγό, θα περπατήσουμε τα βήματα για την λειτουργία του Llama 3 χρησιμοποιώντας QLoRA (Quantized LoRA), μια μέθοδο που ελαχιστοποιεί τη χρήση μνήμης και τους υπολογιστικούς κόστους.

Επισκόπηση της Λειτουργίας

Η λειτουργία περιλαμβάνει plusieurs κρίσιμα βήματα:

  1. Επιλογή Προ-Εκπαιδευμένου Μοντέλου: Επιλέξτε ένα βασικό μοντέλο που ταιριάζει με την επιθυμητή αρχιτεκτονική.
  2. Συλλογή και Προεπεξεργασία Δεδομένων: Συλλέξτε και προεπεξεργαστείτε ένα σύνολο δεδομένων ειδικών για την εργασία.
  3. Λειτουργία: Προσαρμόστε το μοντέλο χρησιμοποιώντας το σύνολο δεδομένων για να βελτιώσετε την απόδοσή του σε συγκεκριμένες εργασίες.
  4. Αξιολόγηση: Αξιολογήστε την απόδοση του μοντέλου χρησιμοποιώντας ποιοτικές και ποσοτικές μετρήσεις.

Εννοιες και Τεχνικές

Λειτουργία Μεγάλων Γλωσσικών Μοντέλων

Λειτουργία Μεγάλων Γλωσσικών Μοντέλων

Πλήρης Λειτουργία

Πλήρης λειτουργία ενημερώνει όλα τα παράμετρα του μοντέλου, καθιστώντας το ειδικό για την νέα εργασία. Αυτή η μέθοδος απαιτεί σημαντικούς υπολογιστικούς πόρους και είναι συχνά μη πρακτική για πολύ μεγάλα μοντέλα.

Λειτουργία με Αποτελεσματικότητα Παραμέτρων (PEFT)

PEFT ενημερώνει μόνο ένα υποσύνολο των παραμέτρων του μοντέλου, μειώνοντας τις απαιτήσεις μνήμης και υπολογιστικών κόστων. Αυτή η τεχνική αποτρέπει την καταστροφική λήθη και διατηρεί τις γενικές γνώσεις του μοντέλου.

Λειτουργία με Χαμηλό Ρανκ (LoRA) και Quantized LoRA (QLoRA)

LoRA λειτουργεί μόνο με quelques χαμηλού ρανκ πίνακες, ενώ QLoRA quantizes αυτούς τους πίνακες για να μειώσει περαιτέρω την αποτύπωση μνήμης.

Μέθοδοι Λειτουργίας

  1. Πλήρης Λειτουργία: Αυτή η μέθοδος περιλαμβάνει την εκπαίδευση όλων των παραμέτρων του μοντέλου στο σύνολο δεδομένων της εργασίας. Αν και αυτή η μέθοδος μπορεί να είναι πολύ αποτελεσματική, είναι επίσης υπολογιστικά ακριβή και απαιτεί σημαντική μνήμη.
  2. Λειτουργία με Αποτελεσματικότητα Παραμέτρων (PEFT): PEFT ενημερώνει μόνο ένα υποσύνολο των παραμέτρων του μοντέλου, καθιστώντας την πιο αποδοτική σε μνήμη. Τεχνικές όπως LoRA και QLoRA ανήκουν σε αυτήν την κατηγορία.

Τι είναι LoRA;

Σύγκριση μεθόδων λειτουργίας: QLORA βελτιώνει LoRA με quantization 4-bit και paged optimizers για διαχείριση σπίκης μνήμης

Σύγκριση μεθόδων λειτουργίας: QLORA βελτιώνει LoRA με quantization 4-bit και paged optimizers για διαχείριση σπίκης μνήμης

LoRA είναι μια βελτιωμένη μέθοδος λειτουργίας όπου, αντί να λειτουργήσετε όλα τα βάρη του προ-εκπαιδευμένου μοντέλου, δύο μικρότεροι πίνακες που προσεγγίζουν τον μεγαλύτερο πίνακα λειτουργούνται. Αυτοί οι πίνακες αποτελούν τον προσαρμογέα LoRA. Αυτός ο προσαρμογέας λειτουργίας φορτώνεται στο προ-εκπαιδευμένο μοντέλο και χρησιμοποιείται για inference.

Κλειδιά Πλεονεκτήματα του LoRA:

  • Αποδοτικότητα Μνήμης: LoRA μειώνει την αποτύπωση μνήμης λειτουργώντας μόνο μικρούς πίνακες αντί του ολόκληρου μοντέλου.
  • Επανάχρηση: Το αρχικό μοντέλο παραμένει αμετάβλητο, και πολλοί προσαρμογείς LoRA μπορούν να χρησιμοποιηθούν με αυτό, διευκολύνοντας την αντιμετώπιση πολλών εργασιών με χαμηλότερες απαιτήσεις μνήμης.

Τι είναι Quantized LoRA (QLoRA);

QLoRA λαμβάνει LoRA ένα βήμα παραπέρα, quantizing τα βάρη των προσαρμογέων LoRA σε χαμηλότερη ακρίβεια (π.χ. 4-bit αντί 8-bit). Αυτό μειώνει περαιτέρω τη χρήση μνήμης και τις απαιτήσεις αποθήκευσης ενώ διατηρεί ένα συγκρίσιμο επίπεδο αποτελεσματικότητας.

Κλειδιά Πλεονεκτήματα του QLoRA:

  • Ακόμα Μεγαλύτερη Αποδοτικότητα Μνήμης: Με την quantization των βαρών, QLoRA μειώνει σημαντικά τις απαιτήσεις μνήμης και αποθήκευσης του μοντέλου.
  • Διατήρηση Απόδοσης: Παρά την μειωμένη ακρίβεια, QLoRA διατηρεί επίπεδα απόδοσης κοντά σε αυτά των μοντέλων πλήρης ακρίβειας.

Εργασίες-Ειδική Προσαρμογή

Κατά τη διάρκεια της λειτουργίας, οι παράμετροι του μοντέλου điều chỉnhονται με βάση το νέο σύνολο δεδομένων, βοηθώντας το να κατανοήσει και να παράγει περιεχόμενο σχετικό με την συγκεκριμένη εργασία. Αυτή η διαδικασία διατηρεί τις γενικές γνώσεις γλώσσας που κερδίζονται κατά τη διάρκεια της προ-εκπαίδευσης ενώ προσαρμόζει το μοντέλο στις ιδιαιτερότητες του στόχου domaine.

Λειτουργία στην Πραγματικότητα

Πλήρης Λειτουργία vs. PEFT

  • Πλήρης Λειτουργία: Περιλαμβάνει την εκπαίδευση του ολόκληρου μοντέλου, που μπορεί να είναι υπολογιστικά ακριβή και απαιτεί σημαντική μνήμη.
  • PEFT (LoRA και QLoRA): Λειτουργεί μόνο ένα υποσύνολο παραμέτρων, μειώνοντας τις απαιτήσεις μνήμης και προλαμβάνοντας την καταστροφική λήθη, καθιστώντας την μια πιο αποτελεσματική εναλλακτική.

Βήματα Υλοποίησης

  1. Ρύθμιση Περιβάλλοντος: Εγκαταστήστε τις απαραίτητες βιβλιοθήκες και ρυθμίστε το περιβάλλον υπολογισμού.
  2. Φόρτωση και Προεπεξεργασία Δεδομένων: Φορτώστε το σύνολο δεδομένων και προεπεξεργαστείτε το σε μορφή κατάλληλη για το μοντέλο.
  3. Φόρτωση Προ-Εκπαιδευμένου Μοντέλου: Φορτώστε το βασικό μοντέλο με ρυθμίσεις quantization εάν χρησιμοποιείτε QLoRA.
  4. Τokenization: Tokenize το σύνολο δεδομένων για να το προετοιμάσετε για εκπαίδευση.
  5. Εκπαίδευση: Λειτουργήστε το μοντέλο χρησιμοποιώντας το προετοιμασμένο σύνολο δεδομένων.
  6. Αξιολόγηση: Αξιολογήστε την απόδοση του μοντέλου σε συγκεκριμένες εργασίες χρησιμοποιώντας ποιοτικές και ποσοτικές μετρήσεις.

Βήμα-προς-Βήμα Οδηγός για την Λειτουργία του LLM

Ρύθμιση του Περιβάλλοντος

Θα χρησιμοποιήσουμε ένα Jupyter notebook για αυτόν τον οδηγό. Πλατφόρμες όπως το Kaggle, που προσφέρουν δωρεάν χρήση GPU, ή το Google Colab είναι ιδανικά για την εκτέλεση αυτών των πειραμάτων.

1. Εγκατάσταση Απαραίτητων Βιβλιοθηκών

Πρώτα, βεβαιωθείτε ότι έχετε εγκαταστήσει τις απαραίτητες βιβλιοθήκες:

!pip install -qqq -U bitsandbytes transformers peft accelerate datasets scipy einops evaluate trl rouge_score

2. Εισαγωγή Βιβλιοθηκών και Ρύθμιση Περιβάλλοντος

import os
import torch
from datasets import load_dataset
from transformers import (
AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments,
pipeline, HfArgumentParser
)
from trl import ORPOConfig, ORPOTrainer, setup_chat_format, SFTTrainer
from tqdm import tqdm
import gc
import pandas as pd
import numpy as np
from huggingface_hub import interpreter_login

# Απενεργοποίηση καταγραφής Weights and Biases
os.environ['WANDB_DISABLED'] = "true"
interpreter_login()

3. Φόρτωση Δεδομένων

Θα χρησιμοποιήσουμε το σύνολο δεδομένων DialogSum για αυτόν τον οδηγό:

dataset_name = "neil-code/dialogsum-test"
dataset = load_dataset(dataset_name)

4. Δημιουργία Ρύθμισης BitsAndBytes

Για να φορτώσετε το μοντέλο σε μορφή 4-bit:

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,
)

5. Φόρτωση Προ-Εκπαιδευμένου Μοντέλου

Χρησιμοποιώντας το μοντέλο Phi-2 της Microsoft (MSFT ) για αυτόν τον οδηγό:

model_name = 'microsoft/phi-2'
device_map = {"": 0}
original_model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map=device_map,
quantization_config=bnb_config,
trust_remote_code=True,
use_auth_token=True
)

6. Tokenization

Ρύθμιση του tokenizer:

tokenizer = AutoTokenizer.from_pretrained(
model_name,
trust_remote_code=True,
padding_side="left",
add_eos_token=True,
add_bos_token=True,
use_fast=False
)
tokenizer.pad_token = tokenizer.eos_token

Λειτουργία του Llama 3 ή Άλλων Μοντέλων

Όταν λειτουργείτε μοντέλα όπως το Llama 3 ή άλλα state-of-the-art ανοικτά μοντέλα LLM, υπάρχουν συγκεκριμένες σκέψεις και ρυθμίσεις που απαιτούνται για να εξασφαλιστεί η βέλτιστη απόδοση. Εδώ είναι οι λεπτομερείς βήματα και οι εponderations για το πώς να προσεγγίσετε αυτό για διαφορετικά μοντέλα, συμπεριλαμβανομένου του Llama 3, GPT-3 και Mistral.

5.1 Χρήση Llama 3

Επιλογή Μοντέλου:

  • Βεβαιωθείτε ότι έχετε το σωστό αναγνωριστικό μοντέλου από το hub μοντέλων Hugging Face. Για παράδειγμα, το μοντέλο Llama 3 μπορεί να αναγνωριστεί ως meta-llama/Meta-Llama-3-8B στο Hugging Face.
  • Βεβαιωθείτε ότι ζητήσατε πρόσβαση και συνδεθήκατε στο λογαριασμό σας Hugging Face εάν απαιτείται για μοντέλα όπως το Llama 3.

Tokenization:

  • Χρησιμοποιήστε τον κατάλληλο tokenizer για το Llama 3, βεβαιωθείτε ότι είναι συμβατός με το μοντέλο και υποστηρίζει απαραίτητες λειτουργίες όπως padding και ειδικοί token.

Μνήμη και Υπολογισμοί:

  • Η λειτουργία μεγάλων μοντέλων όπως το Llama 3 απαιτεί σημαντικούς υπολογιστικούς πόρους. Βεβαιωθείτε ότι το περιβάλλον σας, όπως μια ισχυρή ρύθμιση GPU, μπορεί να χειριστεί τις απαιτήσεις μνήμης και επεξεργασίας. Βεβαιωθείτε ότι το περιβάλλον μπορεί να χειριστεί τις απαιτήσεις μνήμης, οι οποίες μπορούν να μετριαστούν με την использовασία τεχνικών όπως QLoRA για να μειώσουν την αποτύπωση μνήμης.

Παράδειγμα:

model_name = 'meta-llama/Meta-Llama-3-8B'
device_map = {"": 0}
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True,
)
original_model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map=device_map,
quantization_config=bnb_config,
trust_remote_code=True,
use_auth_token=True
)

5.2 Χρήση Άλλων Δημοφιλών Μοντέλων (π.χ. GPT-3, Mistral)

Επιλογή Μοντέλου:

  • Για μοντέλα όπως GPT-3 και Mistral, βεβαιωθείτε ότι χρησιμοποιείτε το σωστό όνομα και αναγνωριστικό μοντέλου από το hub μοντέλων Hugging Face ή άλλες πηγές.

Tokenization:

  • Παρόμοια με το Llama 3, βεβαιωθείτε ότι ο tokenizer είναι σωστά ρυθμισμένος και συμβατός με το μοντέλο.

Μνήμη και Υπολογισμοί:

  • Κάθε μοντέλο μπορεί να έχει διαφορετικές απαιτήσεις μνήμης. Ρυθμίστε την ρύθμιση του περιβάλλοντος σας ανάλογα.

7. Δοκιμή του Μοντέλου με Zero-Shot Inferencing

Αξιολογήστε το βασικό μοντέλο με ένα δείγμα εισόδου:

from transformers import set_seed

set_seed(42)
index = 10
prompt = dataset['test'][index]['dialogue']
formatted_prompt = f"Instruct: Summarize the following conversation.\n{prompt}\nOutput:\n"

# Γεννήστε έξοδο
def gen(model, prompt, max_length):
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_length=max_length)
return tokenizer.batch_decode(outputs, skip_special_tokens=True)

res = gen(original_model, formatted_prompt, 100)
output = res[0].split('Output:\n')[1]

print(f'INPUT PROMPT:\n{formatted_prompt}')
print(f'MODEL GENERATION - ZERO SHOT:\n{output}')

8. Προεπεξεργασία Δεδομένων

Μετατρέψτε ζευγάρια διαλόγου-περίληψης σε προτροπές:

def create_prompt_formats(sample):
blurb = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
instruction = "### Instruct: Summarize the below conversation."
input_context = sample['dialogue']
response = f"### Output:\n{sample['summary']}"
end = "### End"

parts = [blurb, instruction, input_context, response, end]
formatted_prompt = "\n\n".join(parts)
sample["text"] = formatted_prompt
return sample

dataset = dataset.map(create_prompt_formats)

Tokenize το διαμορφωμένο σύνολο δεδομένων:

def preprocess_batch(batch, tokenizer, max_length):
return tokenizer(batch["text"], max_length=max_length, truncation=True)

max_length = 1024
train_dataset = dataset["train"].map(lambda batch: preprocess_batch(batch, tokenizer, max_length), batched=True)
eval_dataset = dataset["validation"].map(lambda batch: preprocess_batch(batch, tokenizer, max_length), batched=True)

Υπερπαράμετροι και Επίδρασή τους

Οι υπερπαράμετροι παίζουν κρίσιμο ρόλο στην βελτίωση της απόδοσης του μοντέλου σας. Εδώ είναι einige κρίσιμες υπερπαράμετροι που πρέπει να λάβετε υπόψη:

  1. Ρυθμός Μάθησης: Ελέγχει την ταχύτητα με την οποία το μοντέλο ενημερώνει τις παραμέτρους του. Ένας υψηλός ρυθμός μάθησης μπορεί να οδηγήσει σε ταχύτερη σύγκλιση αλλά μπορεί να ξεπεράσει την ιδανική λύση. Ένας χαμηλός ρυθμός μάθησης εξασφαλίζει σταθερή σύγκλιση αλλά μπορεί να απαιτήσει περισσότερες εποχές.
  2. Μέγεθος Μπατσ: Ο αριθμός των δειγμάτων που επεξεργάζονται πριν το μοντέλο ενημερώσει τις παραμέτρους του. Μεγαλύτερα μεγέθη μπατσ μπορούν να βελτιώσουν τη σταθερότητα αλλά απαιτούν περισσότερη μνήμη. Μικρότερα μεγέθη μπατσ μπορεί να οδηγήσουν σε περισσότερο θόρυβο στη διαδικασία εκπαίδευσης.
  3. Βήματα Συγκέντρωσης Gradient: Αυτή η παράμετρος βοηθά στην προσομοίωση μεγαλύτερων μεγεθών μπατσ συσσωρευώντας gradient σε πολλά βήματα πριν από την ενημέρωση των παραμέτρων.
  4. Αριθμός Εποχών: Ο αριθμός των φορών που το σύνολο δεδομένων διέρχεται από το μοντέλο. Περισσότερες εποχές μπορούν να βελτιώσουν την απόδοση αλλά μπορεί να οδηγήσουν σε υπερ-προσαρμογή εάν δεν διαχειριστούνται σωστά.
  5. Λήθη Βαρών: Τεχνική κανονικοποίησης για την αποφυγή υπερ-προσαρμογής με την επιβολή ποινής σε μεγάλους συντελεστές.
  6. Ρυθμός Μάθησης Προγραμματιστής: Điều chỉnh τον ρυθμό μάθησης κατά τη διάρκεια της εκπαίδευσης για να βελτιώσει την απόδοση και τη σύγκλιση.

Προσαρμόστε τη ρύθμιση εκπαίδευσης調整οντας υπερπαράμετροι όπως ο ρυθμός μάθησης, το μέγεθος μπατσ και τα βήματα συσσώρευσης gradient με βάση τις συγκεκριμένες απαιτήσεις του μοντέλου και της εργασίας. Για παράδειγμα, τα μοντέλα Llama 3 μπορεί να απαιτούν διαφορετικούς ρυθμούς μάθησης σε σύγκριση με μικρότερα μοντέλα.

Παράδειγμα Ρύθμισης Εκπαίδευσης

orpo_args = ORPOConfig(
learning_rate=8e-6,
lr_scheduler_type="linear",max_length=1024,max_prompt_length=512,
beta=0.1,per_device_train_batch_size=2,per_device_eval_batch_size=2,
gradient_accumulation_steps=4,optim="paged_adamw_8bit",num_train_epochs=1,
evaluation_strategy="steps",eval_steps=0.2,logging_steps=1,warmup_steps=10,
report_to="wandb",output_dir="./results/",
)

10. Εκπαίδευση του Μοντέλου

Ρύθμιση του εκπαιδευτή και εκκίνηση εκπαίδευσης:

trainer = ORPOTrainer(
model=original_model,
args=orpo_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
tokenizer=tokenizer,
)
trainer.train()
trainer.save_model("fine-tuned-llama-3")

Αξιολόγηση του Μοντέλου

Μετά την εκπαίδευση, αξιολογήστε την απόδοση του μοντέλου χρησιμοποιώντας ποιοτικές και ποσοτικές μεθόδους.

1. Ανθρώπινη Αξιολόγηση

Συγκρίνετε τις γεννημένες περίληψεις με ανθρώπινες για να αξιολογήσετε την ποιότητα.

2. Ποσοτική Αξιολόγηση

Χρησιμοποιήστε μετρικές όπως ROUGE για να αξιολογήσετε την απόδοση:

from rouge_score import rouge_scorer

scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True)
scores = scorer.score(reference_summary, generated_summary)
print(scores)

Κοινές Προκλήσεις και Λύσεις

1. Περιορισμοί Μνήμης

Η χρήση QLoRA βοηθά να μετριάσει τα προβλήματα μνήμης quantizing τα βάρη του μοντέλου σε 4-bit. Βεβαιωθείτε ότι έχετε đủ μνήμη GPU για να χειριστείτε το μέγεθος μπατσ και το μέγεθος του μοντέλου.

2. Υπερ-Προσαρμογή

Παρακολουθήστε τις μετρικές επαλήθευσης για να αποφύγετε την υπερ-προσαρμογή. Χρησιμοποιήστε τεχνικές όπως η πρώιμη διακοπή και η λήθη βαρών.

3. Αργή Εκπαίδευση

Βελτιώστε την ταχύτητα εκπαίδευσης調整οντας το μέγεθος μπατς, τον ρυθμό μάθησης και χρησιμοποιώντας βήματα συσσώρευσης gradient.

4. Ποιότητα Δεδομένων

Βεβαιωθείτε ότι το σύνολο δεδομένων σας είναι καθαρό και καλά προεπεξεργασμένο. Κακή ποιότητα δεδομένων μπορεί να επηρεάσει σημαντικά την απόδοση του μοντέλου.

Συμπέρασμα

Η λειτουργία μεγάλων γλωσσικών μοντέλων χρησιμοποιώντας QLoRA είναι ένας αποτελεσματικός τρόπος για να προσαρμόσετε μεγάλα προ-εκπαιδευμένα μοντέλα σε συγκεκριμένες εργασίες με μειωμένους υπολογιστικούς κόστους. Ακολουθώντας αυτόν τον οδηγό, μπορείτε να λειτουργήσετε το PHI, Llama 3 ή οποιοδήποτε άλλο ανοικτό μοντέλο για να επιτύχετε υψηλή απόδοση στις συγκεκριμένες εργασίες σας.

Έχω περάσει τα τελευταία πέντε χρόνια βυθισμένος στον συναρπαστικό κόσμο της Μηχανικής Μάθησης και του Βαθιάς Μάθησης. Η δέσμευσή μου και η εξειδίκευσή μου με οδήγησαν να συμβάλλω σε πάνω από 50 διαφορετικά projects μηχανικής λογισμικού, με ιδιαίτερη έμφαση στο AI/ML. Η συνεχής περιέργειά μου με έχει οδηγήσει επίσης προς την Επεξεργασία Φυσικής Γλώσσας, ένα πεδίο που είμαι πρόθυμος να εξερευνήσω περαιτέρω.