آشنایی با DeepSpeed و FSDP

پروژه‌های یادگیری عمیق غالباً به بهینه‌سازی‌های مقیاس‌پذیر برای پردازش حجم بالای داده نیاز دارند. دو چارچوب محبوب در این حوزه، DeepSpeed و Distributed Data Parallel (FSDP) از PyTorch، در نزدیکی هم در بستر Hugging Face Accelerate قرار دارند.

Hugging Face Accelerate: پل‌سازی میان دو بک‌اند

"Accelerate" ابزار ساده برای مدیریت دستگاه‌های مختلف، حافظه و دقت است. در نسخهٔ جدید، این ابزار پشتیبانی کامل از ZeRO (Zero Redundancy Optimizer) در دو پیاده‌سازی DeepSpeed و PyTorch FSDP را فراهم کرده است و امکان سوئیچ بی‌دردسر را به کاربران می‌دهد.

مقایسهٔ عملکرد: Mistral-7B و دقت bfloat16

در آزمایش‌های عملی، مدل Mistral-7B با دقت bfloat16 در هر دو بک‌اند اجرا شد. نتایج نشان دادند که DeepSpeed به سرعت به نقطه‌ی همگرایی می‌رسد؛ در حالی که FSDP در همان فازهای اولیه نورونی، روند نزولی در loss را نشان نداد. این تفاوت‌ها به دلیل تنظیمات پیش‌فرض دقت و مدیریت حافظه در هر چارچوب است.

  • تفاوت در مدیریت حافظه و تجمیع پارامترها (ZeRO stage‑3)
  • تفاوت در تنظیمات پیش‌فرض دقت (FP16 vs BF16)
  • نیاز به پیکربندی خاص در FSDP برای به‌دست آوردن همگرایی

با این تفاوت، تیم‌های توسعه می‌توانند بر اساس نیازهایشان، به‌سرعت انتخاب و تنظیم بک‌اند‌های موردعلاقه خود را انجام دهند.

پرسش‌های پرتکرار

DeepSpeed و FSDP چیست و چه تفاوتی دارند؟

DeepSpeed و FSDP دو پیاده‌سازی مختلف از الگوریتم ZeRO Redundancy Optimizer هستند. DeepSpeed به‌صورت مستقل توسعه‌یافته و در بستر Megatron-LM پیاده‌سازی شده است، در حالی که FSDP بخش‌ای از PyTorch است و از خاصیت تقسیم مدل در حافظه بین GPUs بهره می‌برد.

چگونه می‌توان با استفاده از Hugging Face Accelerate بین DeepSpeed و FSDP سوئیچ کرد؟

در فایل تنظیمات Accelerate، مقدار «backend» را به ترتیب «deepspeed» یا «fsdp» تنظیم کنید و پارامترهای مربوط به دقت و ZeRO stage را بروز کنید؛ سپس رفرش کنید تا کتابخانه تغییرات را اعمال کند.