بهبود کارایی آموزش صورت در آغوش گرفتن از طریق بسته بندی با توجه فلش 2


به لطف روابط عمومی اخیر و جدید DataCollatorWithFlattening

این می تواند تا 2 برابر بهبودی در توان عملیاتی آموزش داشته باشد و در عین حال کیفیت همگرایی را حفظ کند. برای جزئیات بیشتر بخوانید!


مقدمه

قرار دادن توالی های ورودی در مینی بچ ها یک روش معمول برای جمع آوری ورودی ها در طول آموزش است. با این حال، این ناکارآمدی را به دلیل توکن های padding نامربوط معرفی می کند. بسته بندی نمونه ها بدون بالشتک و استفاده از اطلاعات موقعیت توکن، جایگزین کارآمدتری است. با این حال، پیاده‌سازی‌های قبلی بسته‌بندی، مرزهای مثالی را هنگام استفاده از Flash Attention 2 در نظر نمی‌گرفتند، که منجر به توجه مثال‌های متقابل نامطلوب شد که کیفیت و همگرایی را کاهش می‌داد.

Hugging Face Transformers اکنون با یک ویژگی جدید که آگاهی از مرزها را در طول بسته بندی، در کنار معرفی یک جمع‌آوری داده جدید حفظ می‌کند، به این موضوع می‌پردازد. DataCollatorWithFlattening.

با انتخاب DataCollatorWithFlattening، صورت در آغوش گرفته Trainer کاربران اکنون می توانند به طور یکپارچه توالی ها را به یک تانسور منفرد الحاق کنند و در حین محاسبات Flash Attention 2، مرزهای دنباله را محاسبه کنند. این از طریق به دست می آید flash_attn_varlen_func، که طول توالی تجمعی را در هر دسته کوچک محاسبه می کند (cu_seqlens).


تا 2 برابر افزایش توان

ما شاهد بهبود قابل توجهی در توان آموزشی با استفاده از این ویژگی با جدید هستیم DataCollatorWithFlattening. شکل زیر توان عملیاتی اندازه گیری شده در توکن در ثانیه را در طول تمرین نشان می دهد. در این مثال، توان عملیاتی میانگین هر GPU بیش از 8 A100-80 GPU در یک دوره از یک نمونه 20K به طور تصادفی انتخاب شده از دو مجموعه داده تنظیم دستورالعمل مختلف، FLAN و OrcaMath است.

توان عملیاتی

FLAN به طور متوسط ​​دارای توالی های کوتاه است اما واریانس زیادی در طول دنباله دارد، بنابراین طول نمونه در هر دسته ممکن است بسیار متفاوت باشد. این به این معنی است که دسته‌های FLAN بالشتک‌شده ممکن است سربار قابل‌توجهی را در توکن‌های padding استفاده نشده متحمل شوند. آموزش در مجموعه داده FLAN مزایای قابل توجهی را با استفاده از جدید نشان می دهد DataCollatorWithFlattening از نظر افزایش توان عملیاتی ما شاهد افزایش 2 برابری در مدل‌های نشان‌داده‌شده در اینجا هستیم: llama2-7B، mistral-7B، و granite-8B-code.

OrcaMath نمونه های طولانی تر و واریانس کمتری در طول مثال دارد. به این ترتیب، بهبود از بسته بندی کمتر است. آزمایش‌های ما افزایش 1.4 برابری در توان عملیاتی را هنگام آموزش با استفاده از این شکل از بسته‌بندی در مجموعه داده OrcaMath در این سه مدل نشان می‌دهند.

حافظه

استفاده از حافظه نیز از طریق بسته بندی با جدید بهبود می یابد DataCollatorWithFlattening. شکل زیر اوج استفاده از حافظه را از همان سه مدل آموزش روی دو مجموعه داده مشابه نشان می دهد. حافظه اوج 20٪ در مجموعه داده FLAN کاهش می یابد، که به طور قابل توجهی از بسته بندی سود می برد.

اوج کاهش حافظه در مجموعه داده OrcaMath با طول نمونه های همگن تر آن 6٪ است.

نمونه‌های بسته‌بندی، زمانی که تعداد مراحل بهینه‌سازی را کاهش می‌دهد، ممکن است به همگرایی آموزش آسیب برساند. با این حال، ویژگی جدید، مینی‌بچ‌ها و از این رو، همان تعداد مراحل بهینه‌سازی را حفظ می‌کند که در نمونه‌های بالشتکی استفاده می‌شود. بنابراین، همانطور که در شکل بعدی می بینیم، هیچ تاثیری بر همگرایی قطار وجود ندارد، که نشان می دهد از دست دادن اعتبار یکسان سه مدل آموزش روی همان دو مجموعه داده، چه مدل ها با بسته بندی با استفاده از روش جدید آموزش داده شوند. DataCollatorWithFlattening یا با بالشتک.

ValLoss


چگونه کار می کند

دسته ای از داده ها را با اندازه دسته ای = 4 در نظر بگیرید که در آن چهار دنباله به شرح زیر است:

دسته ای

پس از الحاق مثال‌ها، جمع‌آوری بدون بالشتک مقدار را برمی‌گرداند input_ids، labels، و position_ids از هر نمونه بنابراین، جمع‌آور برای این دسته از داده‌ها،

مثال

تغییرات مورد نیاز سبک هستند و محدود به ارائه آن هستند position_ids به فلش توجه 2.

با این حال، این متکی به مدلی است که در معرض نمایش قرار می گیرد position_ids. تا زمان نگارش، 14 مدل آنها را در معرض دید قرار می دهند و توسط راه حل پشتیبانی می شوند. به طور خاص، Llama 2 و 3، Mistral، Mixtral، Granite، DBRX، Falcon، Gemma، OLMo، Phi 1، 2، و 3، phi3، Qwen 2 و 2 MoE، StableLM و StarCoder 2 همگی توسط راه حل پشتیبانی می شوند.


شروع کردن

بهره مندی از مزایای بسته بندی با position_ids آسان است برای استفاده از بسته بندی با position_ids، فقط دو مرحله لازم است:

  1. مدل را با Flash Attention 2 نمونه برداری کنید
  2. از جدید استفاده کنید DataCollatorWithFlattening


نحوه استفاده از آن

تصویر 1
تصویر 2


نتیجه گیری

نمونه‌های تنظیم دستورالعمل بسته‌بندی، به‌جای padding، اکنون به لطف روابط عمومی اخیر و جدید کاملاً با Flash Attention 2 سازگار است. DataCollatorWithFlattening. این روش با مدل هایی که استفاده می کنند سازگار است position_ids. مزایا را می توان در توان عملیاتی و حداکثر استفاده از حافظه در طول تمرین مشاهده کرد، بدون اینکه در همگرایی آموزشی کاهش یابد. توان عملیاتی و بهبود حافظه به مدل و توزیع طول مثال در داده های آموزشی بستگی دارد. آموزش با داده هایی که دارای تنوع گسترده ای از طول مثال است، با استفاده از DataCollatorWithFlattening.

برای تجزیه و تحلیل دقیق تر، نگاهی به مقاله در https://huggingface.co/papers/2407.09105



منبع: https://huggingface.co/blog/packing-with-FA2

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *