این راهنما مجموعهای از پرچمهای کلیدی 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/Asyncxla_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/Asyncxla_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 |
SPMDxla_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 | بولی (درست/نادرست) | عملیات کاهش پراکندگی را با همان ابعاد یا بدون توجه به ابعاد آنها ترکیب کنید. |