معماری XLA

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

چرا XLA ساختیم؟

ما چندین هدف برای XLA داشتیم تا با TensorFlow کار کند:

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

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

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

  • رد پای موبایل را کاهش دهید. زمان اجرا TensorFlow را با کامپایل کردن زیرگراف پیش از زمان و انتشار یک جفت فایل شی/هدر که می تواند مستقیماً به برنامه دیگری پیوند داده شود، حذف کنید. نتایج می‌توانند ردپای استنتاج تلفن همراه را با چندین مرتبه قدر کاهش دهند.

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

XLA چگونه کار می کند؟

زبان ورودی XLA "HLO IR" یا فقط HLO (عملیات سطح بالا) نامیده می شود. معناشناسی HLO بر توصیف معانی عملیات صفحه. این راحت ترین برای از HLO فکر می کنم به عنوان یک است کامپایلر IR .

XLA نمودارها ("محاسبات") تعریف شده در HLO را می گیرد و آنها را در دستورالعمل های ماشین برای معماری های مختلف کامپایل می کند. XLA مدولار است به این معنا که آن را آسان به اسلات در باطن جایگزین برای هدف قرار دادن برخی از معماری HW رمان . باطن CPU برای x64 و ARM64 و همچنین باطن GPU NVIDIA در درخت منبع TensorFlow قرار دارند.

نمودار زیر فرآیند کامپایل در XLA را نشان می دهد:

XLA همراه با چند بهینه سازی و تجزیه و تحلیل پاس که مستقل از هدف، مانند CSE ، مستقل از هدف فیوژن عمل، و تجزیه و تحلیل بافر برای تخصیص حافظه در زمان اجرا برای محاسبه.

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

مرحله بعدی تولید کد خاص هدف است. CPU و GPU پایانه (Backend) همراه با XLA استفاده LLVM برای سطح پایین IR، بهینه سازی و کد نسل. این بک‌اندها LLVM IR لازم برای نمایش محاسبات XLA HLO را به شیوه‌ای کارآمد منتشر می‌کنند و سپس LLVM را فراخوانی می‌کنند تا کد بومی را از این LLVM IR منتشر کند.

پشتیبان GPU در حال حاضر از پردازنده های گرافیکی NVIDIA از طریق باطن LLVM NVPTX پشتیبانی می کند. باطن CPU از چندین ISA CPU پشتیبانی می کند.