محققان MIT و NVIDIA دو روش جدید برای بهبود سرعت پردازش تنسورهای پراکنده ارائه کرده‌اند. تنسورهای پراکنده نوعی ساختار داده هستند که برای کارهای محاسباتی با کارایی بالا استفاده می‌شوند. این دو روش مکمل یکدیگر هستند و می‌توانند منجر به بهبودهای قابل توجهی در عملکرد و بهره‌وری انرژی سیستم‌هایی مانند مدل‌های عظیم یادگیری ماشینی شوند که هوش مصنوعی مولد را هدایت می‌کنند.

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

دو روش جدید که توسط محققان MIT و NVIDIA توسعه یافته اند، به دنبال بهره برداری موثر از مقادیر صفر در تنسورهای پراکنده هستند. این دو روش می توانند منجر به بهبود قابل توجهی در عملکرد و بهره وری انرژی سیستم های یادگیری ماشینی شوند.

با این حال، بهره برداری از پراکندگی در تنسورهای بزرگ چالش‌برانگیز است. یافتن مقادیر غیر صفر در یک تنسور بزرگ کار آسانی نیست. رویکردهای موجود اغلب مکان‌های مقادیر غیرصفر را با اعمال یک الگوی پراکندگی محدود می‌کنند، اما این محدودیت می‌تواند بر عملکرد و کارایی تأثیر بگذارد.

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

 تنسور‌ها و یادگیری ماشینی

محققان MIT و NVIDIA دو راه حل برای رفع چالش های بهره برداری از پراکندگی در تنسورهای بزرگ ایجاد کردند.

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

راه حل دوم یک روش جدید برای مدیریت داده هایی است که در حافظه جا نمی شوند. این روش از بافر ذخیره سازی برای ذخیره داده ها در صورت لزوم استفاده می کند، که می تواند ترافیک حافظه خارج از تراشه را کاهش دهد.

نتیجه هر دو راه حل افزایش عملکرد و کاهش انرژی مورد نیاز شتاب دهنده های سخت افزاری است که برای پردازش تنسورهای پراکنده طراحی شده اند.

معمولاً، شتاب‌دهنده‌های سخت‌افزاری تخصصی‌تر یا اختصاصی‌تر انعطاف‌پذیری کمتری نسبت به پردازنده‌های همه‌منظوره‌تر مانند CPU دارند. با این حال، تحقیقات جدید محققان MIT و NVIDIA نشان می‌دهد که می‌توان انعطاف‌پذیری و کارایی را با هم ترکیب کرد.

محققان MIT و NVIDIA نشان دادند که می‌توان شتاب‌دهنده‌های سخت‌افزاری را طوری طراحی کرد که هم انعطاف‌پذیر و هم کارآمد باشند. این پیشرفت می‌تواند به بهبود عملکرد و بهره‌وری انرژی سیستم‌های یادگیری ماشینی کمک کند.

محققان دیگری که در این پروژه همکاری کردند، یانان نلی وو و زی یو ژو، دانشجوی کارشناسی ارشد مهندسی برق و علوم کامپیوتر، و جوئل امر، استاد MIT در زمینه علوم کامپیوتر و مهندسی برق و عضو آزمایشگاه علوم کامپیوتر و هوش مصنوعی (CSAIL) هستند. این مقالات در سمپوزیوم بین المللی IEEE/ACM در ریزمعماری ارائه خواهند شد.

یافتن مقادیر صفر با یک روش کارآمد‌تر

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

میزان پراکندگی (درصد صفرها) و مکان صفرها می تواند برای مدل های مختلف متفاوت باشد.

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

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

محققان MIT شتاب‌دهنده سخت‌افزاری جدیدی به نام HighLight طراحی کرده‌اند که می‌تواند طیف گسترده‌ای از الگوهای پراکندگی را پشتیبانی کند. این شتاب‌دهنده از تکنیکی به نام «پراکندگی ساختار سلسله مراتبی» استفاده می‌کند که مقادیر یک تنسور را به بلوک‌های کوچک‌تر تقسیم می‌کند. هر بلوک الگوی پراکندگی خاص خود را دارد.

رویکرد جدید با روش HighLight

این رویکرد باعث می‌شود که HighLight بتواند به طور کارآمدی بر روی مدل‌هایی با الگوهای پراکندگی مختلف کار کند. همچنین، HighLight می‌تواند به طور کارآمدی بر روی مدل‌هایی با هیچ مقدار صفر کار کند.

بعد از تقسیم مقادیر یک تانسور به بلوک‌های کوچک‌تر، محققان این بلوک‌ها را در یک سلسله مراتب ترکیب می‌کنند.

به عنوان مثال، یک مجموعه از چهار بلوک ممکن است شامل یک بلوک صفر و سه بلوک غیرصفر باشد.

این رویکرد باعث می‌شود که HighLight بتواند به طور مؤثرتری صفرها را پیدا کند و از آن بگذرد. این کار باعث کاهش محاسبات اضافی می‌شود و باعث می‌شود که HighLight از نظر انرژی کارآمدتر باشد.

به طور متوسط، طراحی شتاب‌دهنده HighLight حدود شش برابر بیشتر از سایر روش‌ها از نظر انرژی کارآمدتر بود.

محققان MIT می‌گویند که شتاب‌دهنده HighLight می‌تواند به طور موثر مدل‌های متراکم را شتاب دهد، زیرا سربار زیادی وارد نمی‌کند. همچنین، این شتاب‌دهنده می‌تواند از بار کاری با مقادیر متفاوتی از مقادیر صفر بر اساس پراکندگی ساختار سلسله مراتبی بهره‌برداری کند.

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

افزایش سرعت در یادگیری ماشینی با تکنیک جدید

محققان می‌توانند از پراکندگی برای کاهش مصرف انرژی و سرعت بخشیدن به پردازش داده‌ها روی یک تراشه کامپیوتری استفاده کنند.

از آنجایی که تنسورها اغلب بزرگتر از آن چیزی هستند که می‌توان در بافر حافظه روی تراشه ذخیره کرد، تراشه در هر زمان تنها بخشی از تنسور را می‌گیرد و پردازش می‌کند. به این بخش‌ها کاشی (از آنجایی که تنسورها اغلب بزرگتر از آن چیزی هستند که می‌توان در بافر حافظه روی تراشه ذخیره کرد، تراشه در هر زمان تنها بخشی از تنسور را می‌گیرد و پردازش می‌کند. به این بخش‌ها کاشی می‌گویند) می‌گویند.

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

در یک تانسور پراکنده، بسیاری از مقادیر داده‌ها صفر هستند. این بدان معناست که تراشه می‌تواند کاشی‌های بزرگ‌تری را در بافر ذخیره کند، زیرا مقادیر صفر نیازی به ذخیره‌سازی ندارند.

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

رویکردهای موجود اغلب به طور محافظه‌کارانه فرض می‌کنند که هیچ صفر وجود ندارد و در نهایت کاشی کوچک‌تری را انتخاب می‌کنند. این کار منجر به هدر رفتن فضاهای خالی در بافر می‌شود.

استفاده از تکنیک «بیش از حد رزرو»

برای حل مشکل تعیین اندازه کاشی مناسب در بافر برای تانسورهای پراکنده، محققان پیشنهاد می‌کنند از تکنیکی به نام “بیش از حد رزرو” استفاده شود.

در این تکنیک، کاشی‌ها کمی بزرگتر از اندازه‌ای انتخاب می‌شوند که انتظار می‌رود در بافر قرار بگیرند. این کار باعث می‌شود که تراشه بتواند در بیشتر موارد، کاشی‌های کامل را در بافر ذخیره کند.

اما گاهی اوقات، یک کاشی ممکن است مقادیر غیرصفر بیشتری داشته باشد تا اندازه بافر و در این صورت، برخی از داده‌ها از بافر خارج می‌شوند. این کار باعث می‌شود که تراشه بتواند پردازش را بدون وقفه ادامه دهد.

قبلاً، برای محاسبات سریع، سخت‌افزار باید اندازه کاشی‌ها را به دقت محاسبه می‌کرد. این کار زمان‌بر و انرژی‌بر بود.

محققان روشی جدید به نام «سوئیفتایلز» ابداع کردند که این مشکل را حل می‌کند. سوئیفتایلز اندازه کاشی‌ها را به‌طور تخمینی محاسبه می‌کند و در عین حال، درصد کمی از کاشی‌ها را بیش از حد رزرو می‌کند.

این روش باعث می‌شود که سخت‌افزار نیازی به محاسبات دقیق نداشته باشد و در نتیجه، سرعت محاسبات دو برابر و مصرف انرژی نصف می‌شود.

Swiftiles یک روش جدید برای محاسبه اندازه کاشی‌ها است. این روش نیازی به تکرارهای متعدد برای اصلاح تخمین ندارد.

Swiftiles از رزرو بیش از حد استفاده می‌کند.

Swiftiles با استفاده از رزرو بیش از حد، می‌تواند اندازه کاشی‌ها را به‌طور تخمینی محاسبه کند. این کار باعث می‌شود که سرعت محاسبات افزایش یابد.

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

بهترین روش‌ها برای پردازش موثر تنسورهای پراکنده در یادگیری ماشین

چگونه تنسورهای پراکنده را در یادگیری ماشین پردازش کنیم؟ بهترین روش‌ها برای پردازش موثر تنسورهای پراکنده در یادگیری ماشین به شرح زیر است:

1. بهره‌گیری از کتابخانه‌های تخصصی: کتابخانه‌هایی مانند TensorFlow و PyTorch ابزارها و توابع بهینه‌سازی شده‌ای برای کار با داده‌های پراکنده ارائه می‌دهند. به عنوان مثال، ماژول tf.sparse در TensorFlow عملیات مختلفی را روی تنسورهای پراکنده انجام می‌دهد.

2. فشرده‌سازی داده‌ها: با استفاده از الگوریتم‌هایی مانند فشرده‌سازی ماتریس‌های کم‌رتبه (Low-Rank Matrix Factorization) می‌توان حجم داده‌های پراکنده را کاهش داد و سرعت پردازش را افزایش داد. این روش در کاربردهایی مثل توصیه‌گرهای محصول و تحلیل شبکه‌های اجتماعی بسیار موثر است.

3. استفاده از الگوریتم‌های طراحی شده برای داده‌های پراکنده: برخی الگوریتم‌ها مثل شبکه‌های کانولوشنی گرافی (Graph Convolutional Networks) به طور خاص برای کار با داده‌های پراکنده طراحی شده‌اند. این الگوریتم‌ها با استفاده از ساختار گرافی داده‌ها، اطلاعات مفیدی را استخراج می‌کنند که در روش‌های سنتی قابل دستیابی نیست.

4. بهینه‌سازی استفاده از حافظه: با استفاده از ساختارهای داده‌ای مانند CSR و CSC می‌توان حافظه مصرفی را به طور قابل توجهی کاهش داد. این ساختارها در کاربردهایی که حجم داده‌ها زیاد است بسیار مفید هستند.

5. بهره‌گیری از خودرمزگذارها: خودرمزگذارها می‌توانند داده‌های پراکنده را به یک بازنمایی فشرده تبدیل کنند و سپس از این بازنمایی برای بازسازی داده‌ها استفاده کنند. این روش در کاربردهایی مثل کاهش ابعاد داده‌ها و حذف نویز بسیار موثر است.

نتیجه‌گیری

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