GPU (واحد پردازش گرافیکی) پردازندهای است که از هستههای کوچکتر و تخصصیتر تشکیل شده است. در اصل برای تسریع محاسبات گرافیکی طراحی شده بودند، GPUها برای کار در پردازش موازی توسعه داده شدند، به این معنی که آنها قادر به پردازش همزمان دادهها به منظور تکمیل سریعتر وظایف هستند. به عبارت دیگر، پردازندههای گرافیکی قادر به انجام محاسبات ریاضی سریع هستند که برای پردازش تصاویر، انیمیشن و فیلم بسیار مناسب است. به تازگی مردم شروع به استفاده از GPU برای سایر برنامهها کردهاند، مانند یادگیری ماشین و تولید محتوای خلاق(creative production). محاسبات این عملیات بسیار شبیه به محاسبات پردازش گرافیک است. الگوریتم های یادگیری عمیق به هزاران نوع محاسبات یکسان نیاز دارند که اغلب ضرب ماتریسی هستند. GPU میتواند این محاسبات را بین صدها هستهای که دارد تقسیم کند که باعث افزایش سرعت در پردازش این وظایف خواهد شد.
انواع پردازنده گرافیکی
پردازندههای گرافیکی دو نوع هستند: یکپارچه (integrated) و گسسته (discrete). GPU یکپارچه بر روی تراشه CPU تعبیه شده است. این نوع GPU حافظه اختصاصی خود را ندارد، در عوض حافظه خود را با CPU به اشتراک میگذارد. یک GPU یکپارچه به اندازه یک GPU اختصاصی قدرتمند نیست، اما برای مواردی مانند وبگردی یا استریم نشان می دهد که کافی هستند. تراشههای M جدید اپل از یک GPU یکپارچه استفاده میکنند:
یک GPU مجزا از پردازنده جدا شده است. آنها حافظه اختصاصی خود را دارند و بنابراین به رم سیستم شما متکی نیستند. GPUهای مجزا را میتوان بیشتر به GPU بازی و GPU ایستگاه کاری تقسیم کرد. پردازندههای گرافیکی بازی همانهایی هستند که همانطور که از نامشان پیداست، برای بازی طراحی شدهاند که به راحتی برای مصرفکنندگان قابل دسترسی هستند. بنابراین وظیفه اصلی آنها تولید نرخ فریم بالا است. یک GPU ایستگاه کاری برای کارهایی مانند مدلسازی سه بعدی، ویرایش ویدیو، یادگیری ماشین و غیره طراحی شده است. البته باید توجه داشت که پردازندههای گرافیکی بازی نسل جدید قادر به اجرای این وظایف حرفهای نیز هستند.
تفاوت بین CPU و GPU چیست؟
شما میتوانید به CPU به عنوان مغز کامپیوتر نگاه کنید که دستورالعملها و قدرت پردازش را برای انجام کار به کامپیوتر ارائه میدهد. برای ارائه این دستورالعملها، یک CPU باید بتواند سریع فکر کند(think)، به همین دلیل است که CPUها به حافظه کش زیادی مجهز هستند. CPU ها به چندین هسته مجهز هستند، اکثر مصرف کنندهها بین دو تا دوازده core دارند. این هستهها از حافظه کش برای کاهش تاخیر استفاده میکنند و CPU را قادر می سازند دستورالعمل های ارائه شده توسط برنامه ها را سریعتر پردازش کند که باعث میشود یک CPU در پردازش سریال خوب باشد.
از سوی دیگر، یک GPU برای انجام کارهای مرتبط با گرافیک مانند گرافیک، افکت و فیلم طراحی شده است. برای انجام این کار به طور موثر، یک GPU باید بتواند دادههای زیادی را به طور همزمان مدیریت کند، یعنی GPU باید توان عملیاتی بالایی داشته باشد. به عنوان مثال، وقتی در حال بازی هستید، میخواهید FPS خود را به حداکثر برسانید تا تجربه بازی روانتری داشته باشید. پردازندههای گرافیکی این کار را با تقسیم کردن مشکلات به هزاران یا گاهی میلیونها کار مجزا انجام میدهند و آنها را بهطور همزمان حل میکنند که پردازش موازی نامیده میشود و به همین دلیل است که پردازندههای گرافیکی به صدها یا گاهی حتی هزاران هسته تخصصیتر مجهز میشوند که به GPUتوان عملیاتی بالایی را میدهد.
تصویر زیر معماری CPU و GPU را نشان میدهد. مشاهده میشودکه یک CPU در مقایسه با GPU حافظه کش بسیار بیشتری دارد که نیاز CPU را به دسترسی به حافظه اصلی و کندتر مانند هارد دیسک و بنابراین تاخیر را کاهش میدهد، یعنی CPU را قادر میسازد سریعتر فکر کند. تصویر همچنین به وضوح نشان میدهد که یک GPU از هستههای بسیار بیشتری نسبت به یک CPU (مربع های سبز) تشکیل شده است. این هستهها کوچکتر از هستههای مورد استفاده در یک CPU هستند، اما GPU را قادر میسازند تا محاسبات مشابهی را در یک جریان داده (data stream) به طور همزمان انجام دهد.
میتوانید CPU را با یک دستیار مقایسه کنید که میتواند هر کاری را که از آن بخواهید انجام دهد: خانهتان را تمیز کند، یک غذای خوب برایتان بپزد یا چیزی برای نوشیدن بیاورد. تعداد کارهایی که یک CPU می تواند همزمان انجام دهد به تعداد هستههایی که دارد محدود میشود. به عنوان مثال، یک CPU با شش هسته، میتواند شش کار را به طور همزمان انجام دهد. یک GPU را می توان با کلنی مورچهها مقایسه کرد: هر مورچه ممکن است فقط چند کار مانند جمع آوری غذا یا مراقبت از بچهها و ملکه خود را بلد باشد، اما آنها میتوانند این کارها را با کارایی بسیار بالا انجام دهند در زمان مشابه
به اختصار:
- CPU یک تراشه با هدف عمومیتری است که میتواند بسیاری از کارها را با تاخیر کم انجام دهد، اما عدم موازی سازی توان پردازش CPU را محدود میکند.
- GPU تخصصیتر است و از هستههای کوچکتری استفاده میکند که قادر به انجام محاسبات مشابه به طور همزمان هستند. این باعث میشود یک GPU برای
- موازیسازی عالی باشد، زیرا توان پردازشی بالا است، اما هستههای کوچکتر به این معنی است که GPU تاخیر پایینی که یک CPU ارائه میکند، ندارد.
- CPU بیشتر شبیه یک تراشه عمومی است، در حالی که GPU تخصصیتر است
- CPU از هستههای کمتری تشکیل شده ، در حالی که GPU میتواند صدها هسته داشته باشد
- CPU در پردازش سریالی خوب است، در حالی که GPU در پردازش موازی خوب است
- CPU تاخیر کم را ارائه میدهد، در حالی که GPU توان عملیاتی بالایی را ارائه نماید
مقایسه GPU و CPU برای یادگیری ماشین
CPU به عنوان انتخاب اصلی برای فرآیندهای یادگیری ماشینی فشرده داده (data-intensive) مانند آموزش در نظر گرفته نمیشود، زیرا (بیشتر اوقات) در مقایسه با GPU کارآمدترین گزینه نیست. با این حال، برخی از این فرآیندها یا الگوریتم ها به قدرت موازی سازی که یک GPU ارائه م دهد نیاز ندارند. به عنوان مثال: مدلی که بر روی دادههای سری زمانی اجرا میشود، یا یک شبکه عصبی تکراری که از دادههای متوالی استفاده میکند. در این موارد CPU مقرون به صرفه ترین گزینه خواهد بود. علاوه بر این، برخی از عملیات یادگیری ماشین مانند پیش پردازش دادهها برای CPU مناسبتر هستند، زیرا این کارها به جای قدرت موازی سازی GPU، به توان متوالی یک CPU نیاز دارند.
معمولا پردازندههای گرافیکی گرانتر از CPU هستند که تا حد زیادی به دلیل این واقعیت است که در بیشتر موارد یک GPU پیچیدهتر از یک CPU است. پردازندههای گرافیکی NVIDIA مبتنی بر ساختار پاسکال از 16 میلیارد ترانزیستور استفاده میکنند، در حالی که سرورهای CPU اینتل با 5 میلیارد ترانزیستور و یک CPU معمولی مصرفکننده از کمتر از یک میلیارد ترانزیستور استفاده میکند. به این ترتیب، مصرف انرژی یک GPU بیشتر از یک CPU و هزینههای عملیاتی یک GPU بیشتر از یک CPU است.
در برخی موارد استفاده از یک GPU منجر به افزایش سرعت زیاد هنگام مشاهده کل عملیات نمیشود. در گذشته، یکی از همکارانم سرعت اجرای یک مدل ONNX را بر روی CPU و GPU مقایسه کرد. نتایج جالب بود: GPU تقریبا دو برابر سریعتر در استنباط (inferencing) بود، اما کل زمان درخواست، که شامل آپلود/دانلود فایل و سایر هزینهها میشود، کمتر از 0.02 ثانیه متفاوت بود. این امر آنچه را قبلا میدانستیم تأیید میکند: استفاده از یک GPU برای استنباط(inferencing) یا آموزش میتواند منجر به افزایش عملکرد عظیم شود، گاهی اوقات حتی بیشتر از ضریب 60، اما حتما سرعت کل عملیات را افزایش نمیدهد.
به طور کلی، الگوریتمهای یادگیری عمیق برای آموزش به دادههای زیادی نیاز دارند. این مجموعه آموزشی بزرگتر با تعداد بیشتری از عملیات محاسباتی همراه است. این محاسبات از نظر ریاضی بسیار شبیه به محاسبات مورد نیاز برای دستکاری تصویر (image manipulation) است، محاسباتی که GPU برای اجرای آنها طراحی شده است. به این ترتیب، الگوریتمهای یادگیری عمیق برای پردازنده های گرافیکی بسیار مناسب هستند زیرا می توانند از قدرت موازی سازی بالاتر بهره برداری کنند. هر چه مجموعه دادهای که برای آموزش استفاده میشود بزرگتر باشد، از نظر سرعت اجرا، مزیت استفاده از GPU در مقایسه با CPU بیشتر خواهد بود.
صرفه جویی در هزینهها با پردازندههای گرافیکی درخواستی
امروزه پردازندههای گرافیکی در فضای ابری نیز در دسترس هستند. پردازندههای گرافیکی ابری یا پردازندههای گرافیکی درخواستی، نیاز به خرید یک GPU داخلی را برطرف میکنند. در حالی که استفاده از پردازندههای گرافیکی درخواستی ممکن است گرانتر از خرید GPU خودتان باشد، اما در عمل اغلب اینطور نیست. بیایید بیشتر به مزایا و معایب استفاده از یک GPU داخلی در مقابل یک پردازنده گرافیکی ابری بپردازیم.
پردازنده گرافیکی داخلی
البته، استفاده از یک پردازنده گرافیکی داخلی یا خرید یک پردازنده گرافیکی میتواند سرمایه گذاری اولیه بزرگی باشد، زیرا خود پردازنده گرافیکی به یک زیرساخت برای استفاده بهینه نیاز دارد. GPU به تولید گرمای زیادی معروف است و برای عملکرد بهینه به برق زیادی نیاز دارند. البته گرمای تولید شده و توان مصرفی در هر مورد متفاوت است، اما شما میتوانید فرض کنید که یک GPU برای کارکرد موثر به یک سیستم خنک کننده خوب با منبع تغذیه کافی نیاز دارد. هزینههای این سیستمها برای هر دو میتواند به میلیونها تومان برسد. علاوه بر این، از سرورها برای قرار دادن GPU و زیرساخت آن استفاده میشود. این سرورها باید اسلات و ظرفیت پاور لازم برای GPU را داشته باشند. برای مثال، اگر از یک GPU سطح بالا برای آموزش و استنباط همراه با یک CPU رده پایین یا متوسط استفاده میکنید که دادهها را از قبل پردازش میکند، ممکن است در موقعیتی قرار بگیرید که CPU شما نتواند با GPU شما هماهنگ باشد. در نتیجه پردازنده گرافیکی شما برای دادهها کم میشود، زیرا باید منتظر بماند تا CPU پردازش آن را به پایان برساند.
استفاده از پردازندههای گرافیکی درخواستی به این معنی است که دادههای شما نیز باید پردازش و در فضای ابری ذخیره شوند، جایی که ممکن است در معرض خطر نقض دادهها از طریق حملات سایبری باشد. البته، داشتن یک GPU داخلی تضمین نمیکند که داده های شما 100٪ ایمن هستند. اما یک GPU داخلی حداقل کنترل کامل زیرساخت و ذخیره سازی داده را به شما میدهد.
GPUهای درخواستی
استفاده از GPUهای درخواستی باعث صرفه جویی در سرمایه گذاری اولیه برای تمام سخت افزارها می شود. این یکی از دلایلی است که پردازندههای گرافیکی درخواستی برای استارتآپها بسیار مناسب هستند: نه تنها میتوانند از پردازندههای گرافیکی پیشرفته بدون نیاز به سرمایهگذاری روی سختافزار استفاده کنند، بلکه بسته به تقاضا، افزایش یا کاهش آن آسانتر است. .
ارائهدهندگان ابری از شما میخواهند منابع GPU را رزرو کنید، که همانطور که نمودار زیر نشان میدهد میتواند منجر به پرداخت اضافی شود. UbiOps شرکتی است که فقط برای نیازهای محاسباتی واقعی شما از شما هزینه دریافت می کند، در نتیجه هرگز هزینه زیادی برای استفاده از GPU شما پرداخت نمی کند. UbiOps همچنین اطمینان حاصل می کند که به اندازه کافی GPU بر حسب تقاضا برای شما وجود دارد که بتوانید فوراً مقیاس را افزایش دهید، با توان عملیاتی بالا و 99.99٪ آپتایم.
کدام GPU برای شما بهترین است؟
تصمیم گیری اینکه کدام GPU برای موارد استفاده شما بهترین است، فرآیند دشواری است، زیرا باید انتخابهای زیادی انجام شود. اولین انتخابی که باید انجام دهید این است که از کارت گرافیک AMD استفاده کنید یا کارت گرافیک NVIDIA.
برای اکثر کتابخانههای بزرگتر، AMD از شما میخواهد از یک ابزار اضافی (ROCm) استفاده کنید، و در برخی موارد باید از یک نسخه قدیمیتر PyTorch یا Tensorflow استفاده کنید تا کارت به دلیل عدم پشتیبانی کار کند. کارتهای NVIDIA همچنین به CUDA دسترسی دارند که به دو چیز اشاره دارد: معماری موازی عظیم صدها هسته و مدل برنامه نویسی موازی CUDA. دومی به برنامه ریزی کارآمد تمام هستهها کمک میکند. اکثر کارتهای جدیدتر NVIDIA به طور خاص برای یادگیری ماشین طراحی شده اند، مانند سری های 40 و 30. این کارتها مجهز به هستههای Tensor که مانند هستههای CUDA اما تخصصیتر هستند. هستههای CUDA برای طیف وسیعی از وظایف بهینهسازی شدهاند، در حالی که هستههای Tensor برای سرعت بخشیدن به یادگیری عمیق و هوش مصنوعی بهینه شدهاند. توجه داشته باشید که پشتیبانی از کارتهای AMD در آینده بهبود خواهد یافت، اما در زمان نوشتن این مطلب، NVIDIA برنده آشکار بین این دو برند است.
اکنون زمان آن است که کمی عمیق تر به ویژگیهای مورد نظر برای GPU خود بپردازید. مهمترین ویژگی یک GPU ، حافظه (RAM) آن است که برای GPUها به آن VRAM هم گفته میشود. همانطور که قبلا ذکر شد، GPUها همه در مورد داشتن توان عملیاتی بالا هستند و توان عملیاتی یک GPU به VRAM بستگی دارد. VRAM به ویژه در صورتی که با حجم زیادی از داده کار میکنید مهم است – به صدا، تصاویر یا ویدیو فکر کنید.
4 گیگابایت رم حداقل مطلق در نظر گرفته می شود و با این مقدار رم می توانید با مدلهای نه چندان پیچیده کار کنید. برای مثال، مدلهای یادگیری عمیق، برای این مقدار VRAM کشش خواهند داشت، اما هر چیزی که پیچیدهتر باشد به خوبی اجرا میشود. 12 گیگابایت رم به عنوان بهترین ارزش برای پول در نظر گرفته میشود، زیرا برای مقابله با اکثر مدلهای بزرگتر که با فیلمها و تصاویر سروکار دارند کافی است، اما به ضرر شما نیست. البته، اگر بودجه شما اجازه م دهد، می توانید یک GPU با VRAM بیشتری تهیه کنید.
نکته بعدی که باید در نظر گرفت تعداد هستههاست. هرچه یک GPU هستههای بیشتری داشته باشد، وظایف بیشتری را میتواند به طور همزمان انجام دهد و بنابراین می تواند سریعتر محاسبه کند. همانطور که قبلا ذکر شد، کارتهای NVIDIA به هستههای CUDA و Tensor Cores مجهز هستند. هستههای CUDA عمومیتر هستند و برای بهینه سازی کارایی برای طیف وسیعی از وظایف طراحی شدهاند، در حالی که هستههای Tensor به طور خاص برای بهینه سازی یادگیری ماشین و وظایف یادگیری عمیق طراحی شده اند.
یکی دیگر از مواردی که باید در نظر گرفت، قابلیت محاسباتی GPU است. قابلیت محاسباتی نشاندهنده قدرت محاسباتی یک GPU است و با ویژگیهای سختافزاری GPU (مثل تعداد هستهها) تعریف میشود. قابلیت محاسباتی یک GPU با معماری ساخته شده در آن مرتبط است و تعیین میکند که از چه ویژگی هایی میتوانید استفاده نمائید. برای مثال، اگر میخواهید از Tensorflow با شتاب GPU استفاده کنید، باید یک GPU با قابلیت محاسبه 3.5 یا بالاتر داشته باشید.
معیار دیگری که باید به آن توجه داشت، توان طراحی حرارتی (TDP) است که NVIDIA آن را به صورت زیر تعریف می کند:
TDP توانی است که یک زیرسیستم (subsystem) مجاز است برای یک برنامه real world بگیرد و همچنین حداکثر مقدار گرمای تولید شده توسط مولفهای است که سیستم خنک کننده میتواند تحت شرایط دنیای واقعی (real world) دفع کند.
TDP نشان دهنده میزان قدرتی است که GPU شما در یک سناریوی واقعی میتواند جذب کند. به طور کلی، هرچه TDP یک پردازنده گرافیکی بیشتر باشد، مصرف برق بیشتر و هزینههای عملیاتی بالاتر خواهد بود.