تنظیم خودکار مداوم (فقط GPU)

ما از OpenAI Triton برای تولید برخی از هسته های GPU استفاده می کنیم. تریتون اجازه می دهد تا هسته های گرافیکی سریع را برای ترکیب های خاص تولید کند، اما ما باید برخی از پارامترها را برای هر یک از این ترکیب ها تنظیم کنیم.

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

--xla_gpu_per_fusion_autotune_cache_dir=your/directory

از یک کش خودکار per-fusion در فهرست داده شده استفاده و نگهداری کنید. در هر ترکیب مجزا یک فایل وجود خواهد داشت.

مزیت اصلی این رویکرد این است که می‌توانید از یک دایرکتوری کش برای اجرای چندین XLA (در مدل‌های مختلف) استفاده کنید و حافظه پنهان شما با هر ترکیب جدیدی که با آن مواجه می‌شوید افزایش می‌یابد - سرعت اجرای بعدی را افزایش می‌دهد. همچنین پشتیبانی اولیه برای اجرای چندین نمونه XLA با یک فهرست کش یکسان وجود دارد.

XLA نتایج موجود را در صورت نیاز می خواند و پس از تعیین نتایج جدید می نویسد.

  • دایرکتوری باید قبل از اجرای XLA وجود داشته باشد و باید قابل نوشتن باشد.
  • عدم اعتبار کش باید توسط کاربر مدیریت شود:
    • اگر می‌خواهید با یک کش خالی شروع کنید، لطفاً از یک دایرکتوری خالی استفاده کنید.
  • بررسی نسخه XLA باید توسط کاربر انجام شود:
    • اگر می خواهید از کش های جداگانه برای نسخه های مختلف XLA استفاده کنید، لطفاً از دایرکتوری های مختلف استفاده کنید.

کش به طور پیش فرض خاموش است (زمانی که پارامتر را ارائه نکنید).

محدودیت: تضمین نمی شود که در ترکیب با روش ذخیره سازی دیگر که در زیر توضیح داده شده است، به خوبی کار کند.

جایگزین: بارگیری یا تخلیه همه نتایج از یک HLO داده شده در یک فایل

نتایج تنظیم خودکار را می توان با استفاده از این پارامترها تخلیه / بارگذاری کرد:

--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=

اگر یک فایل txt. یا .textproto را مشخص کنیم، کش در قالب textproto و در غیر این صورت با فرمت protobuf باینری تخلیه می شود.

در تست ها

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

تنها زمانی خوب کار می کند که کش خودکار حاوی نتایج تولید شده در همان نوع GPU باشد که آزمایش ها در آن اجرا می شوند.

استفاده از آزمایش، تنظیم خودکار ادامه داشت

در حال حاضر فرض می کنیم که آزمون مورد نظر همیشه از همان نوع GPU استفاده می کند.

  1. ما باید نتایج autotune را از تست صادر کنیم، برای مثال با تعیین این پارامترها به دستور test:

    --test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto
    --test_sharding_strategy=disabled
    

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

  2. سپس باید آن کش را در مخزن کد خود آپلود کنیم.

  3. سپس باید کش را به وابستگی های داده هدف آزمایشی خود اضافه کنیم و آن را با استفاده از یک متغیر محیطی بارگذاری کنیم.

    data = ["test_autotune_cache.textproto"],
    env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" +
                        "$(execpath test_autotune_cache.textproto)"},
    

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

لطفاً نمونه آزمایش ها را در xla/service/gpu/tests/BUILD نیز ببینید:

  • load_autotune_results_using_execpath_test
  • load_autotune_results_from_test_workspace_test
  • dump_autotune_results_to_test_outputs_test

منسوخ شدن حافظه پنهان

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

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

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