Giriş
Llama ve Mistral modelleri piyasaya sürüldükten sonra açık kaynaklı LLM'ler ilgi odağını OpenAI'den uzaklaştırdı. O zamandan bu yana, Llama ve Mistral mimarisini temel alan ve GPT-3.5 Turbo, Claude, Gemini vb. gibi tescilli modellerle aynı performansı gösteren çok sayıda model piyasaya sürüldü. Ancak bu modeller, tüketici donanımlarında kullanılamayacak kadar büyük.
Ancak son zamanlarda yeni bir Yüksek Lisans sınıfı ortaya çıktı. Bunlar alt 7B parametre kategorisindeki Yüksek Lisans'lardır. Daha az parametre, onları tüketici donanımında çalıştırılabilecek kadar kompakt hale getirirken verimliliği 7B modelleriyle karşılaştırılabilir düzeyde tutar. Tiny-Llama-1B, Microsoft'un Phi-2 ve Alibaba'nın Qwen-3b'si gibi modeller, yerel olarak çalıştırılacak veya uçta konuşlandırılacak daha büyük modellerin harika alternatifleri olabilir. Aynı zamanda, herhangi bir alt görev için herhangi bir temel modelden en iyi sonucu elde etmek için ince ayar yapmak çok önemlidir.
Burada bir tabana nasıl ince ayar yapılacağını keşfedeceğiz Minik Lama modeli temizlenmiş bir Alpaka veri kümesinde.
Öğrenme hedefleri
- İnce ayarı ve bunun farklı yöntemlerini anlayın.
- Verimli ince ayar için araçlar ve teknikler hakkında bilgi edinin.
- Eğitim günlüklerini günlüğe kaydetmek için WandB hakkında bilgi edinin.
- Colab'daki Alpaka veri kümesinde Tiny-Llama'ya ince ayar yapın.
Bu makale, Veri Bilimi Blogatonu.
İçindekiler
Yüksek Lisans İnce Ayarı Nedir?
İnce ayar, önceden eğitilmiş bir modelin yeni bilgileri öğrenmesini sağlama sürecidir. Ön eğitimli model, büyük miktarda veri üzerinde eğitilmiş genel amaçlı bir modeldir. Ancak çoğu durumda amaçlandığı gibi performans göstermede başarısız olurlar ve ince ayar, modelin belirli kullanım durumlarına uyum sağlamasını sağlamanın en etkili yoludur. Örneğin, baz LLM'ler Tek turlu QA'da metin oluşturmada başarılısınız ancak sohbet modelleri gibi çok turlu konuşmalarda zorluk çekiyorsunuz.
Temel modellerin, çok turlu konuşmaları yürütebilmek için diyalogların transkriptleri üzerinde eğitilmesi gerekir. Önceden eğitilmiş modelleri farklı avatarlara dönüştürmek için ince ayar yapmak önemlidir. İnce ayarlı modellerin kalitesi, verilerin kalitesine ve temel model yeteneklerine bağlıdır. İnce ayarı modellemenin LoRA, QLoRA vb. gibi birden fazla yolu vardır.
Bu kavramlara kısaca değinelim.
LoRA
LoRA, tüm parametreleri orijinal ağırlık matrislerinin düşük dereceli bir yaklaşımıyla güncellemek yerine eğitilebilir birkaç parametreyi seçtiğimiz popüler bir ince ayar tekniği olan Düşük Sıralı Adaptasyon anlamına gelir. LoRA modelinde daha az bilgi işlem yoğunluğu olan donanımlarda daha hızlı ince ayar yapılabilir.
QLoRA
QLoRA veya Quantized LoRA, LoRA'dan bir adım daha ileridir. Tam duyarlıklı bir model yerine, LoRA'yı uygulamadan önce kayan nokta duyarlılığını azaltmak için model ağırlıklarını nicemler. Niceleme, daha yüksek bit değerlerinin daha düşük değerlere indirilmesi işlemidir. 4 bitlik bir niceleme işlemi, 16 bitlik ağırlıkların 4 bitlik kayan değerlere nicelendirilmesini içerir.
Modelin nicelendirilmesi, orijinal modelle karşılaştırılabilir bir doğrulukla model boyutunda önemli bir azalmaya yol açar. QLoRA'da nicelenmiş bir model alıp ona LoRA uyguluyoruz. Modeller, llama.cpp, AWQ, bitsandbytes vb. gibi birçok yolla nicelendirilebilir.
Unsloth ile İnce Ayar
Unsloth, popüler Büyük Dil Modellerine daha hızlı ince ayar yapmak için kullanılan açık kaynaklı bir platformdur. Llama-2 ve Mistral dahil olmak üzere popüler LLM'leri ve bunların Yi, Open-hermes vb. türevlerini destekler. Model eğitiminin hızını artırmak için özel triton çekirdekleri ve manuel bir arka pervane motoru uygular.
Burada, temel 4 bitlik kuantize edilmiş Tiny-Llama modeline ince ayar yapmak için Unsloth'u kullanacağız. Alpaka veri kümesi. Model, bitler ve baytlarla nicelendirilir ve çekirdekler, OpenAI'nin Triton'u ile optimize edilir.
WandB ile günlük kaydı
Makine öğreniminde eğitim ve değerlendirme ölçümlerinin günlüğe kaydedilmesi çok önemlidir. Bu bize tren seferinin tam bir resmini veriyor. Ağırlıklar ve Eğilimler (WandB), makine öğrenimi deneylerini görselleştirmek ve izlemek için kullanılan açık kaynaklı bir kitaplıktır. Eğitim metriklerini gerçek zamanlı olarak görselleştirmek için özel bir web uygulamasına sahiptir. Aynı zamanda üretim modellerini merkezi olarak yönetmemizi sağlar. WandB'yi yalnızca Tiny-Llama ince ayar çalışmamızı takip etmek için kullanacağız.
WandB'yi kullanmak için ücretsiz bir hesaba kaydolun ve bir API anahtarı.
Şimdi modelimize ince ayar yapmaya başlayalım.
Tiny-Llama'nın İnce Ayarı Nasıl Yapılır?
İnce ayar, hesaplama açısından yoğun bir iştir. 10-15 GB VRAM'a sahip bir makine gerektirir veya Colab'ın ücretsiz Tesla T4 GPU çalışma zamanını kullanabilirsiniz.
Şimdi Unsloth ve WandB'yi yükleyin
%%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
Bir sonraki şey, 4 bitlik nicelenmiş, önceden eğitilmiş modeli Unsloth ile yüklemektir.
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,
)
Bu, modeli yerel olarak yükleyecektir. 4 bitlik modelin boyutu ise 760 MB civarında olacak.
Şimdi başvur PEFT 4 bitlik Tiny-Llama modeline.
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
)
Verileri Hazırlayın
Bir sonraki adım, veri kümesini ince ayar için hazırlamaktır. Daha önce de belirttiğim gibi temizlenmiş bir Alpaka veri kümesi. Bu, orijinal Alpaca veri kümesinin temizlenmiş bir versiyonudur. Talimat-giriş-cevap formatını takip eder. İşte Alpaka verilerine bir örnek
Şimdi verilerimizi hazırlayalım.
@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,)
Şimdi verileri eğitme ve değerlendirme verilerine bölün. Daha büyük değerlendirme verileri eğitimi yavaşlatacağından küçük değerlendirme verileri aldım.
dataset_dict = dataset.train_test_split(test_size=0.004)
WandB'yi Yapılandır
Şimdi mevcut çalışma zamanınızda Ağırlıkları ve Önyargıları yapılandırın.
# @title wandb init
import wandb
wandb.login()
İstendiğinde WandB'de oturum açmak için API anahtarını sağlayın.
Ortam değişkenlerini ayarlayın.
%env WANDB_WATCH=all
%env WANDB_SILENT=true
Tren Modeli
Şu ana kadar 4 bitlik modeli yükledik, LoRA konfigürasyonunu oluşturduk, veri setini hazırladık ve WandB'yi yapılandırdık. Bir sonraki adım modeli veriler üzerinde eğitmektir. Bunun için Trl kütüphanesinden bir trainer tanımlamamız gerekiyor. Trl'den SFTrainer'ı kullanacağız. Ancak bundan önce WandB'yi başlatın ve uygun eğitim argümanlarını tanımlayın.
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")
Eğitim Argümanları
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,
)
Bu eğitim açısından önemlidir. GPU kullanımını düşük tutmak için eğitim, değerlendirme grubu ve degrade biriktirme adımlarını düşük tutun. logging_steps, ölçümlerin WandB'ye kaydedilmesinden önceki adım sayısıdır.
Şimdi SFTTrainer'ı başlatın.
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,
)
Şimdi eğitime başlayın.
trainer_stats = trainer.train()
wandb.finish()
Eğitim çalışması sırasında WandB, eğitim ve değerlendirme ölçümlerini izleyecektir. Verilen kontrol paneli bağlantısını ziyaret edersiniz ve gerçek zamanlı olarak görürsünüz.
Bu, Colab dizüstü bilgisayardaki çalışmamdan bir ekran görüntüsü.
Eğitim hızı, eğitim ve değerlendirme veri boyutları, eğitim ve değerlendirme toplu boyutu ve dönem sayısı dahil olmak üzere birçok faktöre bağlı olacaktır. GPU kullanım sorunlarıyla karşılaşırsanız toplu iş ve degrade birikimi adım boyutlarını azaltmayı deneyin. Tren toplu boyutu = Batch_size_per_device * degrade_accumulation_steps. Ve optimizasyon adımlarının sayısı = toplam eğitim verileri/topluluk boyutu. Parametrelerle oynayabilir ve hangisinin daha iyi çalıştığını görebilirsiniz.
Eğitiminizin eğitim ve değerlendirme kaybını WandB panosunda görselleştirebilirsiniz.
Tren Kaybı
Kaybı Değerlendir
Çıkarım
LoRA adaptörlerini yerel olarak kaydedebilir veya HuggingFace Deposuna gönderebilirsiniz.
model.save_pretrained("lora_model") # Local saving
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
Ayrıca kaydedilen modeli diskten yükleyebilir ve çıkarım yapmak için kullanabilirsiniz.
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)
Model yanıtlarının akışı için.
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 64)
Yani bu tamamen bir Tiny-Llama modeline WandB günlüğü ile ince ayar yapmakla ilgiliydi.
Burada ise Colab Not Defteri aynısı için.
Sonuç
Küçük Yüksek Lisanslar, kişisel bilgisayarlar, cep telefonları ve diğer giyilebilir cihazlar gibi bilgi işlem kısıtlamalı donanımlara dağıtım için faydalı olabilir. İnce ayar, bu modellerin aşağı yönlü görevlerde daha iyi performans göstermesine olanak tanır. Bu makalede, bir veri kümesinde temel dil modeline nasıl ince ayar yapılacağını öğrendik.
Önemli Noktalar
- İnce ayar, önceden eğitilmiş bir modelin belirli yeni bir göreve uyum sağlama sürecidir.
- Tiny-Llama, yalnızca 1.1 milyar parametreye sahip bir LLM'dir ve 3 trilyon token üzerinde eğitilmiştir.
- LoRA ve QLoRA gibi LLM'lere ince ayar yapmanın farklı yolları vardır.
- Unsloth, LLM'lerin ince ayarını hızlandırmak için CUDA için optimize edilmiş LLM'ler sağlayan açık kaynaklı bir platformdur.
- Ağırlıklar ve Önyargılar (WandB), ML deneylerini izlemeye ve depolamaya yönelik bir araçtır.
Sık Sorulan Sorular
C. Makine öğrenimi, özellikle de derin öğrenme bağlamında ince ayar, önceden eğitilmiş bir modeli alıp onu yeni, belirli bir göreve uyarladığınız bir tekniktir.
C. QLoRA ile Tesla T4 GPU üzerinden Colab'da daha küçük LLM'lere ücretsiz olarak ince ayar yapmak mümkündür.
C. İnce ayar, LLM'nin rol oynama, kod oluşturma vb. gibi alt görevleri gerçekleştirme yeteneğini büyük ölçüde artırır.
A. 3 trilyon jetonla eğitilmiş Minik Lama, 1.1B parametrelerine sahip bir LLM'dir. Model orijinal Llama-2 mimarisini benimsiyor.
C. Unsloth, GPU çekirdeklerini Triton ile optimize ederek daha hızlı ve daha verimli LLM ince ayarı sağlayan açık kaynaklı bir araçtır.
Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.
İlgili bağlantılar
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- PlatoData.Network Dikey Üretken Yapay Zeka. Kendine güç ver. Buradan Erişin.
- PlatoAiStream. Web3 Zekası. Bilgi Genişletildi. Buradan Erişin.
- PlatoESG. karbon, temiz teknoloji, Enerji, Çevre, Güneş, Atık Yönetimi. Buradan Erişin.
- PlatoSağlık. Biyoteknoloji ve Klinik Araştırmalar Zekası. Buradan Erişin.
- Kaynak: https://www.analyticsvidhya.com/blog/2024/02/fine-tuning-a-tiny-llama-model-with-unsloth/
- :vardır
- :dır-dir
- :olumsuzluk
- :Neresi
- $UP
- 1
- 11
- 12
- %15
- 16
- 1b
- 258
- 32
- 7
- 8
- a
- A100
- Yapabilmek
- Hakkımızda
- Hesap
- birikim
- doğruluk
- uyarlamak
- adaptasyon
- eklemek
- Türkiye
- veriyor
- Ayrıca
- miktar
- an
- analytics
- Analitik Vidhya
- ve
- herhangi
- api
- uygulamayı yükleyeceğiz
- Tamam
- Uygulanması
- uygun
- uygun olarak
- mimari
- ARE
- argümanlar
- etrafında
- göre
- AS
- At
- Oto
- Avatarlar
- b
- baz
- merkezli
- BE
- olmuştur
- önce
- altında
- faydalı
- faydaları
- İYİ
- Daha iyi
- önyargı
- önyargıları
- Milyar
- Bit
- bit
- boş
- blogathon
- kısaca
- getirmek
- fakat
- by
- CAN
- yetenekleri
- kabiliyet
- Başkent
- durumlarda
- Kategoriler
- sohbet
- Klinik
- sınıf
- kod
- kompakt
- karşılaştırılabilir
- tamamlamak
- Tamamladı
- bilgisayarlar
- kavramlar
- yapılandırma
- yapılandırılmış
- tüketici
- Tüketici Donanımı
- bağlam
- konuşmaları
- yaratmak
- çevrimiçi kurslar düzenliyorlar.
- çok önemli
- akım
- Şu anda
- görenek
- Dash
- gösterge paneli
- veri
- veri kümeleri
- adanmış
- derin
- derin öğrenme
- tanımlamak
- bağlı
- bağlıdır
- dağıtmak
- dağıtma
- Türevleri
- açıklar
- Bulma
- diyaloglar
- farklı
- takdir
- do
- aşağı
- Daha erken
- kenar
- Etkili
- verim
- verimli
- başka
- çıkma
- etkinleştirmek
- karşılaşma
- Motor
- Geliştirir
- yeterli
- varlık
- çevre
- devirler
- özellikle
- gerekli
- vb
- Eter (ETH)
- değerlendirme
- örnek
- örnekler
- deneyler
- keşfetmek
- faktörler
- FAIL
- yanlış
- uzak
- Daha hızlı
- az
- daha az
- Şamandıra
- yüzer
- şu
- İçin
- biçim
- Fransa
- Ücretsiz
- itibaren
- daha fazla
- İkizler burcu
- genel amaçlı
- nesil
- almak
- Git
- verilmiş
- verir
- Go
- GPU
- GPU'lar
- harika
- donanım
- Var
- okuyun
- Yüksek
- daha yüksek
- ambar
- Ne kadar
- Nasıl Yapılır
- Ancak
- HTTPS
- SarılmaYüz
- i
- if
- uygular
- ithalat
- önemli
- iyileştirmek
- in
- Dahil olmak üzere
- giriş
- girişler
- kurmak
- yerine
- talimatlar
- yönelik
- içine
- içerir
- sorunlar
- IT
- jpg
- tutmak
- koruma
- anahtar
- bilgi
- kumar
- dil
- büyük
- büyük
- İlanlar
- ÖĞRENİN
- öğrendim
- öğrenme
- Ayrılmak
- az
- Lets
- Kütüphane
- sevmek
- sahne ışığı
- doğrusal
- LINK
- lama
- lm
- yük
- yükleme
- yerel
- lokal olarak
- log
- giriş
- günlüğü
- kayıp
- Düşük
- alt
- makine
- makine öğrenme
- yapmak
- Yapımı
- yönetmek
- Manuel
- maksimum genişlik
- medya
- Bellek
- adı geçen
- yöntemleri
- Metrikleri
- ML
- Telefon
- cep telefonları
- model
- modelleri
- Daha
- daha verimli
- çoğu
- çoklu
- şart
- my
- isim
- gerek
- yeni
- sonraki
- Hayır
- defter
- numara
- of
- sık sık
- büyük
- on
- Online
- bir tek
- açık kaynak
- OpenAI
- optimizasyon
- optimize
- optimize
- or
- orijinal
- OS
- Diğer
- aksi takdirde
- bizim
- dışarı
- çıktı
- çıkışlar
- tekrar
- Sahip olunan
- Paketleri
- eşleştirilmiş
- parametre
- parametreler
- Bölüm
- geçmek
- yapmak
- icra
- kişisel
- Kişisel bilgisayarlar
- telefonlar
- resim
- platform
- Platon
- Plato Veri Zekası
- PlatoVeri
- OYNA
- Nokta
- Popüler
- mümkün
- Hassas
- Hazırlamak
- hazırlanmış
- süreç
- üretim
- özel
- sağlar
- yayınlanan
- Itmek
- Soru-Cevap
- kalite
- R
- rütbe
- gerçek zaman
- azaltmak
- azaltarak
- azalma
- serbest
- Depo
- talep
- gerektirir
- araştırma
- yanıt
- yanıtları
- dönüş
- Rol
- rtx
- koşmak
- aynı
- İndirim
- kaydedilmiş
- tasarruf
- ölçekleme
- Bilim
- görmek
- tohum
- seçmek
- set
- kısa
- gösterilen
- işaret
- beri
- beden
- boyutları
- yavaşlatır
- küçük
- daha küçük
- özel
- hız
- bölmek
- standları
- başlama
- adım
- Basamaklar
- akış
- Çabalama
- önemli
- böyle
- destek
- Destekler
- Bizi daha iyi tanımak için
- alınan
- Görev
- görevleri
- teknik
- teknikleri
- Tesla
- test
- metin
- metin oluşturma
- göre
- o
- The
- ve bazı Asya
- Onları
- sonra
- Orada.
- Bunlar
- onlar
- şey
- Re-Tweet
- İçinden
- zaman
- için
- birlikte
- simge
- Jeton
- çok
- aldı
- araç
- araçlar
- meşale
- Toplam
- iz
- Takip
- Tren
- eğitilmiş
- Eğitim
- transformatörler
- Trilyon
- Triton
- gerçek
- denemek
- güncellenmesi
- us
- kullanım
- kullanım
- Kullanılmış
- Değerler
- versiyon
- üzerinden
- Türkiye Dental Sosyal Medya Hesaplarından bizi takip edebilirsiniz.
- görselleştirmek
- oldu
- Yol..
- yolları
- we
- takılabilir aksesuarlar
- ağ
- webp
- ağırlık
- İYİ
- vardı
- Ne
- Nedir
- ne zaman
- hangi
- süre
- irade
- ile
- çalışır
- yazmak
- sen
- zefirnet