Sissejuhatus
Pärast mudelite Llama ja Mistral väljaandmist tõstsid avatud lähtekoodiga LLM-id OpenAI-st tähelepanu keskpunkti. Sellest ajast alates on välja antud mitu Llama ja Mistrali arhitektuuril põhinevat mudelit, mis toimivad samaväärselt patenteeritud mudelitega, nagu GPT-3.5 Turbo, Claude, Gemini jne. Need mudelid on aga tarbijariistvaras kasutamiseks liiga suured.
Kuid viimasel ajal on tekkinud uus LLM-ide klass. Need on LLM-id parameetrite kategoorias alam-7B. Vähem parameetreid muudab need piisavalt kompaktseks, et neid saaks kasutada tarbija riistvaras, säilitades samal ajal tõhususe 7B mudelitega. Mudelid, nagu Tiny-Llama-1B, Microsofti Phi-2 ja Alibaba Qwen-3b, võivad olla suurepärased asendajad suurematele mudelitele, mida saab kasutada kohapeal või kasutada. Samal ajal on peenhäälestus ülioluline, et mis tahes põhimudelist kõigi järgnevate ülesannete jaoks parim välja tuua.
Siin uurime, kuidas baasi peenhäälestada Tiny-Lama mudel puhastatud Alpaca andmestikus.
õppe eesmärgid
- Mõista peenhäälestust ja selle erinevaid meetodeid.
- Siit saate teada tõhusa peenhäälestuse tööriistade ja tehnikate kohta.
- Lisateavet WandB kohta treeninglogide logimiseks.
- Peenhäälestage Tiny-Llama Colabis Alpaca andmestikul.
See artikkel avaldati osana Andmeteaduse ajaveebi.
Sisukord
Mis on LLM-i peenhäälestus?
Peenhäälestus on protsess, mille käigus pannakse eelkoolitatud modell uusi teadmisi õppima. Eelkoolitatud mudel on üldotstarbeline mudel, mis on treenitud suurel hulgal andmetel. Kuid enamikul juhtudel ei tööta need ettenähtud viisil ja peenhäälestus on kõige tõhusam viis mudeli kohandamiseks konkreetsete kasutusjuhtudega. Näiteks alus LLM-id saavad hästi hakkama teksti genereerimisega ühe käiguga kvaliteedikontrollis, kuid võitlevad mitme pöördega vestlustega, nagu vestlusmudelid.
Põhimudelid peavad olema koolitatud dialoogide transkriptsioonide osas, et nad saaksid pidada mitme pöördega vestlusi. Peenhäälestus on eelkoolitatud mudelite erinevateks avatarideks vormimiseks hädavajalik. Peenhäälestatud mudelite kvaliteet sõltub andmete kvaliteedist ja baasmudeli võimalustest. Peenhäälestuse modelleerimiseks on mitu võimalust, näiteks LoRA, QLoRA jne.
Vaatame lühidalt need mõisted läbi.
LoRA
LoRA tähistab madala asetusega kohanemist, populaarset peenhäälestustehnikat, mille puhul valime mõned treenitavad parameetrid selle asemel, et värskendada kõiki parameetreid algsete kaalumaatriksite madala astme lähendamise kaudu. LoRA mudelit saab väiksema arvutusmahuka riistvaraga kiiremini peenhäälestada.
QLoRA
QLoRA või Quantized LoRA on sammu võrra kaugemale kui LoRA. Täistäppismudeli asemel kvantifitseerib see mudeli kaalud, et vähendada ujukoma täpsust enne LoRA rakendamist. Kvantimine on protsess, mille käigus alandatakse kõrgemaid bitiväärtusi madalamateks väärtusteks. 4-bitine kvantimisprotsess hõlmab 16-bitiste kaalude kvantiseerimist 4-bitisteks ujuväärtusteks.
Mudeli kvantifitseerimine toob kaasa mudeli suuruse olulise vähenemise esialgse mudeliga võrreldava täpsusega. QLoRA-s võtame kvantiseeritud mudeli ja rakendame sellele LoRA-d. Mudeleid saab kvantifitseerida mitmel viisil, näiteks llama.cpp, AWQ, bitsandbytes jne kaudu.
Peenhäälestus Unslothiga
Unsloth on avatud lähtekoodiga platvorm populaarsete suurte keelte mudelite kiiremaks viimistlemiseks. See toetab populaarseid LLM-e, sealhulgas Llama-2 ja Mistral, ning nende derivaate, nagu Yi, Open-hermes jne. See rakendab kohandatud tritoni tuumasid ja käsitsi tagajalgade mootorit, et parandada mudeli koolituse kiirust.
Siin kasutame Unslothi 4-bitise kvantiseeritud Tiny-Llama baasmudeli peenhäälestamiseks. Alpaca andmestik. Mudel on kvantiseeritud bittide ja baitidega ning tuumad optimeeritakse OpenAI Tritoniga.
Logimine WandB-ga
Masinõppes on koolitus- ja hindamismõõdikute logimine ülioluline. See annab meile täieliku pildi rongisõidust. Kaalud ja eelarvamused (WandB) on avatud lähtekoodiga raamatukogu masinõppe katsete visualiseerimiseks ja jälgimiseks. Sellel on spetsiaalne veebirakendus treeningmõõdikute reaalajas visualiseerimiseks. See võimaldab meil ka tootmismudeleid tsentraalselt hallata. Kasutame WandB-d ainult oma Tiny-Llama peenhäälestusjooksu jälgimiseks.
WandB kasutamiseks registreeruge tasuta konto jaoks ja looge API-võti.
Nüüd alustame oma mudeli peenhäälestamist.
Kuidas peenhäälestada pisikest laama?
Peenhäälestus on arvutuslik ülesanne. See nõuab 10–15 GB VRAM-iga masinat või saate kasutada Colabi tasuta Tesla T4 GPU käitusaega.
Nüüd installige Unsloth ja 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
Järgmine asi on 4-bitise kvantiseeritud eelkoolitatud mudeli laadimine Unslothiga.
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,
)
See installib mudeli kohapeal. 4-bitise mudeli maht on umbes 760 MB.
Nüüd kandideeri PEFT 4-bitisele Tiny-Llama mudelile.
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
)
Andmete ettevalmistamine
Järgmine samm on andmestiku ettevalmistamine peenhäälestamiseks. Nagu ma varem mainisin, kasutame puhastatud Alpaka andmestik. See on algse Alpaca andmestiku puhastatud versioon. See järgib vormingut käsk-sisend-vastus. Siin on näide Alpaca andmetest
Nüüd valmistame oma andmed ette.
@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,)
Nüüd jagage andmed rongi- ja hindamisandmeteks. Olen võtnud väikesed eval andmed, kuna suuremad eval andmed aeglustavad treeningut.
dataset_dict = dataset.train_test_split(test_size=0.004)
Seadistage WandB
Nüüd konfigureerige kaalud ja kalded oma praeguses käitusajal.
# @title wandb init
import wandb
wandb.login()
Esitage API-võti, et WandB-sse sisse logida, kui seda küsitakse.
Seadistage keskkonnamuutujad.
%env WANDB_WATCH=all
%env WANDB_SILENT=true
Rongi mudel
Siiani oleme laadinud 4-bitise mudeli, loonud LoRA konfiguratsiooni, valmistanud ette andmestiku ja konfigureerinud WandB. Järgmine samm on mudeli treenimine andmete põhjal. Selleks peame määratlema Trl raamatukogust treeneri. Kasutame Trl SFTrainerit. Kuid enne seda lähtestage WandB ja määratlege sobivad koolitusargumendid.
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")
Koolituse argumendid
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,
)
See on koolituse jaoks oluline. GPU kasutuse madalaks hoidmiseks hoidke rongi, eval partii ja gradiendi kogunemisaste madalal. Logging_steps on sammude arv, enne kui mõõdikud WandB-sse logitakse.
Nüüd lähtestage 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,
)
Nüüd alustage koolitust.
trainer_stats = trainer.train()
wandb.finish()
Treeningjooksu ajal jälgib WandB treeningu- ja hindamismõõdikuid. Külastate antud juhtpaneeli linki ja näete seda reaalajas.
See on ekraanipilt minu jooksust Colabi märkmikuga.
Treeningu kiirus sõltub mitmest tegurist, sealhulgas koolituse ja eval andmete suurusest, koolituse ja eval partii suurusest ning perioodide arvust. Kui teil tekib GPU kasutusprobleeme, proovige vähendada partii ja gradiendi kogumise sammu suurust. Rongi partii suurus = partii_suurus_seadme kohta * gradiendi_kogumise_sammud. Ja optimeerimise sammude arv = kogu koolitusandmed / partii suurus. Saate parameetritega mängida ja vaadata, mis töötab paremini.
Saate WandB armatuurlaual visualiseerida koolituse ja koolituse hindamise kaotust.
Rongi kaotus
Eval Loss
Järeldamine
Saate LoRA adapterid salvestada kohapeal või lükata need HuggingFace'i hoidlasse.
model.save_pretrained("lora_model") # Local saving
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
Samuti saate salvestatud mudeli kettalt laadida ja seda järelduste tegemiseks kasutada.
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)
Mudeli vastuste voogesitamiseks.
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 64)
Niisiis, see kõik puudutas Tiny-Llama mudeli peenhäälestamist WandB logimisega.
Siin on Colabi märkmik sama.
Järeldus
Väikesed LLM-id võivad olla kasulikud arvutite piiramisega riistvarale (nt personaalarvutitele, mobiiltelefonidele ja muudele kantavatele seadmetele jne) juurutamisel. Peenhäälestus võimaldab neil mudelitel allvoolu toiminguid paremini täita. Sellest artiklist õppisime, kuidas viimistleda andmestiku baaskeele mudelit.
Võtme tagasivõtmine
- Peenhäälestus on protsess, mille käigus kohandatakse eelkoolitatud mudel konkreetse uue ülesandega.
- Tiny-Llama on LLM, millel on ainult 1.1 miljardit parameetrit ja mida on koolitatud 3 triljoni märgiga.
- LLM-ide (nt LoRA ja QLoRA) peenhäälestamiseks on erinevaid viise.
- Unsloth on avatud lähtekoodiga platvorm, mis pakub CUDA-le optimeeritud LLM-e, et kiirendada LLM-ide peenhäälestamist.
- Weights and Biases (WandB) on tööriist ML-katsete jälgimiseks ja salvestamiseks.
Korduma kippuvad küsimused
V. Peenhäälestus on masinõppe, eriti süvaõppe kontekstis tehnika, mille puhul võetakse eelkoolitatud mudel ja kohandatakse see uue konkreetse ülesandega.
V. Väiksemaid LLM-e on võimalik Colabis tasuta viimistleda QLoRA-ga Tesla T4 GPU kaudu.
V. Peenhäälestus suurendab oluliselt LLM-i võimet täita allavoolu ülesandeid, nagu rollimäng, koodi genereerimine jne.
A. Tiny-Llama, kes on treenitud 3 triljonil märgil, on 1.1B parameetritega LLM. Mudel võtab kasutusele originaalse Llama-2 arhitektuuri.
V. Unsloth on avatud lähtekoodiga tööriist, mis pakub kiiremat ja tõhusamat LLM-i peenhäälestust, optimeerides GPU tuumad Tritoniga.
Selles artiklis näidatud meedia ei kuulu Analytics Vidhyale ja seda kasutatakse autori äranägemisel.
seotud
- SEO-põhise sisu ja PR-levi. Võimenduge juba täna.
- PlatoData.Network Vertikaalne generatiivne Ai. Jõustage ennast. Juurdepääs siia.
- PlatoAiStream. Web3 luure. Täiustatud teadmised. Juurdepääs siia.
- PlatoESG. Süsinik, CleanTech, Energia, Keskkond päikeseenergia, Jäätmekäitluse. Juurdepääs siia.
- PlatoTervis. Biotehnoloogia ja kliiniliste uuringute luureandmed. Juurdepääs siia.
- Allikas: https://www.analyticsvidhya.com/blog/2024/02/fine-tuning-a-tiny-llama-model-with-unsloth/
- :on
- :on
- :mitte
- : kus
- $ UP
- 1
- 11
- 12
- 15%
- 16
- 1b
- 258
- 32
- 7
- 8
- a
- A100
- Võimalik
- MEIST
- konto
- kogunemine
- täpsus
- kohandama
- kohandamine
- lisama
- Materjal: BPA ja flataatide vaba plastik
- võimaldab
- Ka
- summa
- an
- analytics
- Analüütika Vidhya
- ja
- mistahes
- API
- app
- kehtima
- Rakendades
- asjakohane
- asjakohaselt
- arhitektuur
- OLEME
- argumendid
- ümber
- artikkel
- AS
- At
- auto
- Avatarid
- b
- baas
- põhineb
- BE
- olnud
- enne
- alla
- kasulik
- Kasu
- BEST
- Parem
- erapoolikus
- kalduvusi
- Miljard
- Natuke
- bits
- tühi
- ajaveebi
- lühidalt
- tooma
- kuid
- by
- CAN
- võimeid
- võime
- kapital
- juhtudel
- Kategooria
- vestlus
- Vali
- klass
- kood
- kompaktne
- võrreldav
- täitma
- Lõpetab
- arvutid
- mõisted
- konfiguratsioon
- konfigureeritud
- tarbija
- Tarbija riistvara
- kontekst
- vestlused
- looma
- loodud
- otsustav
- Praegune
- Praegu
- tava
- Kriips
- armatuurlaud
- andmed
- andmekogumid
- pühendunud
- sügav
- sügav õpe
- määratlema
- sõltuvad
- sõltub
- juurutada
- juurutamine
- Derivaadid
- kirjeldab
- Detection
- dialoogid
- erinev
- äranägemisel
- do
- alla
- Ajalugu
- serv
- Tõhus
- efektiivsus
- tõhus
- teine
- tekkimine
- võimaldama
- kohtumine
- Mootor
- Parandab
- piisavalt
- üksus
- keskkond
- ajajärgud
- eriti
- oluline
- jms
- Eeter (ETH)
- hindamine
- näide
- näited
- katseid
- uurima
- tegurid
- FAIL
- vale
- kaugele
- kiiremini
- vähe
- vähem
- Float
- ujuv
- järgneb
- eest
- formaat
- Prantsusmaa
- tasuta
- Alates
- edasi
- Kaksikud
- Üldine otstarve
- põlvkond
- saama
- Git
- antud
- annab
- Go
- GPU
- GPU
- suur
- riistvara
- Olema
- siin
- Suur
- rohkem
- hoidma
- Kuidas
- Kuidas
- aga
- HTTPS
- Kallistav Nägu
- i
- if
- tööriistad
- import
- oluline
- parandama
- in
- Kaasa arvatud
- sisend
- sisendite
- paigaldama
- selle asemel
- juhised
- ette nähtud
- sisse
- hõlmab
- küsimustes
- IT
- jpg
- hoidma
- pidamine
- Võti
- teadmised
- kumar
- keel
- suur
- suurem
- Leads
- Õppida
- õppinud
- õppimine
- Lahkuma
- vähem
- Lets
- Raamatukogu
- nagu
- rambivalgustus
- sirgjooneline
- LINK
- Laama
- llm
- koormus
- laadimine
- kohalik
- kohapeal
- logi
- loginud
- metsaraie
- kaotus
- Madal
- vähendada
- masin
- masinõpe
- tegema
- Tegemine
- juhtima
- käsiraamat
- max laiuse
- Meedia
- Mälu
- mainitud
- meetodid
- Meetrika
- ML
- mobiilne
- mobiiltelefonid
- mudel
- mudelid
- rohkem
- tõhusam
- kõige
- mitmekordne
- peab
- my
- nimi
- Vajadus
- Uus
- järgmine
- mitte ükski
- märkmik
- number
- of
- sageli
- vanem
- on
- Internetis
- ainult
- avatud lähtekoodiga
- OpenAI
- optimeerimine
- optimeeritud
- optimeerimine
- or
- originaal
- OS
- Muu
- muidu
- meie
- välja
- väljund
- väljundid
- üle
- omanikuks
- Pakendis
- paaristatud
- parameeter
- parameetrid
- osa
- sooritama
- täitma
- esitades
- isiklik
- Personaalarvutid
- telefonid
- pilt
- inimesele
- Platon
- Platoni andmete intelligentsus
- PlatoData
- mängima
- Punkt
- populaarne
- võimalik
- Täpsus
- Valmistama
- valmis
- protsess
- Produktsioon
- varaline
- annab
- avaldatud
- Lükkama
- Küsimused ja vastused
- kvaliteet
- R
- auaste
- reaalajas
- vähendama
- vähendamine
- vähendamine
- vabastatud
- Hoidla
- taotleda
- Vajab
- teadustöö
- vastus
- vastuste
- tagasipöördumine
- Roll
- rtx
- jooks
- sama
- Säästa
- salvestatud
- säästmine
- ketendamine
- teadus
- vaata
- seeme
- valima
- komplekt
- Lühike
- näidatud
- kirjutama
- alates
- SUURUS
- suurused
- aeglustub
- väike
- väiksem
- konkreetse
- kiirus
- jagada
- seisab
- algus
- Samm
- Sammud
- streaming
- võitlus
- mahukas
- selline
- toetama
- Toetab
- Võtma
- võtnud
- Ülesanne
- ülesanded
- tehnika
- tehnikat
- Teslal
- test
- tekst
- teksti genereerimine
- kui
- et
- .
- oma
- Neile
- SIIS
- Seal.
- Need
- nad
- asi
- see
- Läbi
- aeg
- et
- kokku
- sümboolne
- märgid
- liiga
- võttis
- tööriist
- töövahendid
- tõrvik
- Summa
- jälgida
- Jälgimine
- Rong
- koolitatud
- koolitus
- trafod
- triljon
- Lõitkodalane
- tõsi
- püüdma
- ajakohastamine
- us
- Kasutus
- kasutama
- Kasutatud
- Väärtused
- versioon
- kaudu
- visiit
- visualiseeri
- oli
- Tee..
- kuidas
- we
- kantavad
- web
- webp
- kaal
- Hästi
- olid
- M
- Mis on
- millal
- mis
- kuigi
- will
- koos
- töötab
- kirjutama
- sa
- Sinu
- sephyrnet