راهنمای پرچم های XLA

این راهنما مجموعه‌ای از پرچم‌های کلیدی 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_gather
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_gather
این ۳ پرچم باید به صورت ترکیبی برای فعال کردن عملیات all-gather ناهمزمان در نسخه ۵e استفاده شوند. xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kDisabled/kEnabled/kAuto
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true/false
v5e/غیرهمزمان
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_reduce
این دو پرچم باید به صورت ترکیبی برای فعال کردن عملیات all-reduce ناهمزمان در نسخه ۵e استفاده شوند. xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=false
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true
xla_tpu_enable_async_collective_fusion=true/false
xla_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 را با ابعاد یکسان یا صرف نظر از ابعادشان ترکیب کنید.