اینتل با استفاده از فرمت جدید bfloat126 گوگل در پردازندههایش، نوید افزایش حداقل ۱.۷ برابری سرعت آموزش به شبکههای یادگیری عمیق را میدهد.
این روزها، آموزش شبکههای عصبی عمیق یکی از سنگینترین وظایف پردازشی در مراکز داده محسوب میشود و به تجربه، آموزش این مدلها حتی از شبیهسازهای علم فیزیک که از HPC (محاسبات کامپیوتری با توان بالا) استفاده میکنند، به منابع محاسباتی بیشتری نیاز دارند. هرچند که یادگیری عمیق اساساً نیازهای سختافزاری متفاوتی نسبت به سیستمهای محاسبات سنگین معمول دارد.
این تفاوت در بیشتر موارد به فرمتهای عددی مربوط میشود. یعنی درحالی که مدلهای HPC متکی بر FP64 (محاسبه با دقت ممیز شناور دوگانه یا ۶۴ بیتی) و اندکی هم فرمت FP32 (ممیز شناور یک گانه یا ۳۲ بیتی) هستند، مدلهای یادگیری عمیق معمولاً برپایهی FP32 و اندکی هم FP16 (با دقت نیم) است. بهطور کلی هر چقدر در محاسبات از مقادیری با دقت پائینتر استفاده کنید، بهتر است. زیرا نصفکردن بایتها، توان عملیاتی داده در یک برنامه را دو برابر میکند. این مسئله هم برای HPC و هم برای یادگیری عمیق یا هر چیز دیگری صدق میکند.
تمامی این فرمتهای عددی بر پایهی استاندارد IEEE754 هستند که ۳۰ سال پیش، زمانیکه از ممیز شناور بیشتر برای محاسبات علمی استفاده میشد، تنظیم شد. در نتیجه بخش مانتیسِ عدد (کسری) که در فرمتهای IEEE بیتهای قابل توجهی دارد، اکثر فضای داده را هم اشغال میکنند؛ یعنی معادل ۵۲بیت در FP64 و ۲۳بیت در FP32 و ۱۰بیت در فرمت FP16. هدف هم رسیدن به دقتهای بالا ست که درواقع بازتابی از قصد و نیت اولیه بود.
بخش توان در فرمتهای IEEE نسبتاً کوچکتر است که یعنی محدودهی پویای محدودی دارد. لذا اساس کار اینگونه است که اگر به محدودهی وسیعتری نیاز باشد، کافی است که از فرمتهای بزرگتر FP32 و FP64 و FP128 و... تا آنجا استفاده کنید که بخش توانِ عدد برای پوشش نیاز کاربردی شما به حد کافی بزرگ باشد.
یادگیری عمیق با دقتی پایینتر، عملکرد بهتری هم دارد
اما در یادگیری عمیق، لزوماً نیازی به دقت بالا نداریم. به قول پرادیپ دابی، مسئول آزمایشگاه محاسبات موازی اینتل، یادگیری عمیق با دقتی پایینتر، عملکرد بهتری دارد. هرچند تأیید میکند که درظاهر شاید کمی گیجکننده باشد، اما وقتی درحال آموزش به مدلهای یادگیری عمیق هستید، «نیاز به قابلیتی برای تعمیم دادن دارید.»
معنای حرف او این است وقتی مدلی را طراحی میکنید، بهتر است آنقدر عمومیت داشته باشد که بتواند محدودهای از احتمالات را پوشش بدهد. برای مثال، در تشخیص الگوها وقتی بهدنبال چیز خاصی مثل گربه هستید، بهتر است الگویی که معرف و نمایندهی گربه است، خیلی دقیق و ریز نشده نباشد. دقت بیش از حد، انواع تصاویر قابل تشخیص را محدود میکند و حتی مانعی برای همگرایی مدل در حین آموزش میشود.
از آن طرف قضیه، به یک محدودهی عددی کافی هم نیاز دارید تا مدلتان تعداد مناسبی از احتمالات را شامل بشود؛ چیزی که دابی آن را «یادگیری کمان» مینامد. بنابراین برای یادگیری عمیق، گستره از اهمیت بیشتری نسبت به دقت برخوردار است. یعنی برعکس اصل مورد استفاده در فرمتهای ممیز شناور IEEE است.
بهگفتهی دابی، فرمت FP16 در تلاش برای اختصاص بیتهای بیشتر به دقت، محدودهی پویا را بیش از حد محدود میکند، که باز آن گزینهای نیست که برای محاسبات یادگیری عمیق میخواستید. اتفاقی که غالباً با فرمت FP16 میافتد، این است که مدلتان گسترهی کافی را ندارد و نیازمند تنظیم پارامترهای جانبی از قبیل دامنهی یادگیری، سایز دستهبندیها و کاهش نمائی وزن خواهید بود.
با این اوصاف، bfloat16 متولد شد که اصطلاحاً به ممیز شناور مغزی ۱۶بیتی معروف شده است. bfloat16 در اصل توسط گوگل توسعه یافته که در نسل سوم واحدهای پردازش تِنسور خود (TPU) پیادهسازی کرده است. این فرمت توانسته نظر پشتیبانان مهمی بهویژه اینتل را به خود جلب کند که قصد دارد bfloat16 را در ساختار پردازندههای آیندهی کوپرلِیک زئون (Cooper Lake Xeon) و همچنین مدل ابتدائی پردازندهی شبکه عصبی نروانا (NNP-T1000) پیادهسازی کند.
bfloat16 شامل یک مانتیس ۷بیتی و یک توان ۸بیتی است. یعنی همان محدودهی FP32 را با دقتی پائینتر ارائه میکند که بهگفتهی اینتل چیزی بیش از دامنههای مورد نیاز یادگیری عمیق را پوشش میدهد. برای اثبات، دابی و تیمش از آزمایشگاه محاسبات موازی به همراه تعدادی از محققین فیسبوک، چند مدل معمول از یادگیری عمیق را به راه انداختند که درونشان شبکههای تودرتوی عصبی (CNNs) داشتند.
اینتل بهویژه از bfloat16 برای آموزش AlexNet ،ResNet-50 ،DC-GAN ،SR-GAN ،Baidu DeepSpeech2 و ماشین مترجم شبکهی عصبی گوگل (GNMT) استفاده کرد. همچنین آنها از چندین بارِپردازشی مرتبط با یادگیری عمیق صنعتی بنچمارک گرفتند: از یک شبکهی تخمین کلیکهای تبلیغاتی Deep and Cross و یک سیستم پیشنهاد DNN. که در آنها از دادههای bfloat16 برای مقادیر تنسور (فعالسازی و وزنها)، به همراه نتایج جمعآوری شده در FP32 استفاده شد.
از آنجاکه هنوز اینتل bfloat16 را در هیچیک از پردازندههایش پیاده نکرده، آنها از سختافزار بُرداری AVX512 فعلی موجود در پردازندههایشان استفاده کردند تا فرمت و عملیات لازم را شبیهسازی کنند که بهگفتهی محققین، «صرفاً بخش ناچیزی از توان واقعی» است.
دابی میگوید bfloat16 شبیهسازی شدهی آنها بهخوبی زیر بارِ پردازشی عمل کرد و همگرایی مدلها نیز به همان میزان از بازتکرار، در هنگام استفاده از FP32 بود و نیازی هم به تنظیم پارامترهای جانبی نداشت. درحقیقت، همانطور که در مقالهی تحقیقاتی دابی و همکارانش اشاره شده، اجراهای bfloat16 تقریباً همان مسیر اجراهای FP32 را طی کرده است.
در اصل آنها توانستند بدون هزینه و با کمی پیشبینی اتفاقی در برخی کارها همچون FMA یا (fused-multiply add) که نیاز به یک انباشتگر FP32 دارد، از مزیت توان عملیاتی ۱۶ بیتی بهرهمند بشوند. به ادعای دابی، بسته به اینکه تا چه میزان بتوانید محاسبات را در قلمرو bfloat16 نگه دارید، به بهبود حداقل ۱.۷ برابری سرعت در آموزش مدل دست خواهید یافت که با توجه به زمان چند روزه و حتی چند هفتهای در آموزش مدلها، مقدار بسیار قابل توجهی است.
محققین به این نتیجه رسیدهاند که bfloat16 میتواند مقادیر تِنسور را در بسیاری زمینههای کاربردی همچون دیدن، سخن گفتن، زبان، شبکههای مولد و سامانههای پیشنهاد نمایندگی کند، بیآنکه معایب پیادهسازی فرمت FP16 را داشته باشد. آنها در ادامه میگویند: «انتظار استفاده از bfloat16 را در زمینههای پرکاربرد و در مقیاسی صنعتی داشته باشید»؛ که با در نظرگرفتن پشتیبانی اینتل از این فرمت در پردازندههای عمومی همچون Xeon و پردازندههای اختصاصی NNP این اقبال قطعیت بیشتری پیدا میکند.
پاسخ ها