این راهنما مجموعهای از پرچمهای کلیدی XLA را ارائه میدهد تا به کاربران در پیمایش و استفاده مؤثر از قابلیتهای XLA کمک کند. بخشهای بعدی پرچمهایی را شرح میدهند که میتوانند به طور قابل توجهی بر عملکرد زمان اجرا و استفاده از حافظه تأثیر بگذارند. در صورت بروز هرگونه مشکل، مانند خرابی، پس از فعال کردن یک پرچم، توصیه میشود به تنظیمات پیشفرض برگردید و یک مشکل در GitHub ایجاد کنید.
پرچمهای صحت
| پرچم | توضیحات | مقادیر پیشفرض | مقادیر پیشنهادی | ارزشهای کاندیدا |
|---|---|---|---|---|
xla_mosaic_on_device_checks | این پرچم، بررسیهای درون دستگاهی را برای کدژن موزاییک فعال میکند. در حال حاضر، بررسیهای پشتیبانیشده در محدوده هستند، یعنی اگر حافظهای خارج از محدوده لمس شود، کامپایل/اجرا آن را دریافت میکند. | xla_mosaic_on_device_checks=bounds | xla_mosaic_on_device_checks=bounds | xla_mosaic_on_device_checks=bounds |
پرچمهای عملکرد
پرچمهای زیر در افزایش عملکرد زمان اجرا نقش مهمی دارند. آزمایش این تنظیمات ممکن است منجر به افزایش قابل توجه عملکرد شود.
| پرچم | توضیحات | مقادیر پیشفرض | مقادیر پیشنهادی | ارزشهای کاندیدا |
|---|---|---|---|---|
| لوله کشی ۱. xla_should_allow_loop_variant_parameter_in_chain۲. xla_should_add_loop_invariant_op_in_chain۳. xla_tpu_enable_ici_ag_pipelining | این ۳ پرچم باید به صورت ترکیبی مورد استفاده قرار گیرند تا امکان پایپلاین جمعی عملیاتهای ICI(Interchip-Interconnect) all-gather فراهم شود، که فرصتهای بیشتری برای اجرای همپوشانی ایجاد میکند. | ۱. xla_should_allow_loop_variant_parameter_in_chain=kDisabled۲. xla_should_add_loop_invariant_op_in_chain=kDisabled۳. xla_tpu_enable_ici_ag_pipelining=false | ۱. xla_should_allow_loop_variant_parameter_in_chain=kEnabled۲. xla_should_add_loop_invariant_op_in_chain=kEnabled۳. xla_tpu_enable_ici_ag_pipelining=true | ۱. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto۲. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto۳. xla_tpu_enable_ici_ag_pipelining=true/false |
v5e/غیرهمزمانxla_enable_async_all_gatherxla_tpu_enable_async_collective_fusionxla_tpu_enable_async_collective_fusion_fuse_all_gather | این ۳ پرچم باید به صورت ترکیبی برای فعال کردن عملیات all-gather ناهمزمان در نسخه ۵e استفاده شوند. | xla_enable_async_all_gather=kAutoxla_tpu_enable_async_collective_fusion=truexla_tpu_enable_async_collective_fusion_fuse_all_gather=true | xla_enable_async_all_gather=kAutoxla_tpu_enable_async_collective_fusion=truexla_tpu_enable_async_collective_fusion_fuse_all_gather=true | xla_enable_async_all_gather=kDisabled/kEnabled/kAutoxla_tpu_enable_async_collective_fusion=true/falsexla_tpu_enable_async_collective_fusion_fuse_all_gather=true/false |
v5e/غیرهمزمانxla_tpu_enable_async_collective_fusionxla_tpu_enable_async_collective_fusion_fuse_all_reduce | این دو پرچم باید به صورت ترکیبی برای فعال کردن عملیات all-reduce ناهمزمان در نسخه ۵e استفاده شوند. | xla_tpu_enable_async_collective_fusion=truexla_tpu_enable_async_collective_fusion_fuse_all_reduce=false | xla_tpu_enable_async_collective_fusion=truexla_tpu_enable_async_collective_fusion_fuse_all_reduce=true | xla_tpu_enable_async_collective_fusion=true/falsexla_tpu_enable_async_collective_fusion_fuse_all_reduce=true/false |
ناهمگامxla_tpu_enable_async_all_to_all | این پرچم، ارتباط ناهمزمان همه به همه را فعال میکند. | xla_tpu_enable_async_all_to_all=false | xla_tpu_enable_async_all_to_all=true | xla_tpu_enable_async_all_to_all=true/false |
محدود به تأخیرxla_all_gather_latency_bound_threshold_in_bytes | این پرچم برای عملیات all-gather با تأخیر محدود (یعنی کوچک) در نظر گرفته شده است. فعال کردن این گزینه، بهینهسازیهای خاصی را فعال میکند که میتواند زمان اجرا را برای all-gatherهای با تأخیر محدود کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده میشود. | xla_all_gather_latency_bound_threshold_in_bytes=-1(که فعال نیست) | 4~16Mb(ie 4~16 * 1024 * 1024) | [0, 9223372036854775807] |
محدود به تأخیرxla_all_reduce_latency_bound_threshold_in_bytes | این پرچم برای عملیات all-gather با تأخیر محدود (یعنی کوچک) در نظر گرفته شده است. فعال کردن این گزینه، بهینهسازیهای خاصی را فعال میکند که میتواند زمان اجرا را برای all-reduce های با تأخیر محدود کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده میشود. | xla_all_reduce_latency_bound_threshold_in_bytes=-1(که فعال نیست) | 4~16Mb(ie 4~16 * 1024 * 1024) | [0, 9223372036854775807] |
محدود به تأخیرxla_collective_permute_latency_bound_threshold_in_bytes | این پرچم برای عملیات all-gather با تأخیر محدود (یعنی کوچک) در نظر گرفته شده است. فعال کردن این گزینه، بهینهسازیهای خاصی را فعال میکند که میتواند زمان اجرا را برای جایگشتهای جمعی با تأخیر محدود کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده میشود. | xla_collective_permute_latency_bound_threshold_in_bytes=-1(که فعال نیست) | 4~16Mb(ie 4~16 * 1024 * 1024) | [0, 9223372036854775807] |
محدود به تأخیرxla_all_to_all_latency_bound_threshold_in_bytes | این پرچم برای عملیات all-gather با تأخیر محدود (یعنی کوچک) در نظر گرفته شده است. فعال کردن این گزینه، بهینهسازیهای خاصی را فعال میکند که میتواند زمان اجرا را برای all-to-all با تأخیر محدود کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده میشود. | xla_all_to_all_latency_bound_threshold_in_bytes=-1(که فعال نیست) | 4~16Mb(ie 4~16 * 1024 * 1024) | [0, 9223372036854775807] |
xla_enable_async_collective_permute | تمام عملیاتهای جایگشت جمعی را به انواع ناهمزمان آنها بازنویسی میکند. وقتی روی auto تنظیم شود، XLA میتواند بر اساس سایر پیکربندیها یا شرایط، به طور خودکار جمعی ناهمزمان را فعال کند. | xla_enable_async_collective_permute=kAuto | xla_enable_async_collective_permute=kAuto | xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled |
محاسبات محورxla_tpu_enable_dot_strength_reduction | این پرچم، نقاط غیرمحاسباتی با تمرکز بالا را به صورت عملیات ضرب + کاهش بازنویسی میکند. | محاسبات محورxla_tpu_enable_dot_strength_reduction=true | xla_tpu_enable_dot_strength_reduction=true | xla_tpu_enable_dot_strength_reduction=true/false |
محاسبات محورxla_tpu_dot_dot_fusion | این پرچم، ادغام نقطه-نقطه را فعال میکند، که یک عملیات تولیدکننده-نقطه را با یک عملیات مصرفکننده-نقطه ادغام میکند. با انجام این کار، خروجی تولیدکننده-نقطه در حافظه کند/اصلی که باعث کاهش ردپای حافظه میشود، آشکار نمیشود. | xla_tpu_dot_dot_fusion=true | xla_tpu_dot_dot_fusion=true | xla_tpu_dot_dot_fusion=true/false |
محاسبات محورxla_jf_enable_multi_output_fusion | این پرچم، ادغامهایی را فعال میکند که چندین مصرفکننده را با هم ادغام میکنند (یعنی ادغام حاصل، چندین خروجی خواهد داشت) | xla_jf_enable_multi_output_fusion=true | xla_jf_enable_multi_output_fusion=true | xla_jf_enable_multi_output_fusion=true/false |
محاسبات محورxla_tpu_scoped_vmem_limit_kib | این پرچم میزان فضای ذخیرهسازی مجازی (VMEM) موجود برای هر عملیات را برای استفاده محلی بر حسب کیلوبایت تعیین میکند. بقیه VMEM به عنوان فضای بافر استفاده میشود. | xla_tpu_scoped_vmem_limit_kib=16384 | xla_tpu_scoped_vmem_limit_kib=16384 | xla_tpu_scoped_vmem_limit_kib=[4096, VMEM size of the architecture - 1024] |
محاسبات محورxla_tpu_async_copy_bandwidth_scaling_factor | پهنای باند مؤثر را برای کپیهای غیرهمزمان مقیاسبندی میکند. این مورد هنگام تصمیمگیری در مورد پیشواکشی و تعیین اینکه کدام تنسورها باید در VMEM قرار گیرند، استفاده میشود. | xla_tpu_async_copy_bandwidth_scaling_factor=1 | xla_tpu_async_copy_bandwidth_scaling_factor=1 | xla_tpu_async_copy_bandwidth_scaling_factor=(0, 1] |
محاسبات محورxla_msa_enable_cross_program_prefetch_freeing | بهینهسازی آزادسازی را برای بافرهای پیشواکشیشده بینبرنامهای فعال میکند. | xla_msa_enable_cross_program_prefetch_freeing=enabled | xla_msa_enable_cross_program_prefetch_freeing=enabled | xla_msa_enable_cross_program_prefetch_freeing=enabled/disabled |
محاسبات محورxla_tpu_msa_inefficient_use_to_copy_ratio | نسبت بایتهای استفاده به بایتهای کپی برای یک سایت تخصیص داده شده که کمتر از آن را ناکارآمد میدانیم. این نسبت هنگام تصمیمگیری در مورد قرارگیری VMEM استفاده میشود. مقدار ۰ به معنای کارآمد بودن همه سایتها و مقدار ۱ به معنای آن است که مقدار بایتهای استفاده شده در سایت حداقل به اندازه بایتهای کپی ناهمزمان باشد. | xla_tpu_msa_inefficient_use_to_copy_ratio=0.5 | xla_tpu_msa_inefficient_use_to_copy_ratio=0.5 | xla_tpu_msa_inefficient_use_to_copy_ratio=[0, 1] |
پرچمهای حافظه
پرچمهای فهرستشده در زیر برای رسیدگی به مشکلات مربوط به HBM ارائه شدهاند. این موارد فقط در صورتی باید تنظیم شوند که در حین کامپایل مدل با خطاهای "out of memory" در HBM مواجه شوید. در سایر سناریوها، مقادیر پیشفرض توصیه میشوند، زیرا تغییر آنها میتواند بر عملکرد تأثیر منفی بگذارد.
| پرچم | توضیحات | مقادیر پیشفرض | مقادیر پیشنهادی | ارزشهای کاندیدا |
|---|---|---|---|---|
برنامهریزxla_latency_hiding_scheduler_rerun | این تنظیم، رفتار زمانبند پنهانسازی تأخیر را تنظیم میکند. این تنظیم با کاهش تدریجی محدودیت حافظه اختصاص داده شده برای زمانبندی با هر "اجرای مجدد" فرآیند، عمل میکند. | xla_latency_hiding_scheduler_rerun=1 | xla_latency_hiding_scheduler_rerun=5 | 0~10(it doesn't make much sense beyond 10 reruns) |
فیوژنxla_tpu_rwb_fusion | این پرچم، ادغامهای نوع reduce+broadcast را فعال میکند و ممکن است استفاده از حافظه را کاهش دهد. | xla_tpu_rwb_fusion=true | xla_tpu_rwb_fusion=false | xla_tpu_rwb_fusion=true/false |
برنامهریزxla_memory_scheduler | این پرچم الگوریتمی را مشخص میکند که زمانبند حافظه برای به حداقل رساندن مصرف حافظه از آن استفاده خواهد کرد. استفاده از یک الگوریتم پیشرفتهتر ممکن است به زمانبندی با مصرف حافظه کمتر منجر شود، اما به قیمت زمان کامپایل طولانیتر. | xla_memory_scheduler=kDefault | xla_memory_scheduler=kBrkga | xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga |
برنامهریزxla_tpu_enable_latency_hiding_scheduler | این پرچم، زمانبند پنهانسازی تأخیر را فعال میکند که به ما امکان میدهد به جای عملیات همزمان، عملیات جمعی ناهمزمان را انجام دهیم. غیرفعال کردن آن، استفاده از حافظه را به قیمت از دست دادن بهبود عملکرد حاصل از این عملیات ناهمزمان کاهش میدهد. | xla_tpu_enable_latency_hiding_scheduler=true | xla_tpu_enable_latency_hiding_scheduler=false | xla_tpu_enable_latency_hiding_scheduler=true/false |
اس پی ام دیxla_jf_spmd_threshold_for_windowed_einsum_mib | این پرچم آستانه پایینتر حداقل اندازه نقطه را برای اجرای matmul جمعی تعیین میکند. تنظیم آن روی مقدار بالاتر باعث صرفهجویی در حافظه میشود، اما به قیمت از دست دادن فرصتهای اجرای matmul جمعی. | xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 | 10Mb~1Gb (ie 10*1024*1024 ~ 1024*1024*1024) | [0, 9223372036854775807] |
برنامهریزxla_gpu_enable_analytical_sol_latency_estimator | این پرچم، تخمینگر تحلیلی را فعال میکند که همپوشانی محاسبات-ارتباطات را در پردازندههای گرافیکی (GPU) به حداکثر میرساند. | xla_gpu_enable_analytical_sol_latency_estimator=true | xla_gpu_enable_analytical_sol_latency_estimator=false | true/false |
سایر پرچمهای پرکاربرد
| پرچم | نوع | یادداشتها |
|---|---|---|
xla_dump_to | رشته (مسیر فایل) | پوشهای که فایلهای HLO پیش از بهینهسازی و سایر مصنوعات در آن قرار خواهند گرفت (به ابزارهای XLA مراجعه کنید). |
پرچمهای TPU XLA
| پرچم | نوع | یادداشتها |
|---|---|---|
xla_tpu_enable_data_parallel_all_reduce_opt | بولی (درست/نادرست) | بهینهسازی برای افزایش فرصتهای همپوشانی برای DCN (شبکهسازی مرکز داده) که برای شاردینگ موازی دادهها استفاده میشود. |
xla_tpu_data_parallel_opt_different_sized_ops | بولی (درست/نادرست) | امکان پایپلاین کردن عملیات موازی دادهها را در چندین تکرار فراهم میکند، حتی اگر اندازه خروجی آنها با آنچه که میتوان در متغیرهای انباشته ذخیره کرد، مطابقت نداشته باشد. میتواند فشار بر حافظه را افزایش دهد. |
xla_tpu_spmd_rng_bit_generator_unsafe | بولی (درست/نادرست) | اینکه آیا RngBitGenerator HLO را به صورت پارتیشنبندی شده اجرا کنیم یا خیر، که اگر نتایج قطعی با تقسیمبندیهای مختلف در بخشهای مختلف محاسبه مورد انتظار باشد، ناامن است. |
xla_tpu_megacore_fusion_allow_ags | بولی (درست/نادرست) | امکان ادغام all-gatherها با convolutions/all-reduces را فراهم میکند. |
xla_tpu_enable_ag_backward_pipelining | بولی (درست/نادرست) | دادههای جمعآوریشده (که در حال حاضر دادههای جمعآوریشده در مقیاس مگا هستند) را از طریق حلقههای اسکن به عقب هدایت میکند. |
پرچمهای GPU XLA
سطح بهینهسازی -O1 مسیرهای کامپایلر پیشرفته را برای بهبود عملکرد GPU فعال میکند، از جمله چندین دسته از پرچمهای زیر: پایپلاین کردن مجموعههای موازی داده ( xla_gpu_enable_pipelined_all_gather ، xla_gpu_enable_pipelined_all_reduce ، xla_gpu_enable_pipelined_reduce_scatter )، باز کردن حلقه در حین اجرا ( xla_gpu_enable_while_loop_double_buffering )، زمانبندی پنهانسازی تأخیر ( xla_gpu_enable_latency_hiding_scheduler )، و تخمینگر تأخیر SOL در Hopper/Blackwell ( xla_gpu_enable_analytical_sol_latency_estimator ). برای جزئیات بیشتر به سطوح بهینهسازی GPU مراجعه کنید.
| پرچم | نوع | یادداشتها |
|---|---|---|
xla_gpu_enable_latency_hiding_scheduler | بولی (درست/نادرست) | این پرچم، زمانبندهای پنهانسازی تأخیر را قادر میسازد تا ارتباط ناهمزمان را با محاسبات به طور مؤثر همپوشانی کنند. مقدار پیشفرض False است. |
xla_gpu_enable_analytical_sol_latency_estimator | بولی (درست/نادرست) | تصمیمات زمانبندی خاص پلتفرم را فعال میکند که به نوبه خود همپوشانی محاسبات-ارتباطات را بهبود میبخشد. مقدار پیشفرض true است. |
xla_gpu_analytical_latency_estimator_options | رشته ساختاریافته | پارامترهای xla_gpu_enable_analytical_sol_latency_estimator را پیکربندی میکند. با تنظیم nic_speed_gbps=$NIC_SPEED,nccl_op_launch_us=$LAUNCH_OVERHEAD,chunk_prep_us=$CHUNK_PREP,rtt_us=$RTT,chunk_size_bytes=$CHUNK_SIZE,gpus_per_node=$GPUS_PER_NODE را تنظیم کنید. مقدار پیشفرض به پلتفرم شناساییشده بستگی دارد. |
xla_gpu_enable_triton_gemm | بولی (درست/نادرست) | از ضرب ماتریس مبتنی بر تریتون استفاده کنید. |
xla_gpu_enable_command_buffer | فهرست CommandBufferCmdType | کدام نوع دستورات باید در بافرهای دستوری ذخیره شوند. |
xla_gpu_all_reduce_combine_threshold_bytes | عدد صحیح (بایت) | این پرچمها زمان ترکیب چندین AllGather / ReduceScatter / AllReduce کوچک را در یک AllGather / ReduceScatter / AllReduce بزرگ تنظیم میکنند تا زمان صرف شده برای ارتباط بین دستگاهی کاهش یابد. به عنوان مثال، برای آستانههای AllGather / ReduceScatter در یک بار کاری مبتنی بر Transformer، آنها را به اندازه کافی بالا تنظیم کنید تا حداقل وزن یک لایه Transformer یعنی AllGather / ReduceScatter را ترکیب کنید. به طور پیشفرض، combine_threshold_bytes روی ۲۵۶ تنظیم شده است. |
xla_gpu_all_gather_combine_threshold_bytes | عدد صحیح (بایت) | به xla_gpu_all_reduce_combine_threshold_bytes در بالا مراجعه کنید. |
xla_gpu_reduce_scatter_combine_threshold_bytes | عدد صحیح (بایت) | به xla_gpu_all_reduce_combine_threshold_bytes در بالا مراجعه کنید. |
xla_gpu_enable_pipelined_all_gather | بولی (درست/نادرست) | فعال کردن پایپلینینگ برای دستورالعملهای all-gather. |
xla_gpu_enable_pipelined_reduce_scatter | بولی (درست/نادرست) | فعال کردن پایپلینینگ دستورالعملهای reduce-scatter. |
xla_gpu_enable_pipelined_all_reduce | بولی (درست/نادرست) | فعال کردن پایپلینینگ برای دستورالعملهای all-reduce. |
xla_gpu_enable_while_loop_double_buffering | بولی (درست/نادرست) | فعال کردن بافر دوگانه برای حلقه while. |
xla_gpu_enable_all_gather_combine_by_dim | بولی (درست/نادرست) | عملیاتهای all-gather را با ابعاد جمعآوری یکسان یا صرف نظر از ابعادشان ترکیب کنید. |
xla_gpu_enable_reduce_scatter_combine_by_dim | بولی (درست/نادرست) | عملیاتهای reduce-scatter را با ابعاد یکسان یا صرف نظر از ابعادشان ترکیب کنید. |