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

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

پرچم های صحت

پرچم توضیحات مقادیر پیش فرض ارزش های پیشنهادی ارزش های نامزد
xla_mosaic_on_device_checks این پرچم بررسی های روی دستگاه را برای کدژن Mosaic فعال می کند. در حال حاضر، بررسی های پشتیبانی شده روی کران هستند، به عنوان مثال، اگر یک حافظه خارج از محدوده لمس شود، کامپایل/اجرا آن را می گیرد. xla_mosaic_on_device_checks=bounds xla_mosaic_on_device_checks=bounds xla_mosaic_on_device_checks=bounds

پرچم های عملکرد

پرچم‌های زیر در افزایش عملکرد زمان اجرا مفید هستند. آزمایش با این تنظیمات ممکن است منجر به افزایش عملکرد قابل توجهی شود.

پرچم توضیحات مقادیر پیش فرض ارزش های پیشنهادی ارزش های نامزد
لوله کشی
1. xla_should_allow_loop_variant_parameter_in_chain
2. xla_should_add_loop_invariant_op_in_chain
3. xla_tpu_enable_ici_ag_pipelining
این 3 پرچم باید به همراه برای فعال کردن خط لوله جمعی عملیات ICI (Interchip-Interconnect) همه جمع‌آوری شوند که فرصت‌های بیشتری را برای اجرای همپوشانی ایجاد می‌کند. 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled
2. xla_should_add_loop_invariant_op_in_chain=kDisabled
3. xla_tpu_enable_ici_ag_pipelining=false
1. xla_should_allow_loop_variant_parameter_in_chain=kEnabled
2. xla_should_add_loop_invariant_op_in_chain=kEnabled
3. xla_tpu_enable_ici_ag_pipelining=true
1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto
2. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto
3. xla_tpu_enable_ici_ag_pipelining=true/false
v5e/Async
xla_enable_async_all_gather
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_gather
این 3 پرچم باید به همراه برای فعال کردن عملیات ناهمزمان all-gather در v5e استفاده شوند. 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/Async
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_reduce
این 2 پرچم باید به همراه برای فعال کردن عملیات کاهش همه جانبه ناهمزمان در v5e استفاده شوند. 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
این پرچم برای عملیات همه جمع‌آوری محدود به تأخیر (یعنی در اندازه کوچک) در نظر گرفته شده است. فعال کردن این امر بهینه‌سازی‌های خاصی را آغاز می‌کند که می‌تواند زمان اجرا را برای همه گردآورنده‌های محدود به تأخیر کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده می شود. 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
این پرچم برای عملیات همه جمع‌آوری محدود به تأخیر (یعنی در اندازه کوچک) در نظر گرفته شده است. فعال کردن این امر بهینه‌سازی‌های خاصی را آغاز می‌کند که می‌تواند زمان اجرا را برای کاهش‌های همه جانبه محدود به تأخیر کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده می شود. 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
این پرچم برای عملیات همه جمع‌آوری محدود به تأخیر (یعنی در اندازه کوچک) در نظر گرفته شده است. فعال کردن این امر بهینه‌سازی‌های خاصی را آغاز می‌کند که می‌تواند زمان اجرا را برای جابجایی‌های جمعی محدود به تأخیر کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده می شود. 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
این پرچم برای عملیات همه جمع‌آوری محدود به تأخیر (یعنی در اندازه کوچک) در نظر گرفته شده است. فعال کردن این امر بهینه‌سازی‌های خاصی را آغاز می‌کند که می‌تواند زمان اجرا را برای همه به همه محدود به تأخیر کاهش دهد. معمولاً در بارهای کاری استنتاج استفاده می شود. 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 | این پرچم مقدار Scratchpad 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 استفاده می شود. مقدار 0 همه سایت‌ها را کارآمد می‌داند و مقدار 1 مستلزم آن است که مقدار بایت‌های استفاده شده در سایت حداقل به اندازه بایت‌های کپی غیرهمگام باشد. | 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 ارائه شده است. اینها فقط در صورتی باید تنظیم شوند که در طول کامپایل مدل با خطاهای 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
این پرچم نوع کاهش + پخش از ترکیبات را فعال می کند و ممکن است استفاده از حافظه را کاهش دهد. 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
SPMD
xla_jf_spmd_threshold_for_windowed_einsum_mib
این پرچم آستانه پایین‌ترین اندازه نقطه را برای راه‌اندازی ماتمول جمعی تعیین می‌کند. تنظیم آن بر روی یک مقدار بالاتر، حافظه را به قیمت از دست دادن فرصت‌های انجام ماتمول جمعی ذخیره می‌کند. xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 10Mb~1Gb (ie 10*1024*1024 ~ 1024*1024*1024) [0, 9223372036854775807]

سایر پرچم های رایج

پرچم تایپ کنید یادداشت ها
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 بولی (درست/نادرست) امکان ادغام همه جمع‌آوری‌ها با پیچیدگی/کاهش‌های همه جانبه را فراهم می‌کند.
xla_tpu_enable_ag_backward_pipelining بولی (درست/نادرست) خطوط لوله از طریق حلقه‌های اسکن، همه را جمع‌آوری می‌کند (در حال حاضر با مقیاس بزرگ، همه جمع‌آوری می‌شوند).

پرچم های GPU XLA

پرچم تایپ کنید یادداشت ها
xla_gpu_enable_latency_hiding_scheduler بولی (درست/نادرست) این پرچم زمان‌بندی‌های پنهان تأخیر را قادر می‌سازد تا ارتباطات ناهمزمان را با محاسبات به طور مؤثری همپوشانی کنند. مقدار پیش فرض False است.
xla_gpu_enable_triton_gemm بولی (درست/نادرست) از ضرب ماتریس مبتنی بر تریتون استفاده کنید.
xla_gpu_graph_level پرچم (0-3) پرچم قدیمی برای تنظیم سطح نمودار GPU. در موارد استفاده جدید از xla_gpu_enable_command_buffer استفاده کنید. 0 = خاموش؛ 1 = گرفتن فیوژن و memcpys. 2 = گرفتن سنگهای قیمتی. 3 = گرفتن پیچیدگی ها.
xla_gpu_all_reduce_combine_threshold_bytes عدد صحیح (بایت) این پرچم‌ها زمانی را تنظیم می‌کنند که چند AllGather / ReduceScatter / AllReduce را در یک AllGather / ReduceScatter / AllReduce بزرگ ترکیب کنند تا زمان صرف شده برای ارتباطات بین دستگاهی کاهش یابد. به عنوان مثال، برای آستانه‌های AllGather/ReduceScatter در بار کاری مبتنی بر ترانسفورماتور، آن‌ها را به اندازه کافی بالا تنظیم کنید تا حداقل وزن یک لایه ترانسفورماتور AllGather/ReduceScatter را ترکیب کنید. به طور پیش‌فرض، combination_threshold_bytes روی 256 تنظیم شده است.
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 بولی (درست/نادرست) خط لوله کردن دستورالعمل‌های همه جمع‌آوری را فعال کنید.
xla_gpu_enable_pipelined_reduce_scatter بولی (درست/نادرست) خط لوله کردن دستورالعمل‌های کاهش پراکندگی را فعال کنید.
xla_gpu_enable_pipelined_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 بولی (درست/نادرست) عملیات کاهش پراکندگی را با همان ابعاد یا بدون توجه به ابعاد آنها ترکیب کنید.