-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" را خواهد داشت.
گزینهها
-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
هر قطعه را با مقدار حافظهای که باید برای کامپایل رزرو شود، علامتگذاری کنید.
یک ویژگی 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 قابل استفاده باشد. همچنین آرگومانها و نتایج نقطه ورودی تابع را علامتگذاری میکند تا مسیرها بتوانند از این اطلاعات استفاده کنند.
-mpmd-sink-create-token-into-fragments
_sinks stablehlo.create token ops را در بدنههای fragment قرار میدهد.
گویش MPMD هنوز از انتقال توکن بین قطعات پشتیبانی نمیکند. بنابراین، در عوض، این انتقال، توکنها را کپی کرده و آنها را در هر قطعه قرار میدهد و توالییابی با واسطه توکن بین قطعات را قطع میکند.
پس از این گذر، هیچ توکنی هرگز از مرز قطعه عبور نمیکند.
-mpmd-validate-no-backward-deps
اعتبارسنجی میکند که هیچ وابستگی رو به عقبی در برنامههای فقط رو به جلو وجود ندارد.
بررسی میکند که هر وابستگی داده بین فراخوانیهای قطعه از یک نام مش از نظر لغوی قدیمیتر به یک نام مش جدیدتر میرود. وابستگی رو به عقب باعث ایجاد حبابهای خط لوله میشود.
به طور پیشفرض، این گذر برای هر وابستگی از این نوع، هشداری منتشر میکند. اگر fail-on-backward-deps تنظیم شده باشد، خطایی منتشر میکند و با شکست مواجه میشود.
این گذر فقط برای برنامههای فقط رو به جلو اعمال میشود، یعنی برنامههایی که تعداد ترانهادههای همه قطعات آنها صفر است. برنامههایی که قطعات رو به عقب دارند (تعداد ترانهادهها != 0) نادیده گرفته میشوند.
گزینهها
-fail-on-backward-deps : Whether to emit an error (and fail) instead of a warning.
-mpmd-validate-no-inferred-fragments
تأیید میکند که هیچ قطعه استنباطشدهای وجود ندارد.
بررسی میکند که آیا تمام قطعات استنباطشده ادغام شدهاند یا خیر.
به طور پیشفرض، اگر قطعهای از استنتاج باقی بماند، این گذر یک خطا منتشر میکند. اگر fail-on-inferred-fragments روی false تنظیم شده باشد، به جای آن یک هشدار منتشر میکند.
گزینهها
-fail-on-inferred-fragments : Whether to emit an error (and fail) instead of a warning.
-mpmd-validate-no-param-transfers
تأیید میکند که هیچ تانسور پارامتری بین مشها منتقل نمیشود.
بررسی میکند که TransferOps تانسورهایی را که اطلاعات مکان JAX آنها با یک الگوی قابل تنظیم مطابقت دارد، منتقل نکند (پیشفرض: "params['transformer"). چنین انتقالهایی معمولاً نشان میدهند که پارامترهای مدل به اشتباه در سراسر مشها جابجا میشوند.
به طور پیشفرض، این انتقال یک هشدار منتشر میکند. برای انتشار خطا و fail شدن به جای آن fail-on-param-transfers=true را تنظیم کنید.
گزینهها
-fail-on-param-transfers : Whether to emit an error (and fail) instead of a warning (default: false).
-param-pattern : Pattern to match against the location info of transferred tensors.
-mpmd-validate-no-reshards
تأیید میکند که هیچ قطعهای که فقط قابلیت reshard داشته باشد، وجود ندارد.
یک قطعه فقط reshard قطعهای است که فقط شامل یک mpmd.return از یکی از آرگومانهایش است. این قطعات معمولاً نشاندهنده یک reshard غیرمنتظره هستند.
به طور پیشفرض، این گذر برای هر قطعه از این نوع هشدار میدهد. اگر fail-on-reshard-only-fragments تنظیم شده باشد، خطایی صادر میکند و با شکست مواجه میشود.
گزینهها
-fail-on-reshard-only-fragments : Whether to emit an error (and fail) instead of a warning.