تجمع گرادیان محلی سرعت آموزش را ۱.۷ برابر افزایش میدهد
سرعت آموزش اغلب به دلیل زمانهای بیکاری در خطوط لوله (pipelines) با محدودیت مواجه میشود. این زمان بیکاری «حباب» (bubble) نامیده میشود.
روش جدیدی به نام PACI این مشکل را حل میکند. این روش حبابها را حذف کرده و سرعت آموزش را ۱.۶۹ برابر افزایش میدهد.
اکثر تیمها از استراتژیای به نام 1F1B-flush استفاده میکنند. این روش وزنها را ثابت نگه میدارد اما شکافهای خالی ایجاد میکند که در آنها سیستم منتظر دادهها میماند. این زمانهای انتظار باعث کند شدن همه چیز میشود.
سایر روشهای ناهمگام (asynchronous) سعی در رفع این مشکل دارند. آنها از ترفندهای پیچیدهای مانند ذخیرهسازی وزنها (weight stashing) یا کپیهای تکراری استفاده میکنند. این ترفندها حافظه زیادی مصرف میکنند و اغلب باعث ناپایداری آموزش میشوند.
PACI مسیر متفاوتی را در پیش میگیرد. این روش از تجمع گرادیان محلی (local gradient accumulation) استفاده میکند. این کار باعث میشود خط لوله بدون نیاز به همگامسازی سراسری (global synchronization)، مشغول به کار باقی بماند.
دلایل اهمیت PACI:
- پایداری روشهای استاندارد را حفظ میکند.
- از همان میزان حافظه استفاده میکند.
- به سرعت پیکربندیهای سریعتر اما سنگینتر میرسد.
- زمان رسیدن به دقت مطلوب را ۱.۶۹ برابر کاهش میدهد.
در آزمایشهای انجام شده با GPT-2 Medium، روش PACI بسیار سریعتر به دقت هدف رسید. این نشان میدهد که میتوان مقادیر کمی از انحراف وزن (weight drift) را در ازای دستیابی به بهبودهای عظیم در کارایی، نادیده گرفت.
برای تیمهای مهندسی، این به معنای کاهش ۴۰ درصدی هزینههای سختافزاری است. شما بدون خرید GPUهای بیشتر یا افزودن حافظه بیشتر، به نتایج سریعتری دست مییابید.
محققان این روش را روی یک خط لوله ۸ مرحلهای با مدلهای سبک GPT آزمایش کردند. اگر عمق خط لوله یا اندازه دسته (batch size) خود را تغییر دهید، ممکن است نیاز به تنظیم پنجره تجمع (accumulation window) داشته باشید.
شما میتوانید خودتان این را آزمایش کنید. نویسندگان یک wrapper برای تجمع محلی در مخزن (repository) خود ارائه دادهاند. برای مشاهده افزایش سرعت، همگامساز flush فعلی خود را با آن جایگزین کنید.
Source: https://dev.to/olaughter/local-gradient-accumulation-speeds-training-17x-2mdk
Optional learning community: https://t.me/GyaanSetuAi