В этом руководстве представлен тщательно подобранный список ключевых флагов 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 (межчипового межсоединения), что создает больше возможностей для перекрывающегося выполнения. | 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 флага следует использовать совместно для активации асинхронных операций сбора всех данных в версии 5e. | 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 | Эти два флага следует использовать совместно для активации асинхронных операций reduce в версии 5e. | 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 | Этот флаг предназначен для операций сбора данных с высокой задержкой (т.е. небольшого размера). Его включение запускает определенные оптимизации, которые могут сократить время выполнения таких операций. Обычно он используется в задачах вывода результатов. | 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 | Этот флаг задает объем доступной для локального использования памяти 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 Tools ). |
Флаги TPU XLA
| Флаг | Тип | Примечания |
|---|---|---|
xla_tpu_enable_data_parallel_all_reduce_opt | Логическое значение (истина/ложь) | Оптимизация для увеличения возможностей пересечения потоков данных в сетях центров обработки данных (DCN) с использованием алгоритмов all-reduce для параллельного сегментирования данных. |
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
Уровень оптимизации -O1 включает расширенные проходы компилятора для повышения производительности GPU, включая несколько категорий флагов, перечисленных ниже: конвейеризация параллельных вычислений ( xla_gpu_enable_pipelined_all_gather , xla_gpu_enable_pipelined_all_reduce , xla_gpu_enable_pipelined_reduce_scatter ), развертывание цикла while ( 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 | Логическое значение (истина/ложь) | Используйте матричное умножение на основе Triton. |
xla_gpu_enable_command_buffer | Список CommandBufferCmdType | Какие типы команд следует записывать в командные буферы? |
xla_gpu_all_reduce_combine_threshold_bytes | Целое число (байты) | Эти флаги настраивают момент объединения нескольких небольших операций AllGather / ReduceScatter / AllReduce в одну большую операцию AllGather / ReduceScatter / AllReduce для сокращения времени, затрачиваемого на обмен данными между устройствами. Например, для пороговых значений AllGather / ReduceScatter в рабочей нагрузке на основе Transformer следует установить их достаточно высокими, чтобы объединить как минимум AllGather / ReduceScatter с весом, равным весу слоя 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-catter. |
xla_gpu_enable_pipelined_all_reduce | Логическое значение (истина/ложь) | Включить конвейерную обработку всех инструкций reduce. |
xla_gpu_enable_pipelined_host_offloading | Логическое значение (истина/ложь) | Включить конвейерную обработку инструкций по разгрузке вычислений на хосте. |
xla_gpu_enable_while_loop_double_buffering | Логическое значение (истина/ложь) | Включить двойную буферизацию для цикла while. |
xla_gpu_enable_all_gather_combine_by_dim | Логическое значение (истина/ложь) | Объединять все операции сбора данных с одинаковым измерением сбора или независимо от их измерения. |
xla_gpu_enable_reduce_scatter_combine_by_dim | Логическое значение (истина/ложь) | Объединяйте операции уменьшения рассеяния с одинаковым измерением или независимо от его измерения. |