مقایسه پردازش CPU و GPU در یادگیری ماشین

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

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

یک تاریخچه کوتاه

واحد پردازش مرکزی (CPU) اساساً مغز هر دستگاه محاسباتی است. CPU دستورات یک برنامه را با عملیات کنترلی، منطقی و ورودی/خروجی به انجام می رساند.

اولین پردازنده – واحد ۴۰۰۴ – توسط اینتل تنها ۵۰ سال پیش یعنی در دهه ۱۹۷۰ ساخته شد. پس از آن بیشتر پردازنده ها با یک هسته طراحی شدند. به این معنی که فقط یک عملیات می تواند در هر لحظه انجام شود. در سال های بعد، با توجه به پیشرفت های چشمگیر در طراحی، تحقیق و ساخت تراشه، بازار به سمت پردازنده های دو هسته ای و  چند هسته ای حرکت کرد. آنها سریع تر بودند زیرا دیگر می توانستند دو یا چند عملیات را هم زمان انجام دهند.

امروزه هم چنان CPU ها، تعداد انگشت شماری هسته در اختیار می گذارند و طراحی اولیه و هدف آن ها (برای پردازش محاسبات پیچیده) عملاً تغییری نکرده است. اساساً CPU ها برای مسائلی کاربرد دارند که نیازمند تجزیه و تحلیل یا تفسیرهای منطقی پیچیده هستند.

خیزش GPU ها

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

یک GPU دارای واحدهای منطق ریاضی (Arithmethic Logic Units یا ALU) بیشتری در مقایسه با CPU است که به افزایش توانایی آن در پردازش موازی عملیات های ساده می انجامد.

قدمت GPU ها تقریباً به اندازه بازی های کامپیوتری است و به دهه هفتاد میلادی باز می گردد. لکن تا قبل از تولید پردازنده های GeForce شرکت Nvidia استفاده از این نوع پردازنده خیلی فراگیر نبود. در آغاز GPU صرفاً برای رندر گرفتن در بازی های کامپیوتری طراحی گردید. در ادامه برای شتاب دهی به محاسبات هندسی دیگر توسعه یافت (مثلاً تبدیل چندضلعی ها و یا چرخش خط ها در دستگاه های مختصات متفاوت).

Nvidia یک معماری پردازش موازی و یک پلتفرم برای GPU های خود ایجاد نمود و آن را CUDA نامید. این معماری و پلتفرم به توسعه دهنده ها دسترسی و توانایی می داد تا عملیات پردازشی ساده را از طریق کد به صورت موازی انجام دهند.

معماری GPU های CUDA

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

دسترسی به CPU و GPU

CPU ها برای شاغلین در علوم داده در دسترس است. برای این کار می توان از سامانه های ابری (Cloud)، میکرو سرویس های بدون سرور یا سرویس های پایه ای و کاربردی (BaaS) استفاده نمود. با استفاده از کتابخانه های برنامه نویسی (Programming Library) گوناگون، توسعه دهنده ها می توانند سرویس های یادگیری ماشین API-محور را به هر برنامه ای اضافه نمایند. هم چنین می توانند برنامه خود را با ابزارهای مدرنی مانند پردازش جریانی (Stream Processing) یا دریاچه داده (data lake) ادغام نمایند.

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

به بیان دیگر CPU ها در محاسبات پیچیده تکی که به صورت ترتیبی انجام می شوند، بهترین هستند در حالی که GPU ها در محاسبات متعدد اما ساده تر و به صورت موازی بهتر عمل می کنند.

محاسبات با استفاده از GPU عموماً دو تا سه برابر انجام محاسبات مشابه با استفاده از CPU هزینه دارند. بنابراین در صورتی که GPU ها حداقل دو تا سه برابر CPU ها در محاسبات شما کارآیی ندارند توصیه می کنم به سمت CPU ها بروید (منظور از هزینه در این جا زمان، مصرف انرژی و یا هزینه خدمات پردازش ابری است).

آینده

مدارهای مجتمع با کاربرد خاص (ASICS) در افق طراحی پردازشگرها هستند. بدین ترتیب که تراشه ها به طور خاص برای یک نوع کاربری سفارشی طراحی گردند.

یکی از مثال های بزرگ ASICS رده ای از پردازشگرها هستند که برای استخراج بیت کوین توسعه داده شده اند و شامل حل مسائل ریاضی فشرده (hash) برای پیدا کردن بلوک (در یک زنجیره از بلوک ها) می گردد. یکی دیگر از ASIC های قابل توجه در زمینه ی بیت کوین، بیت فیوری (BitFury) است که تراشه ای ۱۶ نانومتری چند هسته ای  ASIC آن می تواند به سرعت ۸۰ گیگاهرتز (بیش از هشتاد میلیون HASH در هر ثانیه) برسد.

در مقاله ای جدید، دلویت گلوبال پیش بینی کرده است که تا پایان سال ۲۰۱۸ بیش از ۲۵ درصد از تمام تراشه های شتاب دهنده یادگیری ماشین ASICS یا FPGAS خواهند بود. وقتی این اتفاق بیافتد، برنامه های با قابلیت یادگیری ماشین احتمالاً موجب تغییرات بزرگ صنعت و به طور هم زمان گسترش به حوزه های جدید خواهند شد.