پرش به محتوای اصلی
پرش به محتوای مقاله

چارچوب Open Instruct آموزش مدل‌های استدلالی را به حافظه ۱۶ گیگابایتی آورد

·۲۱ مرداد ۱۴۰۵۱۲ دقیقه مطالعه۲ بازدید
راهنما
آموزش پسا Tulu 3 با SFT، DPO، RLVR، GRPO و ارزیابی مبتنی بر تأییدکننده
آموزش پسا Tulu 3 با SFT، DPO، RLVR، GRPO و ارزیابی مبتنی بر تأییدکننده
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

امکان اجرای کامل چرخه SFT، DPO و GRPO (که پیش‌تر نیازمند خوشه‌های توزیع‌شده بود) در یک محیط تک-GPU با حافظه ۱۶ گیگابایتی.

تصور کنید بتوانید یک مدل زبانی را برای استدلال ریاضی پیشرفته آموزش دهید، بدون آنکه به خوشه‌های عظیم پردازشی یا بودجه‌های میلیونی نیاز داشته باشید. اکنون با چارچوب Open Instruct، هر توسعه‌دهنده‌ای که یک کارت گرافیک ۱۶ گیگابایتی دارد، می‌تواند چرخه کامل پس‌آموزش (Post-training) را روی سیستم شخصی خود اجرا کند. این قابلیت از طریق ساده‌سازی استک آموزشی پیچیده Tulu 3 توسط AllenAI فراهم شده است تا در محیط‌های در دسترس مانند گوگل کولب (Google Colab) قابل اجرا باشد.

به نقل از آموزش‌های منتشرشده در هفته جاری توسط Marktechpost، این ابزار پیچیدگی‌های آموزشی مدل Tulu 3 را بهینه کرده است. در دنیای مدل‌های زبانی، پس‌آموزش — که شبیه به دوره تخصص یک پزشک پس از فارغ‌التحصیلی از دانشگاه است تا در یک حوزه خاص خبره شود — معمولاً نیازمند ابزارهای سنگینی مثل vLLM، Ray actors یا DeepSpeed است تا بار حافظه را مدیریت کنند. این موضوع برای توسعه‌دهندگان مستقل یک دیوار سخت‌افزاری ایجاد کرده بود که یادگیری تقویتی را تقریباً غیرممکن می‌کرد.

همان‌طور که در تحلیل‌های پیشین ما درباره‌ی بهینه‌سازی مدل‌های کوچک اشاره کردیم، کاهش اثر این دیوار سخت‌افزاری، کلید دموکراتیزه کردن هوش مصنوعی است. Open Instruct این کار را با جایگزینی مؤلفه‌های توزیع‌شده و سنگین — مانند صف‌های رول‌اوت (rollout queues) غیرهمزمان — با پیاده‌سازی‌های سبک Hugging Face و PyTorch انجام داده است.

این خط لوله آموزشی بر روی مدل Qwen2.5-0.5B-Instruct متمرکز است تا آن را از یک مدل ساده‌ی پیروی از دستورات به یک مدل استدلالی در ریاضیات (با استفاده از مجموعه داده GSM8K) تبدیل کند. هدف نهایی، انتقال مدل از مرحله پیروی ابتدایی از دستورات به مرحله استدلال ریاضی تأیید شده است.

محیط و تنظیمات فنی

برای گنجاندن استک Tulu 3 در حافظه ۱۶ گیگابایتی، این سیستم به‌جای بارگذاری کل کتابخانه، تنها توابع زیان (Loss functions) و ابزارهای ضروری را به‌صورت گزینشی از مخزن Open Instruct فراخوانی می‌کند. این استراتژی باعث می‌شود سربار حافظه ناشی از استک کامل آموزش توزیع‌شده حذف شود اما منطق اصلی بهینه‌سازی حفظ گردد.

  • وابستگی‌ها: این سیستم به مجموعه‌ای از بسته‌های خاص نیاز دارد که شامل peft برای تنظیم کارآمد با پارامتر اندک، accelerate برای توزیع بار، ray برای مدیریت منابع، wandb برای پایش، beaker-py و مجموعه‌ای از کتابخانه‌های تخصصی مانند langdetect==1.0.9 ،immutabledict==1.2.0 ،nltk ،absl-py ،sympy ،antlr4-python3-runtime==4.11 و tiktoken است.
  • مدیریت دقت: سیستم به‌طور خودکار قابلیت‌های GPU را شناسایی می‌کند تا بهینه‌ترین نوع داده (dtype) را برای autocast انتخاب کند. اگر سخت‌افزار از معماری Ampere یا جدیدتر باشد (که از طریق بررسی torch.cuda.get_device_properties(0).major >= 8 شناسایی می‌شود)، از torch.bfloat16 استفاده می‌کند. در غیر این صورت، به torch.float16 باز می‌گردد. همچنین، یک GradScaler به‌طور خاص زمانی فعال می‌شود که AMP_DTYPE روی torch.float16 باشد تا از پدیده underflow جلوگیری شود.
  • استخراج ابزارها: به‌جای وارد کردن کل کتابخانه، خط لوله از مکانیزم oi_load برای استخراج توابع خاص مستقیماً از فایل‌های منبع استفاده می‌کند. این توابع شامل dpo_loss و _get_batch_logps از فایل dpo_utils.py ،calculate_per_token_logps از padding_free_collator.py ،masked_mean از rl_utils.py ،estimate_kl از model_utils.py و همچنین GRPOLossType و compute_grpo_loss از grpo_utils.py است.

آماده‌سازی داده‌ها و پیکربندی

تمام مراحل توسط یک کلاس پیکربندی مرکزی (CFG) مدیریت می‌شود که هایپرپارامترهای هر سه مرحله را تعریف می‌کند. برای مدل پایه، طول توالی حداکثری (max_seq_len) روی ۶۴۰ و مقدار seed روی ۴۲ برای بازتولیدپذیری نتایج تنظیم شده است.

  • تنظیمات SFT: ۱۹۲ نمونه آموزشی (n_sft)، ۴۰ گام، اندازه میکرو-بچ (micro-batch size) برابر ۲، تجمع گرادیان (gradient accumulation) برابر ۴ و نرخ یادگیری 1e-4.
  • تنظیمات DPO: ۹۶ نمونه (n_dpo)، ۲۴ گام، اندازه میکرو-بچ برابر ۱، تجمع گرادیان برابر ۴، نرخ یادگیری 5e-5 و مقدار بتا (beta) برابر ۰.۱.
  • تنظیمات GRPO: ۶ تکرار، ۴ پرامپت در هر تکرار، ۴ نمونه برای هر پرامپت، ۲ اپوک داخلی، نرخ یادگیری 2e-5 و مقدار KL beta برابر ۰.۰۲.

داده‌ها از مجموعه openai/gsm8k استخراج شده و با یک پرامپت سیستمی به فرمت گفتگویی تبدیل می‌شوند: «شما یک دستیار ریاضی دقیق هستید. گام به گام استدلال کنید و سپس با عبارت 'The answer is N' پاسخ را به پایان برسانید.»

جزئیات تبدیل داده‌ها

  • فرمت‌بندی SFT: تابع as_messages ردیف‌های GSM8K را به لیستی از نقش‌ها (سیستم، کاربر، دستیار) تبدیل می‌کند. پاسخ دستیار از تگ‌های <<.*?>> پاک‌سازی شده و فرمت‌بندی می‌شود تا اطمینان حاصل شود که حتماً با عبارت مورد نیاز «The answer is» پایان می‌یابد.
  • تولید جفت‌های DPO: تابع make_pair جفت‌های ترجیحی را می‌سازد. پاسخ «انتخاب شده» (chosen) همان راه حل طلایی است. پاسخ «رد شده» (rejected) با برداشتن جواب عددی طلایی و اضافه کردن یک آفست تصادفی از مجموعه [-10, -3, -1, 1, 2, 7] ایجاد می‌شود. اگر پاسخ عدد نباشد، صرفاً یک «0» به آن اضافه می‌شود.
  • توکن‌سازی RLVR: تابع rlvr_tokenize_v1 پرامپت‌ها و برچسب‌های حقیقت زمینی (ground-truth) را برای مرحله یادگیری تقویتی آماده می‌کند. این کار تضمین می‌کند که مدل در برابر پاسخ عددی دقیقی که از طریق gsm_answer (با جداسازی توسط جداکننده ####) استخراج شده، آزمایش شود.

مرحله اول: تنظیم نظارت‌شده (SFT)

هدف این مرحله ایجاد یک خط پایه برای پیروی از دستورات است. برای کاهش مصرف حافظه، از لورا (LoRA) استفاده می‌شود که تنها لایه‌های attention و feed-forward projection را هدف قرار می‌دهد. رتبه (Rank) لورا روی ۳۲، lora_alpha روی ۶۴ و lora_dropout روی ۰.۰۵ تنظیم شده است.

  • مدیریت داده: سیستم از توکن‌ساز sft_tulu_tokenize_and_truncate_v1 استفاده می‌کند تا پرامپت‌های کاربر را از محاسبه زیان (loss) ماسک کند. این کار تضمین می‌کند که مدل فقط برای پیش‌بینی پاسخ دستیار آموزش ببیند. همچنین تابع sft_tulu_filter_v1 برای حذف نمونه‌هایی که تمام توکن‌های آن‌ها ماسک شده‌اند، به کار می‌رود.
  • بهینه‌سازی: آموزش از زیان cross-entropy استفاده می‌کند که فقط روی توکن‌های پاسخ دستیار (بدون ماسک) محاسبه می‌شود. از بهینه‌ساز AdamW با زمان‌بندی کسینوسی و دوره گرم‌کردن (warmup) ۵٪ از کل گام‌ها استفاده می‌شود. مقدار weight decay روی ۰.۰ تنظیم شده است.
  • بهره‌وری سخت‌افزاری: با استفاده از تجمع گرادیان و دقت ترکیبی (FP16 یا BF16)، مدل بدون کرش کردن در حافظه ۱۶ گیگابایتی آموزش می‌بیند. برش گرادیان (Gradient clipping) با آستانه ۱.۰ با استفاده از torch.nn.utils.clip_grad_norm_ اعمال می‌شود.

مرحله دوم: بهینه‌سازی مستقیم ترجیح (DPO)

در این مرحله، مدل یاد می‌گیرد بین یک راه حل ریاضی درست و یک راه حل به‌ظاهر درست اما غلط، تفاوت قائل شود.

  • منطق احتمال: سیستم احتمالات لگاریتمی توالی‌ها را با نرمال‌سازی طول (با استفاده از _get_batch_logps) محاسبه می‌کند تا مدل صرفاً برای پاسخ‌های طولانی‌تر پاداش نگیرد. این مورد توسط پرچم dpo_norm کنترل می‌شود و تابع per_token_logps_fn برای استخراج این احتمالات از logitهای مدل استفاده می‌شود.
  • سیاست مرجع: سیاست فعال لورا با یک سیاست مرجع پایه منجمد (که از طریق model.disable_adapter() پیاده شده) مقایسه می‌شود تا از فروپاشی مدل یا فاصله گرفتن بیش از حد از دانش اولیه جلوگیری شود.
  • پایش: فرآیند آموزش، «دقت پاداش» (تعداد دفعاتی که پاسخ انتخاب شده احتمال لگاریتمی بالاتری نسبت به پاسخ رد شده دارد) و «حاشیه پاداش» (تفاوت بین احتمالات لگاریتمی انتخاب شده و رد شده) را رصد می‌کند.
  • زیان DPO: تابع dpo_loss از Open Instruct با مقدار label_smoothing برابر ۰.۰ و dpo_beta برابر ۰.۱ استفاده می‌شود.

مرحله سوم: RLVR و GRPO

پیچیده‌ترین بخش، یادگیری تقویتی با پاداش‌های قابل تأیید (RLVR) با استفاده از بهینه‌سازی سیاست نسبی گروهی (GRPO) است.

مکانیزم‌های تأییدکننده:
به‌جای استفاده از یک مدل پاداش عصبی، از تأییدکننده‌های سخت‌افزاری (Deterministic) استفاده می‌شود: GSM8KVerifier ،MathVerifier و IFEvalVerifierOld. این‌ها یک امتیاز مطلق (۰ یا ۱) ضرب در وزن تأییدکننده ارائه می‌دهند.

  • منطق GSM8K: تأییدکننده مقدار بعد از جداکننده #### را استخراج کرده و آن را با پاسخ تولید شده توسط مدل مقایسه می‌کند.
  • منطق Math/IFEval: تأییدکننده MathVerifier پاسخ‌های محصور در باکس‌های LaTeX (مانند \boxed{0.5}) را مدیریت می‌کند، در حالی که IFEvalVerifierOld محدودیت‌های کلمات (مثلاً «حداقل ۶ کلمه») را اعتبارسنجی می‌کند.

جزئیات بهینه‌سازی GRPO:

  • مزیت نسبی گروهی: مدل چندین پاسخ (۴ نمونه برای هر پرامپت) با دمای ۱.۰ و do_sample=True تولید می‌کند. سپس مزیت هر پاسخ را نسبت به میانگین گروه محاسبه می‌کند. اگر adv_norm روی "standard" باشد، نرمال‌سازی بر اساس انحراف معیار گروه انجام می‌شود؛ در غیر این صورت، از یک مزیت ساده مرکزگرا (scores - mean_g) استفاده می‌شود.
  • منظم‌سازی KL: برای حفظ پایداری، خط لوله جریمه‌های واگرایی KL را نسبت به مدل مرجع با استفاده از estimate_kl اعمال می‌کند. این کار از «سوءاستفاده از پاداش» (Reward Hacking) جلوگیری می‌کند. مقدار grpo_kl_beta روی ۰.۰۲ تنظیم شده است.
  • برش DAPO: پیاده‌سازی از GRPOLossType.dapo و منطق برش (پایین: ۰.۲، بالا: ۰.۲۷۲) استفاده می‌کند تا اطمینان حاصل شود که به‌روزرسانی‌های وزن‌های مدل تدریجی و پایدار باقی می‌مانند.
  • رول‌اوت و ماسک: فرآیند شامل یک مرحله رول‌اوت است که در آن مدل توالی‌ها را تولید می‌کند. یک full_mask ایجاد می‌شود تا اطمینان حاصل شود که زیان فقط روی توکن‌های پاسخ تولید شده محاسبه می‌شود و نه روی پرامپت. تنسور TERMINATORS (شامل توکن‌های EOS و PAD) برای شناسایی نقطه توقف تولید مدل استفاده می‌شود.

ارزیابی عملکرد

موفقیت مدل از طریق بررسی صحت (Accuracy) مبتنی بر تأییدکننده روی مجموعه آزمون GSM8K سنجیده می‌شود. این کار به توسعه‌دهندگان اجازه می‌دهد دقیقاً ببینند هر مرحله — SFT، DPO و RLVR — چقدر به توانایی‌های استدلالی مدل کمک کرده است.

ارزیابی با استفاده از رمزگشایی حریصانه (do_sample=False) و اندازه بچ ۴ انجام می‌شود. سیستم «دقت تأییدکننده» را رصد می‌کند که درصد پاسخ‌های تولید شده‌ای است که طبق تأییدکننده قطعی، با پاسخ حقیقت زمینی مطابقت دارند. تابع evaluate به‌طور موقت KV-cache را از طریق with_cache() فعال می‌کند تا سرعت تولید افزایش یابد.

پس از مرحله نهایی RLVR، آداپتورهای لورا با استفاده از model.merge_and_unload() با مدل پایه ادغام می‌شوند. این کار یک چک‌پوینت مستقل (ذخیره شده به نام tulu-mini) ایجاد می‌کند که دستاوردهای استدلالی را حفظ کرده و در عین حال برای استقرار در لبه (Edge) به اندازه کافی کوچک است. این فرآیند معادل اجرای اسکریپت open_instruct/merge_lora.py است.

این تغییر در استک پس‌آموزش، فرض‌های رایج درباره «خندق محاسباتی» (Compute Moat) را به چالش می‌کشد. این موضوع ثابت می‌کند که منطق Tulu 3 — به‌ویژه ترکیب بهینه‌سازی ترجیح و یادگیری تقویتی نسبی گروهی — می‌تواند به شکلی تقطیر شود که نیازی به مزرعه‌های سرور نداشته باشد.

برای متخصصان، این به معنای توانایی تکرار خط لوله‌های RLVR در عرض چند ساعت به‌جای چند روز است. این امر توانایی ایجاد مدل‌های «استدلالی» را دموکراتیزه می‌کند؛ مدل‌هایی که توسط منطق تأیید می‌شوند، نه صرفاً با تقلید از ترجیحات انسانی.

توسعه‌دهندگان اکنون می‌توانند این مراحل را با کلون کردن مخزن Open Instruct و استفاده از توابع کمکی ارائه شده برای زیان DPO و GRPO پیاده‌سازی کنند.

گام بعدی شما

  • مخزن Open Instruct را کلون کرده و توابع زیان DPO و GRPO را در پروژه‌های خود به کار بگیرید.
  • مدل‌های کوچک (SLM) خود را با استفاده از تأییدکننده‌های سخت‌افزاری (Deterministic Verifiers) به‌جای مدل‌های پاداش عصبی تنظیم کنید.
  • از تکنیک ادغام لورا برای تبدیل مدل‌های آموزشی به مدل‌های سبک جهت استقرار در سخت‌افزارهای لبه استفاده کنید.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این چارچوب با شکستن انحصار سخت‌افزاری، امکان ساخت مدل‌های استدلالی را برای توسعه‌دهندگان مستقل فراهم می‌کند. اعتبار این روش از توانایی آن در تبدیل مدل‌های بسیار کوچک به ابزارهای استدلالی دقیق نشأت می‌گیرد.

تأثیر برای ایران

این ابزار برای برنامه‌نویسان ایرانی که به دلیل تحریم‌ها یا هزینه‌ها به GPUهای صنعتی دسترسی ندارند، فرصتی است تا روی سخت‌افزارهای معمولی مدل‌های استدلالی بسازند.

·نگاه ما
تحریریه دات‌هوش

جایگزینی مدل‌های پاداش عصبی با تأییدکننده‌های قطعی (Deterministic) در GRPO، نقطه عطف این رویکرد است. این تغییر باعث می‌شود مدل‌ها به‌جای تقلید از لحن انسان، بر اساس منطق ریاضی سخت‌گیرانه بهینه شوند. در واقع، این مسیر نشان می‌دهد که برای رسیدن به استدلال واقعی، باید از «احتمالات» فاصله گرفت و به «قواعد» بازگشت.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.