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 فارسی»