به نظر میرسد در Deep Learning، همه استفاده از GPU را توصیه میکنند. چرا؟ آیا می توانید بدون آن کاری انجام دهید، و دقیقا برای چه کسی جی پی یو لازم است؟
هر دانشمند داده یا علاقمند به یادگیری ماشینی که در تلاش بوده است تا عملکرد مدلهای آموزشی را در مقیاس بالا بهدست آورد، در نقطهای از حد خود میگذرد و شروع به تجربهی درجات مختلفی از تاخیر پردازش میکند. کارهایی که با مجموعههای آموزشی کوچکتر چند دقیقه طول میکشد، اکنون ممکن است ساعتهای بیشتری طول بکشد – در برخی موارد هفتهها – وقتی مجموعهی دادهها بزرگتر میشوند.
اما GPU چیست؟ چگونه آنها در مقابل CPU ها قرار میگیرند؟ آیا برای پروژههای یادگیری عمیق خود به یکی نیاز دارم؟
اگر تا به حال این سوالات را از خود پرسیدهاید، ادامه مطلب را بخوانید.
هر دانشمند داده حداقل یک بار در زندگی خود شنیده است که یادگیری عمیق به سختافزار زیادی نیاز دارد. برخی مدلهای یادگیری عمیق ساده را برای روزها بر روی لپتاپهای خود آموزش میدهند (معمولا بدون GPU) که منجر به این تصور میشود که Deep Learning برای اجرا به سیستمهای بزرگ نیاز دارد.
این یک افسانه در مورد یادگیری عمیق ایجاد کرده است که مانعی برای مبتدیان ایجاد میکند. هر کتابی که در چند سال گذشته به آن اشاره کردهام، نویسنده همیشه به این مورد اشاره کرده است: یادگیری عمیق برای اجرا به قدرت محاسباتی زیادی نیاز دارد.
اما من مرکز دادهای ندارم و وقتی اولین مدل یادگیری عمیق خود را بر روی یک لپتاپ نسبتا خوب ساختم، میدانستم که اجماع یا اشتباه بوده یا تنها بخشی از حقیقت به تصویر کشیده شده است. برای اینکه یک متخصص یادگیری عمیق باشید، مجبور نیستید مانند گوگل امکانات داشته باشید.
چرا برای یادگیری عمیق به سختافزار بیشتری نیاز داریم؟
برای هر شبکه عصبی، مرحلهی آموزش مدل یادگیری عمیق، فشردهترین کار نیازمند منابع است. در حین آموزش، یک شبکه عصبی ورودیهایی را دریافت میکند که سپس در لایههای پنهان با استفاده از وزنهایی که در طول تمرین تنظیم میشوند، پردازش میشوند و سپس مدل پیشبینی میکند. وزن ها برای یافتن الگوها به منظور پیشبینی بهتر تنظیم میشوند. هر دوی این عملیات اساسا ضربهای ماتریسی هستند. یک ضرب ماتریس ساده را می توان با تصویر زیر نشان داد:
در یک شبکه عصبی، آرایه اول ورودی شبکه عصبی است، در حالی که آرایه دوم وزن آن را تشکیل میدهد.
آسان بهنظر میآید، درست است؟
بله، اگر شبکه عصبی شما حدود 10، 100 یا حتی 100000 پارامتر داشته باشد. یک کامپیوتر هنوز هم میتواند در عرض چند دقیقه یا حتی ساعتها این کار را انجام دهد.
اما اگر شبکه عصبی شما بیش از 10 میلیارد پارامتر داشته باشد چه؟ آموزش این نوع سیستمها با استفاده از رویکرد سنتی سالها طول میکشد. احتمالا پیش از اینکه رایانهی شما ۱۰ درصد راه را طی کند، تسلیم میشوید.
یک دانشجوی دورهی Ph.D. در دانشگاه رایس میگوید: «یک شبکه عصبی که ورودی جستجو را میگیرد و از 100 میلیون خروجی پیشبینی میکند، معمولا با حدود 2000 پارامتر در هر مورد به نتیجه میرسد. بنابراین شما آنها را ضرب میکنید و لایه نهایی شبکه عصبی اکنون 200 میلیارد پارامتر دارد. و من هنوز هیچ کار پیچیدهای انجام ندادهام. من در مورد یک مدل شبکه عصبی بسیار بسیار ساده صحبت میکنم.»
مدلهای یادگیری عمیق را میتوان با اجرای همزمان همهی عملیاتها به جای یکی پس از دیگری، سریعتر آموزش داد. شما میتوانید با استفاده از یک GPU برای آموزش مدل خود به این هدف برسید. GPU (واحد پردازش گرافیکی) یک پردازندهی تخصصی با حافظهی اختصاصی است که به طور معمول عملیات اعشاری مورد نیاز برای رندر گرافیک را انجام میدهد.
بهعبارت دیگر، این یک پردازنده تکتراشهای است که برای محاسبات گرافیکی و ریاضی گسترده استفاده میشود که چرخههای CPU را برای کارهای دیگر آزاد میکند. تفاوت اصلی بین پردازندههای گرافیکی و پردازندههای مرکزی این است که پردازندههای گرافیکی نسبت به پردازندههای مرکزی، ترانزیستورهای بیشتری را به واحدهای منطقی حسابی اختصاص میدهند و کمتر به حافظه پنهان و کنترل جریان.
در حالی که پردازندههای مرکزی (CPU) عمدتا برای مشکلاتی که نیاز به تجزیه یا تفسیر منطق پیچیده در کد دارند، کاربرد دارند، پردازندههای گرافیکی برای رندر گرافیکی اختصاصی بازیهای رایانهای طراحی شدهاند، و بعدا برای سرعت بخشیدن به سایر محاسبات هندسی (بهعنوان مثال، تبدیل چند ضلعیها یا چرخش در فضای سهبعدی) تقویت شدند.
یک GPU کوچکتر از یک CPU است، اما معمولا هستههای منطقی بیشتری (واحدهای منطق حسابی یا ALU، واحدهای کنترل و حافظه پنهان(Cache)) نسبت به دومی دارد.
در نمودار بالا، میبینید که GPU ها (قرمز/سبز) از نظر تئوری میتوانند 10 تا 15 برابر عملکرد CPU ها (به رنگ آبی) را انجام دهند. این افزایش سرعت در عمل نیز بسیار کاربرد دارد.
اگر یک CPU را مازراتی در نظر بگیرید، یک GPU را میتوان به عنوان یک کامیون بزرگ در نظر گرفت. CPU یا در این مثال مزراتی میتواند مقادیر کمی از بستهها (3-4 سرنشین) را در RAM به سرعت دریافت کند، در حالی که یک GPU (کامیون) کندتر است اما میتواند حجم زیادی از حافظه (20 مسافر) را در یک نوبت دریافت کند.
پردازندههای گرافیکی برای آموزش مدلهای هوش مصنوعی و یادگیری عمیق بهینهسازی شدهاند، زیرا میتوانند چندین محاسبات را به طور همزمان پردازش کنند.
آنها تعداد زیادی هسته دارند که امکان محاسبهی بهتر فرآیندهای موازی متعدد را فراهم میکند. علاوه بر این، محاسبات در یادگیری عمیق باید حجم عظیمی از داده را مدیریت کند – پهنای باند حافظه GPU این کار را مناسبتر میکند.
چند پارامتر تعیین کننده برای تعیین اینکه آیا از CPU یا GPU برای آموزش یک مدل یادگیری عمیق استفاده شود وجود دارد:
پهنای باند یکی از دلایل اصلی سرعت پردازش GPU ها نسبت به CPU ها است. با مجموعه دادههای بزرگ، CPU هنگام آموزش مدل، حافظه زیادی را اشغال میکند.
محاسبات کارهای بزرگ و پیچیده چرخههای ساعت زیادی را در CPU به خود اختصاص میدهد – CPU ها کارها را بهصورت متوالی انجام میدهند و تعداد هستههای کمتری نسبت به همتای خود یعنی GPU دارند.
از سوی دیگر، یک GPU مستقل با حافظه اختصاصی VRAM (رم ویدیویی) همراه است. بنابراین، حافظه CPU می تواند برای کارهای دیگر استفاده شود.
آموزش یک مدل در یادگیری عمیق نیاز به مجموعه داده بزرگ دارد، بنابراین از نظر حافظه نیاز به حجم مناسبی دارید. برای محاسبهی کارآمد دادهها، GPU یک انتخاب بهینه است. هرچه محاسبات بزرگتر باشد، مزیت GPU نسبت به CPU بیشتر است.
بهینهسازی وظایف در CPU بسیار سادهتر است. هستههای CPU، هرچند کمتر، قدرتمندتر از هزاران هسته پردازشگر گرافیکی هستند.
هر هسته CPU میتواند بر اساس دستورالعملهای مختلف (معماری MIMD) عمل کند، در حالی که هستههای GPU که معمولا در بلوکهای 32 هستهای سازماندهی میشوند، همان دستورالعمل را در یک زمان معین به صورت موازی اجرا میکنند (معماری SIMD).
موازیسازی در شبکه های عصبی متراکم، با توجه به تلاشی که نیاز دارد بسیار دشوار است. از این رو، پیادهسازی تکنیکهای بهینهسازی پیچیده در یک GPU نسبت به یک CPU دشوار است.
مانند هر پروژه d علم داده، بستگی دارد. بین سرعت، قابلیت اطمینان و هزینه، معاوضههایی وجود دارد که باید در نظر گرفت:
اگر شبکه عصبی شما نسبتا کوچک است، می توانید بدون GPU کار کنید
اگر شبکه عصبی شما شامل هزاران محاسبات شامل صدها هزار پارامتر است، ممکن است بخواهید سرمایهگذاری روی یک GPU را در نظر بگیرید.
به عنوان یک قاعدهی کلی، پردازندههای گرافیکی شرایط امنتری برای یادگیری ماشینی سریع هستند، زیرا در اصل، آموزش مدل علوم داده، شامل محاسبات ریاضی ساده ماتریسی است که اگر محاسبات به صورت موازی انجام شوند، ممکن است سرعت آن بسیار افزایش یابد.
همچنین باید به پردازندههای گرافیکی ابری فکر کنید. اگر نمیخواهید تعداد زیادی پردازندههای گرافیکی گران قیمت بخرید، میتوانید از پردازندههای گرافیکی درخواستی با یک شرکت میزبان ابری استفاده کنید. آنها شما را از پیکربندی سختافزار نجات میدهند و مهمتر از همه، آنقدر گران نیستند – هزینهها میتواند به 0.25 دلار آمریکا در ساعت در زمانی که از آن استفاده میکنید، باشد.
پس از اتمام کار، به یاد داشته باشید که نمونه ابری خود را خاموش کنید. شما یک کامپیوتر/ سرور خارجی کرایه خواهید کرد، نه اینکه چیزی را بهتنهایی اجرا کنید. کافی نیست مرورگر خود را ببندید یا رایانه شخصی خود را خاموش کنید، اینها فقط ارتباط بین دستگاه شما و این سرور را قطع میکنند، نه چیزی که برای آن پول میپردازید. در غیر این صورت، برای تمام مدتی که کار میکند با یک صورتحساب ناخوشایند شگفت زده میشوید!
CPU ها در انجام محاسبات منفرد و پیچیدهتر بهصورت متوالی بهترین هستند، در حالی که GPU ها در انجام محاسبات متعدد اما سادهتر بهصورت موازی بهتر هستند.
نمونههای محاسباتی GPU معمولا 2 تا 3 برابر نمونههای محاسباتی CPU هزینه دارند، بنابراین اگر در مدلهای آموزشی مبتنی بر GPU خود، شاهد افزایش عملکرد 2 تا 3 برابری نباشید، پیشنهاد میکنم از CPU استفاده کنید.