Jak dostosować model Llama 3.2 3B Instruct do zadań związanych z kodowaniem?
Dostosowywanie dużych modeli językowych do specyficznych zadań, takich jak generowanie kodu, może znacząco zwiększyć ich użyteczność. W tym przewodniku przeprowadzimy Cię przez proces konfiguracji i dostrajania modelu Llama 3.2 3B Instruct przy użyciu specjalnie przygotowanego zbioru danych w języku Python. Po zakończeniu tej instrukcji będziesz lepiej rozumieć, jak dostosować duże modele językowe do zadań związanych z kodowaniem oraz jak efektywnie wykorzystać narzędzia takie jak Unsloth do dostrajania modeli.
Instalacja niezbędnych zależności
Aby rozpocząć, musimy zainstalować kilka kluczowych bibliotek, które pomogą nam w dalszym procesie dostrajania modelu. Wykonaj poniższe polecenia w środowisku Google Colab lub na swoim serwerze:
python
!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install "git+https://github.com/huggingface/transformers.git"
!pip install -U trl
!pip install --no-deps trl peft accelerate bitsandbytes
!pip install torch torchvision torchaudio triton
!pip install xformers
!python -m xformers.info
!python -m bitsandbytes
Te komendy instalują oraz aktualizują wszystkie niezbędne biblioteki, w tym Unsloth, Transformers oraz xFormers, które są wymagane do dostrajania modelu Llama 3.2 3B Instruct. Ostatnie dwie linie służą do sprawdzenia, czy instalacja przebiegła pomyślnie.
Importowanie niezbędnych bibliotek
Kolejnym krokiem jest zaimportowanie odpowiednich modułów, które umożliwią nam pracę nad modelem:
python
from unsloth import FastLanguageModel
from trl import SFTTrainer
from transformers import TrainingArguments
import torch
from datasets import load_dataset
Dzięki tym importom będziemy mogli efektywnie trenować i dostosowywać model do naszych potrzeb. Dodatkowo, wykorzystujemy funkcję load_dataset
dostarczaną przez Hugging Face, aby załadować zbiór danych w języku Python.
Załadowanie zbioru danych
W tym kroku definiujemy długość sekwencji oraz pobieramy przygotowany wcześniej zbiór danych z Hugging Face:
python
max_seq_length = 2048
dataset = load_dataset("user/Llama-3.2-Python-Alpaca-143k", split="train")
Maksymalna długość sekwencji wynosi 2048 tokenów, co pozwala modelowi na analizowanie dłuższych fragmentów kodu. Pamiętaj, że zbiór danych musi być dostępny na Twoim koncie Hugging Face, aby możliwe było jego załadowanie.
Inicjalizacja modelu Llama 3.2 3B
Teraz możemy załadować model Llama 3.2 3B Instruct w formacie 4-bitowym, co pozwala na zmniejszenie zużycia pamięci:
python
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/Llama-3.2-3B-Instruct-bnb-4bit",
max_seq_length = max_seq_length,
dtype = None,
load_in_4bit = True
)
Dzięki użyciu 4-bitowej kwantyzacji zmniejszamy wymagania dotyczące pamięci, co pozwala na efektywniejsze trenowanie modelu.
Konfiguracja LoRA przy użyciu Unsloth
Aby jeszcze bardziej zoptymalizować proces dostrajania, zastosujemy technikę LoRA (Low-Rank Adaptation):
python
model = FastLanguageModel.get_peft_model(
model,
r = 16,
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"],
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth",
random_state = 3407,
use_rslora = False,
loftq_config = None,
max_seq_length = max_seq_length
)
LoRA pozwala na bardziej efektywne dostosowanie modelu, zmniejszając liczbę trenowanych parametrów i poprawiając wykorzystanie pamięci. W konfiguracji ustawiamy PLACEHOLDERcfa875e51409fb25 na PLACEHOLDER1423fdfa602e9cb4, co dodatkowo optymalizuje pamięć VRAM.
Montowanie Google Drive
Aby zapisać efekty naszego treningu, możemy podłączyć Google Drive:
python
from google.colab import drive
drive.mount("/content/drive")
Dzięki temu będziemy mogli zapisywać model i checkpointy bezpośrednio w chmurze.
Konfiguracja treningu i uruchomienie pętli szkoleniowej
Teraz definiujemy parametry treningowe i uruchamiamy proces dostrajania:
python
trainer = SFTTrainer(
model = model,
train_dataset = dataset,
dataset_text_field = "text",
max_seq_length = max_seq_length,
tokenizer = tokenizer,
args = TrainingArguments(
per_device_train_batch_size = 2,
gradient_accumulation_steps = 4,
warmup_steps = 10,
max_steps = 60,
learning_rate = 2e-4,
fp16 = not torch.cuda.is_bf16_supported(),
bf16 = torch.cuda.is_bf16_supported(),
logging_steps = 1,
optim = "adamw_8bit",
weight_decay = 0.01,
lr_scheduler_type = "linear",
seed = 3407,
output_dir = "/content/drive/My Drive/Llama-3.2-3B-Instruct-bnb-4bit"
),
)
trainer.train()
Tutaj ustawiamy m.in. liczbę kroków maksymalnych (PLACEHOLDER11868b55feb40162), rozmiar batcha (PLACEHOLDERd4c54cb28559f52d), oraz schemat optymalizacji (PLACEHOLDER70c38ee152433caf). Wartość PLACEHOLDERb3d5ed3c896ac53c wskazuje miejsce, gdzie zostaną zapisane wyniki.
Zapisywanie dostrojonego modelu
Po zakończeniu treningu możemy zapisać model i jego tokenizer:
python
model.save_pretrained("lora_model")
tokenizer.save_pretrained("lora_model")
Dzięki temu nie będziesz musiał ponownie trenować modelu przy każdym uruchomieniu.
Podsumowanie
W tym przewodniku omówiliśmy krok po kroku, jak dostroić model Llama 3.2 3B Instruct do zadań związanych z generowaniem kodu w języku Python. Wykorzystaliśmy do tego celu Unsloth, technikę LoRA, a także zastosowaliśmy optymalizację przy użyciu 4-bitowej kwantyzacji. Takie podejście pozwala na znaczną oszczędność pamięci, jednocześnie poprawiając wydajność modelu w zadaniach związanych z kodowaniem.
Dzięki tym narzędziom możesz teraz dostosować model Llama 3.2 3B Instruct do własnych potrzeb, trenując go na różnych zbiorach danych i optymalizując pod konkretne zadania. Jeśli pracujesz nad projektami AI związanymi z kodowaniem, to podejście pomoże Ci osiągnąć lepsze rezultaty w generowaniu i analizie kodu źródłowego.