/  آموزش   /  کدام کارت‌گرافیک ها برای یادگیری عمیق مناسب هستند؟
Intel-Xe-Gpu

کدام کارت‌گرافیک ها برای یادگیری عمیق مناسب هستند؟

جی‌پی‌یو چیست؟

Graphics processing unit (GPU) یک واحد پردازش گرافیک است، یک تراشه منطقی است که به عنوان پردازنده شناخته می‌شود. این امر عمدتاً به کامپیوتر یا لپ تاپ کمک می‌کند تا گرافیک و تصاویر ایده‌آل را به کاربر ارائه دهد. این مورد برای رمزگذاران، طراحان، ویرایشگران فیلم و تقریباً در مورد هر کسی که می‌خواهد تصاویر درجه یک داشته باشد، مناسب است.

شما می‌توانید بهترین کارت گرافیک (GPU) را برای یادگیری ماشین در کارت پلاگین پیدا کنید. این دستگاه در چیپ‌ست مادربرد رایانه واقع شده است. پردازنده یا واحد پردازش مرکزی به عنوان واحد اصلی عملکرد رایانه یا لپتاپ در نظر گرفته می‌شود اما عملکرد آن به کارت گرافیک بستگی دارد.

یادگیری ماشین (Deep Learning) چیست؟

یادگیری ماشین (همچنین به عنوان یادگیری ساختار یافته عمیق نیز شناخته می شود بخشی از یک خانواده گسترده تر از روش های یادگیری ماشین بر اساس شبکه های عصبی مصنوعی با یادگیری نمایش است. یادگیری می تواند تحت نظارت، نیمه نظارت یا بدون نظارت باشد.

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

حال به مبحث اصلی این مقاله می پردازیم که کدام GPU ها در یادگیری ماشین مناسب ترند: یادگیری ماشین یک زمینه با الزامات محاسباتی شدید است و انتخاب GPU شما اساساً تجربه یادگیری ماشین شما را تعیین می کند. اما اگر بخواهید GPU جدید بخرید چه ویژگی هایی مهم است؟ GPU RAM، هسته ها، هسته های تنسور؟

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

بررسی فوری یادگیری ماشین

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

سپس برآورد نظری برای عملکرد GPU انجام می دهم و آنها را با برخی از معیارهای بازاریابی NVIDIA هماهنگ می کنم تا داده های عملکرد مطمئن و بی طرفانه بدست آورم. در مورد ویژگی های منحصربه فرد سری جدید پردازنده گرافیکی NVIDIA RTX 30 Ampere بحث می کنم که کارت گرافیکی قابل تأمل است. از آنجا، من GPU را برای تنظیمات 1-2 ، 4 ، 8 GPU و خوشه های GPU توصیه می کنم.

Intel-Xeon-Gpu

مهم ترین مشخصات جی‌پی‌یو برای سرعت پردازش یادگیری ماشین 

با کمک این بخش می توانید درک بصری بیشتری از نحوه تفکر درباره عملکرد یادگیری ماشین ایجاد کنید. این درک به شما کمک می کند تا GPU های آینده را خود ارزیابی کنید.

هسته های تنسور
  • هسته های تنسور چرخه های مورد استفاده برای محاسبه عملیات ضرب و جمع را 16 برابر می کنند: در مثال برای یک ماتریس 32 × 32، از 128 چرخه به 8 چرخه.
  • هسته های تنسور اعتماد به دسترسی تکراری حافظه مشترک را کاهش می دهند، بنابراین چرخه های اضافی برای دسترسی به حافظه ذخیره می شود.
  • هسته های تنسور آن قدر سریع هستند که دیگر محاسبه گلوگاه نیست. تنها گلوگاه انتقال داده ها به هسته های تنسور است.

در حال حاضر GPU های ارزان قیمت به اندازه کافی وجود دارد که تقریباً همه می توانند GPU با هسته های Tensor را تهیه کنند. به همین دلیل است که من فقط GPU های دارای هسته Tensor را توصیه می کنم. درک نحوه کار آنها برای درک اهمیت این واحدهای محاسباتی ویژه ضرب ماتریس مفید است. در اینجا من یک مثال ساده از ضرب ماتریس A * B = C را به شما نشان می دهم، جایی که تمام ماتریس ها اندازه 32 × 32 دارند، یک الگوی محاسباتی با هسته های Tensor و بدون آن به نظر می رسد.

این یک مثال ساده است، نه روش دقیق نحوه نوشتن هسته ضرب ماتریس با عملکرد بالا، اما تمام اصول را دارد. یک برنامه نویس CUDA این را به عنوان اولین “پیش نویس” در نظر می گیرد و سپس آن را گام به گام با مفاهیمی مانند بافر کردن دوگانه، بهینه سازی ثبت نام، بهینه سازی اِشغال، موازی سازی سطح دستورالعمل و بسیاری دیگر بهینه می کند، که من در این مرحله بحث نمی کنم.

برای درک کامل این مثال، باید مفاهیم چرخه ها را درک کنید. اگر پردازنده با سرعت 1GHz کار کند، می تواند 10 ^ 9 سیکل در ثانیه انجام دهد. هر چرخه فرصتی برای محاسبه است با این حال، بیشتر اوقات، عملیات بیش از یک چرخه طول می کشد. بنابراین خط لوله ای ایجاد می کند که برای شروع یک عملیات باید منتظر بماند تعداد چرخه های زمان لازم برای پایان عملیات قبلی به این عمل تأخیر عمل نیز می گویند.

در اینجا چند دوره مهم زمان یا تاخیر برای انجام عملیات وجود دارد:
  • دسترسی حافظه جهانی (حداکثر 48 گیگابایت): 200 ~ چرخه
  • دسترسی به حافظه مشترک (حداکثر 164 کیلوبایت در هر پردازنده جریانی): 20 ~ چرخه
  • ضرب و جمع ذوب شده (FFMA): 4 دوره
  • ضرب ماتریس هسته تنسور: 1 چرخه

علاوه بر این، باید بدانید که کوچکترین واحدهای رشته در GPU ، یک بسته 32 رشته ای است، که اصطلاحاً warp نامیده می شود. تارها معمولاً به صورت الگویی همزمان عمل می کنند، رشته های درون تار باید منتظر یکدیگر باشند. تمام عملیات حافظه در GPU برای تاب دادن بهینه شده است. به عنوان مثال، بارگیری از حافظه جهانی با دانه بندی 32 * 4 بایت اتفاق می افتد، دقیقاً 32 شناور، دقیقاً یک شناور برای هر نخ در تاب.

می توانیم حداکثر 32 رشته = 1024 رشته در یک پردازنده چند جریان (SM)، معادل GPU هسته پردازنده داشته باشیم. منابع یک SM بین همه تابهای فعال تقسیم می شود. این بدان معناست که گاهی اوقات می خواهیم برای داشتن ثبات/ حافظه مشترک/ منابع Tensor Core به ازای هر تاب، تعداد کمتری تار را اجرا کنیم.

برای هر دو مثال زیر، تصور می کنیم که منابع محاسباتی یکسانی داریم. برای این مثال کوچک از ضرب ماتریس 32 × 32، ما از 8 SM (حدود 10٪ از RTX 3090) و 8 warp در هر SM استفاده می کنیم.

ضرب ماتریس بدون هسته های تنسور

اگر بخواهیم ضرب ماتریس A * B = C را انجام دهیم، جایی که هر ماتریس به اندازه 32 × 32 باشد، پس می خواهیم حافظه ای را بارگیری کنیم که بارها و بارها به حافظه مشترک دسترسی پیدا می کنیم زیرا تأخیر آن حدوداً ده برابر کمتر است (200 چرخه در مقابل 20 چرخه) بلوک حافظه در حافظه مشترک اغلب به عنوان یک کاشی حافظه یا فقط یک کاشی نامیده می شود.

قرار دادن دو شناور 32 × 32 در یک کاشی حافظه مشترک می تواند به طور موازی با استفاده از تارهای 2 * 32 اتفاق بیفتد. ما 8 SM با هر 8 warp داریم، بنابراین به دلیل موازیسازی، فقط باید یک بار متوالی از حافظه جهانی به حافظه مشترک انجام دهیم که 200 چرخه طول می کشد.

برای انجام ضرب ماتریس، اکنون باید بردار 32 عددی را از حافظه مشترک A و حافظه مشترک B بارگیری کرده و ضرب و جمع شدن ذوب شده (FFMA) را انجام دهیم. سپس خروجی ها را در رجیسترها ذخیره کنید. ما کار را تقسیم می کنیم تا هر SM 8 محصولی نقطه ای (32 32 32) برای محاسبه 8 خروجی C انجام دهد.

چرا این دقیقاً 8 است (4 در الگوریتم های قدیمی تر) بسیار فنی است. برای درک این موضوع پست وبلاگ Scott Gray در مورد ضرب ماتریس را توصیه می کنم. این بدان معناست که ما 8 برابر حافظه مشترک با هزینه 20 سیکل و 8 عملیات FFMA (32 موازی) داریم که هزینه هر کدام 4 چرخه است. در کل، بنابراین ما هزینه ای داریم:

200 چرخه (حافظه جهانی) + 8 * 20 چرخه (حافظه مشترک) + 8 * 4 چرخه (FFMA) = 392 چرخه

بیایید هزینه چرخه استفاده از هسته های تنسور را بررسی کنیم.

ضرب ماتریس با هسته های تنسور

احتمالا نسبت هزینه به کارایی GPU مهمترین معیار انتخاب یک پردازنده گرافیکی است. نمودار زیر تجزیه و تحلیل نسبت هزینه به کارایی را نشان می‌دهد که دربرگیرنده مواردی نظیر پهنای باند حافظه، TFLOPs و هسته‌های تنسور است.

Post a Comment