Это руководство предлагает тщательно подобранный набор ключевых флагов 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_chain2. xla_should_add_loop_invariant_op_in_chain3. xla_tpu_enable_ici_ag_pipelining | Эти 3 флага следует использовать совместно, чтобы включить коллективную конвейеризацию операций сбора данных ICI (Interchip-Interconnect), что создает больше возможностей для перекрывающегося выполнения. | 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled2. xla_should_add_loop_invariant_op_in_chain=kDisabled3. xla_tpu_enable_ici_ag_pipelining=false | 1. xla_should_allow_loop_variant_parameter_in_chain=kEnabled2. xla_should_add_loop_invariant_op_in_chain=kEnabled3. xla_tpu_enable_ici_ag_pipelining=true | 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto2. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto3. 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 | Эти 3 флага следует использовать совместно для активации асинхронных операций сбора всех данных на v5e. | 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 | Эти 2 флага следует использовать совместно для активации асинхронных операций all-reduce на v5e. | 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). Включение этого флага запускает определённые оптимизации, которые могут сократить время выполнения 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 с ограниченной задержкой (т.е. небольших по размеру). Включение этого флага запускает определённые оптимизации, которые могут сократить время выполнения операций collective-permutes с ограниченной задержкой. Обычно он используется в рабочих нагрузках вывода. | 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-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. Значение 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 | Этот флаг включает слияния типа «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 | Этот флаг устанавливает нижний порог минимального размера точки для запуска коллективного выполнения. Установка большего значения позволит сэкономить память за счёт потери возможности выполнения коллективного выполнения. | 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 | Этот флаг включает аналитическую оценку, которая максимизирует перекрытие вычислений и коммуникаций на графических процессорах. | 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 | Булевое значение (истина/ложь) | Позволяет объединять все-сборы со свертками/всеми-свертками. |
xla_tpu_enable_ag_backward_pipelining | Булевое значение (истина/ложь) | Конвейеры всех сборов (в настоящее время мегамасштабных всех сборов) в обратном направлении через циклы сканирования. |
Флаги XLA графического процессора
| Флаг | Тип | Примечания |
|---|---|---|
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 | Булевое значение (истина/ложь) | Используйте матричное умножение на основе Triton. |
xla_gpu_enable_command_buffer | Список CommandBufferCmdType | Какие типы команд следует фиксировать в буферах команд. |
xla_gpu_all_reduce_combine_threshold_bytes | Целое число (байты) | Эти флаги определяют, когда следует объединять несколько небольших AllGather / ReduceScatter / AllReduce в один большой AllGather / ReduceScatter / AllReduce, чтобы сократить время, затрачиваемое на взаимодействие между устройствами. Например, для пороговых значений AllGather / ReduceScatter в рабочей нагрузке на базе Transformer рекомендуется установить их достаточно высокими, чтобы объединить вес хотя бы одного слоя Transformer. По умолчанию combine_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 | Булевое значение (истина/ложь) | Включить конвейеризацию инструкций reduce-scatter. |
xla_gpu_enable_pipelined_all_reduce | Булевое значение (истина/ложь) | Включить конвейеризацию всех инструкций по сокращению. |
xla_gpu_enable_while_loop_double_buffering | Булевое значение (истина/ложь) | Включить двойную буферизацию для цикла while. |
xla_gpu_enable_all_gather_combine_by_dim | Булевое значение (истина/ложь) | Объедините операции по сбору всех предметов с одинаковым измерением сбора или независимо от их измерения. |
xla_gpu_enable_reduce_scatter_combine_by_dim | Булевое значение (истина/ложь) | Объедините операции уменьшения-разброса с одинаковым измерением или независимо от их измерения. |