esittely
Llama- ja Mistral-mallien julkaisun jälkeen avoimen lähdekoodin LLM:t nostivat OpenAI:n parrasvalon. Sittemmin on julkaistu useita malleja, jotka perustuvat Llama- ja Mistral-arkkitehtuuriin, ja ne toimivat samalla tasolla kuin patentoidut mallit, kuten GPT-3.5 Turbo, Claude, Gemini jne. Nämä mallit ovat kuitenkin liian suuria käytettäviksi kuluttajalaitteistoissa.
Mutta viime aikoina on ilmaantunut uusi LLM-luokka. Nämä ovat ala-7B-parametriluokan LLM:t. Vähemmän parametreja tekee niistä riittävän pienikokoisia käytettäväksi kuluttajalaitteistossa, mutta tehokkuus on verrattavissa 7B-malleihin. Mallit, kuten Tiny-Llama-1B, Microsoftin Phi-2 ja Alibaban Qwen-3b, voivat olla erinomaisia korvikkeita suuremmille malleille, joita voidaan käyttää paikallisesti tai ottaa käyttöön reunalla. Samaan aikaan hienosäätö on ratkaisevan tärkeää, jotta mistä tahansa perusmallista saadaan paras mahdollinen loppupään tehtäviin.
Täällä tutkimme, kuinka alustaa hienosäädetään Tiny-Llama malli puhdistetussa Alpaca-tietojoukossa.
Oppimistavoitteet
- Ymmärrä hienosäätö ja sen erilaiset menetelmät.
- Opi tehokkaan hienosäädön työkaluista ja tekniikoista.
- Lisätietoja WandB:stä harjoituslokien kirjaamiseen.
- Hienosäädä Tiny-Llama Alpaca-tietojoukossa Colabissa.
Tämä artikkeli julkaistiin osana Data Science Blogathon.
Sisällysluettelo
Mikä on LLM-hienosäätö?
Hienosäätö on prosessi, jossa esikoulutettu malli saadaan oppimaan uutta tietoa. Esiopetettu malli on yleiskäyttöinen malli, joka on koulutettu suurelle datamäärälle. Useimmissa tapauksissa ne eivät kuitenkaan toimi toivotulla tavalla, ja hienosäätö on tehokkain tapa saada malli mukautumaan tiettyihin käyttötapauksiin. Esimerkiksi pohja LLM:t pärjää hyvin tekstin luomisessa yhden kierroksen laadunvarmistuksessa, mutta kamppaile usean kierroksen keskustelujen, kuten chat-mallien, kanssa.
Perusmallit on koulutettava dialogien transkriptioihin, jotta ne pystyvät pitämään monikäännöksiä. Hienosäätö on välttämätöntä esikoulutettujen mallien muovaamiseksi erilaisiksi avatariksi. Hienosäädettyjen mallien laatu riippuu datan laadusta ja perusmallin ominaisuuksista. On olemassa useita tapoja mallintaa hienosäätöä, kuten LoRA, QLoRA jne.
Käydään lyhyesti läpi nämä käsitteet.
LoRA
LoRA on lyhenne sanoista Low-rank Adaptation, suosittu hienosäätötekniikka, jossa valitsemme muutaman koulutettavan parametrin sen sijaan, että päivitämme kaikki parametrit alkuperäisten painomatriisien matalan tason approksimaatiolla. LoRA-mallia voidaan hienosäätää nopeammin vähemmän laskentaa vaativilla laitteistoilla.
QLoRA
QLoRA tai Quantized LoRA on askeleen LoRAa pidemmälle. Täyden tarkkuuden mallin sijaan se kvantisoi mallin painot liukulukutarkkuuden alentamiseksi ennen LoRA:n käyttämistä. Kvantisointi on prosessi, jossa korkeammat bittiarvot lasketaan pienemmiksi arvoiksi. 4-bittinen kvantisointiprosessi sisältää 16-bittisten painojen kvantisoinnin 4-bittisiksi kelluviksi arvoiksi.
Mallin kvantisointi johtaa mallin koon huomattavaan pienenemiseen alkuperäiseen malliin verrattuna vastaavalla tarkkuudella. QLoRAssa otamme kvantisoidun mallin ja käytämme siihen LoRAa. Mallit voidaan kvantisoida useilla tavoilla, kuten llama.cpp, AWQ, bitsandbytes jne.
Hienosäätö Unslothilla
Unsloth on avoimen lähdekoodin alusta suosittujen suurikielisten mallien nopeampaa hienosäätöä varten. Se tukee suosittuja LLM:itä, mukaan lukien Llama-2 ja Mistral, ja niiden johdannaisia, kuten Yi, Open-hermes jne. Se toteuttaa mukautettuja triton-ytimiä ja manuaalisen takapotkurimoottorin mallin koulutuksen nopeuden parantamiseksi.
Tässä käytämme Unslothia hienosäätämään 4-bittistä kvantisoitua Tiny-Llama-perusmallia alpakka tietojoukko. Malli on kvantisoitu biteillä ja tavuilla, ja ytimet optimoidaan OpenAI:n Tritonilla.
Kirjautuminen WandB:llä
Koneoppimisessa on tärkeää kirjata koulutus- ja arviointimittarit. Tämä antaa meille täydellisen kuvan junan kulusta. Painot ja painotukset (WandB) on avoimen lähdekoodin kirjasto koneoppimiskokeiden visualisointiin ja seurantaan. Siinä on oma verkkosovellus harjoitusmittareiden visualisointiin reaaliajassa. Sen avulla voimme myös hallita tuotantomalleja keskitetysti. Käytämme WandB:tä vain Tiny-Llama-hienosäätökierroksemme seuraamiseen.
Voit käyttää WandB:tä rekisteröimällä ilmaisen tilin ja luomalla API-avain.
Aloitetaan nyt mallimme hienosäätö.
Kuinka hienosäätää Tiny-Lama?
Hienosäätö on laskentaa vaativa tehtävä. Se vaatii koneen, jossa on 10–15 Gt VRAM-muistia, tai voit käyttää Colabin ilmaista Tesla T4 GPU -ajonaikaa.
Asenna nyt 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
Seuraava asia on ladata 4-bittinen kvantisoitu esikoulutettu malli Unslothilla.
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,
)
Tämä asentaa mallin paikallisesti. 4-bittisen mallin koko tulee olemaan noin 760 Mt.
Nyt hakea PEFT 4-bittiseen Tiny-Llama-malliin.
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
)
Valmistele tiedot
Seuraava vaihe on valmistella tietojoukko hienosäätöä varten. Kuten aiemmin mainitsin, käytämme puhdistettua Alpakan tietojoukko. Tämä on puhdistettu versio alkuperäisestä Alpaca-tietojoukosta. Se noudattaa ohje-syöttö-vastaus -muotoa. Tässä on esimerkki Alpaca-tiedoista
Valmistellaan nyt tietomme.
@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,)
Jaa tiedot juna- ja arviointitietoihin. Olen ottanut pieniä arviointitietoja, koska suurempi eval data hidastaa harjoittelua.
dataset_dict = dataset.train_test_split(test_size=0.004)
Määritä WandB
Määritä nyt painot ja painotukset nykyisessä suoritusajassasi.
# @title wandb init
import wandb
wandb.login()
Anna API-avain kirjautuaksesi sisään WandB:hen pyydettäessä.
Määritä ympäristömuuttujat.
%env WANDB_WATCH=all
%env WANDB_SILENT=true
Junamalli
Toistaiseksi olemme ladaneet 4-bittisen mallin, luoneet LoRA-kokoonpanon, valmistellut tietojoukon ja määrittäneet WandB:n. Seuraava askel on mallin kouluttaminen datan pohjalta. Tätä varten meidän on määritettävä kouluttaja Trl-kirjastosta. Käytämme Trl:n SFTraineria. Mutta ennen sitä alusta WandB ja määritä sopivat koulutusargumentit.
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")
Koulutusargumentit
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,
)
Tämä on tärkeää koulutuksen kannalta. Pidä grafiikkasuorittimen käyttö alhaisena pitämällä junan, eval erän ja gradientin kertyvän askeleen alhaisina. Logging_steps on vaiheiden määrä ennen kuin mittarit kirjataan WandB:hen.
Alusta nyt 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,
)
Aloita nyt harjoittelu.
trainer_stats = trainer.train()
wandb.finish()
Harjoitusajon aikana WandB seuraa harjoitus- ja arviointimittauksia. Käyt annetussa kojelautalinkissä ja näet sen reaaliajassa.
Tämä on kuvakaappaus juoksustani Colab-muistikirjalla.
Harjoituksen nopeus riippuu useista tekijöistä, mukaan lukien koulutus- ja eval-tietojen koot, harjoitus- ja eval-erän koosta sekä aikakausien lukumäärästä. Jos kohtaat grafiikkasuorittimen käyttöongelmia, yritä pienentää erän ja gradientin kertymisaskelkokoja. Junaerän koko = erän_koko_laitetta kohti * gradientin_keräysvaiheet. Ja optimointivaiheiden lukumäärä = koulutustietojen kokonaismäärä / eräkoko. Voit pelata parametreilla ja nähdä, mikä toimii paremmin.
Voit visualisoida harjoittelun koulutuksen ja arvioinnin menetyksen WandB-kojelaudassa.
Junan menetys
Eval Loss
Johtaminen
Voit tallentaa LoRA-sovittimet paikallisesti tai työntää ne HuggingFace-tietovarastoon.
model.save_pretrained("lora_model") # Local saving
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
Voit myös ladata tallennetun mallin levyltä ja käyttää sitä päättelyyn.
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)
Mallin vastausten suoratoistoon.
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 64)
Joten tässä oli kyse Tiny-Llama-mallin hienosäädöstä WandB-logoinnilla.
Tässä on Colab-muistikirja samoin.
Yhteenveto
Pienet LLM:t voivat olla hyödyllisiä otettaessa käyttöön tietokonerajoitetuissa laitteissa, kuten henkilökohtaisissa tietokoneissa, matkapuhelimissa ja muissa puettavissa laitteissa jne. Hienosäädön avulla nämä mallit voivat suorittaa paremmin loppupään tehtäviä. Tässä artikkelissa opimme hienosäätämään tietojoukon peruskielimallia.
Keskeiset ostokset
- Hienosäätö on prosessi, jossa valmiiksi koulutettu malli saadaan mukautumaan tiettyyn uuteen tehtävään.
- Tiny-Llama on LLM, jolla on vain 1.1 miljardia parametria, ja se on koulutettu 3 biljoonaan tokeniin.
- On olemassa erilaisia tapoja hienosäätää LLM:itä, kuten LoRA ja QLoRA.
- Unsloth on avoimen lähdekoodin alusta, joka tarjoaa CUDA-optimoituja LLM:itä nopeuttaakseen LLM:ien hienosäätöä.
- Weights and Biases (WandB) on työkalu ML-kokeiden seurantaan ja tallentamiseen.
Usein kysytyt kysymykset
V. Hienosäätö koneoppimisen, erityisesti syväoppimisen, yhteydessä on tekniikka, jossa otetaan esikoulutettu malli ja sovitetaan se uuteen, tiettyyn tehtävään.
V. On mahdollista hienosäätää pienempiä LLM:itä ilmaiseksi Colabissa Tesla T4 GPU:lla QLoRA:lla.
V. Hienosäätö parantaa huomattavasti LLM:n kykyä suorittaa loppupään tehtäviä, kuten roolileikkejä, koodin luomista jne.
A. Tiny-Llama, joka on koulutettu 3 biljoonalla tokenilla, on LLM, jolla on 1.1 B parametreja. Malli käyttää alkuperäistä Llama-2-arkkitehtuuria.
V. Unsloth on avoimen lähdekoodin työkalu, joka tarjoaa nopeamman ja tehokkaamman LLM:n hienosäädön optimoimalla GPU-ytimet Tritonilla.
Tässä artikkelissa näkyvä media ei ole Analytics Vidhyan omistuksessa, ja sitä käytetään tekijän harkinnan mukaan.
liittyvä
- SEO-pohjainen sisällön ja PR-jakelu. Vahvista jo tänään.
- PlatoData.Network Vertical Generatiivinen Ai. Vahvista itseäsi. Pääsy tästä.
- PlatoAiStream. Web3 Intelligence. Tietoa laajennettu. Pääsy tästä.
- PlatoESG. hiili, CleanTech, energia, ympäristö, Aurinko, Jätehuolto. Pääsy tästä.
- PlatonHealth. Biotekniikan ja kliinisten kokeiden älykkyys. Pääsy tästä.
- Lähde: https://www.analyticsvidhya.com/blog/2024/02/fine-tuning-a-tiny-llama-model-with-unsloth/
- :on
- :On
- :ei
- :missä
- $ YLÖS
- 1
- 11
- 12
- 15%
- 16
- 1b
- 258
- 32
- 7
- 8
- a
- A100
- pystyy
- Meistä
- Tili
- kertymä
- tarkkuus
- sopeuttaa
- sovitus
- lisätä
- Kaikki
- mahdollistaa
- Myös
- määrä
- an
- Analytics
- Analyysi Vidhya
- ja
- Kaikki
- api
- sovelluksen
- käyttää
- Hakeminen
- sopiva
- asianmukaisesti
- arkkitehtuuri
- OVAT
- perustelut
- noin
- artikkeli
- AS
- At
- auto
- avatarit
- b
- pohja
- perustua
- BE
- ollut
- ennen
- alle
- suotuisa
- Hyödyt
- PARAS
- Paremmin
- puolueellisuus
- harhat
- Miljardi
- Bitti
- bittiä
- tyhjä
- blogathon
- lyhyesti
- tuoda
- mutta
- by
- CAN
- kyvyt
- valmiudet
- pääoma
- tapauksissa
- Kategoria
- jutella
- Valita
- luokka
- koodi
- kompakti
- vertailukelpoinen
- täydellinen
- Täydentää
- tietokoneet
- käsitteet
- Konfigurointi
- määritetty
- kuluttaja
- Kuluttajalaitteet
- tausta
- keskustelut
- luoda
- luotu
- ratkaiseva
- Nykyinen
- Tällä hetkellä
- asiakassuhde
- Ajatusviiva
- kojelauta
- tiedot
- aineistot
- omistautunut
- syvä
- syvä oppiminen
- määritellä
- riippua
- riippuu
- sijoittaa
- levityspinnalta
- Johdannaiset
- kuvailee
- Detection
- vuoropuhelut
- eri
- harkinnan
- do
- alas
- Aikaisemmin
- reuna
- Tehokas
- tehokkuus
- tehokas
- muu
- syntyminen
- mahdollistaa
- kohdata
- Moottori
- Parantaa
- tarpeeksi
- kokonaisuus
- ympäristö
- aikakausia
- erityisesti
- olennainen
- jne.
- Eetteri (ETH)
- arviointi
- esimerkki
- Esimerkit
- kokeiluja
- tutkia
- tekijät
- FAIL
- väärä
- paljon
- nopeampi
- harvat
- vähemmän
- kellua
- kelluva
- seuraa
- varten
- muoto
- Ranska
- Ilmainen
- alkaen
- edelleen
- Kaksoset
- yleinen tarkoitus
- sukupolvi
- saada
- mennä
- tietty
- antaa
- Go
- GPU
- GPU
- suuri
- Tarvikkeet
- Olla
- tätä
- Korkea
- korkeampi
- pitää
- Miten
- Miten
- Kuitenkin
- HTTPS
- HalaaKasvot
- i
- if
- työkoneet
- tuoda
- tärkeä
- parantaa
- in
- Mukaan lukien
- panos
- tuloa
- asentaa
- sen sijaan
- ohjeet
- tarkoitettu
- tulee
- liittyy
- kysymykset
- IT
- jpg
- Pitää
- pito
- avain
- tuntemus
- Kumar
- Kieli
- suuri
- suurempi
- Liidit
- OPPIA
- oppinut
- oppiminen
- jättää
- vähemmän
- Lets
- Kirjasto
- pitää
- parrasvalot
- lineaarinen
- LINK
- liekki
- llm
- kuormitus
- lastaus
- paikallinen
- paikallisesti
- log
- kirjattu
- hakkuu
- pois
- Matala
- alentaa
- kone
- koneoppiminen
- tehdä
- Tekeminen
- hoitaa
- manuaalinen
- max-width
- Media
- Muisti
- mainitsi
- menetelmät
- Metrics
- ML
- Puhelinnumero
- matkapuhelimet
- malli
- mallit
- lisää
- tehokkaampi
- eniten
- moninkertainen
- täytyy
- my
- nimi
- Tarve
- Uusi
- seuraava
- Ei eristetty
- muistikirja
- numero
- of
- usein
- vanhempi
- on
- verkossa
- vain
- avoimen lähdekoodin
- OpenAI
- optimointi
- optimoitu
- optimoimalla
- or
- alkuperäinen
- OS
- Muut
- muuten
- meidän
- ulos
- ulostulo
- lähdöt
- yli
- omistuksessa
- Pakkauksissa
- pariksi
- parametri
- parametrit
- osa
- kulkea
- suorittaa
- esittävä
- henkilöstö
- Henkilökohtaiset tietokoneet
- puhelimet
- kuva
- foorumi
- Platon
- Platonin tietotieto
- PlatonData
- Pelaa
- Kohta
- Suosittu
- mahdollinen
- Tarkkuus
- Valmistella
- valmis
- prosessi
- tuotanto
- patentoitu
- tarjoaa
- julkaistu
- Työnnä
- Kysymyksiä ja vastauksia
- laatu
- R
- sijoitus
- reaaliaikainen
- vähentää
- vähentämällä
- vähentäminen
- julkaistu
- säilytyspaikka
- pyyntö
- Vaatii
- tutkimus
- vastaus
- vasteet
- palata
- Rooli
- RTX
- ajaa
- sama
- Säästä
- tallennettu
- tallentaa
- skaalaus
- tiede
- nähdä
- siemenet
- valita
- setti
- Lyhyt
- esitetty
- merkki
- koska
- Koko
- koot
- hidastuu
- pieni
- pienempiä
- erityinen
- nopeus
- jakaa
- seisoo
- Alkaa
- Vaihe
- Askeleet
- streaming
- taistelu
- merkittävä
- niin
- tuki
- Tukee
- ottaa
- otettava
- Tehtävä
- tehtävät
- tekniikka
- tekniikat
- Tesla
- testi
- teksti
- tekstin luominen
- kuin
- että
- -
- heidän
- Niitä
- sitten
- Siellä.
- Nämä
- ne
- asia
- tätä
- Kautta
- aika
- että
- yhdessä
- symbolinen
- tokens
- liian
- otti
- työkalu
- työkalut
- taskulamppu
- Yhteensä
- raita
- Seuranta
- Juna
- koulutettu
- koulutus
- muuntajat
- Biljoona
- Triton
- totta
- yrittää
- päivittäminen
- us
- Käyttö
- käyttää
- käytetty
- arvot
- versio
- kautta
- Vierailla
- havainnollistaa
- oli
- Tapa..
- tavalla
- we
- wearables
- verkko
- WebP
- paino
- HYVIN
- olivat
- Mitä
- Mikä on
- kun
- joka
- vaikka
- tulee
- with
- toimii
- kirjoittaa
- te
- Sinun
- zephyrnet