-mpmd-delay-inferred-fragments

قطعات استنباط شده را تا حد امکان دیرتر اجرا می‌کند.

قطعات استنباط‌شده را برای اجرا در دیرترین زمان ممکن، یعنی درست قبل از اولین مصرف‌کننده‌شان، جابجا می‌کند.

-mpmd-delay-transfers-from-cpu

انتقال‌ها از CPU را به تأخیر می‌اندازد تا تا حد امکان دیر اجرا شوند.

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

-mpmd-lower-to-fragment-calls

قطعات MPMD را به فراخوانی‌ها و توابع قطعه قطعه کاهش می‌دهد.

تمام قطعات را با فراخوانی‌های قطعه جایگزین می‌کند.

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

بدنه هر تابع از بدنه اولین قطعه مواجه شده در گروه مربوطه استخراج می‌شود و شکل مش از توپولوژی با نام مش آن قطعه گرفته می‌شود. اگر قطعه دارای ویژگی‌های آرگومان در مورد نام‌گذاری ورودی-خروجی باشد، آنها به ویژگی‌های آرگومان تابع پایین‌رده اختصاص داده می‌شوند.

از آنجایی که توابع باید نام‌های منحصر به فردی داشته باشند، این گذر یک اندیس به نام همه توابع به جز اولین تابع با همان نام اصلی اضافه می‌کند، یعنی تابع i ام با نام "some_name" برای i > 0، نام "some_name_i" را خواهد داشت.

گزینه‌ها

-group-across-meshes : Whether to do more aggressive fragment grouping, across meshes. This may not be desirable for heterogeneous systems.
-verbose-logging     : Whether to enable verbose logging

-mpmd-mark-aliasing-and-donation

هر قطعه را با اطلاعات مستعار یا اهدایی علامت‌گذاری می‌کند.

وقتی هر یک از ورودی‌های Fragment ops قابل نامگذاری با یک خروجی یا اهدا باشند، یک ویژگی arg_attrs به ​​آنها اختصاص می‌دهد. هر ورودی که بتواند نامگذاری شود، یک ویژگی tf.aliasing_output خواهد داشت. در غیر این صورت، یک ویژگی jax.buffer_donor = true خواهد داشت. به عنوان مثال، {arg_attrs =\[{tf.aliasing_output = 0 : i32}, {jax.buffer_donor = true}, {}\]} نشان می‌دهد که ورودی اول می‌تواند با خروجی ۰ مستعار شود، ورودی دوم می‌تواند اهدا شود تا XLA یک خروجی مستعار پیدا کند، و ورودی سوم نمی‌تواند مستعار یا اهدا شود.

-mpmd-mark-fragment-reserved-memory

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

یک ویژگی xla_tpu_user_reserved_hbm_bytes به هر قطعه اختصاص می‌دهد که به XLA می‌گوید هنگام کامپایل هر قطعه، چند بایت را باید نگه دارد. با پیگیری تانسورهای زنده روی یک مش، XLA از حداقل میزان واقعی استفاده از حافظه در زمان اجرا مطلع می‌شود و می‌توانیم از اعمال بهینه‌سازی‌هایی در فایل اجرایی که باعث افزایش استفاده از حافظه فراتر از ظرفیت دستگاه می‌شود، جلوگیری کنیم. توجه: این مرحله فرض می‌کند که قطعات به ترتیب برنامه اجرا می‌شوند.

-mpmd-mark-input-output-with-layouts

طرح‌بندی‌ها را از تابع آرگومان‌ها/نتایج به آرگومان‌ها/نتایج قطعه‌ای منتشر می‌کند.

ویژگی‌های mhlo.layout_mode را از ورودی‌های برنامه به قطعاتی که مصرف‌کننده ورودی برنامه هستند، و ویژگی‌های mhlo.layout_mode را از خروجی‌های برنامه به قطعاتی که تولیدکننده خروجی هستند، منتشر می‌کند. اگر یک آرگومان برنامه برگردانده شود، mhlo.layout_mode به/از نتایج برنامه منتشر می‌شود. ورودی‌ها، خروجی‌ها و آرگومان‌ها/نتایج قطعه‌ای که با یک عملیات انتقال متصل هستند، همیشه با طرح‌بندی DEFAULT رونویسی می‌شوند، زیرا انتقال‌ها فقط از طرح‌بندی‌های پیش‌فرض پشتیبانی می‌کنند.

اگر یک آرگومان برنامه روی طرح‌بندی خودکار تنظیم شده باشد و در چندین قطعه کد استفاده شود، آن را روی طرح‌بندی پیش‌فرض تنظیم می‌کنیم تا طرح‌بندی ثابتی در بین قطعات کد ایجاد شود.

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

-mpmd-mark-offloaded-input-output

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

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