Predstavitev
Po izdaji modelov Llama in Mistral so odprtokodni LLM-ji umaknili pozornost iz OpenAI. Od takrat je bilo izdanih več modelov, ki temeljijo na arhitekturi Llama in Mistral in delujejo enakovredno lastniškim modelom, kot so GPT-3.5 Turbo, Claude, Gemini itd. Vendar so ti modeli preveliki za uporabo v strojni opremi za potrošnike.
Toda v zadnjem času se je pojavil nov razred LLM. To so magistri znanja v kategoriji parametrov pod-7B. Zaradi manj parametrov so dovolj kompaktni, da jih lahko poganjate s potrošniško strojno opremo, hkrati pa ohranite učinkovitost, primerljivo z modeli 7B. Modeli, kot so Tiny-Llama-1B, Microsoftov Phi-2 in Alibabin Qwen-3b, so lahko odlični nadomestki za večje modele za lokalno delovanje ali uporabo na robu. Hkrati je natančno prilagajanje ključnega pomena, da lahko iz katerega koli osnovnega modela izvlečete najboljše za vse nadaljnje naloge.
Tukaj bomo raziskali, kako natančno nastaviti bazo Model Tiny-Llama na očiščenem naboru podatkov Alpaca.
Učni cilji
- Razumeti fino nastavitev in njene različne metode.
- Spoznajte orodja in tehnike za učinkovito fino uravnavanje.
- Spoznajte WandB za beleženje dnevnikov usposabljanja.
- Natančno prilagodite Tiny-Llama na naboru podatkov Alpaca v Colabu.
Ta članek je bil objavljen kot del Blogaton podatkovne znanosti.
Kazalo
Kaj je LLM Fine-Tuning?
Fino uravnavanje je postopek, s katerim vnaprej usposobljeni model pridobi novo znanje. Vnaprej usposobljeni model je model splošnega namena, usposobljen na veliki količini podatkov. Vendar pa v večini primerov ne delujejo tako, kot je bilo predvideno, in fina nastavitev je najučinkovitejši način za prilagajanje modela specifičnim primerom uporabe. Na primer baza LLM dobro se znajdejo pri generiranju besedila pri preverjanju kakovosti z enim obratom, vendar imajo težave z večobratnimi pogovori, kot so modeli klepeta.
Osnovne modele je treba učiti na prepisih dialogov, da lahko vodijo večkratne pogovore. Natančna nastavitev je bistvena za oblikovanje vnaprej usposobljenih modelov v različne avatarje. Kakovost natančno nastavljenih modelov je odvisna od kakovosti podatkov in zmogljivosti osnovnega modela. Obstaja več načinov za fino nastavitev modela, kot so LoRA, QLoRA itd.
Pojdimo na kratko skozi te koncepte.
LoRA
LoRA je kratica za Low-rank Adaptation, priljubljeno tehniko natančnega prilagajanja, pri kateri izberemo nekaj parametrov, ki jih je mogoče učiti, namesto da bi posodabljali vse parametre prek približka nizkega ranga izvirnih matrik teže. Model LoRA je mogoče hitreje prilagoditi na računalniško manj intenzivni strojni opremi.
QLoRA
QLoRA ali kvantizirana LoRA je korak dlje od LoRA. Namesto modela s polno natančnostjo kvantizira uteži modela, da zmanjša natančnost plavajoče vejice, preden uporabi LoRA. Kvantizacija je postopek znižanja višjih bitnih vrednosti v nižje vrednosti. 4-bitni postopek kvantizacije vključuje kvantiziranje 16-bitnih uteži v 4-bitne vrednosti s plavajočim.
Kvantiziranje modela vodi do znatnega zmanjšanja velikosti modela s primerljivo natančnostjo kot izvirni model. V QLoRA vzamemo kvantiziran model in nanj uporabimo LoRA. Modele je mogoče kvantizirati na več načinov, na primer prek llama.cpp, AWQ, bitsandbytes itd.
Natančna nastavitev z Unsloth
Unsloth je odprtokodna platforma za hitrejšo fino nastavitev priljubljenih velikih jezikovnih modelov. Podpira priljubljene LLM-je, vključno z Llama-2 in Mistral, ter njune izpeljanke, kot so Yi, Open-hermes itd. Implementira jedra triton po meri in ročni back-prop motor za izboljšanje hitrosti usposabljanja modela.
Tukaj bomo uporabili Unsloth za natančno nastavitev osnovnega 4-bitnega kvantiziranega modela Tiny-Llama na Alpaca nabor podatkov. Model je kvantiziran z biti in bajti, jedra pa so optimizirana s Tritonom OpenAI.
Beleženje z WandB
Pri strojnem učenju je ključnega pomena beleženje metrik usposabljanja in ocenjevanja. To nam daje popolno sliko vožnje vlaka. Uteži in pristranskosti (WandB) je odprtokodna knjižnica za vizualizacijo in sledenje poskusom strojnega učenja. Ima namensko spletno aplikacijo za vizualizacijo meritev treninga v realnem času. Omogoča nam tudi centralno upravljanje proizvodnih modelov. WandB bomo uporabili samo za sledenje našemu natančnemu uravnavanju Tiny-Llama.
Če želite uporabljati WandB, se prijavite za brezplačen račun in ustvarite Ključ API.
Zdaj pa začnimo natančno prilagajati naš model.
Kako natančno prilagoditi Tiny-Llamo?
Natančna nastavitev je računalniško zahtevna naloga. Potrebuje stroj z 10–15 GB VRAM-a ali pa uporabite Colabovo brezplačno Tesla T4 GPU runtime.
Zdaj namestite Unsloth in WandB
%%capture
import torch
major_version, minor_version = torch.cuda.get_device_capability()
!pip install wandb
if major_version >= 8:
# Use this for new GPUs like Ampere, Hopper GPUs (RTX 30xx, RTX 40xx, A100, H100, L40)
!pip install "unsloth[colab_ampere] @ git+https://github.com/unslothai/unsloth.git"
else:
# Use this for older GPUs (V100, Tesla T4, RTX 20xx)
!pip install "unsloth[colab] @ git+https://github.com/unslothai/unsloth.git"
pass
Naslednja stvar je nalaganje 4-bitnega kvantiziranega vnaprej pripravljenega modela z Unsloth.
from unsloth import FastLanguageModel
import torch
max_seq_length = 4096 # Choose any! We auto support RoPE Scaling internally!
dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+
load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False.
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/tinyllama-bnb-4bit", # "unsloth/tinyllama" for 16bit loading
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
S tem boste model namestili lokalno. Velikost 4-bitnega modela bo približno 760 MB.
Zdaj se prijavi PEFT na 4-bitni model Tiny-Llama.
model = FastLanguageModel.get_peft_model(
model,
r = 32, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = 32,
lora_dropout = 0, # Currently only supports dropout = 0
bias = "none", # Currently only supports bias = "none"
use_gradient_checkpointing = True, # @@@ IF YOU GET OUT OF MEMORY - set to True @@@
random_state = 3407,
use_rslora = False, # We support rank stabilized LoRA
loftq_config = None, # And LoftQ
)
Pripravite podatke
Naslednji korak je priprava nabora podatkov za natančno nastavitev. Kot sem že omenil, bomo uporabili očiščeno Nabor podatkov o Alpaki. To je očiščena različica izvirnega nabora podatkov Alpaca. Sledi formatu navodilo-vnos-odziv. Tukaj je primer podatkov o Alpaki
Zdaj pa pripravimo naše podatke.
@title prepare data
#alpaca_prompt = """Below is an instruction that describes a task, paired with an input that
provides further context.
Write a response that appropriately completes the request.
### Instruction:
{}
### Input:
{}
### Response:
{}"""
EOS_TOKEN = tokenizer.eos_token
def formatting_prompts_func(examples):
instructions = examples["instruction"]
inputs = examples["input"]
outputs = examples["output"]
texts = []
for instruction, input, output in zip(instructions, inputs, outputs):
# Must add EOS_TOKEN, otherwise your generation will go on forever!
text = alpaca_prompt.format(instruction, input, output) + EOS_TOKEN
texts.append(text)
return { "text" : texts, }
pass
from datasets import load_dataset
dataset = load_dataset("yahma/alpaca-cleaned", split = "train")
dataset = dataset.map(formatting_prompts_func, batched = True,)
Zdaj razdelite podatke na podatke o vlaku in ocenjevanju. Vzel sem majhne podatke o vrednotenju, saj večji podatki ocenjevanja upočasnjujejo usposabljanje.
dataset_dict = dataset.train_test_split(test_size=0.004)
Konfigurirajte WandB
Zdaj konfigurirajte uteži in pristranskosti v trenutnem času izvajanja.
# @title wandb init
import wandb
wandb.login()
Ob pozivu navedite ključ API za prijavo v WandB.
Nastavite spremenljivke okolja.
%env WANDB_WATCH=all
%env WANDB_SILENT=true
Model vlaka
Doslej smo naložili 4-bitni model, ustvarili konfiguracijo LoRA, pripravili nabor podatkov in konfigurirali WandB. Naslednji korak je usposabljanje modela na podatkih. Za to moramo definirati trenerja iz knjižnice Trl. Uporabili bomo SFTrainer podjetja Trl. Pred tem pa inicializirajte WandB in definirajte ustrezne argumente za usposabljanje.
import os
from trl import SFTTrainer
from transformers import TrainingArguments
from transformers.utils import logging
import wandb
logging.set_verbosity_info()
project_name = "tiny-llama"
entity = "wandb"
# os.environ["WANDB_LOG_MODEL"] = "checkpoint"
wandb.init(project=project_name, name = "tiny-llama-unsloth-sft")
Argumenti za usposabljanje
args = TrainingArguments(
per_device_train_batch_size = 2,
per_device_eval_batch_size=2,
gradient_accumulation_steps = 4,
evaluation_strategy="steps",
warmup_ratio = 0.1,
num_train_epochs = 1,
learning_rate = 2e-5,
fp16 = not torch.cuda.is_bf16_supported(),
bf16 = torch.cuda.is_bf16_supported(),
optim = "adamw_8bit",
weight_decay = 0.1,
lr_scheduler_type = "linear",
seed = 3407,
output_dir = "outputs",
report_to="wandb", # enable logging to W&B
# run_name="tiny-llama-alpaca-run", # name of the W&B run (optional)
logging_steps=1, # how often to log to W&B
logging_strategy = 'steps',
save_total_limit=2,
)
To je pomembno za trening. Če želite ohraniti nizko porabo GPE-ja, ohranite nizke korake zbiranja vlaka, serije vrednotenja in gradienta. Logging_steps je število korakov, preden se metrike zabeležijo v WandB.
Zdaj inicializirajte SFTTrainer.
trainer = SFTTrainer(
model = model,
tokenizer = tokenizer,
train_dataset = dataset_dict["train"],
eval_dataset=dataset_dict["test"],
dataset_text_field = "text",
max_seq_length = max_seq_length,
dataset_num_proc = 2,
packing = True, # Packs short sequences together to save time!
args = args,
)
Zdaj pa začnite z usposabljanjem.
trainer_stats = trainer.train()
wandb.finish()
Med izvajanjem usposabljanja bo WandB spremljal metrike usposabljanja in ocenjevanja. Obiščete dano povezavo nadzorne plošče in si jo ogledate v realnem času.
To je posnetek zaslona iz mojega dela na prenosnem računalniku Colab.
Hitrost usposabljanja bo odvisna od več dejavnikov, vključno z velikostjo podatkov o usposabljanju in vrednotenju, velikostjo serije usposabljanja in vrednotenja ter številom epoh. Če naletite na težave z uporabo GPE, poskusite zmanjšati velikost korakov zbiranja paketov in gradientov. Velikost serije vlaka = batch_size_per_device * gradient_accumulation_steps. In število optimizacijskih korakov = skupni podatki o usposabljanju/velikost serije. Lahko se igrate s parametri in vidite, kateri deluje bolje.
Na nadzorni plošči WandB si lahko vizualizirate izgubo vadbe in ocenjevanje vaše vadbe.
Izguba vlaka
Ocenjena izguba
Sklepanje
Adapterje LoRA lahko shranite lokalno ali jih potisnete v repozitorij HuggingFace.
model.save_pretrained("lora_model") # Local saving
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
Shranjeni model lahko tudi naložite z diska in ga uporabite za sklepanje.
if False:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "lora_model", # YOUR MODEL YOU USED FOR TRAINING
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
inputs = tokenizer(
[
alpaca_prompt.format(
"capital of France?", # instruction
"", # input
"", # output - leave this blank for a generation!
)
]*1, return_tensors = "pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens = 64, use_cache = True)
tokenizer.batch_decode(outputs)
Za pretakanje odgovorov modela.
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 64)
Torej je šlo za fino nastavitev modela Tiny-Llama z beleženjem WandB.
Tukaj je Beležnica Colab za isto.
zaključek
Majhni LLM-ji so lahko koristni za uvajanje v računalniško omejeno strojno opremo, kot so osebni računalniki, mobilni telefoni in druge nosljive naprave itd. Natančna nastavitev omogoča, da ti modeli bolje delujejo pri nalogah na nižji stopnji. V tem članku smo se naučili, kako natančno prilagoditi osnovni jezikovni model na naboru podatkov.
Ključni izdelki
- Natančna nastavitev je postopek, s katerim se vnaprej usposobljeni model prilagodi določeni novi nalogi.
- Tiny-Llama je LLM z le 1.1 milijarde parametrov in je usposobljen na 3 bilijonih žetonov.
- Obstajajo različni načini za natančno nastavitev LLM, kot sta LoRA in QLoRA.
- Unsloth je odprtokodna platforma, ki ponuja LLM-je, optimizirane za CUDA, za pospešitev natančnega prilagajanja LLM-jev.
- Weights and Biases (WandB) je orodje za sledenje in shranjevanje poskusov ML.
Pogosto zastavljena vprašanja
A. Fino uravnavanje je v kontekstu strojnega učenja, zlasti globokega učenja, tehnika, pri kateri vzamete vnaprej usposobljen model in ga prilagodite novi, specifični nalogi.
A. Manjše LLM-je je mogoče brezplačno natančno prilagoditi v Colabu preko Tesla T4 GPE s QLoRA.
A. Natančna nastavitev močno izboljša zmožnost LLM za izvajanje nalog na nižji stopnji, kot so igranje vlog, ustvarjanje kode itd.
A. Tiny-Llama, usposobljena za 3 trilijone žetonov, je LLM s parametri 1.1B. Model prevzame originalno arhitekturo Llama-2.
A. Unsloth je odprtokodno orodje, ki zagotavlja hitrejše in učinkovitejše fino uravnavanje LLM z optimizacijo jeder GPU s Tritonom.
Mediji, prikazani v tem članku, niso v lasti Analytics Vidhya in se uporabljajo po lastni presoji avtorja.
Podobni
- Distribucija vsebine in PR s pomočjo SEO. Okrepite se še danes.
- PlatoData.Network Vertical Generative Ai. Opolnomočite se. Dostopite tukaj.
- PlatoAiStream. Web3 Intelligence. Razširjeno znanje. Dostopite tukaj.
- PlatoESG. Ogljik, CleanTech, Energija, Okolje, sončna energija, Ravnanje z odpadki. Dostopite tukaj.
- PlatoHealth. Obveščanje o biotehnologiji in kliničnih preskušanjih. Dostopite tukaj.
- vir: https://www.analyticsvidhya.com/blog/2024/02/fine-tuning-a-tiny-llama-model-with-unsloth/
- :ima
- : je
- :ne
- :kje
- $GOR
- 1
- 11
- 12
- 15%
- 16
- 1b
- 258
- 32
- 7
- 8
- a
- A100
- Sposobna
- O meni
- Račun
- akumulacija
- natančnost
- prilagodijo
- prilagoditev
- dodajte
- vsi
- omogoča
- Prav tako
- znesek
- an
- analitika
- Analitika Vidhya
- in
- kaj
- API
- aplikacija
- Uporabi
- Uporaba
- primerno
- ustrezno
- Arhitektura
- SE
- Argumenti
- okoli
- članek
- AS
- At
- avto
- avatarji
- b
- baza
- temeljijo
- BE
- bilo
- pred
- spodaj
- koristno
- Prednosti
- BEST
- Boljše
- pristranskosti
- pristranskosti
- Billion
- Bit
- bitov
- prazno
- blogaton
- Na kratko
- prinašajo
- vendar
- by
- CAN
- Zmogljivosti
- zmožnost
- Kapital
- primeri
- Kategorija
- klepet
- Izberite
- razred
- Koda
- kompaktna
- primerljiva
- dokončanje
- Zaključi
- računalniki
- koncepti
- konfiguracija
- konfigurirano
- Potrošnik
- Potrošniška strojna oprema
- ozadje
- pogovorov
- ustvarjajo
- ustvaril
- ključnega pomena
- Trenutna
- Trenutno
- po meri
- Dash
- Armaturna plošča
- datum
- nabor podatkov
- namenjen
- globoko
- globoko učenje
- opredeliti
- odvisna
- odvisno
- razporedi
- uvajanja
- Izvedeni finančni instrumenti
- opisuje
- Odkrivanje
- dialogi
- drugačen
- diskretnost
- do
- navzdol
- prej
- Edge
- Učinkovito
- učinkovitosti
- učinkovite
- ostalo
- pojav
- omogočajo
- srečanje
- Motor
- Izboljša
- dovolj
- entiteta
- okolje
- epohe
- zlasti
- bistvena
- itd
- Eter (ETH)
- Ocena
- Primer
- Primeri
- Poskusi
- raziskuje
- dejavniki
- FAIL
- false
- daleč
- hitreje
- Nekaj
- manj
- Plavaj
- plavajoči
- sledi
- za
- format
- Francija
- brezplačno
- iz
- nadalje
- Gemini
- glavni namen
- generacija
- dobili
- git
- dana
- daje
- Go
- GPU
- Grafične kartice
- veliko
- strojna oprema
- Imajo
- tukaj
- visoka
- več
- držite
- Kako
- Kako
- Vendar
- HTTPS
- HuggingFace
- i
- if
- izvedbe
- uvoz
- Pomembno
- izboljšanje
- in
- Vključno
- vhod
- vhodi
- namestitev
- Namesto
- Navodila
- namenjen
- v
- vključuje
- Vprašanja
- IT
- jpg
- Imejte
- vzdrževanje
- Ključne
- znanje
- Kumar
- jezik
- velika
- večja
- Interesenti
- UČITE
- naučili
- učenje
- pustite
- manj
- Lets
- Knjižnica
- kot
- svetilka
- linearna
- LINK
- Llama
- llm
- obremenitev
- nalaganje
- lokalna
- lokalno
- prijavi
- prijavljen
- sečnja
- off
- nizka
- nižje
- stroj
- strojno učenje
- Znamka
- Izdelava
- upravljanje
- Navodilo
- max širine
- mediji
- Spomin
- omenjeno
- Metode
- Meritve
- ML
- Mobilni
- Mobilni telefoni
- Model
- modeli
- več
- učinkovitejše
- Najbolj
- več
- morajo
- my
- Ime
- Nimate
- Novo
- Naslednja
- Noben
- prenosnik
- Številka
- of
- pogosto
- starejši
- on
- na spletu
- samo
- open source
- OpenAI
- optimizacija
- optimizirana
- optimizacijo
- or
- izvirno
- OS
- Ostalo
- drugače
- naši
- ven
- izhod
- izhodi
- več
- v lasti
- Paketi
- seznanjeni
- parameter
- parametri
- del
- mimo
- opravlja
- izvajati
- Osebni
- Osebni računalniki
- telefoni
- slika
- platforma
- platon
- Platonova podatkovna inteligenca
- PlatoData
- Predvajaj
- Točka
- Popular
- mogoče
- Precision
- Pripravimo
- pripravljeni
- Postopek
- proizvodnja
- lastniško
- zagotavlja
- objavljeno
- Push
- Vprašanja in odgovori
- kakovost
- R
- uvrstitev
- v realnem času
- zmanjša
- zmanjšanje
- Zmanjšanje
- sprosti
- Skladišče
- zahteva
- zahteva
- Raziskave
- Odgovor
- odgovorov
- vrnitev
- vloga
- RTX
- Run
- Enako
- Shrani
- shranjena
- shranjevanje
- skaliranje
- Znanost
- glej
- seme
- izberite
- nastavite
- Kratke Hlače
- pokazale
- podpisati
- saj
- Velikosti
- velikosti
- upočasni
- majhna
- manj
- specifična
- hitrost
- po delih
- stojala
- Začetek
- Korak
- Koraki
- pretakanje
- Boj
- precejšen
- taka
- podpora
- Podpira
- Bodite
- sprejeti
- Naloga
- Naloge
- tehnika
- tehnike
- Tesla
- Test
- besedilo
- tvorjenje besedila
- kot
- da
- O
- njihove
- Njih
- POTEM
- Tukaj.
- te
- jih
- stvar
- ta
- skozi
- čas
- do
- skupaj
- žeton
- Boni
- tudi
- vzel
- orodje
- orodja
- baklo
- Skupaj za plačilo
- sledenje
- Sledenje
- Vlak
- usposobljeni
- usposabljanje
- transformatorji
- Bilijona
- Triton
- Res
- poskusite
- posodabljanje
- us
- Uporaba
- uporaba
- Rabljeni
- Vrednote
- različica
- preko
- obisk
- vizualizirati
- je
- način..
- načini
- we
- oblačila in dodatki
- web
- webp
- teža
- Dobro
- so bili
- Kaj
- Kaj je
- kdaj
- ki
- medtem
- bo
- z
- deluje
- pisati
- jo
- Vaša rutina za
- zefirnet