IsoSched چیه؟ داستان زمان‌بندی باهوش برای اجرای چند مدل هوش مصنوعی به شکل پیشرفته!

Fall Back

اگه دنبال این بودین که بدونین چطور توی دستگاه‌هایی که هوش مصنوعی سنگین دارن (مثل ماشین‌های خودران یا سرورهای قدرتمند)، چندتا مدل هوش مصنوعی (مثلاً همزمان تشخیص موانع و تشخیص چهره) بخوان با هم اجرا بشن و هیچ‌کدوم عقب نمونه یا کند نشه، یه اتفاق خیلی جذاب افتاده: یه ایده خفن به اسم IsoSched!

داستان اینجوریه که قبلاً برای اجرا کردن شبکه‌های عصبی عمیق (همون DNN که میشه مدل‌های هوش مصنوعی قدرتمند)، از روش‌هایی استفاده می‌کردن مثل Layer Temporal Scheduling یا همون LTS — یعنی لایه‌ها یکی یکی میومدن روی دستگاه، اطلاعاتشون موقتی تو حافظه‌ی کندتر (مثل DRAM) ذخیره می‌شد، و بعد دوباره استفاده می‌شد. این روش رو کاغذ کار می‌کرد، اما کلی انرژی مصرف می‌کرد و تأخیر (latency) هم زیاد بود. خلاصه خیلی اقتصادی و سریع نبود.

یه راه جدید به اسم Tile Spatial Scheduling یا همون TSS اومد. این یعنی اطلاعات بین لایه‌ها رو به تیکه تیکه‌های کوچیک (tile) تقسیم می‌کنیم و همین تیکه‌ها رو تو خود تراشه (on-chip) رد و بدل می‌کنیم تا هم سرعت بیشتر شه هم حافظه‌ی کند به کار نیاز نداشته باشه. تا اینجا خیلی خوبه! اما مشکل اینجاست که وقتی چند تا مدل هوش مصنوعی باهم دارن اجرا می‌شن – هر کدوم با ساختارهای گراف خیلی پیچیده – اگه بخوای یکی از اون‌ها سریع‌تر کار کنه (مثلاً تو ماشین خودران وقتی شناسایی مانع باید سریع‌تر بشه)، این سیستم‌ها هنوز نتونستن اولویت‌بندی و preemption (یعنی اجازه بدی یه وظیفه مهم وسط کار بقیشون رو متوقف کنه و خودش بیاد بالا) رو پشتیبانی کنن.

بقیه راه‌حل‌هایی که برای preemption یا تقدم‌بخشی بودن، باز هم به همون LTS قدیمی وصل بودن و دوباره انرژی و تاخیر بالایی داشتن. پس نیاز بود یه راه جدید بیاد که هم TSS باشه هم بتونه preemption انجام بده.

حالا IsoSched همینجاست! IsoSched اولین فریمورک جدی و کاربردیه که می‌تونه روی معماری TSS، چندین شبکه عصبی مختلف رو با امکان preemption کنترل‌کنه.

چیکار کرده؟ اول اینکه کل جریان زمان‌بندی این گراف‌های شلوغ و پرگره رو به یه مدل ریاضی به اسم “برنامه‌ریزی صحیح عدد صحیح” (Integer-Linear Programming یا همون ILP) فرموله می‌کنه. ILP یه جور مدله که باهاش می‌شه انتخاب‌های بهینه برای اختصاص منابع انجام داد. بعد مسئله رو به «تشخیص ایزومورفیسم زیرگراف» تبدیل می‌کنه. ایزومورفیسم زیرگراف یعنی تشخیص اینکه چه قسمت‌هایی از گراف‌های شبکه‌های مختلف از لحاظ ساختاری شبیه هم هستن تا بتونن با هم بهینه‌تر برنامه‌ریزی بشن.

یه الگوریتم قدیمی به اسم الگوریتم Ullmann رو با یه تکنیک جدید به اسم Monte Carlo Tree Search (یا MCTS، که خودش یه جور الگوریتم هوشمند برای جستجو توی ساختارهای درختی و تصمیم‌گیریه) ترکیب کرده تا اون مراحل پیدا کردن مشابهت گراف‌ها سریع‌تر انجام بشه و سیستم معطل نمونه.

بخاطر این‌که حافظه هم الکی هدر نره، داده‌های گراف‌ها رو با روشی به نام Compressed Sparse Row (یا CSR، یعنی جداول فشرده‌شده ردیفی برای ذخیره گراف‌هایی با تعداد زیادی خانه صفر) ذخیره کرده تا حجم داده‌ها خیلی کمتر شه.

یه حرکت دیگه هم داره که اسمش “Layer Concatenate and Split” یا همون LCSـه؛ یعنی بعضی لایه‌ها رو برای حفظ تعادل بار کاری، یا باهم جمع می‌کنه یا از هم جدا می‌کنه، تا مثل یک خط تولید کاری کنه هیچ جایی شلوغ نشه یا زیادی خالی نمونه.

نتیجه اینکه: IsoSched هم سرعت اجرای مدل‌ها (Speedup) رو نسبت به رقبایی مثل PREMA، Planaria، CD-MSA و MoCA بیشتر میکنه، هم مصرف انرژی رو پایین‌تر میاره، و هم توی کارهایی که باید فوراً انجام بشن (مانند شناسایی موانع در کمتر از چند میلی‌ثانیه در ماشین‌های خودران)، عملکرد بهتری داره. حتی از سیستم‌های TSS قدیمی مثل HASP هم توی مدیریت کارهای حیاتی و پیچیده بهتره.

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

منبع: +