تکنیک‌هایی برای آموزش شبکه‌های عصبی بزرگ، هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.

تکنیک های آموزش شبکه های عصبی بزرگ

تکنیک های آموزش شبکه های عصبی بزرگ

Large neural networks are at the core of many recent advances in AI, but training them is a difficult engineering and research challenge which requires orchestrating a cluster of GPUs to perform a single synchronized calculation. As cluster and model sizes have grown, machine learning practitioners have developed an increasing variety of techniques to parallelize model training over many GPUs. At first glance, understanding these parallelism techniques may seem daunting, but with only a few assumptions about the structure of the computation these techniques become much more clear—at that point, you're just shuttling around opaque bits from A to B like a network switch shuttles around packets.

موازی سازی داده ها

تکنیک های آموزش شبکه های عصبی بزرگ

موازی سازی خطوط لوله

تکنیک های آموزش شبکه های عصبی بزرگ

موازی سازی تانسور

تکنیک های آموزش شبکه های عصبی بزرگ

موازی کاری خبره

تکنیک های آموزش شبکه های عصبی بزرگ

موازی سازی داده ها

تکنیک های آموزش شبکه های عصبی بزرگ

موازی سازی خطوط لوله

تکنیک های آموزش شبکه های عصبی بزرگ

موازی سازی تانسور

تکنیک های آموزش شبکه های عصبی بزرگ

موازی کاری خبره

تکنیک های آموزش شبکه های عصبی بزرگ

تصویری از استراتژی های مختلف موازی سازی در یک مدل سه لایه. هر رنگ به یک لایه اشاره دارد و خطوط نقطه چین GPU های مختلف را از هم جدا می کند.

بدون موازی سازی

Training a neural network is an iterative process. In every iteration, we do a pass forward through a model's لایه برای محاسبه خروجی برای هر مثال آموزشی در دسته ای از داده ها. سپس یک پاس دیگر ادامه می یابد رو به عقب از طریق لایه‌ها، انتشار میزان تأثیر هر پارامتر بر خروجی نهایی با محاسبه a شیب با توجه به هر پارامتر گرادیان متوسط ​​برای دسته، پارامترها و برخی از وضعیت بهینه سازی در هر پارامتر به یک الگوریتم بهینه سازی منتقل می شود، مانند آدم, which computes the next iteration's parameters (which should have slightly better performance on your data) and new per-parameter optimization state. As the training iterates over batches of data, the model evolves to produce increasingly accurate outputs.

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

  • موازی سازی داده ها - زیر مجموعه های مختلف دسته را روی GPU های مختلف اجرا کنید.
  • موازی خط لوله - لایه های مختلف مدل را روی GPU های مختلف اجرا کنید.
  • موازی تانسور - ریاضیات را برای یک عملیات واحد مانند ضرب ماتریس برای تقسیم در GPU ها تجزیه کنید.
  • ترکیبی از متخصصان - هر نمونه را تنها با کسری از هر لایه پردازش کنید.

(In this post, we'll assume that you are using GPUs to train your neural networks, but the same ideas apply to those using any other شتاب دهنده شبکه عصبی.)

موازی سازی داده ها

داده موازی training means copying the same parameters to multiple GPUs (often called "workers") and assigning different examples to each to be processed simultaneously. Data parallelism alone still requires that your model fits into a single GPU’s memory, but lets you utilize the compute of many GPUs at the cost of storing many duplicate copies of your parameters. That being said, there are strategies to increase the effective RAM available to your GPU, such as temporarily offloading parameters to CPU memory between usages.

از آنجایی که هر کارگر موازی داده کپی پارامترهای خود را به روز می کند، باید هماهنگ شوند تا اطمینان حاصل شود که هر کارگر همچنان پارامترهای مشابهی دارد. ساده‌ترین روش معرفی مسدود کردن ارتباط بین کارگران است: (1) به طور مستقل گرادیان را بر روی هر کارگر محاسبه کنید. (2) میانگین گرادیان در بین کارگران; و (3) به طور مستقل همان پارامترهای جدید را روی هر کارگر محاسبه می کند. مرحله (2) یک میانگین مسدود کننده است که نیاز به انتقال اطلاعات بسیار زیادی دارد (متناسب با تعداد کارگران برابر اندازه پارامترهای شما)، که می تواند به توان عملیاتی آموزشی شما آسیب برساند. مختلف وجود دارد طرح های همگام سازی ناهمزمان برای حذف این سربار، اما آنها به کارایی یادگیری آسیب می رسانند. در عمل، مردم به طور کلی به رویکرد همزمان پایبند هستند.

موازی سازی خطوط لوله

با خط لوله موازی آموزش، ما تکه های متوالی مدل را در بین GPU ها تقسیم بندی می کنیم. هر GPU فقط کسری از پارامترها را در خود جای می دهد و بنابراین همان مدل به نسبت هر GPU حافظه کمتری مصرف می کند.

تقسیم یک مدل بزرگ به تکه‌های لایه‌های متوالی کار ساده‌ای است. با این حال، یک وابستگی متوالی بین ورودی‌ها و خروجی‌های لایه‌ها وجود دارد، بنابراین یک پیاده‌سازی ساده‌لوحانه می‌تواند منجر به مقدار زیادی زمان بی‌حرکتی شود در حالی که کارگر منتظر خروجی‌های ماشین قبلی است تا به عنوان ورودی آن استفاده شود. این تکه‌های زمان انتظار به عنوان «حباب» شناخته می‌شوند و محاسباتی را که می‌توانستند توسط ماشین‌های بی‌حرکت انجام دهند، تلف می‌کنند.

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

تصویری از یک تنظیم موازی خط لوله ساده که در آن مدل به صورت عمودی به 4 پارتیشن توسط لایه تقسیم می شود. Worker 1 میزبان پارامترهای مدل اولین لایه شبکه (نزدیک ترین به ورودی) است، در حالی که Worker 4 میزبان لایه 4 (که نزدیک ترین به خروجی است) است. "F"، "B" و "U" به ترتیب نشان دهنده عملیات جلو، عقب و به روز رسانی هستند. زیرمجموعه ها نشان می دهد که عملیات بر روی کدام کارگر اجرا می شود. داده ها به دلیل وابستگی متوالی توسط یک کارگر در یک زمان پردازش می شوند که منجر به "حباب" بزرگ زمان بیکاری می شود.

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

تعداد کارگرانی که مدل بر روی آنها تقسیم می شود معمولاً به عنوان شناخته می شود عمق خط لوله.

در طول پاس رو به جلو، کارگران فقط باید خروجی (به نام فعال سازی) لایه های خود را برای کارگر بعدی ارسال کنند. در طول گذر به عقب، فقط گرادیان های موجود در آن فعال سازی ها را به کارگر قبلی ارسال می کند. فضای طراحی بزرگی برای نحوه زمان‌بندی این پاس‌ها و نحوه جمع‌آوری گرادیان‌ها در میکروبچ‌ها وجود دارد. جی پایپ هر فرآیند کارگر به طور متوالی به جلو و عقب می گذرد و سپس گرادیان ها را از چندین میکروبچ به طور همزمان در پایان جمع می کند. امید واهی درعوض، هر کارگر را برای پردازش متناوب پاس‌های رو به جلو و عقب برنامه‌ریزی می‌کند.

تکنیک های آموزش شبکه های عصبی بزرگ به جلو
تکنیک های آموزش شبکه های عصبی بزرگ به عقب
تکنیک های آموزش شبکه های عصبی بزرگ بروزرسانی
تکنیک های آموزش شبکه های عصبی بزرگ آرام
جی پایپ

تکنیک های آموزش شبکه های عصبی بزرگ

امید واهی

تکنیک های آموزش شبکه های عصبی بزرگ

مقایسه طرح های لوله کشی GPipe و PipeDream با استفاده از 4 میکروبچ در هر دسته. میکروبچ 1-8 مربوط به دو دسته داده متوالی است. در تصویر، "(عدد)" نشان می دهد که یک میکروبچ عملیات انجام شده است و زیرنویس شناسه کارگر را مشخص می کند. توجه داشته باشید که PipeDream با انجام برخی از محاسبات با پارامترهای قدیمی کارایی بیشتری به دست می آورد.

موازی سازی تانسور

Pipeline parallelism splits a model “vertically” by layer. It's also possible to “horizontally” split certain operations within a layer, which is usually called تانسور موازی آموزش. برای بسیاری از مدل های مدرن (مانند تبدیل کننده، گلوگاه محاسباتی در حال ضرب یک ماتریس دسته ای فعال سازی با یک ماتریس وزن بزرگ است. ضرب ماتریس can be thought of as dot products between pairs of rows and columns; it's possible to compute independent dot products on different GPUs, or to compute parts of each dot product on different GPUs and sum up the results. With either strategy, we can slice the weight matrix into even-sized “shards”, host each shard on a different GPU, and use that shard to compute the relevant part of the overall matrix product before later communicating to combine the results.

یک نمونه است Megatron-LM, which parallelizes matrix multiplications within the Transformer's self-attention and MLP layers. PTD-P از تانسور، داده و موازی خط لوله استفاده می کند. برنامه خط لوله آن چندین لایه غیر متوالی را به هر دستگاه اختصاص می دهد، که به قیمت ارتباطات شبکه بیشتر، سربار حباب را کاهش می دهد.

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

ترکیبی از کارشناسان (MOE)

با ترکیبی از کارشناسان (MOE) رویکرد، تنها کسری از شبکه برای محاسبه خروجی برای هر ورودی استفاده می شود. یکی از روش‌های مثال داشتن مجموعه‌ای از وزن‌ها است و شبکه می‌تواند مجموعه‌ای را انتخاب کند که از طریق مکانیزم دروازه در زمان استنتاج استفاده کند. این پارامترهای بسیاری را بدون افزایش هزینه محاسباتی امکان پذیر می کند. هر مجموعه ای از وزن ها به عنوان "متخصص" نامیده می شود، به این امید که شبکه یاد بگیرد که محاسبات و مهارت های تخصصی را به هر متخصص اختصاص دهد. متخصصان مختلف را می توان بر روی پردازنده های گرافیکی مختلف میزبانی کرد و راهی واضح برای افزایش تعداد GPU های مورد استفاده برای یک مدل ارائه می دهد.

تکنیک های آموزش شبکه های عصبی بزرگ

تصویری از لایه ترکیبی از کارشناسان (MoE). فقط 2 مورد از n کارشناسان توسط شبکه دروازه انتخاب می شوند. (تصویر اقتباس شده از: Shazeer و همکاران، 2017)

جی شارد یک ترانسفورماتور MoE را تا 600 میلیارد پارامتر با طرحی که در آن تنها لایه‌های MoE در چندین دستگاه TPU تقسیم می‌شوند و لایه‌های دیگر کاملاً کپی می‌شوند، مقیاس می‌دهد. ترانسفورماتور سوئیچ با مسیریابی یک ورودی به یک متخصص، اندازه مدل را به تریلیون‌ها پارامتر با پراکندگی بالاتر مقیاس می‌دهد.

سایر طرح های ذخیره سازی حافظه

بسیاری از استراتژی‌های محاسباتی دیگر نیز وجود دارند که آموزش شبکه‌های عصبی بزرگ را قابل حمل‌تر می‌کنند. مثلا:

  • برای محاسبه گرادیان، باید فعال‌سازی‌های اصلی را ذخیره کرده باشید، که می‌تواند مقدار زیادی رم دستگاه را مصرف کند. بازرسی (همچنین به عنوان محاسبه مجدد فعال سازی شناخته می شود) هر زیرمجموعه ای از فعال سازی ها را ذخیره می کند، و میانی ها را به موقع و در طول پاس به عقب محاسبه می کند. این باعث صرفه جویی در حافظه زیادی با هزینه محاسباتی حداکثر یک پاس اضافی به جلو می شود. همچنین می توان به طور مداوم بین هزینه محاسباتی و حافظه مبادله کرد محاسبه مجدد فعال سازی انتخابی، که زیرمجموعه هایی از فعال سازی هایی را نشان می دهد که ذخیره سازی نسبتاً گران تر اما محاسبه آن ارزان تر است.

  • آموزش دقیق ترکیبی آموزش مدل‌ها با استفاده از اعداد با دقت کمتر (معمولاً FP16). شتاب‌دهنده‌های مدرن می‌توانند با اعداد با دقت کمتر به تعداد FLOP بسیار بالاتر برسند، و همچنین در RAM دستگاه صرفه‌جویی می‌کنید. با مراقبت مناسب، مدل حاصل تقریبا هیچ دقتی را از دست نمی دهد.

  • بارگیری این است که به طور موقت داده های استفاده نشده را به CPU یا در بین دستگاه های مختلف بارگذاری کنید و بعداً در صورت نیاز دوباره آن را بخوانید. پیاده‌سازی‌های ساده سرعت آموزش را بسیار کاهش می‌دهند، اما پیاده‌سازی‌های پیچیده داده‌ها را از قبل واکشی می‌کنند تا دستگاه هرگز نیازی به منتظر ماندن روی آن نداشته باشد. یکی از اجرای این ایده است زرو که پارامترها، گرادیان‌ها و حالت‌های بهینه‌ساز را در تمام سخت‌افزارهای موجود تقسیم می‌کند و در صورت نیاز آنها را عملی می‌کند.

  • بهینه سازهای کارآمد حافظه have been proposed to reduce the memory footprint of the running state maintained by the optimizer، از جمله آدافکتور.

  • فشرده سازی همچنین می تواند برای ذخیره سازی نتایج میانی در شبکه استفاده شود. مثلا، مشتاق فشرده سازی فعال سازی هایی که برای گذر به عقب ذخیره شده اند. دال ای گرادیان ها را قبل از همگام سازی فشرده می کند.


در OpenAI، ما در حال آموزش و بهبود مدل‌های بزرگ از زیرساخت‌های اساسی تا استقرار آنها برای مشکلات دنیای واقعی هستیم. اگر می‌خواهید ایده‌های این پست را عملی کنید - به خصوص مربوط به تیم‌های مقیاس‌گذاری و تحقیقات کاربردی ما - ما استخدام!


تشکر و قدردانی
Thanks to Nikolas Tezak, Sam Altman, Daniel Gackle, Ilya Sutskever, and Steven Adler for feedback on drafts. Thanks to Justin Jay Wang, Bianca Martin, and Steve Dowling for communications and design.

تمبر زمان:

بیشتر از OpenAI