LLM فارسی

Llama fine-tuning برای فارسی

Llama fine-tuning برای فارسی، راهنمای فارسی از مجموعهٔ «LLM فارسی» در وبلاگ آیرا. بازنویسی‌شده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

نوشتهٔ به‌روزرسانی: ۴ دقیقه مطالعه
تصویر مقالهٔ Llama fine-tuning برای فارسی

Llama یه مدل زبانی اوپن‌سورس از Metaه که هر کسی می‌تونه وزن‌هاش رو دانلود کنه، روی سرور خودش اجرا کنه، و، مهم‌تر از همه، روی داده‌های خودش fine-tune کنه. این یعنی می‌تونی یه Llama فارسی‌دان، با لحن خاص خودت، برای کارهای خاصت بسازی. این مقاله دقیقاً توضیح می‌ده چطور، با جزئیات واقعی، نه شعار.

چرا Llama؟ چرا نه GPT یا Claude؟

GPT-4 و Claude قوی‌ترن، این واقعیته. ولی وقتی داری fine-tuning می‌کنی، نمی‌تونی وزن‌های GPT-4 رو لمس کنی. OpenAI یه سرویس fine-tuning محدود داره (روی GPT-4o Mini) که هزینهٔ توکن‌محور داره و کنترل کامل نداری.

Llama فرق اساسی داره: وزن‌ها مال توئه. داده‌هات از سرورت بیرون نمی‌ره. می‌تونی روی GPU شخصی یا یه VPS ایرانی اجرا کنی. برای کاربر ایرانی که درگیر تحریم و مشکل پرداخت خارجی‌ست، این تفاوت عملیه.

نسخه‌های Llama که می‌شناسیشون

Llama 3.1 (۲۰۲۴)، جدیدترین نسل. در سایزهای 8B، 70B، و 405B. نسخهٔ 70B روی اکثر بنچمارک‌ها با GPT-4 Turbo رقابت می‌کنه.

Llama 3.2 (آبان ۱۴۰۳)، نسخه‌های 1B و 3B مخصوص اجرا روی گوشی و edge device. اولین Llama‌هایی که رسماً multimodal‌ان (1B و 3B متن‌فقط، 11B و 90B تصویر+متن).

Llama 3.3 (۲۰۲۵)، نسخهٔ 70B با کیفیت نزدیک به 405B. برای fine-tuning فارسی، 70B نقطهٔ شروع خوبیه، هم کافی قوی، هم قابل اجرا.

وضعیت فارسی در Llama خام

Llama 3.x فارسی می‌دونه، نه خوب، نه بد. در داده‌های آموزشیش متن فارسی بوده، ولی نسبت به انگلیسی خیلی کمتر. چند مشکل مشخص:

  • توکنیزاسیون گران، هر کلمهٔ فارسی اغلب ۳-۵ توکن مصرف می‌کنه در حالی که همتای انگلیسیش ۱-۲ توکنه. این هزینهٔ inference رو بالا می‌بره.
  • لهجه و محاوره، اگه بخوای مدل فارسی محاوره‌ای یا لحن خاصی داشته باشه، مدل خام کافی نیست.
  • حوزه‌های تخصصی، حقوق ایران، پزشکی فارسی، اصطلاحات فنی بومی، مدل خام اطلاعات کافی نداره.

Fine-tuning دقیقاً اینجا وارد می‌شه.

Fine-tuning چیست؟ (کوتاه و صادقانه)

وقتی یه LLM از صفر آموزش می‌بینه، صدها GPU برای ماه‌ها کار می‌کنن. Fine-tuning یه مرحلهٔ آموزش کوچیک‌تر روی یه مدل از پیش آموزش‌دیده‌ست. به‌جای ساختن از صفر، مدل رو با داده‌های خاص خودت «تنظیم دقیق» می‌کنی.

سه روش اصلی برای fine-tuning Llama:

۱. Full fine-tuning، همهٔ وزن‌ها تغییر می‌کنن. گران‌قیمت، نیاز به GPU پرحافظه (حداقل ۸۰GB برای 70B). برای اکثر کاربران عملی نیست.

۲. LoRA (Low-Rank Adaptation)، به‌جای تغییر همهٔ وزن‌ها، یه ماتریس کوچیک «adaptor» اضافه می‌کنی. هزینهٔ محاسباتی ۱۰-۲۰ برابر کمتر. برای Llama 8B روی یه A100 (80GB) یا دو A40 (48GB) ممکنه.

۳. QLoRA، ترکیب quantization با LoRA. مدل اصلی رو با دقت ۴ یا ۸ بیت ذخیره می‌کنی، بعد LoRA اعمال می‌کنی. با QLoRA می‌شه Llama 3.1 8B رو روی یه RTX 4090 (24GB) fine-tune کرد، سخت‌افزاری که در ایران قابل تهیه‌ست.

داده: مهم‌ترین چیزی که کسی بهش توجه نمی‌کنه

اغلب مقالات fine-tuning وقتشون رو صرف معرفی فریم‌ورک‌ها می‌کنن. ولی واقعیت اینه که کیفیت داده مهم‌تر از روش fine-tuning‌ه.

برای فارسی، چند منبع داده خوب:

  • مکالمات دستی، بهترین داده، ولی گرون‌ترین. چند صد مکالمهٔ باکیفیت فارسی درست می‌کنی.
  • Synthetic data با GPT-4، GPT-4 رو می‌گی مکالمات فارسی باکیفیت بسازه. بعد این‌ها رو برای fine-tuning Llama استفاده می‌کنی. روش «distillation» نام داره.
  • Persian Alpaca، چند پروژه داده‌های Alpaca رو به فارسی ترجمه کردن. کیفیتشون متفاوته.
  • OSCAR Persian، یه corpus بزرگ متن فارسی از Common Crawl. برای fine-tuning عمومی مناسبه.
  • داده‌های حوزه‌محور، اگه می‌خوای مدل حقوقی یا پزشکی فارسی بسازی، باید داده‌های تخصصی بسازی یا پیدا کنی.

فرمت استاندارد برای fine-tuning Llama 3، فرمت Instruct هست:

<|begin_of_text|><|start_header_id|>system<|end_header_id|>
تو یه دستیار متخصص فارسی هستی...
<|eot_id|><|start_header_id|>user<|end_header_id|>
سوال کاربر اینجاست
<|eot_id|><|start_header_id|>assistant<|end_header_id|>
جواب مطلوب اینجاست
<|eot_id|>

ابزارها و فریم‌ورک‌ها

Unsloth، سریع‌ترین و ساده‌ترین راه. ادعا می‌کنه fine-tuning رو ۲-۵ برابر سریع‌تر و ۷۰٪ کم‌حافظه‌تر می‌کنه. یه notebook آماده برای Llama 3 داره که روی Google Colab رایگان هم کار می‌کنه (ولی آهسته‌ست).

TRL از Hugging Face، کتابخونهٔ رسمی‌تر. SFTTrainer داخلش داری که straightforward‌ه. با Hugging Face ecosystem کاملاً compatible‌ه.

Axolotl، برای پروژه‌های serious‌تر. config-based‌ه، همه چیز رو در یه YAML تعریف می‌کنی.

LLaMA-Factory، رابط کاربری وب هم داره. برای کسانی که دوست ندارن زیاد کد بزنن.

یه مثال واقعی: fine-tuning Llama 8B با Unsloth

from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/Meta-Llama-3.1-8B-Instruct",
    max_seq_length = 2048,
    load_in_4bit = True,  # QLoRA
)

model = FastLanguageModel.get_peft_model(
    model,
    r = 16,           # rank LoRA
    lora_alpha = 16,
    target_modules = ["q_proj", "v_proj"],
)

بعد dataset فارسیت رو load می‌کنی و SFTTrainer رو راه می‌اندازی. کل فرآیند برای ۱۰۰۰ نمونهٔ داده روی A100 حدود ۳۰-۶۰ دقیقه طول می‌کشه.

ارزیابی مدل fine-tuned فارسی

بعد از fine-tuning، چطور بفهمیم مدل بهتر شده؟

  • مقایسهٔ دستی، ساده‌ترین راه. یه set از سوال‌ها رو به مدل خام و fine-tuned می‌دی، مقایسه می‌کنی.
  • Perplexity، متریک فنی که می‌گه مدل چقدر متن فارسی رو «عجیب» می‌بینه. کمتر بهتره.
  • بنچمارک‌های فارسی، پروژه‌هایی مثل Persian LLM Benchmarks دارن معیارهای ارزیابی می‌سازن.

محدودیت‌ها و چیزهایی که باید بدونی

Fine-tuning مشکلات کوچیک‌ترش نیست:

  • Catastrophic forgetting، اگه خیلی aggressive fine-tune کنی، مدل چیزهایی که قبلاً بلد بود رو فراموش می‌کنه.
  • Overfitting، با داده‌های کم، مدل فقط روی نمونه‌های آموزشی جواب می‌ده، نه سوال‌های جدید.
  • هزینه، اجرای مدل ۷۰B در production گران‌ه. اکثر کاربران با 8B شروع می‌کنن.

جمع‌بندی

Llama fine-tuning برای فارسی یه ابزار قدرتمند واقعیه، نه هایپ. با QLoRA و Unsloth، کار روی سخت‌افزار متوسط ممکن شده. مهم‌ترین چیز کیفیت داده‌های فارسی‌ته، نه انتخاب فریم‌ورک.

اگه کاربر نهایی هستی (نه توسعه‌دهنده)، نیازی به fine-tuning نداری، می‌تونی از ابزارهایی استفاده کنی که این کارها رو برات کردن. اگه توسعه‌دهنده‌ای، با نسخهٔ 8B شروع کن، QLoRA استفاده کن، و روی کیفیت داده وقت بذار.

همچنین بخوان

#LLM فارسی

ادامهٔ مسیر

همهٔ مقاله‌ها ←

بیشتر در «LLM فارسی»