ما از OpenAI Triton برای تولید برخی از هستههای GPU استفاده میکنیم. Triton امکان تولید هستههای GPU سریع را برای ترکیبهای خاص فراهم میکند، اما ما باید برخی پارامترها را برای هر یک از این ترکیبها تنظیم کنیم.
اگر تعداد فیوژنها زیاد باشد، این کار میتواند زمان زیادی طول بکشد، بنابراین ما روشی برای بارگذاری نتایج اتوتیونینگ ارائه میدهیم، در حالی که سایر مراحل کامپایل همچنان به طور عادی اجرا میشوند. حافظههای نهان اتوتیونینگ هنوز هم مفید هستند اگر چند تغییر ایجاد کنیم: فیوژنهایی که در حافظه نهان وجود دارند از حافظه نهان استفاده میکنند و سایر موارد به طور عادی اتوتیونینگ میشوند.
توصیه شده: دایرکتوری کش
--xla_gpu_per_fusion_autotune_cache_dir=your/directory
از یک حافظه پنهان خودکار per-fusion در دایرکتوری داده شده استفاده و نگهداری کنید. برای هر فیوژن مجزا، یک فایل وجود خواهد داشت.
مزیت اصلی این رویکرد این است که میتوانید از یک دایرکتوری کش برای چندین اجرای XLA (از مدلهای مختلف) استفاده کنید و کش شما با هر ترکیب جدید که با آن مواجه میشوید، افزایش مییابد - که سرعت اجرای بعدی را افزایش میدهد. همچنین پشتیبانی اولیه برای اجرای همزمان چندین نمونه XLA با یک دایرکتوری کش وجود دارد.
XLA نتایج موجود را در صورت نیاز میخواند و نتایج جدید را پس از مشخص شدن، ثبت میکند.
- این دایرکتوری باید قبل از اجرای XLA وجود داشته باشد و قابل نوشتن نیز باشد.
- نامعتبرسازی حافظه پنهان باید توسط کاربر مدیریت شود:
- اگر میخواهید با یک حافظه پنهان خالی شروع کنید، لطفاً از یک دایرکتوری خالی استفاده کنید.
- بررسی نسخه XLA باید توسط کاربر انجام شود:
- اگر میخواهید از حافظههای پنهان جداگانه برای نسخههای مختلف XLA استفاده کنید، لطفاً از دایرکتوریهای مختلف استفاده کنید.
حافظه پنهان (cache) به طور پیشفرض خاموش است (وقتی پارامتر را ارائه نمیدهید).
محدودیت: تضمینی وجود ندارد که این روش در ترکیب با سایر روشهای ذخیرهسازی که در زیر توضیح داده شده است، به خوبی کار کند.
جایگزین: بارگیری یا تخلیه تمام نتایج از یک HLO معین در یک فایل
نتایج اتوتیونینگ را میتوان با استفاده از این پارامترها تخلیه/بارگذاری کرد:
--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=
اگر یک فایل .txt یا .textproto را مشخص کنیم، آنگاه حافظه پنهان با فرمت textproto و در غیر این صورت با فرمت دودویی protobuf ذخیره خواهد شد.
در آزمایشها
اتوتیونینگ مداوم همچنین میتواند در تستها مورد استفاده قرار گیرد. توصیه میشود در صورتی که تستها بسیار بزرگ باشند، به خصوص اگر عملکرد محیط تست محدود باشد، از آن استفاده شود.
این روش فقط در صورتی خوب کار میکند که حافظه پنهان تنظیم خودکار شامل نتایج تولید شده روی همان نوع پردازنده گرافیکی باشد که تستها در آن اجرا میشوند.
انجام آزمایش استفاده از اتوتیونینگ مداوم
فعلاً فرض میکنیم که تست مورد نظر همیشه از یک نوع پردازنده گرافیکی (GPU) استفاده میکند.
ما باید نتایج تنظیم خودکار را از تست، مثلاً با مشخص کردن این پارامترها به دستور test، صادر کنیم:
--test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto --test_sharding_strategy=disabledبرای دریافت صحیح یک حافظه پنهان تنظیم خودکار برای همه تستها، باید شاردینگ غیرفعال باشد.
سپس باید آن حافظه پنهان را در مخزن کد خود بارگذاری کنیم.
سپس باید کش را به وابستگیهای دادهی هدف آزمایشی خود اضافه کنیم و آن را با استفاده از یک متغیر محیطی بارگذاری کنیم.
data = ["test_autotune_cache.textproto"], env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" + "$(execpath test_autotune_cache.textproto)"},(استفاده از شاردینگ در تستهایی که نتایج تنظیم خودکار را بارگذاری میکنند، اشکالی ندارد.)
لطفاً به نمونههای تست موجود در xla/backends/gpu/tests/BUILD نیز مراجعه کنید:
- بارگذاری_autotune_results_using_execpath_test
- بارگذاری_autotune_results_from_test_workspace_test
- dump_autotune_results_to_test_outputs_test
منسوخ شدن حافظه پنهان
اگر تغییرات زیادی در یک مدل ایجاد شود، ممکن است حافظه پنهان دیگر شامل همه ادغامها نباشد، بنابراین تست کندتر خواهد شد. در این حالت، ما باید حافظه پنهان تنظیم خودکار را دوباره تولید کنیم.
اگر ما شروع به استفاده از نوع جدیدی از پردازنده گرافیکی برای اجرای تستها کنیم، همین امر صدق میکند.
اگر کامپایلر XLA تکامل یابد و ترکیبهای متفاوتی ایجاد کند، ممکن است حافظه پنهان (cache) نیز منسوخ شود.