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.
بدون موازی سازی
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 حافظه کمتری مصرف می کند.
تقسیم یک مدل بزرگ به تکههای لایههای متوالی کار سادهای است. با این حال، یک وابستگی متوالی بین ورودیها و خروجیهای لایهها وجود دارد، بنابراین یک پیادهسازی سادهلوحانه میتواند منجر به مقدار زیادی زمان بیحرکتی شود در حالی که کارگر منتظر خروجیهای ماشین قبلی است تا به عنوان ورودی آن استفاده شود. این تکههای زمان انتظار به عنوان «حباب» شناخته میشوند و محاسباتی را که میتوانستند توسط ماشینهای بیحرکت انجام دهند، تلف میکنند.
ما میتوانیم از ایدههای موازیسازی دادهها برای کاهش هزینه حباب استفاده کنیم، زیرا هر کارگر فقط زیرمجموعهای از عناصر داده را در یک زمان پردازش میکند و به ما امکان میدهد محاسبات جدید را با زمان انتظار همپوشانی هوشمندانه داشته باشیم. ایده اصلی این است که یک دسته را به چند میکروبچ تقسیم کنیم. هر میکروبچ باید به نسبت سریعتر پردازش شود و هر کارگر به محض اینکه در دسترس قرار گرفت، کار روی میکروبچ بعدی را شروع میکند، بنابراین اجرای خط لوله را تسریع میکند. با میکروبچ های کافی، کارگران را می توان در اکثر مواقع با حداقل حباب در ابتدا و انتهای مرحله استفاده کرد. گرادیان ها در میان میکروبچ ها به طور میانگین محاسبه می شوند و به روز رسانی پارامترها تنها زمانی اتفاق می افتد که همه میکروبچ ها تکمیل شوند.
تعداد کارگرانی که مدل بر روی آنها تقسیم می شود معمولاً به عنوان شناخته می شود عمق خط لوله.
در طول پاس رو به جلو، کارگران فقط باید خروجی (به نام فعال سازی) لایه های خود را برای کارگر بعدی ارسال کنند. در طول گذر به عقب، فقط گرادیان های موجود در آن فعال سازی ها را به کارگر قبلی ارسال می کند. فضای طراحی بزرگی برای نحوه زمانبندی این پاسها و نحوه جمعآوری گرادیانها در میکروبچها وجود دارد. جی پایپ هر فرآیند کارگر به طور متوالی به جلو و عقب می گذرد و سپس گرادیان ها را از چندین میکروبچ به طور همزمان در پایان جمع می کند. امید واهی درعوض، هر کارگر را برای پردازش متناوب پاسهای رو به جلو و عقب برنامهریزی میکند.
موازی سازی تانسور
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 را تا 600 میلیارد پارامتر با طرحی که در آن تنها لایههای MoE در چندین دستگاه TPU تقسیم میشوند و لایههای دیگر کاملاً کپی میشوند، مقیاس میدهد. ترانسفورماتور سوئیچ با مسیریابی یک ورودی به یک متخصص، اندازه مدل را به تریلیونها پارامتر با پراکندگی بالاتر مقیاس میدهد.
سایر طرح های ذخیره سازی حافظه
بسیاری از استراتژیهای محاسباتی دیگر نیز وجود دارند که آموزش شبکههای عصبی بزرگ را قابل حملتر میکنند. مثلا:
-
برای محاسبه گرادیان، باید فعالسازیهای اصلی را ذخیره کرده باشید، که میتواند مقدار زیادی رم دستگاه را مصرف کند. بازرسی (همچنین به عنوان محاسبه مجدد فعال سازی شناخته می شود) هر زیرمجموعه ای از فعال سازی ها را ذخیره می کند، و میانی ها را به موقع و در طول پاس به عقب محاسبه می کند. این باعث صرفه جویی در حافظه زیادی با هزینه محاسباتی حداکثر یک پاس اضافی به جلو می شود. همچنین می توان به طور مداوم بین هزینه محاسباتی و حافظه مبادله کرد محاسبه مجدد فعال سازی انتخابی، که زیرمجموعه هایی از فعال سازی هایی را نشان می دهد که ذخیره سازی نسبتاً گران تر اما محاسبه آن ارزان تر است.
-
آموزش دقیق ترکیبی آموزش مدلها با استفاده از اعداد با دقت کمتر (معمولاً FP16). شتابدهندههای مدرن میتوانند با اعداد با دقت کمتر به تعداد FLOP بسیار بالاتر برسند، و همچنین در RAM دستگاه صرفهجویی میکنید. با مراقبت مناسب، مدل حاصل تقریبا هیچ دقتی را از دست نمی دهد.
-
بارگیری این است که به طور موقت داده های استفاده نشده را به CPU یا در بین دستگاه های مختلف بارگذاری کنید و بعداً در صورت نیاز دوباره آن را بخوانید. پیادهسازیهای ساده سرعت آموزش را بسیار کاهش میدهند، اما پیادهسازیهای پیچیده دادهها را از قبل واکشی میکنند تا دستگاه هرگز نیازی به منتظر ماندن روی آن نداشته باشد. یکی از اجرای این ایده است زرو که پارامترها، گرادیانها و حالتهای بهینهساز را در تمام سختافزارهای موجود تقسیم میکند و در صورت نیاز آنها را عملی میکند.
-
بهینه سازهای کارآمد حافظه have been proposed to reduce the memory footprint of the running state maintained by the optimizer، از جمله آدافکتور.
-
فشرده سازی همچنین می تواند برای ذخیره سازی نتایج میانی در شبکه استفاده شود. مثلا، مشتاق فشرده سازی فعال سازی هایی که برای گذر به عقب ذخیره شده اند. دال ای گرادیان ها را قبل از همگام سازی فشرده می کند.
در OpenAI، ما در حال آموزش و بهبود مدلهای بزرگ از زیرساختهای اساسی تا استقرار آنها برای مشکلات دنیای واقعی هستیم. اگر میخواهید ایدههای این پست را عملی کنید - به خصوص مربوط به تیمهای مقیاسگذاری و تحقیقات کاربردی ما - ما استخدام!
- a
- درباره ما
- شتاب دهنده ها
- دقیق
- در میان
- اضافی
- پیشرفت
- AI
- الگوریتم
- معرفی
- اجازه دادن
- در میان
- مقدار
- دیگر
- اعمال می شود
- درخواست
- روش
- دور و بر
- در دسترس
- میانگین
- خط مقدم
- شدن
- قبل از
- شروع
- بودن
- میان
- سفید
- بیلیون
- حباب
- اهميت دادن
- معین
- به چالش
- ارزان تر
- را انتخاب کنید
- ارتباط
- ارتباط
- ارتباطات
- محاسبه
- محاسبات
- محاسبه
- محاسبه
- متوالی
- مصرف
- مصرف
- به طور مستمر
- ادامه
- مختصات
- کپی برداری
- هسته
- میتوانست
- داده ها
- استقرار
- طرح
- توسعه
- دستگاه
- دستگاه ها
- مختلف
- مشکل
- بعد
- ابعاد
- پایین
- در طی
- موثر
- بهره وری
- موثر
- عناصر
- را قادر می سازد
- مهندسی
- به خصوص
- مثال
- مثال ها
- اعدام
- کارشناس
- کارشناسان
- سریعتر
- باز خورد
- نام خانوادگی
- رد پا
- به جلو
- از جانب
- کامل
- عموما
- GitHub
- نگاه
- GPU
- GPU ها
- رخ دادن
- سخت افزار
- داشتن
- زیاد
- بالاتر
- دارای
- میزبانی
- چگونه
- چگونه
- اما
- HTTPS
- اندیشه
- ایده ها
- تصویر
- پیاده سازی
- بهبود
- از جمله
- افزایش
- افزایش
- افزایش
- به طور فزاینده
- به طور مستقل
- نشان دادن
- شالوده
- ورودی
- IT
- شناخته شده
- بزرگ
- لایه
- رهبری
- برجسته
- یاد گرفتن
- یادگیری
- خطوط
- دستگاه
- فراگیری ماشین
- ماشین آلات
- ساخت
- ریاضی
- ماتریس
- به معنی
- حافظه
- مایکروسافت
- مدل
- مدل
- بیش
- اکثر
- چندگانه
- ضرب شدن
- نیازهای
- شبکه
- شبکه
- عدد
- تعداد
- کارت گرافیک Nvidia
- عمل
- عملیات
- بهینه سازی
- دیگر
- به طور کلی
- بخش
- مردم
- کارایی
- انجام
- نقطه
- ممکن
- تمرین
- قبلی
- مشکلات
- درآمد حاصل
- روند
- تولید کردن
- محصول
- محصولات
- پیشنهاد شده
- ارائه
- رم
- RE
- رسیدن به
- اخیر
- كاهش دادن
- کاهش
- اشاره دارد
- مربوط
- نشان دادن
- نیاز
- تحقیق
- نتیجه
- نتایج
- دویدن
- در حال اجرا
- سعید
- همان
- صرفه جویی کردن
- مقیاس
- مقیاس گذاری
- طرح
- طرح ها
- انتخاب شد
- تنظیم
- برپایی
- مشابه
- تنها
- اندازه
- مهارت ها
- So
- برخی از
- مصنوعی
- فضا
- تخصصی
- انشعاب
- تقسیم می کند
- دولت
- ایالات
- هنوز
- opbevare
- پرده
- استراتژی ها
- استراتژی
- گزینه
- تکنیک
- La
- از طریق
- توان
- زمان
- بار
- تجارت
- آموزش
- انتقال
- تریلیون ها
- درک
- بروزرسانی
- به روز رسانی
- us
- استفاده کنید
- معمولا
- استفاده کنید
- تنوع
- مختلف
- صبر کنيد
- در حین
- ویکیپدیا
- در داخل
- بدون
- کارگر
- کارگران
- کارگر
- شما