به نظر میرسد در یادگیری عمیق همه استفاده از GPU را پیشنهاد میکنند، اما GPU چیست؟ میتوان بدون آن یادگیری عمیق انجام داد؟ و اینکه دقیقا به درد چه کسی میخورد؟
هر متخصص علم داده یا علاقهمند به یادگیری ماشین که تلاش میکند عملکرد مدل های درحال آموزش را فراهم کند در یک مقطعی از زمان به سرش میزند که درجه های مختلفی از تاخیر(lag) پردازش را تجربه کند. کار هایی که چند دقیقه طول میکشند و آموزش کمتری احتیاج دارند ممکن است درصورت بزرگتر شدن مجموعه داده چندین ساعت طول بکشد (یادر برخی موارد چندین هفته).
اما GPU ها چه هستند؟ چه تفاوتی با CPU دارند؟ آیا من در پروژه های یادگیری عمیق خود به آن احتیاج دارم؟
اگر تا به حال این سوالات را از خود پرسیده اید، به خواندن ادامه دهید…..
هر متخصص علم داده یا علاقه مند به یادگیری حداقل یک بار درطول زندگی خود شنیده است که یادگیری عمیق به سخت افزار زیادی نیاز دارد. برخی افراد روز ها برای آموزش مدل های ساده یادگیری ماشین روی لپتاپ خود وقت صرف می کنند(عموما بدون GPU) باعث میشود این تصویر پدید آید که انجام یادگیری عمیق به سیستم های بزرگ احتیاج دارد. این اتفاق باعث ایجاد افسانه ای پیرامون یادگیری عمیق شده است که مانعی برای تازه واردها ایجاد میکند. در هر کتابی که در سالهای اخیر به آن رجوع کرده ام مولف همیشه به نکته زیر اشاره کرده است:
یادگیری عمیق برای تداوم عملکرد به قدرت محاسبه بسیار زیادی نیاز دارد.
اما من مرکز داده ای در اختیار ندارم و زمانی که اولین مدل یادگیری عمیق خود را روی یک لب تاب بزرگ ساختم، میدانستم که این اتفاق نظر یا اشتباه است یا تنها بخشی ازحقیقت را نشان میدهد. نیازی نیست که کل گوگل را زیر و رو کنید تا به یک متخصص یادگیری عمیق تبدیل شوید.
چرا برای یادگیری عمیق به سخت افزار بیشتر نیاز داریم؟
برای هرشبکه عصبی، فاز آموزش مدل یادگیری عمیق به منابع بسیاری نیاز دارد. در هنگام آموزش، شبکهی عصبی دادهی ورودی را دریافت میکند، سپس در لایههای پنهان با استفاده از وزنههایی که هنگام آموزش تنظیم شدهاند پردازش میشوند و بعد یک پیشبینی بیرون میدهد. وزنهها برای یافتن الگوها تنظیم شدهاند تا پیشبینیهای بهتری انجام دهند. همهی این عملیاتها اساسا ضرب ماتریسها هستند. یک ضرب ماتریس ساده را میتوان به کمک عکس زیر نمایش داد: در یک شبکهی عصبی، (ما میتوانیم) آرایهی اول درونداد شبکهی عصبی است در حالیکه آرایهی دوم وزن آن را تشکیل میدهد.
آسان است، نه؟
بله، اگر شبکهی عصبی شما حدودا 10,000 یا حتی 100,000 پارامتر داشته باشد. یک کامپیوتر همچنان میتواند این کار را در عرض چند دقیقه یا حداکثر چند ساعت انجام دهد. اما اگر شبکهی عصبی شما بیش از 10 میلیارد پارامتر داشت چه؟ سالها طول میکشد تا با استفاده از رویکرد سنتی این نوع سیستمها را آموزش داد. کامپیوتر شما احتمالا پیش از آنکه به یک دهم راه رسیده باشید، از کار میافتد.
به گفتهی یک دانشجوی دکترا در دانشگاه رایس: “یک شبکهی عصبی که درونداد جستجوی را دریافت میکند و از 100 میلیون برونداد یا محصول پیشبینی میکند بطور معمول به 2,000 پارامتر برای هر محصول ختم میشود. پس اگر آنها را ضرب کنید، اکنون لایهی نهایی شبکهی عصبی 200 میلیارد پارامتر خواهد داشت. و من کار پیچیدهای انجام ندادهام. من دارم در مورد یک مدل شبکهی عصبی بسیار ساده صحبت میکنم.”
راهی برای آموزش سریعتر مدلهای یادگیری عمیق
مدلهای یادگیری عمیق میتوانند با پیش بردن همزمان تمام عملیاتها در یک زمان به جای آنکه بصورت متوالی انجام شوند، سریعتر آموزش ببینند. شما میتوانید با استفاده از یک GPU برای آموزش مدل خود به این هدف دست پیدا کنید. یک GPU(واحد پردازش گرافیکی) یک پردازشگر تخصصی است با حافظهای اختصاصی است که بطور قراردادی عملیاتهای ممیز شناور که برای رندر کردن گرافیکها مورد نیاز است را انجام میدهد. به بیان دیگر، یک پردازشگر با تراشهای واحد است که برای محاسبات گستردهی گرافیکی و ریاضی استفاده میشود که در نتیجه سیکلهای واحد پردازش مرکزی (CPU) را برای کارهای دیگر آزاد میکند.
تفاوت عمده بین GPUها و CPUها این است که GPUها در مقایسه با CPUها به تناسب ترانزیستورهای بیشتری را به واحدهای حساب و منطق و تعداد کمتری را به حافظهی میانجی (caches) و کنترل جریان اختصاص میدهند. در حالیکه CPUها بیشتر برای مشکلاتی که به تجزیه یا تحلیل منطق پیچیده در کد نیاز دارند کاربردی است، GPUها به منظور رندر کردن گرافیکی بازیهای کامپیوتری طراحی شدهاند که بعدها پیشرفت یافتند تا محاسبات هندسی دیگر را سرعت بخشند (بطور مثال، تبدیل کردن چندضلعیها یا خطوط قائم دوار به سیستمهای مختصات مختلف مثل 3D). یک GPU کوچکتر از یک CPU است اما قادر است در مقایسه با CPU هستههای منطقی بیشتری داشته باشد (واحدهای حساب و منطق یا ALUها، واحدهای کنترل و حافظهی میانجی (caches)).
در نمودار بالا میتوانید ببینید که GPUها (قرمز و سبز) میتوانند بطور نظری 10 تا 15 برابر عملهای CPUها (آبی) را انجام دهند. این افزایش سرعت در عمل نیز تا حد زیادی قابل اعمال است. اگر CPU را مازراتی در نظر بگیرید، GPU را میتوان به عنوان یک کامیون بزرگ در نظر گرفت.
CPU(مازراتی) میتوانند مقادیر کمی از پکیجها (3 تا 4 مسافر) را در RAM با سرعت جا به جا کند در حالیکه که یک GPU(کامیون) آهستهتر است اما میتوانند مقادیر بیشتری از حافظه (حدودا 20 مسافر) را در یک نوبت جا به جا کند. این مفهوم در فیلم بطور مختصر بیان شده است:
چرا برای یادگیری عمیق GPUها را انتخاب کنیم؟
GPUها برای آموزش مدلهای هوش مصنوعی و یادگیری عمیق بهینهسازی شدهاند چرا که میتوانند چندین محاسبه را بطور همزمان پردازش کنند. آنها تعداد زیادی هسته دارند که اجازه میدهد محاسبهی چندین پردازش موازی بهتر صورت بپذیرد. بعلاوه، محاسبات در یادگیری عمیق با مقادیر بسیاری داده سر و کار دارند که باعث میشود پهنای باند حافظهی GPU مناسبتر باشد. تعدادی پارامتر تعیین کننده برای معین کردن استفاده از CPU یا GPU برای آموزش مدل یادگیری عمیق وجود دارد:
پهنای باند حافظه
یکی از دلایل عمده که GPUها برای محاسبه سریعتر از CPU هستند، پهنای باند میباشد. با وجود مجموعه دادههای بزرگ، CPU حافظهی زیادی را هنگام آموزش مدل اشغال میکند. محاسبهی کارهای بزرگ و پیچیده تعداد زیادی چرخهی ساعت در CPU را در برمیگیرد _ CPU کارها را به ترتیب انجام میدهد و نسبت به همتای خود یعنی GPU هستههای کمتری دارد. از سوی دیگر، GPU مستقل دارای حافظهی اختصاصی VRAM (Video RAM) است. بنابراین حافظهی CPU میتواند برای انجام کارهای دیگر به کار رود.
اندازهی مجموعه داده
آموزش یک مدل در یادگیری عمیق نیازمند مجموعه دادهی بزرگی است، از این رو از لحاظ حافظه عملیاتهای محاسباتی بسیاری را در بر دارد. هر چقدر که محاسبات بیشتر باشد، مزیت GPU نسبت به CPU بیشتر احساس میشود.
بهینهسازی
بهینهسازی کارها در CPU بسیار آسانتر است. هستههای CPU کمتر اما قدرتمندتر از هزاران هستهی GPU هستند. هر هستهی CPU میتواند روی دستورالعملهای مختلف (معماری MIMD) کار کند، در حالیکه هستههای GPU که عموما در در بلوکهای 32هستهای مرتب شدهاند، دستورالعملهای مشابه را در یک زمان مشخص بصورت موازی انجام میدهد (معماری SIMD). این موازی سازی در شبکههای عصبی متراکم با توجه به زحمتی که در بر دارند، بسیار مشکل است. از این رو، اجرای تکنیکهای بهینهسازی پیچیده در GPU در مقایسه با CPU دشوارتر است.
آیا باید از GPU استفاده کنم؟
در جواب به این سوال مثل تمام پروژههای علم داده باید گفت که بستگی دارد. روابطی هست بین سرعت، اعتمادپذیری و هزینه که باید در نظر گرفته شود.
1. اگر شبکهی عصبی شما تا حدودی در ابعاد کوچک باشد، میتوانید آن را بدون GPU انجام دهید.
2. اگر شبکهی عصبی شما محاسبات زیادی را شامل صدها هزار پارامتر در بربگیرد، ممکن است بخواهید سرمایهگذاری نسبت به GPU را در نظر بگیرید.
طبق یک قاعدهی کلی، GPUها برای یادگیری ماشین امنتر هستند چون در باطن مدل در حال آموزش علم داده شامل محاسبات ماتریسی ساده است و اگر این محاسبات بصورت موازی انجام شوند، سرعت هر یک ممکن است به میزان زیادی بهبود پیدا کند.
نمونههای GPUی ابری
باید GPUهای ابری را نیز در نظر داشته باشید. اگر نمیخواهید تعدادی GPUی گران قیمت بخرید، میتوانید در صورت تقاضا از GPUهای کمپانیهایی با فضای ابری استفاده کنید. در این صورت میتوانید در هزینههای تهیهی سختافزار صرفه جویی کرده و از همه بهتر اینکه چندان گران قیمت نیستند، هزینهها میتواند کمتر از 0.25 دلار برای هر ساعت استفاده از آنها باشد. زمانی که کارتان تمام شد، یادتان باشد که نمونهی ابری خود را ببندید.
شما یک کامپیوتر یا سرور خارجی را اجاره میکنید، چیزی نیست که بطور مستقل آن را اجرا کنید. تنها بستن مرورگر یا خاموش کردن کامپیوترتان کافی نیست، این کارها تنها ارتباط بین دستگاه شما و این سرور از راه دور را قطع میکنند و چیزی را که شما دارید برای آن هزینه میکنید را نمیبندد. در غیر اینصورت، شما برای تمام زمانی که این سرور کار میکند متحمل هزینه میشوید و با دیدن یک صورت حساب سنگین غافلگیر خواهید شد!
CPUها برای محاسبات واحد و پیچیدهتر بصورت ترتیبی عالی هستند، در حالیکه GPUها در انجام تعداد زیادی محاسبهی ساده بصورت موازی بهتر عمل میکنند. نمونههای محاسبهی GPU عموما دو تا سه برابر هزینهی نمونههای محاسبهی CPU میباشید، بنابراین پیشنهاد میکنم از CPUها استفاده کنید، مگر اینکه در آموزش مدلهای مبتنی بر GPUی خود عملکرد دو تا سه برابری مشاهده کنید.
حرف اخر
ما در مقاله قبل فهمیدیم GPU چیست و این مقاله ما را بیشتر با دنیای جذاب GPU آشنا کرد.و به عنوان محصولی جدید اهمیت بالایی در استفاده ما دارد
افکارتان را باما در میان بگذارید