جبرگرایی (GPU)

عدم قطعیت در GPU در XLA از دو منبع مجزا ناشی می‌شود:

  1. عدم قطعیت زمان کامپایل (تنظیم خودکار)
  2. عدم قطعیت زمان اجرا (عملیات غیر قطعی)

منبع ۱: عدم قطعیت زمان کامپایل (تنظیم خودکار)

علت

در طول کامپایل، اتوتیونر XLA چندین پیاده‌سازی هسته کاندید (مثلاً cuBLAS، cuDNN، Triton، ساطع‌کننده‌های بومی) را که روی پردازنده گرافیکی میزبان به صورت زنده اجرا می‌شوند، پروفایل می‌کند تا سریع‌ترین الگوریتم را برای دستورالعمل‌هایی مانند GEMMها و کانولوشن‌ها پیدا کند.

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

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

چگونه به قطعیت زمان کامپایل دست یابیم

  • تصمیمات تنظیم خودکار را ذخیره و ذخیره کنید : تنظیم خودکار را یک بار اجرا کنید و انتخاب‌ها را در یک حافظه پنهان پایدار ذخیره کنید (به تنظیم خودکار پایدار مراجعه کنید). استفاده از پرچم --xla_gpu_require_complete_aot_autotune_results الزام می‌کند که XLA به طور اکید از تصمیمات ذخیره شده در حافظه پنهان استفاده مجدد کند و در صورت عدم وجود یک ورودی، کامپایل را بلافاصله با خطای NotFound با شکست مواجه می‌کند و کاملاً از بنچمارک سخت‌افزار زنده اجتناب می‌کند.
  • غیرفعال کردن تنظیم خودکار : تنظیم --xla_gpu_autotune_level=0 معیارهای تنظیم خودکار را در زمان کامپایل به طور کلی غیرفعال می‌کند و پیکربندی‌های پیش‌فرض/اولین پیکربندی‌های معتبر را به طور قطعی انتخاب می‌کند.

منبع ۲: عدم قطعیت زمان اجرا (عملیات غیر قطعی)

علت

حتی زمانی که فایل باینری کامپایل شده در طول اجرا ۱۰۰٪ یکسان باشد، اجرای چندین باره یک فایل اجرایی دقیقاً یکسان می‌تواند به طور طبیعی خروجی‌های عددی متفاوتی را به همراه داشته باشد.

در پردازنده‌های گرافیکی (GPU)، هزاران رشته (thread) به صورت موازی اجرا می‌شوند. عملیاتی مانند scatter ، مقادیر را با استفاده از عملیات اتمی در رشته‌های ناهماهنگ در بافرهای حافظه جمع می‌کنند. از آنجا که ترتیب زمان‌بندی رشته‌ها به طور طبیعی از اجرا به اجرا متفاوت است، جمع‌های ممیز شناور به ترتیب غیرقطعی رخ می‌دهند. از آنجا که جمع ممیز شناور غیرشرکتی است ( (a + b) + c != a + (b + c) )، خروجی‌های اجرا بین اجراها متفاوت است.

چگونه به جبرگرایی دست یابیم

  • --xla_gpu_exclude_nondeterministic_ops : با دستور دادن به XLA برای موارد زیر، قطعیت اجرا را اعمال می‌کند:
    1. در طول انتخاب پیکربندی، انواع الگوریتم/هسته/پشتیبان غیرقطعی را فیلتر کنید و کاهش‌های قطعی (برای پراکندگی، GEMM، کانولوشن) را اعمال کنید.
    2. عملیات‌هایی مانند select-and-scatter به دنباله‌ای از عملیات‌های قطعی بازنویسی کنید تا عملیات پراکندگی اتمی غیرقطعی را حذف کنید.
    3. غیرفعال کردن بنچمارک‌های تنظیم خودکار زنده (انتخاب اولین پیکربندی قطعی معتبر).

عوارض جانبی و معایب

اعمال جبرگرایی بر روی پردازنده گرافیکی (GPU) شامل بده بستان‌های قابل توجهی است:

  • کاهش عملکرد در زمان اجرا (کاهش سرعت) :
    • پیاده‌سازی‌های قطعی عملیاتی مانند scatterselect-and-scatter گسترش‌یافته) به‌روزرسانی‌های اتمی ناهماهنگ را با مراحل مرتب‌سازی شاخص اضافی یا مراحل کاهش قطعی جایگزین می‌کنند، که می‌تواند منجر به از دست رفتن قابل توجه توان عملیاتی در زمان اجرا در مقایسه با مسیرهای سریع اتمی غیرقطعی شود.
    • دور زدن تنظیم خودکار زنده ( --xla_gpu_autotune_level=0 ) مانع از کشف سریع‌ترین هسته توسط XLA برای معماری خاص GPU می‌شود و در نتیجه انتخاب‌های هسته غیربهینه انجام می‌شود.
  • خطاهای سخت کامپایل :
    • اگر یک گراف HLO شامل دستورالعمل‌هایی بدون هیچ پیاده‌سازی قطعی باشد، فعال کردن --xla_gpu_exclude_nondeterministic_ops باعث می‌شود کامپایل با یک خطا متوقف شود.
    • هنگام استفاده از --xla_gpu_require_complete_aot_autotune_results ، اگر هر دستورالعملی فاقد ورودی در حافظه پنهان از پیش پر شده autotune باشد، کامپایل بلافاصله با خطای NotFound با شکست مواجه می‌شود.
  • بهینه‌سازی‌ها و ساطع‌کننده‌های غیرفعال :
    • برخی از ساطع‌کننده‌های هسته با کارایی بالا و تبدیل‌های همجوشی (مانند تنظیم خودکار همجوشی تریتون) در صورت نیاز به قطعیت، به طور خودکار از بررسی حذف می‌شوند.