Šiame vadove mes parodome, kaip efektyviai sureguliuoti „LLAMA-2 7B“ pokalbių modelį, skirtą „Python“ kodo generavimui, naudojant pažangias technikas, tokias kaip „Qlora“, „Gradient“ patikrinimo taškas ir prižiūrimas tikslinimas su „SftTrainer“. Pasinaudoję „Alpaca-14k“ duomenų rinkiniu, mes einame kurdami aplinką, konfigūruojant LORA parametrus ir pritaikome atminties optimizavimo strategijas, kad išmokytume modelį, kuris išsiskiria kuriant aukštos kokybės „Python“ kodą. Šis žingsnis po žingsnio vadovas yra skirtas specialistams, siekiantiems panaudoti LLM galią su minimaliomis skaičiavimo pridėtinėmis išlaidomis.
!pip install -q accelerate
!pip install -q peft
!pip install -q transformers
!pip install -q trl
Pirmiausia įdiekite reikiamas mūsų projekto bibliotekas. Jie apima „Accelerate“, „PEFT“, „Transformeriai“ ir „TRL“ iš „Python“ paketo rodyklės. -Q vėliava (tylusis režimas) išlaiko išėjimo minimalų.
import os
from datasets import load_dataset
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
HfArgumentParser,
TrainingArguments,
pipeline,
logging,
)
from peft import LoraConfig, PeftModel
from trl import SFTTrainer
Importuokite pagrindinius mūsų mokymo sąrankos modulius. Jie apima komunalines paslaugas duomenų rinkiniui, modeliui/tokenizatoriui, mokymo argumentams, registravimui, „Lora Configuration“ ir „SftTrainer“.
# The model to train from the Hugging Face hub
model_name = "NousResearch/llama-2-7b-chat-hf"
# The instruction dataset to use
dataset_name = "user/minipython-Alpaca-14k"
# Fine-tuned model name
new_model = "/kaggle/working/llama-2-7b-codeAlpaca"
Pagrindinį modelį nurodome iš apkabinimo veido stebulės, instrukcijų duomenų rinkinio ir naujojo modelio pavadinimo.
# QLoRA parameters
# LoRA attention dimension
lora_r = 64
# Alpha parameter for LoRA scaling
lora_alpha = 16
# Dropout probability for LoRA layers
lora_dropout = 0.1
Apibrėžkite mūsų modelio LORA parametrus. „LORA_R“ nustato „Lora“ dėmesio matmenį, `lora_alpha` mastelio lora atnaujinimus ir„ lora_dropout “kontroliuoja„ Mopout “tikimybę.
# TrainingArguments parameters
# Output directory where the model predictions and checkpoints will be stored
output_dir = "/kaggle/working/llama-2-7b-codeAlpaca"
# Number of training epochs
num_train_epochs = 1
# Enable fp16 training (set to True for mixed precision training)
fp16 = True
# Batch size per GPU for training
per_device_train_batch_size = 8
# Batch size per GPU for evaluation
per_device_eval_batch_size = 8
# Number of update steps to accumulate the gradients for
gradient_accumulation_steps = 2
# Enable gradient checkpointing
gradient_checkpointing = True
# Maximum gradient norm (gradient clipping)
max_grad_norm = 0.3
# Initial learning rate (AdamW optimizer)
learning_rate = 2e-4
# Weight decay to apply to all layers except bias/LayerNorm weights
weight_decay = 0.001
# Optimizer to use
optim = "adamw_torch"
# Learning rate schedule
lr_scheduler_type = "constant"
# Group sequences into batches with the same length
# Saves memory and speeds up training considerably
group_by_length = True
# Ratio of steps for a linear warmup
warmup_ratio = 0.03
# Save checkpoint every X updates steps
save_steps = 100
# Log every X updates steps
logging_steps = 10
Šie parametrai sukonfigūruoja mokymo procesą. Tai apima išvesties kelius, epochų skaičių, tikslumą (FP16), partijų dydžius, gradientų kaupimąsi ir tikrinimo tašką. Papildomi parametrai, tokie kaip mokymosi greitis, optimizatorius ir planavimas, padeda tiksliai suderinti treniruotes. Apšilę ir registravimo parametrus kontroliuoja, kaip modelis pradeda mokytis ir kaip mes stebime progresą.
import torch
print("PyTorch Version:", torch.__version__)
print("CUDA Version:", torch.version.cuda)
Importuoti „Pytorch“ ir atsispausdinkite ir įdiegtą „Pytorch“ versiją, ir atitinkamą „Cuda“ versiją.
Ši komanda rodo GPU informaciją, įskaitant tvarkyklės versiją, CUDA versiją ir dabartinį GPU naudojimą.
# SFT parameters
# Maximum sequence length to use
max_seq_length = None
# Pack multiple short examples in the same input sequence to increase efficiency
packing = False
# Load the entire model on the GPU 0
device_map = {"": 0}
Apibrėžkite SFT parametrus, tokius kaip maksimalus sekos ilgis, nesvarbu, ar būtų galima supakuoti kelis pavyzdžius, ir viso modelio žemėlapį iki GPU 0.
# SFT parameters
# Maximum sequence length to use
max_seq_length = None
# Pack multiple short examples in the same input sequence to increase efficiency
packing = False
# Load dataset
dataset = load_dataset(dataset_name, split="train")
# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
# Load base model with 8-bit quantization
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto",
)
# Prepare model for training
model.gradient_checkpointing_enable()
model.enable_input_require_grads()
Nustatykite papildomus SFT parametrus ir įkelkite mūsų duomenų rinkinį ir tokenizatorių. Mes sukonfigūruojame „Tokenizer“ paminkštinimo ženklus ir įkeliame bazinį modelį su 8 bitų kiekybiniu. Galiausiai įgaliname gradiento patikrinimo tašką ir užtikriname, kad modeliui reikia mokymo įvesties gradientų.
from peft import get_peft_model
Importuokite „get_peft_model“ funkciją, kuri taiko parametrų efektyvų derinimą (PEFT) mūsų baziniam modeliui.
# Load LoRA configuration
peft_config = LoraConfig(
lora_alpha=lora_alpha,
lora_dropout=lora_dropout,
r=lora_r,
bias="none",
task_type="CAUSAL_LM",
)
# Apply LoRA to the model
model = get_peft_model(model, peft_config)
# Set training parameters
training_arguments = TrainingArguments(
output_dir=output_dir,
num_train_epochs=num_train_epochs,
per_device_train_batch_size=per_device_train_batch_size,
gradient_accumulation_steps=gradient_accumulation_steps,
optim=optim,
save_steps=save_steps,
logging_steps=logging_steps,
learning_rate=learning_rate,
weight_decay=weight_decay,
fp16=fp16,
max_grad_norm=max_grad_norm,
warmup_ratio=warmup_ratio,
group_by_length=True,
lr_scheduler_type=lr_scheduler_type,
)
# Set supervised fine-tuning parameters
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=max_seq_length,
tokenizer=tokenizer,
args=training_arguments,
packing=packing,
)
Konfigūruokite ir pritaikykite „Lora“ mūsų modeliui, naudodami „loraconfig“ ir „get_peft_model“. Tada mes sukuriame „mokymo progreso“ modelio mokymą, nurodydami epochos skaičių, partijų dydžius ir optimizavimo parametrus. Galiausiai mes sukūrėme „sftTrainer“, perduodami jį modelio, duomenų rinkinį, tokenizatorių ir mokymo argumentus.
# Train model
trainer.train()
# Save trained model
trainer.model.save_pretrained(new_model)
Inicijuokite prižiūrimą tikslinimo procesą („Trainer.train“ () `), tada išsaugokite apmokytą LORA modelį nurodytam katalogui.
# Run text generation pipeline with the fine-tuned model
prompt = "How can I write a Python program that calculates the mean, standard deviation, and coefficient of variation of a dataset from a CSV file?"
pipe = pipeline(task="text-generation", model=trainer.model, tokenizer=tokenizer, max_length=400)
result = pipe(f"<s>(INST) {prompt} (/INST)")
print(result(0)('generated_text'))
Sukurkite teksto generavimo vamzdyną naudodami mūsų tiksliai suderintą modelį ir tokenizatorių. Tada mes pateikiame raginimą, generuojame tekstą naudodami vamzdyną ir atspausdiname išvestį.
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
secret_value_0 = user_secrets.get_secret("HF_TOKEN")
Prieigą prie „Kaggle“ paslapčių, kad gautumėte saugomą apkabinantį veido žetoną (`hf_token`). Šis žetonas naudojamas autentifikavimui su apkabinančiu veido stebule.
# Empty VRAM
# del model
# del pipe
# del trainer
# del dataset
del tokenizer
import gc
gc.collect()
gc.collect()
torch.cuda.empty_cache()
Aukščiau pateiktas fragmentas parodo, kaip atlaisvinti GPU atmintį, ištrinant nuorodas ir išvalant talpyklas. Mes ištriname žetoną, paleidžiame šiukšlių rinkimą ir ištuštiname CUDA talpyklą, kad sumažintume „VRAM“ naudojimą.
import torch
# Check the number of GPUs available
num_gpus = torch.cuda.device_count()
print(f"Number of GPUs available: {num_gpus}")
# Check if CUDA device 1 is available
if num_gpus > 1:
print("cuda:1 is available.")
else:
print("cuda:1 is not available.")
Mes importuojame „Pytorch“ ir patikriname aptiktų GPU skaičių. Tada atsispausdiname skaičių ir sąlygiškai pranešame, ar yra GPU su ID 1.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# Specify the device ID for your desired GPU (e.g., 0 for the first GPU, 1 for the second GPU)
device_id = 1 # Change this based on your available GPUs
device = f"cuda:{device_id}"
# Load the base model on the specified GPU
base_model = AutoModelForCausalLM.from_pretrained(
model_name,
low_cpu_mem_usage=True,
return_dict=True,
torch_dtype=torch.float16,
device_map="auto", # Use auto to load on the available device
)
# Load the LoRA weights
lora_model = PeftModel.from_pretrained(base_model, new_model)
# Move LoRA model to the specified GPU
lora_model.to(device)
# Merge the LoRA weights with the base model weights
model = lora_model.merge_and_unload()
# Ensure the merged model is on the correct device
model.to(device)
# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
Pasirinkite GPU įrenginį („Device_ID 1“) ir įkelkite bazinį modelį su nurodytais tikslumo ir atminties optimizavimais. Tada įkelkite ir sujungkite „Lora“ svorius į bazinį modelį, užtikrindami, kad sujungtas modelis perkeltas į nurodytą GPU. Galiausiai įkelkite tokenizatorių ir sukonfigūruokite jį naudodami tinkamus apmušalų nustatymus.
Apibendrinant, vadovaudamiesi šia vadove, jūs sėkmingai sureguliavote LLAMA-2 7B pokalbių modelį, kad galėtumėte specializuotis „Python Code“ generavime. „Qlora“ integravimas, gradiento kontrolės taškas ir „SftTrainer“ demonstruoja praktinį požiūrį į išteklių apribojimų valdymą, tuo pačiu pasiekiant aukštą našumą.
Atsisiųskite „Colab“ nešiojamąjį kompiuterį čia. Visas šio tyrimo kreditas skirtas šio projekto tyrėjams. Be to, nepamirškite sekti mūsų „Twitter“ ir prisijunkite prie mūsų „Telegram“ kanalas ir „LinkedIn GrOUP. Nepamirškite prisijungti prie mūsų 75K+ ml subreddit.
🚨 „MarkTechPost“ kviečia AI įmones/pradedančiuosius/grupes, kad jie galėtų partnerį už savo būsimus AI žurnalus „Atvirojo kodo AI gamyboje“ ir „Agentic AI“.
Asif Razzaq yra „MarkTechPost Media Inc“ generalinis direktorius. Kaip vizionierius verslininkas ir inžinierius, ASIF yra įsipareigojęs išnaudoti dirbtinio intelekto potencialą socialiniam gėrybei. Naujausias jo siekis yra dirbtinio intelekto žiniasklaidos platformos „MarkTechPost“, kuri išsiskiria išsamia mašininio mokymosi ir giluminio mokymosi naujienų, kuri yra techniškai pagrįsta, ir lengvai suprantama plačiai auditorijai. Platforma gali pasigirti daugiau nei 2 milijonai mėnesinių peržiūrų, parodydama jos populiarumą tarp auditorijos.
✅ (rekomenduojama) Prisijunkite prie mūsų telegramos kanalo