معرفی
پس از انتشار مدلهای Llama و Mistral، LLMهای منبع باز، توجه به OpenAI را به خود جلب کردند. از آن زمان، چندین مدل بر اساس معماری Llama و Mistral منتشر شدهاند که عملکردی برابر با مدلهای اختصاصی مانند GPT-3.5 Turbo، Claude، Gemini و غیره دارند.
اما اخیراً یک کلاس جدید از LLM ها ظهور کرده است. اینها LLMها در دسته پارامترهای زیر 7B هستند. پارامترهای کمتر آنها را به اندازه کافی فشرده میکند تا در سختافزار مصرفکننده اجرا شوند و در عین حال راندمان را با مدلهای 7B مقایسه کنند. مدلهایی مانند Tiny-Llama-1B، Phi-2 مایکروسافت و Qwen-3b علیبابا میتوانند جایگزینهای خوبی برای مدلهای بزرگتر برای اجرای محلی یا استقرار در لبه باشند. در عین حال، تنظیم دقیق برای به دست آوردن بهترین نتیجه از هر مدل پایه برای هر کار پایین دستی بسیار مهم است.
در اینجا، نحوه تنظیم دقیق پایه را بررسی خواهیم کرد مدل Tiny-Llama روی یک مجموعه داده آلپاکا تمیز شده
اهداف یادگیری
- تنظیم دقیق و روش های مختلف آن را بشناسید.
- با ابزارها و تکنیک های تنظیم دقیق کارآمد آشنا شوید.
- درباره WandB برای ثبت گزارش های آموزشی بیاموزید.
- Tiny-Llama را روی مجموعه داده های Alpaca در Colab تنظیم کنید.
این مقاله به عنوان بخشی از بلاگاتون علم داده.
جدول محتوا
LLM Fine-Tuning چیست؟
تنظیم دقیق فرآیند ساخت یک مدل از پیش آموزش دیده برای یادگیری دانش جدید است. مدل از پیش آموزش دیده یک مدل همه منظوره است که بر روی حجم زیادی از داده ها آموزش داده شده است. با این حال، در بیشتر موارد، آنطور که در نظر گرفته شده است، عمل نمیکنند، و تنظیم دقیق مؤثرترین راه برای تطبیق مدل با موارد استفاده خاص است. به عنوان مثال، پایه LLMs در تولید متن در QA تک نوبتی خوب عمل کنید، اما با مکالمات چند نوبتی مانند مدلهای چت مشکل دارید.
مدلهای پایه باید روی رونوشتهای دیالوگها آموزش ببینند تا بتوانند مکالمات چند نوبتی را برگزار کنند. تنظیم دقیق برای قالبگیری مدلهای از پیش آموزشدیده در آواتارهای مختلف ضروری است. کیفیت مدل های تنظیم شده به کیفیت داده ها و قابلیت های مدل پایه بستگی دارد. راههای مختلفی برای مدلسازی تنظیم دقیق وجود دارد، مانند LoRA، QLoRA و غیره.
اجازه دهید به طور خلاصه به این مفاهیم بپردازیم.
LoRA
LoRA مخفف Low-rank Adaptation است، یک تکنیک تنظیم دقیق محبوب که در آن به جای به روز رسانی تمام پارامترها از طریق تقریب رتبه پایین ماتریس های وزن اصلی، چند پارامتر قابل آموزش را انتخاب می کنیم. مدل LoRA را میتوان روی سختافزاری با محاسبات کمتر سریعتر تنظیم کرد.
QLoRA
QLoRA یا Quantized LoRA یک گام فراتر از LoRA است. به جای یک مدل با دقت کامل، وزن مدل را برای کاهش دقت ممیز شناور قبل از اعمال LoRA کوانتیزه می کند. کوانتیزه کردن فرآیند کاهش مقادیر بیت بالاتر به مقادیر پایین تر است. یک فرآیند کوانتیزاسیون 4 بیتی شامل کمی کردن وزن های 16 بیتی به مقادیر شناور 4 بیتی است.
کمی کردن مدل منجر به کاهش قابل توجهی در اندازه مدل با دقت قابل مقایسه با مدل اصلی می شود. در QLoRA، یک مدل کوانتیزه شده را می گیریم و LoRA را روی آن اعمال می کنیم. مدلها را میتوان به روشهای مختلف، از جمله از طریق llama.cpp، AWQ، bitsandbytes و غیره کوانتیزه کرد.
تنظیم دقیق با Unsloth
Unsloth یک پلت فرم منبع باز برای تنظیم دقیق مدل های محبوب زبان بزرگ است. این LLM های محبوب، از جمله Llama-2 و Mistral، و مشتقات آنها مانند Yi، Open-hermes، و غیره را پشتیبانی می کند. این هسته های تریتون سفارشی و یک موتور پشتی دستی را برای بهبود سرعت آموزش مدل پیاده سازی می کند.
در اینجا، ما از Unsloth برای تنظیم دقیق یک مدل پایه 4 بیتی کوانتیزه Tiny-Llama در آلپاکا مجموعه داده مدل با بیت ها و بایت ها کوانتیزه می شود و هسته ها با تریتون OpenAI بهینه می شوند.
ورود به سیستم با WandB
در یادگیری ماشینی، ثبت معیارهای آموزش و ارزیابی بسیار مهم است. این یک تصویر کامل از حرکت قطار به ما می دهد. وزن ها و سوگیری ها (WandB) یک کتابخانه منبع باز برای تجسم و ردیابی آزمایش های یادگیری ماشین است. این یک برنامه وب اختصاصی برای تجسم معیارهای آموزشی در زمان واقعی دارد. همچنین به ما امکان می دهد مدل های تولید را به صورت متمرکز مدیریت کنیم. ما از WandB فقط برای ردیابی تنظیم دقیق Tiny-Llama خود استفاده خواهیم کرد.
برای استفاده از WandB، برای یک حساب کاربری رایگان ثبت نام کنید و یک حساب کاربری ایجاد کنید کلید ای پی ای.
حالا بیایید تنظیم دقیق مدل خود را شروع کنیم.
چگونه Tiny-Llama را دقیق تنظیم کنیم؟
تنظیم دقیق یک کار محاسباتی سنگین است. به دستگاهی با 10 تا 15 گیگابایت VRAM نیاز دارد یا میتوانید از زمان اجرا رایگان تسلا T4 GPU Colab استفاده کنید.
اکنون Unsloth و 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
مورد بعدی این است که مدل 4 بیتی کوانتیزه شده از پیش آموزش دیده را با 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,
)
با این کار مدل به صورت محلی نصب می شود. اندازه مدل 4 بیتی حدود 760 مگابایت خواهد بود.
اکنون درخواست دهید PEFT به مدل 4 بیتی 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
)
داده ها را آماده کنید
مرحله بعدی آماده سازی مجموعه داده برای تنظیم دقیق است. همانطور که قبلاً اشاره کردم، ما از پاک شده استفاده خواهیم کرد مجموعه داده آلپاکا. این یک نسخه پاک شده از مجموعه داده اصلی Alpaca است. از فرمت instruction-input-response پیروی می کند. در اینجا نمونه ای از داده های آلپاکا آورده شده است
حالا بیایید داده های خود را آماده کنیم.
@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,)
اکنون داده ها را به داده های قطار و eval تقسیم کنید. من داده های ارزشی کوچک را گرفته ام زیرا داده های ارزشی بزرگتر آموزش را کند می کند.
dataset_dict = dataset.train_test_split(test_size=0.004)
WandB را پیکربندی کنید
اکنون، Weights and Biases را در زمان اجرا فعلی خود پیکربندی کنید.
# @title wandb init
import wandb
wandb.login()
در صورت درخواست، کلید API را برای ورود به WandB ارائه دهید.
تنظیم متغیرهای محیطی
%env WANDB_WATCH=all
%env WANDB_SILENT=true
مدل قطار
تاکنون مدل 4 بیتی را بارگذاری کرده ایم، پیکربندی LoRA را ایجاد کرده ایم، مجموعه داده را آماده کرده ایم و WandB را پیکربندی کرده ایم. مرحله بعدی آموزش مدل بر روی داده است. برای آن، باید یک مربی از کتابخانه Trl تعریف کنیم. ما از SFTrainer از Trl استفاده خواهیم کرد. اما قبل از آن، WandB را مقداردهی اولیه کنید و آرگومان های آموزشی مناسب را تعریف کنید.
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")
استدلال های آموزشی
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,
)
این برای آموزش مهم است. برای پایین نگه داشتن استفاده از GPU، مراحل انباشته قطار، eval batch و گرادیان را پایین نگه دارید. logging_steps تعداد مراحل قبل از ثبت معیارها در WandB است.
اکنون 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,
)
حالا آموزش را شروع کنید.
trainer_stats = trainer.train()
wandb.finish()
در طول دوره آموزشی، WandB معیارهای آموزش و ارزیابی را ردیابی خواهد کرد. شما به پیوند داشبورد داده شده مراجعه کنید و آن را در زمان واقعی مشاهده کنید.
این یک اسکرین شات از اجرای من روی یک نوت بوک کولب است.
سرعت آموزش به عوامل متعددی از جمله اندازه دادههای آموزشی و ارزشی، اندازه دستهای قطار و ارزش و تعداد دورهها بستگی دارد. اگر با مشکلات استفاده از GPU مواجه شدید، سعی کنید اندازه مرحله جمع آوری دسته ای و گرادیان را کاهش دهید. اندازه دسته قطار = batch_size_per_device * gradient_accumulation_steps. و تعداد مراحل بهینه سازی = کل داده های آموزشی / اندازه دسته ای. می توانید با پارامترها بازی کنید و ببینید کدام بهتر کار می کند.
شما می توانید از دست دادن آموزش و ارزیابی آموزش خود را در داشبورد WandB تجسم کنید.
از دست دادن قطار
باخت اوال
استنباط
می توانید آداپتورهای LoRA را به صورت محلی ذخیره کنید یا آنها را به مخزن HuggingFace فشار دهید.
model.save_pretrained("lora_model") # Local saving
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
همچنین می توانید مدل ذخیره شده را از روی دیسک بارگذاری کنید و از آن برای استنتاج استفاده کنید.
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)
برای پخش پاسخ های مدل.
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 64)
بنابراین، همه چیز در مورد تنظیم دقیق مدل Tiny-Llama با ثبت WandB بود.
در اینجا دفترچه یادداشت کولب برای همین
نتیجه
LLM های کوچک می توانند برای استقرار بر روی سخت افزارهای محدود محاسباتی، مانند رایانه های شخصی، تلفن های همراه، و سایر پوشیدنی ها و غیره مفید باشند. تنظیم دقیق به این مدل ها اجازه می دهد تا در کارهای پایین دستی بهتر عمل کنند. در این مقاله، نحوه تنظیم دقیق مدل زبان پایه بر روی یک مجموعه داده را آموختیم.
گیرنده های کلیدی
- تنظیم دقیق فرآیندی است که در آن یک مدل از پیش آموزش دیده با یک کار جدید سازگار می شود.
- Tiny-Llama یک LLM با تنها 1.1 میلیارد پارامتر است و بر روی 3 تریلیون توکن آموزش داده شده است.
- راههای مختلفی برای تنظیم دقیق LLM وجود دارد، مانند LoRA و QLoRA.
- Unsloth یک پلت فرم منبع باز است که LLM های بهینه شده CUDA را برای سرعت بخشیدن به تنظیم دقیق LLM ها ارائه می دهد.
- Weights and Biases (WandB) ابزاری برای ردیابی و ذخیره آزمایشات ML است.
پرسش و پاسخهای متداول
الف. تنظیم دقیق، در زمینه یادگیری ماشین، به ویژه یادگیری عمیق، تکنیکی است که در آن یک مدل از پیش آموزش دیده را انتخاب میکنید و آن را با یک کار جدید و خاص تطبیق میدهید.
A. تنظیم دقیق LLM های کوچکتر به صورت رایگان در Colab از طریق GPU Tesla T4 با QLoRA امکان پذیر است.
الف. تنظیم دقیق توانایی LLM را برای انجام وظایف پایین دستی، مانند ایفای نقش، تولید کد، و غیره بسیار افزایش می دهد.
الف. Tiny-Llama آموزش دیده بر روی 3 تریلیون توکن یک LLM با پارامترهای 1.1B است. این مدل از معماری اصلی Llama-2 استفاده می کند.
پاسخ.
رسانه نشان داده شده در این مقاله متعلق به Analytics Vidhya نیست و به صلاحدید نویسنده استفاده می شود.
مربوط
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- PlatoData.Network Vertical Generative Ai. به خودت قدرت بده دسترسی به اینجا.
- PlatoAiStream. هوش وب 3 دانش تقویت شده دسترسی به اینجا.
- PlatoESG. کربن ، CleanTech، انرژی، محیط، خورشیدی، مدیریت پسماند دسترسی به اینجا.
- PlatoHealth. هوش بیوتکنولوژی و آزمایشات بالینی. دسترسی به اینجا.
- منبع: https://www.analyticsvidhya.com/blog/2024/02/fine-tuning-a-tiny-llama-model-with-unsloth/
- : دارد
- :است
- :نه
- :جایی که
- $UP
- 1
- 11
- 12
- ٪۱۰۰
- 16
- 1b
- 258
- 32
- 7
- 8
- a
- A100
- قادر
- درباره ما
- حساب
- تجمع
- دقت
- وفق دادن
- انطباق
- اضافه کردن
- معرفی
- اجازه می دهد تا
- همچنین
- مقدار
- an
- علم تجزیه و تحلیل
- تجزیه و تحلیل Vidhya
- و
- هر
- API
- نرم افزار
- درخواست
- با استفاده از
- مناسب
- به درستی
- معماری
- هستند
- استدلال
- دور و بر
- مقاله
- AS
- At
- خودکار
- آواتار ها
- b
- پایه
- مستقر
- BE
- بوده
- قبل از
- در زیر
- مفید
- مزایای
- بهترین
- بهتر
- تعصب
- تعصبات
- بیلیون
- بیت
- بیت
- سفید
- بلاگاتون
- بطور خلاصه
- به ارمغان بیاورد
- اما
- by
- CAN
- قابلیت های
- قابلیت
- سرمایه
- موارد
- دسته بندی
- گپ
- را انتخاب کنید
- کلاس
- رمز
- جمع و جور
- قابل مقایسه
- کامل
- تکمیل شده
- کامپیوتر
- مفاهیم
- پیکر بندی
- پیکربندی
- مصرف کننده
- سخت افزار مصرف کننده
- زمینه
- گفتگو
- ایجاد
- ایجاد شده
- بسیار سخت
- جاری
- در حال حاضر
- سفارشی
- خط تیره
- داشبورد
- داده ها
- مجموعه داده ها
- اختصاصی
- عمیق
- یادگیری عمیق
- تعريف كردن
- بستگی دارد
- بستگی دارد
- گسترش
- استقرار
- مشتقات
- توصیف
- کشف
- گفتگوها
- مختلف
- اختیار
- do
- پایین
- پیش از آن
- لبه
- موثر
- بهره وری
- موثر
- دیگر
- خروج
- قادر ساختن
- رویارویی
- موتور
- افزایش می یابد
- کافی
- موجودیت
- محیط
- دوره ها
- به خصوص
- ضروری است
- و غیره
- اتر (ETH)
- ارزیابی
- مثال
- مثال ها
- آزمایش
- اکتشاف
- عوامل
- FAIL
- غلط
- بسیار
- سریعتر
- کمی از
- کمتر
- شناور
- شناور
- به دنبال آن است
- برای
- قالب
- فرانسه
- رایگان
- از جانب
- بیشتر
- برج جوزا
- همه منظوره
- نسل
- دریافت کنید
- رفتن
- داده
- می دهد
- Go
- گوگل
- GPU
- GPU ها
- بزرگ
- سخت افزار
- آیا
- اینجا کلیک نمایید
- زیاد
- بالاتر
- نگه داشتن
- چگونه
- چگونه
- اما
- HTTPS
- صورت در آغوش گرفته
- i
- if
- پیاده سازی می کند
- واردات
- مهم
- بهبود
- in
- از جمله
- ورودی
- ورودی
- نصب
- در عوض
- دستورالعمل
- مورد نظر
- به
- شامل
- مسائل
- IT
- JPG
- نگاه داشتن
- نگهداری
- کلید
- دانش
- کومار
- زبان
- بزرگ
- بزرگتر
- منجر می شود
- یاد گرفتن
- آموخته
- یادگیری
- ترک کردن
- کمتر
- اجازه می دهد تا
- کتابخانه
- پسندیدن
- توجه ویژه
- خطی
- ارتباط دادن
- پشم لاما
- llm
- بار
- بارگیری
- محلی
- به صورت محلی
- ورود به سیستم
- سیستم وارد
- ورود به سیستم
- خاموش
- کم
- کاهش
- دستگاه
- فراگیری ماشین
- ساخت
- ساخت
- مدیریت
- کتابچه راهنمای
- حداکثر عرض
- رسانه ها
- حافظه
- ذکر شده
- روش
- متریک
- ML
- موبایل
- گوشی های تلفن همراه
- مدل
- مدل
- بیش
- کارآمدتر
- اکثر
- چندگانه
- باید
- my
- نام
- نیاز
- جدید
- بعد
- هیچ
- دفتر یادداشت
- عدد
- of
- غالبا
- بزرگتر
- on
- آنلاین
- فقط
- منبع باز
- OpenAI
- بهینه سازی
- بهینه
- بهینه سازی
- or
- اصلی
- OS
- دیگر
- در غیر این صورت
- ما
- خارج
- تولید
- خروجی
- روی
- متعلق به
- بسته
- زوج
- پارامتر
- پارامترهای
- بخش
- عبور
- انجام دادن
- انجام
- شخصی
- کامپیوترهای شخصی
- گوشی های
- تصویر
- سکو
- افلاطون
- هوش داده افلاطون
- PlatoData
- بازی
- نقطه
- محبوب
- ممکن
- دقت
- آماده
- آماده شده
- روند
- تولید
- اختصاصی
- فراهم می کند
- منتشر شده
- فشار
- پرسش و پاسخ
- کیفیت
- R
- رتبه بندی
- زمان واقعی
- كاهش دادن
- کاهش
- کاهش
- منتشر شد
- مخزن
- درخواست
- نیاز
- تحقیق
- پاسخ
- پاسخ
- برگشت
- نقش
- RTX
- دویدن
- همان
- ذخیره
- نگهداری می شود
- صرفه جویی کردن
- مقیاس گذاری
- علم
- دیدن
- دانه
- را انتخاب کنید
- تنظیم
- کوتاه
- نشان داده شده
- امضاء
- پس از
- اندازه
- اندازه
- کند می شود
- کوچک
- کوچکتر
- خاص
- سرعت
- انشعاب
- می ایستد
- شروع
- گام
- مراحل
- جریان
- مبارزه
- قابل توجه
- چنین
- پشتیبانی
- پشتیبانی از
- گرفتن
- صورت گرفته
- کار
- وظایف
- تکنیک
- تکنیک
- تسلا
- آزمون
- متن
- تولید متن
- نسبت به
- که
- La
- شان
- آنها
- سپس
- آنجا.
- اینها
- آنها
- چیز
- این
- از طریق
- زمان
- به
- با هم
- رمز
- نشانه
- هم
- در زمان
- ابزار
- ابزار
- مشعل
- جمع
- مسیر
- پیگردی
- قطار
- آموزش دیده
- آموزش
- ترانسفورماتور
- تریلیون
- تریتون
- درست
- امتحان
- به روز رسانی
- us
- استفاده
- استفاده کنید
- استفاده
- ارزشها
- نسخه
- از طريق
- بازدید
- تجسم
- بود
- مسیر..
- راه
- we
- پوشیدنی
- وب
- وب سایت
- وزن
- خوب
- بود
- چی
- چه شده است
- چه زمانی
- که
- در حین
- اراده
- با
- با این نسخهها کار
- نوشتن
- شما
- شما
- زفیرنت