یکی از ابزارهای خفن برای فاینتونینگ مدلهای زبانی Axolotl عه،
خیلی ساده، Axolotl یه فریمورک اوپنسورس برای فاینتون کردن LLMهاست. تمرکزش روی اینه که بهترین و جدیدترین تکنیکها رو خیلی سریع در اختیارت بذاره. از مدلهای Llama و Qwen گرفته تا Gemma و حالا gpt-oss.
این فریمورک با بهینهسازیهای پیشرفتهای مثل FlashAttention برای محاسبات سریعتر attention، و gradient checkpointing برای صرفهجویی تو مصرف مموری، خودش رو مجهز کرده. قابلیتهایی مثل multipacking (استفاده بهینه از مموری با پک کردن چند سکانس کوتاه کنار هم) و RoPE scaling (برای کار با context lengthهای متغیر) هم جزو ویژگیهای استانداردشه.
نقطه قوت اصلی Axolotl، تواناییهاش توی distributed training هست. یعنی اگه بخوای روی چندتا GPU یا حتی چندتا سرور (multi-node) یه مدل غولپیکر رو ترین کنی، Axolotl با پشتیبانی از DeepSpeed (ZeRO stages 1-3) و FSDP (Fully Sharded Data Parallel) کارت رو راه میندازه.
Axolotl یا Unsloth؟ مسئله این است
هر دو ابزار عالین، ولی انتخاب بینشون بستگی به نیازت داره.
چرا باید Axolotl رو انتخاب کنی؟
مقیاسپذیری و Multi-GPU: اگه میخوای مدلهای واقعاً بزرگ رو روی چندین GPU ردهبالا فاینتون کنی، Axolotl بهترین گزینهست. استراتژیهای distributed training توش به بلوغ رسیدن، چیزی که Unsloth هنوز توش خیلی کار داره.
انعطافپذیری و کنترل کامل: Axolotl گزینههای کانفیگ خیلی زیادی برای کنترل دقیق پروسه ترینینگ بهت میده. از sequence parallelism برای contextهای خیلی طولانی گرفته تا یکپارچهسازی با ابزارهایی مثل Weights & Biases برای مانیتورینگ.
چه زمانی Unsloth برنده میشه؟
سرعت و بهینهسازی VRAM روی تک GPU: اگه سختافزار محدودی داری (مثلاً یه کارت گرافیک گیمینگ یا سرورهای قدیمیتر Colab)، Unsloth معجزه میکنه. با کرنلهای سفارشی که برای GPU نوشته، میتونه تا ۲-۵ برابر سریعتر باشه و تا ۸۰٪ VRAM کمتری مصرف کنه.
به نظر من، اگه اولویتت سرعت حداکثری و بازدهی روی یک یا دوتا GPU هست و با مدلهای محبوب کار میکنی، Unsloth کارت رو خیلی سریع و تمیز راه میندازه. اما برای کارهای تحقیقاتی، فاینتونینگ مدلهای عظیم و نیاز به کنترل کامل روی محیطهای distributed، قطعاً Axolotl برتری داره.
فاینتونینگ مدلهای GPT-OSS با Axolotl
اخیراً OpenAI دو مدل Mixture-of-Experts (MoE) به اسم gpt-oss-20B و gpt-oss-120B رو به صورت اوپنویت منتشر کرده. خبر خوب اینه که Axolotl خیلی سریع پشتیبانی از فاینتونینگ این مدلها رو اضافه کرده.
یکی از نکات مهمی که جامعه بهش رسیده اینه که تکنیکهای Parameter-Efficient Fine-Tuning (PEFT) مثل QLoRA، بهخصوص روی تسکهای پیچیده، عملکرد ضعیفتری نسبت به full-parameter fine-tuning دارن. برای همین Axolotl روی قابلیتهای distributed training خودش سرمایهگذاری کرده تا بتونی مدلهای 70B+ رو بدون افت کیفیت، به صورت کامل فاینتون کنی.
پروسه فاینتونینگ با Axolotl حول یک فایل کانفیگ YAML میچرخه که توش همهچیز رو تعریف میکنی.
نیازمندیهای سختافزاری:
QLoRA: برای این تکنیک روی مدل gpt-oss-20B، یه GPU با حدود ۱۶ تا ۲۴ گیگ VRAM کافیه.
Full Fine-Tuning (FFT): برای فاینتونینگ کامل، به سختافزار سنگین مثل H100 با ۸۰ گیگ VRAM نیاز داری. البته با استراتژیهایی مثل FSDP و offloading میشه مدل gpt-oss-20B رو روی دوتا GPU با ۲۴ گیگ VRAM هم ترین کرد.
مدل 120B: طبق داکیومنتهای Axolotl، میشه مدل gpt-oss-120B رو با FFT و offloading روی یک نود با ۸ تا H100 (هر کدوم ۸۰ گیگ) فاینتون کرد.
کانفیگ YAML:
توی فایل کانفیگ، base_model رو openai/gpt-oss-20b میذاری و دیتاست خودت رو مشخص میکنی. برای تکنیکهای مختلف، کانفیگهای متفاوتی وجود داره:
برای QLoRA، گزینهی load_in_4bit: true و adapter: qlora رو فعال میکنی.
برای FFT، این گزینهها رو حذف میکنی.
چون این مدلها MoE هستن، باید lora_target_modules رو روی لایههای درستی مثل gate_proj تنظیم کنی.
ویژگیهای جدید:
با آپدیتهای اخیر، Axolotl از FP8 هم پشتیبانی میکنه که مصرف مموری رو از این هم کمتر میکنه. همچنین با همکاری Hugging Face، امکان ترکیب Context Parallelism، Tensor Parallelism و FSDP برای ترین کردن مدلهای عظیم در مقیاس multi-node فراهم شده.
در کل، Axolotl خودش رو به عنوان یه ابزار جدی و قدرتمند برای کارهای بزرگ و تحقیقاتی ثابت کرده و اگه قصد داری مدلهای سنگین رو به صورت حرفهای فاینتون کنی، یکی از بهترین گزینههاست.
📃 بلاگ رسمی Hugging Face درباره ND Parallelism
📃 مثالهای کانفیگ برای فاینتونینگ GPT-OSS
🛠 Join @LLMEngineers Community
Post #164
1.08K
- 👍 8
- ❤ 4